env validation

This commit is contained in:
Philipinho
2026-02-16 04:11:19 +00:00
parent 00b5328676
commit 0ce74d34de
4 changed files with 99 additions and 87 deletions
+6 -6
View File
@@ -30,9 +30,9 @@
"test:e2e": "jest --config test/jest-e2e.json" "test:e2e": "jest --config test/jest-e2e.json"
}, },
"dependencies": { "dependencies": {
"@ai-sdk/google": "^3.0.9", "@ai-sdk/google": "^3.0.29",
"@ai-sdk/openai": "^3.0.11", "@ai-sdk/openai": "^3.0.29",
"@ai-sdk/openai-compatible": "^2.0.12", "@ai-sdk/openai-compatible": "^2.0.30",
"@aws-sdk/client-s3": "3.982.0", "@aws-sdk/client-s3": "3.982.0",
"@aws-sdk/lib-storage": "3.982.0", "@aws-sdk/lib-storage": "3.982.0",
"@aws-sdk/s3-request-presigner": "3.982.0", "@aws-sdk/s3-request-presigner": "3.982.0",
@@ -59,11 +59,11 @@
"@react-email/components": "1.0.7", "@react-email/components": "1.0.7",
"@react-email/render": "2.0.4", "@react-email/render": "2.0.4",
"@socket.io/redis-adapter": "^8.3.0", "@socket.io/redis-adapter": "^8.3.0",
"ai": "^6.0.37", "ai": "^6.0.86",
"ai-sdk-ollama": "^3.1.1", "ai-sdk-ollama": "^3.7.0",
"bcrypt": "^6.0.0", "bcrypt": "^6.0.0",
"bullmq": "^5.65.0", "bullmq": "^5.65.0",
"cache-manager": "^6.4.3", "cache-manager": "^7.2.8",
"cheerio": "^1.1.2", "cheerio": "^1.1.2",
"class-transformer": "^0.5.1", "class-transformer": "^0.5.1",
"class-validator": "^0.14.3", "class-validator": "^0.14.3",
@@ -91,7 +91,6 @@ export class EnvironmentVariables {
@ValidateIf((obj) => obj.SEARCH_DRIVER === 'typesense') @ValidateIf((obj) => obj.SEARCH_DRIVER === 'typesense')
TYPESENSE_URL: string; TYPESENSE_URL: string;
@IsOptional()
@ValidateIf((obj) => obj.SEARCH_DRIVER === 'typesense') @ValidateIf((obj) => obj.SEARCH_DRIVER === 'typesense')
@IsNotEmpty() @IsNotEmpty()
@IsString() @IsString()
@@ -110,18 +109,14 @@ export class EnvironmentVariables {
AI_DRIVER: string; AI_DRIVER: string;
@IsOptional() @IsOptional()
@ValidateIf((obj) => obj.AI_DRIVER)
@IsString() @IsString()
@IsNotEmpty()
AI_EMBEDDING_MODEL: string; AI_EMBEDDING_MODEL: string;
@IsOptional()
@ValidateIf((obj) => obj.AI_EMBEDDING_DIMENSION) @ValidateIf((obj) => obj.AI_EMBEDDING_DIMENSION)
@IsIn(['768', '1024', '1536', '2000', '3072']) @IsIn(['768', '1024', '1536', '2000', '3072'])
@IsString() @IsString()
AI_EMBEDDING_DIMENSION: string; AI_EMBEDDING_DIMENSION: string;
@IsOptional()
@ValidateIf((obj) => obj.AI_DRIVER) @ValidateIf((obj) => obj.AI_DRIVER)
@IsString() @IsString()
@IsNotEmpty() @IsNotEmpty()
@@ -145,13 +140,11 @@ export class EnvironmentVariables {
@IsUrl({ protocols: ['http', 'https'], require_tld: false }) @IsUrl({ protocols: ['http', 'https'], require_tld: false })
OPENAI_API_URL: string; OPENAI_API_URL: string;
@IsOptional()
@ValidateIf((obj) => obj.AI_DRIVER && obj.AI_DRIVER === 'gemini') @ValidateIf((obj) => obj.AI_DRIVER && obj.AI_DRIVER === 'gemini')
@IsString() @IsString()
@IsNotEmpty() @IsNotEmpty()
GEMINI_API_KEY: string; GEMINI_API_KEY: string;
@IsOptional()
@ValidateIf((obj) => obj.AI_DRIVER && obj.AI_DRIVER === 'ollama') @ValidateIf((obj) => obj.AI_DRIVER && obj.AI_DRIVER === 'ollama')
@IsUrl({ protocols: ['http', 'https'], require_tld: false }) @IsUrl({ protocols: ['http', 'https'], require_tld: false })
OLLAMA_API_URL: string; OLLAMA_API_URL: string;
+92 -73
View File
@@ -442,14 +442,14 @@ importers:
apps/server: apps/server:
dependencies: dependencies:
'@ai-sdk/google': '@ai-sdk/google':
specifier: ^3.0.9 specifier: ^3.0.29
version: 3.0.10(zod@4.3.6) version: 3.0.29(zod@4.3.6)
'@ai-sdk/openai': '@ai-sdk/openai':
specifier: ^3.0.11 specifier: ^3.0.29
version: 3.0.12(zod@4.3.6) version: 3.0.29(zod@4.3.6)
'@ai-sdk/openai-compatible': '@ai-sdk/openai-compatible':
specifier: ^2.0.12 specifier: ^2.0.30
version: 2.0.13(zod@4.3.6) version: 2.0.30(zod@4.3.6)
'@aws-sdk/client-s3': '@aws-sdk/client-s3':
specifier: 3.982.0 specifier: 3.982.0
version: 3.982.0 version: 3.982.0
@@ -529,11 +529,11 @@ importers:
specifier: ^8.3.0 specifier: ^8.3.0
version: 8.3.0(socket.io-adapter@2.5.4) version: 8.3.0(socket.io-adapter@2.5.4)
ai: ai:
specifier: ^6.0.37 specifier: ^6.0.86
version: 6.0.38(zod@4.3.6) version: 6.0.86(zod@4.3.6)
ai-sdk-ollama: ai-sdk-ollama:
specifier: ^3.1.1 specifier: ^3.7.0
version: 3.1.1(ai@6.0.38(zod@4.3.6))(zod@4.3.6) version: 3.7.0(ai@6.0.86(zod@4.3.6))(zod@4.3.6)
bcrypt: bcrypt:
specifier: ^6.0.0 specifier: ^6.0.0
version: 6.0.0 version: 6.0.0
@@ -541,8 +541,8 @@ importers:
specifier: ^5.65.0 specifier: ^5.65.0
version: 5.65.0 version: 5.65.0
cache-manager: cache-manager:
specifier: ^6.4.3 specifier: ^7.2.8
version: 6.4.3 version: 7.2.8
cheerio: cheerio:
specifier: ^1.1.2 specifier: ^1.1.2
version: 1.1.2 version: 1.1.2
@@ -781,38 +781,38 @@ packages:
'@adobe/css-tools@4.3.3': '@adobe/css-tools@4.3.3':
resolution: {integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==} resolution: {integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==}
'@ai-sdk/gateway@3.0.16': '@ai-sdk/gateway@3.0.46':
resolution: {integrity: sha512-OOY5CfRJiHvh/8np2vs1RQaCZ5hWv2qOeEmmeiABXK3gLQHUVnCO+1hhoLsZdHM5iElu6M407dAOfyvTsKJqcQ==} resolution: {integrity: sha512-zH1UbNRjG5woOXXFOrVCZraqZuFTtmPvLardMGcgLkzpxKV0U3tAGoyWKSZ862H+eBJfI/Hf2yj/zzGJcCkycg==}
engines: {node: '>=18'} engines: {node: '>=18'}
peerDependencies: peerDependencies:
zod: ^3.25.76 || ^4.1.8 zod: ^3.25.76 || ^4.1.8
'@ai-sdk/google@3.0.10': '@ai-sdk/google@3.0.29':
resolution: {integrity: sha512-qd2EM9SlD7wWFrq036hwKsuAgkCVxQbwJzctszdmzPs9yUZg795/gHtZRpKItZhbyHSNWhAHmJwEgKjD+HOzuQ==} resolution: {integrity: sha512-x0hcU10AA+i1ZUQHloGD5qXWsB+Y8qnxlmFUef6Ly4rB53MGVbQExkI9nOKiCO3mu2TGiiNoQMeKWSeQVLfRUA==}
engines: {node: '>=18'} engines: {node: '>=18'}
peerDependencies: peerDependencies:
zod: ^3.25.76 || ^4.1.8 zod: ^3.25.76 || ^4.1.8
'@ai-sdk/openai-compatible@2.0.13': '@ai-sdk/openai-compatible@2.0.30':
resolution: {integrity: sha512-DShpuHZ9wiy3QtxJ4/Uq5csLxgNgeA3w58isYhZ34pSod2cBlRmJl3EyQzxZ1HD8e6sQDa9fvc0cwF5/EugBMw==} resolution: {integrity: sha512-iTjumHf1/u4NhjXYFn/aONM2GId3/o7J1Lp5ql8FCbgIMyRwrmanR5xy1S3aaVkfTscuDvLTzWiy1mAbGzK3nQ==}
engines: {node: '>=18'} engines: {node: '>=18'}
peerDependencies: peerDependencies:
zod: ^3.25.76 || ^4.1.8 zod: ^3.25.76 || ^4.1.8
'@ai-sdk/openai@3.0.12': '@ai-sdk/openai@3.0.29':
resolution: {integrity: sha512-zqLWEKuaKnjXhu7xCw1jgz/+yTbd3F7EtgU4T2Q8BAo8OJC5wZv14l+kwM7Jai7M1/2Y2T/zBkrfiIu+7NsvfQ==} resolution: {integrity: sha512-ugVTIVpuSLKTjzSPe1F1DWiblJT/lwrrHx0OZEKjpMk/EYP6j6VD/F7SJqM1dsqOJryeBCJWFbUzLNqc99PrMA==}
engines: {node: '>=18'} engines: {node: '>=18'}
peerDependencies: peerDependencies:
zod: ^3.25.76 || ^4.1.8 zod: ^3.25.76 || ^4.1.8
'@ai-sdk/provider-utils@4.0.8': '@ai-sdk/provider-utils@4.0.15':
resolution: {integrity: sha512-ns9gN7MmpI8vTRandzgz+KK/zNMLzhrriiKECMt4euLtQFSBgNfydtagPOX4j4pS1/3KvHF6RivhT3gNQgBZsg==} resolution: {integrity: sha512-8XiKWbemmCbvNN0CLR9u3PQiet4gtEVIrX4zzLxnCj06AwsEDJwJVBbKrEI4t6qE8XRSIvU2irka0dcpziKW6w==}
engines: {node: '>=18'} engines: {node: '>=18'}
peerDependencies: peerDependencies:
zod: ^3.25.76 || ^4.1.8 zod: ^3.25.76 || ^4.1.8
'@ai-sdk/provider@3.0.4': '@ai-sdk/provider@3.0.8':
resolution: {integrity: sha512-5KXyBOSEX+l67elrEa+wqo/LSsSTtrPj9Uoh3zMbe/ceQX4ucHI3b9nUEfNkGF3Ry1svv90widAt+aiKdIJasQ==} resolution: {integrity: sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ==}
engines: {node: '>=18'} engines: {node: '>=18'}
'@angular-devkit/core@19.1.7': '@angular-devkit/core@19.1.7':
@@ -1719,6 +1719,9 @@ packages:
'@braintree/sanitize-url@7.1.1': '@braintree/sanitize-url@7.1.1':
resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==} resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==}
'@cacheable/utils@2.3.4':
resolution: {integrity: sha512-knwKUJEYgIfwShABS1BX6JyJJTglAFcEU7EXqzTdiGCXur4voqkiJkdgZIQtWNFhynzDWERcTYv/sETMu3uJWA==}
'@casl/ability@6.8.0': '@casl/ability@6.8.0':
resolution: {integrity: sha512-Ipt4mzI4gSgnomFdaPjaLgY2MWuXqAEZLrU6qqWBB7khGiBBuuEp6ytYDnq09bRXqcjaeeHiaCvCGFbBA2SpvA==} resolution: {integrity: sha512-Ipt4mzI4gSgnomFdaPjaLgY2MWuXqAEZLrU6qqWBB7khGiBBuuEp6ytYDnq09bRXqcjaeeHiaCvCGFbBA2SpvA==}
@@ -2680,8 +2683,8 @@ packages:
'@jridgewell/trace-mapping@0.3.9': '@jridgewell/trace-mapping@0.3.9':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
'@keyv/serialize@1.0.3': '@keyv/serialize@1.1.1':
resolution: {integrity: sha512-qnEovoOp5Np2JDGonIDL6Ayihw0RhnRh6vxPuHo4RDn1UOzwEo4AeIfpL6UGIrsceWrCMiVPgwRjbHu4vYFc3g==} resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==}
'@langchain/core@1.1.18': '@langchain/core@1.1.18':
resolution: {integrity: sha512-vwzbtHUSZaJONBA1n9uQedZPfyFFZ6XzTggTpR28n8tiIg7e1NC/5dvGW/lGtR1Du1VwV9DvDHA5/bOrLe6cVg==} resolution: {integrity: sha512-vwzbtHUSZaJONBA1n9uQedZPfyFFZ6XzTggTpR28n8tiIg7e1NC/5dvGW/lGtR1Du1VwV9DvDHA5/bOrLe6cVg==}
@@ -5559,14 +5562,14 @@ packages:
resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==}
engines: {node: '>= 14'} engines: {node: '>= 14'}
ai-sdk-ollama@3.1.1: ai-sdk-ollama@3.7.0:
resolution: {integrity: sha512-1rTgOGUsE8pR2ccg0Uz9lNJYzNUJKjtHDfUB5itoc2UnWZnbzQyqyxTUloCIWjwDkEzaWBiEJRLNvwF7a6j4VQ==} resolution: {integrity: sha512-RtiOsAjfjykqtqp0vpnkkUe/lSlnZy7BEapuxZl6VnHwo8hq+DqRn35RpABoAI+eCBjzLioBcZk/msnhwfc8CA==}
engines: {node: '>=22'} engines: {node: '>=22'}
peerDependencies: peerDependencies:
ai: ^6.0.27 ai: ^6.0.80
ai@6.0.38: ai@6.0.86:
resolution: {integrity: sha512-X8AaZFrdsPO1RNCAQLsaWfmE/SL9zgsiIZN3XqEHs3jIZ7ycR5aQZRg5XpNtbLWJxKXzK2b1ZXLx13AFOjksSg==} resolution: {integrity: sha512-U2W2LBCHA/pr0Ui7vmmsjBiLEzBbZF3yVHNy7Rbzn7IX+SvoQPFM5rN74hhfVzZoE8zBuGD4nLLk+j0elGacvQ==}
engines: {node: '>=18'} engines: {node: '>=18'}
peerDependencies: peerDependencies:
zod: ^3.25.76 || ^4.1.8 zod: ^3.25.76 || ^4.1.8
@@ -5873,9 +5876,6 @@ packages:
buffer@5.7.1: buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
buffer@6.0.3:
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
bullmq@5.65.0: bullmq@5.65.0:
resolution: {integrity: sha512-fyOcyf2ad4zrNmE18vdF/ie7DrW0TwhLt5e0DkqDxbRpDNiUdYqgp2QZJW2ntnUN08T2mDMC4deUUhF2UOAmeQ==} resolution: {integrity: sha512-fyOcyf2ad4zrNmE18vdF/ie7DrW0TwhLt5e0DkqDxbRpDNiUdYqgp2QZJW2ntnUN08T2mDMC4deUUhF2UOAmeQ==}
@@ -5883,8 +5883,8 @@ packages:
resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
cache-manager@6.4.3: cache-manager@7.2.8:
resolution: {integrity: sha512-VV5eq/QQ5rIVix7/aICO4JyvSeEv9eIQuKL5iFwgM2BrcYoE0A/D1mNsAHJAsB0WEbNdBlKkn6Tjz6fKzh/cKQ==} resolution: {integrity: sha512-0HDaDLBBY/maa/LmUVAr70XUOwsiQD+jyzCBjmUErYZUKdMS9dT59PqW59PpVqfGM7ve6H0J6307JTpkCYefHQ==}
call-bind-apply-helpers@1.0.2: call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
@@ -7246,6 +7246,10 @@ packages:
resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
hashery@1.4.0:
resolution: {integrity: sha512-Wn2i1In6XFxl8Az55kkgnFRiAlIAushzh26PTjL2AKtQcEfXrcLa7Hn5QOWGZEf3LU057P9TwwZjFyxfS1VuvQ==}
engines: {node: '>=20'}
hasown@2.0.2: hasown@2.0.2:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@@ -7263,6 +7267,9 @@ packages:
hoist-non-react-statics@3.3.2: hoist-non-react-statics@3.3.2:
resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
hookified@1.15.1:
resolution: {integrity: sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==}
html-encoding-sniffer@4.0.0: html-encoding-sniffer@4.0.0:
resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
engines: {node: '>=18'} engines: {node: '>=18'}
@@ -7858,6 +7865,10 @@ packages:
jsonfile@6.1.0: jsonfile@6.1.0:
resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
jsonrepair@3.13.2:
resolution: {integrity: sha512-Leuly0nbM4R+S5SVJk3VHfw1oxnlEK9KygdZvfUtEtTawNDyzB4qa1xWTmFt1aeoA7sXZkVTRuIixJ8bAvqVUg==}
hasBin: true
jsonwebtoken@9.0.3: jsonwebtoken@9.0.3:
resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==}
engines: {node: '>=12', npm: '>=6'} engines: {node: '>=12', npm: '>=6'}
@@ -7886,8 +7897,8 @@ packages:
keyv@4.5.4: keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
keyv@5.3.3: keyv@5.6.0:
resolution: {integrity: sha512-Rwu4+nXI9fqcxiEHtbkvoes2X+QfkTRo1TMkPfwzipGsJlJO/z69vqB4FNl9xJ3xCpAcbkvmEabZfPzrwN3+gQ==} resolution: {integrity: sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==}
khroma@2.1.0: khroma@2.1.0:
resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==}
@@ -10596,39 +10607,39 @@ snapshots:
'@adobe/css-tools@4.3.3': {} '@adobe/css-tools@4.3.3': {}
'@ai-sdk/gateway@3.0.16(zod@4.3.6)': '@ai-sdk/gateway@3.0.46(zod@4.3.6)':
dependencies: dependencies:
'@ai-sdk/provider': 3.0.4 '@ai-sdk/provider': 3.0.8
'@ai-sdk/provider-utils': 4.0.8(zod@4.3.6) '@ai-sdk/provider-utils': 4.0.15(zod@4.3.6)
'@vercel/oidc': 3.1.0 '@vercel/oidc': 3.1.0
zod: 4.3.6 zod: 4.3.6
'@ai-sdk/google@3.0.10(zod@4.3.6)': '@ai-sdk/google@3.0.29(zod@4.3.6)':
dependencies: dependencies:
'@ai-sdk/provider': 3.0.4 '@ai-sdk/provider': 3.0.8
'@ai-sdk/provider-utils': 4.0.8(zod@4.3.6) '@ai-sdk/provider-utils': 4.0.15(zod@4.3.6)
zod: 4.3.6 zod: 4.3.6
'@ai-sdk/openai-compatible@2.0.13(zod@4.3.6)': '@ai-sdk/openai-compatible@2.0.30(zod@4.3.6)':
dependencies: dependencies:
'@ai-sdk/provider': 3.0.4 '@ai-sdk/provider': 3.0.8
'@ai-sdk/provider-utils': 4.0.8(zod@4.3.6) '@ai-sdk/provider-utils': 4.0.15(zod@4.3.6)
zod: 4.3.6 zod: 4.3.6
'@ai-sdk/openai@3.0.12(zod@4.3.6)': '@ai-sdk/openai@3.0.29(zod@4.3.6)':
dependencies: dependencies:
'@ai-sdk/provider': 3.0.4 '@ai-sdk/provider': 3.0.8
'@ai-sdk/provider-utils': 4.0.8(zod@4.3.6) '@ai-sdk/provider-utils': 4.0.15(zod@4.3.6)
zod: 4.3.6 zod: 4.3.6
'@ai-sdk/provider-utils@4.0.8(zod@4.3.6)': '@ai-sdk/provider-utils@4.0.15(zod@4.3.6)':
dependencies: dependencies:
'@ai-sdk/provider': 3.0.4 '@ai-sdk/provider': 3.0.8
'@standard-schema/spec': 1.1.0 '@standard-schema/spec': 1.1.0
eventsource-parser: 3.0.6 eventsource-parser: 3.0.6
zod: 4.3.6 zod: 4.3.6
'@ai-sdk/provider@3.0.4': '@ai-sdk/provider@3.0.8':
dependencies: dependencies:
json-schema: 0.4.0 json-schema: 0.4.0
@@ -12031,6 +12042,11 @@ snapshots:
'@braintree/sanitize-url@7.1.1': {} '@braintree/sanitize-url@7.1.1': {}
'@cacheable/utils@2.3.4':
dependencies:
hashery: 1.4.0
keyv: 5.6.0
'@casl/ability@6.8.0': '@casl/ability@6.8.0':
dependencies: dependencies:
'@ucast/mongo2js': 1.3.4 '@ucast/mongo2js': 1.3.4
@@ -13071,9 +13087,7 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2 '@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/sourcemap-codec': 1.5.0
'@keyv/serialize@1.0.3': '@keyv/serialize@1.1.1': {}
dependencies:
buffer: 6.0.3
'@langchain/core@1.1.18(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.19.0)(zod@4.3.6))': '@langchain/core@1.1.18(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@6.2.0(ws@8.19.0)(zod@4.3.6))':
dependencies: dependencies:
@@ -16177,20 +16191,21 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
ai-sdk-ollama@3.1.1(ai@6.0.38(zod@4.3.6))(zod@4.3.6): ai-sdk-ollama@3.7.0(ai@6.0.86(zod@4.3.6))(zod@4.3.6):
dependencies: dependencies:
'@ai-sdk/provider': 3.0.4 '@ai-sdk/provider': 3.0.8
'@ai-sdk/provider-utils': 4.0.8(zod@4.3.6) '@ai-sdk/provider-utils': 4.0.15(zod@4.3.6)
ai: 6.0.38(zod@4.3.6) ai: 6.0.86(zod@4.3.6)
jsonrepair: 3.13.2
ollama: 0.6.3 ollama: 0.6.3
transitivePeerDependencies: transitivePeerDependencies:
- zod - zod
ai@6.0.38(zod@4.3.6): ai@6.0.86(zod@4.3.6):
dependencies: dependencies:
'@ai-sdk/gateway': 3.0.16(zod@4.3.6) '@ai-sdk/gateway': 3.0.46(zod@4.3.6)
'@ai-sdk/provider': 3.0.4 '@ai-sdk/provider': 3.0.8
'@ai-sdk/provider-utils': 4.0.8(zod@4.3.6) '@ai-sdk/provider-utils': 4.0.15(zod@4.3.6)
'@opentelemetry/api': 1.9.0 '@opentelemetry/api': 1.9.0
zod: 4.3.6 zod: 4.3.6
@@ -16562,11 +16577,6 @@ snapshots:
base64-js: 1.5.1 base64-js: 1.5.1
ieee754: 1.2.1 ieee754: 1.2.1
buffer@6.0.3:
dependencies:
base64-js: 1.5.1
ieee754: 1.2.1
bullmq@5.65.0: bullmq@5.65.0:
dependencies: dependencies:
cron-parser: 4.9.0 cron-parser: 4.9.0
@@ -16581,9 +16591,10 @@ snapshots:
bytes@3.1.2: {} bytes@3.1.2: {}
cache-manager@6.4.3: cache-manager@7.2.8:
dependencies: dependencies:
keyv: 5.3.3 '@cacheable/utils': 2.3.4
keyv: 5.6.0
call-bind-apply-helpers@1.0.2: call-bind-apply-helpers@1.0.2:
dependencies: dependencies:
@@ -18088,6 +18099,10 @@ snapshots:
dependencies: dependencies:
has-symbols: 1.1.0 has-symbols: 1.1.0
hashery@1.4.0:
dependencies:
hookified: 1.15.1
hasown@2.0.2: hasown@2.0.2:
dependencies: dependencies:
function-bind: 1.1.2 function-bind: 1.1.2
@@ -18102,6 +18117,8 @@ snapshots:
dependencies: dependencies:
react-is: 16.13.1 react-is: 16.13.1
hookified@1.15.1: {}
html-encoding-sniffer@4.0.0: html-encoding-sniffer@4.0.0:
dependencies: dependencies:
whatwg-encoding: 3.1.1 whatwg-encoding: 3.1.1
@@ -18912,6 +18929,8 @@ snapshots:
optionalDependencies: optionalDependencies:
graceful-fs: 4.2.11 graceful-fs: 4.2.11
jsonrepair@3.13.2: {}
jsonwebtoken@9.0.3: jsonwebtoken@9.0.3:
dependencies: dependencies:
jws: 4.0.1 jws: 4.0.1
@@ -18960,9 +18979,9 @@ snapshots:
dependencies: dependencies:
json-buffer: 3.0.1 json-buffer: 3.0.1
keyv@5.3.3: keyv@5.6.0:
dependencies: dependencies:
'@keyv/serialize': 1.0.3 '@keyv/serialize': 1.1.1
khroma@2.1.0: {} khroma@2.1.0: {}