directus 9.23.1 → 9.23.3
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/app.js +14 -10
- package/dist/auth/auth.d.ts +3 -3
- package/dist/auth/auth.js +2 -0
- package/dist/auth/drivers/ldap.d.ts +1 -1
- package/dist/auth/drivers/ldap.js +39 -28
- package/dist/auth/drivers/local.d.ts +1 -1
- package/dist/auth/drivers/local.js +13 -10
- package/dist/auth/drivers/oauth2.d.ts +1 -1
- package/dist/auth/drivers/oauth2.js +20 -13
- package/dist/auth/drivers/openid.d.ts +1 -1
- package/dist/auth/drivers/openid.js +21 -14
- package/dist/auth/drivers/saml.d.ts +1 -1
- package/dist/auth/drivers/saml.js +10 -7
- package/dist/auth.d.ts +1 -1
- package/dist/auth.js +4 -4
- package/dist/cache.d.ts +9 -1
- package/dist/cache.js +57 -14
- package/dist/cli/commands/bootstrap/index.js +2 -2
- package/dist/cli/commands/init/index.js +3 -3
- package/dist/cli/commands/schema/apply.js +14 -15
- package/dist/cli/commands/schema/snapshot.js +2 -2
- package/dist/cli/utils/create-db-connection.d.ts +1 -1
- package/dist/cli/utils/create-db-connection.js +2 -1
- package/dist/cli/utils/create-env/index.d.ts +2 -2
- package/dist/cli/utils/drivers.d.ts +1 -1
- package/dist/constants.d.ts +2 -2
- package/dist/constants.js +2 -3
- package/dist/controllers/activity.js +1 -2
- package/dist/controllers/assets.js +14 -9
- package/dist/controllers/auth.js +29 -15
- package/dist/controllers/dashboards.js +5 -2
- package/dist/controllers/fields.js +4 -4
- package/dist/controllers/files.js +10 -5
- package/dist/controllers/flows.js +5 -2
- package/dist/controllers/folders.js +5 -2
- package/dist/controllers/graphql.js +2 -4
- package/dist/controllers/items.js +5 -2
- package/dist/controllers/not-found.d.ts +1 -1
- package/dist/controllers/not-found.js +1 -2
- package/dist/controllers/notifications.js +5 -2
- package/dist/controllers/operations.js +5 -2
- package/dist/controllers/panels.js +5 -2
- package/dist/controllers/permissions.js +5 -2
- package/dist/controllers/presets.js +5 -2
- package/dist/controllers/roles.js +5 -2
- package/dist/controllers/shares.js +8 -5
- package/dist/controllers/users.js +16 -20
- package/dist/controllers/utils.js +6 -11
- package/dist/controllers/webhooks.js +5 -2
- package/dist/database/helpers/fn/dialects/mssql.d.ts +1 -1
- package/dist/database/helpers/fn/dialects/mssql.js +10 -11
- package/dist/database/helpers/fn/dialects/mysql.d.ts +1 -1
- package/dist/database/helpers/fn/dialects/mysql.js +2 -3
- package/dist/database/helpers/fn/dialects/oracle.d.ts +1 -1
- package/dist/database/helpers/fn/dialects/oracle.js +10 -11
- package/dist/database/helpers/fn/dialects/postgres.d.ts +1 -1
- package/dist/database/helpers/fn/dialects/postgres.js +10 -11
- package/dist/database/helpers/fn/dialects/sqlite.d.ts +1 -1
- package/dist/database/helpers/fn/dialects/sqlite.js +10 -11
- package/dist/database/helpers/fn/types.d.ts +5 -5
- package/dist/database/helpers/fn/types.js +5 -4
- package/dist/database/helpers/geometry/dialects/mssql.d.ts +3 -3
- package/dist/database/helpers/geometry/dialects/mysql.d.ts +1 -1
- package/dist/database/helpers/geometry/dialects/oracle.d.ts +3 -3
- package/dist/database/helpers/geometry/dialects/postgres.d.ts +3 -3
- package/dist/database/helpers/geometry/dialects/postgres.js +1 -2
- package/dist/database/helpers/geometry/dialects/redshift.d.ts +2 -2
- package/dist/database/helpers/geometry/dialects/sqlite.d.ts +1 -1
- package/dist/database/helpers/geometry/types.d.ts +2 -2
- package/dist/database/helpers/geometry/types.js +1 -2
- package/dist/database/helpers/index.d.ts +5 -5
- package/dist/database/helpers/schema/dialects/cockroachdb.d.ts +1 -1
- package/dist/database/helpers/schema/dialects/mssql.d.ts +1 -1
- package/dist/database/helpers/schema/dialects/mysql.d.ts +1 -1
- package/dist/database/helpers/schema/dialects/mysql.js +1 -2
- package/dist/database/helpers/schema/dialects/oracle.d.ts +2 -2
- package/dist/database/helpers/schema/dialects/oracle.js +4 -6
- package/dist/database/helpers/schema/types.d.ts +4 -4
- package/dist/database/helpers/types.d.ts +1 -1
- package/dist/database/helpers/types.js +1 -0
- package/dist/database/index.d.ts +1 -1
- package/dist/database/index.js +8 -8
- package/dist/database/migrations/20201028A-remove-collection-foreign-keys.d.ts +1 -1
- package/dist/database/migrations/20201029A-remove-system-relations.d.ts +1 -1
- package/dist/database/migrations/20201029B-remove-system-collections.d.ts +1 -1
- package/dist/database/migrations/20201029C-remove-system-fields.d.ts +1 -1
- package/dist/database/migrations/20201105A-add-cascade-system-relations.d.ts +1 -1
- package/dist/database/migrations/20201105B-change-webhook-url-type.d.ts +1 -1
- package/dist/database/migrations/20210225A-add-relations-sort-field.d.ts +1 -1
- package/dist/database/migrations/20210225A-add-relations-sort-field.js +1 -2
- package/dist/database/migrations/20210304A-remove-locked-fields.d.ts +1 -1
- package/dist/database/migrations/20210312A-webhooks-collections-text.d.ts +1 -1
- package/dist/database/migrations/20210331A-add-refresh-interval.d.ts +1 -1
- package/dist/database/migrations/20210415A-make-filesize-nullable.d.ts +1 -1
- package/dist/database/migrations/20210416A-add-collections-accountability.d.ts +1 -1
- package/dist/database/migrations/20210422A-remove-files-interface.d.ts +1 -1
- package/dist/database/migrations/20210506A-rename-interfaces.d.ts +1 -1
- package/dist/database/migrations/20210510A-restructure-relations.d.ts +1 -1
- package/dist/database/migrations/20210518A-add-foreign-key-constraints.d.ts +1 -1
- package/dist/database/migrations/20210518A-add-foreign-key-constraints.js +1 -1
- package/dist/database/migrations/20210519A-add-system-fk-triggers.d.ts +1 -1
- package/dist/database/migrations/20210519A-add-system-fk-triggers.js +2 -2
- package/dist/database/migrations/20210521A-add-collections-icon-color.d.ts +1 -1
- package/dist/database/migrations/20210525A-add-insights.d.ts +1 -1
- package/dist/database/migrations/20210608A-add-deep-clone-config.d.ts +1 -1
- package/dist/database/migrations/20210626A-change-filesize-bigint.d.ts +1 -1
- package/dist/database/migrations/20210716A-add-conditions-to-fields.d.ts +1 -1
- package/dist/database/migrations/20210721A-add-default-folder.d.ts +1 -1
- package/dist/database/migrations/20210802A-replace-groups.d.ts +1 -1
- package/dist/database/migrations/20210803A-add-required-to-fields.d.ts +1 -1
- package/dist/database/migrations/20210805A-update-groups.d.ts +1 -1
- package/dist/database/migrations/20210805B-change-image-metadata-structure.d.ts +1 -1
- package/dist/database/migrations/20210811A-add-geometry-config.d.ts +1 -1
- package/dist/database/migrations/20210831A-remove-limit-column.d.ts +1 -1
- package/dist/database/migrations/20210903A-add-auth-provider.d.ts +1 -1
- package/dist/database/migrations/20210907A-webhooks-collections-not-null.d.ts +1 -1
- package/dist/database/migrations/20210910A-move-module-setup.d.ts +1 -1
- package/dist/database/migrations/20210920A-webhooks-url-not-null.d.ts +1 -1
- package/dist/database/migrations/20210924A-add-collection-organization.d.ts +1 -1
- package/dist/database/migrations/20210927A-replace-fields-group.d.ts +1 -1
- package/dist/database/migrations/20210927B-replace-m2m-interface.d.ts +1 -1
- package/dist/database/migrations/20210929A-rename-login-action.d.ts +1 -1
- package/dist/database/migrations/20211007A-update-presets.d.ts +1 -1
- package/dist/database/migrations/20211007A-update-presets.js +7 -9
- package/dist/database/migrations/20211009A-add-auth-data.d.ts +1 -1
- package/dist/database/migrations/20211016A-add-webhook-headers.d.ts +1 -1
- package/dist/database/migrations/20211103A-set-unique-to-user-token.d.ts +1 -1
- package/dist/database/migrations/20211103B-update-special-geometry.d.ts +1 -1
- package/dist/database/migrations/20211104A-remove-collections-listing.d.ts +1 -1
- package/dist/database/migrations/20211118A-add-notifications.d.ts +1 -1
- package/dist/database/migrations/20211211A-add-shares.d.ts +1 -1
- package/dist/database/migrations/20211230A-add-project-descriptor.d.ts +1 -1
- package/dist/database/migrations/20220303A-remove-default-project-color.d.ts +1 -1
- package/dist/database/migrations/20220308A-add-bookmark-icon-and-color.d.ts +1 -1
- package/dist/database/migrations/20220314A-add-translation-strings.d.ts +1 -1
- package/dist/database/migrations/20220322A-rename-field-typecast-flags.d.ts +1 -1
- package/dist/database/migrations/20220323A-add-field-validation.d.ts +1 -1
- package/dist/database/migrations/20220325A-fix-typecast-flags.d.ts +1 -1
- package/dist/database/migrations/20220325B-add-default-language.d.ts +1 -1
- package/dist/database/migrations/20220402A-remove-default-value-panel-icon.d.ts +1 -1
- package/dist/database/migrations/20220429A-add-flows.d.ts +1 -1
- package/dist/database/migrations/20220429B-add-color-to-insights-icon.d.ts +1 -1
- package/dist/database/migrations/20220429C-drop-non-null-from-ip-of-activity.d.ts +1 -1
- package/dist/database/migrations/20220429D-drop-non-null-from-sender-of-notifications.d.ts +1 -1
- package/dist/database/migrations/20220614A-rename-hook-trigger-to-event.d.ts +1 -1
- package/dist/database/migrations/20220801A-update-notifications-timestamp-column.d.ts +1 -1
- package/dist/database/migrations/20220802A-add-custom-aspect-ratios.d.ts +1 -1
- package/dist/database/migrations/20220826A-add-origin-to-accountability.d.ts +1 -1
- package/dist/database/migrations/run.d.ts +1 -1
- package/dist/database/run-ast.d.ts +3 -3
- package/dist/database/run-ast.js +17 -26
- package/dist/database/seeds/run.d.ts +1 -1
- package/dist/database/seeds/run.js +1 -2
- package/dist/database/system-data/app-access-permissions/index.d.ts +1 -1
- package/dist/database/system-data/collections/index.d.ts +1 -1
- package/dist/database/system-data/fields/collections.yaml +2 -0
- package/dist/database/system-data/fields/index.d.ts +1 -1
- package/dist/database/system-data/fields/index.js +1 -2
- package/dist/database/system-data/fields/settings.yaml +4 -0
- package/dist/database/system-data/relations/index.d.ts +1 -1
- package/dist/emitter.d.ts +1 -1
- package/dist/emitter.js +3 -0
- package/dist/env.js +10 -2
- package/dist/exceptions/database/dialects/mssql.d.ts +1 -1
- package/dist/exceptions/database/dialects/mssql.js +5 -6
- package/dist/exceptions/database/dialects/mysql.d.ts +1 -1
- package/dist/exceptions/database/dialects/mysql.js +19 -25
- package/dist/exceptions/database/dialects/oracle.d.ts +1 -1
- package/dist/exceptions/database/dialects/postgres.d.ts +1 -1
- package/dist/exceptions/database/dialects/sqlite.d.ts +1 -1
- package/dist/exceptions/database/translate.d.ts +1 -1
- package/dist/exceptions/database/value-out-of-range.js +1 -1
- package/dist/exceptions/range-not-satisfiable.js +2 -3
- package/dist/extensions.d.ts +1 -1
- package/dist/extensions.js +33 -23
- package/dist/flows.js +42 -25
- package/dist/logger.d.ts +1 -1
- package/dist/logger.js +19 -3
- package/dist/messenger.js +8 -6
- package/dist/middleware/authenticate.d.ts +1 -1
- package/dist/middleware/authenticate.js +12 -5
- package/dist/middleware/cache.d.ts +1 -1
- package/dist/middleware/cache.js +5 -5
- package/dist/middleware/check-ip.d.ts +1 -1
- package/dist/middleware/check-ip.js +1 -1
- package/dist/middleware/collection-exists.d.ts +1 -1
- package/dist/middleware/collection-exists.js +2 -2
- package/dist/middleware/cors.d.ts +1 -1
- package/dist/middleware/error-handler.d.ts +1 -1
- package/dist/middleware/error-handler.js +9 -10
- package/dist/middleware/extract-token.d.ts +1 -1
- package/dist/middleware/get-permissions.d.ts +1 -1
- package/dist/middleware/graphql.d.ts +1 -1
- package/dist/middleware/graphql.js +3 -3
- package/dist/middleware/rate-limiter-global.d.ts +5 -0
- package/dist/middleware/rate-limiter-global.js +48 -0
- package/dist/middleware/{rate-limiter.d.ts → rate-limiter-ip.d.ts} +2 -2
- package/dist/middleware/{rate-limiter.js → rate-limiter-ip.js} +3 -3
- package/dist/middleware/respond.d.ts +1 -1
- package/dist/middleware/respond.js +6 -7
- package/dist/middleware/sanitize-query.d.ts +1 -1
- package/dist/middleware/schema.d.ts +1 -1
- package/dist/middleware/use-collection.d.ts +1 -1
- package/dist/operations/condition/index.d.ts +1 -1
- package/dist/operations/exec/index.js +14 -3
- package/dist/operations/item-create/index.js +1 -2
- package/dist/operations/item-delete/index.d.ts +1 -1
- package/dist/operations/item-read/index.d.ts +1 -1
- package/dist/operations/item-update/index.d.ts +1 -1
- package/dist/operations/item-update/index.js +1 -2
- package/dist/operations/notification/index.js +1 -2
- package/dist/operations/request/index.js +19 -19
- package/dist/operations/trigger/index.js +2 -3
- package/dist/rate-limiter.d.ts +1 -1
- package/dist/rate-limiter.js +8 -8
- package/dist/server.js +8 -9
- package/dist/services/activity.d.ts +1 -1
- package/dist/services/activity.js +7 -6
- package/dist/services/assets.d.ts +3 -3
- package/dist/services/assets.js +33 -35
- package/dist/services/authentication.d.ts +2 -2
- package/dist/services/authentication.js +13 -10
- package/dist/services/authorization.d.ts +3 -3
- package/dist/services/authorization.js +27 -31
- package/dist/services/collections.d.ts +5 -5
- package/dist/services/collections.js +52 -48
- package/dist/services/dashboards.d.ts +1 -1
- package/dist/services/fields.d.ts +5 -5
- package/dist/services/fields.js +48 -48
- package/dist/services/files.d.ts +1 -2
- package/dist/services/files.js +27 -21
- package/dist/services/flows.d.ts +2 -2
- package/dist/services/folders.d.ts +1 -1
- package/dist/services/graphql/index.d.ts +4 -4
- package/dist/services/graphql/index.js +172 -167
- package/dist/services/graphql/utils/add-path-to-validation-error.js +1 -2
- package/dist/services/graphql/utils/process-error.d.ts +2 -2
- package/dist/services/graphql/utils/process-error.js +11 -4
- package/dist/services/import-export.d.ts +3 -3
- package/dist/services/import-export.js +25 -22
- package/dist/services/items.d.ts +3 -3
- package/dist/services/items.js +42 -36
- package/dist/services/mail/index.d.ts +4 -4
- package/dist/services/mail/index.js +9 -5
- package/dist/services/meta.d.ts +3 -3
- package/dist/services/meta.js +10 -9
- package/dist/services/notifications.d.ts +3 -3
- package/dist/services/notifications.js +7 -6
- package/dist/services/operations.d.ts +2 -2
- package/dist/services/panels.d.ts +1 -1
- package/dist/services/payload.d.ts +3 -3
- package/dist/services/payload.js +124 -122
- package/dist/services/permissions.d.ts +3 -3
- package/dist/services/permissions.js +11 -11
- package/dist/services/presets.d.ts +1 -1
- package/dist/services/relations.d.ts +6 -6
- package/dist/services/relations.js +45 -43
- package/dist/services/revisions.d.ts +1 -1
- package/dist/services/roles.d.ts +2 -2
- package/dist/services/roles.js +2 -2
- package/dist/services/schema.d.ts +3 -3
- package/dist/services/schema.js +9 -11
- package/dist/services/server.d.ts +3 -3
- package/dist/services/server.js +69 -13
- package/dist/services/settings.d.ts +1 -1
- package/dist/services/shares.d.ts +1 -1
- package/dist/services/shares.js +5 -6
- package/dist/services/specifications.d.ts +4 -4
- package/dist/services/specifications.js +132 -116
- package/dist/services/tfa.d.ts +2 -2
- package/dist/services/tfa.js +7 -5
- package/dist/services/users.d.ts +3 -3
- package/dist/services/users.js +17 -17
- package/dist/services/utils.d.ts +3 -3
- package/dist/services/utils.js +10 -8
- package/dist/services/webhooks.d.ts +2 -2
- package/dist/services/webhooks.js +2 -1
- package/dist/types/assets.d.ts +1 -1
- package/dist/types/ast.d.ts +1 -1
- package/dist/types/auth.d.ts +2 -2
- package/dist/types/collection.d.ts +2 -2
- package/dist/types/events.d.ts +2 -2
- package/dist/types/graphql.d.ts +2 -2
- package/dist/types/items.d.ts +3 -3
- package/dist/types/services.d.ts +5 -5
- package/dist/types/snapshot.d.ts +4 -4
- package/dist/utils/apply-diff.d.ts +3 -3
- package/dist/utils/apply-diff.js +25 -28
- package/dist/utils/apply-query.d.ts +3 -3
- package/dist/utils/apply-query.js +8 -11
- package/dist/utils/apply-snapshot.d.ts +3 -3
- package/dist/utils/apply-snapshot.js +5 -6
- package/dist/utils/construct-flow-tree.d.ts +1 -1
- package/dist/utils/construct-flow-tree.js +2 -2
- package/dist/utils/filter-items.d.ts +1 -1
- package/dist/utils/get-accountability-for-role.d.ts +2 -2
- package/dist/utils/get-accountability-for-role.js +1 -1
- package/dist/utils/get-ast-from-query.d.ts +3 -3
- package/dist/utils/get-ast-from-query.js +22 -28
- package/dist/utils/get-cache-headers.d.ts +1 -1
- package/dist/utils/get-cache-headers.js +3 -4
- package/dist/utils/get-cache-key.d.ts +1 -1
- package/dist/utils/get-cache-key.js +2 -3
- package/dist/utils/get-collection-from-alias.d.ts +1 -1
- package/dist/utils/get-column-path.d.ts +2 -2
- package/dist/utils/get-column-path.js +3 -4
- package/dist/utils/get-column.d.ts +4 -4
- package/dist/utils/get-column.js +4 -5
- package/dist/utils/get-default-value.d.ts +2 -2
- package/dist/utils/get-default-value.js +1 -2
- package/dist/utils/get-graphql-query-and-variables.d.ts +1 -1
- package/dist/utils/get-graphql-query-and-variables.js +1 -2
- package/dist/utils/get-graphql-type.d.ts +2 -2
- package/dist/utils/get-graphql-type.js +1 -1
- package/dist/utils/get-ip-from-req.d.ts +1 -1
- package/dist/utils/get-local-type.d.ts +1 -1
- package/dist/utils/get-local-type.js +3 -3
- package/dist/utils/get-milliseconds.js +1 -2
- package/dist/utils/get-permissions.d.ts +1 -1
- package/dist/utils/get-permissions.js +1 -1
- package/dist/utils/get-relation-info.d.ts +1 -1
- package/dist/utils/get-relation-info.js +3 -5
- package/dist/utils/get-relation-type.d.ts +1 -1
- package/dist/utils/get-relation-type.js +3 -4
- package/dist/utils/get-schema.d.ts +2 -2
- package/dist/utils/get-schema.js +19 -21
- package/dist/utils/get-snapshot-diff.js +2 -3
- package/dist/utils/get-snapshot.d.ts +3 -3
- package/dist/utils/get-snapshot.js +6 -8
- package/dist/utils/is-directus-jwt.js +1 -1
- package/dist/utils/job-queue.js +2 -0
- package/dist/utils/jwt.d.ts +1 -1
- package/dist/utils/merge-permissions-for-share.d.ts +1 -1
- package/dist/utils/merge-permissions-for-share.js +3 -4
- package/dist/utils/merge-permissions.d.ts +3 -3
- package/dist/utils/redact-header-cookies.d.ts +1 -0
- package/dist/utils/redact-header-cookies.js +11 -0
- package/dist/utils/redact-header-cookies.test.d.ts +1 -0
- package/dist/utils/reduce-schema.d.ts +1 -1
- package/dist/utils/reduce-schema.js +12 -12
- package/dist/utils/sanitize-query.d.ts +1 -1
- package/dist/utils/sanitize-query.js +1 -1
- package/dist/utils/sanitize-schema.d.ts +2 -2
- package/dist/utils/should-skip-cache.d.ts +7 -0
- package/dist/utils/should-skip-cache.js +21 -0
- package/dist/utils/should-skip-cache.test.d.ts +1 -0
- package/dist/utils/transformations.d.ts +1 -1
- package/dist/utils/transformations.js +2 -4
- package/dist/utils/url.js +7 -2
- package/dist/utils/user-name.d.ts +1 -1
- package/dist/utils/validate-diff.js +7 -8
- package/dist/utils/validate-keys.d.ts +2 -2
- package/dist/utils/validate-keys.js +1 -1
- package/dist/utils/validate-query.d.ts +1 -1
- package/dist/utils/validate-query.js +2 -2
- package/dist/webhooks.js +1 -1
- package/package.json +36 -37
- package/dist/utils/with-timeout.d.ts +0 -1
- package/dist/utils/with-timeout.js +0 -16
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { CollectionMeta } from '../../../types';
|
|
1
|
+
import type { CollectionMeta } from '../../../types';
|
|
2
2
|
export declare const systemCollectionRows: CollectionMeta[];
|
|
@@ -72,12 +72,14 @@ fields:
|
|
|
72
72
|
meta:
|
|
73
73
|
interface: system-language
|
|
74
74
|
width: half
|
|
75
|
+
required: true
|
|
75
76
|
- field: translation
|
|
76
77
|
name: $t:field_options.directus_collections.collection_name
|
|
77
78
|
type: string
|
|
78
79
|
meta:
|
|
79
80
|
interface: input
|
|
80
81
|
width: half
|
|
82
|
+
required: true
|
|
81
83
|
options:
|
|
82
84
|
placeholder: $t:field_options.directus_collections.translation_placeholder
|
|
83
85
|
- field: singular
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { FieldMeta } from '@directus/shared/types';
|
|
1
|
+
import type { FieldMeta } from '@directus/shared/types';
|
|
2
2
|
export declare const systemFieldRows: FieldMeta[];
|
|
@@ -26,8 +26,7 @@ for (const filepath of fieldData) {
|
|
|
26
26
|
// Dynamically populate auth providers field
|
|
27
27
|
if (systemField.collection === 'directus_users' && systemField.field === 'provider') {
|
|
28
28
|
(0, get_auth_providers_1.getAuthProviders)().forEach(({ name }) => {
|
|
29
|
-
|
|
30
|
-
(_b = (_a = systemField.options) === null || _a === void 0 ? void 0 : _a.choices) === null || _b === void 0 ? void 0 : _b.push({
|
|
29
|
+
systemField.options?.choices?.push({
|
|
31
30
|
text: (0, format_title_1.default)(name),
|
|
32
31
|
value: name,
|
|
33
32
|
});
|
|
@@ -183,6 +183,7 @@ fields:
|
|
|
183
183
|
slug: true
|
|
184
184
|
onlyOnCreate: false
|
|
185
185
|
width: full
|
|
186
|
+
required: true
|
|
186
187
|
- field: fit
|
|
187
188
|
name: $t:field_options.directus_settings.storage_asset_presets.fit_label
|
|
188
189
|
type: string
|
|
@@ -322,6 +323,7 @@ fields:
|
|
|
322
323
|
is_nullable: false
|
|
323
324
|
meta:
|
|
324
325
|
interface: text-input
|
|
326
|
+
required: true
|
|
325
327
|
options:
|
|
326
328
|
placeholder: $t:field_options.directus_settings.basemaps_name_placeholder
|
|
327
329
|
- field: type
|
|
@@ -397,6 +399,7 @@ fields:
|
|
|
397
399
|
meta:
|
|
398
400
|
interface: text-input
|
|
399
401
|
width: half
|
|
402
|
+
required: true
|
|
400
403
|
options:
|
|
401
404
|
placeholder: $t:text
|
|
402
405
|
- field: value
|
|
@@ -405,5 +408,6 @@ fields:
|
|
|
405
408
|
meta:
|
|
406
409
|
interface: input
|
|
407
410
|
width: half
|
|
411
|
+
required: true
|
|
408
412
|
options:
|
|
409
413
|
placeholder: $t:value
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { RelationMeta } from '@directus/shared/types';
|
|
1
|
+
import type { RelationMeta } from '@directus/shared/types';
|
|
2
2
|
export declare const systemRelationRows: RelationMeta[];
|
package/dist/emitter.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ActionHandler, EventContext, FilterHandler, InitHandler } from '@directus/shared/types';
|
|
1
|
+
import type { ActionHandler, EventContext, FilterHandler, InitHandler } from '@directus/shared/types';
|
|
2
2
|
export declare class Emitter {
|
|
3
3
|
private filterEmitter;
|
|
4
4
|
private actionEmitter;
|
package/dist/emitter.js
CHANGED
|
@@ -7,6 +7,9 @@ exports.Emitter = void 0;
|
|
|
7
7
|
const eventemitter2_1 = require("eventemitter2");
|
|
8
8
|
const logger_1 = __importDefault(require("./logger"));
|
|
9
9
|
class Emitter {
|
|
10
|
+
filterEmitter;
|
|
11
|
+
actionEmitter;
|
|
12
|
+
initEmitter;
|
|
10
13
|
constructor() {
|
|
11
14
|
const emitterOptions = {
|
|
12
15
|
wildcard: true,
|
package/dist/env.js
CHANGED
|
@@ -62,6 +62,7 @@ const allowedEnvironmentVars = [
|
|
|
62
62
|
'CORS_CREDENTIALS',
|
|
63
63
|
'CORS_MAX_AGE',
|
|
64
64
|
// rate limiting
|
|
65
|
+
'RATE_LIMITER_GLOBAL_.+',
|
|
65
66
|
'RATE_LIMITER_.+',
|
|
66
67
|
// cache
|
|
67
68
|
'CACHE_ENABLED',
|
|
@@ -80,6 +81,7 @@ const allowedEnvironmentVars = [
|
|
|
80
81
|
'CACHE_REDIS_PASSWORD',
|
|
81
82
|
'CACHE_MEMCACHE',
|
|
82
83
|
'CACHE_VALUE_MAX_SIZE',
|
|
84
|
+
'CACHE_SKIP_ALLOWED',
|
|
83
85
|
'CACHE_HEALTHCHECK_THRESHOLD',
|
|
84
86
|
// storage
|
|
85
87
|
'STORAGE_LOCATIONS',
|
|
@@ -203,9 +205,13 @@ const defaults = {
|
|
|
203
205
|
STORAGE_LOCAL_DRIVER: 'local',
|
|
204
206
|
STORAGE_LOCAL_ROOT: './uploads',
|
|
205
207
|
RATE_LIMITER_ENABLED: false,
|
|
206
|
-
RATE_LIMITER_POINTS:
|
|
208
|
+
RATE_LIMITER_POINTS: 50,
|
|
207
209
|
RATE_LIMITER_DURATION: 1,
|
|
208
210
|
RATE_LIMITER_STORE: 'memory',
|
|
211
|
+
RATE_LIMITER_GLOBAL_ENABLED: false,
|
|
212
|
+
RATE_LIMITER_GLOBAL_POINTS: 1000,
|
|
213
|
+
RATE_LIMITER_GLOBAL_DURATION: 1,
|
|
214
|
+
RATE_LIMITER_GLOBAL_STORE: 'memory',
|
|
209
215
|
ACCESS_TOKEN_TTL: '15m',
|
|
210
216
|
REFRESH_TOKEN_TTL: '7d',
|
|
211
217
|
REFRESH_TOKEN_COOKIE_SECURE: false,
|
|
@@ -229,6 +235,7 @@ const defaults = {
|
|
|
229
235
|
CACHE_SCHEMA: true,
|
|
230
236
|
CACHE_PERMISSIONS: true,
|
|
231
237
|
CACHE_VALUE_MAX_SIZE: false,
|
|
238
|
+
CACHE_SKIP_ALLOWED: false,
|
|
232
239
|
AUTH_PROVIDERS: '',
|
|
233
240
|
AUTH_DISABLE_DEFAULT: false,
|
|
234
241
|
PACKAGE_FILE_LOCATION: '.',
|
|
@@ -241,7 +248,7 @@ const defaults = {
|
|
|
241
248
|
EMAIL_SENDMAIL_PATH: '/usr/sbin/sendmail',
|
|
242
249
|
TELEMETRY: true,
|
|
243
250
|
ASSETS_CACHE_TTL: '30d',
|
|
244
|
-
ASSETS_TRANSFORM_MAX_CONCURRENT:
|
|
251
|
+
ASSETS_TRANSFORM_MAX_CONCURRENT: 25,
|
|
245
252
|
ASSETS_TRANSFORM_IMAGE_MAX_DIMENSION: 6000,
|
|
246
253
|
ASSETS_TRANSFORM_MAX_OPERATIONS: 5,
|
|
247
254
|
ASSETS_TRANSFORM_TIMEOUT: '7500ms',
|
|
@@ -268,6 +275,7 @@ const typeMap = {
|
|
|
268
275
|
DB_DATABASE: 'string',
|
|
269
276
|
DB_PORT: 'number',
|
|
270
277
|
DB_EXCLUDE_TABLES: 'array',
|
|
278
|
+
CACHE_SKIP_ALLOWED: 'boolean',
|
|
271
279
|
IMPORT_IP_DENY_LIST: 'array',
|
|
272
280
|
FILE_METADATA_ALLOW_LIST: 'array',
|
|
273
281
|
GRAPHQL_INTROSPECTION: 'boolean',
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { MSSQLError } from './types';
|
|
1
|
+
import type { MSSQLError } from './types';
|
|
2
2
|
export declare function extractError(error: MSSQLError): Promise<MSSQLError | Error>;
|
|
@@ -48,15 +48,14 @@ async function uniqueViolation(error) {
|
|
|
48
48
|
* While it's not ideal, the best next thing we can do is extract the column name from
|
|
49
49
|
* information_schema when this happens
|
|
50
50
|
*/
|
|
51
|
-
var _a, _b, _c;
|
|
52
51
|
const betweenQuotes = /'([^']+)'/g;
|
|
53
52
|
const betweenParens = /\(([^)]+)\)/g;
|
|
54
53
|
const quoteMatches = error.message.match(betweenQuotes);
|
|
55
54
|
const parenMatches = error.message.match(betweenParens);
|
|
56
55
|
if (!quoteMatches || !parenMatches)
|
|
57
56
|
return error;
|
|
58
|
-
const keyName =
|
|
59
|
-
let collection =
|
|
57
|
+
const keyName = quoteMatches[1]?.slice(1, -1);
|
|
58
|
+
let collection = quoteMatches[0]?.slice(1, -1);
|
|
60
59
|
let field = null;
|
|
61
60
|
if (keyName) {
|
|
62
61
|
const database = (0, database_1.default)();
|
|
@@ -75,10 +74,10 @@ async function uniqueViolation(error) {
|
|
|
75
74
|
})
|
|
76
75
|
.where('sys.indexes.name', '=', keyName)
|
|
77
76
|
.first();
|
|
78
|
-
collection = constraintUsage
|
|
79
|
-
field = constraintUsage
|
|
77
|
+
collection = constraintUsage?.collection;
|
|
78
|
+
field = constraintUsage?.field;
|
|
80
79
|
}
|
|
81
|
-
const invalid =
|
|
80
|
+
const invalid = parenMatches[parenMatches.length - 1]?.slice(1, -1);
|
|
82
81
|
return new record_not_unique_1.RecordNotUniqueException(field, {
|
|
83
82
|
collection,
|
|
84
83
|
field,
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { MySQLError } from './types';
|
|
1
|
+
import type { MySQLError } from './types';
|
|
2
2
|
export declare function extractError(error: MySQLError): MySQLError | Error;
|
|
@@ -38,7 +38,6 @@ function extractError(error) {
|
|
|
38
38
|
}
|
|
39
39
|
exports.extractError = extractError;
|
|
40
40
|
function uniqueViolation(error) {
|
|
41
|
-
var _a, _b, _c, _d, _e;
|
|
42
41
|
const betweenQuotes = /'([^']+)'/g;
|
|
43
42
|
const matches = error.sqlMessage.match(betweenQuotes);
|
|
44
43
|
if (!matches)
|
|
@@ -50,13 +49,13 @@ function uniqueViolation(error) {
|
|
|
50
49
|
*/
|
|
51
50
|
/** MySQL 8+ style error message */
|
|
52
51
|
if (matches[1].includes('.')) {
|
|
53
|
-
const collection =
|
|
52
|
+
const collection = matches[1]?.slice(1, -1).split('.')[0];
|
|
54
53
|
let field = null;
|
|
55
|
-
const indexName =
|
|
56
|
-
if (
|
|
57
|
-
field = indexName
|
|
54
|
+
const indexName = matches[1]?.slice(1, -1).split('.')[1];
|
|
55
|
+
if (indexName?.startsWith(`${collection}_`) && indexName.endsWith('_unique')) {
|
|
56
|
+
field = indexName?.slice(collection.length + 1, -7);
|
|
58
57
|
}
|
|
59
|
-
const invalid =
|
|
58
|
+
const invalid = matches[0]?.slice(1, -1);
|
|
60
59
|
return new record_not_unique_1.RecordNotUniqueException(field, {
|
|
61
60
|
collection,
|
|
62
61
|
field,
|
|
@@ -65,13 +64,13 @@ function uniqueViolation(error) {
|
|
|
65
64
|
}
|
|
66
65
|
else {
|
|
67
66
|
/** MySQL 5.7 style error message */
|
|
68
|
-
const indexName =
|
|
67
|
+
const indexName = matches[1]?.slice(1, -1);
|
|
69
68
|
const collection = indexName.split('_')[0];
|
|
70
69
|
let field = null;
|
|
71
|
-
if (
|
|
72
|
-
field = indexName
|
|
70
|
+
if (indexName?.startsWith(`${collection}_`) && indexName.endsWith('_unique')) {
|
|
71
|
+
field = indexName?.slice(collection.length + 1, -7);
|
|
73
72
|
}
|
|
74
|
-
const invalid =
|
|
73
|
+
const invalid = matches[0]?.slice(1, -1);
|
|
75
74
|
return new record_not_unique_1.RecordNotUniqueException(field, {
|
|
76
75
|
collection,
|
|
77
76
|
field,
|
|
@@ -80,61 +79,57 @@ function uniqueViolation(error) {
|
|
|
80
79
|
}
|
|
81
80
|
}
|
|
82
81
|
function numericValueOutOfRange(error) {
|
|
83
|
-
var _a, _b;
|
|
84
82
|
const betweenTicks = /`([^`]+)`/g;
|
|
85
83
|
const betweenQuotes = /'([^']+)'/g;
|
|
86
84
|
const tickMatches = error.sql.match(betweenTicks);
|
|
87
85
|
const quoteMatches = error.sqlMessage.match(betweenQuotes);
|
|
88
86
|
if (!tickMatches || !quoteMatches)
|
|
89
87
|
return error;
|
|
90
|
-
const collection =
|
|
91
|
-
const field =
|
|
88
|
+
const collection = tickMatches[0]?.slice(1, -1);
|
|
89
|
+
const field = quoteMatches[0]?.slice(1, -1);
|
|
92
90
|
return new value_out_of_range_1.ValueOutOfRangeException(field, {
|
|
93
91
|
collection,
|
|
94
92
|
field,
|
|
95
93
|
});
|
|
96
94
|
}
|
|
97
95
|
function valueLimitViolation(error) {
|
|
98
|
-
var _a, _b;
|
|
99
96
|
const betweenTicks = /`([^`]+)`/g;
|
|
100
97
|
const betweenQuotes = /'([^']+)'/g;
|
|
101
98
|
const tickMatches = error.sql.match(betweenTicks);
|
|
102
99
|
const quoteMatches = error.sqlMessage.match(betweenQuotes);
|
|
103
100
|
if (!tickMatches || !quoteMatches)
|
|
104
101
|
return error;
|
|
105
|
-
const collection =
|
|
106
|
-
const field =
|
|
102
|
+
const collection = tickMatches[0]?.slice(1, -1);
|
|
103
|
+
const field = quoteMatches[0]?.slice(1, -1);
|
|
107
104
|
return new value_too_long_1.ValueTooLongException(field, {
|
|
108
105
|
collection,
|
|
109
106
|
field,
|
|
110
107
|
});
|
|
111
108
|
}
|
|
112
109
|
function notNullViolation(error) {
|
|
113
|
-
var _a, _b;
|
|
114
110
|
const betweenTicks = /`([^`]+)`/g;
|
|
115
111
|
const betweenQuotes = /'([^']+)'/g;
|
|
116
112
|
const tickMatches = error.sql.match(betweenTicks);
|
|
117
113
|
const quoteMatches = error.sqlMessage.match(betweenQuotes);
|
|
118
114
|
if (!tickMatches || !quoteMatches)
|
|
119
115
|
return error;
|
|
120
|
-
const collection =
|
|
121
|
-
const field =
|
|
116
|
+
const collection = tickMatches[0]?.slice(1, -1);
|
|
117
|
+
const field = quoteMatches[0]?.slice(1, -1);
|
|
122
118
|
return new not_null_violation_1.NotNullViolationException(field, {
|
|
123
119
|
collection,
|
|
124
120
|
field,
|
|
125
121
|
});
|
|
126
122
|
}
|
|
127
123
|
function foreignKeyViolation(error) {
|
|
128
|
-
var _a, _b, _c;
|
|
129
124
|
const betweenTicks = /`([^`]+)`/g;
|
|
130
125
|
const betweenParens = /\(([^)]+)\)/g;
|
|
131
126
|
const tickMatches = error.sqlMessage.match(betweenTicks);
|
|
132
127
|
const parenMatches = error.sql.match(betweenParens);
|
|
133
128
|
if (!tickMatches || !parenMatches)
|
|
134
129
|
return error;
|
|
135
|
-
const collection =
|
|
136
|
-
const field =
|
|
137
|
-
const invalid =
|
|
130
|
+
const collection = tickMatches[1]?.slice(1, -1);
|
|
131
|
+
const field = tickMatches[3]?.slice(1, -1);
|
|
132
|
+
const invalid = parenMatches[1]?.slice(1, -1);
|
|
138
133
|
return new invalid_foreign_key_1.InvalidForeignKeyException(field, {
|
|
139
134
|
collection,
|
|
140
135
|
field,
|
|
@@ -142,13 +137,12 @@ function foreignKeyViolation(error) {
|
|
|
142
137
|
});
|
|
143
138
|
}
|
|
144
139
|
function containsNullValues(error) {
|
|
145
|
-
var _a;
|
|
146
140
|
const betweenTicks = /`([^`]+)`/g;
|
|
147
141
|
// Normally, we shouldn't read from the executed SQL. In this case, we're altering a single
|
|
148
142
|
// column, so we shouldn't have the problem where multiple columns are altered at the same time
|
|
149
143
|
const tickMatches = error.sql.match(betweenTicks);
|
|
150
144
|
if (!tickMatches)
|
|
151
145
|
return error;
|
|
152
|
-
const field =
|
|
146
|
+
const field = tickMatches[1]?.slice(1, -1);
|
|
153
147
|
return new contains_null_values_1.ContainsNullValuesException(field);
|
|
154
148
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { OracleError } from './types';
|
|
1
|
+
import type { OracleError } from './types';
|
|
2
2
|
export declare function extractError(error: OracleError): OracleError | Error;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { PostgresError } from './types';
|
|
1
|
+
import type { PostgresError } from './types';
|
|
2
2
|
export declare function extractError(error: PostgresError): PostgresError | Error;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { SQLiteError } from './types';
|
|
1
|
+
import type { SQLiteError } from './types';
|
|
2
2
|
export declare function extractError(error: SQLiteError): SQLiteError | Error;
|
|
@@ -5,7 +5,7 @@ const exceptions_1 = require("@directus/shared/exceptions");
|
|
|
5
5
|
class ValueOutOfRangeException extends exceptions_1.BaseException {
|
|
6
6
|
constructor(field, exceptions) {
|
|
7
7
|
if (field) {
|
|
8
|
-
super(`Numeric value in field "${field
|
|
8
|
+
super(`Numeric value in field "${field ?? ''}" is out of range.`, 400, 'VALUE_OUT_OF_RANGE', exceptions);
|
|
9
9
|
}
|
|
10
10
|
else {
|
|
11
11
|
super(`Numeric value is out of range.`, 400, 'VALUE_OUT_OF_RANGE', exceptions);
|
|
@@ -4,9 +4,8 @@ exports.RangeNotSatisfiableException = void 0;
|
|
|
4
4
|
const exceptions_1 = require("@directus/shared/exceptions");
|
|
5
5
|
class RangeNotSatisfiableException extends exceptions_1.BaseException {
|
|
6
6
|
constructor(range) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
? `"${(_a = range.start) !== null && _a !== void 0 ? _a : ''}-${(_b = range.end) !== null && _b !== void 0 ? _b : ''}" `
|
|
7
|
+
const rangeString = range && (range?.start !== undefined || range?.end !== undefined)
|
|
8
|
+
? `"${range.start ?? ''}-${range.end ?? ''}" `
|
|
10
9
|
: '';
|
|
11
10
|
super(`Range ${rangeString}is invalid or the file's size doesn't match the requested range.`, 416, 'RANGE_NOT_SATISFIABLE');
|
|
12
11
|
}
|
package/dist/extensions.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Extension, ExtensionInfo, ExtensionType } from '@directus/shared/types';
|
|
1
|
+
import type { Extension, ExtensionInfo, ExtensionType } from '@directus/shared/types';
|
|
2
2
|
import { Router } from 'express';
|
|
3
3
|
export declare function getExtensionManager(): ExtensionManager;
|
|
4
4
|
type Options = {
|
package/dist/extensions.js
CHANGED
|
@@ -29,28 +29,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
29
29
|
exports.getExtensionManager = void 0;
|
|
30
30
|
const constants_1 = require("@directus/shared/constants");
|
|
31
31
|
const sharedExceptions = __importStar(require("@directus/shared/exceptions"));
|
|
32
|
-
const node_1 = require("@directus/shared/utils/node");
|
|
33
|
-
const express_1 = __importStar(require("express"));
|
|
34
|
-
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
35
|
-
const path_1 = __importDefault(require("path"));
|
|
36
|
-
const database_1 = __importDefault(require("./database"));
|
|
37
|
-
const emitter_1 = __importStar(require("./emitter"));
|
|
38
|
-
const env_1 = __importDefault(require("./env"));
|
|
39
|
-
const exceptions = __importStar(require("./exceptions"));
|
|
40
|
-
const logger_1 = __importDefault(require("./logger"));
|
|
41
|
-
const dynamic_import_1 = require("./utils/dynamic-import");
|
|
42
|
-
const get_schema_1 = require("./utils/get-schema");
|
|
43
32
|
const utils_1 = require("@directus/shared/utils");
|
|
33
|
+
const node_1 = require("@directus/shared/utils/node");
|
|
44
34
|
const plugin_alias_1 = __importDefault(require("@rollup/plugin-alias"));
|
|
45
35
|
const plugin_virtual_1 = __importDefault(require("@rollup/plugin-virtual"));
|
|
46
36
|
const chokidar_1 = __importDefault(require("chokidar"));
|
|
37
|
+
const express_1 = __importStar(require("express"));
|
|
38
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
47
39
|
const globby_1 = __importDefault(require("globby"));
|
|
48
40
|
const lodash_1 = require("lodash");
|
|
49
41
|
const node_cron_1 = require("node-cron");
|
|
42
|
+
const path_1 = __importDefault(require("path"));
|
|
50
43
|
const rollup_1 = require("rollup");
|
|
44
|
+
const database_1 = __importDefault(require("./database"));
|
|
45
|
+
const emitter_1 = __importStar(require("./emitter"));
|
|
46
|
+
const env_1 = __importDefault(require("./env"));
|
|
47
|
+
const exceptions = __importStar(require("./exceptions"));
|
|
51
48
|
const flows_1 = require("./flows");
|
|
49
|
+
const logger_1 = __importDefault(require("./logger"));
|
|
52
50
|
const services = __importStar(require("./services"));
|
|
51
|
+
const dynamic_import_1 = require("./utils/dynamic-import");
|
|
53
52
|
const get_module_default_1 = __importDefault(require("./utils/get-module-default"));
|
|
53
|
+
const get_schema_1 = require("./utils/get-schema");
|
|
54
54
|
const job_queue_1 = require("./utils/job-queue");
|
|
55
55
|
const url_1 = require("./utils/url");
|
|
56
56
|
let extensionManager;
|
|
@@ -67,15 +67,19 @@ const defaultOptions = {
|
|
|
67
67
|
watch: env_1.default.EXTENSIONS_AUTO_RELOAD && env_1.default.NODE_ENV !== 'development',
|
|
68
68
|
};
|
|
69
69
|
class ExtensionManager {
|
|
70
|
+
isLoaded = false;
|
|
71
|
+
options;
|
|
72
|
+
extensions = [];
|
|
73
|
+
appExtensions = null;
|
|
74
|
+
apiExtensions = [];
|
|
75
|
+
apiEmitter;
|
|
76
|
+
hookEvents = [];
|
|
77
|
+
endpointRouter;
|
|
78
|
+
hookEmbedsHead = [];
|
|
79
|
+
hookEmbedsBody = [];
|
|
80
|
+
reloadQueue;
|
|
81
|
+
watcher = null;
|
|
70
82
|
constructor() {
|
|
71
|
-
this.isLoaded = false;
|
|
72
|
-
this.extensions = [];
|
|
73
|
-
this.appExtensions = null;
|
|
74
|
-
this.apiExtensions = [];
|
|
75
|
-
this.hookEvents = [];
|
|
76
|
-
this.hookEmbedsHead = [];
|
|
77
|
-
this.hookEmbedsBody = [];
|
|
78
|
-
this.watcher = null;
|
|
79
83
|
this.options = defaultOptions;
|
|
80
84
|
this.apiEmitter = new emitter_1.Emitter();
|
|
81
85
|
this.endpointRouter = (0, express_1.Router)();
|
|
@@ -140,17 +144,23 @@ class ExtensionManager {
|
|
|
140
144
|
name: extension.name,
|
|
141
145
|
type: extension.type,
|
|
142
146
|
local: extension.local,
|
|
143
|
-
|
|
144
|
-
version: extension.version,
|
|
147
|
+
entries: [],
|
|
145
148
|
};
|
|
149
|
+
if (extension.host)
|
|
150
|
+
extensionInfo.host = extension.host;
|
|
151
|
+
if (extension.version)
|
|
152
|
+
extensionInfo.version = extension.version;
|
|
146
153
|
if (extension.type === 'bundle') {
|
|
147
|
-
|
|
148
|
-
|
|
154
|
+
const bundleExtensionInfo = {
|
|
155
|
+
name: extensionInfo.name,
|
|
156
|
+
type: 'bundle',
|
|
157
|
+
local: extensionInfo.local,
|
|
149
158
|
entries: extension.entries.map((entry) => ({
|
|
150
159
|
name: entry.name,
|
|
151
160
|
type: entry.type,
|
|
152
161
|
})),
|
|
153
162
|
};
|
|
163
|
+
return bundleExtensionInfo;
|
|
154
164
|
}
|
|
155
165
|
else {
|
|
156
166
|
return extensionInfo;
|
package/dist/flows.js
CHANGED
|
@@ -67,12 +67,13 @@ const ACCOUNTABILITY_KEY = '$accountability';
|
|
|
67
67
|
const LAST_KEY = '$last';
|
|
68
68
|
const ENV_KEY = '$env';
|
|
69
69
|
class FlowManager {
|
|
70
|
+
isLoaded = false;
|
|
71
|
+
operations = {};
|
|
72
|
+
triggerHandlers = [];
|
|
73
|
+
operationFlowHandlers = {};
|
|
74
|
+
webhookFlowHandlers = {};
|
|
75
|
+
reloadQueue;
|
|
70
76
|
constructor() {
|
|
71
|
-
this.isLoaded = false;
|
|
72
|
-
this.operations = {};
|
|
73
|
-
this.triggerHandlers = [];
|
|
74
|
-
this.operationFlowHandlers = {};
|
|
75
|
-
this.webhookFlowHandlers = {};
|
|
76
77
|
this.reloadQueue = new job_queue_1.JobQueue();
|
|
77
78
|
const messenger = (0, messenger_1.getMessenger)();
|
|
78
79
|
messenger.subscribe('flows', (event) => {
|
|
@@ -121,7 +122,6 @@ class FlowManager {
|
|
|
121
122
|
return handler(data, context);
|
|
122
123
|
}
|
|
123
124
|
async load() {
|
|
124
|
-
var _a, _b, _c, _d;
|
|
125
125
|
const flowsService = new services_1.FlowsService({ knex: (0, database_1.default)(), schema: await (0, get_schema_1.getSchema)() });
|
|
126
126
|
const flows = await flowsService.readByQuery({
|
|
127
127
|
filter: { status: { _eq: 'active' } },
|
|
@@ -132,12 +132,11 @@ class FlowManager {
|
|
|
132
132
|
for (const flow of flowTrees) {
|
|
133
133
|
if (flow.trigger === 'event') {
|
|
134
134
|
let events = [];
|
|
135
|
-
if (
|
|
135
|
+
if (flow.options?.scope) {
|
|
136
136
|
events = (0, utils_1.toArray)(flow.options.scope)
|
|
137
137
|
.map((scope) => {
|
|
138
|
-
var _a;
|
|
139
138
|
if (['items.create', 'items.update', 'items.delete'].includes(scope)) {
|
|
140
|
-
if (!
|
|
139
|
+
if (!flow.options?.collections)
|
|
141
140
|
return [];
|
|
142
141
|
return (0, utils_1.toArray)(flow.options.collections).map((collection) => {
|
|
143
142
|
if (collection.startsWith('directus_')) {
|
|
@@ -205,16 +204,15 @@ class FlowManager {
|
|
|
205
204
|
return this.executeFlow(flow, data, context);
|
|
206
205
|
}
|
|
207
206
|
};
|
|
208
|
-
const method =
|
|
207
|
+
const method = flow.options?.method ?? 'GET';
|
|
209
208
|
// Default return to $last for webhooks
|
|
210
|
-
flow.options.return =
|
|
209
|
+
flow.options.return = flow.options.return ?? '$last';
|
|
211
210
|
this.webhookFlowHandlers[`${method}-${flow.id}`] = handler;
|
|
212
211
|
}
|
|
213
212
|
else if (flow.trigger === 'manual') {
|
|
214
213
|
const handler = (data, context) => {
|
|
215
|
-
|
|
216
|
-
const
|
|
217
|
-
const targetCollection = data === null || data === void 0 ? void 0 : data.body.collection;
|
|
214
|
+
const enabledCollections = flow.options?.collections ?? [];
|
|
215
|
+
const targetCollection = data?.body.collection;
|
|
218
216
|
if (!targetCollection) {
|
|
219
217
|
logger_1.default.warn(`Manual trigger requires "collection" to be specified in the payload`);
|
|
220
218
|
throw new exceptions.ForbiddenException();
|
|
@@ -263,13 +261,12 @@ class FlowManager {
|
|
|
263
261
|
this.isLoaded = false;
|
|
264
262
|
}
|
|
265
263
|
async executeFlow(flow, data = null, context = {}) {
|
|
266
|
-
|
|
267
|
-
const
|
|
268
|
-
const schema = (_b = context.schema) !== null && _b !== void 0 ? _b : (await (0, get_schema_1.getSchema)({ database }));
|
|
264
|
+
const database = context.database ?? (0, database_1.default)();
|
|
265
|
+
const schema = context.schema ?? (await (0, get_schema_1.getSchema)({ database }));
|
|
269
266
|
const keyedData = {
|
|
270
267
|
[TRIGGER_KEY]: data,
|
|
271
268
|
[LAST_KEY]: data,
|
|
272
|
-
[ACCOUNTABILITY_KEY]:
|
|
269
|
+
[ACCOUNTABILITY_KEY]: context?.accountability ?? null,
|
|
273
270
|
[ENV_KEY]: (0, lodash_1.pick)(env_1.default, env_1.default.FLOWS_ENV_ALLOW_LIST ? (0, utils_1.toArray)(env_1.default.FLOWS_ENV_ALLOW_LIST) : []),
|
|
274
271
|
};
|
|
275
272
|
let nextOperation = flow.operation;
|
|
@@ -288,14 +285,14 @@ class FlowManager {
|
|
|
288
285
|
knex: database,
|
|
289
286
|
schema: schema,
|
|
290
287
|
});
|
|
291
|
-
const accountability = context
|
|
288
|
+
const accountability = context?.accountability;
|
|
292
289
|
const activity = await activityService.createOne({
|
|
293
290
|
action: types_1.Action.RUN,
|
|
294
|
-
user:
|
|
291
|
+
user: accountability?.user ?? null,
|
|
295
292
|
collection: 'directus_flows',
|
|
296
|
-
ip:
|
|
297
|
-
user_agent:
|
|
298
|
-
origin:
|
|
293
|
+
ip: accountability?.ip ?? null,
|
|
294
|
+
user_agent: accountability?.userAgent ?? null,
|
|
295
|
+
origin: accountability?.origin ?? null,
|
|
299
296
|
item: flow.id,
|
|
300
297
|
});
|
|
301
298
|
if (flow.accountability === 'all') {
|
|
@@ -344,15 +341,35 @@ class FlowManager {
|
|
|
344
341
|
accountability: null,
|
|
345
342
|
...context,
|
|
346
343
|
});
|
|
344
|
+
// Validate that the operations result is serializable and thus catching the error inside the flow execution
|
|
345
|
+
JSON.stringify(result ?? null);
|
|
347
346
|
// JSON structures don't allow for undefined values, so we need to replace them with null
|
|
348
347
|
// Otherwise the applyOptionsData function will not work correctly on the next operation
|
|
349
348
|
if (typeof result === 'object' && result !== null) {
|
|
350
349
|
result = (0, map_values_deep_1.mapValuesDeep)(result, (_, value) => (value === undefined ? null : value));
|
|
351
350
|
}
|
|
352
|
-
return { successor: operation.resolve, status: 'resolve', data: result
|
|
351
|
+
return { successor: operation.resolve, status: 'resolve', data: result ?? null, options };
|
|
353
352
|
}
|
|
354
353
|
catch (error) {
|
|
355
|
-
|
|
354
|
+
let data;
|
|
355
|
+
if (error instanceof Error) {
|
|
356
|
+
// If the error is instance of Error, use the message of it as the error data
|
|
357
|
+
data = { message: error.message };
|
|
358
|
+
}
|
|
359
|
+
else if (typeof error === 'string') {
|
|
360
|
+
// If the error is a JSON string, parse it and use that as the error data
|
|
361
|
+
data = (0, utils_1.isValidJSON)(error) ? (0, utils_1.parseJSON)(error) : error;
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
// If error is plain object, use this as the error data and otherwise fallback to null
|
|
365
|
+
data = error ?? null;
|
|
366
|
+
}
|
|
367
|
+
return {
|
|
368
|
+
successor: operation.reject,
|
|
369
|
+
status: 'reject',
|
|
370
|
+
data,
|
|
371
|
+
options,
|
|
372
|
+
};
|
|
356
373
|
}
|
|
357
374
|
}
|
|
358
375
|
}
|
package/dist/logger.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="qs" />
|
|
2
|
-
import { RequestHandler } from 'express';
|
|
3
2
|
import { LoggerOptions } from 'pino';
|
|
3
|
+
import type { RequestHandler } from 'express';
|
|
4
4
|
declare const logger: import("pino").Logger<LoggerOptions & Record<string, any>>;
|
|
5
5
|
export declare const expressLogger: RequestHandler<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>;
|
|
6
6
|
export default logger;
|