@directus/api 32.1.1 → 33.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/chat/constants/system-prompt.d.ts +1 -0
- package/dist/ai/chat/constants/system-prompt.js +51 -0
- package/dist/ai/chat/controllers/chat.post.d.ts +2 -0
- package/dist/ai/chat/controllers/chat.post.js +47 -0
- package/dist/ai/chat/lib/create-ui-stream.d.ts +15 -0
- package/dist/ai/chat/lib/create-ui-stream.js +42 -0
- package/dist/ai/chat/middleware/load-settings.d.ts +2 -0
- package/dist/ai/chat/middleware/load-settings.js +18 -0
- package/dist/ai/chat/models/chat-request.d.ts +34 -0
- package/dist/ai/chat/models/chat-request.js +26 -0
- package/dist/ai/chat/models/providers.d.ts +9 -0
- package/dist/ai/chat/models/providers.js +9 -0
- package/dist/ai/chat/router.d.ts +1 -0
- package/dist/ai/chat/router.js +5 -0
- package/dist/ai/chat/utils/chat-request-tool-to-ai-sdk-tool.d.ts +9 -0
- package/dist/ai/chat/utils/chat-request-tool-to-ai-sdk-tool.js +38 -0
- package/dist/ai/chat/utils/fix-error-tool-calls.d.ts +12 -0
- package/dist/ai/chat/utils/fix-error-tool-calls.js +30 -0
- package/dist/ai/chat/utils/parse-json-schema-7.d.ts +13 -0
- package/dist/ai/chat/utils/parse-json-schema-7.js +75 -0
- package/dist/{mcp → ai/mcp}/server.d.ts +13 -16
- package/dist/{mcp → ai/mcp}/server.js +4 -13
- package/dist/ai/mcp/types.d.ts +15 -0
- package/dist/{mcp/tools/assets.js → ai/tools/assets/index.js} +8 -5
- package/dist/{mcp/tools/collections.js → ai/tools/collections/index.js} +7 -4
- package/dist/{mcp/tools/fields.js → ai/tools/fields/index.js} +12 -9
- package/dist/{mcp/tools/files.js → ai/tools/files/index.js} +11 -5
- package/dist/{mcp/tools/flows.js → ai/tools/flows/index.js} +11 -5
- package/dist/{mcp/tools/folders.js → ai/tools/folders/index.js} +12 -5
- package/dist/ai/tools/index.d.ts +15 -0
- package/dist/ai/tools/index.js +29 -0
- package/dist/{mcp/tools/items.js → ai/tools/items/index.js} +13 -6
- package/dist/{mcp/tools/prompts/items.md → ai/tools/items/prompt.md} +19 -15
- package/dist/{mcp/tools/operations.d.ts → ai/tools/operations/index.d.ts} +46 -0
- package/dist/{mcp/tools/operations.js → ai/tools/operations/index.js} +12 -5
- package/dist/{mcp/tools/relations.js → ai/tools/relations/index.js} +7 -4
- package/dist/{mcp/tools/schema.d.ts → ai/tools/schema/index.d.ts} +1 -1
- package/dist/{mcp/tools/schema.js → ai/tools/schema/index.js} +9 -6
- package/dist/{mcp/tools/system.js → ai/tools/system/index.js} +7 -4
- package/dist/{mcp/tools/trigger-flow.js → ai/tools/trigger-flow/index.js} +8 -5
- package/dist/{mcp → ai/tools}/types.d.ts +1 -17
- package/dist/ai/tools/utils.d.ts +9 -0
- package/dist/ai/tools/utils.js +17 -0
- package/dist/app.js +11 -6
- package/dist/auth/drivers/ldap.js +2 -2
- package/dist/auth/drivers/local.js +1 -1
- package/dist/auth/drivers/oauth2.d.ts +1 -2
- package/dist/auth/drivers/oauth2.js +22 -17
- package/dist/auth/drivers/openid.d.ts +1 -2
- package/dist/auth/drivers/openid.js +18 -13
- package/dist/auth/drivers/saml.js +6 -3
- package/dist/auth/utils/generate-callback-url.d.ts +11 -0
- package/dist/auth/utils/generate-callback-url.js +40 -0
- package/dist/auth/utils/is-login-redirect-allowed.d.ts +7 -0
- package/dist/{utils → auth/utils}/is-login-redirect-allowed.js +12 -9
- package/dist/cache.js +2 -2
- package/dist/cli/commands/bootstrap/index.js +2 -2
- package/dist/cli/commands/database/install.js +1 -1
- package/dist/cli/commands/database/migrate.js +1 -1
- package/dist/cli/commands/init/index.js +2 -2
- package/dist/cli/commands/roles/create.js +4 -4
- package/dist/cli/commands/schema/apply.js +3 -3
- package/dist/cli/commands/schema/snapshot.js +1 -1
- package/dist/cli/utils/create-db-connection.d.ts +1 -1
- package/dist/cli/utils/create-db-connection.js +1 -1
- package/dist/cli/utils/create-env/index.js +1 -1
- package/dist/constants.d.ts +7 -3
- package/dist/constants.js +7 -3
- package/dist/controllers/access.js +1 -1
- package/dist/controllers/assets.js +40 -3
- package/dist/controllers/extensions.js +1 -1
- package/dist/controllers/fields.js +2 -2
- package/dist/controllers/files.js +1 -1
- package/dist/controllers/items.js +1 -1
- package/dist/controllers/mcp.js +1 -1
- package/dist/controllers/not-found.js +1 -1
- package/dist/controllers/relations.js +1 -1
- package/dist/database/errors/dialects/mysql.d.ts +1 -1
- package/dist/database/errors/dialects/postgres.d.ts +1 -1
- package/dist/database/errors/dialects/sqlite.d.ts +1 -1
- package/dist/database/errors/translate.d.ts +1 -1
- package/dist/database/errors/translate.js +1 -1
- package/dist/database/helpers/date/dialects/mssql.js +1 -1
- package/dist/database/helpers/date/dialects/mysql.js +1 -1
- package/dist/database/helpers/date/types.js +1 -1
- package/dist/database/helpers/schema/dialects/cockroachdb.d.ts +1 -0
- package/dist/database/helpers/schema/dialects/cockroachdb.js +24 -1
- package/dist/database/helpers/schema/dialects/mssql.d.ts +1 -1
- package/dist/database/helpers/schema/dialects/mysql.d.ts +2 -1
- package/dist/database/helpers/schema/dialects/mysql.js +16 -3
- package/dist/database/helpers/schema/dialects/postgres.d.ts +1 -1
- package/dist/database/helpers/schema/types.d.ts +13 -0
- package/dist/database/helpers/schema/types.js +24 -0
- package/dist/database/index.js +4 -4
- package/dist/database/migrations/20220429A-add-flows.js +1 -1
- package/dist/database/migrations/20230526A-migrate-translation-strings.js +1 -1
- package/dist/database/migrations/20231009A-update-csv-fields-to-text.js +1 -1
- package/dist/database/migrations/20240204A-marketplace.js +9 -7
- package/dist/database/migrations/20240311A-deprecate-webhooks.d.ts +15 -0
- package/dist/database/migrations/20240311A-deprecate-webhooks.js +1 -1
- package/dist/database/migrations/20240806A-permissions-policies.js +3 -3
- package/dist/database/migrations/20240924A-migrate-legacy-comments.js +1 -1
- package/dist/database/migrations/20251014A-add-project-owner.js +1 -1
- package/dist/database/migrations/20251103A-add-ai-settings.d.ts +3 -0
- package/dist/database/migrations/20251103A-add-ai-settings.js +14 -0
- package/dist/database/migrations/20251224A-remove-webhooks.d.ts +3 -0
- package/dist/database/migrations/20251224A-remove-webhooks.js +19 -0
- package/dist/database/migrations/20260113A-add-revisions-index.d.ts +3 -0
- package/dist/database/migrations/20260113A-add-revisions-index.js +41 -0
- package/dist/database/migrations/run.js +3 -3
- package/dist/database/run-ast/lib/apply-query/filter/get-filter-type.d.ts +2 -2
- package/dist/database/run-ast/lib/apply-query/filter/get-filter-type.js +1 -1
- package/dist/database/run-ast/lib/apply-query/filter/operator.js +1 -1
- package/dist/database/run-ast/lib/apply-query/sort.js +1 -1
- package/dist/database/run-ast/run-ast.js +1 -1
- package/dist/database/run-ast/utils/get-column-pre-processor.js +2 -2
- package/dist/database/run-ast/utils/get-column.js +1 -1
- package/dist/database/seeds/run.js +3 -3
- package/dist/extensions/lib/get-extensions-path.js +1 -1
- package/dist/extensions/lib/get-extensions-settings.js +1 -1
- package/dist/extensions/lib/get-extensions.js +1 -1
- package/dist/extensions/lib/get-shared-deps-mapping.js +3 -3
- package/dist/extensions/lib/installation/manager.js +8 -12
- package/dist/extensions/lib/sandbox/register/route.d.ts +1 -1
- package/dist/extensions/lib/sync/status.d.ts +11 -0
- package/dist/extensions/lib/sync/status.js +34 -0
- package/dist/extensions/lib/sync/sync.d.ts +6 -0
- package/dist/extensions/lib/sync/sync.js +90 -0
- package/dist/extensions/lib/sync/tracker.d.ts +18 -0
- package/dist/extensions/lib/sync/tracker.js +71 -0
- package/dist/extensions/lib/sync/utils.d.ts +24 -0
- package/dist/extensions/lib/sync/utils.js +62 -0
- package/dist/extensions/manager.d.ts +9 -5
- package/dist/extensions/manager.js +36 -19
- package/dist/flows.d.ts +1 -1
- package/dist/logger/index.js +1 -1
- package/dist/logger/logs-stream.d.ts +1 -1
- package/dist/logger/logs-stream.js +1 -1
- package/dist/mailer.js +1 -1
- package/dist/metrics/lib/create-metrics.js +2 -2
- package/dist/middleware/authenticate.js +3 -3
- package/dist/middleware/collection-exists.js +1 -1
- package/dist/middleware/extract-token.js +1 -1
- package/dist/middleware/graphql.js +2 -2
- package/dist/middleware/respond.js +2 -2
- package/dist/middleware/validate-batch.js +1 -1
- package/dist/operations/exec/index.js +2 -1
- package/dist/operations/mail/index.js +1 -1
- package/dist/operations/mail/rate-limiter.js +2 -2
- package/dist/permissions/cache.js +5 -0
- package/dist/permissions/lib/fetch-policies.d.ts +1 -1
- package/dist/permissions/lib/fetch-roles-tree.d.ts +6 -3
- package/dist/permissions/lib/fetch-roles-tree.js +5 -27
- package/dist/permissions/modules/fetch-allowed-collections/fetch-allowed-collections.js +1 -1
- package/dist/permissions/modules/fetch-allowed-field-map/fetch-allowed-field-map.js +1 -1
- package/dist/permissions/modules/fetch-global-access/fetch-global-access.d.ts +9 -7
- package/dist/permissions/modules/fetch-global-access/fetch-global-access.js +17 -9
- package/dist/permissions/modules/fetch-inconsistent-field-map/fetch-inconsistent-field-map.js +2 -2
- package/dist/permissions/modules/fetch-policies-ip-access/fetch-policies-ip-access.d.ts +1 -1
- package/dist/permissions/modules/process-ast/lib/inject-cases.js +1 -1
- package/dist/permissions/modules/process-ast/process-ast.js +1 -1
- package/dist/permissions/modules/process-payload/process-payload.js +1 -1
- package/dist/permissions/modules/validate-access/lib/validate-item-access.d.ts +13 -1
- package/dist/permissions/modules/validate-access/lib/validate-item-access.js +54 -6
- package/dist/permissions/modules/validate-access/validate-access.js +3 -2
- package/dist/permissions/utils/fetch-raw-permissions.d.ts +1 -1
- package/dist/permissions/utils/fetch-share-info.d.ts +1 -1
- package/dist/permissions/utils/fetch-share-info.js +1 -1
- package/dist/permissions/utils/filter-policies-by-ip.js +1 -1
- package/dist/permissions/utils/get-permissions-for-share.js +8 -8
- package/dist/permissions/utils/with-cache.d.ts +8 -6
- package/dist/permissions/utils/with-cache.js +12 -10
- package/dist/rate-limiter.js +1 -1
- package/dist/request/is-denied-ip.js +2 -2
- package/dist/schedules/project.js +1 -1
- package/dist/schedules/telemetry.js +1 -1
- package/dist/schedules/tus.js +1 -1
- package/dist/server.js +4 -4
- package/dist/services/assets/name-deduper.d.ts +7 -0
- package/dist/services/assets/name-deduper.js +23 -0
- package/dist/services/assets.d.ts +17 -3
- package/dist/services/assets.js +133 -13
- package/dist/services/authentication.js +6 -6
- package/dist/services/collections.js +1 -1
- package/dist/services/comments.js +2 -2
- package/dist/services/extensions.d.ts +1 -1
- package/dist/services/extensions.js +4 -0
- package/dist/services/files/utils/get-metadata.d.ts +1 -1
- package/dist/services/files/utils/get-metadata.js +1 -1
- package/dist/services/files.d.ts +1 -1
- package/dist/services/files.js +4 -4
- package/dist/services/folders.d.ts +27 -2
- package/dist/services/folders.js +75 -0
- package/dist/services/graphql/index.d.ts +1 -1
- package/dist/services/graphql/index.js +1 -1
- package/dist/services/graphql/resolvers/mutation.js +1 -1
- package/dist/services/graphql/schema/get-types.d.ts +1 -1
- package/dist/services/graphql/schema/read.js +1 -1
- package/dist/services/graphql/subscription.d.ts +1 -1
- package/dist/services/graphql/types/date.js +1 -1
- package/dist/services/graphql/types/hash.js +1 -1
- package/dist/services/graphql/utils/add-path-to-validation-error.js +1 -1
- package/dist/services/import-export.d.ts +2 -2
- package/dist/services/import-export.js +6 -7
- package/dist/services/index.d.ts +0 -1
- package/dist/services/index.js +0 -1
- package/dist/services/mail/index.js +2 -2
- package/dist/services/mail/rate-limiter.js +2 -2
- package/dist/services/notifications.js +2 -2
- package/dist/services/payload.js +21 -1
- package/dist/services/roles.js +2 -2
- package/dist/services/schema.js +1 -1
- package/dist/services/server.js +12 -4
- package/dist/services/settings.js +2 -2
- package/dist/services/tfa.js +1 -1
- package/dist/services/translations.js +1 -1
- package/dist/services/tus/data-store.d.ts +1 -3
- package/dist/services/tus/data-store.js +2 -5
- package/dist/services/tus/server.js +9 -9
- package/dist/services/users.js +4 -4
- package/dist/services/versions.js +1 -1
- package/dist/telemetry/lib/send-report.d.ts +1 -1
- package/dist/telemetry/lib/send-report.js +1 -1
- package/dist/telemetry/lib/track.js +1 -1
- package/dist/telemetry/utils/get-settings.d.ts +15 -0
- package/dist/telemetry/utils/get-settings.js +13 -1
- package/dist/test-utils/README.md +95 -24
- package/dist/test-utils/cache.d.ts +2 -2
- package/dist/test-utils/cache.js +2 -2
- package/dist/test-utils/knex.js +1 -1
- package/dist/test-utils/{fields-service.d.ts → services/fields-service.d.ts} +1 -1
- package/dist/test-utils/{fields-service.js → services/fields-service.js} +3 -2
- package/dist/test-utils/services/files-service.d.ts +28 -0
- package/dist/test-utils/services/files-service.js +34 -0
- package/dist/test-utils/services/folders-service.d.ts +28 -0
- package/dist/test-utils/services/folders-service.js +33 -0
- package/dist/types/collection.d.ts +1 -1
- package/dist/utils/async-handler.d.ts +1 -1
- package/dist/utils/calculate-field-depth.js +1 -1
- package/dist/utils/compress.js +1 -1
- package/dist/utils/deep-map-response.js +2 -2
- package/dist/utils/encrypt.d.ts +2 -0
- package/dist/utils/encrypt.js +64 -0
- package/dist/utils/get-accountability-for-role.js +2 -2
- package/dist/utils/get-accountability-for-token.js +4 -4
- package/dist/utils/get-cache-key.js +3 -3
- package/dist/utils/get-field-system-rows.js +1 -1
- package/dist/utils/get-ip-from-req.d.ts +1 -1
- package/dist/utils/get-ip-from-req.js +1 -1
- package/dist/utils/get-local-type.js +7 -3
- package/dist/utils/get-service.js +1 -3
- package/dist/utils/get-snapshot-diff.js +1 -1
- package/dist/utils/is-url-allowed.js +1 -1
- package/dist/utils/jwt.js +1 -1
- package/dist/utils/require-text.d.ts +1 -0
- package/dist/utils/require-text.js +4 -0
- package/dist/utils/require-yaml.js +2 -2
- package/dist/utils/sanitize-schema.d.ts +1 -1
- package/dist/utils/should-clear-cache.d.ts +1 -1
- package/dist/utils/should-skip-cache.js +2 -2
- package/dist/utils/validate-diff.js +1 -1
- package/dist/utils/validate-snapshot.js +3 -3
- package/dist/utils/validate-storage.js +2 -2
- package/dist/utils/verify-session-jwt.js +1 -1
- package/dist/utils/versioning/deep-map-with-schema.js +2 -2
- package/dist/websocket/controllers/base.d.ts +2 -2
- package/dist/websocket/controllers/base.js +3 -3
- package/dist/websocket/controllers/graphql.d.ts +1 -1
- package/dist/websocket/controllers/graphql.js +1 -1
- package/dist/websocket/controllers/logs.d.ts +1 -1
- package/dist/websocket/controllers/rest.d.ts +1 -1
- package/dist/websocket/controllers/rest.js +2 -2
- package/dist/websocket/handlers/heartbeat.js +1 -1
- package/dist/websocket/handlers/items.js +2 -2
- package/dist/websocket/handlers/subscribe.js +1 -1
- package/dist/websocket/types.d.ts +1 -1
- package/dist/websocket/utils/wait-for-message.js +1 -1
- package/package.json +34 -28
- package/dist/controllers/webhooks.d.ts +0 -2
- package/dist/controllers/webhooks.js +0 -74
- package/dist/extensions/lib/sync-extensions.d.ts +0 -3
- package/dist/extensions/lib/sync-extensions.js +0 -70
- package/dist/extensions/lib/sync-status.d.ts +0 -10
- package/dist/extensions/lib/sync-status.js +0 -27
- package/dist/mcp/tools/index.d.ts +0 -15
- package/dist/mcp/tools/index.js +0 -29
- package/dist/mcp/tools/prompts/index.d.ts +0 -16
- package/dist/mcp/tools/prompts/index.js +0 -19
- package/dist/permissions/modules/fetch-global-access/lib/fetch-global-access-for-roles.d.ts +0 -5
- package/dist/permissions/modules/fetch-global-access/lib/fetch-global-access-for-roles.js +0 -7
- package/dist/permissions/modules/fetch-global-access/lib/fetch-global-access-for-user.d.ts +0 -5
- package/dist/permissions/modules/fetch-global-access/lib/fetch-global-access-for-user.js +0 -10
- package/dist/permissions/modules/fetch-global-access/types.d.ts +0 -4
- package/dist/permissions/modules/fetch-global-access/utils/fetch-global-access-for-query.d.ts +0 -4
- package/dist/permissions/modules/fetch-global-access/utils/fetch-global-access-for-query.js +0 -27
- package/dist/services/webhooks.d.ts +0 -14
- package/dist/services/webhooks.js +0 -32
- package/dist/utils/get-date-formatted.d.ts +0 -1
- package/dist/utils/get-date-formatted.js +0 -10
- package/dist/utils/ip-in-networks.d.ts +0 -6
- package/dist/utils/ip-in-networks.js +0 -13
- package/dist/utils/is-login-redirect-allowed.d.ts +0 -4
- /package/dist/{mcp → ai/mcp}/index.d.ts +0 -0
- /package/dist/{mcp → ai/mcp}/index.js +0 -0
- /package/dist/{mcp → ai/mcp}/transport.d.ts +0 -0
- /package/dist/{mcp → ai/mcp}/transport.js +0 -0
- /package/dist/{mcp → ai/mcp}/types.js +0 -0
- /package/dist/{mcp/tools/assets.d.ts → ai/tools/assets/index.d.ts} +0 -0
- /package/dist/{mcp/tools/prompts/assets.md → ai/tools/assets/prompt.md} +0 -0
- /package/dist/{mcp/tools/collections.d.ts → ai/tools/collections/index.d.ts} +0 -0
- /package/dist/{mcp/tools/prompts/collections.md → ai/tools/collections/prompt.md} +0 -0
- /package/dist/{mcp/define.d.ts → ai/tools/define-tool.d.ts} +0 -0
- /package/dist/{mcp/define.js → ai/tools/define-tool.js} +0 -0
- /package/dist/{mcp/tools/fields.d.ts → ai/tools/fields/index.d.ts} +0 -0
- /package/dist/{mcp/tools/prompts/fields.md → ai/tools/fields/prompt.md} +0 -0
- /package/dist/{mcp/tools/files.d.ts → ai/tools/files/index.d.ts} +0 -0
- /package/dist/{mcp/tools/prompts/files.md → ai/tools/files/prompt.md} +0 -0
- /package/dist/{mcp/tools/flows.d.ts → ai/tools/flows/index.d.ts} +0 -0
- /package/dist/{mcp/tools/prompts/flows.md → ai/tools/flows/prompt.md} +0 -0
- /package/dist/{mcp/tools/folders.d.ts → ai/tools/folders/index.d.ts} +0 -0
- /package/dist/{mcp/tools/prompts/folders.md → ai/tools/folders/prompt.md} +0 -0
- /package/dist/{mcp/tools/items.d.ts → ai/tools/items/index.d.ts} +0 -0
- /package/dist/{mcp/tools/prompts/operations.md → ai/tools/operations/prompt.md} +0 -0
- /package/dist/{mcp/tools/relations.d.ts → ai/tools/relations/index.d.ts} +0 -0
- /package/dist/{mcp/tools/prompts/relations.md → ai/tools/relations/prompt.md} +0 -0
- /package/dist/{mcp/tools/prompts/schema.md → ai/tools/schema/prompt.md} +0 -0
- /package/dist/{mcp → ai/tools}/schema.d.ts +0 -0
- /package/dist/{mcp → ai/tools}/schema.js +0 -0
- /package/dist/{mcp/tools/system.d.ts → ai/tools/system/index.d.ts} +0 -0
- /package/dist/{mcp/tools/prompts/system-prompt-description.md → ai/tools/system/prompt-description.md} +0 -0
- /package/dist/{mcp/tools/prompts/system-prompt.md → ai/tools/system/prompt.md} +0 -0
- /package/dist/{mcp/tools/trigger-flow.d.ts → ai/tools/trigger-flow/index.d.ts} +0 -0
- /package/dist/{mcp/tools/prompts/trigger-flow.md → ai/tools/trigger-flow/prompt.md} +0 -0
- /package/dist/{permissions/modules/fetch-global-access → ai/tools}/types.js +0 -0
- /package/dist/test-utils/{items-service.d.ts → services/items-service.d.ts} +0 -0
- /package/dist/test-utils/{items-service.js → services/items-service.js} +0 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
import { promisify } from 'node:util';
|
|
3
|
+
const VERSION = '1';
|
|
4
|
+
const KDF = 'scrypt';
|
|
5
|
+
const SCRYPT_DEFAULTS = { N: 2 ** 14, r: 8, p: 1 }; // ~16MB mem, good server default
|
|
6
|
+
const scryptAsync = promisify(crypto.scrypt);
|
|
7
|
+
const deriveKey = async (password, salt, opts = SCRYPT_DEFAULTS) => {
|
|
8
|
+
return await scryptAsync(password, salt, 32, opts);
|
|
9
|
+
};
|
|
10
|
+
export const encrypt = async (plainText, password) => {
|
|
11
|
+
const salt = crypto.randomBytes(16);
|
|
12
|
+
const keyBuf = await deriveKey(password, salt, SCRYPT_DEFAULTS);
|
|
13
|
+
// Generate a 12-byte IV for GCM and keep base64 string for storage
|
|
14
|
+
const ivBuf = crypto.randomBytes(12);
|
|
15
|
+
const iv = ivBuf.toString('base64');
|
|
16
|
+
const cipher = crypto.createCipheriv('aes-256-gcm', keyBuf, ivBuf);
|
|
17
|
+
let cipherText = cipher.update(plainText, 'utf8', 'base64');
|
|
18
|
+
cipherText += cipher.final('base64');
|
|
19
|
+
const tag = cipher.getAuthTag().toString('base64');
|
|
20
|
+
// 1||scrypt||N||r||p||salt||iv||cipherText||tag
|
|
21
|
+
return [
|
|
22
|
+
VERSION,
|
|
23
|
+
KDF,
|
|
24
|
+
SCRYPT_DEFAULTS.N,
|
|
25
|
+
SCRYPT_DEFAULTS.r,
|
|
26
|
+
SCRYPT_DEFAULTS.p,
|
|
27
|
+
salt.toString('base64'),
|
|
28
|
+
iv,
|
|
29
|
+
cipherText,
|
|
30
|
+
tag,
|
|
31
|
+
].join('||');
|
|
32
|
+
};
|
|
33
|
+
export const decrypt = async (encryptedText, password) => {
|
|
34
|
+
const parts = encryptedText.split('||');
|
|
35
|
+
if (parts.length < 9)
|
|
36
|
+
throw new Error('Invalid encrypted payload');
|
|
37
|
+
const [version, kdf, nStr, rStr, pStr, saltB64, ivB64, cipherText, tagB64] = parts;
|
|
38
|
+
if (version !== VERSION)
|
|
39
|
+
throw new Error(`Unsupported version: ${version}`);
|
|
40
|
+
if (kdf !== KDF)
|
|
41
|
+
throw new Error(`Unsupported kdf: ${kdf}`);
|
|
42
|
+
if (!saltB64)
|
|
43
|
+
throw new Error('No salt in encrypted string');
|
|
44
|
+
if (!ivB64)
|
|
45
|
+
throw new Error('No iv in encrypted string');
|
|
46
|
+
if (cipherText === undefined)
|
|
47
|
+
throw new Error('No cipherText in encrypted string');
|
|
48
|
+
if (!tagB64)
|
|
49
|
+
throw new Error('No tag in encrypted string');
|
|
50
|
+
const opts = {
|
|
51
|
+
N: Number(nStr) || SCRYPT_DEFAULTS.N,
|
|
52
|
+
r: Number(rStr) || SCRYPT_DEFAULTS.r,
|
|
53
|
+
p: Number(pStr) || SCRYPT_DEFAULTS.p,
|
|
54
|
+
};
|
|
55
|
+
const salt = Buffer.from(saltB64, 'base64');
|
|
56
|
+
const keyBuf = await deriveKey(password, salt, opts);
|
|
57
|
+
const iv = Buffer.from(ivB64, 'base64');
|
|
58
|
+
const tag = Buffer.from(tagB64, 'base64');
|
|
59
|
+
const decipher = crypto.createDecipheriv('aes-256-gcm', keyBuf, iv);
|
|
60
|
+
decipher.setAuthTag(tag);
|
|
61
|
+
let plaintext = decipher.update(cipherText, 'base64', 'utf8');
|
|
62
|
+
plaintext += decipher.final('utf8');
|
|
63
|
+
return plaintext;
|
|
64
|
+
};
|
|
@@ -13,13 +13,13 @@ export async function getAccountabilityForRole(role, context) {
|
|
|
13
13
|
});
|
|
14
14
|
}
|
|
15
15
|
else {
|
|
16
|
-
const roles = await fetchRolesTree(role, context.database);
|
|
16
|
+
const roles = await fetchRolesTree(role, { knex: context.database });
|
|
17
17
|
// The roles tree should always include the passed role. If it doesn't, it's because it
|
|
18
18
|
// couldn't be read from the database and therefore doesn't exist
|
|
19
19
|
if (roles.length === 0) {
|
|
20
20
|
throw new Error(`Configured role "${role}" isn't a valid role ID or doesn't exist.`);
|
|
21
21
|
}
|
|
22
|
-
const globalAccess = await fetchGlobalAccess({ user: null, roles, ip: context.accountability?.ip ?? null }, context.database);
|
|
22
|
+
const globalAccess = await fetchGlobalAccess({ user: null, roles, ip: context.accountability?.ip ?? null }, { knex: context.database });
|
|
23
23
|
generatedAccountability = createDefaultAccountability({
|
|
24
24
|
role,
|
|
25
25
|
roles,
|
|
@@ -25,8 +25,8 @@ export async function getAccountabilityForToken(token, accountability) {
|
|
|
25
25
|
if (payload.id)
|
|
26
26
|
accountability.user = payload.id;
|
|
27
27
|
accountability.role = payload.role;
|
|
28
|
-
accountability.roles = await fetchRolesTree(payload.role, database);
|
|
29
|
-
const { admin, app } = await fetchGlobalAccess(accountability, database);
|
|
28
|
+
accountability.roles = await fetchRolesTree(payload.role, { knex: database });
|
|
29
|
+
const { admin, app } = await fetchGlobalAccess(accountability, { knex: database });
|
|
30
30
|
accountability.admin = admin;
|
|
31
31
|
accountability.app = app;
|
|
32
32
|
}
|
|
@@ -44,8 +44,8 @@ export async function getAccountabilityForToken(token, accountability) {
|
|
|
44
44
|
}
|
|
45
45
|
accountability.user = user.id;
|
|
46
46
|
accountability.role = user.role;
|
|
47
|
-
accountability.roles = await fetchRolesTree(user.role, database);
|
|
48
|
-
const { admin, app } = await fetchGlobalAccess(accountability, database);
|
|
47
|
+
accountability.roles = await fetchRolesTree(user.role, { knex: database });
|
|
48
|
+
const { admin, app } = await fetchGlobalAccess(accountability, { knex: database });
|
|
49
49
|
accountability.admin = admin;
|
|
50
50
|
accountability.app = app;
|
|
51
51
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import hash from 'object-hash';
|
|
2
1
|
import url from 'url';
|
|
2
|
+
import { ipInNetworks } from '@directus/utils/node';
|
|
3
|
+
import { version } from 'directus/version';
|
|
4
|
+
import hash from 'object-hash';
|
|
3
5
|
import getDatabase from '../database/index.js';
|
|
4
6
|
import { fetchPoliciesIpAccess } from '../permissions/modules/fetch-policies-ip-access/fetch-policies-ip-access.js';
|
|
5
7
|
import { getGraphqlQueryAndVariables } from './get-graphql-query-and-variables.js';
|
|
6
|
-
import { version } from 'directus/version';
|
|
7
|
-
import { ipInNetworks } from './ip-in-networks.js';
|
|
8
8
|
export async function getCacheKey(req) {
|
|
9
9
|
const path = url.parse(req.originalUrl).pathname;
|
|
10
10
|
const isGraphQl = path?.startsWith('/graphql');
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { systemFieldRows } from '@directus/system-data';
|
|
2
1
|
import formatTitle from '@directus/format-title';
|
|
2
|
+
import { systemFieldRows } from '@directus/system-data';
|
|
3
3
|
import { getAuthProviders } from './get-auth-providers.js';
|
|
4
4
|
// Dynamically populate auth providers field
|
|
5
5
|
export function getSystemFieldRowsWithAuthProviders() {
|
|
@@ -61,15 +61,15 @@ const localTypeMap = {
|
|
|
61
61
|
binary: 'binary',
|
|
62
62
|
varbinary: 'binary',
|
|
63
63
|
uniqueidentifier: 'uuid',
|
|
64
|
-
// Postgres
|
|
64
|
+
// Postgres / Cockroachdb
|
|
65
65
|
json: 'json',
|
|
66
66
|
jsonb: 'json',
|
|
67
67
|
uuid: 'uuid',
|
|
68
68
|
int2: 'integer',
|
|
69
69
|
serial4: 'integer',
|
|
70
70
|
int4: 'integer',
|
|
71
|
-
serial8: '
|
|
72
|
-
int8: '
|
|
71
|
+
serial8: 'bigInteger',
|
|
72
|
+
int8: 'bigInteger',
|
|
73
73
|
bool: 'boolean',
|
|
74
74
|
'character varying': 'string',
|
|
75
75
|
character: 'string',
|
|
@@ -124,5 +124,9 @@ export default function getLocalType(column, field) {
|
|
|
124
124
|
if (column.data_type === 'nvarchar' && column.max_length === -1) {
|
|
125
125
|
return 'text';
|
|
126
126
|
}
|
|
127
|
+
/** Handle CockroachDB 64-bit integers (reported as 'integer' with precision 64) */
|
|
128
|
+
if ((dataType === 'integer' || dataType === 'int') && column.numeric_precision === 64) {
|
|
129
|
+
return 'bigInteger';
|
|
130
|
+
}
|
|
127
131
|
return type ?? 'unknown';
|
|
128
132
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ForbiddenError } from '@directus/errors';
|
|
2
|
-
import { AccessService, ActivityService, CommentsService, DashboardsService, FilesService, FlowsService, FoldersService, ItemsService, NotificationsService, OperationsService, PanelsService, PermissionsService, PoliciesService, PresetsService, RevisionsService, RolesService, SettingsService, SharesService, TranslationsService, UsersService, VersionsService,
|
|
2
|
+
import { AccessService, ActivityService, CommentsService, DashboardsService, FilesService, FlowsService, FoldersService, ItemsService, NotificationsService, OperationsService, PanelsService, PermissionsService, PoliciesService, PresetsService, RevisionsService, RolesService, SettingsService, SharesService, TranslationsService, UsersService, VersionsService, } from '../services/index.js';
|
|
3
3
|
/**
|
|
4
4
|
* Select the correct service for the given collection. This allows the individual services to run
|
|
5
5
|
* their custom checks (f.e. it allows `UsersService` to prevent updating TFA secret from outside).
|
|
@@ -46,8 +46,6 @@ export function getService(collection, opts) {
|
|
|
46
46
|
return new UsersService(opts);
|
|
47
47
|
case 'directus_versions':
|
|
48
48
|
return new VersionsService(opts);
|
|
49
|
-
case 'directus_webhooks':
|
|
50
|
-
return new WebhooksService(opts);
|
|
51
49
|
default:
|
|
52
50
|
// Deny usage of other system collections via ItemsService
|
|
53
51
|
if (collection.startsWith('directus_'))
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import deepDiff from 'deep-diff';
|
|
2
1
|
import { DiffKind } from '@directus/types';
|
|
2
|
+
import deepDiff from 'deep-diff';
|
|
3
3
|
import { sanitizeCollection, sanitizeField, sanitizeRelation, sanitizeSystemField } from './sanitize-schema.js';
|
|
4
4
|
export function getSnapshotDiff(current, after) {
|
|
5
5
|
const diffedSnapshot = {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { toArray } from '@directus/utils';
|
|
2
1
|
import { URL } from 'url';
|
|
2
|
+
import { toArray } from '@directus/utils';
|
|
3
3
|
import { useLogger } from '../logger/index.js';
|
|
4
4
|
/**
|
|
5
5
|
* Check if URL matches allow list either exactly or by origin (protocol+domain+port) + pathname
|
package/dist/utils/jwt.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function requireText(filepath: string): string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import fse from 'fs-extra';
|
|
2
1
|
import yaml from 'js-yaml';
|
|
2
|
+
import { requireText } from './require-text.js';
|
|
3
3
|
export function requireYAML(filepath) {
|
|
4
|
-
const yamlRaw =
|
|
4
|
+
const yamlRaw = requireText(filepath);
|
|
5
5
|
return yaml.load(yamlRaw);
|
|
6
6
|
}
|
|
@@ -16,7 +16,7 @@ export declare function sanitizeCollection(collection: Collection): SnapshotColl
|
|
|
16
16
|
* @returns sanitized field
|
|
17
17
|
*/
|
|
18
18
|
export declare function sanitizeField(field: Field, sanitizeAllSchema?: boolean): SnapshotField;
|
|
19
|
-
export declare function sanitizeColumn(column: Column): Pick<Column, "
|
|
19
|
+
export declare function sanitizeColumn(column: Column): Pick<Column, "name" | "table" | "foreign_key_table" | "foreign_key_column" | "data_type" | "default_value" | "max_length" | "numeric_precision" | "numeric_scale" | "is_nullable" | "is_unique" | "is_indexed" | "is_primary_key" | "is_generated" | "generation_expression" | "has_auto_increment">;
|
|
20
20
|
/**
|
|
21
21
|
* Pick certain database vendor specific relation properties that should be compared when performing diff
|
|
22
22
|
*
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { useEnv } from '@directus/env';
|
|
2
1
|
import url from 'url';
|
|
3
|
-
import {
|
|
2
|
+
import { useEnv } from '@directus/env';
|
|
4
3
|
import { getEndpoint } from '@directus/utils';
|
|
4
|
+
import { Url } from './url.js';
|
|
5
5
|
/**
|
|
6
6
|
* Whether to skip caching for the current request
|
|
7
7
|
*
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { TYPES } from '@directus/constants';
|
|
2
|
-
import Joi from 'joi';
|
|
3
|
-
import { ALIAS_TYPES } from '../constants.js';
|
|
4
|
-
import { getDatabaseClient } from '../database/index.js';
|
|
5
2
|
import { InvalidPayloadError } from '@directus/errors';
|
|
6
3
|
import { DatabaseClients } from '@directus/types';
|
|
7
4
|
import { version } from 'directus/version';
|
|
5
|
+
import Joi from 'joi';
|
|
6
|
+
import { ALIAS_TYPES } from '../constants.js';
|
|
7
|
+
import { getDatabaseClient } from '../database/index.js';
|
|
8
8
|
const snapshotJoiSchema = Joi.object({
|
|
9
9
|
version: Joi.number().valid(1).required(),
|
|
10
10
|
directus: Joi.string().required(),
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { useEnv } from '@directus/env';
|
|
2
|
-
import { toArray } from '@directus/utils';
|
|
3
1
|
import { constants } from 'fs';
|
|
4
2
|
import { access } from 'node:fs/promises';
|
|
5
3
|
import path from 'path';
|
|
4
|
+
import { useEnv } from '@directus/env';
|
|
5
|
+
import { toArray } from '@directus/utils';
|
|
6
6
|
import { getExtensionsPath } from '../extensions/lib/get-extensions-path.js';
|
|
7
7
|
import { useLogger } from '../logger/index.js';
|
|
8
8
|
export async function validateStorage() {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { isPlainObject } from 'lodash-es';
|
|
2
1
|
import assert from 'node:assert';
|
|
3
|
-
import { getRelationInfo } from '../get-relation-info.js';
|
|
4
2
|
import { InvalidQueryError } from '@directus/errors';
|
|
3
|
+
import { isPlainObject } from 'lodash-es';
|
|
4
|
+
import { getRelationInfo } from '../get-relation-info.js';
|
|
5
5
|
/**
|
|
6
6
|
* Allows to deep map the data like a response or delta changes with collection, field and relation context for each entry.
|
|
7
7
|
* Bottom to Top depth first mapping of values.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import type { Server as httpServer, IncomingMessage } from 'http';
|
|
2
|
+
import type internal from 'stream';
|
|
1
3
|
import type { Accountability } from '@directus/types';
|
|
2
4
|
import { WebSocketMessage } from '@directus/types';
|
|
3
|
-
import type { IncomingMessage, Server as httpServer } from 'http';
|
|
4
5
|
import type { RateLimiterAbstract } from 'rate-limiter-flexible';
|
|
5
|
-
import type internal from 'stream';
|
|
6
6
|
import WebSocket, { type Server } from 'ws';
|
|
7
7
|
import { WebSocketAuthMessage } from '../messages.js';
|
|
8
8
|
import type { AuthenticationState, UpgradeContext, WebSocketAuthentication, WebSocketClient } from '../types.js';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { parse } from 'url';
|
|
1
3
|
import { useEnv } from '@directus/env';
|
|
2
4
|
import { InvalidProviderConfigError, TokenExpiredError } from '@directus/errors';
|
|
3
5
|
import { WebSocketMessage } from '@directus/types';
|
|
4
6
|
import { parseJSON, toBoolean } from '@directus/utils';
|
|
5
7
|
import cookie from 'cookie';
|
|
6
|
-
import { randomUUID } from 'node:crypto';
|
|
7
|
-
import { parse } from 'url';
|
|
8
8
|
import WebSocket, { WebSocketServer } from 'ws';
|
|
9
9
|
import { fromZodError } from 'zod-validation-error';
|
|
10
10
|
import emitter from '../../emitter.js';
|
|
@@ -13,7 +13,7 @@ import { createDefaultAccountability } from '../../permissions/utils/create-defa
|
|
|
13
13
|
import { createRateLimiter } from '../../rate-limiter.js';
|
|
14
14
|
import { getIPFromReq } from '../../utils/get-ip-from-req.js';
|
|
15
15
|
import { authenticateConnection, authenticationSuccess } from '../authenticate.js';
|
|
16
|
-
import {
|
|
16
|
+
import { handleWebSocketError, WebSocketError } from '../errors.js';
|
|
17
17
|
import { AuthMode, WebSocketAuthMessage } from '../messages.js';
|
|
18
18
|
import { getMessageType } from '../utils/message.js';
|
|
19
19
|
import { waitForAnyMessage, waitForMessageType } from '../utils/wait-for-message.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Server } from 'graphql-ws';
|
|
2
1
|
import type { Server as httpServer } from 'http';
|
|
2
|
+
import type { Server } from 'graphql-ws';
|
|
3
3
|
import type { GraphQLSocket, UpgradeContext, WebSocketClient } from '../types.js';
|
|
4
4
|
import SocketController from './base.js';
|
|
5
5
|
export declare class GraphQLSubscriptionController extends SocketController {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CloseCode,
|
|
1
|
+
import { CloseCode, makeServer, MessageType } from 'graphql-ws';
|
|
2
2
|
import { useLogger } from '../../logger/index.js';
|
|
3
3
|
import { createDefaultAccountability } from '../../permissions/utils/create-default-accountability.js';
|
|
4
4
|
import { bindPubSub } from '../../services/graphql/subscription.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Server as httpServer } from 'http';
|
|
2
|
+
import type { Accountability } from '@directus/types';
|
|
2
3
|
import { AuthMode } from '../messages.js';
|
|
3
4
|
import SocketController from './base.js';
|
|
4
|
-
import type { Accountability } from '@directus/types';
|
|
5
5
|
export declare class LogsController extends SocketController {
|
|
6
6
|
constructor(httpServer: httpServer);
|
|
7
7
|
getEnvironmentConfig(configPrefix: string): {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { WebSocketMessage } from '@directus/types';
|
|
2
1
|
import type { Server as httpServer } from 'http';
|
|
2
|
+
import { WebSocketMessage } from '@directus/types';
|
|
3
3
|
import SocketController from './base.js';
|
|
4
4
|
export declare class WebSocketController extends SocketController {
|
|
5
5
|
constructor(httpServer: httpServer);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { parseJSON } from '@directus/utils';
|
|
2
1
|
import { WebSocketMessage } from '@directus/types';
|
|
2
|
+
import { parseJSON } from '@directus/utils';
|
|
3
3
|
import emitter from '../../emitter.js';
|
|
4
4
|
import { useLogger } from '../../logger/index.js';
|
|
5
5
|
import { getAddress } from '../../utils/get-address.js';
|
|
6
|
-
import {
|
|
6
|
+
import { handleWebSocketError, WebSocketError } from '../errors.js';
|
|
7
7
|
import SocketController from './base.js';
|
|
8
8
|
import { registerWebSocketEvents } from './hooks.js';
|
|
9
9
|
const logger = useLogger();
|
|
@@ -3,7 +3,7 @@ import { ServiceUnavailableError } from '@directus/errors';
|
|
|
3
3
|
import { WebSocketMessage } from '@directus/types';
|
|
4
4
|
import { toBoolean } from '@directus/utils';
|
|
5
5
|
import emitter from '../../emitter.js';
|
|
6
|
-
import {
|
|
6
|
+
import { getWebSocketController, WebSocketController } from '../controllers/index.js';
|
|
7
7
|
import { fmtMessage, getMessageType } from '../utils/message.js';
|
|
8
8
|
const env = useEnv();
|
|
9
9
|
const HEARTBEAT_FREQUENCY = Number(env['WEBSOCKETS_HEARTBEAT_PERIOD']) * 1000;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { isSystemCollection } from '@directus/system-data';
|
|
1
2
|
import emitter from '../../emitter.js';
|
|
2
3
|
import { ItemsService, MetaService } from '../../services/index.js';
|
|
3
4
|
import { getSchema } from '../../utils/get-schema.js';
|
|
4
|
-
import { isSystemCollection } from '@directus/system-data';
|
|
5
5
|
import { sanitizeQuery } from '../../utils/sanitize-query.js';
|
|
6
|
-
import {
|
|
6
|
+
import { handleWebSocketError, WebSocketError } from '../errors.js';
|
|
7
7
|
import { WebSocketItemsMessage } from '../messages.js';
|
|
8
8
|
import { fmtMessage, getMessageType } from '../utils/message.js';
|
|
9
9
|
export class ItemsHandler {
|
|
@@ -4,7 +4,7 @@ import { useBus } from '../../bus/index.js';
|
|
|
4
4
|
import emitter from '../../emitter.js';
|
|
5
5
|
import { getSchema } from '../../utils/get-schema.js';
|
|
6
6
|
import { sanitizeQuery } from '../../utils/sanitize-query.js';
|
|
7
|
-
import {
|
|
7
|
+
import { handleWebSocketError, WebSocketError } from '../errors.js';
|
|
8
8
|
import { WebSocketSubscribeMessage } from '../messages.js';
|
|
9
9
|
import { getPayload } from '../utils/items.js';
|
|
10
10
|
import { fmtMessage, getMessageType } from '../utils/message.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { Accountability, Query } from '@directus/types';
|
|
2
1
|
import type { IncomingMessage } from 'http';
|
|
3
2
|
import type internal from 'stream';
|
|
3
|
+
import type { Accountability, Query } from '@directus/types';
|
|
4
4
|
import type { WebSocket } from 'ws';
|
|
5
5
|
import type { AuthMode } from './messages.js';
|
|
6
6
|
export type AuthenticationState = {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { parseJSON } from '@directus/utils';
|
|
2
1
|
import { WebSocketMessage } from '@directus/types';
|
|
2
|
+
import { parseJSON } from '@directus/utils';
|
|
3
3
|
import { getMessageType } from './message.js';
|
|
4
4
|
export const waitForAnyMessage = (client, timeout) => {
|
|
5
5
|
return new Promise((resolve, reject) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@directus/api",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "33.0.0",
|
|
4
4
|
"description": "Directus is a real-time API and App dashboard for managing SQL database content",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"directus",
|
|
@@ -58,15 +58,19 @@
|
|
|
58
58
|
"dist"
|
|
59
59
|
],
|
|
60
60
|
"dependencies": {
|
|
61
|
+
"@ai-sdk/anthropic": "3.0.0-beta.53",
|
|
62
|
+
"@ai-sdk/openai": "3.0.0-beta.57",
|
|
61
63
|
"@authenio/samlify-node-xmllint": "2.0.0",
|
|
62
64
|
"@aws-sdk/client-sesv2": "3.928.0",
|
|
63
65
|
"@godaddy/terminus": "4.12.1",
|
|
64
|
-
"@modelcontextprotocol/sdk": "1.
|
|
66
|
+
"@modelcontextprotocol/sdk": "1.24.0",
|
|
65
67
|
"@rollup/plugin-alias": "5.1.1",
|
|
66
68
|
"@rollup/plugin-node-resolve": "16.0.3",
|
|
67
69
|
"@rollup/plugin-virtual": "3.0.2",
|
|
68
70
|
"@tus/server": "2.3.0",
|
|
69
71
|
"@tus/utils": "0.6.0",
|
|
72
|
+
"archiver": "7.0.1",
|
|
73
|
+
"ai": "6.0.0-beta.98",
|
|
70
74
|
"argon2": "0.44.0",
|
|
71
75
|
"async": "3.2.6",
|
|
72
76
|
"async-mutex": "0.5.0",
|
|
@@ -81,6 +85,7 @@
|
|
|
81
85
|
"cookie": "1.0.2",
|
|
82
86
|
"cookie-parser": "1.4.7",
|
|
83
87
|
"cors": "2.8.5",
|
|
88
|
+
"cron": "4.3.4",
|
|
84
89
|
"date-fns": "4.1.0",
|
|
85
90
|
"deep-diff": "1.0.2",
|
|
86
91
|
"destroy": "1.2.0",
|
|
@@ -106,7 +111,7 @@
|
|
|
106
111
|
"js-yaml": "4.1.1",
|
|
107
112
|
"js2xmlparser": "5.0.0",
|
|
108
113
|
"json2csv": "5.0.7",
|
|
109
|
-
"jsonwebtoken": "9.0.
|
|
114
|
+
"jsonwebtoken": "9.0.3",
|
|
110
115
|
"keyv": "5.5.3",
|
|
111
116
|
"knex": "3.1.0",
|
|
112
117
|
"ldapjs": "2.3.3",
|
|
@@ -120,8 +125,7 @@
|
|
|
120
125
|
"ms": "2.1.3",
|
|
121
126
|
"nanoid": "5.1.6",
|
|
122
127
|
"node-machine-id": "1.1.12",
|
|
123
|
-
"
|
|
124
|
-
"nodemailer": "7.0.10",
|
|
128
|
+
"nodemailer": "7.0.11",
|
|
125
129
|
"object-hash": "3.0.0",
|
|
126
130
|
"openapi3-ts": "4.5.0",
|
|
127
131
|
"openid-client": "5.7.1",
|
|
@@ -141,7 +145,8 @@
|
|
|
141
145
|
"rate-limiter-flexible": "7.2.0",
|
|
142
146
|
"rolldown": "1.0.0-beta.31",
|
|
143
147
|
"rollup": "4.52.5",
|
|
144
|
-
"samlify": "2.10.
|
|
148
|
+
"samlify": "2.10.2",
|
|
149
|
+
"sanitize-filename": "1.6.3",
|
|
145
150
|
"sanitize-html": "2.17.0",
|
|
146
151
|
"sharp": "0.34.5",
|
|
147
152
|
"snappy": "7.3.3",
|
|
@@ -153,34 +158,35 @@
|
|
|
153
158
|
"ws": "8.18.3",
|
|
154
159
|
"zod": "4.1.12",
|
|
155
160
|
"zod-validation-error": "4.0.2",
|
|
156
|
-
"@directus/app": "
|
|
157
|
-
"@directus/env": "5.3.2",
|
|
158
|
-
"@directus/extensions-registry": "3.0.14",
|
|
159
|
-
"@directus/extensions": "3.0.14",
|
|
160
|
-
"@directus/errors": "2.0.5",
|
|
161
|
+
"@directus/app": "15.0.0",
|
|
161
162
|
"@directus/constants": "14.0.0",
|
|
162
|
-
"@directus/
|
|
163
|
-
"@directus/
|
|
163
|
+
"@directus/env": "5.4.0",
|
|
164
|
+
"@directus/extensions": "3.0.16",
|
|
165
|
+
"@directus/extensions-registry": "3.0.16",
|
|
166
|
+
"@directus/errors": "2.1.0",
|
|
167
|
+
"@directus/extensions-sdk": "17.0.5",
|
|
168
|
+
"@directus/memory": "3.0.14",
|
|
164
169
|
"@directus/format-title": "12.1.1",
|
|
165
|
-
"@directus/pressure": "3.0.
|
|
166
|
-
"@directus/schema
|
|
167
|
-
"@directus/
|
|
168
|
-
"@directus/
|
|
170
|
+
"@directus/pressure": "3.0.14",
|
|
171
|
+
"@directus/schema": "13.0.5",
|
|
172
|
+
"@directus/schema-builder": "0.0.11",
|
|
173
|
+
"@directus/specs": "12.0.0",
|
|
169
174
|
"@directus/storage": "12.0.3",
|
|
170
|
-
"@directus/storage-driver-
|
|
171
|
-
"@directus/storage-driver-
|
|
175
|
+
"@directus/storage-driver-azure": "12.0.14",
|
|
176
|
+
"@directus/storage-driver-gcs": "12.0.14",
|
|
172
177
|
"@directus/storage-driver-local": "12.0.3",
|
|
173
|
-
"@directus/storage-driver-
|
|
174
|
-
"@directus/storage-driver-
|
|
175
|
-
"@directus/
|
|
176
|
-
"@directus/utils": "13.
|
|
177
|
-
"@directus/validation": "2.0.
|
|
178
|
-
"
|
|
179
|
-
"directus": "
|
|
178
|
+
"@directus/storage-driver-cloudinary": "12.0.14",
|
|
179
|
+
"@directus/storage-driver-s3": "12.1.0",
|
|
180
|
+
"@directus/system-data": "4.0.0",
|
|
181
|
+
"@directus/utils": "13.1.1",
|
|
182
|
+
"@directus/validation": "2.0.14",
|
|
183
|
+
"directus": "11.14.1",
|
|
184
|
+
"@directus/storage-driver-supabase": "3.0.14"
|
|
180
185
|
},
|
|
181
186
|
"devDependencies": {
|
|
182
187
|
"@directus/tsconfig": "3.0.0",
|
|
183
188
|
"@ngneat/falso": "8.0.2",
|
|
189
|
+
"@types/archiver": "7.0.0",
|
|
184
190
|
"@types/async": "3.2.25",
|
|
185
191
|
"@types/busboy": "1.5.4",
|
|
186
192
|
"@types/bytes": "3.1.5",
|
|
@@ -219,8 +225,8 @@
|
|
|
219
225
|
"knex-mock-client": "3.0.2",
|
|
220
226
|
"typescript": "5.9.3",
|
|
221
227
|
"vitest": "3.2.4",
|
|
222
|
-
"@directus/schema-builder": "0.0.
|
|
223
|
-
"@directus/types": "
|
|
228
|
+
"@directus/schema-builder": "0.0.11",
|
|
229
|
+
"@directus/types": "14.0.0"
|
|
224
230
|
},
|
|
225
231
|
"optionalDependencies": {
|
|
226
232
|
"@keyv/redis": "3.0.1",
|