directus 9.22.4 → 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 +19 -14
- package/dist/auth/auth.d.ts +3 -3
- package/dist/auth/auth.js +2 -0
- package/dist/auth/drivers/ldap.d.ts +2 -2
- package/dist/auth/drivers/ldap.js +47 -36
- 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 +22 -15
- package/dist/auth/drivers/openid.d.ts +1 -1
- package/dist/auth/drivers/openid.js +23 -16
- 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 +59 -16
- 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 +21 -20
- package/dist/cli/commands/schema/snapshot.js +2 -2
- package/dist/cli/utils/create-db-connection.d.ts +2 -1
- package/dist/cli/utils/create-db-connection.js +2 -1
- package/dist/cli/utils/create-env/env-stub.liquid +1 -1
- package/dist/cli/utils/create-env/index.d.ts +2 -2
- package/dist/cli/utils/drivers.d.ts +3 -9
- package/dist/constants.d.ts +3 -9
- package/dist/constants.js +5 -10
- package/dist/controllers/activity.js +1 -2
- package/dist/controllers/assets.js +17 -12
- package/dist/controllers/auth.js +29 -15
- package/dist/controllers/dashboards.js +5 -2
- package/dist/controllers/extensions.js +7 -7
- package/dist/controllers/fields.js +4 -4
- package/dist/controllers/files.js +11 -6
- package/dist/controllers/flows.js +5 -2
- package/dist/controllers/folders.js +5 -2
- package/dist/controllers/graphql.js +6 -0
- 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/schema.d.ts +2 -0
- package/dist/controllers/schema.js +98 -0
- 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 +2 -2
- 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 +5 -2
- package/dist/database/helpers/schema/dialects/oracle.js +23 -0
- package/dist/database/helpers/schema/types.d.ts +9 -7
- package/dist/database/helpers/schema/types.js +7 -1
- package/dist/database/helpers/types.d.ts +1 -1
- package/dist/database/helpers/types.js +1 -0
- package/dist/database/index.d.ts +2 -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 +19 -28
- 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 +19 -4
- 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 +34 -24
- package/dist/flows.js +56 -30
- 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 +7 -7
- 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 +18 -14
- 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 +21 -20
- package/dist/operations/trigger/index.d.ts +2 -0
- package/dist/operations/trigger/index.js +27 -11
- package/dist/rate-limiter.d.ts +1 -1
- package/dist/rate-limiter.js +8 -8
- package/dist/request/index.d.ts +5 -0
- package/dist/request/index.js +18 -0
- package/dist/request/index.test.d.ts +1 -0
- package/dist/request/request-interceptor.d.ts +2 -0
- package/dist/request/request-interceptor.js +33 -0
- package/dist/request/request-interceptor.test.d.ts +1 -0
- package/dist/request/response-interceptor.d.ts +2 -0
- package/dist/request/response-interceptor.js +9 -0
- package/dist/request/response-interceptor.test.d.ts +1 -0
- package/dist/request/validate-ip.d.ts +1 -0
- package/dist/request/validate-ip.js +27 -0
- package/dist/request/validate-ip.test.d.ts +1 -0
- 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 -26
- package/dist/services/authentication.d.ts +2 -2
- package/dist/services/authentication.js +18 -15
- 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 +49 -48
- package/dist/services/files.d.ts +1 -2
- package/dist/services/files.js +70 -108
- 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 +181 -170
- 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 +29 -9
- package/dist/services/import-export.d.ts +7 -5
- package/dist/services/import-export.js +41 -24
- package/dist/services/import-export.test.d.ts +1 -0
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.js +1 -0
- package/dist/services/items.d.ts +3 -3
- package/dist/services/items.js +67 -42
- 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 +47 -43
- package/dist/services/revisions.d.ts +1 -1
- package/dist/services/roles.d.ts +2 -2
- package/dist/services/roles.js +34 -13
- package/dist/services/schema.d.ts +15 -0
- package/dist/services/schema.js +56 -0
- package/dist/services/schema.test.d.ts +1 -0
- 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 +2 -2
- package/dist/services/shares.js +14 -15
- 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 +89 -62
- 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 +2 -2
- 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/database.d.ts +3 -0
- package/dist/types/database.js +4 -0
- package/dist/types/events.d.ts +2 -2
- package/dist/types/graphql.d.ts +2 -2
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/items.d.ts +7 -2
- package/dist/types/services.d.ts +5 -5
- package/dist/types/snapshot.d.ts +25 -3
- package/dist/types/snapshot.js +14 -0
- package/dist/utils/apply-diff.d.ts +9 -0
- package/dist/utils/apply-diff.js +256 -0
- package/dist/utils/apply-diff.test.d.ts +1 -0
- package/dist/utils/apply-query.d.ts +3 -3
- package/dist/utils/apply-query.js +15 -16
- package/dist/utils/apply-snapshot.d.ts +3 -5
- package/dist/utils/apply-snapshot.js +9 -240
- 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 +4 -2
- package/dist/utils/get-cache-headers.js +21 -21
- package/dist/utils/get-cache-headers.test.d.ts +1 -0
- 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.d.ts +4 -0
- package/dist/utils/get-milliseconds.js +14 -0
- package/dist/utils/get-milliseconds.test.d.ts +1 -0
- 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 +10 -7
- package/dist/utils/get-snapshot.d.ts +3 -3
- package/dist/utils/get-snapshot.js +35 -14
- package/dist/utils/get-versioned-hash.d.ts +1 -0
- package/dist/utils/get-versioned-hash.js +12 -0
- package/dist/utils/get-versioned-hash.test.d.ts +1 -0
- 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/map-values-deep.d.ts +1 -0
- package/dist/utils/map-values-deep.js +29 -0
- package/dist/utils/map-values-deep.test.d.ts +1 -0
- 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 +30 -0
- package/dist/utils/sanitize-schema.js +80 -0
- package/dist/utils/sanitize-schema.test.d.ts +1 -0
- 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/track.js +3 -3
- package/dist/utils/transformations.d.ts +1 -1
- package/dist/utils/transformations.js +2 -4
- package/dist/utils/url.js +9 -8
- package/dist/utils/url.test.d.ts +1 -0
- package/dist/utils/user-name.d.ts +1 -1
- package/dist/utils/validate-diff.d.ts +7 -0
- package/dist/utils/validate-diff.js +113 -0
- package/dist/utils/validate-diff.test.d.ts +1 -0
- 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 +3 -3
- package/dist/utils/validate-query.test.d.ts +1 -0
- package/dist/utils/validate-snapshot.d.ts +5 -0
- package/dist/utils/validate-snapshot.js +71 -0
- package/dist/utils/validate-snapshot.test.d.ts +1 -0
- package/dist/webhooks.js +4 -3
- package/package.json +62 -62
|
@@ -45,6 +45,10 @@ const local_1 = require("./local");
|
|
|
45
45
|
// tell samlify to use validator...
|
|
46
46
|
samlify.setSchemaValidator(validator);
|
|
47
47
|
class SAMLAuthDriver extends local_1.LocalAuthDriver {
|
|
48
|
+
idp;
|
|
49
|
+
sp;
|
|
50
|
+
usersService;
|
|
51
|
+
config;
|
|
48
52
|
constructor(options, config) {
|
|
49
53
|
super(options, config);
|
|
50
54
|
this.config = config;
|
|
@@ -58,12 +62,12 @@ class SAMLAuthDriver extends local_1.LocalAuthDriver {
|
|
|
58
62
|
.from('directus_users')
|
|
59
63
|
.whereRaw('LOWER(??) = ?', ['external_identifier', identifier.toLowerCase()])
|
|
60
64
|
.first();
|
|
61
|
-
return user
|
|
65
|
+
return user?.id;
|
|
62
66
|
}
|
|
63
67
|
async getUserID(payload) {
|
|
64
68
|
const { provider, emailKey, identifierKey, givenNameKey, familyNameKey, allowPublicRegistration } = this.config;
|
|
65
|
-
const email = payload[emailKey
|
|
66
|
-
const identifier = payload[identifierKey
|
|
69
|
+
const email = payload[emailKey ?? 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'];
|
|
70
|
+
const identifier = payload[identifierKey ?? 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier'];
|
|
67
71
|
const userID = await this.fetchUserID(identifier);
|
|
68
72
|
if (userID)
|
|
69
73
|
return userID;
|
|
@@ -71,8 +75,8 @@ class SAMLAuthDriver extends local_1.LocalAuthDriver {
|
|
|
71
75
|
logger_1.default.trace(`[SAML] User doesn't exist, and public registration not allowed for provider "${provider}"`);
|
|
72
76
|
throw new exceptions_2.InvalidCredentialsException();
|
|
73
77
|
}
|
|
74
|
-
const firstName = payload[givenNameKey
|
|
75
|
-
const lastName = payload[familyNameKey
|
|
78
|
+
const firstName = payload[givenNameKey ?? 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname'];
|
|
79
|
+
const lastName = payload[familyNameKey ?? 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname'];
|
|
76
80
|
try {
|
|
77
81
|
return await this.usersService.createOne({
|
|
78
82
|
provider,
|
|
@@ -126,8 +130,7 @@ function createSAMLAuthRouter(providerName) {
|
|
|
126
130
|
return res.redirect(context);
|
|
127
131
|
}));
|
|
128
132
|
router.post('/acs', express_1.default.urlencoded({ extended: false }), (0, async_handler_1.default)(async (req, res, next) => {
|
|
129
|
-
|
|
130
|
-
const relayState = (_a = req.body) === null || _a === void 0 ? void 0 : _a.RelayState;
|
|
133
|
+
const relayState = req.body?.RelayState;
|
|
131
134
|
try {
|
|
132
135
|
const { sp, idp } = (0, auth_1.getAuthProvider)(providerName);
|
|
133
136
|
const { extract } = await sp.parseLoginResponse(idp, 'post', req);
|
package/dist/auth.d.ts
CHANGED
package/dist/auth.js
CHANGED
|
@@ -4,15 +4,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.registerAuthProviders = exports.getAuthProvider = void 0;
|
|
7
|
-
const
|
|
8
|
-
const env_1 = __importDefault(require("./env"));
|
|
9
|
-
const logger_1 = __importDefault(require("./logger"));
|
|
7
|
+
const utils_1 = require("@directus/shared/utils");
|
|
10
8
|
const drivers_1 = require("./auth/drivers");
|
|
11
9
|
const constants_1 = require("./constants");
|
|
10
|
+
const database_1 = __importDefault(require("./database"));
|
|
11
|
+
const env_1 = __importDefault(require("./env"));
|
|
12
12
|
const exceptions_1 = require("./exceptions");
|
|
13
|
+
const logger_1 = __importDefault(require("./logger"));
|
|
13
14
|
const get_config_from_env_1 = require("./utils/get-config-from-env");
|
|
14
15
|
const get_schema_1 = require("./utils/get-schema");
|
|
15
|
-
const utils_1 = require("@directus/shared/utils");
|
|
16
16
|
const providerNames = (0, utils_1.toArray)(env_1.default.AUTH_PROVIDERS);
|
|
17
17
|
const providers = new Map();
|
|
18
18
|
function getAuthProvider(provider) {
|
package/dist/cache.d.ts
CHANGED
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
import Keyv from 'keyv';
|
|
2
|
+
import type { SchemaOverview } from '@directus/shared/types';
|
|
2
3
|
export declare function getCache(): {
|
|
3
4
|
cache: Keyv | null;
|
|
4
5
|
systemCache: Keyv;
|
|
6
|
+
sharedSchemaCache: Keyv;
|
|
7
|
+
localSchemaCache: Keyv;
|
|
5
8
|
lockCache: Keyv;
|
|
6
9
|
};
|
|
7
10
|
export declare function flushCaches(forced?: boolean): Promise<void>;
|
|
8
|
-
export declare function clearSystemCache(
|
|
11
|
+
export declare function clearSystemCache(opts?: {
|
|
12
|
+
forced?: boolean | undefined;
|
|
13
|
+
autoPurgeCache?: false | undefined;
|
|
14
|
+
}): Promise<void>;
|
|
9
15
|
export declare function setSystemCache(key: string, value: any, ttl?: number): Promise<void>;
|
|
10
16
|
export declare function getSystemCache(key: string): Promise<Record<string, any>>;
|
|
17
|
+
export declare function setSchemaCache(schema: SchemaOverview): Promise<void>;
|
|
18
|
+
export declare function getSchemaCache(): Promise<SchemaOverview | undefined>;
|
|
11
19
|
export declare function setCacheValue(cache: Keyv, key: string, value: Record<string, any> | Record<string, any>[], ttl?: number): Promise<void>;
|
|
12
20
|
export declare function getCacheValue(cache: Keyv, key: string): Promise<any>;
|
package/dist/cache.js
CHANGED
|
@@ -3,48 +3,72 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getCacheValue = exports.setCacheValue = exports.getSystemCache = exports.setSystemCache = exports.clearSystemCache = exports.flushCaches = exports.getCache = void 0;
|
|
6
|
+
exports.getCacheValue = exports.setCacheValue = exports.getSchemaCache = exports.setSchemaCache = exports.getSystemCache = exports.setSystemCache = exports.clearSystemCache = exports.flushCaches = exports.getCache = void 0;
|
|
7
7
|
const keyv_1 = __importDefault(require("keyv"));
|
|
8
|
-
const ms_1 = __importDefault(require("ms"));
|
|
9
8
|
const env_1 = __importDefault(require("./env"));
|
|
10
9
|
const logger_1 = __importDefault(require("./logger"));
|
|
10
|
+
const compress_1 = require("./utils/compress");
|
|
11
11
|
const get_config_from_env_1 = require("./utils/get-config-from-env");
|
|
12
|
+
const get_milliseconds_1 = require("./utils/get-milliseconds");
|
|
12
13
|
const validate_env_1 = require("./utils/validate-env");
|
|
13
|
-
const
|
|
14
|
+
const messenger_1 = require("./messenger");
|
|
15
|
+
const utils_1 = require("@directus/shared/utils");
|
|
14
16
|
let cache = null;
|
|
15
17
|
let systemCache = null;
|
|
18
|
+
let localSchemaCache = null;
|
|
19
|
+
let sharedSchemaCache = null;
|
|
16
20
|
let lockCache = null;
|
|
21
|
+
let messengerSubscribed = false;
|
|
22
|
+
const messenger = (0, messenger_1.getMessenger)();
|
|
23
|
+
if (env_1.default.MESSENGER_STORE === 'redis' && env_1.default.CACHE_STORE === 'memory' && env_1.default.CACHE_AUTO_PURGE && !messengerSubscribed) {
|
|
24
|
+
messengerSubscribed = true;
|
|
25
|
+
messenger.subscribe('schemaChanged', async (opts) => {
|
|
26
|
+
if (cache && opts?.autoPurgeCache !== false) {
|
|
27
|
+
await cache.clear();
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
17
31
|
function getCache() {
|
|
18
32
|
if (env_1.default.CACHE_ENABLED === true && cache === null) {
|
|
19
33
|
(0, validate_env_1.validateEnv)(['CACHE_NAMESPACE', 'CACHE_TTL', 'CACHE_STORE']);
|
|
20
|
-
cache = getKeyvInstance(env_1.default.
|
|
34
|
+
cache = getKeyvInstance(env_1.default.CACHE_STORE, (0, get_milliseconds_1.getMilliseconds)(env_1.default.CACHE_TTL));
|
|
21
35
|
cache.on('error', (err) => logger_1.default.warn(err, `[cache] ${err}`));
|
|
22
36
|
}
|
|
23
37
|
if (systemCache === null) {
|
|
24
|
-
systemCache = getKeyvInstance(env_1.default.
|
|
25
|
-
systemCache.on('error', (err) => logger_1.default.warn(err, `[cache] ${err}`));
|
|
38
|
+
systemCache = getKeyvInstance(env_1.default.CACHE_STORE, (0, get_milliseconds_1.getMilliseconds)(env_1.default.CACHE_SYSTEM_TTL), '_system');
|
|
39
|
+
systemCache.on('error', (err) => logger_1.default.warn(err, `[system-cache] ${err}`));
|
|
40
|
+
}
|
|
41
|
+
if (sharedSchemaCache === null) {
|
|
42
|
+
sharedSchemaCache = getKeyvInstance(env_1.default.CACHE_STORE, (0, get_milliseconds_1.getMilliseconds)(env_1.default.CACHE_SYSTEM_TTL), '_schema_shared');
|
|
43
|
+
sharedSchemaCache.on('error', (err) => logger_1.default.warn(err, `[shared-schema-cache] ${err}`));
|
|
44
|
+
}
|
|
45
|
+
if (localSchemaCache === null) {
|
|
46
|
+
localSchemaCache = getKeyvInstance('memory', (0, get_milliseconds_1.getMilliseconds)(env_1.default.CACHE_SYSTEM_TTL), '_schema');
|
|
47
|
+
localSchemaCache.on('error', (err) => logger_1.default.warn(err, `[schema-cache] ${err}`));
|
|
26
48
|
}
|
|
27
49
|
if (lockCache === null) {
|
|
28
|
-
lockCache = getKeyvInstance(undefined, '_lock');
|
|
29
|
-
lockCache.on('error', (err) => logger_1.default.warn(err, `[cache] ${err}`));
|
|
50
|
+
lockCache = getKeyvInstance(env_1.default.CACHE_STORE, undefined, '_lock');
|
|
51
|
+
lockCache.on('error', (err) => logger_1.default.warn(err, `[lock-cache] ${err}`));
|
|
30
52
|
}
|
|
31
|
-
return { cache, systemCache, lockCache };
|
|
53
|
+
return { cache, systemCache, sharedSchemaCache, localSchemaCache, lockCache };
|
|
32
54
|
}
|
|
33
55
|
exports.getCache = getCache;
|
|
34
56
|
async function flushCaches(forced) {
|
|
35
57
|
const { cache } = getCache();
|
|
36
|
-
await clearSystemCache(forced);
|
|
37
|
-
await
|
|
58
|
+
await clearSystemCache({ forced });
|
|
59
|
+
await cache?.clear();
|
|
38
60
|
}
|
|
39
61
|
exports.flushCaches = flushCaches;
|
|
40
|
-
async function clearSystemCache(
|
|
41
|
-
const { systemCache, lockCache } = getCache();
|
|
62
|
+
async function clearSystemCache(opts) {
|
|
63
|
+
const { systemCache, localSchemaCache, lockCache } = getCache();
|
|
42
64
|
// Flush system cache when forced or when system cache lock not set
|
|
43
|
-
if (forced || !(await lockCache.get('system-cache-lock'))) {
|
|
65
|
+
if (opts?.forced || !(await lockCache.get('system-cache-lock'))) {
|
|
44
66
|
await lockCache.set('system-cache-lock', true, 10000);
|
|
45
67
|
await systemCache.clear();
|
|
46
68
|
await lockCache.delete('system-cache-lock');
|
|
47
69
|
}
|
|
70
|
+
await localSchemaCache.clear();
|
|
71
|
+
messenger.publish('schemaChanged', { autoPurgeCache: opts?.autoPurgeCache });
|
|
48
72
|
}
|
|
49
73
|
exports.clearSystemCache = clearSystemCache;
|
|
50
74
|
async function setSystemCache(key, value, ttl) {
|
|
@@ -59,6 +83,25 @@ async function getSystemCache(key) {
|
|
|
59
83
|
return await getCacheValue(systemCache, key);
|
|
60
84
|
}
|
|
61
85
|
exports.getSystemCache = getSystemCache;
|
|
86
|
+
async function setSchemaCache(schema) {
|
|
87
|
+
const { localSchemaCache, sharedSchemaCache } = getCache();
|
|
88
|
+
const schemaHash = await (0, utils_1.getSimpleHash)(JSON.stringify(schema));
|
|
89
|
+
await sharedSchemaCache.set('hash', schemaHash);
|
|
90
|
+
await localSchemaCache.set('schema', schema);
|
|
91
|
+
await localSchemaCache.set('hash', schemaHash);
|
|
92
|
+
}
|
|
93
|
+
exports.setSchemaCache = setSchemaCache;
|
|
94
|
+
async function getSchemaCache() {
|
|
95
|
+
const { localSchemaCache, sharedSchemaCache } = getCache();
|
|
96
|
+
const sharedSchemaHash = await sharedSchemaCache.get('hash');
|
|
97
|
+
if (!sharedSchemaHash)
|
|
98
|
+
return;
|
|
99
|
+
const localSchemaHash = await localSchemaCache.get('hash');
|
|
100
|
+
if (!localSchemaHash || localSchemaHash !== sharedSchemaHash)
|
|
101
|
+
return;
|
|
102
|
+
return await localSchemaCache.get('schema');
|
|
103
|
+
}
|
|
104
|
+
exports.getSchemaCache = getSchemaCache;
|
|
62
105
|
async function setCacheValue(cache, key, value, ttl) {
|
|
63
106
|
const compressed = await (0, compress_1.compress)(value);
|
|
64
107
|
await cache.set(key, compressed, ttl);
|
|
@@ -72,8 +115,8 @@ async function getCacheValue(cache, key) {
|
|
|
72
115
|
return decompressed;
|
|
73
116
|
}
|
|
74
117
|
exports.getCacheValue = getCacheValue;
|
|
75
|
-
function getKeyvInstance(ttl, namespaceSuffix) {
|
|
76
|
-
switch (
|
|
118
|
+
function getKeyvInstance(store, ttl, namespaceSuffix) {
|
|
119
|
+
switch (store) {
|
|
77
120
|
case 'redis':
|
|
78
121
|
return new keyv_1.default(getConfig('redis', ttl, namespaceSuffix));
|
|
79
122
|
case 'memcache':
|
|
@@ -26,13 +26,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
const database_1 = __importStar(require("../../../database"));
|
|
29
30
|
const run_1 = __importDefault(require("../../../database/migrations/run"));
|
|
30
31
|
const run_2 = __importDefault(require("../../../database/seeds/run"));
|
|
31
32
|
const env_1 = __importDefault(require("../../../env"));
|
|
32
33
|
const logger_1 = __importDefault(require("../../../logger"));
|
|
33
|
-
const get_schema_1 = require("../../../utils/get-schema");
|
|
34
34
|
const services_1 = require("../../../services");
|
|
35
|
-
const
|
|
35
|
+
const get_schema_1 = require("../../../utils/get-schema");
|
|
36
36
|
const defaults_1 = require("../../utils/defaults");
|
|
37
37
|
async function bootstrap({ skipAdminInit }) {
|
|
38
38
|
logger_1.default.info('Initializing bootstrap...');
|
|
@@ -6,17 +6,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const chalk_1 = __importDefault(require("chalk"));
|
|
7
7
|
const execa_1 = __importDefault(require("execa"));
|
|
8
8
|
const inquirer_1 = __importDefault(require("inquirer"));
|
|
9
|
+
const joi_1 = __importDefault(require("joi"));
|
|
9
10
|
const ora_1 = __importDefault(require("ora"));
|
|
10
11
|
const uuid_1 = require("uuid");
|
|
11
|
-
const joi_1 = __importDefault(require("joi"));
|
|
12
12
|
const run_1 = __importDefault(require("../../../database/migrations/run"));
|
|
13
13
|
const run_2 = __importDefault(require("../../../database/seeds/run"));
|
|
14
|
+
const generate_hash_1 = require("../../../utils/generate-hash");
|
|
14
15
|
const create_db_connection_1 = __importDefault(require("../../utils/create-db-connection"));
|
|
15
16
|
const create_env_1 = __importDefault(require("../../utils/create-env"));
|
|
17
|
+
const defaults_1 = require("../../utils/defaults");
|
|
16
18
|
const drivers_1 = require("../../utils/drivers");
|
|
17
19
|
const questions_1 = require("./questions");
|
|
18
|
-
const generate_hash_1 = require("../../../utils/generate-hash");
|
|
19
|
-
const defaults_1 = require("../../utils/defaults");
|
|
20
20
|
async function init() {
|
|
21
21
|
const rootPath = process.cwd();
|
|
22
22
|
const { client } = await inquirer_1.default.prompt([
|
|
@@ -35,11 +35,12 @@ const js_yaml_1 = require("js-yaml");
|
|
|
35
35
|
const path_1 = __importDefault(require("path"));
|
|
36
36
|
const database_1 = __importStar(require("../../../database"));
|
|
37
37
|
const logger_1 = __importDefault(require("../../../logger"));
|
|
38
|
+
const types_1 = require("../../../types");
|
|
39
|
+
const apply_diff_1 = require("../../../utils/apply-diff");
|
|
38
40
|
const apply_snapshot_1 = require("../../../utils/apply-snapshot");
|
|
39
41
|
const get_snapshot_1 = require("../../../utils/get-snapshot");
|
|
40
42
|
const get_snapshot_diff_1 = require("../../../utils/get-snapshot-diff");
|
|
41
43
|
async function apply(snapshotPath, options) {
|
|
42
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
43
44
|
const filename = path_1.default.resolve(process.cwd(), snapshotPath);
|
|
44
45
|
const database = (0, database_1.default)();
|
|
45
46
|
await (0, database_1.validateDatabaseConnection)(database);
|
|
@@ -66,29 +67,29 @@ async function apply(snapshotPath, options) {
|
|
|
66
67
|
database.destroy();
|
|
67
68
|
process.exit(0);
|
|
68
69
|
}
|
|
69
|
-
const dryRun =
|
|
70
|
-
const promptForChanges = !dryRun &&
|
|
70
|
+
const dryRun = options?.dryRun === true;
|
|
71
|
+
const promptForChanges = !dryRun && options?.yes !== true;
|
|
71
72
|
if (dryRun || promptForChanges) {
|
|
72
73
|
let message = '';
|
|
73
74
|
if (snapshotDiff.collections.length > 0) {
|
|
74
75
|
message += chalk_1.default.black.underline.bold('Collections:');
|
|
75
76
|
for (const { collection, diff } of snapshotDiff.collections) {
|
|
76
|
-
if (
|
|
77
|
+
if (diff[0]?.kind === types_1.DiffKind.EDIT) {
|
|
77
78
|
message += `\n - ${chalk_1.default.blue('Update')} ${collection}`;
|
|
78
79
|
for (const change of diff) {
|
|
79
|
-
if (change.kind ===
|
|
80
|
+
if (change.kind === types_1.DiffKind.EDIT) {
|
|
80
81
|
const path = change.path.slice(1).join('.');
|
|
81
82
|
message += `\n - Set ${path} to ${change.rhs}`;
|
|
82
83
|
}
|
|
83
84
|
}
|
|
84
85
|
}
|
|
85
|
-
else if (
|
|
86
|
+
else if (diff[0]?.kind === types_1.DiffKind.DELETE) {
|
|
86
87
|
message += `\n - ${chalk_1.default.red('Delete')} ${collection}`;
|
|
87
88
|
}
|
|
88
|
-
else if (
|
|
89
|
+
else if (diff[0]?.kind === types_1.DiffKind.NEW) {
|
|
89
90
|
message += `\n - ${chalk_1.default.green('Create')} ${collection}`;
|
|
90
91
|
}
|
|
91
|
-
else if (
|
|
92
|
+
else if (diff[0]?.kind === types_1.DiffKind.ARRAY) {
|
|
92
93
|
message += `\n - ${chalk_1.default.blue('Update')} ${collection}`;
|
|
93
94
|
}
|
|
94
95
|
}
|
|
@@ -96,28 +97,28 @@ async function apply(snapshotPath, options) {
|
|
|
96
97
|
if (snapshotDiff.fields.length > 0) {
|
|
97
98
|
message += '\n\n' + chalk_1.default.black.underline.bold('Fields:');
|
|
98
99
|
for (const { collection, field, diff } of snapshotDiff.fields) {
|
|
99
|
-
if (
|
|
100
|
+
if (diff[0]?.kind === types_1.DiffKind.EDIT || (0, apply_diff_1.isNestedMetaUpdate)(diff[0])) {
|
|
100
101
|
message += `\n - ${chalk_1.default.blue('Update')} ${collection}.${field}`;
|
|
101
102
|
for (const change of diff) {
|
|
102
103
|
const path = change.path.slice(1).join('.');
|
|
103
|
-
if (change.kind ===
|
|
104
|
+
if (change.kind === types_1.DiffKind.EDIT) {
|
|
104
105
|
message += `\n - Set ${path} to ${change.rhs}`;
|
|
105
106
|
}
|
|
106
|
-
else if (change.kind ===
|
|
107
|
+
else if (change.kind === types_1.DiffKind.DELETE) {
|
|
107
108
|
message += `\n - Remove ${path}`;
|
|
108
109
|
}
|
|
109
|
-
else if (change.kind ===
|
|
110
|
+
else if (change.kind === types_1.DiffKind.NEW) {
|
|
110
111
|
message += `\n - Add ${path} and set it to ${change.rhs}`;
|
|
111
112
|
}
|
|
112
113
|
}
|
|
113
114
|
}
|
|
114
|
-
else if (
|
|
115
|
+
else if (diff[0]?.kind === types_1.DiffKind.DELETE) {
|
|
115
116
|
message += `\n - ${chalk_1.default.red('Delete')} ${collection}.${field}`;
|
|
116
117
|
}
|
|
117
|
-
else if (
|
|
118
|
+
else if (diff[0]?.kind === types_1.DiffKind.NEW) {
|
|
118
119
|
message += `\n - ${chalk_1.default.green('Create')} ${collection}.${field}`;
|
|
119
120
|
}
|
|
120
|
-
else if (
|
|
121
|
+
else if (diff[0]?.kind === types_1.DiffKind.ARRAY) {
|
|
121
122
|
message += `\n - ${chalk_1.default.blue('Update')} ${collection}.${field}`;
|
|
122
123
|
}
|
|
123
124
|
}
|
|
@@ -125,22 +126,22 @@ async function apply(snapshotPath, options) {
|
|
|
125
126
|
if (snapshotDiff.relations.length > 0) {
|
|
126
127
|
message += '\n\n' + chalk_1.default.black.underline.bold('Relations:');
|
|
127
128
|
for (const { collection, field, related_collection, diff } of snapshotDiff.relations) {
|
|
128
|
-
if (
|
|
129
|
+
if (diff[0]?.kind === types_1.DiffKind.EDIT) {
|
|
129
130
|
message += `\n - ${chalk_1.default.blue('Update')} ${collection}.${field}`;
|
|
130
131
|
for (const change of diff) {
|
|
131
|
-
if (change.kind ===
|
|
132
|
+
if (change.kind === types_1.DiffKind.EDIT) {
|
|
132
133
|
const path = change.path.slice(1).join('.');
|
|
133
134
|
message += `\n - Set ${path} to ${change.rhs}`;
|
|
134
135
|
}
|
|
135
136
|
}
|
|
136
137
|
}
|
|
137
|
-
else if (
|
|
138
|
+
else if (diff[0]?.kind === types_1.DiffKind.DELETE) {
|
|
138
139
|
message += `\n - ${chalk_1.default.red('Delete')} ${collection}.${field}`;
|
|
139
140
|
}
|
|
140
|
-
else if (
|
|
141
|
+
else if (diff[0]?.kind === types_1.DiffKind.NEW) {
|
|
141
142
|
message += `\n - ${chalk_1.default.green('Create')} ${collection}.${field}`;
|
|
142
143
|
}
|
|
143
|
-
else if (
|
|
144
|
+
else if (diff[0]?.kind === types_1.DiffKind.ARRAY) {
|
|
144
145
|
message += `\n - ${chalk_1.default.blue('Update')} ${collection}.${field}`;
|
|
145
146
|
}
|
|
146
147
|
else {
|
|
@@ -16,7 +16,7 @@ async function snapshot(snapshotPath, options) {
|
|
|
16
16
|
try {
|
|
17
17
|
const snapshot = await (0, get_snapshot_1.getSnapshot)({ database });
|
|
18
18
|
let snapshotString;
|
|
19
|
-
if (
|
|
19
|
+
if (options?.format === 'yaml') {
|
|
20
20
|
snapshotString = (0, js_yaml_1.dump)(snapshot);
|
|
21
21
|
}
|
|
22
22
|
else {
|
|
@@ -32,7 +32,7 @@ async function snapshot(snapshotPath, options) {
|
|
|
32
32
|
catch {
|
|
33
33
|
snapshotExists = false;
|
|
34
34
|
}
|
|
35
|
-
if (snapshotExists &&
|
|
35
|
+
if (snapshotExists && options?.yes === false) {
|
|
36
36
|
const { overwrite } = await inquirer_1.default.prompt([
|
|
37
37
|
{
|
|
38
38
|
type: 'confirm',
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Knex } from 'knex';
|
|
2
|
+
import type { Driver } from '../../types';
|
|
2
3
|
export type Credentials = {
|
|
3
4
|
filename?: string;
|
|
4
5
|
host?: string;
|
|
@@ -9,4 +10,4 @@ export type Credentials = {
|
|
|
9
10
|
ssl?: boolean;
|
|
10
11
|
options__encrypt?: boolean;
|
|
11
12
|
};
|
|
12
|
-
export default function createDBConnection(client:
|
|
13
|
+
export default function createDBConnection(client: Driver, credentials: Credentials): Knex<any, unknown[]>;
|
|
@@ -167,7 +167,7 @@ STORAGE_LOCAL_ROOT="./uploads"
|
|
|
167
167
|
# STORAGE_DIGITALOCEAN_DRIVER="s3"
|
|
168
168
|
# STORAGE_DIGITALOCEAN_KEY="abcdef"
|
|
169
169
|
# STORAGE_DIGITALOCEAN_SECRET="ghijkl"
|
|
170
|
-
# STORAGE_DIGITALOCEAN_ENDPOINT="ams3.digitaloceanspaces.com"
|
|
170
|
+
# STORAGE_DIGITALOCEAN_ENDPOINT="https://ams3.digitaloceanspaces.com"
|
|
171
171
|
# STORAGE_DIGITALOCEAN_BUCKET="my-files"
|
|
172
172
|
# STORAGE_DIGITALOCEAN_REGION="ams3"
|
|
173
173
|
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { Credentials } from '../create-db-connection';
|
|
2
|
-
import { drivers } from '../drivers';
|
|
1
|
+
import type { Credentials } from '../create-db-connection';
|
|
2
|
+
import type { drivers } from '../drivers';
|
|
3
3
|
export default function createEnv(client: keyof typeof drivers, credentials: Credentials, directory: string): Promise<void>;
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
mysql: string;
|
|
5
|
-
sqlite3: string;
|
|
6
|
-
mssql: string;
|
|
7
|
-
oracledb: string;
|
|
8
|
-
};
|
|
9
|
-
export declare function getDriverForClient(client: string): keyof typeof drivers | null;
|
|
1
|
+
import type { Driver } from '../../types';
|
|
2
|
+
export declare const drivers: Record<Driver, string>;
|
|
3
|
+
export declare function getDriverForClient(client: string): Driver | null;
|
package/dist/constants.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { CookieOptions } from 'express';
|
|
2
|
+
import type { TransformationParams } from './types';
|
|
2
3
|
export declare const SYSTEM_ASSET_ALLOW_LIST: TransformationParams[];
|
|
3
4
|
export declare const ASSET_TRANSFORM_QUERY_KEYS: string[];
|
|
4
5
|
export declare const FILTER_VARIABLES: string[];
|
|
@@ -7,12 +8,5 @@ export declare const DEFAULT_AUTH_PROVIDER = "default";
|
|
|
7
8
|
export declare const COLUMN_TRANSFORMS: string[];
|
|
8
9
|
export declare const GENERATE_SPECIAL: string[];
|
|
9
10
|
export declare const UUID_REGEX = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}";
|
|
10
|
-
export declare const COOKIE_OPTIONS:
|
|
11
|
-
httpOnly: boolean;
|
|
12
|
-
domain: any;
|
|
13
|
-
maxAge: number;
|
|
14
|
-
secure: any;
|
|
15
|
-
sameSite: "lax" | "strict" | "none";
|
|
16
|
-
};
|
|
17
|
-
export declare const ROBOTSTXT: string;
|
|
11
|
+
export declare const COOKIE_OPTIONS: CookieOptions;
|
|
18
12
|
export declare const OAS_REQUIRED_SCHEMAS: string[];
|
package/dist/constants.js
CHANGED
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
|
-
var _a;
|
|
6
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.OAS_REQUIRED_SCHEMAS = exports.
|
|
6
|
+
exports.OAS_REQUIRED_SCHEMAS = exports.COOKIE_OPTIONS = exports.UUID_REGEX = exports.GENERATE_SPECIAL = exports.COLUMN_TRANSFORMS = exports.DEFAULT_AUTH_PROVIDER = exports.ALIAS_TYPES = exports.FILTER_VARIABLES = exports.ASSET_TRANSFORM_QUERY_KEYS = exports.SYSTEM_ASSET_ALLOW_LIST = void 0;
|
|
8
7
|
const env_1 = __importDefault(require("./env"));
|
|
9
|
-
const
|
|
8
|
+
const get_milliseconds_1 = require("./utils/get-milliseconds");
|
|
10
9
|
exports.SYSTEM_ASSET_ALLOW_LIST = [
|
|
11
10
|
{
|
|
12
11
|
key: 'system-small-cover',
|
|
@@ -52,12 +51,8 @@ exports.UUID_REGEX = '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{1
|
|
|
52
51
|
exports.COOKIE_OPTIONS = {
|
|
53
52
|
httpOnly: true,
|
|
54
53
|
domain: env_1.default.REFRESH_TOKEN_COOKIE_DOMAIN,
|
|
55
|
-
maxAge: (0,
|
|
56
|
-
secure:
|
|
54
|
+
maxAge: (0, get_milliseconds_1.getMilliseconds)(env_1.default.REFRESH_TOKEN_TTL),
|
|
55
|
+
secure: env_1.default.REFRESH_TOKEN_COOKIE_SECURE ?? false,
|
|
57
56
|
sameSite: env_1.default.REFRESH_TOKEN_COOKIE_SAME_SITE || 'strict',
|
|
58
57
|
};
|
|
59
|
-
exports.
|
|
60
|
-
User-agent: *
|
|
61
|
-
Disallow: /
|
|
62
|
-
`.trim();
|
|
63
|
-
exports.OAS_REQUIRED_SCHEMAS = ['Query', 'x-metadata'];
|
|
58
|
+
exports.OAS_REQUIRED_SCHEMAS = ['Diff', 'Schema', 'Query', 'x-metadata'];
|
|
@@ -60,7 +60,6 @@ const createCommentSchema = joi_1.default.object({
|
|
|
60
60
|
item: [joi_1.default.number().required(), joi_1.default.string().required()],
|
|
61
61
|
});
|
|
62
62
|
router.post('/comment', (0, async_handler_1.default)(async (req, res, next) => {
|
|
63
|
-
var _a;
|
|
64
63
|
const service = new services_1.ActivityService({
|
|
65
64
|
accountability: req.accountability,
|
|
66
65
|
schema: req.schema,
|
|
@@ -72,7 +71,7 @@ router.post('/comment', (0, async_handler_1.default)(async (req, res, next) => {
|
|
|
72
71
|
const primaryKey = await service.createOne({
|
|
73
72
|
...req.body,
|
|
74
73
|
action: types_1.Action.COMMENT,
|
|
75
|
-
user:
|
|
74
|
+
user: req.accountability?.user,
|
|
76
75
|
ip: (0, get_ip_from_req_1.getIPFromReq)(req),
|
|
77
76
|
user_agent: req.get('user-agent'),
|
|
78
77
|
origin: req.get('origin'),
|
|
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const utils_1 = require("@directus/shared/utils");
|
|
7
7
|
const express_1 = require("express");
|
|
8
8
|
const lodash_1 = require("lodash");
|
|
9
|
-
const ms_1 = __importDefault(require("ms"));
|
|
10
9
|
const constants_1 = require("../constants");
|
|
11
10
|
const database_1 = __importDefault(require("../database"));
|
|
12
11
|
const env_1 = __importDefault(require("../env"));
|
|
@@ -16,7 +15,9 @@ const use_collection_1 = __importDefault(require("../middleware/use-collection")
|
|
|
16
15
|
const services_1 = require("../services");
|
|
17
16
|
const assets_1 = require("../types/assets");
|
|
18
17
|
const async_handler_1 = __importDefault(require("../utils/async-handler"));
|
|
18
|
+
const get_cache_headers_1 = require("../utils/get-cache-headers");
|
|
19
19
|
const get_config_from_env_1 = require("../utils/get-config-from-env");
|
|
20
|
+
const get_milliseconds_1 = require("../utils/get-milliseconds");
|
|
20
21
|
const router = (0, express_1.Router)();
|
|
21
22
|
router.use((0, use_collection_1.default)('directus_files'));
|
|
22
23
|
router.get('/:pk/:filename?',
|
|
@@ -102,8 +103,7 @@ router.get('/:pk/:filename?',
|
|
|
102
103
|
}),
|
|
103
104
|
// Return file
|
|
104
105
|
(0, async_handler_1.default)(async (req, res) => {
|
|
105
|
-
|
|
106
|
-
const id = (_a = req.params.pk) === null || _a === void 0 ? void 0 : _a.substring(0, 36);
|
|
106
|
+
const id = req.params.pk?.substring(0, 36);
|
|
107
107
|
const service = new services_1.AssetsService({
|
|
108
108
|
accountability: req.accountability,
|
|
109
109
|
schema: req.schema,
|
|
@@ -114,20 +114,25 @@ router.get('/:pk/:filename?',
|
|
|
114
114
|
let range = undefined;
|
|
115
115
|
if (req.headers.range) {
|
|
116
116
|
const rangeParts = /bytes=([0-9]*)-([0-9]*)/.exec(req.headers.range);
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
117
|
+
if (rangeParts && rangeParts.length > 1) {
|
|
118
|
+
range = {};
|
|
119
|
+
if (rangeParts[1]) {
|
|
120
|
+
range.start = Number(rangeParts[1]);
|
|
121
|
+
if (Number.isNaN(range.start))
|
|
122
|
+
throw new exceptions_1.RangeNotSatisfiableException(range);
|
|
123
|
+
}
|
|
124
|
+
if (rangeParts[2]) {
|
|
125
|
+
range.end = Number(rangeParts[2]);
|
|
126
|
+
if (Number.isNaN(range.end))
|
|
127
|
+
throw new exceptions_1.RangeNotSatisfiableException(range);
|
|
128
|
+
}
|
|
123
129
|
}
|
|
124
130
|
}
|
|
125
131
|
const { stream, file, stat } = await service.getAsset(id, transformation, range);
|
|
126
|
-
|
|
127
|
-
res.attachment((_c = req.params.filename) !== null && _c !== void 0 ? _c : file.filename_download);
|
|
132
|
+
res.attachment(req.params.filename ?? file.filename_download);
|
|
128
133
|
res.setHeader('Content-Type', file.type);
|
|
129
134
|
res.setHeader('Accept-Ranges', 'bytes');
|
|
130
|
-
res.setHeader('Cache-Control',
|
|
135
|
+
res.setHeader('Cache-Control', (0, get_cache_headers_1.getCacheControlHeader)(req, (0, get_milliseconds_1.getMilliseconds)(env_1.default.ASSETS_CACHE_TTL), false, true));
|
|
131
136
|
const unixTime = Date.parse(file.modified_on);
|
|
132
137
|
if (!Number.isNaN(unixTime)) {
|
|
133
138
|
const lastModifiedDate = new Date(unixTime);
|