@strapi/core 0.0.0-experimental.6dbac0c205b0f8495781db5706c18cac1a62e62b
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.
Potentially problematic release.
This version of @strapi/core might be problematic. Click here for more details.
- package/LICENSE +22 -0
- package/README.md +1 -0
- package/bin/strapi.js +2 -0
- package/dist/Strapi.d.ts +95 -0
- package/dist/Strapi.d.ts.map +1 -0
- package/dist/Strapi.js +436 -0
- package/dist/Strapi.js.map +1 -0
- package/dist/Strapi.mjs +434 -0
- package/dist/Strapi.mjs.map +1 -0
- package/dist/admin.d.ts +5 -0
- package/dist/admin.d.ts.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/commands/actions/admin/create-user/action.d.ts +12 -0
- package/dist/commands/actions/admin/create-user/action.d.ts.map +1 -0
- package/dist/commands/actions/admin/create-user/command.d.ts +7 -0
- package/dist/commands/actions/admin/create-user/command.d.ts.map +1 -0
- package/dist/commands/actions/admin/reset-user-password/action.d.ts +10 -0
- package/dist/commands/actions/admin/reset-user-password/action.d.ts.map +1 -0
- package/dist/commands/actions/admin/reset-user-password/command.d.ts +7 -0
- package/dist/commands/actions/admin/reset-user-password/command.d.ts.map +1 -0
- package/dist/commands/actions/components/list/action.d.ts +3 -0
- package/dist/commands/actions/components/list/action.d.ts.map +1 -0
- package/dist/commands/actions/components/list/command.d.ts +7 -0
- package/dist/commands/actions/components/list/command.d.ts.map +1 -0
- package/dist/commands/actions/configuration/dump/action.d.ts +11 -0
- package/dist/commands/actions/configuration/dump/action.d.ts.map +1 -0
- package/dist/commands/actions/configuration/dump/command.d.ts +7 -0
- package/dist/commands/actions/configuration/dump/command.d.ts.map +1 -0
- package/dist/commands/actions/configuration/restore/action.d.ts +11 -0
- package/dist/commands/actions/configuration/restore/action.d.ts.map +1 -0
- package/dist/commands/actions/configuration/restore/command.d.ts +7 -0
- package/dist/commands/actions/configuration/restore/command.d.ts.map +1 -0
- package/dist/commands/actions/console/action.d.ts +6 -0
- package/dist/commands/actions/console/action.d.ts.map +1 -0
- package/dist/commands/actions/console/command.d.ts +7 -0
- package/dist/commands/actions/console/command.d.ts.map +1 -0
- package/dist/commands/actions/content-types/list/action.d.ts +3 -0
- package/dist/commands/actions/content-types/list/action.d.ts.map +1 -0
- package/dist/commands/actions/content-types/list/command.d.ts +7 -0
- package/dist/commands/actions/content-types/list/command.d.ts.map +1 -0
- package/dist/commands/actions/controllers/list/action.d.ts +3 -0
- package/dist/commands/actions/controllers/list/action.d.ts.map +1 -0
- package/dist/commands/actions/controllers/list/command.d.ts +7 -0
- package/dist/commands/actions/controllers/list/command.d.ts.map +1 -0
- package/dist/commands/actions/generate/command.d.ts +7 -0
- package/dist/commands/actions/generate/command.d.ts.map +1 -0
- package/dist/commands/actions/hooks/list/action.d.ts +3 -0
- package/dist/commands/actions/hooks/list/action.d.ts.map +1 -0
- package/dist/commands/actions/hooks/list/command.d.ts +7 -0
- package/dist/commands/actions/hooks/list/command.d.ts.map +1 -0
- package/dist/commands/actions/install/action.d.ts +3 -0
- package/dist/commands/actions/install/action.d.ts.map +1 -0
- package/dist/commands/actions/install/command.d.ts +7 -0
- package/dist/commands/actions/install/command.d.ts.map +1 -0
- package/dist/commands/actions/middlewares/list/action.d.ts +3 -0
- package/dist/commands/actions/middlewares/list/action.d.ts.map +1 -0
- package/dist/commands/actions/middlewares/list/command.d.ts +7 -0
- package/dist/commands/actions/middlewares/list/command.d.ts.map +1 -0
- package/dist/commands/actions/new/action.d.ts +8 -0
- package/dist/commands/actions/new/action.d.ts.map +1 -0
- package/dist/commands/actions/new/command.d.ts +7 -0
- package/dist/commands/actions/new/command.d.ts.map +1 -0
- package/dist/commands/actions/plugin/build-command/action.d.ts +7 -0
- package/dist/commands/actions/plugin/build-command/action.d.ts.map +1 -0
- package/dist/commands/actions/plugin/build-command/command.d.ts +7 -0
- package/dist/commands/actions/plugin/build-command/command.d.ts.map +1 -0
- package/dist/commands/actions/plugin/watch/action.d.ts +7 -0
- package/dist/commands/actions/plugin/watch/action.d.ts.map +1 -0
- package/dist/commands/actions/plugin/watch/command.d.ts +7 -0
- package/dist/commands/actions/plugin/watch/command.d.ts.map +1 -0
- package/dist/commands/actions/policies/list/action.d.ts +3 -0
- package/dist/commands/actions/policies/list/action.d.ts.map +1 -0
- package/dist/commands/actions/policies/list/command.d.ts +7 -0
- package/dist/commands/actions/policies/list/command.d.ts.map +1 -0
- package/dist/commands/actions/report/action.d.ts +8 -0
- package/dist/commands/actions/report/action.d.ts.map +1 -0
- package/dist/commands/actions/report/command.d.ts +7 -0
- package/dist/commands/actions/report/command.d.ts.map +1 -0
- package/dist/commands/actions/routes/list/action.d.ts +3 -0
- package/dist/commands/actions/routes/list/action.d.ts.map +1 -0
- package/dist/commands/actions/routes/list/command.d.ts +7 -0
- package/dist/commands/actions/routes/list/command.d.ts.map +1 -0
- package/dist/commands/actions/services/list/action.d.ts +3 -0
- package/dist/commands/actions/services/list/action.d.ts.map +1 -0
- package/dist/commands/actions/services/list/command.d.ts +7 -0
- package/dist/commands/actions/services/list/command.d.ts.map +1 -0
- package/dist/commands/actions/start/action.d.ts +6 -0
- package/dist/commands/actions/start/action.d.ts.map +1 -0
- package/dist/commands/actions/start/command.d.ts +7 -0
- package/dist/commands/actions/start/command.d.ts.map +1 -0
- package/dist/commands/actions/telemetry/disable/action.d.ts +2 -0
- package/dist/commands/actions/telemetry/disable/action.d.ts.map +1 -0
- package/dist/commands/actions/telemetry/disable/command.d.ts +7 -0
- package/dist/commands/actions/telemetry/disable/command.d.ts.map +1 -0
- package/dist/commands/actions/telemetry/enable/action.d.ts +3 -0
- package/dist/commands/actions/telemetry/enable/action.d.ts.map +1 -0
- package/dist/commands/actions/telemetry/enable/command.d.ts +7 -0
- package/dist/commands/actions/telemetry/enable/command.d.ts.map +1 -0
- package/dist/commands/actions/templates/generate/action.d.ts +2 -0
- package/dist/commands/actions/templates/generate/action.d.ts.map +1 -0
- package/dist/commands/actions/templates/generate/command.d.ts +7 -0
- package/dist/commands/actions/templates/generate/command.d.ts.map +1 -0
- package/dist/commands/actions/ts/generate-types/action.d.ts +9 -0
- package/dist/commands/actions/ts/generate-types/action.d.ts.map +1 -0
- package/dist/commands/actions/ts/generate-types/command.d.ts +7 -0
- package/dist/commands/actions/ts/generate-types/command.d.ts.map +1 -0
- package/dist/commands/actions/uninstall/action.d.ts +6 -0
- package/dist/commands/actions/uninstall/action.d.ts.map +1 -0
- package/dist/commands/actions/uninstall/command.d.ts +7 -0
- package/dist/commands/actions/uninstall/command.d.ts.map +1 -0
- package/dist/commands/actions/version/command.d.ts +7 -0
- package/dist/commands/actions/version/command.d.ts.map +1 -0
- package/dist/commands/actions/watch-admin/action.d.ts +7 -0
- package/dist/commands/actions/watch-admin/action.d.ts.map +1 -0
- package/dist/commands/actions/watch-admin/command.d.ts +7 -0
- package/dist/commands/actions/watch-admin/command.d.ts.map +1 -0
- package/dist/commands/index.d.ts +37 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/types.d.ts +14 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/utils/commander.d.ts +36 -0
- package/dist/commands/utils/commander.d.ts.map +1 -0
- package/dist/commands/utils/helpers.d.ts +49 -0
- package/dist/commands/utils/helpers.d.ts.map +1 -0
- package/dist/commands/utils/logger.d.ts +19 -0
- package/dist/commands/utils/logger.d.ts.map +1 -0
- package/dist/commands/utils/pkg.d.ts +119 -0
- package/dist/commands/utils/pkg.d.ts.map +1 -0
- package/dist/commands/utils/tsconfig.d.ts +19 -0
- package/dist/commands/utils/tsconfig.d.ts.map +1 -0
- package/dist/compile.d.ts +10 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +18 -0
- package/dist/compile.js.map +1 -0
- package/dist/compile.mjs +17 -0
- package/dist/compile.mjs.map +1 -0
- package/dist/container.d.ts +8 -0
- package/dist/container.d.ts.map +1 -0
- package/dist/container.js +30 -0
- package/dist/container.js.map +1 -0
- package/dist/container.mjs +30 -0
- package/dist/container.mjs.map +1 -0
- package/dist/core/app-configuration/config-loader.d.ts +3 -0
- package/dist/core/app-configuration/config-loader.d.ts.map +1 -0
- package/dist/core/app-configuration/config-loader.js +19 -0
- package/dist/core/app-configuration/config-loader.js.map +1 -0
- package/dist/core/app-configuration/config-loader.mjs +17 -0
- package/dist/core/app-configuration/config-loader.mjs.map +1 -0
- package/dist/core/app-configuration/index.d.ts +36 -0
- package/dist/core/app-configuration/index.d.ts.map +1 -0
- package/dist/core/app-configuration/index.js +55 -0
- package/dist/core/app-configuration/index.js.map +1 -0
- package/dist/core/app-configuration/index.mjs +51 -0
- package/dist/core/app-configuration/index.mjs.map +1 -0
- package/dist/core/app-configuration/load-config-file.d.ts +2 -0
- package/dist/core/app-configuration/load-config-file.d.ts.map +1 -0
- package/dist/core/app-configuration/load-config-file.js +45 -0
- package/dist/core/app-configuration/load-config-file.js.map +1 -0
- package/dist/core/app-configuration/load-config-file.mjs +42 -0
- package/dist/core/app-configuration/load-config-file.mjs.map +1 -0
- package/dist/core/bootstrap.d.ts +5 -0
- package/dist/core/bootstrap.d.ts.map +1 -0
- package/dist/core/bootstrap.js +28 -0
- package/dist/core/bootstrap.js.map +1 -0
- package/dist/core/bootstrap.mjs +27 -0
- package/dist/core/bootstrap.mjs.map +1 -0
- package/dist/core/domain/content-type/index.d.ts +9 -0
- package/dist/core/domain/content-type/index.d.ts.map +1 -0
- package/dist/core/domain/content-type/index.js +122 -0
- package/dist/core/domain/content-type/index.js.map +1 -0
- package/dist/core/domain/content-type/index.mjs +120 -0
- package/dist/core/domain/content-type/index.mjs.map +1 -0
- package/dist/core/domain/content-type/validator.d.ts +23 -0
- package/dist/core/domain/content-type/validator.d.ts.map +1 -0
- package/dist/core/domain/content-type/validator.js +77 -0
- package/dist/core/domain/content-type/validator.js.map +1 -0
- package/dist/core/domain/content-type/validator.mjs +75 -0
- package/dist/core/domain/content-type/validator.mjs.map +1 -0
- package/dist/core/domain/module/index.d.ts +39 -0
- package/dist/core/domain/module/index.d.ts.map +1 -0
- package/dist/core/domain/module/index.js +107 -0
- package/dist/core/domain/module/index.js.map +1 -0
- package/dist/core/domain/module/index.mjs +105 -0
- package/dist/core/domain/module/index.mjs.map +1 -0
- package/dist/core/domain/module/validation.d.ts +15 -0
- package/dist/core/domain/module/validation.d.ts.map +1 -0
- package/dist/core/domain/module/validation.js +25 -0
- package/dist/core/domain/module/validation.js.map +1 -0
- package/dist/core/domain/module/validation.mjs +25 -0
- package/dist/core/domain/module/validation.mjs.map +1 -0
- package/dist/core/loaders/admin.d.ts +3 -0
- package/dist/core/loaders/admin.d.ts.map +1 -0
- package/dist/core/loaders/admin.js +16 -0
- package/dist/core/loaders/admin.js.map +1 -0
- package/dist/core/loaders/admin.mjs +15 -0
- package/dist/core/loaders/admin.mjs.map +1 -0
- package/dist/core/loaders/apis.d.ts +3 -0
- package/dist/core/loaders/apis.d.ts.map +1 -0
- package/dist/core/loaders/apis.js +130 -0
- package/dist/core/loaders/apis.js.map +1 -0
- package/dist/core/loaders/apis.mjs +128 -0
- package/dist/core/loaders/apis.mjs.map +1 -0
- package/dist/core/loaders/components.d.ts +3 -0
- package/dist/core/loaders/components.d.ts.map +1 -0
- package/dist/core/loaders/components.js +38 -0
- package/dist/core/loaders/components.js.map +1 -0
- package/dist/core/loaders/components.mjs +37 -0
- package/dist/core/loaders/components.mjs.map +1 -0
- package/dist/core/loaders/index.d.ts +3 -0
- package/dist/core/loaders/index.d.ts.map +1 -0
- package/dist/core/loaders/index.js +26 -0
- package/dist/core/loaders/index.js.map +1 -0
- package/dist/core/loaders/index.mjs +26 -0
- package/dist/core/loaders/index.mjs.map +1 -0
- package/dist/core/loaders/middlewares.d.ts +3 -0
- package/dist/core/loaders/middlewares.d.ts.map +1 -0
- package/dist/core/loaders/middlewares.js +31 -0
- package/dist/core/loaders/middlewares.js.map +1 -0
- package/dist/core/loaders/middlewares.mjs +30 -0
- package/dist/core/loaders/middlewares.mjs.map +1 -0
- package/dist/core/loaders/plugins/get-enabled-plugins.d.ts +5 -0
- package/dist/core/loaders/plugins/get-enabled-plugins.d.ts.map +1 -0
- package/dist/core/loaders/plugins/get-enabled-plugins.js +110 -0
- package/dist/core/loaders/plugins/get-enabled-plugins.js.map +1 -0
- package/dist/core/loaders/plugins/get-enabled-plugins.mjs +108 -0
- package/dist/core/loaders/plugins/get-enabled-plugins.mjs.map +1 -0
- package/dist/core/loaders/plugins/get-user-plugins-config.d.ts +7 -0
- package/dist/core/loaders/plugins/get-user-plugins-config.d.ts.map +1 -0
- package/dist/core/loaders/plugins/get-user-plugins-config.js +27 -0
- package/dist/core/loaders/plugins/get-user-plugins-config.js.map +1 -0
- package/dist/core/loaders/plugins/get-user-plugins-config.mjs +25 -0
- package/dist/core/loaders/plugins/get-user-plugins-config.mjs.map +1 -0
- package/dist/core/loaders/plugins/index.d.ts +3 -0
- package/dist/core/loaders/plugins/index.d.ts.map +1 -0
- package/dist/core/loaders/plugins/index.js +105 -0
- package/dist/core/loaders/plugins/index.js.map +1 -0
- package/dist/core/loaders/plugins/index.mjs +104 -0
- package/dist/core/loaders/plugins/index.mjs.map +1 -0
- package/dist/core/loaders/policies.d.ts +3 -0
- package/dist/core/loaders/policies.d.ts.map +1 -0
- package/dist/core/loaders/policies.js +25 -0
- package/dist/core/loaders/policies.js.map +1 -0
- package/dist/core/loaders/policies.mjs +24 -0
- package/dist/core/loaders/policies.mjs.map +1 -0
- package/dist/core/loaders/sanitizers.d.ts +4 -0
- package/dist/core/loaders/sanitizers.d.ts.map +1 -0
- package/dist/core/loaders/sanitizers.js +6 -0
- package/dist/core/loaders/sanitizers.js.map +1 -0
- package/dist/core/loaders/sanitizers.mjs +7 -0
- package/dist/core/loaders/sanitizers.mjs.map +1 -0
- package/dist/core/loaders/src-index.d.ts +4 -0
- package/dist/core/loaders/src-index.d.ts.map +1 -0
- package/dist/core/loaders/src-index.js +33 -0
- package/dist/core/loaders/src-index.js.map +1 -0
- package/dist/core/loaders/src-index.mjs +34 -0
- package/dist/core/loaders/src-index.mjs.map +1 -0
- package/dist/core/loaders/validators.d.ts +4 -0
- package/dist/core/loaders/validators.d.ts.map +1 -0
- package/dist/core/loaders/validators.js +6 -0
- package/dist/core/loaders/validators.js.map +1 -0
- package/dist/core/loaders/validators.mjs +7 -0
- package/dist/core/loaders/validators.mjs.map +1 -0
- package/dist/core/registries/apis.d.ts +8 -0
- package/dist/core/registries/apis.d.ts.map +1 -0
- package/dist/core/registries/apis.js +23 -0
- package/dist/core/registries/apis.js.map +1 -0
- package/dist/core/registries/apis.mjs +24 -0
- package/dist/core/registries/apis.mjs.map +1 -0
- package/dist/core/registries/components.d.ts +25 -0
- package/dist/core/registries/components.d.ts.map +1 -0
- package/dist/core/registries/components.js +45 -0
- package/dist/core/registries/components.js.map +1 -0
- package/dist/core/registries/components.mjs +46 -0
- package/dist/core/registries/components.mjs.map +1 -0
- package/dist/core/registries/config.d.ts +4 -0
- package/dist/core/registries/config.d.ts.map +1 -0
- package/dist/core/registries/config.js +23 -0
- package/dist/core/registries/config.js.map +1 -0
- package/dist/core/registries/config.mjs +22 -0
- package/dist/core/registries/config.mjs.map +1 -0
- package/dist/core/registries/content-types.d.ts +33 -0
- package/dist/core/registries/content-types.d.ts.map +1 -0
- package/dist/core/registries/content-types.js +71 -0
- package/dist/core/registries/content-types.js.map +1 -0
- package/dist/core/registries/content-types.mjs +72 -0
- package/dist/core/registries/content-types.mjs.map +1 -0
- package/dist/core/registries/controllers.d.ts +35 -0
- package/dist/core/registries/controllers.d.ts.map +1 -0
- package/dist/core/registries/controllers.js +80 -0
- package/dist/core/registries/controllers.js.map +1 -0
- package/dist/core/registries/controllers.mjs +81 -0
- package/dist/core/registries/controllers.mjs.map +1 -0
- package/dist/core/registries/custom-fields.d.ts +8 -0
- package/dist/core/registries/custom-fields.d.ts.map +1 -0
- package/dist/core/registries/custom-fields.js +71 -0
- package/dist/core/registries/custom-fields.js.map +1 -0
- package/dist/core/registries/custom-fields.mjs +72 -0
- package/dist/core/registries/custom-fields.mjs.map +1 -0
- package/dist/core/registries/hooks.d.ts +44 -0
- package/dist/core/registries/hooks.d.ts.map +1 -0
- package/dist/core/registries/hooks.js +58 -0
- package/dist/core/registries/hooks.js.map +1 -0
- package/dist/core/registries/hooks.mjs +59 -0
- package/dist/core/registries/hooks.mjs.map +1 -0
- package/dist/core/registries/index.d.ts +15 -0
- package/dist/core/registries/index.d.ts.map +1 -0
- package/dist/core/registries/middlewares.d.ts +31 -0
- package/dist/core/registries/middlewares.d.ts.map +1 -0
- package/dist/core/registries/middlewares.js +60 -0
- package/dist/core/registries/middlewares.js.map +1 -0
- package/dist/core/registries/middlewares.mjs +61 -0
- package/dist/core/registries/middlewares.mjs.map +1 -0
- package/dist/core/registries/modules.d.ts +15 -0
- package/dist/core/registries/modules.d.ts.map +1 -0
- package/dist/core/registries/modules.js +39 -0
- package/dist/core/registries/modules.js.map +1 -0
- package/dist/core/registries/modules.mjs +40 -0
- package/dist/core/registries/modules.mjs.map +1 -0
- package/dist/core/registries/plugins.d.ts +9 -0
- package/dist/core/registries/plugins.d.ts.map +1 -0
- package/dist/core/registries/plugins.js +23 -0
- package/dist/core/registries/plugins.js.map +1 -0
- package/dist/core/registries/plugins.mjs +24 -0
- package/dist/core/registries/plugins.mjs.map +1 -0
- package/dist/core/registries/policies.d.ts +34 -0
- package/dist/core/registries/policies.d.ts.map +1 -0
- package/dist/core/registries/policies.js +62 -0
- package/dist/core/registries/policies.js.map +1 -0
- package/dist/core/registries/policies.mjs +63 -0
- package/dist/core/registries/policies.mjs.map +1 -0
- package/dist/core/registries/sanitizers.d.ts +10 -0
- package/dist/core/registries/sanitizers.d.ts.map +1 -0
- package/dist/core/registries/sanitizers.js +25 -0
- package/dist/core/registries/sanitizers.js.map +1 -0
- package/dist/core/registries/sanitizers.mjs +24 -0
- package/dist/core/registries/sanitizers.mjs.map +1 -0
- package/dist/core/registries/services.d.ts +35 -0
- package/dist/core/registries/services.d.ts.map +1 -0
- package/dist/core/registries/services.js +80 -0
- package/dist/core/registries/services.js.map +1 -0
- package/dist/core/registries/services.mjs +81 -0
- package/dist/core/registries/services.mjs.map +1 -0
- package/dist/core/registries/validators.d.ts +10 -0
- package/dist/core/registries/validators.d.ts.map +1 -0
- package/dist/core/registries/validators.js +25 -0
- package/dist/core/registries/validators.js.map +1 -0
- package/dist/core/registries/validators.mjs +24 -0
- package/dist/core/registries/validators.mjs.map +1 -0
- package/dist/core/utils.d.ts +5 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +27 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/core/utils.mjs +27 -0
- package/dist/core/utils.mjs.map +1 -0
- package/dist/core-api/controller/collection-type.d.ts +11 -0
- package/dist/core-api/controller/collection-type.d.ts.map +1 -0
- package/dist/core-api/controller/collection-type.js +92 -0
- package/dist/core-api/controller/collection-type.js.map +1 -0
- package/dist/core-api/controller/collection-type.mjs +93 -0
- package/dist/core-api/controller/collection-type.mjs.map +1 -0
- package/dist/core-api/controller/index.d.ts +6 -0
- package/dist/core-api/controller/index.d.ts.map +1 -0
- package/dist/core-api/controller/index.js +47 -0
- package/dist/core-api/controller/index.js.map +1 -0
- package/dist/core-api/controller/index.mjs +47 -0
- package/dist/core-api/controller/index.mjs.map +1 -0
- package/dist/core-api/controller/single-type.d.ts +10 -0
- package/dist/core-api/controller/single-type.d.ts.map +1 -0
- package/dist/core-api/controller/single-type.js +50 -0
- package/dist/core-api/controller/single-type.js.map +1 -0
- package/dist/core-api/controller/single-type.mjs +51 -0
- package/dist/core-api/controller/single-type.mjs.map +1 -0
- package/dist/core-api/controller/transform.d.ts +22 -0
- package/dist/core-api/controller/transform.d.ts.map +1 -0
- package/dist/core-api/controller/transform.js +84 -0
- package/dist/core-api/controller/transform.js.map +1 -0
- package/dist/core-api/controller/transform.mjs +84 -0
- package/dist/core-api/controller/transform.mjs.map +1 -0
- package/dist/core-api/routes/index.d.ts +24 -0
- package/dist/core-api/routes/index.d.ts.map +1 -0
- package/dist/core-api/routes/index.js +67 -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.d.ts +10 -0
- package/dist/core-api/service/collection-type.d.ts.map +1 -0
- package/dist/core-api/service/collection-type.js +58 -0
- package/dist/core-api/service/collection-type.js.map +1 -0
- package/dist/core-api/service/collection-type.mjs +59 -0
- package/dist/core-api/service/collection-type.mjs.map +1 -0
- package/dist/core-api/service/get-fetch-params.d.ts +7 -0
- package/dist/core-api/service/get-fetch-params.d.ts.map +1 -0
- package/dist/core-api/service/get-fetch-params.js +14 -0
- package/dist/core-api/service/get-fetch-params.js.map +1 -0
- package/dist/core-api/service/get-fetch-params.mjs +14 -0
- package/dist/core-api/service/get-fetch-params.mjs.map +1 -0
- package/dist/core-api/service/index.d.ts +9 -0
- package/dist/core-api/service/index.d.ts.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 +16 -0
- package/dist/core-api/service/index.mjs.map +1 -0
- package/dist/core-api/service/pagination.d.ts +41 -0
- package/dist/core-api/service/pagination.d.ts.map +1 -0
- package/dist/core-api/service/pagination.js +89 -0
- package/dist/core-api/service/pagination.js.map +1 -0
- package/dist/core-api/service/pagination.mjs +89 -0
- package/dist/core-api/service/pagination.mjs.map +1 -0
- package/dist/core-api/service/single-type.d.ts +9 -0
- package/dist/core-api/service/single-type.d.ts.map +1 -0
- package/dist/core-api/service/single-type.js +54 -0
- package/dist/core-api/service/single-type.js.map +1 -0
- package/dist/core-api/service/single-type.mjs +55 -0
- package/dist/core-api/service/single-type.mjs.map +1 -0
- package/dist/ee/index.d.ts +20 -0
- package/dist/ee/index.d.ts.map +1 -0
- package/dist/ee/index.js +153 -0
- package/dist/ee/index.js.map +1 -0
- package/dist/ee/index.mjs +154 -0
- package/dist/ee/index.mjs.map +1 -0
- package/dist/ee/license.d.ts +21 -0
- package/dist/ee/license.d.ts.map +1 -0
- package/dist/ee/license.js +89 -0
- package/dist/ee/license.js.map +1 -0
- package/dist/ee/license.mjs +86 -0
- package/dist/ee/license.mjs.map +1 -0
- package/dist/factories.d.ts +13 -0
- package/dist/factories.d.ts.map +1 -0
- package/dist/factories.js +71 -0
- package/dist/factories.js.map +1 -0
- package/dist/factories.mjs +71 -0
- package/dist/factories.mjs.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +5 -0
- package/dist/index.mjs.map +1 -0
- package/dist/load/filepath-to-prop-path.d.ts +6 -0
- package/dist/load/filepath-to-prop-path.d.ts.map +1 -0
- package/dist/load/filepath-to-prop-path.js +11 -0
- package/dist/load/filepath-to-prop-path.js.map +1 -0
- package/dist/load/filepath-to-prop-path.mjs +10 -0
- package/dist/load/filepath-to-prop-path.mjs.map +1 -0
- package/dist/load/glob.d.ts +7 -0
- package/dist/load/glob.d.ts.map +1 -0
- package/dist/load/glob.js +15 -0
- package/dist/load/glob.js.map +1 -0
- package/dist/load/glob.mjs +14 -0
- package/dist/load/glob.mjs.map +1 -0
- package/dist/load/index.d.ts +3 -0
- package/dist/load/index.d.ts.map +1 -0
- package/dist/load/load-files.d.ts +11 -0
- package/dist/load/load-files.d.ts.map +1 -0
- package/dist/load/load-files.js +38 -0
- package/dist/load/load-files.js.map +1 -0
- package/dist/load/load-files.mjs +35 -0
- package/dist/load/load-files.mjs.map +1 -0
- package/dist/load/package-path.d.ts +6 -0
- package/dist/load/package-path.d.ts.map +1 -0
- package/dist/middlewares/body.d.ts +6 -0
- package/dist/middlewares/body.d.ts.map +1 -0
- package/dist/middlewares/body.js +65 -0
- package/dist/middlewares/body.js.map +1 -0
- package/dist/middlewares/body.mjs +61 -0
- package/dist/middlewares/body.mjs.map +1 -0
- package/dist/middlewares/compression.d.ts +5 -0
- package/dist/middlewares/compression.d.ts.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.d.ts +13 -0
- package/dist/middlewares/cors.d.ts.map +1 -0
- package/dist/middlewares/cors.js +51 -0
- package/dist/middlewares/cors.js.map +1 -0
- package/dist/middlewares/cors.mjs +49 -0
- package/dist/middlewares/cors.mjs.map +1 -0
- package/dist/middlewares/errors.d.ts +4 -0
- package/dist/middlewares/errors.d.ts.map +1 -0
- package/dist/middlewares/errors.js +33 -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.d.ts +5 -0
- package/dist/middlewares/favicon.d.ts.map +1 -0
- package/dist/middlewares/favicon.js +22 -0
- package/dist/middlewares/favicon.js.map +1 -0
- package/dist/middlewares/favicon.mjs +20 -0
- package/dist/middlewares/favicon.mjs.map +1 -0
- package/dist/middlewares/index.d.ts +3 -0
- package/dist/middlewares/index.d.ts.map +1 -0
- package/dist/middlewares/index.js +34 -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.d.ts +5 -0
- package/dist/middlewares/ip.d.ts.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.d.ts +3 -0
- package/dist/middlewares/logger.d.ts.map +1 -0
- package/dist/middlewares/logger.js +12 -0
- package/dist/middlewares/logger.js.map +1 -0
- package/dist/middlewares/logger.mjs +12 -0
- package/dist/middlewares/logger.mjs.map +1 -0
- package/dist/middlewares/powered-by.d.ts +6 -0
- package/dist/middlewares/powered-by.d.ts.map +1 -0
- package/dist/middlewares/powered-by.js +14 -0
- package/dist/middlewares/powered-by.js.map +1 -0
- package/dist/middlewares/powered-by.mjs +14 -0
- package/dist/middlewares/powered-by.mjs.map +1 -0
- package/dist/middlewares/public/assets/images/group_people_1.png +0 -0
- package/dist/middlewares/public/assets/images/group_people_2.png +0 -0
- package/dist/middlewares/public/assets/images/group_people_3.png +0 -0
- package/dist/middlewares/public/assets/images/logo_login.png +0 -0
- package/dist/middlewares/public/index.d.ts +3 -0
- package/dist/middlewares/public/index.d.ts.map +1 -0
- package/dist/middlewares/public/index.html +66 -0
- package/dist/middlewares/public/index.js +91 -0
- package/dist/middlewares/public/index.js.map +1 -0
- package/dist/middlewares/public/index.mjs +85 -0
- package/dist/middlewares/public/index.mjs.map +1 -0
- package/dist/middlewares/public/serve-static.d.ts +4 -0
- package/dist/middlewares/public/serve-static.d.ts.map +1 -0
- package/dist/middlewares/public/serve-static.js +24 -0
- package/dist/middlewares/public/serve-static.js.map +1 -0
- package/dist/middlewares/public/serve-static.mjs +21 -0
- package/dist/middlewares/public/serve-static.mjs.map +1 -0
- package/dist/middlewares/query.d.ts +3 -0
- package/dist/middlewares/query.d.ts.map +1 -0
- package/dist/middlewares/query.js +40 -0
- package/dist/middlewares/query.js.map +1 -0
- package/dist/middlewares/query.mjs +38 -0
- package/dist/middlewares/query.mjs.map +1 -0
- package/dist/middlewares/response-time.d.ts +3 -0
- package/dist/middlewares/response-time.d.ts.map +1 -0
- package/dist/middlewares/response-time.js +12 -0
- package/dist/middlewares/response-time.js.map +1 -0
- package/dist/middlewares/response-time.mjs +12 -0
- package/dist/middlewares/response-time.mjs.map +1 -0
- package/dist/middlewares/responses.d.ts +6 -0
- package/dist/middlewares/responses.d.ts.map +1 -0
- package/dist/middlewares/responses.js +15 -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.d.ts +5 -0
- package/dist/middlewares/security.d.ts.map +1 -0
- package/dist/middlewares/security.js +50 -0
- package/dist/middlewares/security.js.map +1 -0
- package/dist/middlewares/security.mjs +48 -0
- package/dist/middlewares/security.mjs.map +1 -0
- package/dist/middlewares/session.d.ts +4 -0
- package/dist/middlewares/session.d.ts.map +1 -0
- package/dist/middlewares/session.js +30 -0
- package/dist/middlewares/session.js.map +1 -0
- package/dist/middlewares/session.mjs +28 -0
- package/dist/middlewares/session.mjs.map +1 -0
- package/dist/services/auth/index.d.ts +26 -0
- package/dist/services/auth/index.d.ts.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 +80 -0
- package/dist/services/auth/index.mjs.map +1 -0
- package/dist/services/content-api/index.d.ts +54 -0
- package/dist/services/content-api/index.d.ts.map +1 -0
- package/dist/services/content-api/index.js +59 -0
- package/dist/services/content-api/index.js.map +1 -0
- package/dist/services/content-api/index.mjs +58 -0
- package/dist/services/content-api/index.mjs.map +1 -0
- package/dist/services/content-api/permissions/engine.d.ts +5 -0
- package/dist/services/content-api/permissions/engine.d.ts.map +1 -0
- package/dist/services/content-api/permissions/engine.js +7 -0
- package/dist/services/content-api/permissions/engine.js.map +1 -0
- package/dist/services/content-api/permissions/engine.mjs +6 -0
- package/dist/services/content-api/permissions/engine.mjs.map +1 -0
- package/dist/services/content-api/permissions/index.d.ts +52 -0
- package/dist/services/content-api/permissions/index.d.ts.map +1 -0
- package/dist/services/content-api/permissions/index.js +87 -0
- package/dist/services/content-api/permissions/index.js.map +1 -0
- package/dist/services/content-api/permissions/index.mjs +86 -0
- package/dist/services/content-api/permissions/index.mjs.map +1 -0
- package/dist/services/content-api/permissions/providers/action.d.ts +20 -0
- package/dist/services/content-api/permissions/providers/action.d.ts.map +1 -0
- package/dist/services/content-api/permissions/providers/action.js +16 -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.d.ts +24 -0
- package/dist/services/content-api/permissions/providers/condition.d.ts.map +1 -0
- package/dist/services/content-api/permissions/providers/condition.js +16 -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/content-api/permissions/providers/index.d.ts +3 -0
- package/dist/services/content-api/permissions/providers/index.d.ts.map +1 -0
- package/dist/services/core-store.d.ts +53 -0
- package/dist/services/core-store.d.ts.map +1 -0
- package/dist/services/core-store.js +103 -0
- package/dist/services/core-store.js.map +1 -0
- package/dist/services/core-store.mjs +103 -0
- package/dist/services/core-store.mjs.map +1 -0
- package/dist/services/cron.d.ts +27 -0
- package/dist/services/cron.d.ts.map +1 -0
- package/dist/services/cron.js +63 -0
- package/dist/services/cron.js.map +1 -0
- package/dist/services/cron.mjs +64 -0
- package/dist/services/cron.mjs.map +1 -0
- package/dist/services/custom-fields.d.ts +4 -0
- package/dist/services/custom-fields.d.ts.map +1 -0
- package/dist/services/custom-fields.js +10 -0
- package/dist/services/custom-fields.js.map +1 -0
- package/dist/services/custom-fields.mjs +11 -0
- package/dist/services/custom-fields.mjs.map +1 -0
- package/dist/services/document-service/components.d.ts +2 -0
- package/dist/services/document-service/components.d.ts.map +1 -0
- package/dist/services/document-service/document-repository.d.ts +21 -0
- package/dist/services/document-service/document-repository.d.ts.map +1 -0
- package/dist/services/document-service/document-repository.js +132 -0
- package/dist/services/document-service/document-repository.js.map +1 -0
- package/dist/services/document-service/document-repository.mjs +132 -0
- package/dist/services/document-service/document-repository.mjs.map +1 -0
- package/dist/services/document-service/index.d.ts +8 -0
- package/dist/services/document-service/index.d.ts.map +1 -0
- package/dist/services/document-service/index.js +194 -0
- package/dist/services/document-service/index.js.map +1 -0
- package/dist/services/document-service/index.mjs +195 -0
- package/dist/services/document-service/index.mjs.map +1 -0
- package/dist/services/document-service/middlewares/defaults/draft-and-publish.d.ts +26 -0
- package/dist/services/document-service/middlewares/defaults/draft-and-publish.d.ts.map +1 -0
- package/dist/services/document-service/middlewares/defaults/draft-and-publish.js +58 -0
- package/dist/services/document-service/middlewares/defaults/draft-and-publish.js.map +1 -0
- package/dist/services/document-service/middlewares/defaults/draft-and-publish.mjs +58 -0
- package/dist/services/document-service/middlewares/defaults/draft-and-publish.mjs.map +1 -0
- package/dist/services/document-service/middlewares/defaults/index.d.ts +3 -0
- package/dist/services/document-service/middlewares/defaults/index.d.ts.map +1 -0
- package/dist/services/document-service/middlewares/defaults/index.js +82 -0
- package/dist/services/document-service/middlewares/defaults/index.js.map +1 -0
- package/dist/services/document-service/middlewares/defaults/index.mjs +82 -0
- package/dist/services/document-service/middlewares/defaults/index.mjs.map +1 -0
- package/dist/services/document-service/middlewares/defaults/locales.d.ts +18 -0
- package/dist/services/document-service/middlewares/defaults/locales.d.ts.map +1 -0
- package/dist/services/document-service/middlewares/defaults/locales.js +40 -0
- package/dist/services/document-service/middlewares/defaults/locales.js.map +1 -0
- package/dist/services/document-service/middlewares/defaults/locales.mjs +40 -0
- package/dist/services/document-service/middlewares/defaults/locales.mjs.map +1 -0
- package/dist/services/document-service/middlewares/index.d.ts +11 -0
- package/dist/services/document-service/middlewares/index.d.ts.map +1 -0
- package/dist/services/document-service/middlewares/index.js +59 -0
- package/dist/services/document-service/middlewares/index.js.map +1 -0
- package/dist/services/document-service/middlewares/index.mjs +59 -0
- package/dist/services/document-service/middlewares/index.mjs.map +1 -0
- package/dist/services/document-service/params.d.ts +2 -0
- package/dist/services/document-service/params.d.ts.map +1 -0
- package/dist/services/entity-service/attributes/index.d.ts +6 -0
- package/dist/services/entity-service/attributes/index.d.ts.map +1 -0
- package/dist/services/entity-service/attributes/index.js +22 -0
- package/dist/services/entity-service/attributes/index.js.map +1 -0
- package/dist/services/entity-service/attributes/index.mjs +22 -0
- package/dist/services/entity-service/attributes/index.mjs.map +1 -0
- package/dist/services/entity-service/attributes/transforms.d.ts +10 -0
- package/dist/services/entity-service/attributes/transforms.d.ts.map +1 -0
- package/dist/services/entity-service/attributes/transforms.js +20 -0
- package/dist/services/entity-service/attributes/transforms.js.map +1 -0
- package/dist/services/entity-service/attributes/transforms.mjs +19 -0
- package/dist/services/entity-service/attributes/transforms.mjs.map +1 -0
- package/dist/services/entity-service/components.d.ts +23 -0
- package/dist/services/entity-service/components.d.ts.map +1 -0
- package/dist/services/entity-service/components.js +384 -0
- package/dist/services/entity-service/components.js.map +1 -0
- package/dist/services/entity-service/components.mjs +382 -0
- package/dist/services/entity-service/components.mjs.map +1 -0
- package/dist/services/entity-service/index.d.ts +15 -0
- package/dist/services/entity-service/index.d.ts.map +1 -0
- package/dist/services/entity-service/index.js +328 -0
- package/dist/services/entity-service/index.js.map +1 -0
- package/dist/services/entity-service/index.mjs +326 -0
- package/dist/services/entity-service/index.mjs.map +1 -0
- package/dist/services/entity-service/params.d.ts +8 -0
- package/dist/services/entity-service/params.d.ts.map +1 -0
- package/dist/services/entity-service/params.js +8 -0
- package/dist/services/entity-service/params.js.map +1 -0
- package/dist/services/entity-service/params.mjs +8 -0
- package/dist/services/entity-service/params.mjs.map +1 -0
- package/dist/services/entity-validator/blocks-validator.d.ts +4 -0
- package/dist/services/entity-validator/blocks-validator.d.ts.map +1 -0
- package/dist/services/entity-validator/blocks-validator.js +107 -0
- package/dist/services/entity-validator/blocks-validator.js.map +1 -0
- package/dist/services/entity-validator/blocks-validator.mjs +108 -0
- package/dist/services/entity-validator/blocks-validator.mjs.map +1 -0
- package/dist/services/entity-validator/index.d.ts +8 -0
- package/dist/services/entity-validator/index.d.ts.map +1 -0
- package/dist/services/entity-validator/index.js +319 -0
- package/dist/services/entity-validator/index.js.map +1 -0
- package/dist/services/entity-validator/index.mjs +318 -0
- package/dist/services/entity-validator/index.mjs.map +1 -0
- package/dist/services/entity-validator/validators.d.ts +38 -0
- package/dist/services/entity-validator/validators.d.ts.map +1 -0
- package/dist/services/entity-validator/validators.js +117 -0
- package/dist/services/entity-validator/validators.js.map +1 -0
- package/dist/services/entity-validator/validators.mjs +115 -0
- package/dist/services/entity-validator/validators.mjs.map +1 -0
- package/dist/services/errors.d.ts +40 -0
- package/dist/services/errors.d.ts.map +1 -0
- package/dist/services/errors.js +76 -0
- package/dist/services/errors.js.map +1 -0
- package/dist/services/errors.mjs +74 -0
- package/dist/services/errors.mjs.map +1 -0
- package/dist/services/event-hub.d.ts +19 -0
- package/dist/services/event-hub.d.ts.map +1 -0
- package/dist/services/event-hub.js +67 -0
- package/dist/services/event-hub.js.map +1 -0
- package/dist/services/event-hub.mjs +68 -0
- package/dist/services/event-hub.mjs.map +1 -0
- package/dist/services/fs.d.ts +13 -0
- package/dist/services/fs.d.ts.map +1 -0
- package/dist/services/fs.js +51 -0
- package/dist/services/fs.js.map +1 -0
- package/dist/services/fs.mjs +49 -0
- package/dist/services/fs.mjs.map +1 -0
- package/dist/services/metrics/admin-user-hash.d.ts +7 -0
- package/dist/services/metrics/admin-user-hash.d.ts.map +1 -0
- package/dist/services/metrics/admin-user-hash.js +14 -0
- package/dist/services/metrics/admin-user-hash.js.map +1 -0
- package/dist/services/metrics/admin-user-hash.mjs +12 -0
- package/dist/services/metrics/admin-user-hash.mjs.map +1 -0
- package/dist/services/metrics/index.d.ts +14 -0
- package/dist/services/metrics/index.d.ts.map +1 -0
- package/dist/services/metrics/index.js +45 -0
- package/dist/services/metrics/index.js.map +1 -0
- package/dist/services/metrics/index.mjs +46 -0
- package/dist/services/metrics/index.mjs.map +1 -0
- package/dist/services/metrics/is-truthy.d.ts +3 -0
- package/dist/services/metrics/is-truthy.d.ts.map +1 -0
- package/dist/services/metrics/is-truthy.js +9 -0
- package/dist/services/metrics/is-truthy.js.map +1 -0
- package/dist/services/metrics/is-truthy.mjs +8 -0
- package/dist/services/metrics/is-truthy.mjs.map +1 -0
- package/dist/services/metrics/middleware.d.ts +7 -0
- package/dist/services/metrics/middleware.d.ts.map +1 -0
- package/dist/services/metrics/middleware.js +25 -0
- package/dist/services/metrics/middleware.js.map +1 -0
- package/dist/services/metrics/middleware.mjs +26 -0
- package/dist/services/metrics/middleware.mjs.map +1 -0
- package/dist/services/metrics/rate-limiter.d.ts +7 -0
- package/dist/services/metrics/rate-limiter.d.ts.map +1 -0
- package/dist/services/metrics/rate-limiter.js +21 -0
- package/dist/services/metrics/rate-limiter.js.map +1 -0
- package/dist/services/metrics/rate-limiter.mjs +22 -0
- package/dist/services/metrics/rate-limiter.mjs.map +1 -0
- package/dist/services/metrics/sender.d.ts +13 -0
- package/dist/services/metrics/sender.d.ts.map +1 -0
- package/dist/services/metrics/sender.js +76 -0
- package/dist/services/metrics/sender.js.map +1 -0
- package/dist/services/metrics/sender.mjs +70 -0
- package/dist/services/metrics/sender.mjs.map +1 -0
- package/dist/services/request-context.d.ts +7 -0
- package/dist/services/request-context.d.ts.map +1 -0
- package/dist/services/request-context.js +13 -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.d.ts +11 -0
- package/dist/services/server/admin-api.d.ts.map +1 -0
- package/dist/services/server/admin-api.js +13 -0
- package/dist/services/server/admin-api.js.map +1 -0
- package/dist/services/server/admin-api.mjs +13 -0
- package/dist/services/server/admin-api.mjs.map +1 -0
- package/dist/services/server/api.d.ts +15 -0
- package/dist/services/server/api.d.ts.map +1 -0
- package/dist/services/server/api.js +30 -0
- package/dist/services/server/api.js.map +1 -0
- package/dist/services/server/api.mjs +28 -0
- package/dist/services/server/api.mjs.map +1 -0
- package/dist/services/server/compose-endpoint.d.ts +7 -0
- package/dist/services/server/compose-endpoint.d.ts.map +1 -0
- package/dist/services/server/compose-endpoint.js +115 -0
- package/dist/services/server/compose-endpoint.js.map +1 -0
- package/dist/services/server/compose-endpoint.mjs +114 -0
- package/dist/services/server/compose-endpoint.mjs.map +1 -0
- package/dist/services/server/content-api.d.ts +11 -0
- package/dist/services/server/content-api.d.ts.map +1 -0
- package/dist/services/server/content-api.js +12 -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.d.ts +10 -0
- package/dist/services/server/http-server.d.ts.map +1 -0
- package/dist/services/server/http-server.js +50 -0
- package/dist/services/server/http-server.js.map +1 -0
- package/dist/services/server/http-server.mjs +48 -0
- package/dist/services/server/http-server.mjs.map +1 -0
- package/dist/services/server/index.d.ts +4 -0
- package/dist/services/server/index.d.ts.map +1 -0
- package/dist/services/server/index.js +88 -0
- package/dist/services/server/index.js.map +1 -0
- package/dist/services/server/index.mjs +86 -0
- package/dist/services/server/index.mjs.map +1 -0
- package/dist/services/server/koa.d.ts +16 -0
- package/dist/services/server/koa.d.ts.map +1 -0
- package/dist/services/server/koa.js +52 -0
- package/dist/services/server/koa.js.map +1 -0
- package/dist/services/server/koa.mjs +48 -0
- package/dist/services/server/koa.mjs.map +1 -0
- package/dist/services/server/middleware.d.ts +15 -0
- package/dist/services/server/middleware.d.ts.map +1 -0
- package/dist/services/server/middleware.js +92 -0
- package/dist/services/server/middleware.js.map +1 -0
- package/dist/services/server/middleware.mjs +90 -0
- package/dist/services/server/middleware.mjs.map +1 -0
- package/dist/services/server/policy.d.ts +4 -0
- package/dist/services/server/policy.d.ts.map +1 -0
- package/dist/services/server/policy.js +20 -0
- package/dist/services/server/policy.js.map +1 -0
- package/dist/services/server/policy.mjs +20 -0
- package/dist/services/server/policy.mjs.map +1 -0
- package/dist/services/server/register-middlewares.d.ts +7 -0
- package/dist/services/server/register-middlewares.d.ts.map +1 -0
- package/dist/services/server/register-middlewares.js +72 -0
- package/dist/services/server/register-middlewares.js.map +1 -0
- package/dist/services/server/register-middlewares.mjs +73 -0
- package/dist/services/server/register-middlewares.mjs.map +1 -0
- package/dist/services/server/register-routes.d.ts +7 -0
- package/dist/services/server/register-routes.d.ts.map +1 -0
- package/dist/services/server/register-routes.js +76 -0
- package/dist/services/server/register-routes.js.map +1 -0
- package/dist/services/server/register-routes.mjs +75 -0
- package/dist/services/server/register-routes.mjs.map +1 -0
- package/dist/services/server/routing.d.ts +34 -0
- package/dist/services/server/routing.d.ts.map +1 -0
- package/dist/services/server/routing.js +91 -0
- package/dist/services/server/routing.js.map +1 -0
- package/dist/services/server/routing.mjs +89 -0
- package/dist/services/server/routing.mjs.map +1 -0
- package/dist/services/utils/dynamic-zones.d.ts +3 -0
- package/dist/services/utils/dynamic-zones.d.ts.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 +17 -0
- package/dist/services/utils/dynamic-zones.mjs.map +1 -0
- package/dist/services/utils/upload-files.d.ts +8 -0
- package/dist/services/utils/upload-files.d.ts.map +1 -0
- package/dist/services/utils/upload-files.js +64 -0
- package/dist/services/utils/upload-files.js.map +1 -0
- package/dist/services/utils/upload-files.mjs +63 -0
- package/dist/services/utils/upload-files.mjs.map +1 -0
- package/dist/services/webhook-runner.d.ts +40 -0
- package/dist/services/webhook-runner.d.ts.map +1 -0
- package/dist/services/webhook-runner.js +133 -0
- package/dist/services/webhook-runner.js.map +1 -0
- package/dist/services/webhook-runner.mjs +131 -0
- package/dist/services/webhook-runner.mjs.map +1 -0
- package/dist/services/webhook-store.d.ts +50 -0
- package/dist/services/webhook-store.d.ts.map +1 -0
- package/dist/services/webhook-store.js +100 -0
- package/dist/services/webhook-store.js.map +1 -0
- package/dist/services/webhook-store.mjs +100 -0
- package/dist/services/webhook-store.mjs.map +1 -0
- package/dist/services/worker-queue.d.ts +20 -0
- package/dist/services/worker-queue.d.ts.map +1 -0
- package/dist/services/worker-queue.js +56 -0
- package/dist/services/worker-queue.js.map +1 -0
- package/dist/services/worker-queue.mjs +55 -0
- package/dist/services/worker-queue.mjs.map +1 -0
- package/dist/utils/addSlash.d.ts +3 -0
- package/dist/utils/addSlash.d.ts.map +1 -0
- package/dist/utils/convert-custom-field-type.d.ts +4 -0
- package/dist/utils/convert-custom-field-type.d.ts.map +1 -0
- package/dist/utils/convert-custom-field-type.js +23 -0
- package/dist/utils/convert-custom-field-type.js.map +1 -0
- package/dist/utils/convert-custom-field-type.mjs +24 -0
- package/dist/utils/convert-custom-field-type.mjs.map +1 -0
- package/dist/utils/cron.d.ts +8 -0
- package/dist/utils/cron.d.ts.map +1 -0
- package/dist/utils/cron.js +38 -0
- package/dist/utils/cron.js.map +1 -0
- package/dist/utils/cron.mjs +38 -0
- package/dist/utils/cron.mjs.map +1 -0
- package/dist/utils/ee.d.ts +3 -0
- package/dist/utils/ee.d.ts.map +1 -0
- package/dist/utils/ee.js +4 -0
- package/dist/utils/ee.js.map +1 -0
- package/dist/utils/ee.mjs +5 -0
- package/dist/utils/ee.mjs.map +1 -0
- package/dist/utils/fetch.d.ts +3 -0
- package/dist/utils/fetch.d.ts.map +1 -0
- package/dist/utils/fetch.js +20 -0
- package/dist/utils/fetch.js.map +1 -0
- package/dist/utils/fetch.mjs +20 -0
- package/dist/utils/fetch.mjs.map +1 -0
- package/dist/utils/get-dirs.d.ts +10 -0
- package/dist/utils/get-dirs.d.ts.map +1 -0
- package/dist/utils/get-dirs.js +29 -0
- package/dist/utils/get-dirs.js.map +1 -0
- package/dist/utils/get-dirs.mjs +30 -0
- package/dist/utils/get-dirs.mjs.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/is-initialized.d.ts +6 -0
- package/dist/utils/is-initialized.d.ts.map +1 -0
- package/dist/utils/is-initialized.js +15 -0
- package/dist/utils/is-initialized.js.map +1 -0
- package/dist/utils/is-initialized.mjs +16 -0
- package/dist/utils/is-initialized.mjs.map +1 -0
- package/dist/utils/lifecycles.d.ts +6 -0
- package/dist/utils/lifecycles.d.ts.map +1 -0
- package/dist/utils/lifecycles.js +9 -0
- package/dist/utils/lifecycles.js.map +1 -0
- package/dist/utils/lifecycles.mjs +9 -0
- package/dist/utils/lifecycles.mjs.map +1 -0
- package/dist/utils/open-browser.d.ts +5 -0
- package/dist/utils/open-browser.d.ts.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 +10 -0
- package/dist/utils/open-browser.mjs.map +1 -0
- package/dist/utils/signals.d.ts +3 -0
- package/dist/utils/signals.d.ts.map +1 -0
- package/dist/utils/signals.js +17 -0
- package/dist/utils/signals.js.map +1 -0
- package/dist/utils/signals.mjs +17 -0
- package/dist/utils/signals.mjs.map +1 -0
- package/dist/utils/startup-logger.d.ts +11 -0
- package/dist/utils/startup-logger.d.ts.map +1 -0
- package/dist/utils/startup-logger.js +75 -0
- package/dist/utils/startup-logger.js.map +1 -0
- package/dist/utils/startup-logger.mjs +72 -0
- package/dist/utils/startup-logger.mjs.map +1 -0
- package/dist/utils/transform-content-types-to-models.d.ts +6 -0
- package/dist/utils/transform-content-types-to-models.d.ts.map +1 -0
- package/dist/utils/transform-content-types-to-models.js +50 -0
- package/dist/utils/transform-content-types-to-models.js.map +1 -0
- package/dist/utils/transform-content-types-to-models.mjs +50 -0
- package/dist/utils/transform-content-types-to-models.mjs.map +1 -0
- package/dist/utils/update-notifier/index.d.ts +9 -0
- package/dist/utils/update-notifier/index.d.ts.map +1 -0
- package/dist/utils/update-notifier/index.js +82 -0
- package/dist/utils/update-notifier/index.js.map +1 -0
- package/dist/utils/update-notifier/index.mjs +76 -0
- package/dist/utils/update-notifier/index.mjs.map +1 -0
- package/package.json +142 -0
- package/resources/key.pub +9 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single-type.mjs","sources":["../../../src/core-api/service/single-type.ts"],"sourcesContent":["import { propOr } from 'lodash/fp';\nimport type { CoreApi, Schema, Common } from '@strapi/types';\nimport { errors, contentTypes as contentTypeUtils } from '@strapi/utils';\nimport { getFetchParams } from './get-fetch-params';\n\nconst {\n constants: { PUBLISHED_AT_ATTRIBUTE },\n} = contentTypeUtils;\n\nconst setPublishedAt = (data: Record<string, unknown>) => {\n data[PUBLISHED_AT_ATTRIBUTE] = propOr(new Date(), PUBLISHED_AT_ATTRIBUTE, data);\n};\n\n/**\n * Returns a single type service to handle default core-api actions\n */\nconst createSingleTypeService = ({\n contentType,\n}: {\n contentType: Schema.SingleType;\n}): CoreApi.Service.SingleType => {\n const { uid } = contentType;\n\n return <any>{\n getFetchParams,\n /**\n * Returns singleType content\n */\n find(params = {}) {\n return (\n strapi.entityService?.findMany(uid as Common.UID.SingleType, this.getFetchParams(params)) ??\n null\n );\n },\n\n /**\n * Creates or updates a singleType content\n *\n * @return {Promise}\n */\n async createOrUpdate({ data, ...params } = { data: {} }) {\n const entity = await this.find({ ...params, publicationState: 'preview' });\n\n if (!entity) {\n const count = await strapi.query(uid).count();\n if (count >= 1) {\n throw new errors.ValidationError('singleType.alreadyExists');\n }\n\n setPublishedAt(data);\n\n return strapi.entityService?.create(uid, { ...params, data });\n }\n\n return strapi.entityService?.update(uid, entity.id, { ...params, data });\n },\n\n /**\n * Deletes the singleType content\n *\n * @return {Promise}\n */\n async delete(params = {}) {\n const entity = await this.find(params);\n\n if (!entity) return;\n\n return strapi.entityService?.delete(uid, entity.id);\n },\n };\n};\n\nexport default createSingleTypeService;\n"],"names":["contentTypeUtils"],"mappings":";;;AAKA,MAAM;AAAA,EACJ,WAAW,EAAE,uBAAuB;AACtC,IAAIA;AAEJ,MAAM,iBAAiB,CAAC,SAAkC;AACxD,OAAK,sBAAsB,IAAI,2BAAW,QAAQ,wBAAwB,IAAI;AAChF;AAKA,MAAM,0BAA0B,CAAC;AAAA,EAC/B;AACF,MAEkC;AAC1B,QAAA,EAAE,IAAQ,IAAA;AAEJ,SAAA;AAAA,IACV;AAAA;AAAA;AAAA;AAAA,IAIA,KAAK,SAAS,IAAI;AAEd,aAAA,OAAO,eAAe,SAAS,KAA8B,KAAK,eAAe,MAAM,CAAC,KACxF;AAAA,IAEJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,MAAM,eAAe,EAAE,MAAM,GAAG,OAAO,IAAI,EAAE,MAAM,CAAA,KAAM;AACjD,YAAA,SAAS,MAAM,KAAK,KAAK,EAAE,GAAG,QAAQ,kBAAkB,UAAA,CAAW;AAEzE,UAAI,CAAC,QAAQ;AACX,cAAM,QAAQ,MAAM,OAAO,MAAM,GAAG,EAAE;AACtC,YAAI,SAAS,GAAG;AACR,gBAAA,IAAI,OAAO,gBAAgB,0BAA0B;AAAA,QAC7D;AAEA,uBAAe,IAAI;AAEZ,eAAA,OAAO,eAAe,OAAO,KAAK,EAAE,GAAG,QAAQ,MAAM;AAAA,MAC9D;AAEO,aAAA,OAAO,eAAe,OAAO,KAAK,OAAO,IAAI,EAAE,GAAG,QAAQ,KAAA,CAAM;AAAA,IACzE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,MAAM,OAAO,SAAS,IAAI;AACxB,YAAM,SAAS,MAAM,KAAK,KAAK,MAAM;AAErC,UAAI,CAAC;AAAQ;AAEb,aAAO,OAAO,eAAe,OAAO,KAAK,OAAO,EAAE;AAAA,IACpD;AAAA,EAAA;AAEJ;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Strapi } from '@strapi/types';
|
|
2
|
+
declare const _default: Readonly<{
|
|
3
|
+
init: (licenseDir: string, logger?: import("winston").Logger | undefined) => void;
|
|
4
|
+
checkLicense: ({ strapi }: {
|
|
5
|
+
strapi: Strapi;
|
|
6
|
+
}) => Promise<void>;
|
|
7
|
+
readonly isEE: boolean;
|
|
8
|
+
readonly seats: number | undefined;
|
|
9
|
+
features: Readonly<{
|
|
10
|
+
list: () => {
|
|
11
|
+
name: string;
|
|
12
|
+
}[];
|
|
13
|
+
get: (featureName: string) => {
|
|
14
|
+
name: string;
|
|
15
|
+
} | undefined;
|
|
16
|
+
isEnabled: (featureName: string) => boolean;
|
|
17
|
+
}>;
|
|
18
|
+
}>;
|
|
19
|
+
export default _default;
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ee/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;;;;;;;;;;;;;;;iCAgPf,MAAM;;;AAfnC,wBAiBG"}
|
package/dist/ee/index.js
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const _ = require("lodash/fp");
|
|
3
|
+
const license = require("./license.js");
|
|
4
|
+
const cron = require("../utils/cron.js");
|
|
5
|
+
const ONE_MINUTE = 1e3 * 60;
|
|
6
|
+
const ee = {
|
|
7
|
+
enabled: false,
|
|
8
|
+
licenseInfo: {}
|
|
9
|
+
};
|
|
10
|
+
const disable = (message) => {
|
|
11
|
+
const shouldEmitEvent = ee.enabled !== false;
|
|
12
|
+
ee.logger?.warn(`${message} Switching to CE.`);
|
|
13
|
+
ee.licenseInfo = _.pick("licenseKey", ee.licenseInfo);
|
|
14
|
+
ee.enabled = false;
|
|
15
|
+
if (shouldEmitEvent) {
|
|
16
|
+
strapi.eventHub.emit("ee.disable");
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const enable = () => {
|
|
20
|
+
const shouldEmitEvent = ee.enabled !== true;
|
|
21
|
+
ee.enabled = true;
|
|
22
|
+
if (shouldEmitEvent) {
|
|
23
|
+
strapi.eventHub.emit("ee.enable");
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
let initialized = false;
|
|
27
|
+
const init = (licenseDir, logger) => {
|
|
28
|
+
if (initialized) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
initialized = true;
|
|
32
|
+
ee.logger = logger;
|
|
33
|
+
if (process.env.STRAPI_DISABLE_EE?.toLowerCase() === "true") {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const license$1 = process.env.STRAPI_LICENSE || license.readLicense(licenseDir);
|
|
38
|
+
if (license$1) {
|
|
39
|
+
ee.licenseInfo = license.verifyLicense(license$1);
|
|
40
|
+
enable();
|
|
41
|
+
}
|
|
42
|
+
} catch (error) {
|
|
43
|
+
if (error instanceof Error) {
|
|
44
|
+
disable(error.message);
|
|
45
|
+
} else {
|
|
46
|
+
disable("Invalid license.");
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
const onlineUpdate = async ({ strapi: strapi2 }) => {
|
|
51
|
+
const { get: get2, commit, rollback } = await strapi2.db?.transaction();
|
|
52
|
+
const transaction = get2();
|
|
53
|
+
try {
|
|
54
|
+
const storedInfo = await strapi2.db?.queryBuilder("strapi::core-store").where({ key: "ee_information" }).select("value").first().transacting(transaction).forUpdate().execute().then((result2) => result2 ? JSON.parse(result2.value) : result2);
|
|
55
|
+
const shouldContactRegistry = (storedInfo?.lastCheckAt ?? 0) < Date.now() - ONE_MINUTE;
|
|
56
|
+
const result = { lastCheckAt: Date.now() };
|
|
57
|
+
const fallback = (error) => {
|
|
58
|
+
if (error instanceof license.LicenseCheckError && error.shouldFallback && storedInfo?.license) {
|
|
59
|
+
ee.logger?.warn(
|
|
60
|
+
`${error.message} The last stored one will be used as a potential fallback.`
|
|
61
|
+
);
|
|
62
|
+
return storedInfo.license;
|
|
63
|
+
}
|
|
64
|
+
result.error = error.message;
|
|
65
|
+
disable(error.message);
|
|
66
|
+
};
|
|
67
|
+
if (!ee?.licenseInfo?.licenseKey) {
|
|
68
|
+
throw new Error("Missing license key.");
|
|
69
|
+
}
|
|
70
|
+
const license$1 = shouldContactRegistry ? await license.fetchLicense({ strapi: strapi2 }, ee.licenseInfo.licenseKey, strapi2.config.get("uuid")).catch(
|
|
71
|
+
fallback
|
|
72
|
+
) : storedInfo.license;
|
|
73
|
+
if (license$1) {
|
|
74
|
+
try {
|
|
75
|
+
const newLicenseInfo = license.verifyLicense(license$1);
|
|
76
|
+
const licenseInfoChanged = !_.isEqual(newLicenseInfo.features, ee.licenseInfo.features) || newLicenseInfo.seats !== ee.licenseInfo.seats || newLicenseInfo.type !== ee.licenseInfo.type;
|
|
77
|
+
ee.licenseInfo = newLicenseInfo;
|
|
78
|
+
const wasEnabled = ee.enabled;
|
|
79
|
+
validateInfo();
|
|
80
|
+
if (licenseInfoChanged && wasEnabled) {
|
|
81
|
+
strapi2.eventHub.emit("ee.update");
|
|
82
|
+
}
|
|
83
|
+
} catch (error) {
|
|
84
|
+
if (error instanceof Error) {
|
|
85
|
+
disable(error.message);
|
|
86
|
+
} else {
|
|
87
|
+
disable("Invalid license.");
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
} else if (!shouldContactRegistry) {
|
|
91
|
+
disable(storedInfo.error);
|
|
92
|
+
}
|
|
93
|
+
if (shouldContactRegistry) {
|
|
94
|
+
result.license = license$1 ?? null;
|
|
95
|
+
const query = strapi2.db.queryBuilder("strapi::core-store").transacting(transaction);
|
|
96
|
+
if (!storedInfo) {
|
|
97
|
+
query.insert({ key: "ee_information", value: JSON.stringify(result) });
|
|
98
|
+
} else {
|
|
99
|
+
query.update({ value: JSON.stringify(result) }).where({ key: "ee_information" });
|
|
100
|
+
}
|
|
101
|
+
await query.execute();
|
|
102
|
+
}
|
|
103
|
+
await commit();
|
|
104
|
+
} catch (error) {
|
|
105
|
+
await rollback();
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const validateInfo = () => {
|
|
109
|
+
if (typeof ee.licenseInfo.expireAt === "undefined") {
|
|
110
|
+
throw new Error("Missing license key.");
|
|
111
|
+
}
|
|
112
|
+
const expirationTime = new Date(ee.licenseInfo.expireAt).getTime();
|
|
113
|
+
if (expirationTime < (/* @__PURE__ */ new Date()).getTime()) {
|
|
114
|
+
return disable("License expired.");
|
|
115
|
+
}
|
|
116
|
+
enable();
|
|
117
|
+
};
|
|
118
|
+
const checkLicense = async ({ strapi: strapi2 }) => {
|
|
119
|
+
const shouldStayOffline = ee.licenseInfo.type === "gold" && // This env variable support is temporarily used to ease the migration between online vs offline
|
|
120
|
+
process.env.STRAPI_DISABLE_LICENSE_PING?.toLowerCase() === "true";
|
|
121
|
+
if (!shouldStayOffline) {
|
|
122
|
+
await onlineUpdate({ strapi: strapi2 });
|
|
123
|
+
strapi2.cron.add({ [cron.shiftCronExpression("0 0 */12 * * *")]: onlineUpdate });
|
|
124
|
+
} else {
|
|
125
|
+
if (!ee.licenseInfo.expireAt) {
|
|
126
|
+
return disable("Your license does not have offline support.");
|
|
127
|
+
}
|
|
128
|
+
validateInfo();
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
const list = () => {
|
|
132
|
+
return ee.licenseInfo.features?.map(
|
|
133
|
+
(feature) => typeof feature === "object" ? feature : { name: feature }
|
|
134
|
+
) || [];
|
|
135
|
+
};
|
|
136
|
+
const get = (featureName) => list().find((feature) => feature.name === featureName);
|
|
137
|
+
const EE = Object.freeze({
|
|
138
|
+
init,
|
|
139
|
+
checkLicense,
|
|
140
|
+
get isEE() {
|
|
141
|
+
return ee.enabled;
|
|
142
|
+
},
|
|
143
|
+
get seats() {
|
|
144
|
+
return ee.licenseInfo.seats;
|
|
145
|
+
},
|
|
146
|
+
features: Object.freeze({
|
|
147
|
+
list,
|
|
148
|
+
get,
|
|
149
|
+
isEnabled: (featureName) => get(featureName) !== void 0
|
|
150
|
+
})
|
|
151
|
+
});
|
|
152
|
+
module.exports = EE;
|
|
153
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/ee/index.ts"],"sourcesContent":["import { pick, isEqual } from 'lodash/fp';\nimport type { Logger } from '@strapi/logger';\nimport type { Strapi } from '@strapi/types';\n\nimport { readLicense, verifyLicense, fetchLicense, LicenseCheckError } from './license';\nimport { shiftCronExpression } from '../utils/cron';\n\nconst ONE_MINUTE = 1000 * 60;\n\ninterface EE {\n enabled: boolean;\n licenseInfo: {\n licenseKey?: string;\n features?: Array<{ name: string } | string>;\n expireAt?: string;\n seats?: number;\n type?: string;\n };\n logger?: Logger;\n}\n\nconst ee: EE = {\n enabled: false,\n licenseInfo: {},\n};\n\nconst disable = (message: string) => {\n // Prevent emitting ee.disable if it was already disabled\n const shouldEmitEvent = ee.enabled !== false;\n\n ee.logger?.warn(`${message} Switching to CE.`);\n // Only keep the license key for potential re-enabling during a later check\n ee.licenseInfo = pick('licenseKey', ee.licenseInfo);\n\n ee.enabled = false;\n\n if (shouldEmitEvent) {\n // Notify EE features that they should be disabled\n strapi.eventHub.emit('ee.disable');\n }\n};\n\nconst enable = () => {\n // Prevent emitting ee.enable if it was already enabled\n const shouldEmitEvent = ee.enabled !== true;\n\n ee.enabled = true;\n\n if (shouldEmitEvent) {\n // Notify EE features that they should be disabled\n strapi.eventHub.emit('ee.enable');\n }\n};\n\nlet initialized = false;\n\n/**\n * Optimistically enable EE if the format of the license is valid, only run once.\n */\nconst init = (licenseDir: string, logger?: Logger) => {\n if (initialized) {\n return;\n }\n\n initialized = true;\n ee.logger = logger;\n\n if (process.env.STRAPI_DISABLE_EE?.toLowerCase() === 'true') {\n return;\n }\n\n try {\n const license = process.env.STRAPI_LICENSE || readLicense(licenseDir);\n\n if (license) {\n ee.licenseInfo = verifyLicense(license);\n enable();\n }\n } catch (error) {\n if (error instanceof Error) {\n disable(error.message);\n } else {\n disable('Invalid license.');\n }\n }\n};\n\n/**\n * Contact the license registry to update the license to its latest state.\n *\n * Store the result in database to avoid unecessary requests, and will fallback to that in case of a network failure.\n */\nconst onlineUpdate = async ({ strapi }: { strapi: Strapi }) => {\n const { get, commit, rollback } = (await strapi.db?.transaction()) as any;\n const transaction = get();\n\n try {\n const storedInfo = await strapi.db\n ?.queryBuilder('strapi::core-store')\n .where({ key: 'ee_information' })\n .select('value')\n .first()\n .transacting(transaction)\n .forUpdate()\n .execute()\n .then((result: any) => (result ? JSON.parse(result.value) : result));\n\n const shouldContactRegistry = (storedInfo?.lastCheckAt ?? 0) < Date.now() - ONE_MINUTE;\n const result: {\n license?: string | null;\n error?: string;\n lastCheckAt?: number;\n } = { lastCheckAt: Date.now() };\n\n const fallback = (error: Error) => {\n if (error instanceof LicenseCheckError && error.shouldFallback && storedInfo?.license) {\n ee.logger?.warn(\n `${error.message} The last stored one will be used as a potential fallback.`\n );\n return storedInfo.license;\n }\n\n result.error = error.message;\n disable(error.message);\n };\n\n if (!ee?.licenseInfo?.licenseKey) {\n throw new Error('Missing license key.');\n }\n\n const license = shouldContactRegistry\n ? await fetchLicense({ strapi }, ee.licenseInfo.licenseKey, strapi.config.get('uuid')).catch(\n fallback\n )\n : storedInfo.license;\n\n if (license) {\n try {\n // Verify license and check if its info changed\n const newLicenseInfo = verifyLicense(license);\n const licenseInfoChanged =\n !isEqual(newLicenseInfo.features, ee.licenseInfo.features) ||\n newLicenseInfo.seats !== ee.licenseInfo.seats ||\n newLicenseInfo.type !== ee.licenseInfo.type;\n\n // Store the new license info\n ee.licenseInfo = newLicenseInfo;\n const wasEnabled = ee.enabled;\n validateInfo();\n\n // Notify EE features\n if (licenseInfoChanged && wasEnabled) {\n strapi.eventHub.emit('ee.update');\n }\n } catch (error) {\n if (error instanceof Error) {\n disable(error.message);\n } else {\n disable('Invalid license.');\n }\n }\n } else if (!shouldContactRegistry) {\n disable(storedInfo.error);\n }\n\n if (shouldContactRegistry) {\n result.license = license ?? null;\n const query = strapi.db!.queryBuilder('strapi::core-store').transacting(transaction);\n\n if (!storedInfo) {\n query.insert({ key: 'ee_information', value: JSON.stringify(result) });\n } else {\n query.update({ value: JSON.stringify(result) }).where({ key: 'ee_information' });\n }\n\n await query.execute();\n }\n\n await commit();\n } catch (error) {\n // Example of errors: SQLite does not support FOR UPDATE\n await rollback();\n }\n};\n\nconst validateInfo = () => {\n if (typeof ee.licenseInfo.expireAt === 'undefined') {\n throw new Error('Missing license key.');\n }\n\n const expirationTime = new Date(ee.licenseInfo.expireAt).getTime();\n\n if (expirationTime < new Date().getTime()) {\n return disable('License expired.');\n }\n\n enable();\n};\n\nconst checkLicense = async ({ strapi }: { strapi: Strapi }) => {\n const shouldStayOffline =\n ee.licenseInfo.type === 'gold' &&\n // This env variable support is temporarily used to ease the migration between online vs offline\n process.env.STRAPI_DISABLE_LICENSE_PING?.toLowerCase() === 'true';\n\n if (!shouldStayOffline) {\n await onlineUpdate({ strapi });\n strapi.cron.add({ [shiftCronExpression('0 0 */12 * * *')]: onlineUpdate });\n } else {\n if (!ee.licenseInfo.expireAt) {\n return disable('Your license does not have offline support.');\n }\n\n validateInfo();\n }\n};\n\nconst list = () => {\n return (\n ee.licenseInfo.features?.map((feature) =>\n typeof feature === 'object' ? feature : { name: feature }\n ) || []\n );\n};\n\nconst get = (featureName: string) => list().find((feature) => feature.name === featureName);\n\nexport default Object.freeze({\n init,\n checkLicense,\n\n get isEE() {\n return ee.enabled;\n },\n\n get seats() {\n return ee.licenseInfo.seats;\n },\n\n features: Object.freeze({\n list,\n get,\n isEnabled: (featureName: string) => get(featureName) !== undefined,\n }),\n});\n"],"names":["pick","license","readLicense","verifyLicense","strapi","get","result","LicenseCheckError","fetchLicense","isEqual","shiftCronExpression"],"mappings":"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"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { pick, isEqual } from "lodash/fp";
|
|
2
|
+
import { readLicense, verifyLicense, LicenseCheckError, fetchLicense } from "./license.mjs";
|
|
3
|
+
import { shiftCronExpression } from "../utils/cron.mjs";
|
|
4
|
+
const ONE_MINUTE = 1e3 * 60;
|
|
5
|
+
const ee = {
|
|
6
|
+
enabled: false,
|
|
7
|
+
licenseInfo: {}
|
|
8
|
+
};
|
|
9
|
+
const disable = (message) => {
|
|
10
|
+
const shouldEmitEvent = ee.enabled !== false;
|
|
11
|
+
ee.logger?.warn(`${message} Switching to CE.`);
|
|
12
|
+
ee.licenseInfo = pick("licenseKey", ee.licenseInfo);
|
|
13
|
+
ee.enabled = false;
|
|
14
|
+
if (shouldEmitEvent) {
|
|
15
|
+
strapi.eventHub.emit("ee.disable");
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
const enable = () => {
|
|
19
|
+
const shouldEmitEvent = ee.enabled !== true;
|
|
20
|
+
ee.enabled = true;
|
|
21
|
+
if (shouldEmitEvent) {
|
|
22
|
+
strapi.eventHub.emit("ee.enable");
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
let initialized = false;
|
|
26
|
+
const init = (licenseDir, logger) => {
|
|
27
|
+
if (initialized) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
initialized = true;
|
|
31
|
+
ee.logger = logger;
|
|
32
|
+
if (process.env.STRAPI_DISABLE_EE?.toLowerCase() === "true") {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const license = process.env.STRAPI_LICENSE || readLicense(licenseDir);
|
|
37
|
+
if (license) {
|
|
38
|
+
ee.licenseInfo = verifyLicense(license);
|
|
39
|
+
enable();
|
|
40
|
+
}
|
|
41
|
+
} catch (error) {
|
|
42
|
+
if (error instanceof Error) {
|
|
43
|
+
disable(error.message);
|
|
44
|
+
} else {
|
|
45
|
+
disable("Invalid license.");
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const onlineUpdate = async ({ strapi: strapi2 }) => {
|
|
50
|
+
const { get: get2, commit, rollback } = await strapi2.db?.transaction();
|
|
51
|
+
const transaction = get2();
|
|
52
|
+
try {
|
|
53
|
+
const storedInfo = await strapi2.db?.queryBuilder("strapi::core-store").where({ key: "ee_information" }).select("value").first().transacting(transaction).forUpdate().execute().then((result2) => result2 ? JSON.parse(result2.value) : result2);
|
|
54
|
+
const shouldContactRegistry = (storedInfo?.lastCheckAt ?? 0) < Date.now() - ONE_MINUTE;
|
|
55
|
+
const result = { lastCheckAt: Date.now() };
|
|
56
|
+
const fallback = (error) => {
|
|
57
|
+
if (error instanceof LicenseCheckError && error.shouldFallback && storedInfo?.license) {
|
|
58
|
+
ee.logger?.warn(
|
|
59
|
+
`${error.message} The last stored one will be used as a potential fallback.`
|
|
60
|
+
);
|
|
61
|
+
return storedInfo.license;
|
|
62
|
+
}
|
|
63
|
+
result.error = error.message;
|
|
64
|
+
disable(error.message);
|
|
65
|
+
};
|
|
66
|
+
if (!ee?.licenseInfo?.licenseKey) {
|
|
67
|
+
throw new Error("Missing license key.");
|
|
68
|
+
}
|
|
69
|
+
const license = shouldContactRegistry ? await fetchLicense({ strapi: strapi2 }, ee.licenseInfo.licenseKey, strapi2.config.get("uuid")).catch(
|
|
70
|
+
fallback
|
|
71
|
+
) : storedInfo.license;
|
|
72
|
+
if (license) {
|
|
73
|
+
try {
|
|
74
|
+
const newLicenseInfo = verifyLicense(license);
|
|
75
|
+
const licenseInfoChanged = !isEqual(newLicenseInfo.features, ee.licenseInfo.features) || newLicenseInfo.seats !== ee.licenseInfo.seats || newLicenseInfo.type !== ee.licenseInfo.type;
|
|
76
|
+
ee.licenseInfo = newLicenseInfo;
|
|
77
|
+
const wasEnabled = ee.enabled;
|
|
78
|
+
validateInfo();
|
|
79
|
+
if (licenseInfoChanged && wasEnabled) {
|
|
80
|
+
strapi2.eventHub.emit("ee.update");
|
|
81
|
+
}
|
|
82
|
+
} catch (error) {
|
|
83
|
+
if (error instanceof Error) {
|
|
84
|
+
disable(error.message);
|
|
85
|
+
} else {
|
|
86
|
+
disable("Invalid license.");
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
} else if (!shouldContactRegistry) {
|
|
90
|
+
disable(storedInfo.error);
|
|
91
|
+
}
|
|
92
|
+
if (shouldContactRegistry) {
|
|
93
|
+
result.license = license ?? null;
|
|
94
|
+
const query = strapi2.db.queryBuilder("strapi::core-store").transacting(transaction);
|
|
95
|
+
if (!storedInfo) {
|
|
96
|
+
query.insert({ key: "ee_information", value: JSON.stringify(result) });
|
|
97
|
+
} else {
|
|
98
|
+
query.update({ value: JSON.stringify(result) }).where({ key: "ee_information" });
|
|
99
|
+
}
|
|
100
|
+
await query.execute();
|
|
101
|
+
}
|
|
102
|
+
await commit();
|
|
103
|
+
} catch (error) {
|
|
104
|
+
await rollback();
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
const validateInfo = () => {
|
|
108
|
+
if (typeof ee.licenseInfo.expireAt === "undefined") {
|
|
109
|
+
throw new Error("Missing license key.");
|
|
110
|
+
}
|
|
111
|
+
const expirationTime = new Date(ee.licenseInfo.expireAt).getTime();
|
|
112
|
+
if (expirationTime < (/* @__PURE__ */ new Date()).getTime()) {
|
|
113
|
+
return disable("License expired.");
|
|
114
|
+
}
|
|
115
|
+
enable();
|
|
116
|
+
};
|
|
117
|
+
const checkLicense = async ({ strapi: strapi2 }) => {
|
|
118
|
+
const shouldStayOffline = ee.licenseInfo.type === "gold" && // This env variable support is temporarily used to ease the migration between online vs offline
|
|
119
|
+
process.env.STRAPI_DISABLE_LICENSE_PING?.toLowerCase() === "true";
|
|
120
|
+
if (!shouldStayOffline) {
|
|
121
|
+
await onlineUpdate({ strapi: strapi2 });
|
|
122
|
+
strapi2.cron.add({ [shiftCronExpression("0 0 */12 * * *")]: onlineUpdate });
|
|
123
|
+
} else {
|
|
124
|
+
if (!ee.licenseInfo.expireAt) {
|
|
125
|
+
return disable("Your license does not have offline support.");
|
|
126
|
+
}
|
|
127
|
+
validateInfo();
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
const list = () => {
|
|
131
|
+
return ee.licenseInfo.features?.map(
|
|
132
|
+
(feature) => typeof feature === "object" ? feature : { name: feature }
|
|
133
|
+
) || [];
|
|
134
|
+
};
|
|
135
|
+
const get = (featureName) => list().find((feature) => feature.name === featureName);
|
|
136
|
+
const EE = Object.freeze({
|
|
137
|
+
init,
|
|
138
|
+
checkLicense,
|
|
139
|
+
get isEE() {
|
|
140
|
+
return ee.enabled;
|
|
141
|
+
},
|
|
142
|
+
get seats() {
|
|
143
|
+
return ee.licenseInfo.seats;
|
|
144
|
+
},
|
|
145
|
+
features: Object.freeze({
|
|
146
|
+
list,
|
|
147
|
+
get,
|
|
148
|
+
isEnabled: (featureName) => get(featureName) !== void 0
|
|
149
|
+
})
|
|
150
|
+
});
|
|
151
|
+
export {
|
|
152
|
+
EE as default
|
|
153
|
+
};
|
|
154
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/ee/index.ts"],"sourcesContent":["import { pick, isEqual } from 'lodash/fp';\nimport type { Logger } from '@strapi/logger';\nimport type { Strapi } from '@strapi/types';\n\nimport { readLicense, verifyLicense, fetchLicense, LicenseCheckError } from './license';\nimport { shiftCronExpression } from '../utils/cron';\n\nconst ONE_MINUTE = 1000 * 60;\n\ninterface EE {\n enabled: boolean;\n licenseInfo: {\n licenseKey?: string;\n features?: Array<{ name: string } | string>;\n expireAt?: string;\n seats?: number;\n type?: string;\n };\n logger?: Logger;\n}\n\nconst ee: EE = {\n enabled: false,\n licenseInfo: {},\n};\n\nconst disable = (message: string) => {\n // Prevent emitting ee.disable if it was already disabled\n const shouldEmitEvent = ee.enabled !== false;\n\n ee.logger?.warn(`${message} Switching to CE.`);\n // Only keep the license key for potential re-enabling during a later check\n ee.licenseInfo = pick('licenseKey', ee.licenseInfo);\n\n ee.enabled = false;\n\n if (shouldEmitEvent) {\n // Notify EE features that they should be disabled\n strapi.eventHub.emit('ee.disable');\n }\n};\n\nconst enable = () => {\n // Prevent emitting ee.enable if it was already enabled\n const shouldEmitEvent = ee.enabled !== true;\n\n ee.enabled = true;\n\n if (shouldEmitEvent) {\n // Notify EE features that they should be disabled\n strapi.eventHub.emit('ee.enable');\n }\n};\n\nlet initialized = false;\n\n/**\n * Optimistically enable EE if the format of the license is valid, only run once.\n */\nconst init = (licenseDir: string, logger?: Logger) => {\n if (initialized) {\n return;\n }\n\n initialized = true;\n ee.logger = logger;\n\n if (process.env.STRAPI_DISABLE_EE?.toLowerCase() === 'true') {\n return;\n }\n\n try {\n const license = process.env.STRAPI_LICENSE || readLicense(licenseDir);\n\n if (license) {\n ee.licenseInfo = verifyLicense(license);\n enable();\n }\n } catch (error) {\n if (error instanceof Error) {\n disable(error.message);\n } else {\n disable('Invalid license.');\n }\n }\n};\n\n/**\n * Contact the license registry to update the license to its latest state.\n *\n * Store the result in database to avoid unecessary requests, and will fallback to that in case of a network failure.\n */\nconst onlineUpdate = async ({ strapi }: { strapi: Strapi }) => {\n const { get, commit, rollback } = (await strapi.db?.transaction()) as any;\n const transaction = get();\n\n try {\n const storedInfo = await strapi.db\n ?.queryBuilder('strapi::core-store')\n .where({ key: 'ee_information' })\n .select('value')\n .first()\n .transacting(transaction)\n .forUpdate()\n .execute()\n .then((result: any) => (result ? JSON.parse(result.value) : result));\n\n const shouldContactRegistry = (storedInfo?.lastCheckAt ?? 0) < Date.now() - ONE_MINUTE;\n const result: {\n license?: string | null;\n error?: string;\n lastCheckAt?: number;\n } = { lastCheckAt: Date.now() };\n\n const fallback = (error: Error) => {\n if (error instanceof LicenseCheckError && error.shouldFallback && storedInfo?.license) {\n ee.logger?.warn(\n `${error.message} The last stored one will be used as a potential fallback.`\n );\n return storedInfo.license;\n }\n\n result.error = error.message;\n disable(error.message);\n };\n\n if (!ee?.licenseInfo?.licenseKey) {\n throw new Error('Missing license key.');\n }\n\n const license = shouldContactRegistry\n ? await fetchLicense({ strapi }, ee.licenseInfo.licenseKey, strapi.config.get('uuid')).catch(\n fallback\n )\n : storedInfo.license;\n\n if (license) {\n try {\n // Verify license and check if its info changed\n const newLicenseInfo = verifyLicense(license);\n const licenseInfoChanged =\n !isEqual(newLicenseInfo.features, ee.licenseInfo.features) ||\n newLicenseInfo.seats !== ee.licenseInfo.seats ||\n newLicenseInfo.type !== ee.licenseInfo.type;\n\n // Store the new license info\n ee.licenseInfo = newLicenseInfo;\n const wasEnabled = ee.enabled;\n validateInfo();\n\n // Notify EE features\n if (licenseInfoChanged && wasEnabled) {\n strapi.eventHub.emit('ee.update');\n }\n } catch (error) {\n if (error instanceof Error) {\n disable(error.message);\n } else {\n disable('Invalid license.');\n }\n }\n } else if (!shouldContactRegistry) {\n disable(storedInfo.error);\n }\n\n if (shouldContactRegistry) {\n result.license = license ?? null;\n const query = strapi.db!.queryBuilder('strapi::core-store').transacting(transaction);\n\n if (!storedInfo) {\n query.insert({ key: 'ee_information', value: JSON.stringify(result) });\n } else {\n query.update({ value: JSON.stringify(result) }).where({ key: 'ee_information' });\n }\n\n await query.execute();\n }\n\n await commit();\n } catch (error) {\n // Example of errors: SQLite does not support FOR UPDATE\n await rollback();\n }\n};\n\nconst validateInfo = () => {\n if (typeof ee.licenseInfo.expireAt === 'undefined') {\n throw new Error('Missing license key.');\n }\n\n const expirationTime = new Date(ee.licenseInfo.expireAt).getTime();\n\n if (expirationTime < new Date().getTime()) {\n return disable('License expired.');\n }\n\n enable();\n};\n\nconst checkLicense = async ({ strapi }: { strapi: Strapi }) => {\n const shouldStayOffline =\n ee.licenseInfo.type === 'gold' &&\n // This env variable support is temporarily used to ease the migration between online vs offline\n process.env.STRAPI_DISABLE_LICENSE_PING?.toLowerCase() === 'true';\n\n if (!shouldStayOffline) {\n await onlineUpdate({ strapi });\n strapi.cron.add({ [shiftCronExpression('0 0 */12 * * *')]: onlineUpdate });\n } else {\n if (!ee.licenseInfo.expireAt) {\n return disable('Your license does not have offline support.');\n }\n\n validateInfo();\n }\n};\n\nconst list = () => {\n return (\n ee.licenseInfo.features?.map((feature) =>\n typeof feature === 'object' ? feature : { name: feature }\n ) || []\n );\n};\n\nconst get = (featureName: string) => list().find((feature) => feature.name === featureName);\n\nexport default Object.freeze({\n init,\n checkLicense,\n\n get isEE() {\n return ee.enabled;\n },\n\n get seats() {\n return ee.licenseInfo.seats;\n },\n\n features: Object.freeze({\n list,\n get,\n isEnabled: (featureName: string) => get(featureName) !== undefined,\n }),\n});\n"],"names":["strapi","get","result"],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Strapi } from '@strapi/types';
|
|
2
|
+
interface LicenseInfo {
|
|
3
|
+
type: 'bronze' | 'silver' | 'gold';
|
|
4
|
+
expireAt?: string;
|
|
5
|
+
seats?: number;
|
|
6
|
+
features?: Array<{
|
|
7
|
+
name: string;
|
|
8
|
+
options?: Record<string, unknown>;
|
|
9
|
+
}>;
|
|
10
|
+
}
|
|
11
|
+
declare class LicenseCheckError extends Error {
|
|
12
|
+
shouldFallback: boolean;
|
|
13
|
+
constructor(message: string, shouldFallback?: boolean);
|
|
14
|
+
}
|
|
15
|
+
declare const readLicense: (directory: string) => string | undefined;
|
|
16
|
+
declare const verifyLicense: (license: string) => LicenseInfo;
|
|
17
|
+
declare const fetchLicense: ({ strapi }: {
|
|
18
|
+
strapi: Strapi;
|
|
19
|
+
}, key: string, projectId: string) => Promise<any>;
|
|
20
|
+
export { readLicense, verifyLicense, fetchLicense, LicenseCheckError };
|
|
21
|
+
//# sourceMappingURL=license.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../../src/ee/license.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAI5C,UAAU,WAAW;IACnB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CACvE;AAgBD,cAAM,iBAAkB,SAAQ,KAAK;IACnC,cAAc,UAAS;gBAEX,OAAO,EAAE,MAAM,EAAE,cAAc,UAAQ;CAKpD;AAED,QAAA,MAAM,WAAW,cAAe,MAAM,uBASrC,CAAC;AAEF,QAAA,MAAM,aAAa,YAAa,MAAM,gBA2BrC,CAAC;AAMF,QAAA,MAAM,YAAY;YAAgC,MAAM;QAAS,MAAM,aAAa,MAAM,iBA2BzF,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const path = require("path");
|
|
5
|
+
const crypto = require("crypto");
|
|
6
|
+
const strapiUtils = require("@strapi/utils");
|
|
7
|
+
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
8
|
+
const fs__default = /* @__PURE__ */ _interopDefault(fs);
|
|
9
|
+
const crypto__default = /* @__PURE__ */ _interopDefault(crypto);
|
|
10
|
+
const DEFAULT_FEATURES = {
|
|
11
|
+
bronze: [],
|
|
12
|
+
silver: [],
|
|
13
|
+
gold: [
|
|
14
|
+
{ name: "sso" },
|
|
15
|
+
// Set a null retention duration to allow the user to override it
|
|
16
|
+
// The default of 90 days is set in the audit logs service
|
|
17
|
+
{ name: "audit-logs", options: { retentionDays: null } },
|
|
18
|
+
{ name: "review-workflows" }
|
|
19
|
+
]
|
|
20
|
+
};
|
|
21
|
+
const publicKey = fs__default.default.readFileSync(path.resolve(__dirname, "../../resources/key.pub"));
|
|
22
|
+
class LicenseCheckError extends Error {
|
|
23
|
+
shouldFallback = false;
|
|
24
|
+
constructor(message, shouldFallback = false) {
|
|
25
|
+
super(message);
|
|
26
|
+
this.shouldFallback = shouldFallback;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const readLicense = (directory) => {
|
|
30
|
+
try {
|
|
31
|
+
const path$1 = path.join(directory, "license.txt");
|
|
32
|
+
return fs__default.default.readFileSync(path$1).toString();
|
|
33
|
+
} catch (error) {
|
|
34
|
+
if (typeof error === "object" && error !== null && "code" in error && error.code !== "ENOENT") {
|
|
35
|
+
throw Error("License file not readable, review its format and access rules.");
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const verifyLicense = (license) => {
|
|
40
|
+
const [signature, base64Content] = Buffer.from(license, "base64").toString().split("\n");
|
|
41
|
+
if (!signature || !base64Content) {
|
|
42
|
+
throw new Error("Invalid license.");
|
|
43
|
+
}
|
|
44
|
+
const stringifiedContent = Buffer.from(base64Content, "base64").toString();
|
|
45
|
+
const verify = crypto__default.default.createVerify("RSA-SHA256");
|
|
46
|
+
verify.update(stringifiedContent);
|
|
47
|
+
verify.end();
|
|
48
|
+
const verified = verify.verify(publicKey, signature, "base64");
|
|
49
|
+
if (!verified) {
|
|
50
|
+
throw new Error("Invalid license.");
|
|
51
|
+
}
|
|
52
|
+
const licenseInfo = JSON.parse(stringifiedContent);
|
|
53
|
+
if (!licenseInfo.features) {
|
|
54
|
+
licenseInfo.features = DEFAULT_FEATURES[licenseInfo.type];
|
|
55
|
+
}
|
|
56
|
+
Object.freeze(licenseInfo.features);
|
|
57
|
+
return licenseInfo;
|
|
58
|
+
};
|
|
59
|
+
const throwError = () => {
|
|
60
|
+
throw new LicenseCheckError("Could not proceed to the online validation of your license.", true);
|
|
61
|
+
};
|
|
62
|
+
const fetchLicense = async ({ strapi }, key, projectId) => {
|
|
63
|
+
const response = await strapi.fetch(`https://license.strapi.io/api/licenses/validate`, {
|
|
64
|
+
method: "POST",
|
|
65
|
+
headers: { "Content-Type": "application/json" },
|
|
66
|
+
body: JSON.stringify({ key, projectId, deviceId: strapiUtils.machineID() })
|
|
67
|
+
}).catch(throwError);
|
|
68
|
+
const contentType = response.headers.get("Content-Type");
|
|
69
|
+
if (contentType?.includes("application/json")) {
|
|
70
|
+
const { data, error } = await response.json();
|
|
71
|
+
switch (response.status) {
|
|
72
|
+
case 200:
|
|
73
|
+
return data.license;
|
|
74
|
+
case 400:
|
|
75
|
+
throw new LicenseCheckError(error.message);
|
|
76
|
+
case 404:
|
|
77
|
+
throw new LicenseCheckError("The license used does not exists.");
|
|
78
|
+
default:
|
|
79
|
+
throwError();
|
|
80
|
+
}
|
|
81
|
+
} else {
|
|
82
|
+
throwError();
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
exports.LicenseCheckError = LicenseCheckError;
|
|
86
|
+
exports.fetchLicense = fetchLicense;
|
|
87
|
+
exports.readLicense = readLicense;
|
|
88
|
+
exports.verifyLicense = verifyLicense;
|
|
89
|
+
//# sourceMappingURL=license.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license.js","sources":["../../src/ee/license.ts"],"sourcesContent":["import fs from 'fs';\nimport { join, resolve } from 'path';\nimport crypto from 'crypto';\nimport type { Strapi } from '@strapi/types';\n\nimport { machineID } from '@strapi/utils';\n\ninterface LicenseInfo {\n type: 'bronze' | 'silver' | 'gold';\n expireAt?: string;\n seats?: number;\n features?: Array<{ name: string; options?: Record<string, unknown> }>;\n}\n\nconst DEFAULT_FEATURES = {\n bronze: [],\n silver: [],\n gold: [\n { name: 'sso' },\n // Set a null retention duration to allow the user to override it\n // The default of 90 days is set in the audit logs service\n { name: 'audit-logs', options: { retentionDays: null } },\n { name: 'review-workflows' },\n ],\n};\n\nconst publicKey = fs.readFileSync(resolve(__dirname, '../../resources/key.pub'));\n\nclass LicenseCheckError extends Error {\n shouldFallback = false;\n\n constructor(message: string, shouldFallback = false) {\n super(message);\n\n this.shouldFallback = shouldFallback;\n }\n}\n\nconst readLicense = (directory: string) => {\n try {\n const path = join(directory, 'license.txt');\n return fs.readFileSync(path).toString();\n } catch (error) {\n if (typeof error === 'object' && error !== null && 'code' in error && error.code !== 'ENOENT') {\n throw Error('License file not readable, review its format and access rules.');\n }\n }\n};\n\nconst verifyLicense = (license: string) => {\n const [signature, base64Content] = Buffer.from(license, 'base64').toString().split('\\n');\n\n if (!signature || !base64Content) {\n throw new Error('Invalid license.');\n }\n\n const stringifiedContent = Buffer.from(base64Content, 'base64').toString();\n\n const verify = crypto.createVerify('RSA-SHA256');\n verify.update(stringifiedContent);\n verify.end();\n\n const verified = verify.verify(publicKey, signature, 'base64');\n\n if (!verified) {\n throw new Error('Invalid license.');\n }\n\n const licenseInfo: LicenseInfo = JSON.parse(stringifiedContent);\n\n if (!licenseInfo.features) {\n licenseInfo.features = DEFAULT_FEATURES[licenseInfo.type];\n }\n\n Object.freeze(licenseInfo.features);\n return licenseInfo;\n};\n\nconst throwError = () => {\n throw new LicenseCheckError('Could not proceed to the online validation of your license.', true);\n};\n\nconst fetchLicense = async ({ strapi }: { strapi: Strapi }, key: string, projectId: string) => {\n const response = await strapi\n .fetch(`https://license.strapi.io/api/licenses/validate`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ key, projectId, deviceId: machineID() }),\n })\n .catch(throwError);\n\n const contentType = response.headers.get('Content-Type');\n\n if (contentType?.includes('application/json')) {\n const { data, error } = await response.json();\n\n switch (response.status) {\n case 200:\n return data.license;\n case 400:\n throw new LicenseCheckError(error.message);\n case 404:\n throw new LicenseCheckError('The license used does not exists.');\n default:\n throwError();\n }\n } else {\n throwError();\n }\n};\n\nexport { readLicense, verifyLicense, fetchLicense, LicenseCheckError };\n"],"names":["fs","resolve","path","join","crypto","machineID"],"mappings":";;;;;;;;;AAcA,MAAM,mBAAmB;AAAA,EACvB,QAAQ,CAAC;AAAA,EACT,QAAQ,CAAC;AAAA,EACT,MAAM;AAAA,IACJ,EAAE,MAAM,MAAM;AAAA;AAAA;AAAA,IAGd,EAAE,MAAM,cAAc,SAAS,EAAE,eAAe,OAAO;AAAA,IACvD,EAAE,MAAM,mBAAmB;AAAA,EAC7B;AACF;AAEA,MAAM,YAAYA,YAAG,QAAA,aAAaC,KAAQ,QAAA,WAAW,yBAAyB,CAAC;AAE/E,MAAM,0BAA0B,MAAM;AAAA,EACpC,iBAAiB;AAAA,EAEjB,YAAY,SAAiB,iBAAiB,OAAO;AACnD,UAAM,OAAO;AAEb,SAAK,iBAAiB;AAAA,EACxB;AACF;AAEM,MAAA,cAAc,CAAC,cAAsB;AACrC,MAAA;AACI,UAAAC,SAAOC,KAAAA,KAAK,WAAW,aAAa;AAC1C,WAAOH,YAAG,QAAA,aAAaE,MAAI,EAAE,SAAS;AAAA,WAC/B,OAAO;AACV,QAAA,OAAO,UAAU,YAAY,UAAU,QAAQ,UAAU,SAAS,MAAM,SAAS,UAAU;AAC7F,YAAM,MAAM,gEAAgE;AAAA,IAC9E;AAAA,EACF;AACF;AAEM,MAAA,gBAAgB,CAAC,YAAoB;AACzC,QAAM,CAAC,WAAW,aAAa,IAAI,OAAO,KAAK,SAAS,QAAQ,EAAE,SAAA,EAAW,MAAM,IAAI;AAEnF,MAAA,CAAC,aAAa,CAAC,eAAe;AAC1B,UAAA,IAAI,MAAM,kBAAkB;AAAA,EACpC;AAEA,QAAM,qBAAqB,OAAO,KAAK,eAAe,QAAQ,EAAE;AAE1D,QAAA,SAASE,gBAAAA,QAAO,aAAa,YAAY;AAC/C,SAAO,OAAO,kBAAkB;AAChC,SAAO,IAAI;AAEX,QAAM,WAAW,OAAO,OAAO,WAAW,WAAW,QAAQ;AAE7D,MAAI,CAAC,UAAU;AACP,UAAA,IAAI,MAAM,kBAAkB;AAAA,EACpC;AAEM,QAAA,cAA2B,KAAK,MAAM,kBAAkB;AAE1D,MAAA,CAAC,YAAY,UAAU;AACb,gBAAA,WAAW,iBAAiB,YAAY,IAAI;AAAA,EAC1D;AAEO,SAAA,OAAO,YAAY,QAAQ;AAC3B,SAAA;AACT;AAEA,MAAM,aAAa,MAAM;AACjB,QAAA,IAAI,kBAAkB,+DAA+D,IAAI;AACjG;AAEA,MAAM,eAAe,OAAO,EAAE,UAA8B,KAAa,cAAsB;AAC7F,QAAM,WAAW,MAAM,OACpB,MAAM,mDAAmD;AAAA,IACxD,QAAQ;AAAA,IACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,IAC9C,MAAM,KAAK,UAAU,EAAE,KAAK,WAAW,UAAUC,YAAU,UAAA,GAAG;AAAA,EAAA,CAC/D,EACA,MAAM,UAAU;AAEnB,QAAM,cAAc,SAAS,QAAQ,IAAI,cAAc;AAEnD,MAAA,aAAa,SAAS,kBAAkB,GAAG;AAC7C,UAAM,EAAE,MAAM,MAAA,IAAU,MAAM,SAAS,KAAK;AAE5C,YAAQ,SAAS,QAAQ;AAAA,MACvB,KAAK;AACH,eAAO,KAAK;AAAA,MACd,KAAK;AACG,cAAA,IAAI,kBAAkB,MAAM,OAAO;AAAA,MAC3C,KAAK;AACG,cAAA,IAAI,kBAAkB,mCAAmC;AAAA,MACjE;AACa;IACf;AAAA,EAAA,OACK;AACM;EACb;AACF;;;;;"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import { resolve, join } from "path";
|
|
3
|
+
import crypto from "crypto";
|
|
4
|
+
import { machineID } from "@strapi/utils";
|
|
5
|
+
const DEFAULT_FEATURES = {
|
|
6
|
+
bronze: [],
|
|
7
|
+
silver: [],
|
|
8
|
+
gold: [
|
|
9
|
+
{ name: "sso" },
|
|
10
|
+
// Set a null retention duration to allow the user to override it
|
|
11
|
+
// The default of 90 days is set in the audit logs service
|
|
12
|
+
{ name: "audit-logs", options: { retentionDays: null } },
|
|
13
|
+
{ name: "review-workflows" }
|
|
14
|
+
]
|
|
15
|
+
};
|
|
16
|
+
const publicKey = fs.readFileSync(resolve(__dirname, "../../resources/key.pub"));
|
|
17
|
+
class LicenseCheckError extends Error {
|
|
18
|
+
shouldFallback = false;
|
|
19
|
+
constructor(message, shouldFallback = false) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.shouldFallback = shouldFallback;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const readLicense = (directory) => {
|
|
25
|
+
try {
|
|
26
|
+
const path = join(directory, "license.txt");
|
|
27
|
+
return fs.readFileSync(path).toString();
|
|
28
|
+
} catch (error) {
|
|
29
|
+
if (typeof error === "object" && error !== null && "code" in error && error.code !== "ENOENT") {
|
|
30
|
+
throw Error("License file not readable, review its format and access rules.");
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
const verifyLicense = (license) => {
|
|
35
|
+
const [signature, base64Content] = Buffer.from(license, "base64").toString().split("\n");
|
|
36
|
+
if (!signature || !base64Content) {
|
|
37
|
+
throw new Error("Invalid license.");
|
|
38
|
+
}
|
|
39
|
+
const stringifiedContent = Buffer.from(base64Content, "base64").toString();
|
|
40
|
+
const verify = crypto.createVerify("RSA-SHA256");
|
|
41
|
+
verify.update(stringifiedContent);
|
|
42
|
+
verify.end();
|
|
43
|
+
const verified = verify.verify(publicKey, signature, "base64");
|
|
44
|
+
if (!verified) {
|
|
45
|
+
throw new Error("Invalid license.");
|
|
46
|
+
}
|
|
47
|
+
const licenseInfo = JSON.parse(stringifiedContent);
|
|
48
|
+
if (!licenseInfo.features) {
|
|
49
|
+
licenseInfo.features = DEFAULT_FEATURES[licenseInfo.type];
|
|
50
|
+
}
|
|
51
|
+
Object.freeze(licenseInfo.features);
|
|
52
|
+
return licenseInfo;
|
|
53
|
+
};
|
|
54
|
+
const throwError = () => {
|
|
55
|
+
throw new LicenseCheckError("Could not proceed to the online validation of your license.", true);
|
|
56
|
+
};
|
|
57
|
+
const fetchLicense = async ({ strapi }, key, projectId) => {
|
|
58
|
+
const response = await strapi.fetch(`https://license.strapi.io/api/licenses/validate`, {
|
|
59
|
+
method: "POST",
|
|
60
|
+
headers: { "Content-Type": "application/json" },
|
|
61
|
+
body: JSON.stringify({ key, projectId, deviceId: machineID() })
|
|
62
|
+
}).catch(throwError);
|
|
63
|
+
const contentType = response.headers.get("Content-Type");
|
|
64
|
+
if (contentType?.includes("application/json")) {
|
|
65
|
+
const { data, error } = await response.json();
|
|
66
|
+
switch (response.status) {
|
|
67
|
+
case 200:
|
|
68
|
+
return data.license;
|
|
69
|
+
case 400:
|
|
70
|
+
throw new LicenseCheckError(error.message);
|
|
71
|
+
case 404:
|
|
72
|
+
throw new LicenseCheckError("The license used does not exists.");
|
|
73
|
+
default:
|
|
74
|
+
throwError();
|
|
75
|
+
}
|
|
76
|
+
} else {
|
|
77
|
+
throwError();
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
export {
|
|
81
|
+
LicenseCheckError,
|
|
82
|
+
fetchLicense,
|
|
83
|
+
readLicense,
|
|
84
|
+
verifyLicense
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=license.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license.mjs","sources":["../../src/ee/license.ts"],"sourcesContent":["import fs from 'fs';\nimport { join, resolve } from 'path';\nimport crypto from 'crypto';\nimport type { Strapi } from '@strapi/types';\n\nimport { machineID } from '@strapi/utils';\n\ninterface LicenseInfo {\n type: 'bronze' | 'silver' | 'gold';\n expireAt?: string;\n seats?: number;\n features?: Array<{ name: string; options?: Record<string, unknown> }>;\n}\n\nconst DEFAULT_FEATURES = {\n bronze: [],\n silver: [],\n gold: [\n { name: 'sso' },\n // Set a null retention duration to allow the user to override it\n // The default of 90 days is set in the audit logs service\n { name: 'audit-logs', options: { retentionDays: null } },\n { name: 'review-workflows' },\n ],\n};\n\nconst publicKey = fs.readFileSync(resolve(__dirname, '../../resources/key.pub'));\n\nclass LicenseCheckError extends Error {\n shouldFallback = false;\n\n constructor(message: string, shouldFallback = false) {\n super(message);\n\n this.shouldFallback = shouldFallback;\n }\n}\n\nconst readLicense = (directory: string) => {\n try {\n const path = join(directory, 'license.txt');\n return fs.readFileSync(path).toString();\n } catch (error) {\n if (typeof error === 'object' && error !== null && 'code' in error && error.code !== 'ENOENT') {\n throw Error('License file not readable, review its format and access rules.');\n }\n }\n};\n\nconst verifyLicense = (license: string) => {\n const [signature, base64Content] = Buffer.from(license, 'base64').toString().split('\\n');\n\n if (!signature || !base64Content) {\n throw new Error('Invalid license.');\n }\n\n const stringifiedContent = Buffer.from(base64Content, 'base64').toString();\n\n const verify = crypto.createVerify('RSA-SHA256');\n verify.update(stringifiedContent);\n verify.end();\n\n const verified = verify.verify(publicKey, signature, 'base64');\n\n if (!verified) {\n throw new Error('Invalid license.');\n }\n\n const licenseInfo: LicenseInfo = JSON.parse(stringifiedContent);\n\n if (!licenseInfo.features) {\n licenseInfo.features = DEFAULT_FEATURES[licenseInfo.type];\n }\n\n Object.freeze(licenseInfo.features);\n return licenseInfo;\n};\n\nconst throwError = () => {\n throw new LicenseCheckError('Could not proceed to the online validation of your license.', true);\n};\n\nconst fetchLicense = async ({ strapi }: { strapi: Strapi }, key: string, projectId: string) => {\n const response = await strapi\n .fetch(`https://license.strapi.io/api/licenses/validate`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ key, projectId, deviceId: machineID() }),\n })\n .catch(throwError);\n\n const contentType = response.headers.get('Content-Type');\n\n if (contentType?.includes('application/json')) {\n const { data, error } = await response.json();\n\n switch (response.status) {\n case 200:\n return data.license;\n case 400:\n throw new LicenseCheckError(error.message);\n case 404:\n throw new LicenseCheckError('The license used does not exists.');\n default:\n throwError();\n }\n } else {\n throwError();\n }\n};\n\nexport { readLicense, verifyLicense, fetchLicense, LicenseCheckError };\n"],"names":[],"mappings":";;;;AAcA,MAAM,mBAAmB;AAAA,EACvB,QAAQ,CAAC;AAAA,EACT,QAAQ,CAAC;AAAA,EACT,MAAM;AAAA,IACJ,EAAE,MAAM,MAAM;AAAA;AAAA;AAAA,IAGd,EAAE,MAAM,cAAc,SAAS,EAAE,eAAe,OAAO;AAAA,IACvD,EAAE,MAAM,mBAAmB;AAAA,EAC7B;AACF;AAEA,MAAM,YAAY,GAAG,aAAa,QAAQ,WAAW,yBAAyB,CAAC;AAE/E,MAAM,0BAA0B,MAAM;AAAA,EACpC,iBAAiB;AAAA,EAEjB,YAAY,SAAiB,iBAAiB,OAAO;AACnD,UAAM,OAAO;AAEb,SAAK,iBAAiB;AAAA,EACxB;AACF;AAEM,MAAA,cAAc,CAAC,cAAsB;AACrC,MAAA;AACI,UAAA,OAAO,KAAK,WAAW,aAAa;AAC1C,WAAO,GAAG,aAAa,IAAI,EAAE,SAAS;AAAA,WAC/B,OAAO;AACV,QAAA,OAAO,UAAU,YAAY,UAAU,QAAQ,UAAU,SAAS,MAAM,SAAS,UAAU;AAC7F,YAAM,MAAM,gEAAgE;AAAA,IAC9E;AAAA,EACF;AACF;AAEM,MAAA,gBAAgB,CAAC,YAAoB;AACzC,QAAM,CAAC,WAAW,aAAa,IAAI,OAAO,KAAK,SAAS,QAAQ,EAAE,SAAA,EAAW,MAAM,IAAI;AAEnF,MAAA,CAAC,aAAa,CAAC,eAAe;AAC1B,UAAA,IAAI,MAAM,kBAAkB;AAAA,EACpC;AAEA,QAAM,qBAAqB,OAAO,KAAK,eAAe,QAAQ,EAAE;AAE1D,QAAA,SAAS,OAAO,aAAa,YAAY;AAC/C,SAAO,OAAO,kBAAkB;AAChC,SAAO,IAAI;AAEX,QAAM,WAAW,OAAO,OAAO,WAAW,WAAW,QAAQ;AAE7D,MAAI,CAAC,UAAU;AACP,UAAA,IAAI,MAAM,kBAAkB;AAAA,EACpC;AAEM,QAAA,cAA2B,KAAK,MAAM,kBAAkB;AAE1D,MAAA,CAAC,YAAY,UAAU;AACb,gBAAA,WAAW,iBAAiB,YAAY,IAAI;AAAA,EAC1D;AAEO,SAAA,OAAO,YAAY,QAAQ;AAC3B,SAAA;AACT;AAEA,MAAM,aAAa,MAAM;AACjB,QAAA,IAAI,kBAAkB,+DAA+D,IAAI;AACjG;AAEA,MAAM,eAAe,OAAO,EAAE,UAA8B,KAAa,cAAsB;AAC7F,QAAM,WAAW,MAAM,OACpB,MAAM,mDAAmD;AAAA,IACxD,QAAQ;AAAA,IACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,IAC9C,MAAM,KAAK,UAAU,EAAE,KAAK,WAAW,UAAU,UAAU,GAAG;AAAA,EAAA,CAC/D,EACA,MAAM,UAAU;AAEnB,QAAM,cAAc,SAAS,QAAQ,IAAI,cAAc;AAEnD,MAAA,aAAa,SAAS,kBAAkB,GAAG;AAC7C,UAAM,EAAE,MAAM,MAAA,IAAU,MAAM,SAAS,KAAK;AAE5C,YAAQ,SAAS,QAAQ;AAAA,MACvB,KAAK;AACH,eAAO,KAAK;AAAA,MACd,KAAK;AACG,cAAA,IAAI,kBAAkB,MAAM,OAAO;AAAA,MAC3C,KAAK;AACG,cAAA,IAAI,kBAAkB,mCAAmC;AAAA,MACjE;AACa;IACf;AAAA,EAAA,OACK;AACM;EACb;AACF;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Strapi, Common, CoreApi, Utils } from '@strapi/types';
|
|
2
|
+
type WithStrapiCallback<T> = T | (<S extends {
|
|
3
|
+
strapi: Strapi;
|
|
4
|
+
}>(params: S) => T);
|
|
5
|
+
declare const createCoreController: <TUID extends Common.UID.ContentType, TController extends CoreApi.Controller.Extendable<TUID>>(uid: TUID, cfg?: WithStrapiCallback<Utils.PartialWithThis<Partial<Utils.Expression.If<Common.UID.IsCollectionType<TUID>, CoreApi.Controller.CollectionType, Utils.Expression.If<Common.UID.IsSingleType<TUID>, CoreApi.Controller.SingleType, CoreApi.Controller.Base>>> & CoreApi.Controller.Generic & TController>> | undefined) => ({ strapi }: {
|
|
6
|
+
strapi: Strapi;
|
|
7
|
+
}) => TController & Utils.Expression.If<Common.UID.IsCollectionType<TUID>, CoreApi.Controller.CollectionType, Utils.Expression.If<Common.UID.IsSingleType<TUID>, CoreApi.Controller.SingleType, CoreApi.Controller.Base>>;
|
|
8
|
+
declare function createCoreService<TUID extends Common.UID.ContentType, TService extends CoreApi.Service.Extendable<TUID>>(uid: TUID, cfg?: WithStrapiCallback<Utils.PartialWithThis<CoreApi.Service.Extendable<TUID> & TService>>): ({ strapi }: {
|
|
9
|
+
strapi: Strapi;
|
|
10
|
+
}) => TService & CoreApi.Service.ContentType<TUID>;
|
|
11
|
+
declare function createCoreRouter<T extends Common.UID.ContentType>(uid: T, cfg?: CoreApi.Router.RouterConfig<T>): CoreApi.Router.Router;
|
|
12
|
+
export { createCoreController, createCoreService, createCoreRouter };
|
|
13
|
+
//# sourceMappingURL=factories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../src/factories.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAMpE,KAAK,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAclF,QAAA,MAAM,oBAAoB;YAOM,MAAM;yNAcrC,CAAC;AAEF,iBAAS,iBAAiB,CACxB,IAAI,SAAS,MAAM,CAAC,GAAG,CAAC,WAAW,EACnC,QAAQ,SAAS,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAEjD,GAAG,EAAE,IAAI,EACT,GAAG,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;YAE9D,MAAM;MAAK,QAAQ,GAAG,QAAQ,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CActF;AAED,iBAAS,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,WAAW,EACxD,GAAG,EAAE,CAAC,EACN,GAAG,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,GACnC,OAAO,CAAC,MAAM,CAAC,MAAM,CA+BvB;AAED,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC"}
|