@strapi/core 5.12.1 → 5.12.2
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/Strapi.js +455 -0
- package/dist/Strapi.js.map +1 -0
- package/dist/Strapi.mjs +434 -0
- package/dist/Strapi.mjs.map +1 -0
- package/dist/compile.js +27 -0
- package/dist/compile.js.map +1 -0
- package/dist/compile.mjs +25 -0
- package/dist/compile.mjs.map +1 -0
- package/dist/configuration/config-loader.js +119 -0
- package/dist/configuration/config-loader.js.map +1 -0
- package/dist/configuration/config-loader.mjs +117 -0
- package/dist/configuration/config-loader.mjs.map +1 -0
- package/dist/configuration/get-dirs.js +33 -0
- package/dist/configuration/get-dirs.js.map +1 -0
- package/dist/configuration/get-dirs.mjs +31 -0
- package/dist/configuration/get-dirs.mjs.map +1 -0
- package/dist/configuration/index.js +91 -0
- package/dist/configuration/index.js.map +1 -0
- package/dist/configuration/index.mjs +89 -0
- package/dist/configuration/index.mjs.map +1 -0
- package/dist/configuration/urls.js +72 -0
- package/dist/configuration/urls.js.map +1 -0
- package/dist/configuration/urls.mjs +68 -0
- package/dist/configuration/urls.mjs.map +1 -0
- package/dist/container.js +34 -0
- package/dist/container.js.map +1 -0
- package/dist/container.mjs +32 -0
- package/dist/container.mjs.map +1 -0
- package/dist/core-api/controller/collection-type.js +85 -0
- package/dist/core-api/controller/collection-type.js.map +1 -0
- package/dist/core-api/controller/collection-type.mjs +83 -0
- package/dist/core-api/controller/collection-type.mjs.map +1 -0
- package/dist/core-api/controller/index.js +67 -0
- package/dist/core-api/controller/index.js.map +1 -0
- package/dist/core-api/controller/index.mjs +65 -0
- package/dist/core-api/controller/index.mjs.map +1 -0
- package/dist/core-api/controller/single-type.js +47 -0
- package/dist/core-api/controller/single-type.js.map +1 -0
- package/dist/core-api/controller/single-type.mjs +45 -0
- package/dist/core-api/controller/single-type.mjs.map +1 -0
- package/dist/core-api/controller/transform.js +85 -0
- package/dist/core-api/controller/transform.js.map +1 -0
- package/dist/core-api/controller/transform.mjs +83 -0
- package/dist/core-api/controller/transform.mjs.map +1 -0
- package/dist/core-api/routes/index.js +69 -0
- package/dist/core-api/routes/index.js.map +1 -0
- package/dist/core-api/routes/index.mjs +67 -0
- package/dist/core-api/routes/index.mjs.map +1 -0
- package/dist/core-api/service/collection-type.js +80 -0
- package/dist/core-api/service/collection-type.js.map +1 -0
- package/dist/core-api/service/collection-type.mjs +77 -0
- package/dist/core-api/service/collection-type.mjs.map +1 -0
- package/dist/core-api/service/core-service.js +13 -0
- package/dist/core-api/service/core-service.js.map +1 -0
- package/dist/core-api/service/core-service.mjs +11 -0
- package/dist/core-api/service/core-service.mjs.map +1 -0
- package/dist/core-api/service/index.js +16 -0
- package/dist/core-api/service/index.js.map +1 -0
- package/dist/core-api/service/index.mjs +14 -0
- package/dist/core-api/service/index.mjs.map +1 -0
- package/dist/core-api/service/pagination.js +78 -0
- package/dist/core-api/service/pagination.js.map +1 -0
- package/dist/core-api/service/pagination.mjs +73 -0
- package/dist/core-api/service/pagination.mjs.map +1 -0
- package/dist/core-api/service/single-type.js +50 -0
- package/dist/core-api/service/single-type.js.map +1 -0
- package/dist/core-api/service/single-type.mjs +47 -0
- package/dist/core-api/service/single-type.mjs.map +1 -0
- package/dist/domain/content-type/index.js +106 -0
- package/dist/domain/content-type/index.js.map +1 -0
- package/dist/domain/content-type/index.mjs +103 -0
- package/dist/domain/content-type/index.mjs.map +1 -0
- package/dist/domain/content-type/validator.js +92 -0
- package/dist/domain/content-type/validator.js.map +1 -0
- package/dist/domain/content-type/validator.mjs +90 -0
- package/dist/domain/content-type/validator.mjs.map +1 -0
- package/dist/domain/module/index.js +116 -0
- package/dist/domain/module/index.js.map +1 -0
- package/dist/domain/module/index.mjs +114 -0
- package/dist/domain/module/index.mjs.map +1 -0
- package/dist/domain/module/validation.js +30 -0
- package/dist/domain/module/validation.js.map +1 -0
- package/dist/domain/module/validation.mjs +28 -0
- package/dist/domain/module/validation.mjs.map +1 -0
- package/dist/ee/index.js +192 -0
- package/dist/ee/index.js.map +1 -0
- package/dist/ee/index.mjs +190 -0
- package/dist/ee/index.mjs.map +1 -0
- package/dist/ee/license.js +115 -0
- package/dist/ee/license.js.map +1 -0
- package/dist/ee/license.mjs +110 -0
- package/dist/ee/license.mjs.map +1 -0
- package/dist/factories.js +85 -0
- package/dist/factories.js.map +1 -0
- package/dist/factories.mjs +80 -0
- package/dist/factories.mjs.map +1 -0
- package/dist/index.js +19 -10105
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +17 -10082
- package/dist/index.mjs.map +1 -1
- package/dist/loaders/admin.d.ts.map +1 -1
- package/dist/loaders/admin.js +27 -0
- package/dist/loaders/admin.js.map +1 -0
- package/dist/loaders/admin.mjs +25 -0
- package/dist/loaders/admin.mjs.map +1 -0
- package/dist/loaders/apis.js +160 -0
- package/dist/loaders/apis.js.map +1 -0
- package/dist/loaders/apis.mjs +158 -0
- package/dist/loaders/apis.mjs.map +1 -0
- package/dist/loaders/components.js +37 -0
- package/dist/loaders/components.js.map +1 -0
- package/dist/loaders/components.mjs +35 -0
- package/dist/loaders/components.mjs.map +1 -0
- package/dist/loaders/index.js +26 -0
- package/dist/loaders/index.js.map +1 -0
- package/dist/loaders/index.mjs +24 -0
- package/dist/loaders/index.mjs.map +1 -0
- package/dist/loaders/middlewares.js +35 -0
- package/dist/loaders/middlewares.js.map +1 -0
- package/dist/loaders/middlewares.mjs +33 -0
- package/dist/loaders/middlewares.mjs.map +1 -0
- package/dist/loaders/plugins/get-enabled-plugins.js +136 -0
- package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -0
- package/dist/loaders/plugins/get-enabled-plugins.mjs +134 -0
- package/dist/loaders/plugins/get-enabled-plugins.mjs.map +1 -0
- package/dist/loaders/plugins/get-user-plugins-config.js +28 -0
- package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -0
- package/dist/loaders/plugins/get-user-plugins-config.mjs +26 -0
- package/dist/loaders/plugins/get-user-plugins-config.mjs.map +1 -0
- package/dist/loaders/plugins/index.js +155 -0
- package/dist/loaders/plugins/index.js.map +1 -0
- package/dist/loaders/plugins/index.mjs +134 -0
- package/dist/loaders/plugins/index.mjs.map +1 -0
- package/dist/loaders/policies.js +29 -0
- package/dist/loaders/policies.js.map +1 -0
- package/dist/loaders/policies.mjs +27 -0
- package/dist/loaders/policies.mjs.map +1 -0
- package/dist/loaders/sanitizers.js +12 -0
- package/dist/loaders/sanitizers.js.map +1 -0
- package/dist/loaders/sanitizers.mjs +10 -0
- package/dist/loaders/sanitizers.mjs.map +1 -0
- package/dist/loaders/src-index.js +41 -0
- package/dist/loaders/src-index.js.map +1 -0
- package/dist/loaders/src-index.mjs +39 -0
- package/dist/loaders/src-index.mjs.map +1 -0
- package/dist/loaders/validators.js +11 -0
- package/dist/loaders/validators.js.map +1 -0
- package/dist/loaders/validators.mjs +9 -0
- package/dist/loaders/validators.mjs.map +1 -0
- package/dist/middlewares/body.js +69 -0
- package/dist/middlewares/body.js.map +1 -0
- package/dist/middlewares/body.mjs +67 -0
- package/dist/middlewares/body.mjs.map +1 -0
- package/dist/middlewares/compression.js +8 -0
- package/dist/middlewares/compression.js.map +1 -0
- package/dist/middlewares/compression.mjs +6 -0
- package/dist/middlewares/compression.mjs.map +1 -0
- package/dist/middlewares/cors.js +64 -0
- package/dist/middlewares/cors.js.map +1 -0
- package/dist/middlewares/cors.mjs +62 -0
- package/dist/middlewares/cors.mjs.map +1 -0
- package/dist/middlewares/errors.js +35 -0
- package/dist/middlewares/errors.js.map +1 -0
- package/dist/middlewares/errors.mjs +33 -0
- package/dist/middlewares/errors.mjs.map +1 -0
- package/dist/middlewares/favicon.js +32 -0
- package/dist/middlewares/favicon.js.map +1 -0
- package/dist/middlewares/favicon.mjs +30 -0
- package/dist/middlewares/favicon.mjs.map +1 -0
- package/dist/middlewares/index.js +36 -0
- package/dist/middlewares/index.js.map +1 -0
- package/dist/middlewares/index.mjs +34 -0
- package/dist/middlewares/index.mjs.map +1 -0
- package/dist/middlewares/ip.js +8 -0
- package/dist/middlewares/ip.js.map +1 -0
- package/dist/middlewares/ip.mjs +6 -0
- package/dist/middlewares/ip.mjs.map +1 -0
- package/dist/middlewares/logger.js +13 -0
- package/dist/middlewares/logger.js.map +1 -0
- package/dist/middlewares/logger.mjs +11 -0
- package/dist/middlewares/logger.mjs.map +1 -0
- package/dist/middlewares/powered-by.js +18 -0
- package/dist/middlewares/powered-by.js.map +1 -0
- package/dist/middlewares/powered-by.mjs +16 -0
- package/dist/middlewares/powered-by.mjs.map +1 -0
- package/dist/middlewares/public.js +38 -0
- package/dist/middlewares/public.js.map +1 -0
- package/dist/middlewares/public.mjs +36 -0
- package/dist/middlewares/public.mjs.map +1 -0
- package/dist/middlewares/query.js +43 -0
- package/dist/middlewares/query.js.map +1 -0
- package/dist/middlewares/query.mjs +41 -0
- package/dist/middlewares/query.mjs.map +1 -0
- package/dist/middlewares/response-time.js +13 -0
- package/dist/middlewares/response-time.js.map +1 -0
- package/dist/middlewares/response-time.mjs +11 -0
- package/dist/middlewares/response-time.mjs.map +1 -0
- package/dist/middlewares/responses.js +17 -0
- package/dist/middlewares/responses.js.map +1 -0
- package/dist/middlewares/responses.mjs +15 -0
- package/dist/middlewares/responses.mjs.map +1 -0
- package/dist/middlewares/security.js +116 -0
- package/dist/middlewares/security.js.map +1 -0
- package/dist/middlewares/security.mjs +114 -0
- package/dist/middlewares/security.mjs.map +1 -0
- package/dist/middlewares/session.js +31 -0
- package/dist/middlewares/session.js.map +1 -0
- package/dist/middlewares/session.mjs +29 -0
- package/dist/middlewares/session.mjs.map +1 -0
- package/dist/migrations/database/5.0.0-discard-drafts.js +168 -0
- package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -0
- package/dist/migrations/database/5.0.0-discard-drafts.mjs +165 -0
- package/dist/migrations/database/5.0.0-discard-drafts.mjs.map +1 -0
- package/dist/migrations/draft-publish.js +69 -0
- package/dist/migrations/draft-publish.js.map +1 -0
- package/dist/migrations/draft-publish.mjs +66 -0
- package/dist/migrations/draft-publish.mjs.map +1 -0
- package/dist/migrations/i18n.js +71 -0
- package/dist/migrations/i18n.js.map +1 -0
- package/dist/migrations/i18n.mjs +68 -0
- package/dist/migrations/i18n.mjs.map +1 -0
- package/dist/migrations/index.js +29 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/index.mjs +26 -0
- package/dist/migrations/index.mjs.map +1 -0
- package/dist/package.json.js +182 -0
- package/dist/package.json.js.map +1 -0
- package/dist/package.json.mjs +159 -0
- package/dist/package.json.mjs.map +1 -0
- package/dist/providers/admin.js +30 -0
- package/dist/providers/admin.js.map +1 -0
- package/dist/providers/admin.mjs +28 -0
- package/dist/providers/admin.mjs.map +1 -0
- package/dist/providers/coreStore.js +16 -0
- package/dist/providers/coreStore.js.map +1 -0
- package/dist/providers/coreStore.mjs +14 -0
- package/dist/providers/coreStore.mjs.map +1 -0
- package/dist/providers/cron.js +23 -0
- package/dist/providers/cron.js.map +1 -0
- package/dist/providers/cron.mjs +21 -0
- package/dist/providers/cron.mjs.map +1 -0
- package/dist/providers/index.js +20 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/index.mjs +18 -0
- package/dist/providers/index.mjs.map +1 -0
- package/dist/providers/provider.js +6 -0
- package/dist/providers/provider.js.map +1 -0
- package/dist/providers/provider.mjs +4 -0
- package/dist/providers/provider.mjs.map +1 -0
- package/dist/providers/registries.js +40 -0
- package/dist/providers/registries.js.map +1 -0
- package/dist/providers/registries.mjs +38 -0
- package/dist/providers/registries.mjs.map +1 -0
- package/dist/providers/telemetry.js +22 -0
- package/dist/providers/telemetry.js.map +1 -0
- package/dist/providers/telemetry.mjs +20 -0
- package/dist/providers/telemetry.mjs.map +1 -0
- package/dist/providers/webhooks.js +32 -0
- package/dist/providers/webhooks.js.map +1 -0
- package/dist/providers/webhooks.mjs +30 -0
- package/dist/providers/webhooks.mjs.map +1 -0
- package/dist/registries/apis.js +26 -0
- package/dist/registries/apis.js.map +1 -0
- package/dist/registries/apis.mjs +24 -0
- package/dist/registries/apis.mjs.map +1 -0
- package/dist/registries/components.js +43 -0
- package/dist/registries/components.js.map +1 -0
- package/dist/registries/components.mjs +41 -0
- package/dist/registries/components.mjs.map +1 -0
- package/dist/registries/content-types.js +65 -0
- package/dist/registries/content-types.js.map +1 -0
- package/dist/registries/content-types.mjs +63 -0
- package/dist/registries/content-types.mjs.map +1 -0
- package/dist/registries/controllers.js +79 -0
- package/dist/registries/controllers.js.map +1 -0
- package/dist/registries/controllers.mjs +77 -0
- package/dist/registries/controllers.mjs.map +1 -0
- package/dist/registries/custom-fields.js +81 -0
- package/dist/registries/custom-fields.js.map +1 -0
- package/dist/registries/custom-fields.mjs +79 -0
- package/dist/registries/custom-fields.mjs.map +1 -0
- package/dist/registries/hooks.js +55 -0
- package/dist/registries/hooks.js.map +1 -0
- package/dist/registries/hooks.mjs +53 -0
- package/dist/registries/hooks.mjs.map +1 -0
- package/dist/registries/middlewares.js +58 -0
- package/dist/registries/middlewares.js.map +1 -0
- package/dist/registries/middlewares.mjs +56 -0
- package/dist/registries/middlewares.mjs.map +1 -0
- package/dist/registries/models.js +17 -0
- package/dist/registries/models.js.map +1 -0
- package/dist/registries/models.mjs +15 -0
- package/dist/registries/models.mjs.map +1 -0
- package/dist/registries/modules.js +42 -0
- package/dist/registries/modules.js.map +1 -0
- package/dist/registries/modules.mjs +40 -0
- package/dist/registries/modules.mjs.map +1 -0
- package/dist/registries/namespace.js +28 -0
- package/dist/registries/namespace.js.map +1 -0
- package/dist/registries/namespace.mjs +24 -0
- package/dist/registries/namespace.mjs.map +1 -0
- package/dist/registries/plugins.js +26 -0
- package/dist/registries/plugins.js.map +1 -0
- package/dist/registries/plugins.mjs +24 -0
- package/dist/registries/plugins.mjs.map +1 -0
- package/dist/registries/policies.js +115 -0
- package/dist/registries/policies.js.map +1 -0
- package/dist/registries/policies.mjs +113 -0
- package/dist/registries/policies.mjs.map +1 -0
- package/dist/registries/sanitizers.js +26 -0
- package/dist/registries/sanitizers.js.map +1 -0
- package/dist/registries/sanitizers.mjs +24 -0
- package/dist/registries/sanitizers.mjs.map +1 -0
- package/dist/registries/services.js +80 -0
- package/dist/registries/services.js.map +1 -0
- package/dist/registries/services.mjs +78 -0
- package/dist/registries/services.mjs.map +1 -0
- package/dist/registries/validators.js +26 -0
- package/dist/registries/validators.js.map +1 -0
- package/dist/registries/validators.mjs +24 -0
- package/dist/registries/validators.mjs.map +1 -0
- package/dist/services/auth/index.js +81 -0
- package/dist/services/auth/index.js.map +1 -0
- package/dist/services/auth/index.mjs +79 -0
- package/dist/services/auth/index.mjs.map +1 -0
- package/dist/services/config.js +51 -0
- package/dist/services/config.js.map +1 -0
- package/dist/services/config.mjs +49 -0
- package/dist/services/config.mjs.map +1 -0
- package/dist/services/content-api/index.js +86 -0
- package/dist/services/content-api/index.js.map +1 -0
- package/dist/services/content-api/index.mjs +84 -0
- package/dist/services/content-api/index.mjs.map +1 -0
- package/dist/services/content-api/permissions/engine.js +10 -0
- package/dist/services/content-api/permissions/engine.js.map +1 -0
- package/dist/services/content-api/permissions/engine.mjs +8 -0
- package/dist/services/content-api/permissions/engine.mjs.map +1 -0
- package/dist/services/content-api/permissions/index.js +107 -0
- package/dist/services/content-api/permissions/index.js.map +1 -0
- package/dist/services/content-api/permissions/index.mjs +105 -0
- package/dist/services/content-api/permissions/index.mjs.map +1 -0
- package/dist/services/content-api/permissions/providers/action.js +19 -0
- package/dist/services/content-api/permissions/providers/action.js.map +1 -0
- package/dist/services/content-api/permissions/providers/action.mjs +17 -0
- package/dist/services/content-api/permissions/providers/action.mjs.map +1 -0
- package/dist/services/content-api/permissions/providers/condition.js +19 -0
- package/dist/services/content-api/permissions/providers/condition.js.map +1 -0
- package/dist/services/content-api/permissions/providers/condition.mjs +17 -0
- package/dist/services/content-api/permissions/providers/condition.mjs.map +1 -0
- package/dist/services/core-store.js +127 -0
- package/dist/services/core-store.js.map +1 -0
- package/dist/services/core-store.mjs +124 -0
- package/dist/services/core-store.mjs.map +1 -0
- package/dist/services/cron.js +77 -0
- package/dist/services/cron.js.map +1 -0
- package/dist/services/cron.mjs +75 -0
- package/dist/services/cron.mjs.map +1 -0
- package/dist/services/custom-fields.js +12 -0
- package/dist/services/custom-fields.js.map +1 -0
- package/dist/services/custom-fields.mjs +10 -0
- package/dist/services/custom-fields.mjs.map +1 -0
- package/dist/services/document-service/attributes/index.js +27 -0
- package/dist/services/document-service/attributes/index.js.map +1 -0
- package/dist/services/document-service/attributes/index.mjs +25 -0
- package/dist/services/document-service/attributes/index.mjs.map +1 -0
- package/dist/services/document-service/attributes/transforms.js +21 -0
- package/dist/services/document-service/attributes/transforms.js.map +1 -0
- package/dist/services/document-service/attributes/transforms.mjs +19 -0
- package/dist/services/document-service/attributes/transforms.mjs.map +1 -0
- package/dist/services/document-service/common.js +8 -0
- package/dist/services/document-service/common.js.map +1 -0
- package/dist/services/document-service/common.mjs +6 -0
- package/dist/services/document-service/common.mjs.map +1 -0
- package/dist/services/document-service/components.js +286 -0
- package/dist/services/document-service/components.js.map +1 -0
- package/dist/services/document-service/components.mjs +278 -0
- package/dist/services/document-service/components.mjs.map +1 -0
- package/dist/services/document-service/draft-and-publish.js +109 -0
- package/dist/services/document-service/draft-and-publish.js.map +1 -0
- package/dist/services/document-service/draft-and-publish.mjs +102 -0
- package/dist/services/document-service/draft-and-publish.mjs.map +1 -0
- package/dist/services/document-service/entries.js +113 -0
- package/dist/services/document-service/entries.js.map +1 -0
- package/dist/services/document-service/entries.mjs +111 -0
- package/dist/services/document-service/entries.mjs.map +1 -0
- package/dist/services/document-service/events.js +59 -0
- package/dist/services/document-service/events.js.map +1 -0
- package/dist/services/document-service/events.mjs +57 -0
- package/dist/services/document-service/events.mjs.map +1 -0
- package/dist/services/document-service/index.js +56 -0
- package/dist/services/document-service/index.js.map +1 -0
- package/dist/services/document-service/index.mjs +54 -0
- package/dist/services/document-service/index.mjs.map +1 -0
- package/dist/services/document-service/internationalization.js +79 -0
- package/dist/services/document-service/internationalization.js.map +1 -0
- package/dist/services/document-service/internationalization.mjs +74 -0
- package/dist/services/document-service/internationalization.mjs.map +1 -0
- package/dist/services/document-service/middlewares/errors.js +29 -0
- package/dist/services/document-service/middlewares/errors.js.map +1 -0
- package/dist/services/document-service/middlewares/errors.mjs +27 -0
- package/dist/services/document-service/middlewares/errors.mjs.map +1 -0
- package/dist/services/document-service/middlewares/middleware-manager.js +51 -0
- package/dist/services/document-service/middlewares/middleware-manager.js.map +1 -0
- package/dist/services/document-service/middlewares/middleware-manager.mjs +49 -0
- package/dist/services/document-service/middlewares/middleware-manager.mjs.map +1 -0
- package/dist/services/document-service/params.js +14 -0
- package/dist/services/document-service/params.js.map +1 -0
- package/dist/services/document-service/params.mjs +12 -0
- package/dist/services/document-service/params.mjs.map +1 -0
- package/dist/services/document-service/repository.js +364 -0
- package/dist/services/document-service/repository.js.map +1 -0
- package/dist/services/document-service/repository.mjs +362 -0
- package/dist/services/document-service/repository.mjs.map +1 -0
- package/dist/services/document-service/transform/data.js +25 -0
- package/dist/services/document-service/transform/data.js.map +1 -0
- package/dist/services/document-service/transform/data.mjs +23 -0
- package/dist/services/document-service/transform/data.mjs.map +1 -0
- package/dist/services/document-service/transform/fields.js +33 -0
- package/dist/services/document-service/transform/fields.js.map +1 -0
- package/dist/services/document-service/transform/fields.mjs +31 -0
- package/dist/services/document-service/transform/fields.mjs.map +1 -0
- package/dist/services/document-service/transform/id-map.js +125 -0
- package/dist/services/document-service/transform/id-map.js.map +1 -0
- package/dist/services/document-service/transform/id-map.mjs +123 -0
- package/dist/services/document-service/transform/id-map.mjs.map +1 -0
- package/dist/services/document-service/transform/id-transform.js +41 -0
- package/dist/services/document-service/transform/id-transform.js.map +1 -0
- package/dist/services/document-service/transform/id-transform.mjs +39 -0
- package/dist/services/document-service/transform/id-transform.mjs.map +1 -0
- package/dist/services/document-service/transform/populate.js +26 -0
- package/dist/services/document-service/transform/populate.js.map +1 -0
- package/dist/services/document-service/transform/populate.mjs +24 -0
- package/dist/services/document-service/transform/populate.mjs.map +1 -0
- package/dist/services/document-service/transform/query.js +14 -0
- package/dist/services/document-service/transform/query.js.map +1 -0
- package/dist/services/document-service/transform/query.mjs +12 -0
- package/dist/services/document-service/transform/query.mjs.map +1 -0
- package/dist/services/document-service/transform/relations/extract/data-ids.js +80 -0
- package/dist/services/document-service/transform/relations/extract/data-ids.js.map +1 -0
- package/dist/services/document-service/transform/relations/extract/data-ids.mjs +78 -0
- package/dist/services/document-service/transform/relations/extract/data-ids.mjs.map +1 -0
- package/dist/services/document-service/transform/relations/transform/data-ids.js +110 -0
- package/dist/services/document-service/transform/relations/transform/data-ids.js.map +1 -0
- package/dist/services/document-service/transform/relations/transform/data-ids.mjs +108 -0
- package/dist/services/document-service/transform/relations/transform/data-ids.mjs.map +1 -0
- package/dist/services/document-service/transform/relations/transform/default-locale.js +50 -0
- package/dist/services/document-service/transform/relations/transform/default-locale.js.map +1 -0
- package/dist/services/document-service/transform/relations/transform/default-locale.mjs +48 -0
- package/dist/services/document-service/transform/relations/transform/default-locale.mjs.map +1 -0
- package/dist/services/document-service/transform/relations/utils/dp.js +56 -0
- package/dist/services/document-service/transform/relations/utils/dp.js.map +1 -0
- package/dist/services/document-service/transform/relations/utils/dp.mjs +54 -0
- package/dist/services/document-service/transform/relations/utils/dp.mjs.map +1 -0
- package/dist/services/document-service/transform/relations/utils/i18n.js +27 -0
- package/dist/services/document-service/transform/relations/utils/i18n.js.map +1 -0
- package/dist/services/document-service/transform/relations/utils/i18n.mjs +23 -0
- package/dist/services/document-service/transform/relations/utils/i18n.mjs.map +1 -0
- package/dist/services/document-service/transform/relations/utils/map-relation.js +130 -0
- package/dist/services/document-service/transform/relations/utils/map-relation.js.map +1 -0
- package/dist/services/document-service/transform/relations/utils/map-relation.mjs +127 -0
- package/dist/services/document-service/transform/relations/utils/map-relation.mjs.map +1 -0
- package/dist/services/document-service/utils/bidirectional-relations.js +148 -0
- package/dist/services/document-service/utils/bidirectional-relations.js.map +1 -0
- package/dist/services/document-service/utils/bidirectional-relations.mjs +145 -0
- package/dist/services/document-service/utils/bidirectional-relations.mjs.map +1 -0
- package/dist/services/document-service/utils/populate.js +71 -0
- package/dist/services/document-service/utils/populate.js.map +1 -0
- package/dist/services/document-service/utils/populate.mjs +69 -0
- package/dist/services/document-service/utils/populate.mjs.map +1 -0
- package/dist/services/document-service/utils/unidirectional-relations.js +116 -0
- package/dist/services/document-service/utils/unidirectional-relations.js.map +1 -0
- package/dist/services/document-service/utils/unidirectional-relations.mjs +113 -0
- package/dist/services/document-service/utils/unidirectional-relations.mjs.map +1 -0
- package/dist/services/entity-service/index.js +238 -0
- package/dist/services/entity-service/index.js.map +1 -0
- package/dist/services/entity-service/index.mjs +236 -0
- package/dist/services/entity-service/index.mjs.map +1 -0
- package/dist/services/entity-validator/blocks-validator.js +160 -0
- package/dist/services/entity-validator/blocks-validator.js.map +1 -0
- package/dist/services/entity-validator/blocks-validator.mjs +158 -0
- package/dist/services/entity-validator/blocks-validator.mjs.map +1 -0
- package/dist/services/entity-validator/index.js +384 -0
- package/dist/services/entity-validator/index.js.map +1 -0
- package/dist/services/entity-validator/index.mjs +382 -0
- package/dist/services/entity-validator/index.mjs.map +1 -0
- package/dist/services/entity-validator/validators.js +299 -0
- package/dist/services/entity-validator/validators.js.map +1 -0
- package/dist/services/entity-validator/validators.mjs +290 -0
- package/dist/services/entity-validator/validators.mjs.map +1 -0
- package/dist/services/errors.js +76 -0
- package/dist/services/errors.js.map +1 -0
- package/dist/services/errors.mjs +72 -0
- package/dist/services/errors.mjs.map +1 -0
- package/dist/services/event-hub.js +85 -0
- package/dist/services/event-hub.js.map +1 -0
- package/dist/services/event-hub.mjs +83 -0
- package/dist/services/event-hub.mjs.map +1 -0
- package/dist/services/features.js +22 -0
- package/dist/services/features.js.map +1 -0
- package/dist/services/features.mjs +20 -0
- package/dist/services/features.mjs.map +1 -0
- package/dist/services/fs.js +52 -0
- package/dist/services/fs.js.map +1 -0
- package/dist/services/fs.mjs +50 -0
- package/dist/services/fs.mjs.map +1 -0
- package/dist/services/metrics/admin-user-hash.js +16 -0
- package/dist/services/metrics/admin-user-hash.js.map +1 -0
- package/dist/services/metrics/admin-user-hash.mjs +14 -0
- package/dist/services/metrics/admin-user-hash.mjs.map +1 -0
- package/dist/services/metrics/index.js +51 -0
- package/dist/services/metrics/index.js.map +1 -0
- package/dist/services/metrics/index.mjs +49 -0
- package/dist/services/metrics/index.mjs.map +1 -0
- package/dist/services/metrics/is-truthy.js +16 -0
- package/dist/services/metrics/is-truthy.js.map +1 -0
- package/dist/services/metrics/is-truthy.mjs +14 -0
- package/dist/services/metrics/is-truthy.mjs.map +1 -0
- package/dist/services/metrics/middleware.js +40 -0
- package/dist/services/metrics/middleware.js.map +1 -0
- package/dist/services/metrics/middleware.mjs +38 -0
- package/dist/services/metrics/middleware.mjs.map +1 -0
- package/dist/services/metrics/rate-limiter.js +26 -0
- package/dist/services/metrics/rate-limiter.js.map +1 -0
- package/dist/services/metrics/rate-limiter.mjs +24 -0
- package/dist/services/metrics/rate-limiter.mjs.map +1 -0
- package/dist/services/metrics/sender.js +85 -0
- package/dist/services/metrics/sender.js.map +1 -0
- package/dist/services/metrics/sender.mjs +83 -0
- package/dist/services/metrics/sender.mjs.map +1 -0
- package/dist/services/query-params.js +15 -0
- package/dist/services/query-params.js.map +1 -0
- package/dist/services/query-params.mjs +13 -0
- package/dist/services/query-params.mjs.map +1 -0
- package/dist/services/reloader.js +39 -0
- package/dist/services/reloader.js.map +1 -0
- package/dist/services/reloader.mjs +37 -0
- package/dist/services/reloader.mjs.map +1 -0
- package/dist/services/request-context.js +16 -0
- package/dist/services/request-context.js.map +1 -0
- package/dist/services/request-context.mjs +14 -0
- package/dist/services/request-context.mjs.map +1 -0
- package/dist/services/server/admin-api.js +14 -0
- package/dist/services/server/admin-api.js.map +1 -0
- package/dist/services/server/admin-api.mjs +12 -0
- package/dist/services/server/admin-api.mjs.map +1 -0
- package/dist/services/server/api.js +36 -0
- package/dist/services/server/api.js.map +1 -0
- package/dist/services/server/api.mjs +34 -0
- package/dist/services/server/api.mjs.map +1 -0
- package/dist/services/server/compose-endpoint.js +128 -0
- package/dist/services/server/compose-endpoint.js.map +1 -0
- package/dist/services/server/compose-endpoint.mjs +126 -0
- package/dist/services/server/compose-endpoint.mjs.map +1 -0
- package/dist/services/server/content-api.js +14 -0
- package/dist/services/server/content-api.js.map +1 -0
- package/dist/services/server/content-api.mjs +12 -0
- package/dist/services/server/content-api.mjs.map +1 -0
- package/dist/services/server/http-server.js +54 -0
- package/dist/services/server/http-server.js.map +1 -0
- package/dist/services/server/http-server.mjs +52 -0
- package/dist/services/server/http-server.mjs.map +1 -0
- package/dist/services/server/index.js +90 -0
- package/dist/services/server/index.js.map +1 -0
- package/dist/services/server/index.mjs +88 -0
- package/dist/services/server/index.mjs.map +1 -0
- package/dist/services/server/koa.js +54 -0
- package/dist/services/server/koa.js.map +1 -0
- package/dist/services/server/koa.mjs +52 -0
- package/dist/services/server/koa.mjs.map +1 -0
- package/dist/services/server/middleware.js +96 -0
- package/dist/services/server/middleware.js.map +1 -0
- package/dist/services/server/middleware.mjs +93 -0
- package/dist/services/server/middleware.mjs.map +1 -0
- package/dist/services/server/policy.js +27 -0
- package/dist/services/server/policy.js.map +1 -0
- package/dist/services/server/policy.mjs +25 -0
- package/dist/services/server/policy.mjs.map +1 -0
- package/dist/services/server/register-middlewares.js +79 -0
- package/dist/services/server/register-middlewares.js.map +1 -0
- package/dist/services/server/register-middlewares.mjs +77 -0
- package/dist/services/server/register-middlewares.mjs.map +1 -0
- package/dist/services/server/register-routes.js +99 -0
- package/dist/services/server/register-routes.js.map +1 -0
- package/dist/services/server/register-routes.mjs +97 -0
- package/dist/services/server/register-routes.mjs.map +1 -0
- package/dist/services/server/routing.js +104 -0
- package/dist/services/server/routing.js.map +1 -0
- package/dist/services/server/routing.mjs +101 -0
- package/dist/services/server/routing.mjs.map +1 -0
- package/dist/services/utils/dynamic-zones.js +16 -0
- package/dist/services/utils/dynamic-zones.js.map +1 -0
- package/dist/services/utils/dynamic-zones.mjs +14 -0
- package/dist/services/utils/dynamic-zones.mjs.map +1 -0
- package/dist/services/webhook-runner.js +135 -0
- package/dist/services/webhook-runner.js.map +1 -0
- package/dist/services/webhook-runner.mjs +133 -0
- package/dist/services/webhook-runner.mjs.map +1 -0
- package/dist/services/webhook-store.js +143 -0
- package/dist/services/webhook-store.js.map +1 -0
- package/dist/services/webhook-store.mjs +140 -0
- package/dist/services/webhook-store.mjs.map +1 -0
- package/dist/services/worker-queue.js +51 -0
- package/dist/services/worker-queue.js.map +1 -0
- package/dist/services/worker-queue.mjs +49 -0
- package/dist/services/worker-queue.mjs.map +1 -0
- package/dist/utils/convert-custom-field-type.js +21 -0
- package/dist/utils/convert-custom-field-type.js.map +1 -0
- package/dist/utils/convert-custom-field-type.mjs +19 -0
- package/dist/utils/convert-custom-field-type.mjs.map +1 -0
- package/dist/utils/cron.js +72 -0
- package/dist/utils/cron.js.map +1 -0
- package/dist/utils/cron.mjs +70 -0
- package/dist/utils/cron.mjs.map +1 -0
- package/dist/utils/fetch.js +27 -0
- package/dist/utils/fetch.js.map +1 -0
- package/dist/utils/fetch.mjs +25 -0
- package/dist/utils/fetch.mjs.map +1 -0
- package/dist/utils/filepath-to-prop-path.js +25 -0
- package/dist/utils/filepath-to-prop-path.js.map +1 -0
- package/dist/utils/filepath-to-prop-path.mjs +23 -0
- package/dist/utils/filepath-to-prop-path.mjs.map +1 -0
- package/dist/utils/is-initialized.js +25 -0
- package/dist/utils/is-initialized.js.map +1 -0
- package/dist/utils/is-initialized.mjs +23 -0
- package/dist/utils/is-initialized.mjs.map +1 -0
- package/dist/utils/lifecycles.js +10 -0
- package/dist/utils/lifecycles.js.map +1 -0
- package/dist/utils/lifecycles.mjs +8 -0
- package/dist/utils/lifecycles.mjs.map +1 -0
- package/dist/utils/load-config-file.js +47 -0
- package/dist/utils/load-config-file.js.map +1 -0
- package/dist/utils/load-config-file.mjs +45 -0
- package/dist/utils/load-config-file.mjs.map +1 -0
- package/dist/utils/load-files.js +44 -0
- package/dist/utils/load-files.js.map +1 -0
- package/dist/utils/load-files.mjs +42 -0
- package/dist/utils/load-files.mjs.map +1 -0
- package/dist/utils/open-browser.js +11 -0
- package/dist/utils/open-browser.js.map +1 -0
- package/dist/utils/open-browser.mjs +9 -0
- package/dist/utils/open-browser.mjs.map +1 -0
- package/dist/utils/resolve-working-dirs.js +26 -0
- package/dist/utils/resolve-working-dirs.js.map +1 -0
- package/dist/utils/resolve-working-dirs.mjs +24 -0
- package/dist/utils/resolve-working-dirs.mjs.map +1 -0
- package/dist/utils/signals.js +23 -0
- package/dist/utils/signals.js.map +1 -0
- package/dist/utils/signals.mjs +21 -0
- package/dist/utils/signals.mjs.map +1 -0
- package/dist/utils/startup-logger.js +110 -0
- package/dist/utils/startup-logger.js.map +1 -0
- package/dist/utils/startup-logger.mjs +108 -0
- package/dist/utils/startup-logger.mjs.map +1 -0
- package/dist/utils/transform-content-types-to-models.js +377 -0
- package/dist/utils/transform-content-types-to-models.js.map +1 -0
- package/dist/utils/transform-content-types-to-models.mjs +365 -0
- package/dist/utils/transform-content-types-to-models.mjs.map +1 -0
- package/dist/utils/update-notifier/index.js +80 -0
- package/dist/utils/update-notifier/index.js.map +1 -0
- package/dist/utils/update-notifier/index.mjs +78 -0
- package/dist/utils/update-notifier/index.mjs.map +1 -0
- package/package.json +11 -11
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"query.js","sources":["../../src/middlewares/query.ts"],"sourcesContent":["import qs from 'qs';\nimport type Koa from 'koa';\nimport type { Core } from '@strapi/types';\n\ntype Config = Parameters<typeof qs.parse>[1];\n\nconst defaults: Config = {\n strictNullHandling: true,\n arrayLimit: 100,\n depth: 20,\n};\n\n/**\n * Body parser hook\n */\nconst addQsParser = (app: Koa, settings: Config) => {\n Object.defineProperty(app.request, 'query', {\n configurable: false,\n enumerable: true,\n /*\n * Get parsed query-string.\n */\n get() {\n const qstr = this.querystring;\n\n this._querycache = this._querycache || {};\n const cache = this._querycache;\n\n if (!cache[qstr]) {\n cache[qstr] = qs.parse(qstr, settings);\n }\n\n return cache[qstr];\n },\n\n /*\n * Set query-string as an object.\n */\n set(obj) {\n this.querystring = qs.stringify(obj);\n },\n } satisfies PropertyDescriptor & ThisType<Koa.BaseRequest>);\n\n return app;\n};\n\nexport const query: Core.MiddlewareFactory = (\n config: Partial<Config>,\n { strapi }: { strapi: Core.Strapi }\n) => {\n addQsParser(strapi.server.app, { ...defaults, ...config } as Config);\n};\n"],"names":["defaults","strictNullHandling","arrayLimit","depth","addQsParser","app","settings","Object","defineProperty","request","configurable","enumerable","get","qstr","querystring","_querycache","cache","qs","parse","set","obj","stringify","query","config","strapi","server"],"mappings":";;;;AAMA,MAAMA,QAAmB,GAAA;IACvBC,kBAAoB,EAAA,IAAA;IACpBC,UAAY,EAAA,GAAA;IACZC,KAAO,EAAA;AACT,CAAA;AAEA;;IAGA,MAAMC,WAAc,GAAA,CAACC,GAAUC,EAAAA,QAAAA,GAAAA;AAC7BC,IAAAA,MAAAA,CAAOC,cAAc,CAACH,GAAII,CAAAA,OAAO,EAAE,OAAS,EAAA;QAC1CC,YAAc,EAAA,KAAA;QACdC,UAAY,EAAA,IAAA;AACZ;;QAGAC,GAAAA,CAAAA,GAAAA;YACE,MAAMC,IAAAA,GAAO,IAAI,CAACC,WAAW;AAE7B,YAAA,IAAI,CAACC,WAAW,GAAG,IAAI,CAACA,WAAW,IAAI,EAAC;YACxC,MAAMC,KAAAA,GAAQ,IAAI,CAACD,WAAW;AAE9B,YAAA,IAAI,CAACC,KAAK,CAACH,IAAAA,CAAK,EAAE;AAChBG,gBAAAA,KAAK,CAACH,IAAK,CAAA,GAAGI,EAAGC,CAAAA,KAAK,CAACL,IAAMP,EAAAA,QAAAA,CAAAA;AAC/B;YAEA,OAAOU,KAAK,CAACH,IAAK,CAAA;AACpB,SAAA;AAEA;;AAEC,QACDM,KAAIC,GAAG,EAAA;AACL,YAAA,IAAI,CAACN,WAAW,GAAGG,EAAAA,CAAGI,SAAS,CAACD,GAAAA,CAAAA;AAClC;AACF,KAAA,CAAA;IAEA,OAAOf,GAAAA;AACT,CAAA;MAEaiB,KAAgC,GAAA,CAC3CC,MACA,EAAA,EAAEC,MAAM,EAA2B,GAAA;AAEnCpB,IAAAA,WAAAA,CAAYoB,MAAOC,CAAAA,MAAM,CAACpB,GAAG,EAAE;AAAE,QAAA,GAAGL,QAAQ;AAAE,QAAA,GAAGuB;AAAO,KAAA,CAAA;AAC1D;;;;"}
|
@@ -0,0 +1,41 @@
|
|
1
|
+
import qs from 'qs';
|
2
|
+
|
3
|
+
const defaults = {
|
4
|
+
strictNullHandling: true,
|
5
|
+
arrayLimit: 100,
|
6
|
+
depth: 20
|
7
|
+
};
|
8
|
+
/**
|
9
|
+
* Body parser hook
|
10
|
+
*/ const addQsParser = (app, settings)=>{
|
11
|
+
Object.defineProperty(app.request, 'query', {
|
12
|
+
configurable: false,
|
13
|
+
enumerable: true,
|
14
|
+
/*
|
15
|
+
* Get parsed query-string.
|
16
|
+
*/ get () {
|
17
|
+
const qstr = this.querystring;
|
18
|
+
this._querycache = this._querycache || {};
|
19
|
+
const cache = this._querycache;
|
20
|
+
if (!cache[qstr]) {
|
21
|
+
cache[qstr] = qs.parse(qstr, settings);
|
22
|
+
}
|
23
|
+
return cache[qstr];
|
24
|
+
},
|
25
|
+
/*
|
26
|
+
* Set query-string as an object.
|
27
|
+
*/ set (obj) {
|
28
|
+
this.querystring = qs.stringify(obj);
|
29
|
+
}
|
30
|
+
});
|
31
|
+
return app;
|
32
|
+
};
|
33
|
+
const query = (config, { strapi })=>{
|
34
|
+
addQsParser(strapi.server.app, {
|
35
|
+
...defaults,
|
36
|
+
...config
|
37
|
+
});
|
38
|
+
};
|
39
|
+
|
40
|
+
export { query };
|
41
|
+
//# sourceMappingURL=query.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"query.mjs","sources":["../../src/middlewares/query.ts"],"sourcesContent":["import qs from 'qs';\nimport type Koa from 'koa';\nimport type { Core } from '@strapi/types';\n\ntype Config = Parameters<typeof qs.parse>[1];\n\nconst defaults: Config = {\n strictNullHandling: true,\n arrayLimit: 100,\n depth: 20,\n};\n\n/**\n * Body parser hook\n */\nconst addQsParser = (app: Koa, settings: Config) => {\n Object.defineProperty(app.request, 'query', {\n configurable: false,\n enumerable: true,\n /*\n * Get parsed query-string.\n */\n get() {\n const qstr = this.querystring;\n\n this._querycache = this._querycache || {};\n const cache = this._querycache;\n\n if (!cache[qstr]) {\n cache[qstr] = qs.parse(qstr, settings);\n }\n\n return cache[qstr];\n },\n\n /*\n * Set query-string as an object.\n */\n set(obj) {\n this.querystring = qs.stringify(obj);\n },\n } satisfies PropertyDescriptor & ThisType<Koa.BaseRequest>);\n\n return app;\n};\n\nexport const query: Core.MiddlewareFactory = (\n config: Partial<Config>,\n { strapi }: { strapi: Core.Strapi }\n) => {\n addQsParser(strapi.server.app, { ...defaults, ...config } as Config);\n};\n"],"names":["defaults","strictNullHandling","arrayLimit","depth","addQsParser","app","settings","Object","defineProperty","request","configurable","enumerable","get","qstr","querystring","_querycache","cache","qs","parse","set","obj","stringify","query","config","strapi","server"],"mappings":";;AAMA,MAAMA,QAAmB,GAAA;IACvBC,kBAAoB,EAAA,IAAA;IACpBC,UAAY,EAAA,GAAA;IACZC,KAAO,EAAA;AACT,CAAA;AAEA;;IAGA,MAAMC,WAAc,GAAA,CAACC,GAAUC,EAAAA,QAAAA,GAAAA;AAC7BC,IAAAA,MAAAA,CAAOC,cAAc,CAACH,GAAII,CAAAA,OAAO,EAAE,OAAS,EAAA;QAC1CC,YAAc,EAAA,KAAA;QACdC,UAAY,EAAA,IAAA;AACZ;;QAGAC,GAAAA,CAAAA,GAAAA;YACE,MAAMC,IAAAA,GAAO,IAAI,CAACC,WAAW;AAE7B,YAAA,IAAI,CAACC,WAAW,GAAG,IAAI,CAACA,WAAW,IAAI,EAAC;YACxC,MAAMC,KAAAA,GAAQ,IAAI,CAACD,WAAW;AAE9B,YAAA,IAAI,CAACC,KAAK,CAACH,IAAAA,CAAK,EAAE;AAChBG,gBAAAA,KAAK,CAACH,IAAK,CAAA,GAAGI,EAAGC,CAAAA,KAAK,CAACL,IAAMP,EAAAA,QAAAA,CAAAA;AAC/B;YAEA,OAAOU,KAAK,CAACH,IAAK,CAAA;AACpB,SAAA;AAEA;;AAEC,QACDM,KAAIC,GAAG,EAAA;AACL,YAAA,IAAI,CAACN,WAAW,GAAGG,EAAAA,CAAGI,SAAS,CAACD,GAAAA,CAAAA;AAClC;AACF,KAAA,CAAA;IAEA,OAAOf,GAAAA;AACT,CAAA;MAEaiB,KAAgC,GAAA,CAC3CC,MACA,EAAA,EAAEC,MAAM,EAA2B,GAAA;AAEnCpB,IAAAA,WAAAA,CAAYoB,MAAOC,CAAAA,MAAM,CAACpB,GAAG,EAAE;AAAE,QAAA,GAAGL,QAAQ;AAAE,QAAA,GAAGuB;AAAO,KAAA,CAAA;AAC1D;;;;"}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const responseTime = ()=>{
|
4
|
+
return async (ctx, next)=>{
|
5
|
+
const start = Date.now();
|
6
|
+
await next();
|
7
|
+
const delta = Math.ceil(Date.now() - start);
|
8
|
+
ctx.set('X-Response-Time', `${delta}ms`);
|
9
|
+
};
|
10
|
+
};
|
11
|
+
|
12
|
+
exports.responseTime = responseTime;
|
13
|
+
//# sourceMappingURL=response-time.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"response-time.js","sources":["../../src/middlewares/response-time.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nexport const responseTime: Core.MiddlewareFactory = () => {\n return async (ctx, next) => {\n const start = Date.now();\n\n await next();\n\n const delta = Math.ceil(Date.now() - start);\n ctx.set('X-Response-Time', `${delta}ms`);\n };\n};\n"],"names":["responseTime","ctx","next","start","Date","now","delta","Math","ceil","set"],"mappings":";;MAEaA,YAAuC,GAAA,IAAA;AAClD,IAAA,OAAO,OAAOC,GAAKC,EAAAA,IAAAA,GAAAA;QACjB,MAAMC,KAAAA,GAAQC,KAAKC,GAAG,EAAA;QAEtB,MAAMH,IAAAA,EAAAA;AAEN,QAAA,MAAMI,QAAQC,IAAKC,CAAAA,IAAI,CAACJ,IAAAA,CAAKC,GAAG,EAAKF,GAAAA,KAAAA,CAAAA;AACrCF,QAAAA,GAAAA,CAAIQ,GAAG,CAAC,iBAAA,EAAmB,CAAC,EAAEH,KAAAA,CAAM,EAAE,CAAC,CAAA;AACzC,KAAA;AACF;;;;"}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
const responseTime = ()=>{
|
2
|
+
return async (ctx, next)=>{
|
3
|
+
const start = Date.now();
|
4
|
+
await next();
|
5
|
+
const delta = Math.ceil(Date.now() - start);
|
6
|
+
ctx.set('X-Response-Time', `${delta}ms`);
|
7
|
+
};
|
8
|
+
};
|
9
|
+
|
10
|
+
export { responseTime };
|
11
|
+
//# sourceMappingURL=response-time.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"response-time.mjs","sources":["../../src/middlewares/response-time.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nexport const responseTime: Core.MiddlewareFactory = () => {\n return async (ctx, next) => {\n const start = Date.now();\n\n await next();\n\n const delta = Math.ceil(Date.now() - start);\n ctx.set('X-Response-Time', `${delta}ms`);\n };\n};\n"],"names":["responseTime","ctx","next","start","Date","now","delta","Math","ceil","set"],"mappings":"MAEaA,YAAuC,GAAA,IAAA;AAClD,IAAA,OAAO,OAAOC,GAAKC,EAAAA,IAAAA,GAAAA;QACjB,MAAMC,KAAAA,GAAQC,KAAKC,GAAG,EAAA;QAEtB,MAAMH,IAAAA,EAAAA;AAEN,QAAA,MAAMI,QAAQC,IAAKC,CAAAA,IAAI,CAACJ,IAAAA,CAAKC,GAAG,EAAKF,GAAAA,KAAAA,CAAAA;AACrCF,QAAAA,GAAAA,CAAIQ,GAAG,CAAC,iBAAA,EAAmB,CAAC,EAAEH,KAAAA,CAAM,EAAE,CAAC,CAAA;AACzC,KAAA;AACF;;;;"}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
var fp = require('lodash/fp');
|
4
|
+
|
5
|
+
const responses = (config = {})=>{
|
6
|
+
return async (ctx, next)=>{
|
7
|
+
await next();
|
8
|
+
const { status } = ctx;
|
9
|
+
const handler = config?.handlers?.[status];
|
10
|
+
if (fp.isFunction(handler)) {
|
11
|
+
await handler(ctx, next);
|
12
|
+
}
|
13
|
+
};
|
14
|
+
};
|
15
|
+
|
16
|
+
exports.responses = responses;
|
17
|
+
//# sourceMappingURL=responses.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"responses.js","sources":["../../src/middlewares/responses.ts"],"sourcesContent":["import { isFunction } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\nexport interface Config {\n handlers?: Record<number, Core.MiddlewareHandler>;\n}\n\nexport const responses: Core.MiddlewareFactory<Config> = (config = {}) => {\n return async (ctx, next) => {\n await next();\n\n const { status } = ctx;\n const handler = config?.handlers?.[status];\n\n if (isFunction(handler)) {\n await handler(ctx, next);\n }\n };\n};\n"],"names":["responses","config","ctx","next","status","handler","handlers","isFunction"],"mappings":";;;;AAOaA,MAAAA,SAAAA,GAA4C,CAACC,MAAAA,GAAS,EAAE,GAAA;AACnE,IAAA,OAAO,OAAOC,GAAKC,EAAAA,IAAAA,GAAAA;QACjB,MAAMA,IAAAA,EAAAA;QAEN,MAAM,EAAEC,MAAM,EAAE,GAAGF,GAAAA;AACnB,QAAA,MAAMG,OAAUJ,GAAAA,MAAAA,EAAQK,QAAU,GAACF,MAAO,CAAA;AAE1C,QAAA,IAAIG,cAAWF,OAAU,CAAA,EAAA;AACvB,YAAA,MAAMA,QAAQH,GAAKC,EAAAA,IAAAA,CAAAA;AACrB;AACF,KAAA;AACF;;;;"}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import { isFunction } from 'lodash/fp';
|
2
|
+
|
3
|
+
const responses = (config = {})=>{
|
4
|
+
return async (ctx, next)=>{
|
5
|
+
await next();
|
6
|
+
const { status } = ctx;
|
7
|
+
const handler = config?.handlers?.[status];
|
8
|
+
if (isFunction(handler)) {
|
9
|
+
await handler(ctx, next);
|
10
|
+
}
|
11
|
+
};
|
12
|
+
};
|
13
|
+
|
14
|
+
export { responses };
|
15
|
+
//# sourceMappingURL=responses.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"responses.mjs","sources":["../../src/middlewares/responses.ts"],"sourcesContent":["import { isFunction } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\nexport interface Config {\n handlers?: Record<number, Core.MiddlewareHandler>;\n}\n\nexport const responses: Core.MiddlewareFactory<Config> = (config = {}) => {\n return async (ctx, next) => {\n await next();\n\n const { status } = ctx;\n const handler = config?.handlers?.[status];\n\n if (isFunction(handler)) {\n await handler(ctx, next);\n }\n };\n};\n"],"names":["responses","config","ctx","next","status","handler","handlers","isFunction"],"mappings":";;AAOaA,MAAAA,SAAAA,GAA4C,CAACC,MAAAA,GAAS,EAAE,GAAA;AACnE,IAAA,OAAO,OAAOC,GAAKC,EAAAA,IAAAA,GAAAA;QACjB,MAAMA,IAAAA,EAAAA;QAEN,MAAM,EAAEC,MAAM,EAAE,GAAGF,GAAAA;AACnB,QAAA,MAAMG,OAAUJ,GAAAA,MAAAA,EAAQK,QAAU,GAACF,MAAO,CAAA;AAE1C,QAAA,IAAIG,WAAWF,OAAU,CAAA,EAAA;AACvB,YAAA,MAAMA,QAAQH,GAAKC,EAAAA,IAAAA,CAAAA;AACrB;AACF,KAAA;AACF;;;;"}
|
@@ -0,0 +1,116 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
var fp = require('lodash/fp');
|
4
|
+
var helmet = require('koa-helmet');
|
5
|
+
|
6
|
+
const defaults = {
|
7
|
+
crossOriginEmbedderPolicy: false,
|
8
|
+
crossOriginOpenerPolicy: false,
|
9
|
+
crossOriginResourcePolicy: false,
|
10
|
+
originAgentCluster: false,
|
11
|
+
contentSecurityPolicy: {
|
12
|
+
useDefaults: true,
|
13
|
+
directives: {
|
14
|
+
'connect-src': [
|
15
|
+
"'self'",
|
16
|
+
'https:'
|
17
|
+
],
|
18
|
+
'img-src': [
|
19
|
+
"'self'",
|
20
|
+
'data:',
|
21
|
+
'blob:',
|
22
|
+
'https://market-assets.strapi.io'
|
23
|
+
],
|
24
|
+
'media-src': [
|
25
|
+
"'self'",
|
26
|
+
'data:',
|
27
|
+
'blob:'
|
28
|
+
],
|
29
|
+
upgradeInsecureRequests: null
|
30
|
+
}
|
31
|
+
},
|
32
|
+
xssFilter: false,
|
33
|
+
hsts: {
|
34
|
+
maxAge: 31536000,
|
35
|
+
includeSubDomains: true
|
36
|
+
},
|
37
|
+
frameguard: {
|
38
|
+
action: 'sameorigin'
|
39
|
+
}
|
40
|
+
};
|
41
|
+
const mergeConfig = (existingConfig, newConfig)=>{
|
42
|
+
return fp.mergeWith((obj, src)=>Array.isArray(obj) && Array.isArray(src) ? obj.concat(src) : undefined, existingConfig, newConfig);
|
43
|
+
};
|
44
|
+
const security = (config, { strapi })=>(ctx, next)=>{
|
45
|
+
let helmetConfig = fp.defaultsDeep(defaults, config);
|
46
|
+
const specialPaths = [
|
47
|
+
'/documentation'
|
48
|
+
];
|
49
|
+
const directives = {
|
50
|
+
'script-src': [
|
51
|
+
"'self'",
|
52
|
+
"'unsafe-inline'",
|
53
|
+
'cdn.jsdelivr.net'
|
54
|
+
],
|
55
|
+
'img-src': [
|
56
|
+
"'self'",
|
57
|
+
'data:',
|
58
|
+
'cdn.jsdelivr.net',
|
59
|
+
'strapi.io'
|
60
|
+
],
|
61
|
+
'manifest-src': [],
|
62
|
+
'frame-src': []
|
63
|
+
};
|
64
|
+
// if apollo graphql playground is enabled, add exceptions for it
|
65
|
+
if (strapi.plugin('graphql')?.service('utils').playground.isEnabled()) {
|
66
|
+
const { config: gqlConfig } = strapi.plugin('graphql');
|
67
|
+
specialPaths.push(gqlConfig('endpoint'));
|
68
|
+
directives['script-src'].push(`https: 'unsafe-inline'`);
|
69
|
+
directives['img-src'].push(`'apollo-server-landing-page.cdn.apollographql.com'`);
|
70
|
+
directives['manifest-src'].push(`'self'`);
|
71
|
+
directives['manifest-src'].push('apollo-server-landing-page.cdn.apollographql.com');
|
72
|
+
directives['frame-src'].push(`'self'`);
|
73
|
+
directives['frame-src'].push('sandbox.embed.apollographql.com');
|
74
|
+
}
|
75
|
+
// TODO: we shouldn't combine playground exceptions with documentation for all routes, we should first check the path and then return exceptions specific to that
|
76
|
+
if (ctx.method === 'GET' && specialPaths.some((str)=>ctx.path.startsWith(str))) {
|
77
|
+
helmetConfig = mergeConfig(helmetConfig, {
|
78
|
+
crossOriginEmbedderPolicy: false,
|
79
|
+
contentSecurityPolicy: {
|
80
|
+
directives
|
81
|
+
}
|
82
|
+
});
|
83
|
+
}
|
84
|
+
/**
|
85
|
+
* These are for vite's watch mode so it can accurately
|
86
|
+
* connect to the HMR websocket & reconnect on failure
|
87
|
+
* or when the server restarts.
|
88
|
+
*
|
89
|
+
* It only applies in development, and only on GET requests
|
90
|
+
* that are part of the admin route.
|
91
|
+
*/ if ([
|
92
|
+
'development',
|
93
|
+
'test'
|
94
|
+
].includes(process.env.NODE_ENV ?? '') && ctx.method === 'GET' && ctx.path.startsWith(strapi.config.get('admin.path'))) {
|
95
|
+
helmetConfig = mergeConfig(helmetConfig, {
|
96
|
+
contentSecurityPolicy: {
|
97
|
+
directives: {
|
98
|
+
'script-src': [
|
99
|
+
"'self'",
|
100
|
+
"'unsafe-inline'"
|
101
|
+
],
|
102
|
+
'connect-src': [
|
103
|
+
"'self'",
|
104
|
+
'http:',
|
105
|
+
'https:',
|
106
|
+
'ws:'
|
107
|
+
]
|
108
|
+
}
|
109
|
+
}
|
110
|
+
});
|
111
|
+
}
|
112
|
+
return helmet(helmetConfig)(ctx, next);
|
113
|
+
};
|
114
|
+
|
115
|
+
exports.security = security;
|
116
|
+
//# sourceMappingURL=security.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"security.js","sources":["../../src/middlewares/security.ts"],"sourcesContent":["import { defaultsDeep, mergeWith } from 'lodash/fp';\nimport helmet, { KoaHelmet } from 'koa-helmet';\n\nimport type { Core } from '@strapi/types';\n\nexport type Config = NonNullable<Parameters<KoaHelmet>[0]>;\n\nconst defaults: Config = {\n crossOriginEmbedderPolicy: false,\n crossOriginOpenerPolicy: false,\n crossOriginResourcePolicy: false,\n originAgentCluster: false,\n contentSecurityPolicy: {\n useDefaults: true,\n directives: {\n 'connect-src': [\"'self'\", 'https:'],\n 'img-src': [\"'self'\", 'data:', 'blob:', 'https://market-assets.strapi.io'],\n 'media-src': [\"'self'\", 'data:', 'blob:'],\n upgradeInsecureRequests: null,\n },\n },\n xssFilter: false,\n hsts: {\n maxAge: 31536000,\n includeSubDomains: true,\n },\n frameguard: {\n action: 'sameorigin',\n },\n};\n\nconst mergeConfig = (existingConfig: Config, newConfig: Config) => {\n return mergeWith(\n (obj, src) => (Array.isArray(obj) && Array.isArray(src) ? obj.concat(src) : undefined),\n existingConfig,\n newConfig\n );\n};\n\nexport const security: Core.MiddlewareFactory<Config> =\n (config, { strapi }) =>\n (ctx, next) => {\n let helmetConfig: Config = defaultsDeep(defaults, config);\n\n const specialPaths = ['/documentation'];\n\n const directives: {\n 'script-src': string[];\n 'img-src': string[];\n 'manifest-src': string[];\n 'frame-src': string[];\n } = {\n 'script-src': [\"'self'\", \"'unsafe-inline'\", 'cdn.jsdelivr.net'],\n 'img-src': [\"'self'\", 'data:', 'cdn.jsdelivr.net', 'strapi.io'],\n 'manifest-src': [],\n 'frame-src': [],\n };\n\n // if apollo graphql playground is enabled, add exceptions for it\n if (strapi.plugin('graphql')?.service('utils').playground.isEnabled()) {\n const { config: gqlConfig } = strapi.plugin('graphql');\n specialPaths.push(gqlConfig('endpoint'));\n\n directives['script-src'].push(`https: 'unsafe-inline'`);\n directives['img-src'].push(`'apollo-server-landing-page.cdn.apollographql.com'`);\n directives['manifest-src'].push(`'self'`);\n directives['manifest-src'].push('apollo-server-landing-page.cdn.apollographql.com');\n directives['frame-src'].push(`'self'`);\n directives['frame-src'].push('sandbox.embed.apollographql.com');\n }\n\n // TODO: we shouldn't combine playground exceptions with documentation for all routes, we should first check the path and then return exceptions specific to that\n if (ctx.method === 'GET' && specialPaths.some((str) => ctx.path.startsWith(str))) {\n helmetConfig = mergeConfig(helmetConfig, {\n crossOriginEmbedderPolicy: false, // TODO: only use this for graphql playground\n contentSecurityPolicy: {\n directives,\n },\n });\n }\n\n /**\n * These are for vite's watch mode so it can accurately\n * connect to the HMR websocket & reconnect on failure\n * or when the server restarts.\n *\n * It only applies in development, and only on GET requests\n * that are part of the admin route.\n */\n\n if (\n ['development', 'test'].includes(process.env.NODE_ENV ?? '') &&\n ctx.method === 'GET' &&\n ctx.path.startsWith(strapi.config.get('admin.path'))\n ) {\n helmetConfig = mergeConfig(helmetConfig, {\n contentSecurityPolicy: {\n directives: {\n 'script-src': [\"'self'\", \"'unsafe-inline'\"],\n 'connect-src': [\"'self'\", 'http:', 'https:', 'ws:'],\n },\n },\n });\n }\n\n return helmet(helmetConfig)(ctx, next);\n };\n"],"names":["defaults","crossOriginEmbedderPolicy","crossOriginOpenerPolicy","crossOriginResourcePolicy","originAgentCluster","contentSecurityPolicy","useDefaults","directives","upgradeInsecureRequests","xssFilter","hsts","maxAge","includeSubDomains","frameguard","action","mergeConfig","existingConfig","newConfig","mergeWith","obj","src","Array","isArray","concat","undefined","security","config","strapi","ctx","next","helmetConfig","defaultsDeep","specialPaths","plugin","service","playground","isEnabled","gqlConfig","push","method","some","str","path","startsWith","includes","process","env","NODE_ENV","get","helmet"],"mappings":"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"}
|
@@ -0,0 +1,114 @@
|
|
1
|
+
import { defaultsDeep, mergeWith } from 'lodash/fp';
|
2
|
+
import helmet from 'koa-helmet';
|
3
|
+
|
4
|
+
const defaults = {
|
5
|
+
crossOriginEmbedderPolicy: false,
|
6
|
+
crossOriginOpenerPolicy: false,
|
7
|
+
crossOriginResourcePolicy: false,
|
8
|
+
originAgentCluster: false,
|
9
|
+
contentSecurityPolicy: {
|
10
|
+
useDefaults: true,
|
11
|
+
directives: {
|
12
|
+
'connect-src': [
|
13
|
+
"'self'",
|
14
|
+
'https:'
|
15
|
+
],
|
16
|
+
'img-src': [
|
17
|
+
"'self'",
|
18
|
+
'data:',
|
19
|
+
'blob:',
|
20
|
+
'https://market-assets.strapi.io'
|
21
|
+
],
|
22
|
+
'media-src': [
|
23
|
+
"'self'",
|
24
|
+
'data:',
|
25
|
+
'blob:'
|
26
|
+
],
|
27
|
+
upgradeInsecureRequests: null
|
28
|
+
}
|
29
|
+
},
|
30
|
+
xssFilter: false,
|
31
|
+
hsts: {
|
32
|
+
maxAge: 31536000,
|
33
|
+
includeSubDomains: true
|
34
|
+
},
|
35
|
+
frameguard: {
|
36
|
+
action: 'sameorigin'
|
37
|
+
}
|
38
|
+
};
|
39
|
+
const mergeConfig = (existingConfig, newConfig)=>{
|
40
|
+
return mergeWith((obj, src)=>Array.isArray(obj) && Array.isArray(src) ? obj.concat(src) : undefined, existingConfig, newConfig);
|
41
|
+
};
|
42
|
+
const security = (config, { strapi })=>(ctx, next)=>{
|
43
|
+
let helmetConfig = defaultsDeep(defaults, config);
|
44
|
+
const specialPaths = [
|
45
|
+
'/documentation'
|
46
|
+
];
|
47
|
+
const directives = {
|
48
|
+
'script-src': [
|
49
|
+
"'self'",
|
50
|
+
"'unsafe-inline'",
|
51
|
+
'cdn.jsdelivr.net'
|
52
|
+
],
|
53
|
+
'img-src': [
|
54
|
+
"'self'",
|
55
|
+
'data:',
|
56
|
+
'cdn.jsdelivr.net',
|
57
|
+
'strapi.io'
|
58
|
+
],
|
59
|
+
'manifest-src': [],
|
60
|
+
'frame-src': []
|
61
|
+
};
|
62
|
+
// if apollo graphql playground is enabled, add exceptions for it
|
63
|
+
if (strapi.plugin('graphql')?.service('utils').playground.isEnabled()) {
|
64
|
+
const { config: gqlConfig } = strapi.plugin('graphql');
|
65
|
+
specialPaths.push(gqlConfig('endpoint'));
|
66
|
+
directives['script-src'].push(`https: 'unsafe-inline'`);
|
67
|
+
directives['img-src'].push(`'apollo-server-landing-page.cdn.apollographql.com'`);
|
68
|
+
directives['manifest-src'].push(`'self'`);
|
69
|
+
directives['manifest-src'].push('apollo-server-landing-page.cdn.apollographql.com');
|
70
|
+
directives['frame-src'].push(`'self'`);
|
71
|
+
directives['frame-src'].push('sandbox.embed.apollographql.com');
|
72
|
+
}
|
73
|
+
// TODO: we shouldn't combine playground exceptions with documentation for all routes, we should first check the path and then return exceptions specific to that
|
74
|
+
if (ctx.method === 'GET' && specialPaths.some((str)=>ctx.path.startsWith(str))) {
|
75
|
+
helmetConfig = mergeConfig(helmetConfig, {
|
76
|
+
crossOriginEmbedderPolicy: false,
|
77
|
+
contentSecurityPolicy: {
|
78
|
+
directives
|
79
|
+
}
|
80
|
+
});
|
81
|
+
}
|
82
|
+
/**
|
83
|
+
* These are for vite's watch mode so it can accurately
|
84
|
+
* connect to the HMR websocket & reconnect on failure
|
85
|
+
* or when the server restarts.
|
86
|
+
*
|
87
|
+
* It only applies in development, and only on GET requests
|
88
|
+
* that are part of the admin route.
|
89
|
+
*/ if ([
|
90
|
+
'development',
|
91
|
+
'test'
|
92
|
+
].includes(process.env.NODE_ENV ?? '') && ctx.method === 'GET' && ctx.path.startsWith(strapi.config.get('admin.path'))) {
|
93
|
+
helmetConfig = mergeConfig(helmetConfig, {
|
94
|
+
contentSecurityPolicy: {
|
95
|
+
directives: {
|
96
|
+
'script-src': [
|
97
|
+
"'self'",
|
98
|
+
"'unsafe-inline'"
|
99
|
+
],
|
100
|
+
'connect-src': [
|
101
|
+
"'self'",
|
102
|
+
'http:',
|
103
|
+
'https:',
|
104
|
+
'ws:'
|
105
|
+
]
|
106
|
+
}
|
107
|
+
}
|
108
|
+
});
|
109
|
+
}
|
110
|
+
return helmet(helmetConfig)(ctx, next);
|
111
|
+
};
|
112
|
+
|
113
|
+
export { security };
|
114
|
+
//# sourceMappingURL=security.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"security.mjs","sources":["../../src/middlewares/security.ts"],"sourcesContent":["import { defaultsDeep, mergeWith } from 'lodash/fp';\nimport helmet, { KoaHelmet } from 'koa-helmet';\n\nimport type { Core } from '@strapi/types';\n\nexport type Config = NonNullable<Parameters<KoaHelmet>[0]>;\n\nconst defaults: Config = {\n crossOriginEmbedderPolicy: false,\n crossOriginOpenerPolicy: false,\n crossOriginResourcePolicy: false,\n originAgentCluster: false,\n contentSecurityPolicy: {\n useDefaults: true,\n directives: {\n 'connect-src': [\"'self'\", 'https:'],\n 'img-src': [\"'self'\", 'data:', 'blob:', 'https://market-assets.strapi.io'],\n 'media-src': [\"'self'\", 'data:', 'blob:'],\n upgradeInsecureRequests: null,\n },\n },\n xssFilter: false,\n hsts: {\n maxAge: 31536000,\n includeSubDomains: true,\n },\n frameguard: {\n action: 'sameorigin',\n },\n};\n\nconst mergeConfig = (existingConfig: Config, newConfig: Config) => {\n return mergeWith(\n (obj, src) => (Array.isArray(obj) && Array.isArray(src) ? obj.concat(src) : undefined),\n existingConfig,\n newConfig\n );\n};\n\nexport const security: Core.MiddlewareFactory<Config> =\n (config, { strapi }) =>\n (ctx, next) => {\n let helmetConfig: Config = defaultsDeep(defaults, config);\n\n const specialPaths = ['/documentation'];\n\n const directives: {\n 'script-src': string[];\n 'img-src': string[];\n 'manifest-src': string[];\n 'frame-src': string[];\n } = {\n 'script-src': [\"'self'\", \"'unsafe-inline'\", 'cdn.jsdelivr.net'],\n 'img-src': [\"'self'\", 'data:', 'cdn.jsdelivr.net', 'strapi.io'],\n 'manifest-src': [],\n 'frame-src': [],\n };\n\n // if apollo graphql playground is enabled, add exceptions for it\n if (strapi.plugin('graphql')?.service('utils').playground.isEnabled()) {\n const { config: gqlConfig } = strapi.plugin('graphql');\n specialPaths.push(gqlConfig('endpoint'));\n\n directives['script-src'].push(`https: 'unsafe-inline'`);\n directives['img-src'].push(`'apollo-server-landing-page.cdn.apollographql.com'`);\n directives['manifest-src'].push(`'self'`);\n directives['manifest-src'].push('apollo-server-landing-page.cdn.apollographql.com');\n directives['frame-src'].push(`'self'`);\n directives['frame-src'].push('sandbox.embed.apollographql.com');\n }\n\n // TODO: we shouldn't combine playground exceptions with documentation for all routes, we should first check the path and then return exceptions specific to that\n if (ctx.method === 'GET' && specialPaths.some((str) => ctx.path.startsWith(str))) {\n helmetConfig = mergeConfig(helmetConfig, {\n crossOriginEmbedderPolicy: false, // TODO: only use this for graphql playground\n contentSecurityPolicy: {\n directives,\n },\n });\n }\n\n /**\n * These are for vite's watch mode so it can accurately\n * connect to the HMR websocket & reconnect on failure\n * or when the server restarts.\n *\n * It only applies in development, and only on GET requests\n * that are part of the admin route.\n */\n\n if (\n ['development', 'test'].includes(process.env.NODE_ENV ?? '') &&\n ctx.method === 'GET' &&\n ctx.path.startsWith(strapi.config.get('admin.path'))\n ) {\n helmetConfig = mergeConfig(helmetConfig, {\n contentSecurityPolicy: {\n directives: {\n 'script-src': [\"'self'\", \"'unsafe-inline'\"],\n 'connect-src': [\"'self'\", 'http:', 'https:', 'ws:'],\n },\n },\n });\n }\n\n return helmet(helmetConfig)(ctx, next);\n };\n"],"names":["defaults","crossOriginEmbedderPolicy","crossOriginOpenerPolicy","crossOriginResourcePolicy","originAgentCluster","contentSecurityPolicy","useDefaults","directives","upgradeInsecureRequests","xssFilter","hsts","maxAge","includeSubDomains","frameguard","action","mergeConfig","existingConfig","newConfig","mergeWith","obj","src","Array","isArray","concat","undefined","security","config","strapi","ctx","next","helmetConfig","defaultsDeep","specialPaths","plugin","service","playground","isEnabled","gqlConfig","push","method","some","str","path","startsWith","includes","process","env","NODE_ENV","get","helmet"],"mappings":"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"}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
var fp = require('lodash/fp');
|
4
|
+
var koaSession = require('koa-session');
|
5
|
+
|
6
|
+
const defaultConfig = {
|
7
|
+
key: 'koa.sess',
|
8
|
+
maxAge: 86400000,
|
9
|
+
autoCommit: true,
|
10
|
+
overwrite: true,
|
11
|
+
httpOnly: true,
|
12
|
+
signed: true,
|
13
|
+
rolling: false,
|
14
|
+
renew: false,
|
15
|
+
secure: process.env.NODE_ENV === 'production',
|
16
|
+
sameSite: undefined
|
17
|
+
};
|
18
|
+
const session = (userConfig, { strapi })=>{
|
19
|
+
const { keys } = strapi.server.app;
|
20
|
+
if (!fp.isArray(keys) || fp.isEmpty(keys) || keys.some(fp.isEmpty)) {
|
21
|
+
throw new Error(`App keys are required. Please set app.keys in config/server.js (ex: keys: ['myKeyA', 'myKeyB'])`);
|
22
|
+
}
|
23
|
+
const config = {
|
24
|
+
...defaultConfig,
|
25
|
+
...userConfig
|
26
|
+
};
|
27
|
+
strapi.server.use(koaSession(config, strapi.server.app));
|
28
|
+
};
|
29
|
+
|
30
|
+
exports.session = session;
|
31
|
+
//# sourceMappingURL=session.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"session.js","sources":["../../src/middlewares/session.ts"],"sourcesContent":["import { isEmpty, isArray } from 'lodash/fp';\nimport koaSession from 'koa-session';\nimport type { Core } from '@strapi/types';\n\nconst defaultConfig = {\n key: 'koa.sess',\n maxAge: 86400000,\n autoCommit: true,\n overwrite: true,\n httpOnly: true,\n signed: true,\n rolling: false,\n renew: false,\n secure: process.env.NODE_ENV === 'production',\n sameSite: undefined,\n};\n\nexport const session: Core.MiddlewareFactory<Partial<koaSession.opts>> = (\n userConfig,\n { strapi }\n) => {\n const { keys } = strapi.server.app;\n if (!isArray(keys) || isEmpty(keys) || keys.some(isEmpty)) {\n throw new Error(\n `App keys are required. Please set app.keys in config/server.js (ex: keys: ['myKeyA', 'myKeyB'])`\n );\n }\n\n const config: Partial<koaSession.opts> = { ...defaultConfig, ...userConfig };\n\n strapi.server.use(koaSession(config, strapi.server.app));\n};\n"],"names":["defaultConfig","key","maxAge","autoCommit","overwrite","httpOnly","signed","rolling","renew","secure","process","env","NODE_ENV","sameSite","undefined","session","userConfig","strapi","keys","server","app","isArray","isEmpty","some","Error","config","use","koaSession"],"mappings":";;;;;AAIA,MAAMA,aAAgB,GAAA;IACpBC,GAAK,EAAA,UAAA;IACLC,MAAQ,EAAA,QAAA;IACRC,UAAY,EAAA,IAAA;IACZC,SAAW,EAAA,IAAA;IACXC,QAAU,EAAA,IAAA;IACVC,MAAQ,EAAA,IAAA;IACRC,OAAS,EAAA,KAAA;IACTC,KAAO,EAAA,KAAA;AACPC,IAAAA,MAAAA,EAAQC,OAAQC,CAAAA,GAAG,CAACC,QAAQ,KAAK,YAAA;IACjCC,QAAUC,EAAAA;AACZ,CAAA;MAEaC,OAA4D,GAAA,CACvEC,UACA,EAAA,EAAEC,MAAM,EAAE,GAAA;AAEV,IAAA,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAOE,CAAAA,MAAM,CAACC,GAAG;IAClC,IAAI,CAACC,WAAQH,IAASI,CAAAA,IAAAA,UAAAA,CAAQJ,SAASA,IAAKK,CAAAA,IAAI,CAACD,UAAU,CAAA,EAAA;AACzD,QAAA,MAAM,IAAIE,KAAAA,CACR,CAAC,+FAA+F,CAAC,CAAA;AAErG;AAEA,IAAA,MAAMC,MAAmC,GAAA;AAAE,QAAA,GAAGzB,aAAa;AAAE,QAAA,GAAGgB;AAAW,KAAA;IAE3EC,MAAOE,CAAAA,MAAM,CAACO,GAAG,CAACC,WAAWF,MAAQR,EAAAA,MAAAA,CAAOE,MAAM,CAACC,GAAG,CAAA,CAAA;AACxD;;;;"}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import { isArray, isEmpty } from 'lodash/fp';
|
2
|
+
import koaSession from 'koa-session';
|
3
|
+
|
4
|
+
const defaultConfig = {
|
5
|
+
key: 'koa.sess',
|
6
|
+
maxAge: 86400000,
|
7
|
+
autoCommit: true,
|
8
|
+
overwrite: true,
|
9
|
+
httpOnly: true,
|
10
|
+
signed: true,
|
11
|
+
rolling: false,
|
12
|
+
renew: false,
|
13
|
+
secure: process.env.NODE_ENV === 'production',
|
14
|
+
sameSite: undefined
|
15
|
+
};
|
16
|
+
const session = (userConfig, { strapi })=>{
|
17
|
+
const { keys } = strapi.server.app;
|
18
|
+
if (!isArray(keys) || isEmpty(keys) || keys.some(isEmpty)) {
|
19
|
+
throw new Error(`App keys are required. Please set app.keys in config/server.js (ex: keys: ['myKeyA', 'myKeyB'])`);
|
20
|
+
}
|
21
|
+
const config = {
|
22
|
+
...defaultConfig,
|
23
|
+
...userConfig
|
24
|
+
};
|
25
|
+
strapi.server.use(koaSession(config, strapi.server.app));
|
26
|
+
};
|
27
|
+
|
28
|
+
export { session };
|
29
|
+
//# sourceMappingURL=session.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"session.mjs","sources":["../../src/middlewares/session.ts"],"sourcesContent":["import { isEmpty, isArray } from 'lodash/fp';\nimport koaSession from 'koa-session';\nimport type { Core } from '@strapi/types';\n\nconst defaultConfig = {\n key: 'koa.sess',\n maxAge: 86400000,\n autoCommit: true,\n overwrite: true,\n httpOnly: true,\n signed: true,\n rolling: false,\n renew: false,\n secure: process.env.NODE_ENV === 'production',\n sameSite: undefined,\n};\n\nexport const session: Core.MiddlewareFactory<Partial<koaSession.opts>> = (\n userConfig,\n { strapi }\n) => {\n const { keys } = strapi.server.app;\n if (!isArray(keys) || isEmpty(keys) || keys.some(isEmpty)) {\n throw new Error(\n `App keys are required. Please set app.keys in config/server.js (ex: keys: ['myKeyA', 'myKeyB'])`\n );\n }\n\n const config: Partial<koaSession.opts> = { ...defaultConfig, ...userConfig };\n\n strapi.server.use(koaSession(config, strapi.server.app));\n};\n"],"names":["defaultConfig","key","maxAge","autoCommit","overwrite","httpOnly","signed","rolling","renew","secure","process","env","NODE_ENV","sameSite","undefined","session","userConfig","strapi","keys","server","app","isArray","isEmpty","some","Error","config","use","koaSession"],"mappings":";;;AAIA,MAAMA,aAAgB,GAAA;IACpBC,GAAK,EAAA,UAAA;IACLC,MAAQ,EAAA,QAAA;IACRC,UAAY,EAAA,IAAA;IACZC,SAAW,EAAA,IAAA;IACXC,QAAU,EAAA,IAAA;IACVC,MAAQ,EAAA,IAAA;IACRC,OAAS,EAAA,KAAA;IACTC,KAAO,EAAA,KAAA;AACPC,IAAAA,MAAAA,EAAQC,OAAQC,CAAAA,GAAG,CAACC,QAAQ,KAAK,YAAA;IACjCC,QAAUC,EAAAA;AACZ,CAAA;MAEaC,OAA4D,GAAA,CACvEC,UACA,EAAA,EAAEC,MAAM,EAAE,GAAA;AAEV,IAAA,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAOE,CAAAA,MAAM,CAACC,GAAG;IAClC,IAAI,CAACC,QAAQH,IAASI,CAAAA,IAAAA,OAAAA,CAAQJ,SAASA,IAAKK,CAAAA,IAAI,CAACD,OAAU,CAAA,EAAA;AACzD,QAAA,MAAM,IAAIE,KAAAA,CACR,CAAC,+FAA+F,CAAC,CAAA;AAErG;AAEA,IAAA,MAAMC,MAAmC,GAAA;AAAE,QAAA,GAAGzB,aAAa;AAAE,QAAA,GAAGgB;AAAW,KAAA;IAE3EC,MAAOE,CAAAA,MAAM,CAACO,GAAG,CAACC,WAAWF,MAAQR,EAAAA,MAAAA,CAAOE,MAAM,CAACC,GAAG,CAAA,CAAA;AACxD;;;;"}
|
@@ -0,0 +1,168 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
var strapiUtils = require('@strapi/utils');
|
4
|
+
var index = require('../../services/document-service/index.js');
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Check if the model has draft and publish enabled.
|
8
|
+
*/ const hasDraftAndPublish = async (trx, meta)=>{
|
9
|
+
const hasTable = await trx.schema.hasTable(meta.tableName);
|
10
|
+
if (!hasTable) {
|
11
|
+
return false;
|
12
|
+
}
|
13
|
+
const uid = meta.uid;
|
14
|
+
const model = strapi.getModel(uid);
|
15
|
+
const hasDP = strapiUtils.contentTypes.hasDraftAndPublish(model);
|
16
|
+
if (!hasDP) {
|
17
|
+
return false;
|
18
|
+
}
|
19
|
+
return true;
|
20
|
+
};
|
21
|
+
/**
|
22
|
+
* Copy all the published entries to draft entries, without it's components, dynamic zones or relations.
|
23
|
+
* This ensures all necessary draft's exist before copying it's relations.
|
24
|
+
*/ async function copyPublishedEntriesToDraft({ db, trx, uid }) {
|
25
|
+
// Extract all scalar attributes to use in the insert query
|
26
|
+
const meta = db.metadata.get(uid);
|
27
|
+
// Get scalar attributes that will be copied over the new draft
|
28
|
+
const scalarAttributes = Object.values(meta.attributes).reduce((acc, attribute)=>{
|
29
|
+
if ([
|
30
|
+
'id'
|
31
|
+
].includes(attribute.columnName)) {
|
32
|
+
return acc;
|
33
|
+
}
|
34
|
+
if (strapiUtils.contentTypes.isScalarAttribute(attribute)) {
|
35
|
+
acc.push(attribute.columnName);
|
36
|
+
}
|
37
|
+
return acc;
|
38
|
+
}, []);
|
39
|
+
/**
|
40
|
+
* Query to copy the published entries into draft entries.
|
41
|
+
*
|
42
|
+
* INSERT INTO tableName (columnName1, columnName2, columnName3, ...)
|
43
|
+
* SELECT columnName1, columnName2, columnName3, ...
|
44
|
+
* FROM tableName
|
45
|
+
*/ await trx// INSERT INTO tableName (columnName1, columnName2, columnName3, ...)
|
46
|
+
.into(trx.raw(`?? (${scalarAttributes.map(()=>`??`).join(', ')})`, [
|
47
|
+
meta.tableName,
|
48
|
+
...scalarAttributes
|
49
|
+
])).insert((subQb)=>{
|
50
|
+
// SELECT columnName1, columnName2, columnName3, ...
|
51
|
+
subQb.select(...scalarAttributes.map((att)=>{
|
52
|
+
// Override 'publishedAt' and 'updatedAt' attributes
|
53
|
+
if (att === 'published_at') {
|
54
|
+
return trx.raw('NULL as ??', 'published_at');
|
55
|
+
}
|
56
|
+
return att;
|
57
|
+
})).from(meta.tableName)// Only select entries that were published
|
58
|
+
.whereNotNull('published_at');
|
59
|
+
});
|
60
|
+
}
|
61
|
+
/**
|
62
|
+
* Load a batch of versions to discard.
|
63
|
+
*
|
64
|
+
* Versions with only a draft version will be ignored.
|
65
|
+
* Only versions with a published version (which always have a draft version) will be discarded.
|
66
|
+
*/ async function* getBatchToDiscard({ db, trx, uid, defaultBatchSize = 1000 }) {
|
67
|
+
const client = db.config.connection.client;
|
68
|
+
const isSQLite = typeof client === 'string' && [
|
69
|
+
'sqlite',
|
70
|
+
'sqlite3',
|
71
|
+
'better-sqlite3'
|
72
|
+
].includes(client);
|
73
|
+
// The SQLite documentation states that the maximum number of terms in a
|
74
|
+
// compound SELECT statement is 500 by default.
|
75
|
+
// See: https://www.sqlite.org/limits.html
|
76
|
+
// To ensure a successful migration, we limit the batch size to 500 for SQLite.
|
77
|
+
const batchSize = isSQLite ? Math.min(defaultBatchSize, 500) : defaultBatchSize;
|
78
|
+
let offset = 0;
|
79
|
+
let hasMore = true;
|
80
|
+
while(hasMore){
|
81
|
+
// Look for the published entries to discard
|
82
|
+
const batch = await db.queryBuilder(uid).select([
|
83
|
+
'id',
|
84
|
+
'documentId',
|
85
|
+
'locale'
|
86
|
+
]).where({
|
87
|
+
publishedAt: {
|
88
|
+
$ne: null
|
89
|
+
}
|
90
|
+
}).limit(batchSize).offset(offset).orderBy('id').transacting(trx).execute();
|
91
|
+
if (batch.length < batchSize) {
|
92
|
+
hasMore = false;
|
93
|
+
}
|
94
|
+
offset += batchSize;
|
95
|
+
yield batch;
|
96
|
+
}
|
97
|
+
}
|
98
|
+
/**
|
99
|
+
* 2 pass migration to create the draft entries for all the published entries.
|
100
|
+
* And then discard the drafts to copy the relations.
|
101
|
+
*/ const migrateUp = async (trx, db)=>{
|
102
|
+
const dpModels = [];
|
103
|
+
for (const meta of db.metadata.values()){
|
104
|
+
const hasDP = await hasDraftAndPublish(trx, meta);
|
105
|
+
if (hasDP) {
|
106
|
+
dpModels.push(meta);
|
107
|
+
}
|
108
|
+
}
|
109
|
+
/**
|
110
|
+
* Create plain draft entries for all the entries that were published.
|
111
|
+
*/ for (const model of dpModels){
|
112
|
+
await copyPublishedEntriesToDraft({
|
113
|
+
db,
|
114
|
+
trx,
|
115
|
+
uid: model.uid
|
116
|
+
});
|
117
|
+
}
|
118
|
+
/**
|
119
|
+
* Discard the drafts will copy the relations from the published entries to the newly created drafts.
|
120
|
+
*
|
121
|
+
* Load a batch of entries (batched to prevent loading millions of rows at once ),
|
122
|
+
* and discard them using the document service.
|
123
|
+
*
|
124
|
+
* NOTE: This is using a custom document service without any validations,
|
125
|
+
* to prevent the migration from failing if users already had invalid data in V4.
|
126
|
+
* E.g. @see https://github.com/strapi/strapi/issues/21583
|
127
|
+
*/ const documentService = index.createDocumentService(strapi, {
|
128
|
+
async validateEntityCreation (_, data) {
|
129
|
+
return data;
|
130
|
+
},
|
131
|
+
async validateEntityUpdate (_, data) {
|
132
|
+
// Data can be partially empty on partial updates
|
133
|
+
// This migration doesn't trigger any update (or partial update),
|
134
|
+
// so it's safe to return the data as is.
|
135
|
+
return data;
|
136
|
+
}
|
137
|
+
});
|
138
|
+
for (const model of dpModels){
|
139
|
+
const discardDraft = async (entry)=>documentService(model.uid).discardDraft({
|
140
|
+
documentId: entry.documentId,
|
141
|
+
locale: entry.locale
|
142
|
+
});
|
143
|
+
for await (const batch of getBatchToDiscard({
|
144
|
+
db,
|
145
|
+
trx,
|
146
|
+
uid: model.uid
|
147
|
+
})){
|
148
|
+
// NOTE: concurrency had to be disabled to prevent a race condition with self-references
|
149
|
+
// TODO: improve performance in a safe way
|
150
|
+
await strapiUtils.async.map(batch, discardDraft, {
|
151
|
+
concurrency: 1
|
152
|
+
});
|
153
|
+
}
|
154
|
+
}
|
155
|
+
};
|
156
|
+
const discardDocumentDrafts = {
|
157
|
+
name: 'core::5.0.0-discard-drafts',
|
158
|
+
async up (trx, db) {
|
159
|
+
await migrateUp(trx, db);
|
160
|
+
},
|
161
|
+
async down () {
|
162
|
+
throw new Error('not implemented');
|
163
|
+
}
|
164
|
+
};
|
165
|
+
|
166
|
+
exports.discardDocumentDrafts = discardDocumentDrafts;
|
167
|
+
exports.getBatchToDiscard = getBatchToDiscard;
|
168
|
+
//# sourceMappingURL=5.0.0-discard-drafts.js.map
|