From 77f7ad46608e92677ce2de85e16c51b7ec93da26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesus=20Manuel=20Pi=C3=B1eiro=20Cid?= Date: Mon, 7 Sep 2026 11:03:44 +0200 Subject: [PATCH 1/3] chore: initial commit From 9013268a54ee86b7a0f4663a1aedd203a2b51d30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesus=20Manuel=20Pi=C3=B1eiro=20Cid?= Date: Mon, 7 Sep 2026 11:05:40 +0200 Subject: [PATCH 2/3] fix: remove image-size, bound multer upload size, fix mastra pin mismatch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes the two remaining high-severity image-size DoS advisories (GHSA-w3rx-r6r6-pgpr, GHSA-5p2g-fcmc-qvqq) by removing the dependency's usage entirely rather than working around it - no upstream fix exists for 2.0.2. - Replaced the 5 imageSize(buffer) call sites (postUploadImage v2 controller, and the grayscale/flip/negate/remove-background job handlers) with sharp(buffer).metadata(), which is already a direct dependency and already used by 3 of these same files for the actual pixel transform. This also moves dimension reading off the synchronous main-thread parse path onto sharp's libuv thread pool, and incidentally fixes a latent unhandled-promise-rejection in postUploadImage.ts where the dimensions call ran before the try/catch and before the file-existence check. - Removed image-size from code/package.json. - Bumped the exact-pinned @mastra/memory 1.19.0 -> 1.28.2: this project's live conversation-memory backend (wired up in connectors.ts) turned out to carry its own transitive image-size dependency with the same synchronous imageSize(buffer) call on AI chat image attachments - a reachable path the 5 direct call sites above didn't cover. 1.28.2 drops image-size in favour of the already timeout-guarded probe-image-size. - Bumped the exact-pinned @mastra/core 1.36.0 -> 1.64.0: required by the @mastra/memory bump above, which imports MAX_KNOWLEDGE_NODE_DESCRIPTION_LENGTH from @mastra/core/storage - an export that only exists from @mastra/core@1.63.1 onwards. The old 1.36.0 pin satisfied @mastra/memory's peer range (>=1.4.1-0 <2.0.0-0) semver-wise but not its actual runtime API surface, which surfaced as a hard crash on `npm run start` (SyntaxError: the requested module does not provide an export named 'MAX_KNOWLEDGE_NODE_DESCRIPTION_LENGTH'). Verified all ~40 named imports @mastra/memory@1.28.2 pulls from every @mastra/core/* subpath it uses are present at 1.64.0, not just the one that happened to surface first. Bonus: this also resolves a pre-existing peer conflict (mastra@1.27.3 requires @mastra/core >=1.50.0, which 1.36.0 already violated) and pulls a fixed @ai-sdk/provider-utils chain, closing the one remaining tracked-as-accepted-risk alert. - Verified image-size has zero occurrences left in the lockfile by exact package name, and npm audit now reports 0 vulnerabilities. Also added limits.fileSize (100mb) to both multer() instances (v1 and v2 routers), which previously accepted uploads of unbounded size. Scoped to size only, not mimetype, since both instances are shared by image *and* video upload routes. Verified via a full clean `npm run verify` (matching the CI/Dockerfile install path), lint, build, and an actual `npm run start` reaching "Server started" with /v1/liveness and /v1/readiness both returning 200 OK. Signed-off-by: Jesus Manuel PiƱeiro Cid --- code/package-lock.json | 376 ++++++------------ code/package.json | 5 +- code/src/api/v1/router.ts | 2 +- .../src/api/v2/controllers/postUploadImage.ts | 6 +- code/src/api/v2/router.ts | 2 +- code/src/workloads/jobs/flip-image/job.ts | 3 +- .../src/workloads/jobs/grayscale-image/job.ts | 3 +- code/src/workloads/jobs/negate-image/job.ts | 3 +- .../jobs/remove-image-background/job.ts | 4 +- 9 files changed, 132 insertions(+), 272 deletions(-) diff --git a/code/package-lock.json b/code/package-lock.json index 4e5080ce..16cc1703 100644 --- a/code/package-lock.json +++ b/code/package-lock.json @@ -23,11 +23,11 @@ "@inditextech/weave-store-standalone": "5.2.2", "@inditextech/weave-types": "5.2.2", "@mastra/ai-sdk": "1.4.3", - "@mastra/core": "1.36.0", + "@mastra/core": "1.64.0", "@mastra/libsql": "1.11.1", "@mastra/loggers": "1.1.1", "@mastra/mcp": "1.8.0", - "@mastra/memory": "1.19.0", + "@mastra/memory": "1.28.2", "@mastra/pg": "1.11.1", "@modelcontextprotocol/node": "^2.0.0-alpha.2", "@modelcontextprotocol/server": "^2.0.0-alpha.2", @@ -49,7 +49,6 @@ "file-type": "^21.3.0", "google-auth-library": "^10.1.0", "helmet": "^8.0.0", - "image-size": "^2.0.2", "install": "^0.13.0", "jsdom": "^26.1.0", "konva": "10.0.2", @@ -113,7 +112,8 @@ "vite-tsconfig-paths": "^6.1.1" } }, - "node_modules/@a2a-js/sdk": { + "node_modules/@a2a-js/sdk-v0_3": { + "name": "@a2a-js/sdk", "version": "0.3.14", "resolved": "https://registry.npmjs.org/@a2a-js/sdk/-/sdk-0.3.14.tgz", "integrity": "sha512-F6Ew1AtPzCLhTn8h9yiqTe7DiDf6XVrSnq9V1YqSl9eWqPm6anMveTiKdCSb/76cW0YiJc24rNaUrVezFFHbqQ==", @@ -141,6 +141,36 @@ } } }, + "node_modules/@a2a-js/sdk-v1": { + "name": "@a2a-js/sdk", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@a2a-js/sdk/-/sdk-1.0.1.tgz", + "integrity": "sha512-CJQdh3Wzwo8qIx5UUkSJ7+7BEI16PB+MXMHHNSmx8JQsQed2HlQgvx1ENOiKUfYA3PlcEvxIwv14dBblhDuPmw==", + "license": "Apache-2.0", + "dependencies": { + "jose": "^6.2.3", + "uuid": "^11.1.0" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@bufbuild/protobuf": "^2.10.2", + "@grpc/grpc-js": "^1.11.0", + "express": "^4.21.2 || ^5.1.0" + }, + "peerDependenciesMeta": { + "@bufbuild/protobuf": { + "optional": true + }, + "@grpc/grpc-js": { + "optional": true + }, + "express": { + "optional": true + } + } + }, "node_modules/@ai-sdk/gateway": { "version": "3.0.118", "resolved": "https://registry.npmjs.org/@ai-sdk/gateway/-/gateway-3.0.118.tgz", @@ -188,9 +218,9 @@ } }, "node_modules/@ai-sdk/provider": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-2.0.3.tgz", - "integrity": "sha512-h88OPkavHTiN9tMn2l5awAznGB0lXzjcLhgR1/rvjB2zlLprsNxbM2tt6OJsHUxduLC3klq0/eqaSf6fX5XVww==", + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-3.0.14.tgz", + "integrity": "sha512-5X1k57JBJ4H7H1QjX7CnJYAB1I19r/trVZTMcSms7/kLNZ8RaU4Nt2agcwZzv82Hfx6Q7/TOLU7agAKeFfc8cA==", "license": "Apache-2.0", "dependencies": { "json-schema": "^0.4.0" @@ -199,33 +229,16 @@ "node": ">=18" } }, - "node_modules/@ai-sdk/provider-utils": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-2.2.8.tgz", - "integrity": "sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA==", - "license": "Apache-2.0", - "dependencies": { - "@ai-sdk/provider": "1.1.3", - "nanoid": "^3.3.8", - "secure-json-parse": "^2.7.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "zod": "^3.23.8" - } - }, - "node_modules/@ai-sdk/provider-utils-v5": { + "node_modules/@ai-sdk/provider-utils-v6": { "name": "@ai-sdk/provider-utils", - "version": "3.0.25", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-3.0.25.tgz", - "integrity": "sha512-CvsRu+32Y8a167s+lrIBtsybvgTHp8j9y+6BeTvLeoW3Q+okw/b4CnNUFOLIXsRaKHQKAH+IHNJPYWywfpw0LA==", + "version": "4.0.40", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-4.0.40.tgz", + "integrity": "sha512-OL5IrpUm9Y8Dwy+w/vvFwPotS6m52O9W0op2oXgXdCROMJIBalBI0oro6OIBYkPxvm5Xg02GSkoQN25RlR0bnw==", "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "2.0.3", - "@standard-schema/spec": "^1.0.0", - "eventsource-parser": "^3.0.6" + "@ai-sdk/provider": "3.0.14", + "@standard-schema/spec": "^1.1.0", + "eventsource-parser": "^3.0.8" }, "engines": { "node": ">=18" @@ -234,47 +247,42 @@ "zod": "^3.25.76 || ^4.1.8" } }, - "node_modules/@ai-sdk/provider-utils-v6": { + "node_modules/@ai-sdk/provider-utils-v7": { "name": "@ai-sdk/provider-utils", - "version": "4.0.27", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-4.0.27.tgz", - "integrity": "sha512-ubkAJ+xODouwtmN1tYlvTPphH1hPOBfZaEQe8U7skGvFAnIRs9PPpsq57bC2+Ky/MB4yzhd6YOsxTAx9sGpazw==", + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-5.0.13.tgz", + "integrity": "sha512-fScDJMDnTbx32kLDQqp0MvPjvwkgiwvlBxlmIg7XW5PbS91LG6JjH3PQG+34oMFglqfpQA355e24OdGj5PPoDw==", "license": "Apache-2.0", "dependencies": { - "@ai-sdk/provider": "3.0.10", + "@ai-sdk/provider": "4.0.4", "@standard-schema/spec": "^1.1.0", + "@workflow/serde": "4.1.0", "eventsource-parser": "^3.0.8" }, "engines": { - "node": ">=18" + "node": ">=22" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, - "node_modules/@ai-sdk/provider-utils-v6/node_modules/@ai-sdk/provider": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-3.0.10.tgz", - "integrity": "sha512-Q3BZ27qfpYqnCYGvE3vt+Qi6LGOF9R5Nmzn+9JoM1lCRsD9mYaIhfJLkSunN48nfGXJ6n+XNV0J/XVpqGQl7Dw==", + "node_modules/@ai-sdk/provider-utils-v7/node_modules/@ai-sdk/provider": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-4.0.4.tgz", + "integrity": "sha512-tbHKNLirllUNF3ZlkCsXnwab2ZV1Sl4b1H/Cp9ruCce15IBmskE8Gwkk0yo9xDWY+jho2of7lVXtwSsyrq7cwQ==", "license": "Apache-2.0", "dependencies": { "json-schema": "^0.4.0" }, "engines": { - "node": ">=18" + "node": ">=22" } }, - "node_modules/@ai-sdk/provider-utils/node_modules/@ai-sdk/provider": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-1.1.3.tgz", - "integrity": "sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==", - "license": "Apache-2.0", - "dependencies": { - "json-schema": "^0.4.0" - }, - "engines": { - "node": ">=18" - } + "node_modules/@ai-sdk/provider-utils-v7/node_modules/@workflow/serde": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@workflow/serde/-/serde-4.1.0.tgz", + "integrity": "sha512-pav4F2BoirECWR7Nf1TKt+2eETcBj7jj4cBefQ8VXQCA6NPkaKeLfj/zMgi+3zYV5ZIBT4GuUiphsj0/b9hPQQ==", + "license": "Apache-2.0" }, "node_modules/@ai-sdk/provider-v5": { "name": "@ai-sdk/provider", @@ -291,9 +299,9 @@ }, "node_modules/@ai-sdk/provider-v6": { "name": "@ai-sdk/provider", - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-3.0.10.tgz", - "integrity": "sha512-Q3BZ27qfpYqnCYGvE3vt+Qi6LGOF9R5Nmzn+9JoM1lCRsD9mYaIhfJLkSunN48nfGXJ6n+XNV0J/XVpqGQl7Dw==", + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-3.0.14.tgz", + "integrity": "sha512-5X1k57JBJ4H7H1QjX7CnJYAB1I19r/trVZTMcSms7/kLNZ8RaU4Nt2agcwZzv82Hfx6Q7/TOLU7agAKeFfc8cA==", "license": "Apache-2.0", "dependencies": { "json-schema": "^0.4.0" @@ -302,34 +310,17 @@ "node": ">=18" } }, - "node_modules/@ai-sdk/ui-utils-v5": { - "name": "@ai-sdk/ui-utils", - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@ai-sdk/ui-utils/-/ui-utils-1.2.11.tgz", - "integrity": "sha512-3zcwCc8ezzFlwp3ZD15wAPjf2Au4s3vAbKsXQVyhxODHcmu0iyPO2Eua6D/vicq/AUm/BAo60r97O6HU+EI0+w==", - "license": "Apache-2.0", - "dependencies": { - "@ai-sdk/provider": "1.1.3", - "@ai-sdk/provider-utils": "2.2.8", - "zod-to-json-schema": "^3.24.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "zod": "^3.23.8" - } - }, - "node_modules/@ai-sdk/ui-utils-v5/node_modules/@ai-sdk/provider": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-1.1.3.tgz", - "integrity": "sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==", + "node_modules/@ai-sdk/provider-v7": { + "name": "@ai-sdk/provider", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-4.0.4.tgz", + "integrity": "sha512-tbHKNLirllUNF3ZlkCsXnwab2ZV1Sl4b1H/Cp9ruCce15IBmskE8Gwkk0yo9xDWY+jho2of7lVXtwSsyrq7cwQ==", "license": "Apache-2.0", "dependencies": { "json-schema": "^0.4.0" }, "engines": { - "node": ">=18" + "node": ">=22" } }, "node_modules/@asamuzakjp/css-color": { @@ -3671,42 +3662,42 @@ } }, "node_modules/@mastra/core": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/@mastra/core/-/core-1.36.0.tgz", - "integrity": "sha512-BEhDZPQeDcJ6jQRHtpfFLuoRiWAuv9dTCIjeWbXokzwDamI3D9jkyNzpBFJwFwy2S/a4jBTu4+d61nOaP7knTQ==", + "version": "1.64.0", + "resolved": "https://registry.npmjs.org/@mastra/core/-/core-1.64.0.tgz", + "integrity": "sha512-+fuvDeORYWIb+SJrGQlXQi6r1JCxd05g3SNCDepnO910j4uqxMWf5s22Ta0sRSR5zbKRx2NUZoWPAfQt2xF4hQ==", "license": "Apache-2.0", "peer": true, "dependencies": { - "@a2a-js/sdk": "~0.3.13", - "@ai-sdk/provider-utils-v5": "npm:@ai-sdk/provider-utils@3.0.25", - "@ai-sdk/provider-utils-v6": "npm:@ai-sdk/provider-utils@4.0.27", + "@a2a-js/sdk-v0_3": "npm:@a2a-js/sdk@~0.3.14", + "@a2a-js/sdk-v1": "npm:@a2a-js/sdk@~1.0.1", + "@ai-sdk/provider-utils-v6": "npm:@ai-sdk/provider-utils@4.0.40", + "@ai-sdk/provider-utils-v7": "npm:@ai-sdk/provider-utils@5.0.13", "@ai-sdk/provider-v5": "npm:@ai-sdk/provider@2.0.3", - "@ai-sdk/provider-v6": "npm:@ai-sdk/provider@3.0.10", - "@ai-sdk/ui-utils-v5": "npm:@ai-sdk/ui-utils@1.2.11", - "@isaacs/ttlcache": "^2.1.4", + "@ai-sdk/provider-v6": "npm:@ai-sdk/provider@3.0.14", + "@ai-sdk/provider-v7": "npm:@ai-sdk/provider@4.0.4", + "@isaacs/ttlcache": "^2.1.5", "@lukeed/uuid": "^2.0.1", - "@mastra/schema-compat": "1.2.10", - "@modelcontextprotocol/sdk": "^1.29.0", + "@mastra/schema-compat": "1.3.8", + "@modelcontextprotocol/server": "2.0.0", "@sindresorhus/slugify": "^2.2.1", "@standard-schema/spec": "^1.1.0", - "ajv": "^8.18.0", - "chat": "^4.29.0", + "ajv": "^8.20.0", + "chat": "^4.34.0", "croner": "^10.0.1", "dotenv": "^17.3.1", "execa": "^9.6.1", - "fastq": "^1.19.1", + "fastq": "^1.20.1", "gray-matter": "^4.0.3", - "hono": "^4.12.8", - "hono-openapi": "^1.3.0", "ignore": "^7.0.5", + "jpeg-js": "^0.4.4", "json-schema": "^0.4.0", "lru-cache": "^11.2.7", "p-map": "^7.0.4", "p-retry": "^7.1.1", "picomatch": "^4.0.3", - "posthog-node": "^5.30.6", + "posthog-node": "^5.46.1", "tokenx": "^1.3.0", - "ws": "^8.20.0", + "ws": "^8.21.0", "xxhash-wasm": "^1.1.0" }, "engines": { @@ -3843,26 +3834,35 @@ } }, "node_modules/@mastra/memory": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@mastra/memory/-/memory-1.19.0.tgz", - "integrity": "sha512-vmW1zTX9/mnjTj/FeO3qaE1pP1y4dvaLzJwzIsm7zyZNMk9N/hsvk6dNA9WdvujkZfLDnrTBRafD2jNd12nt1Q==", + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/@mastra/memory/-/memory-1.28.2.tgz", + "integrity": "sha512-XneY2QdmC/nUjfaax7z4Qdnsw6WgsFWc1QZFd79AkQHl0g0bDvpwjQlbDZ6wnZ2YygRDCWVt0Ew3dDI2Ao3QXg==", "license": "Apache-2.0", "dependencies": { - "@mastra/schema-compat": "1.2.10", + "@mastra/schema-compat": "1.3.8", "async-mutex": "^0.5.0", - "image-size": "^2.0.2", + "diff": "^8.0.3", "json-schema": "^0.4.0", "lru-cache": "^11.2.7", "probe-image-size": "^7.2.3", "tokenx": "^1.3.0", - "xxhash-wasm": "^1.1.0" + "xxhash-wasm": "^1.1.0", + "zod": "^4.4.3" }, "engines": { "node": ">=22.13.0" }, "peerDependencies": { - "@mastra/core": ">=1.4.1-0 <2.0.0-0", - "zod": "^3.25.0 || ^4.0.0" + "@mastra/core": ">=1.4.1-0 <2.0.0-0" + } + }, + "node_modules/@mastra/memory/node_modules/diff": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz", + "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" } }, "node_modules/@mastra/pg": { @@ -3883,15 +3883,13 @@ } }, "node_modules/@mastra/schema-compat": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@mastra/schema-compat/-/schema-compat-1.2.10.tgz", - "integrity": "sha512-8Fg8PeO7GsRPOrEZAzc5udZgsF9ZDxih5JSoxjgnR79d0ImjKffhcoysPW6wIYXPEZ5i6/QDNR7rCazZZSD5Tg==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/@mastra/schema-compat/-/schema-compat-1.3.8.tgz", + "integrity": "sha512-uGGQlb/QAIgghHf/FQLfnpHbUMXWWJDFlv0FQ/p0K6TjT8OVdWC9uNPdwQmFYu8Fzut4Z+LmzNkJ5S378/41Ew==", "license": "Apache-2.0", "dependencies": { "json-schema-to-zod": "^2.7.0", - "zod-from-json-schema": "^0.5.2", - "zod-from-json-schema-v3": "npm:zod-from-json-schema@^0.0.5", - "zod-to-json-schema": "^3.25.1" + "zod-from-json-schema": "^0.5.2" }, "engines": { "node": ">=22.13.0" @@ -5358,100 +5356,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@standard-community/standard-json": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@standard-community/standard-json/-/standard-json-0.3.5.tgz", - "integrity": "sha512-4+ZPorwDRt47i+O7RjyuaxHRK/37QY/LmgxlGrRrSTLYoFatEOzvqIc85GTlM18SFZ5E91C+v0o/M37wZPpUHA==", - "license": "MIT", - "peer": true, - "peerDependencies": { - "@standard-schema/spec": "^1.0.0", - "@types/json-schema": "^7.0.15", - "@valibot/to-json-schema": "^1.3.0", - "arktype": "^2.1.20", - "effect": "^3.16.8", - "quansync": "^0.2.11", - "sury": "^10.0.0", - "typebox": "^1.0.17", - "valibot": "^1.1.0", - "zod": "^3.25.0 || ^4.0.0", - "zod-to-json-schema": "^3.24.5" - }, - "peerDependenciesMeta": { - "@valibot/to-json-schema": { - "optional": true - }, - "arktype": { - "optional": true - }, - "effect": { - "optional": true - }, - "sury": { - "optional": true - }, - "typebox": { - "optional": true - }, - "valibot": { - "optional": true - }, - "zod": { - "optional": true - }, - "zod-to-json-schema": { - "optional": true - } - } - }, - "node_modules/@standard-community/standard-openapi": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@standard-community/standard-openapi/-/standard-openapi-0.2.9.tgz", - "integrity": "sha512-htj+yldvN1XncyZi4rehbf9kLbu8os2Ke/rfqoZHCMHuw34kiF3LP/yQPdA0tQ940y8nDq3Iou8R3wG+AGGyvg==", - "license": "MIT", - "peer": true, - "peerDependencies": { - "@standard-community/standard-json": "^0.3.5", - "@standard-schema/spec": "^1.0.0", - "arktype": "^2.1.20", - "effect": "^3.17.14", - "openapi-types": "^12.1.3", - "sury": "^10.0.0", - "typebox": "^1.0.0", - "valibot": "^1.1.0", - "zod": "^3.25.0 || ^4.0.0", - "zod-openapi": "^4" - }, - "peerDependenciesMeta": { - "arktype": { - "optional": true - }, - "effect": { - "optional": true - }, - "sury": { - "optional": true - }, - "typebox": { - "optional": true - }, - "valibot": { - "optional": true - }, - "zod": { - "optional": true - }, - "zod-openapi": { - "optional": true - } - } - }, "node_modules/@standard-schema/spec": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@tokenizer/inflate": { "version": "0.4.1", @@ -5639,8 +5548,8 @@ "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "license": "MIT", - "peer": true + "dev": true, + "license": "MIT" }, "node_modules/@types/lodash": { "version": "4.14.202", @@ -10417,28 +10326,6 @@ "node": ">=16.9.0" } }, - "node_modules/hono-openapi": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/hono-openapi/-/hono-openapi-1.3.1.tgz", - "integrity": "sha512-NLVeVkhKZ3drmQNEIPac8HX8Y54uf1hJAgIM/7MfDsaeVVmB+QILWQxx5x3R3NvRHgedcbEbOCGY2uR7WQYyMw==", - "license": "MIT", - "peerDependencies": { - "@hono/standard-validator": "^0.2.0", - "@standard-community/standard-json": "^0.3.5", - "@standard-community/standard-openapi": "^0.2.9", - "@types/json-schema": "^7.0.15", - "hono": "^4.11.2", - "openapi-types": "^12.1.3" - }, - "peerDependenciesMeta": { - "@hono/standard-validator": { - "optional": true - }, - "hono": { - "optional": true - } - } - }, "node_modules/html-encoding-sniffer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", @@ -10585,18 +10472,6 @@ "dev": true, "license": "ISC" }, - "node_modules/image-size": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz", - "integrity": "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==", - "license": "MIT", - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=16.x" - } - }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", @@ -11067,6 +10942,12 @@ "node": ">=10" } }, + "node_modules/jpeg-js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", + "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==", + "license": "BSD-3-Clause" + }, "node_modules/js-base64": { "version": "3.9.3", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.9.3.tgz", @@ -13480,6 +13361,7 @@ "version": "3.3.18", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "dev": true, "funding": [ { "type": "github", @@ -15695,13 +15577,6 @@ "openapi-typescript-helpers": "^0.1.0" } }, - "node_modules/openapi-types": { - "version": "12.1.3", - "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", - "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", - "license": "MIT", - "peer": true - }, "node_modules/openapi-typescript-helpers": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/openapi-typescript-helpers/-/openapi-typescript-helpers-0.1.0.tgz", @@ -17133,8 +17008,7 @@ "url": "https://github.com/sponsors/sxzz" } ], - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/queue-lit": { "version": "1.5.2", @@ -20403,16 +20277,6 @@ "zod": "^4.0.17" } }, - "node_modules/zod-from-json-schema-v3": { - "name": "zod-from-json-schema", - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/zod-from-json-schema/-/zod-from-json-schema-0.0.5.tgz", - "integrity": "sha512-zYEoo86M1qpA1Pq6329oSyHLS785z/mTwfr9V1Xf/ZLhuuBGaMlDGu/pDVGVUe4H4oa1EFgWZT53DP0U3oT9CQ==", - "license": "MIT", - "dependencies": { - "zod": "^3.24.2" - } - }, "node_modules/zod-to-json-schema": { "version": "3.25.2", "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", diff --git a/code/package.json b/code/package.json index 62dcc051..2a03c98e 100644 --- a/code/package.json +++ b/code/package.json @@ -77,11 +77,11 @@ "@inditextech/weave-store-standalone": "5.2.2", "@inditextech/weave-types": "5.2.2", "@mastra/ai-sdk": "1.4.3", - "@mastra/core": "1.36.0", + "@mastra/core": "1.64.0", "@mastra/libsql": "1.11.1", "@mastra/loggers": "1.1.1", "@mastra/mcp": "1.8.0", - "@mastra/memory": "1.19.0", + "@mastra/memory": "1.28.2", "@mastra/pg": "1.11.1", "@modelcontextprotocol/node": "^2.0.0-alpha.2", "@modelcontextprotocol/server": "^2.0.0-alpha.2", @@ -103,7 +103,6 @@ "file-type": "^21.3.0", "google-auth-library": "^10.1.0", "helmet": "^8.0.0", - "image-size": "^2.0.2", "install": "^0.13.0", "jsdom": "^26.1.0", "konva": "10.0.2", diff --git a/code/src/api/v1/router.ts b/code/src/api/v1/router.ts index f9bb0673..b62469bf 100644 --- a/code/src/api/v1/router.ts +++ b/code/src/api/v1/router.ts @@ -135,7 +135,7 @@ export function setupApiV1Router(app: Application) { const routerBasePath = "/api/v1"; // Setup multer to upload files - const upload = multer(); + const upload = multer({ limits: { fileSize: 100 * 1024 * 1024 } }); // Setup cors const cors = getCorsMiddleware(routerBasePath); diff --git a/code/src/api/v2/controllers/postUploadImage.ts b/code/src/api/v2/controllers/postUploadImage.ts index d57279a3..40ee1fe3 100644 --- a/code/src/api/v2/controllers/postUploadImage.ts +++ b/code/src/api/v2/controllers/postUploadImage.ts @@ -3,7 +3,7 @@ // SPDX-License-Identifier: Apache-2.0 import { Request, Response } from "express"; -import { imageSize } from "image-size"; +import sharp from "sharp"; import { ImagesPersistenceHandler } from "../../../images/persistence.js"; import { createImage } from "../../../database/controllers/image.js"; import { ImageModel } from "../../../database/models/image.js"; @@ -34,8 +34,6 @@ export const postUploadImageController = () => { const mimeType = file?.mimetype ?? "application/octet-stream"; const data = file?.buffer ?? new Uint8Array(); - const dimensions = imageSize(data); - const fileName = `${roomId}/${imageId}`; if (await persistenceHandler.exists(fileName)) { @@ -45,6 +43,8 @@ export const postUploadImageController = () => { try { if (file) { + const dimensions = await sharp(data).metadata(); + await persistenceHandler.persist( fileName, { size: file.size, mimeType }, diff --git a/code/src/api/v2/router.ts b/code/src/api/v2/router.ts index c237dcfc..7d6cd4fa 100644 --- a/code/src/api/v2/router.ts +++ b/code/src/api/v2/router.ts @@ -41,7 +41,7 @@ export function setupApiV2Router(app: Express) { const routerBasePath = "/api/v2"; // Setup multer to upload files - const upload = multer(); + const upload = multer({ limits: { fileSize: 100 * 1024 * 1024 } }); // Setup cors const cors = getCorsMiddleware(routerBasePath); diff --git a/code/src/workloads/jobs/flip-image/job.ts b/code/src/workloads/jobs/flip-image/job.ts index 769bac29..9362790e 100644 --- a/code/src/workloads/jobs/flip-image/job.ts +++ b/code/src/workloads/jobs/flip-image/job.ts @@ -5,7 +5,6 @@ import { v4 as uuidv4 } from "uuid"; import fs from "node:fs"; import path from "node:path"; -import { imageSize } from "image-size"; import pgBoss from "pg-boss"; import { ImagesPersistenceHandler } from "../../../images/persistence.js"; import { @@ -265,7 +264,7 @@ export class FlipImageJob { const imageBuffer = Buffer.from(image.dataBase64, "base64"); if (imageBuffer) { - const dimensions = imageSize(imageBuffer); + const dimensions = await sharp(imageBuffer).metadata(); const fileName = `${roomId}/${newImageId}`; diff --git a/code/src/workloads/jobs/grayscale-image/job.ts b/code/src/workloads/jobs/grayscale-image/job.ts index d7f2fe1c..3c6cdba5 100644 --- a/code/src/workloads/jobs/grayscale-image/job.ts +++ b/code/src/workloads/jobs/grayscale-image/job.ts @@ -5,7 +5,6 @@ import { v4 as uuidv4 } from "uuid"; import fs from "node:fs"; import path from "node:path"; -import { imageSize } from "image-size"; import pgBoss from "pg-boss"; import { ImagesPersistenceHandler } from "../../../images/persistence.js"; import { @@ -252,7 +251,7 @@ export class GrayscaleImageJob { const imageBuffer = Buffer.from(image.dataBase64, "base64"); if (imageBuffer) { - const dimensions = imageSize(imageBuffer); + const dimensions = await sharp(imageBuffer).metadata(); const fileName = `${roomId}/${newImageId}`; diff --git a/code/src/workloads/jobs/negate-image/job.ts b/code/src/workloads/jobs/negate-image/job.ts index b51e78ea..7ee8f950 100644 --- a/code/src/workloads/jobs/negate-image/job.ts +++ b/code/src/workloads/jobs/negate-image/job.ts @@ -5,7 +5,6 @@ import { v4 as uuidv4 } from "uuid"; import fs from "node:fs"; import path from "node:path"; -import { imageSize } from "image-size"; import pgBoss from "pg-boss"; import { ImagesPersistenceHandler } from "../../../images/persistence.js"; import { @@ -250,7 +249,7 @@ export class NegateImageJob { const imageBuffer = Buffer.from(image.dataBase64, "base64"); if (imageBuffer) { - const dimensions = imageSize(imageBuffer); + const dimensions = await sharp(imageBuffer).metadata(); const fileName = `${roomId}/${newImageId}`; diff --git a/code/src/workloads/jobs/remove-image-background/job.ts b/code/src/workloads/jobs/remove-image-background/job.ts index a6f6c75b..7da2f98d 100644 --- a/code/src/workloads/jobs/remove-image-background/job.ts +++ b/code/src/workloads/jobs/remove-image-background/job.ts @@ -5,7 +5,6 @@ import { v4 as uuidv4 } from "uuid"; import fs from "node:fs"; import path from "node:path"; -import { imageSize } from "image-size"; import pgBoss from "pg-boss"; import { ImagesPersistenceHandler } from "../../../images/persistence.js"; import { @@ -20,6 +19,7 @@ import { JOB_REMOVE_IMAGE_BACKGROUND_QUEUE_NAME } from "./constants.js"; import { getLogger } from "../../../logger/logger.js"; import { saveBase64ToFile } from "../../../utils.js"; import { removeBackground } from "@imgly/background-removal-node"; +import sharp from "sharp"; import { createTask, updateTask } from "../../../database/controllers/task.js"; import { createImage, @@ -254,7 +254,7 @@ export class RemoveImageBackgroundJob { const imageBuffer = Buffer.from(image.dataBase64, "base64"); if (imageBuffer) { - const dimensions = imageSize(imageBuffer); + const dimensions = await sharp(imageBuffer).metadata(); const fileName = `${roomId}/${newImageId}`; From 5d2791cd8db6636cbe961282dd88b6acd837dab1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesus=20Manuel=20Pi=C3=B1eiro=20Cid?= Date: Mon, 7 Sep 2026 14:25:53 +0200 Subject: [PATCH 3/3] chore: update packages --- code/Dockerfile | 2 +- code/package-lock.json | 85 +++++++++++++++++++++--------------------- code/package.json | 4 +- 3 files changed, 45 insertions(+), 46 deletions(-) diff --git a/code/Dockerfile b/code/Dockerfile index b478bd9e..f1c7908e 100644 --- a/code/Dockerfile +++ b/code/Dockerfile @@ -16,7 +16,7 @@ COPY /patches ./patches COPY package*.json ./ RUN npm pkg delete scripts.prepare RUN npm ci --force --ignore-scripts -RUN npm rebuild canvas sharp +RUN npm rebuild canvas sharp skia-canvas RUN npm run copy:assets RUN npm run apply:patches diff --git a/code/package-lock.json b/code/package-lock.json index 16cc1703..2a7cc643 100644 --- a/code/package-lock.json +++ b/code/package-lock.json @@ -34,7 +34,7 @@ "ai": "6.0.188", "archiver": "^7.0.1", "axios": "^1.10.0", - "better-auth": "^1.5.6", + "better-auth": "^1.7.3", "brotli-compress": "^1.3.3", "cors": "^2.8.5", "cross-env": "^7.0.3", @@ -1114,15 +1114,15 @@ } }, "node_modules/@better-auth/core": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@better-auth/core/-/core-1.7.2.tgz", - "integrity": "sha512-j0nM4ygsWbF/fcYRoKtDn8gn8uLXkmC+075HqSqsJEAV828cJR9bvYBCUQ1zmxNyRBk6Iz/qXsA0Zm2oksiOTg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@better-auth/core/-/core-1.7.3.tgz", + "integrity": "sha512-JdP7lOkyE83jgjn7RilJj1XvZ7n2JjRsErKJuaXchjyuNo6cf1iVd3GtbhAtiUyJJkWdk8yL+LaUBKT80H0zLA==", "license": "MIT", "peer": true, "dependencies": { "@opentelemetry/semantic-conventions": "^1.41.1", "@standard-schema/spec": "^1.1.0", - "zod": "^4.3.6" + "zod": "^4.5.4" }, "peerDependencies": { "@better-auth/utils": "0.4.2", @@ -1144,12 +1144,12 @@ } }, "node_modules/@better-auth/kysely-adapter": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@better-auth/kysely-adapter/-/kysely-adapter-1.7.2.tgz", - "integrity": "sha512-LYdSRLOvZiF+6S0UThu+wE/Qxsq9P2jQs7ZKkY6BIBJqUjYyxVDmi8HFcantBvWWW1/BeQCSsD7YVDG4gICMIQ==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@better-auth/kysely-adapter/-/kysely-adapter-1.7.3.tgz", + "integrity": "sha512-UIsyJMIrjUnT+yTaS6dkCxYYmtPwxFHxwSJ8+CLty2II5w9BewlDxDA0/QzhoL/InYCPxQ5Y6xIgLHZG1dhwRA==", "license": "MIT", "peerDependencies": { - "@better-auth/core": "^1.7.2", + "@better-auth/core": "^1.7.3", "@better-auth/utils": "0.4.2", "kysely": "^0.28.17 || ^0.29.0" }, @@ -1160,22 +1160,22 @@ } }, "node_modules/@better-auth/memory-adapter": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@better-auth/memory-adapter/-/memory-adapter-1.7.2.tgz", - "integrity": "sha512-0q1SXMzm5esH9L0xVuM6IxCk59E4G+3HySX4My9gvEwqtmUobykn+iuc/si3Y4xwUO7JODqQ5o+/pPcLDDMIrA==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@better-auth/memory-adapter/-/memory-adapter-1.7.3.tgz", + "integrity": "sha512-WdLANFY/QWC3G351RCzxU+Y9YlW+BQ1oG9NwBTSOUWQw5rZ87ws+weU8tvAMO7sQ4C9gKIlkOKBKUKXrSt91Tw==", "license": "MIT", "peerDependencies": { - "@better-auth/core": "^1.7.2", + "@better-auth/core": "^1.7.3", "@better-auth/utils": "0.4.2" } }, "node_modules/@better-auth/mongo-adapter": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@better-auth/mongo-adapter/-/mongo-adapter-1.7.2.tgz", - "integrity": "sha512-4879SmUWHUs0OYlvHoCFbycZ7i1bqytkcgAUdt9RLQMvZ5H3LRMTgax2YVlGZEXgwNjY/X7xAoXOecWLhlQWeA==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@better-auth/mongo-adapter/-/mongo-adapter-1.7.3.tgz", + "integrity": "sha512-YL9m01tNogmFmRvOWJ46M9WwE6HirCXHDell29mtsQB/Qs1TPNLrgj7ybGMMGhQuyj6S218+8Wbls8m9s+i8RQ==", "license": "MIT", "peerDependencies": { - "@better-auth/core": "^1.7.2", + "@better-auth/core": "^1.7.3", "@better-auth/utils": "0.4.2", "mongodb": "^6.0.0 || ^7.0.0" }, @@ -1186,12 +1186,12 @@ } }, "node_modules/@better-auth/prisma-adapter": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@better-auth/prisma-adapter/-/prisma-adapter-1.7.2.tgz", - "integrity": "sha512-mXTr/83WrNWLrvzIjtgDgdu9iXhOcSG1+qBQOAKlbGSFiOB+z4IMRneQ2wmMOiB8mKY9qGkClVUjKRFXqtHnFQ==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@better-auth/prisma-adapter/-/prisma-adapter-1.7.3.tgz", + "integrity": "sha512-TJ/DhlU7oLzrC626/1wfYA1Pl+lVsXa/zXBZ8d7Rlc2YO5fGd5fsAYJdRrYMyA51iZEo+rWLXMhZ0cez1BamsQ==", "license": "MIT", "peerDependencies": { - "@better-auth/core": "^1.7.2", + "@better-auth/core": "^1.7.3", "@better-auth/utils": "0.4.2", "@prisma/client": "^5.0.0 || ^6.0.0 || ^7.0.0", "prisma": "^5.0.0 || ^6.0.0 || ^7.0.0" @@ -1206,12 +1206,12 @@ } }, "node_modules/@better-auth/telemetry": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@better-auth/telemetry/-/telemetry-1.7.2.tgz", - "integrity": "sha512-LcWu+O0zrxYDQj8E36vfkJwGPW4k9ZDA/rCo0zST6ihzL+juR7pBowoZIM9E6tK0Vit52mf6412bGT4XM4eTjQ==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@better-auth/telemetry/-/telemetry-1.7.3.tgz", + "integrity": "sha512-aixgHbJhGvS8PRczX/LR3murYyBnIvOGmJw37ZZBMg6ZtLR/UBJAkufbDi1HYn5THSuTJ3D5DtY85Ahh/ABQtw==", "license": "MIT", "peerDependencies": { - "@better-auth/core": "^1.7.2", + "@better-auth/core": "^1.7.3", "@better-auth/utils": "0.4.2", "@better-fetch/fetch": "1.3.1" } @@ -6571,18 +6571,18 @@ "license": "MIT" }, "node_modules/better-auth": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/better-auth/-/better-auth-1.7.2.tgz", - "integrity": "sha512-gKapKBEvYIGcMxi74RjQ7EbFLiqyQt58vdoJmL1qAlWSkY1Bc2Vqshl524/3u1NxauiOU03M/Ebh762Brmac9A==", - "license": "MIT", - "dependencies": { - "@better-auth/core": "1.7.2", - "@better-auth/drizzle-adapter": "1.7.2", - "@better-auth/kysely-adapter": "1.7.2", - "@better-auth/memory-adapter": "1.7.2", - "@better-auth/mongo-adapter": "1.7.2", - "@better-auth/prisma-adapter": "1.7.2", - "@better-auth/telemetry": "1.7.2", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/better-auth/-/better-auth-1.7.3.tgz", + "integrity": "sha512-8xGp68JQ+l36kniDEgP8bP99TLi1GdEv0NTEUBkyqnYnus/cgFUZseUfqUHKzr2BAsg2O6aD88I9f0U68shanQ==", + "license": "MIT", + "dependencies": { + "@better-auth/core": "1.7.3", + "@better-auth/drizzle-adapter": "1.7.3", + "@better-auth/kysely-adapter": "1.7.3", + "@better-auth/memory-adapter": "1.7.3", + "@better-auth/mongo-adapter": "1.7.3", + "@better-auth/prisma-adapter": "1.7.3", + "@better-auth/telemetry": "1.7.3", "@better-auth/utils": "0.4.2", "@better-fetch/fetch": "1.3.1", "@noble/ciphers": "^2.2.0", @@ -6592,7 +6592,7 @@ "jose": "^6.2.3", "kysely": "^0.28.17 || ^0.29.0", "nanostores": "^1.3.0", - "zod": "^4.3.6" + "zod": "^4.5.4" }, "peerDependencies": { "@lynx-js/react": "*", @@ -6676,12 +6676,12 @@ } }, "node_modules/better-auth/node_modules/@better-auth/drizzle-adapter": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@better-auth/drizzle-adapter/-/drizzle-adapter-1.7.2.tgz", - "integrity": "sha512-A5wE10PIv3aS5LGePecEHntQylKy6OOF17B4dqlE0DwJeqU/IOBSd7/LZhMop9cNJ3WFjKMpazVSf91yYM/NFg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@better-auth/drizzle-adapter/-/drizzle-adapter-1.7.3.tgz", + "integrity": "sha512-S+nQRlxbUhkR43LrSv8c98ZvOvmv3nrtOnHkiZXkdDkr60PWp7maC2cqgzZ2C9exCC1a+4TugJlx2jRL+r+/9A==", "license": "MIT", "peerDependencies": { - "@better-auth/core": "^1.7.2", + "@better-auth/core": "^1.7.3", "@better-auth/utils": "0.4.2", "drizzle-orm": "^0.45.2 || >=1.0.0-rc.1 <2.0.0" }, @@ -6696,7 +6696,6 @@ "resolved": "https://registry.npmjs.org/better-call/-/better-call-1.4.0.tgz", "integrity": "sha512-bBKOT4vv1kZLDgxVePdilk/Jwkn+dtRRsmi3DzHcDP+WnswyVl6dR59l2HEeP/0cB+bDoopASAesWDPIdd/zZA==", "license": "MIT", - "peer": true, "dependencies": { "@better-auth/utils": "^0.5.0", "@better-fetch/fetch": "^1.3.1", diff --git a/code/package.json b/code/package.json index 2a03c98e..1828a0ac 100644 --- a/code/package.json +++ b/code/package.json @@ -41,7 +41,7 @@ "publish:snapshot": "nx run-many -t publish:snapshot -- --verbose --tag next --registry $NPM_PUBLISHING_REGISTRY --unsafe-perm", "start": "node --experimental-specifier-resolution=node --env-file=.env --loader ts-node/esm dist/server.js", "storage:cleanup": "tsx --env-file=./src/actions/storage-cleanup/.env ./src/actions/storage-cleanup/action.ts", - "verify": "npm ci --force --ignore-scripts && npm rebuild canvas sharp && npm run copy:assets && npm run apply:patches && npm run lint && npm run build", + "verify": "npm ci --force --ignore-scripts && npm rebuild canvas sharp skia-canvas && npm run copy:assets && npm run apply:patches && npm run lint && npm run build", "version:development": "export BUMP_DEVELOP_VERSION=$(npm version $(npm version minor)-SNAPSHOT) && lerna version $BUMP_DEVELOP_VERSION --no-git-tag-version --no-push --force-publish --exact --yes && npm version $(npm version minor)-SNAPSHOT", "version:release": "npm ci && lerna version --no-git-tag-version --no-push --force-publish --exact --yes $RELEASE_VERSION && npm version $RELEASE_VERSION" }, @@ -88,7 +88,7 @@ "ai": "6.0.188", "archiver": "^7.0.1", "axios": "^1.10.0", - "better-auth": "^1.5.6", + "better-auth": "^1.7.3", "brotli-compress": "^1.3.3", "cors": "^2.8.5", "cross-env": "^7.0.3",