Openstatus www.openstatus.dev

Add ratelimiter (#1185)

* fix workflow

* fix workflow

* ci: apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

authored by

Thibault Le Ouay
autofix-ci[bot]
and committed by
GitHub
58da54a4 60b2bd59

+53 -89
+2 -1
apps/workflows/package.json
··· 9 9 "@google-cloud/tasks": "4.0.1", 10 10 "@openstatus/db": "workspace:*", 11 11 "@openstatus/emails": "workspace:*", 12 - "@openstatus/utils": "workspace:*", 13 12 "@openstatus/upstash": "workspace:*", 13 + "@openstatus/utils": "workspace:*", 14 14 "hono": "4.5.3", 15 + "limiter": "^3.0.0", 15 16 "zod": "3.23.8" 16 17 }, 17 18 "devDependencies": {
+7 -2
apps/workflows/src/cron/monitor.ts
··· 1 + import { CloudTasksClient } from "@google-cloud/tasks"; 1 2 import type { google } from "@google-cloud/tasks/build/protos/protos"; 2 3 import { 3 4 and, ··· 12 13 schema, 13 14 } from "@openstatus/db"; 14 15 import { session, user } from "@openstatus/db/src/schema"; 15 - 16 - import { CloudTasksClient } from "@google-cloud/tasks"; 17 16 import { 18 17 MonitorDeactivationEmail, 19 18 MonitorPausedEmail, 20 19 } from "@openstatus/emails"; 21 20 import { sendWithRender } from "@openstatus/emails/src/send"; 22 21 import { Redis } from "@openstatus/upstash"; 22 + import { RateLimiter } from "limiter"; 23 23 import { z } from "zod"; 24 24 import { env } from "../env"; 25 25 ··· 38 38 env().GCP_LOCATION, 39 39 "workflow", 40 40 ); 41 + 42 + const limiter = new RateLimiter({ tokensPerInterval: 50, interval: "minute" }); 41 43 42 44 export async function LaunchMonitorWorkflow() { 43 45 // Expires is one month after last connection, so if we want to reach people who connected 3 months ago we need to check for people with expires 2 months ago ··· 127 129 const allResult = []; 128 130 129 131 for (const user of users) { 132 + await limiter.removeTokens(1); 130 133 const workflow = workflowInit({ user }); 131 134 allResult.push(workflow); 132 135 } ··· 154 157 // Let's check if the user is in the workflow 155 158 const isMember = await redis.sismember("workflow:users", user.userId); 156 159 if (isMember) { 160 + console.log(`user workflow already started for ${user.userId}`); 157 161 return; 158 162 } 159 163 // check if user has some running monitors ··· 166 170 ), 167 171 ); 168 172 if (nbRunningMonitor > 0) { 173 + console.log(`user has running monitors for ${user.userId}`); 169 174 return; 170 175 } 171 176 await CreateTask({
+44 -86
pnpm-lock.yaml
··· 77 77 version: 0.2.1(hono@4.5.3)(zod@3.23.8) 78 78 '@libsql/client': 79 79 specifier: 0.14.0 80 - version: 0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.5) 80 + version: 0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3) 81 81 '@openstatus/db': 82 82 specifier: workspace:* 83 83 version: link:../../packages/db ··· 92 92 version: 2.6.2 93 93 drizzle-orm: 94 94 specifier: 0.35.3 95 - version: 0.35.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.5))(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(@types/react@19.0.1)(better-sqlite3@11.7.0)(bun-types@1.1.40)(react@19.0.0) 95 + version: 0.35.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(@types/react@19.0.1)(better-sqlite3@11.7.0)(bun-types@1.2.2)(react@19.0.0) 96 96 hono: 97 97 specifier: 4.5.3 98 98 version: 4.5.3 ··· 223 223 version: 3.9.1(react-hook-form@7.54.1(react@19.0.0)) 224 224 '@libsql/client': 225 225 specifier: 0.14.0 226 - version: 0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.5) 226 + version: 0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3) 227 227 '@openstatus/analytics': 228 228 specifier: workspace:* 229 229 version: link:../../packages/analytics ··· 495 495 hono: 496 496 specifier: 4.5.3 497 497 version: 4.5.3 498 + limiter: 499 + specifier: ^3.0.0 500 + version: 3.0.0 498 501 zod: 499 502 specifier: 3.23.8 500 503 version: 3.23.8 ··· 504 507 version: link:../../packages/tsconfig 505 508 '@types/bun': 506 509 specifier: latest 507 - version: 1.1.14 510 + version: 1.2.2 508 511 509 512 packages/analytics: 510 513 dependencies: ··· 615 618 version: 0.7.0(typescript@5.6.2)(zod@3.23.8) 616 619 drizzle-orm: 617 620 specifier: 0.35.3 618 - version: 0.35.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(@types/react@19.0.1)(better-sqlite3@11.4.0)(bun-types@1.1.40)(react@19.0.0) 621 + version: 0.35.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(@types/react@19.0.1)(better-sqlite3@11.4.0)(bun-types@1.2.2)(react@19.0.0) 619 622 drizzle-zod: 620 623 specifier: 0.5.1 621 - version: 0.5.1(drizzle-orm@0.35.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(@types/react@19.0.1)(better-sqlite3@11.4.0)(bun-types@1.1.40)(react@19.0.0))(zod@3.23.8) 624 + version: 0.5.1(drizzle-orm@0.35.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(@types/react@19.0.1)(better-sqlite3@11.4.0)(bun-types@1.2.2)(react@19.0.0))(zod@3.23.8) 622 625 zod: 623 626 specifier: 3.23.8 624 627 version: 3.23.8 ··· 916 919 version: 3.4.3(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.2)) 917 920 tsup: 918 921 specifier: 7.2.0 919 - version: 7.2.0(postcss@8.4.49)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.2))(typescript@5.6.2) 922 + version: 7.2.0(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.2))(typescript@5.6.2) 920 923 typescript: 921 924 specifier: 5.6.2 922 925 version: 5.6.2 ··· 4339 4342 4340 4343 '@scalar/snippetz-core@0.1.4': 4341 4344 resolution: {integrity: sha512-NMnDzl5dHgUj0k8ZtfssDfy6wv1wO/M+GhpdGr/4OH3m8UZB27CZ3hM7wXh+fm75hZO5XIBsANW20kJVnzpaHg==} 4345 + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. 4342 4346 4343 4347 '@scalar/snippetz-plugin-js-fetch@0.1.1': 4344 4348 resolution: {integrity: sha512-9ODfi0OaEvZHdCe09c91eH1R5QPynL+FPxtYuK/9K5ElRE2NqxYysri9AsgOhr1Fqhpy5qKzDj4Gi5FHsJSGXw==} 4349 + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. 4345 4350 4346 4351 '@scalar/snippetz-plugin-js-ofetch@0.1.1': 4347 4352 resolution: {integrity: sha512-fPIJlY4q1j5gbnsYSxix0IJ7hqcvm8Ly7iVoK66vaL738AIMiGZMhGKtLrTVPad77PimwO+jeq5iDIZ495UY7Q==} 4353 + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. 4348 4354 4349 4355 '@scalar/snippetz-plugin-node-fetch@0.1.2': 4350 4356 resolution: {integrity: sha512-kD6erA6aAqjHkj+JrJQKqrqcH4fnCrLi2uYw16CmELIGtqVHFau7ew2c087y4OQTltdi5rEk2zj5zOBu9yaS3Q==} 4357 + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. 4351 4358 4352 4359 '@scalar/snippetz-plugin-node-ofetch@0.1.1': 4353 4360 resolution: {integrity: sha512-9NpvdMKebg82FkVWoWyOxd1JXAB8KNxmrsFFwQKNjhAw0A5hjNR5oW9lD+FtB1Laupg2FNtw9dcCydnF+LcCWw==} 4361 + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. 4354 4362 4355 4363 '@scalar/snippetz-plugin-node-undici@0.1.6': 4356 4364 resolution: {integrity: sha512-CivUl7wgZ6vlUb01FMdqOt/NVyOWqT0iHZRp5YlPp1pflXZLnAyi5antUTtBEUHUtHM2EO/WR7vx4kRsPcrgLg==} 4365 + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. 4357 4366 4358 4367 '@scalar/snippetz@0.1.6': 4359 4368 resolution: {integrity: sha512-z3DEpT/FIZq9yeHL/tz2v6WvdHIiZ4uvK96RdeTPKUUJ0IXvA5vONG3PF5LE0Q/408PCzWsZpGs9f97ztaeJSQ==} ··· 4954 4963 '@types/babel__traverse@7.20.6': 4955 4964 resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} 4956 4965 4957 - '@types/bun@1.1.14': 4958 - resolution: {integrity: sha512-opVYiFGtO2af0dnWBdZWlioLBoxSdDO5qokaazLhq8XQtGZbY4pY3/JxY8Zdf/hEwGubbp7ErZXoN1+h2yesxA==} 4966 + '@types/bun@1.2.2': 4967 + resolution: {integrity: sha512-tr74gdku+AEDN5ergNiBnplr7hpDp3V1h7fqI2GcR/rsUaM39jpSeKH0TFibRvU0KwniRx5POgaYnaXbk0hU+w==} 4959 4968 4960 4969 '@types/caseless@0.12.4': 4961 4970 resolution: {integrity: sha512-2in/lrHRNmDvHPgyormtEralhPcN3An1gLjJzj2Bw145VBxkQ75JEXW6CTdMAwShiHQcYsl2d10IjQSdJSJz4g==} ··· 5062 5071 '@types/node@17.0.45': 5063 5072 resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} 5064 5073 5065 - '@types/node@20.12.14': 5066 - resolution: {integrity: sha512-scnD59RpYD91xngrQQLGkE+6UrHUPzeKZWhhjBSa3HSkwjbQc38+q3RoIVEwxQGRw3M+j5hpNAM+lgV3cVormg==} 5067 - 5068 5074 '@types/node@20.14.8': 5069 5075 resolution: {integrity: sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==} 5070 5076 ··· 5144 5150 5145 5151 '@types/web-bluetooth@0.0.20': 5146 5152 resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} 5147 - 5148 - '@types/ws@8.5.10': 5149 - resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} 5150 5153 5151 5154 '@types/ws@8.5.13': 5152 5155 resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} ··· 5689 5692 bun-types@1.0.8: 5690 5693 resolution: {integrity: sha512-2dNB+dBwAcFW7RSd4y5vKycRjouKVklSwPk4EjBKWvcMYUBOqZGGNzV7+b2tfKBG3BeRXnozbnegVKR1azuATg==} 5691 5694 5692 - bun-types@1.1.37: 5693 - resolution: {integrity: sha512-C65lv6eBr3LPJWFZ2gswyrGZ82ljnH8flVE03xeXxKhi2ZGtFiO4isRKTKnitbSqtRAcaqYSR6djt1whI66AbA==} 5694 - 5695 - bun-types@1.1.40: 5696 - resolution: {integrity: sha512-yVXBZ1/ATZJD5FvfhDydw45ED8DlmTflumPKj56p5/GLjYiHBZkirzad6MU6MSZKgZ4o1/Ks5lL/Jgg/fRXBSQ==} 5695 + bun-types@1.2.2: 5696 + resolution: {integrity: sha512-RCbMH5elr9gjgDGDhkTTugA21XtJAy/9jkKe/G3WR2q17VPGhcquf9Sir6uay9iW+7P/BV0CAHA1XlHXMAVKHg==} 5697 5697 5698 5698 bundle-require@4.0.2: 5699 5699 resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==} ··· 7461 7461 7462 7462 libsql@0.4.5: 7463 7463 resolution: {integrity: sha512-sorTJV6PNt94Wap27Sai5gtVLIea4Otb2LUiAUyr3p6BPOScGMKGt5F1b5X/XgkNtcsDKeX5qfeBDj+PdShclQ==} 7464 + cpu: [x64, arm64, wasm32] 7464 7465 os: [darwin, linux, win32] 7465 7466 7466 7467 lilconfig@2.1.0: ··· 7474 7475 lilconfig@3.1.3: 7475 7476 resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 7476 7477 engines: {node: '>=14'} 7478 + 7479 + limiter@3.0.0: 7480 + resolution: {integrity: sha512-hev7DuXojsTFl2YwyzUJMDnZ/qBDd3yZQLSH3aD4tdL1cqfc3TMnoecEJtWFaQFdErZsKoFMBTxF/FBSkgDbEg==} 7477 7481 7478 7482 lines-and-columns@1.2.4: 7479 7483 resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} ··· 7519 7523 7520 7524 lodash.get@4.4.2: 7521 7525 resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} 7526 + deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. 7522 7527 7523 7528 lodash.isplainobject@4.0.6: 7524 7529 resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} ··· 12255 12260 - bufferutil 12256 12261 - utf-8-validate 12257 12262 12258 - '@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.5)': 12259 - dependencies: 12260 - '@libsql/core': 0.14.0 12261 - '@libsql/hrana-client': 0.7.0(bufferutil@4.0.8)(utf-8-validate@6.0.5) 12262 - js-base64: 3.7.5 12263 - libsql: 0.4.5 12264 - promise-limit: 2.7.0 12265 - transitivePeerDependencies: 12266 - - bufferutil 12267 - - utf-8-validate 12268 - 12269 12263 '@libsql/core@0.14.0': 12270 12264 dependencies: 12271 12265 js-base64: 3.7.5 ··· 12286 12280 - bufferutil 12287 12281 - utf-8-validate 12288 12282 12289 - '@libsql/hrana-client@0.7.0(bufferutil@4.0.8)(utf-8-validate@6.0.5)': 12290 - dependencies: 12291 - '@libsql/isomorphic-fetch': 0.3.1 12292 - '@libsql/isomorphic-ws': 0.1.5(bufferutil@4.0.8)(utf-8-validate@6.0.5) 12293 - js-base64: 3.7.5 12294 - node-fetch: 3.3.2 12295 - transitivePeerDependencies: 12296 - - bufferutil 12297 - - utf-8-validate 12298 - 12299 12283 '@libsql/isomorphic-fetch@0.3.1': {} 12300 12284 12301 12285 '@libsql/isomorphic-ws@0.1.5(bufferutil@4.0.8)(utf-8-validate@6.0.3)': 12302 12286 dependencies: 12303 - '@types/ws': 8.5.10 12287 + '@types/ws': 8.5.13 12304 12288 ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@6.0.3) 12305 - transitivePeerDependencies: 12306 - - bufferutil 12307 - - utf-8-validate 12308 - 12309 - '@libsql/isomorphic-ws@0.1.5(bufferutil@4.0.8)(utf-8-validate@6.0.5)': 12310 - dependencies: 12311 - '@types/ws': 8.5.10 12312 - ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@6.0.5) 12313 12289 transitivePeerDependencies: 12314 12290 - bufferutil 12315 12291 - utf-8-validate ··· 14772 14748 dependencies: 14773 14749 '@babel/types': 7.26.3 14774 14750 14775 - '@types/bun@1.1.14': 14751 + '@types/bun@1.2.2': 14776 14752 dependencies: 14777 - bun-types: 1.1.37 14753 + bun-types: 1.2.2 14778 14754 14779 14755 '@types/caseless@0.12.4': {} 14780 14756 ··· 14884 14860 14885 14861 '@types/node@17.0.45': {} 14886 14862 14887 - '@types/node@20.12.14': 14888 - dependencies: 14889 - undici-types: 5.26.5 14890 - 14891 14863 '@types/node@20.14.8': 14892 14864 dependencies: 14893 14865 undici-types: 5.26.5 ··· 14979 14951 14980 14952 '@types/web-bluetooth@0.0.20': {} 14981 14953 14982 - '@types/ws@8.5.10': 14983 - dependencies: 14984 - '@types/node': 22.10.2 14985 - 14986 14954 '@types/ws@8.5.13': 14987 14955 dependencies: 14988 14956 '@types/node': 22.10.2 14989 - optional: true 14990 14957 14991 14958 '@uiw/codemirror-themes@4.23.0(@codemirror/language@6.10.2)(@codemirror/state@6.4.1)(@codemirror/view@6.28.4)': 14992 14959 dependencies: ··· 15734 15701 15735 15702 bun-types@1.0.8: {} 15736 15703 15737 - bun-types@1.1.37: 15704 + bun-types@1.2.2: 15738 15705 dependencies: 15739 - '@types/node': 20.12.14 15740 - '@types/ws': 8.5.10 15741 - 15742 - bun-types@1.1.40: 15743 - dependencies: 15744 - '@types/node': 20.12.14 15706 + '@types/node': 22.10.2 15745 15707 '@types/ws': 8.5.13 15746 - optional: true 15747 15708 15748 15709 bundle-require@4.0.2(esbuild@0.18.20): 15749 15710 dependencies: ··· 16270 16231 transitivePeerDependencies: 16271 16232 - supports-color 16272 16233 16273 - drizzle-orm@0.35.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(@types/react@19.0.1)(better-sqlite3@11.4.0)(bun-types@1.1.40)(react@19.0.0): 16234 + drizzle-orm@0.35.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(@types/react@19.0.1)(better-sqlite3@11.4.0)(bun-types@1.2.2)(react@19.0.0): 16274 16235 dependencies: 16275 16236 '@libsql/client-wasm': 0.14.0 16276 16237 optionalDependencies: ··· 16280 16241 '@types/pg': 8.11.10 16281 16242 '@types/react': 19.0.1 16282 16243 better-sqlite3: 11.4.0 16283 - bun-types: 1.1.40 16244 + bun-types: 1.2.2 16284 16245 react: 19.0.0 16285 16246 16286 - drizzle-orm@0.35.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.5))(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(@types/react@19.0.1)(better-sqlite3@11.7.0)(bun-types@1.1.40)(react@19.0.0): 16247 + drizzle-orm@0.35.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0)(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(@types/react@19.0.1)(better-sqlite3@11.7.0)(bun-types@1.2.2)(react@19.0.0): 16287 16248 dependencies: 16288 16249 '@libsql/client-wasm': 0.14.0 16289 16250 optionalDependencies: 16290 16251 '@cloudflare/workers-types': 4.20241230.0 16291 - '@libsql/client': 0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.5) 16252 + '@libsql/client': 0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3) 16292 16253 '@opentelemetry/api': 1.9.0 16293 16254 '@types/pg': 8.11.10 16294 16255 '@types/react': 19.0.1 16295 16256 better-sqlite3: 11.7.0 16296 - bun-types: 1.1.40 16257 + bun-types: 1.2.2 16297 16258 react: 19.0.0 16298 16259 16299 - drizzle-zod@0.5.1(drizzle-orm@0.35.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(@types/react@19.0.1)(better-sqlite3@11.4.0)(bun-types@1.1.40)(react@19.0.0))(zod@3.23.8): 16260 + drizzle-zod@0.5.1(drizzle-orm@0.35.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(@types/react@19.0.1)(better-sqlite3@11.4.0)(bun-types@1.2.2)(react@19.0.0))(zod@3.23.8): 16300 16261 dependencies: 16301 - drizzle-orm: 0.35.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(@types/react@19.0.1)(better-sqlite3@11.4.0)(bun-types@1.1.40)(react@19.0.0) 16262 + drizzle-orm: 0.35.3(@cloudflare/workers-types@4.20241230.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.14.0(bufferutil@4.0.8)(utf-8-validate@6.0.3))(@opentelemetry/api@1.9.0)(@types/pg@8.11.10)(@types/react@19.0.1)(better-sqlite3@11.4.0)(bun-types@1.2.2)(react@19.0.0) 16302 16263 zod: 3.23.8 16303 16264 16304 16265 dset@3.1.4: {} ··· 17724 17685 17725 17686 lilconfig@3.1.3: {} 17726 17687 17688 + limiter@3.0.0: {} 17689 + 17727 17690 lines-and-columns@1.2.4: {} 17728 17691 17729 17692 linkedom@0.14.26: ··· 19111 19074 camelcase-css: 2.0.1 19112 19075 postcss: 8.4.49 19113 19076 19114 - postcss-load-config@4.0.1(postcss@8.4.49)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.2)): 19077 + postcss-load-config@4.0.1(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.2)): 19115 19078 dependencies: 19116 19079 lilconfig: 2.1.0 19117 19080 yaml: 2.3.3 19118 19081 optionalDependencies: 19119 - postcss: 8.4.49 19082 + postcss: 8.4.38 19120 19083 ts-node: 10.9.2(@types/node@20.8.0)(typescript@5.6.2) 19121 19084 19122 19085 postcss-load-config@4.0.1(postcss@8.4.49)(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)): ··· 20750 20713 20751 20714 tslib@2.8.1: {} 20752 20715 20753 - tsup@7.2.0(postcss@8.4.49)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.2))(typescript@5.6.2): 20716 + tsup@7.2.0(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.2))(typescript@5.6.2): 20754 20717 dependencies: 20755 20718 bundle-require: 4.0.2(esbuild@0.18.20) 20756 20719 cac: 6.7.14 ··· 20760 20723 execa: 5.1.1 20761 20724 globby: 11.1.0 20762 20725 joycon: 3.1.1 20763 - postcss-load-config: 4.0.1(postcss@8.4.49)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.2)) 20726 + postcss-load-config: 4.0.1(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.2)) 20764 20727 resolve-from: 5.0.0 20765 20728 rollup: 3.29.4 20766 20729 source-map: 0.8.0-beta.0 20767 20730 sucrase: 3.34.0 20768 20731 tree-kill: 1.2.2 20769 20732 optionalDependencies: 20770 - postcss: 8.4.49 20733 + postcss: 8.4.38 20771 20734 typescript: 5.6.2 20772 20735 transitivePeerDependencies: 20773 20736 - supports-color ··· 21438 21401 optionalDependencies: 21439 21402 bufferutil: 4.0.8 21440 21403 utf-8-validate: 6.0.3 21441 - 21442 - ws@8.17.0(bufferutil@4.0.8)(utf-8-validate@6.0.5): 21443 - optionalDependencies: 21444 - bufferutil: 4.0.8 21445 - utf-8-validate: 6.0.5 21446 21404 21447 21405 ws@8.17.1(bufferutil@4.0.8)(utf-8-validate@6.0.5): 21448 21406 optionalDependencies: