@strapi/core 5.48.1 → 5.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Strapi.d.ts.map +1 -1
- package/dist/Strapi.js +11 -5
- package/dist/Strapi.js.map +1 -1
- package/dist/Strapi.mjs +2 -1
- package/dist/Strapi.mjs.map +1 -1
- package/dist/ai.d.ts +2 -0
- package/dist/ai.d.ts.map +1 -0
- package/dist/ai.js +8 -0
- package/dist/ai.js.map +1 -0
- package/dist/ai.mjs +3 -0
- package/dist/ai.mjs.map +1 -0
- package/dist/configuration/config-loader.d.ts.map +1 -1
- package/dist/configuration/config-loader.js +11 -6
- package/dist/configuration/config-loader.js.map +1 -1
- package/dist/configuration/get-dirs.d.ts.map +1 -1
- package/dist/configuration/index.d.ts +0 -3
- package/dist/configuration/index.d.ts.map +1 -1
- package/dist/configuration/index.js +22 -18
- package/dist/configuration/index.js.map +1 -1
- package/dist/configuration/index.mjs +0 -3
- package/dist/configuration/index.mjs.map +1 -1
- package/dist/configuration/server-config.d.ts +11 -0
- package/dist/configuration/server-config.d.ts.map +1 -0
- package/dist/configuration/server-config.js +16 -0
- package/dist/configuration/server-config.js.map +1 -0
- package/dist/configuration/server-config.mjs +14 -0
- package/dist/configuration/server-config.mjs.map +1 -0
- package/dist/configuration/urls.d.ts.map +1 -1
- package/dist/configuration/urls.js +11 -7
- package/dist/configuration/urls.js.map +1 -1
- package/dist/core-api/controller/collection-type.d.ts.map +1 -1
- package/dist/core-api/controller/single-type.d.ts.map +1 -1
- package/dist/core-api/controller/transform.d.ts.map +1 -1
- package/dist/core-api/routes/index.d.ts.map +1 -1
- package/dist/core-api/routes/index.js +3 -2
- package/dist/core-api/routes/index.js.map +1 -1
- package/dist/core-api/routes/validation/attributes.d.ts.map +1 -1
- package/dist/core-api/routes/validation/common.js +3 -2
- package/dist/core-api/routes/validation/common.js.map +1 -1
- package/dist/core-api/routes/validation/content-type.js +3 -2
- package/dist/core-api/routes/validation/content-type.js.map +1 -1
- package/dist/core-api/routes/validation/mappers.d.ts.map +1 -1
- package/dist/core-api/routes/validation/mappers.js +3 -2
- package/dist/core-api/routes/validation/mappers.js.map +1 -1
- package/dist/core-api/routes/validation/utils.d.ts.map +1 -1
- package/dist/core-api/routes/validation/utils.js +3 -2
- package/dist/core-api/routes/validation/utils.js.map +1 -1
- package/dist/core-api/service/collection-type.d.ts.map +1 -1
- package/dist/core-api/service/pagination.d.ts.map +1 -1
- package/dist/core-api/service/single-type.d.ts.map +1 -1
- package/dist/domain/content-type/index.d.ts.map +1 -1
- package/dist/domain/content-type/index.js +9 -5
- package/dist/domain/content-type/index.js.map +1 -1
- package/dist/domain/content-type/validator.d.ts.map +1 -1
- package/dist/domain/content-type/validator.js +6 -2
- package/dist/domain/content-type/validator.js.map +1 -1
- package/dist/domain/module/index.d.ts.map +1 -1
- package/dist/domain/module/index.js +6 -2
- package/dist/domain/module/index.js.map +1 -1
- package/dist/domain/module/validation.d.ts.map +1 -1
- package/dist/ee/index.d.ts +2 -1
- package/dist/ee/index.d.ts.map +1 -1
- package/dist/ee/license.d.ts.map +1 -1
- package/dist/ee/license.js +8 -3
- package/dist/ee/license.js.map +1 -1
- package/dist/factories.d.ts.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -1
- package/dist/loaders/admin.js +5 -1
- package/dist/loaders/admin.js.map +1 -1
- package/dist/loaders/apis.js +16 -11
- package/dist/loaders/apis.js.map +1 -1
- package/dist/loaders/components.js +6 -2
- package/dist/loaders/components.js.map +1 -1
- package/dist/loaders/middlewares.js +6 -2
- package/dist/loaders/middlewares.js.map +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.d.ts.map +1 -1
- package/dist/loaders/plugins/get-enabled-plugins.js +5 -1
- package/dist/loaders/plugins/get-enabled-plugins.js.map +1 -1
- package/dist/loaders/plugins/get-user-plugins-config.js +6 -2
- package/dist/loaders/plugins/get-user-plugins-config.js.map +1 -1
- package/dist/loaders/plugins/index.js +8 -4
- package/dist/loaders/plugins/index.js.map +1 -1
- package/dist/loaders/policies.js +6 -2
- package/dist/loaders/policies.js.map +1 -1
- package/dist/loaders/sanitizers.d.ts.map +1 -1
- package/dist/loaders/src-index.d.ts.map +1 -1
- package/dist/loaders/validators.d.ts.map +1 -1
- package/dist/mcp.d.ts +4 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +12 -0
- package/dist/mcp.js.map +1 -0
- package/dist/mcp.mjs +4 -0
- package/dist/mcp.mjs.map +1 -0
- package/dist/middlewares/body.d.ts.map +1 -1
- package/dist/middlewares/body.js +9 -4
- package/dist/middlewares/body.js.map +1 -1
- package/dist/middlewares/body.mjs +1 -1
- package/dist/middlewares/body.mjs.map +1 -1
- package/dist/middlewares/compression.js +5 -1
- package/dist/middlewares/compression.js.map +1 -1
- package/dist/middlewares/cors.d.ts.map +1 -1
- package/dist/middlewares/cors.js +5 -1
- package/dist/middlewares/cors.js.map +1 -1
- package/dist/middlewares/errors.d.ts +5 -0
- package/dist/middlewares/errors.d.ts.map +1 -1
- package/dist/middlewares/errors.js.map +1 -1
- package/dist/middlewares/errors.mjs.map +1 -1
- package/dist/middlewares/favicon.d.ts +0 -1
- package/dist/middlewares/favicon.d.ts.map +1 -1
- package/dist/middlewares/favicon.js +5 -1
- package/dist/middlewares/favicon.js.map +1 -1
- package/dist/middlewares/ip.js +5 -1
- package/dist/middlewares/ip.js.map +1 -1
- package/dist/middlewares/public.js +5 -1
- package/dist/middlewares/public.js.map +1 -1
- package/dist/middlewares/query.js +6 -2
- package/dist/middlewares/query.js.map +1 -1
- package/dist/middlewares/security.js +5 -1
- package/dist/middlewares/security.js.map +1 -1
- package/dist/migrations/database/5.0.0-discard-drafts.js +5 -1
- package/dist/migrations/database/5.0.0-discard-drafts.js.map +1 -1
- package/dist/migrations/draft-publish.d.ts.map +1 -1
- package/dist/migrations/first-published-at.d.ts.map +1 -1
- package/dist/migrations/first-published-at.js +5 -1
- package/dist/migrations/first-published-at.js.map +1 -1
- package/dist/migrations/i18n.d.ts.map +1 -1
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/package.json.js +18 -21
- package/dist/package.json.js.map +1 -1
- package/dist/package.json.mjs +18 -21
- package/dist/package.json.mjs.map +1 -1
- package/dist/providers/provider.d.ts.map +1 -1
- package/dist/registries/apis.d.ts.map +1 -1
- package/dist/registries/components.d.ts +1 -1
- package/dist/registries/components.d.ts.map +1 -1
- package/dist/registries/content-types.d.ts +2 -3
- package/dist/registries/content-types.d.ts.map +1 -1
- package/dist/registries/controllers.d.ts +3 -3
- package/dist/registries/controllers.d.ts.map +1 -1
- package/dist/registries/custom-fields.d.ts.map +1 -1
- package/dist/registries/hooks.d.ts +3 -4
- package/dist/registries/hooks.d.ts.map +1 -1
- package/dist/registries/middlewares.d.ts +2 -3
- package/dist/registries/middlewares.d.ts.map +1 -1
- package/dist/registries/models.d.ts +1 -1
- package/dist/registries/modules.d.ts.map +1 -1
- package/dist/registries/namespace.d.ts.map +1 -1
- package/dist/registries/plugins.d.ts.map +1 -1
- package/dist/registries/policies.d.ts +1 -2
- package/dist/registries/policies.d.ts.map +1 -1
- package/dist/registries/sanitizers.d.ts +2 -2
- package/dist/registries/sanitizers.js +7 -3
- package/dist/registries/sanitizers.js.map +1 -1
- package/dist/registries/services.d.ts +3 -3
- package/dist/registries/services.d.ts.map +1 -1
- package/dist/registries/validators.d.ts +2 -2
- package/dist/registries/validators.js +7 -3
- package/dist/registries/validators.js.map +1 -1
- package/dist/services/ai.d.ts.map +1 -1
- package/dist/services/auth/index.js +7 -3
- package/dist/services/auth/index.js.map +1 -1
- package/dist/services/config.d.ts.map +1 -1
- package/dist/services/content-api/index.d.ts +4 -4
- package/dist/services/content-api/index.d.ts.map +1 -1
- package/dist/services/content-api/index.js +10 -6
- package/dist/services/content-api/index.js.map +1 -1
- package/dist/services/content-api/permissions/engine.d.ts.map +1 -1
- package/dist/services/content-api/permissions/engine.js +5 -1
- package/dist/services/content-api/permissions/engine.js.map +1 -1
- package/dist/services/content-api/permissions/index.d.ts +2 -2
- package/dist/services/content-api/permissions/index.d.ts.map +1 -1
- package/dist/services/content-api/permissions/index.js +10 -6
- package/dist/services/content-api/permissions/index.js.map +1 -1
- package/dist/services/content-api/permissions/providers/action.d.ts +1 -1
- package/dist/services/content-api/permissions/providers/action.d.ts.map +1 -1
- package/dist/services/content-api/permissions/providers/condition.d.ts +1 -1
- package/dist/services/content-api/permissions/providers/condition.d.ts.map +1 -1
- package/dist/services/content-source-maps.d.ts.map +1 -1
- package/dist/services/core-store.d.ts.map +1 -1
- package/dist/services/cron.d.ts +5 -5
- package/dist/services/custom-fields.d.ts.map +1 -1
- package/dist/services/document-service/attributes/index.d.ts +0 -1
- package/dist/services/document-service/attributes/index.d.ts.map +1 -1
- package/dist/services/document-service/attributes/transforms.js +5 -1
- package/dist/services/document-service/attributes/transforms.js.map +1 -1
- package/dist/services/document-service/common.d.ts.map +1 -1
- package/dist/services/document-service/components.d.ts +2 -2
- package/dist/services/document-service/components.d.ts.map +1 -1
- package/dist/services/document-service/components.js +14 -10
- package/dist/services/document-service/components.js.map +1 -1
- package/dist/services/document-service/components.mjs.map +1 -1
- package/dist/services/document-service/draft-and-publish.d.ts +0 -1
- package/dist/services/document-service/draft-and-publish.d.ts.map +1 -1
- package/dist/services/document-service/draft-and-publish.js +1 -1
- package/dist/services/document-service/draft-and-publish.js.map +1 -1
- package/dist/services/document-service/draft-and-publish.mjs +1 -1
- package/dist/services/document-service/draft-and-publish.mjs.map +1 -1
- package/dist/services/document-service/entries.d.ts.map +1 -1
- package/dist/services/document-service/entries.js +6 -2
- package/dist/services/document-service/entries.js.map +1 -1
- package/dist/services/document-service/entries.mjs +7 -3
- package/dist/services/document-service/entries.mjs.map +1 -1
- package/dist/services/document-service/events.d.ts.map +1 -1
- package/dist/services/document-service/first-published-at.d.ts.map +1 -1
- package/dist/services/document-service/index.d.ts.map +1 -1
- package/dist/services/document-service/internationalization.d.ts +0 -1
- package/dist/services/document-service/internationalization.d.ts.map +1 -1
- package/dist/services/document-service/internationalization.js.map +1 -1
- package/dist/services/document-service/internationalization.mjs.map +1 -1
- package/dist/services/document-service/middlewares/middleware-manager.d.ts.map +1 -1
- package/dist/services/document-service/params.d.ts +1 -1
- package/dist/services/document-service/params.d.ts.map +1 -1
- package/dist/services/document-service/publication-filter.d.ts +1 -1
- package/dist/services/document-service/publication-filter.d.ts.map +1 -1
- package/dist/services/document-service/transform/data.d.ts +2 -0
- package/dist/services/document-service/transform/data.d.ts.map +1 -1
- package/dist/services/document-service/transform/data.js +7 -1
- package/dist/services/document-service/transform/data.js.map +1 -1
- package/dist/services/document-service/transform/data.mjs +7 -2
- package/dist/services/document-service/transform/data.mjs.map +1 -1
- package/dist/services/document-service/transform/fields.d.ts.map +1 -1
- package/dist/services/document-service/transform/id-map.d.ts.map +1 -1
- package/dist/services/document-service/transform/id-map.js +7 -4
- package/dist/services/document-service/transform/id-map.js.map +1 -1
- package/dist/services/document-service/transform/id-map.mjs +7 -4
- package/dist/services/document-service/transform/id-map.mjs.map +1 -1
- package/dist/services/document-service/transform/id-transform.d.ts +0 -1
- package/dist/services/document-service/transform/id-transform.d.ts.map +1 -1
- package/dist/services/document-service/transform/populate.d.ts.map +1 -1
- package/dist/services/document-service/transform/query.d.ts +0 -1
- package/dist/services/document-service/transform/query.d.ts.map +1 -1
- package/dist/services/document-service/transform/relations/extract/data-ids.d.ts.map +1 -1
- package/dist/services/document-service/transform/relations/transform/data-ids.d.ts.map +1 -1
- package/dist/services/document-service/transform/relations/transform/default-locale.d.ts.map +1 -1
- package/dist/services/document-service/transform/relations/utils/data.d.ts.map +1 -1
- package/dist/services/document-service/transform/relations/utils/dp.d.ts +1 -1
- package/dist/services/document-service/transform/relations/utils/dp.d.ts.map +1 -1
- package/dist/services/document-service/transform/relations/utils/i18n.d.ts.map +1 -1
- package/dist/services/document-service/transform/relations/utils/map-relation.d.ts +0 -1
- package/dist/services/document-service/transform/relations/utils/map-relation.d.ts.map +1 -1
- package/dist/services/document-service/transform/relations/utils/xto-one.d.ts.map +1 -1
- package/dist/services/document-service/utils/bidirectional-relations.d.ts.map +1 -1
- package/dist/services/document-service/utils/bidirectional-relations.js +7 -2
- package/dist/services/document-service/utils/bidirectional-relations.js.map +1 -1
- package/dist/services/document-service/utils/bidirectional-relations.mjs +7 -2
- package/dist/services/document-service/utils/bidirectional-relations.mjs.map +1 -1
- package/dist/services/document-service/utils/clean-component-join-table.d.ts.map +1 -1
- package/dist/services/document-service/utils/ordered-parallel.d.ts.map +1 -1
- package/dist/services/document-service/utils/populate.d.ts +1 -1
- package/dist/services/document-service/utils/populate.d.ts.map +1 -1
- package/dist/services/document-service/utils/populate.js.map +1 -1
- package/dist/services/document-service/utils/populate.mjs.map +1 -1
- package/dist/services/document-service/utils/self-referential-relations.d.ts.map +1 -1
- package/dist/services/document-service/utils/unidirectional-relations.d.ts.map +1 -1
- package/dist/services/entity-service/index.d.ts.map +1 -1
- package/dist/services/entity-service/index.js +9 -4
- package/dist/services/entity-service/index.js.map +1 -1
- package/dist/services/entity-validator/index.d.ts.map +1 -1
- package/dist/services/entity-validator/index.js +9 -4
- package/dist/services/entity-validator/index.js.map +1 -1
- package/dist/services/entity-validator/index.mjs.map +1 -1
- package/dist/services/entity-validator/validators.d.ts.map +1 -1
- package/dist/services/entity-validator/validators.js +10 -6
- package/dist/services/entity-validator/validators.js.map +1 -1
- package/dist/services/errors.d.ts.map +1 -1
- package/dist/services/errors.js +7 -3
- package/dist/services/errors.js.map +1 -1
- package/dist/services/features.d.ts.map +1 -1
- package/dist/services/fs.d.ts.map +1 -1
- package/dist/services/fs.js +10 -5
- package/dist/services/fs.js.map +1 -1
- package/dist/services/mcp/authentication.d.ts.map +1 -1
- package/dist/services/mcp/handlers/handlePost.d.ts.map +1 -1
- package/dist/services/mcp/index.d.ts.map +1 -1
- package/dist/services/mcp/internal/McpCapabilityRegistry.d.ts +2 -2
- package/dist/services/mcp/internal/McpServerFactory.d.ts.map +1 -1
- package/dist/services/mcp/internal/syncMcpSessionCapabilities.d.ts.map +1 -1
- package/dist/services/mcp/metrics/metrics.d.ts.map +1 -1
- package/dist/services/mcp/metrics/normalizeMcpCapability.d.ts.map +1 -1
- package/dist/services/mcp/metrics/wrapCapabilityHandlerForMetrics.d.ts.map +1 -1
- package/dist/services/mcp/middleware/oauthDiscoveryFallback.d.ts.map +1 -1
- package/dist/services/mcp/prompt-registry.d.ts +31 -3
- package/dist/services/mcp/prompt-registry.d.ts.map +1 -1
- package/dist/services/mcp/prompt-registry.js +31 -0
- package/dist/services/mcp/prompt-registry.js.map +1 -1
- package/dist/services/mcp/prompt-registry.mjs +31 -1
- package/dist/services/mcp/prompt-registry.mjs.map +1 -1
- package/dist/services/mcp/resource-registry.d.ts +31 -1
- package/dist/services/mcp/resource-registry.d.ts.map +1 -1
- package/dist/services/mcp/resource-registry.js +31 -0
- package/dist/services/mcp/resource-registry.js.map +1 -1
- package/dist/services/mcp/resource-registry.mjs +31 -1
- package/dist/services/mcp/resource-registry.mjs.map +1 -1
- package/dist/services/mcp/routes.d.ts +1 -1
- package/dist/services/mcp/routes.d.ts.map +1 -1
- package/dist/services/mcp/tool-registry.d.ts +36 -9
- package/dist/services/mcp/tool-registry.d.ts.map +1 -1
- package/dist/services/mcp/tool-registry.js +35 -3
- package/dist/services/mcp/tool-registry.js.map +1 -1
- package/dist/services/mcp/tool-registry.mjs +35 -3
- package/dist/services/mcp/tool-registry.mjs.map +1 -1
- package/dist/services/mcp/tools/log.d.ts +15 -85
- package/dist/services/mcp/tools/log.d.ts.map +1 -1
- package/dist/services/mcp/utils/createSafeCapabilityRegistration.d.ts.map +1 -1
- package/dist/services/mcp/utils/safeHandlerWrapper.d.ts.map +1 -1
- package/dist/services/mcp/utils/sendJsonRpcError.d.ts +0 -1
- package/dist/services/mcp/utils/sendJsonRpcError.d.ts.map +1 -1
- package/dist/services/mcp/utils/withTimeout.d.ts.map +1 -1
- package/dist/services/metrics/admin-user-hash.d.ts.map +1 -1
- package/dist/services/metrics/admin-user-hash.js +5 -1
- package/dist/services/metrics/admin-user-hash.js.map +1 -1
- package/dist/services/metrics/index.d.ts.map +1 -1
- package/dist/services/metrics/is-truthy.d.ts.map +1 -1
- package/dist/services/metrics/is-truthy.js +5 -1
- package/dist/services/metrics/is-truthy.js.map +1 -1
- package/dist/services/metrics/middleware.d.ts.map +1 -1
- package/dist/services/metrics/rate-limiter.d.ts +2 -1
- package/dist/services/metrics/rate-limiter.d.ts.map +1 -1
- package/dist/services/metrics/sender.d.ts.map +1 -1
- package/dist/services/metrics/sender.js +17 -9
- package/dist/services/metrics/sender.js.map +1 -1
- package/dist/services/query-params.d.ts.map +1 -1
- package/dist/services/reloader.d.ts.map +1 -1
- package/dist/services/request-context.d.ts.map +1 -1
- package/dist/services/server/admin-api.d.ts +3 -5
- package/dist/services/server/admin-api.d.ts.map +1 -1
- package/dist/services/server/api.d.ts +3 -4
- package/dist/services/server/api.d.ts.map +1 -1
- package/dist/services/server/api.js +5 -1
- package/dist/services/server/api.js.map +1 -1
- package/dist/services/server/compose-endpoint.d.ts.map +1 -1
- package/dist/services/server/compose-endpoint.js +5 -1
- package/dist/services/server/compose-endpoint.js.map +1 -1
- package/dist/services/server/content-api.d.ts +3 -5
- package/dist/services/server/content-api.d.ts.map +1 -1
- package/dist/services/server/http-server.d.ts +0 -1
- package/dist/services/server/http-server.d.ts.map +1 -1
- package/dist/services/server/http-server.js +5 -1
- package/dist/services/server/http-server.js.map +1 -1
- package/dist/services/server/index.d.ts.map +1 -1
- package/dist/services/server/index.js +5 -1
- package/dist/services/server/index.js.map +1 -1
- package/dist/services/server/koa-methods.d.ts +107 -0
- package/dist/services/server/koa-methods.d.ts.map +1 -0
- package/dist/services/server/koa-methods.js +24 -0
- package/dist/services/server/koa-methods.js.map +1 -0
- package/dist/services/server/koa-methods.mjs +22 -0
- package/dist/services/server/koa-methods.mjs.map +1 -0
- package/dist/services/server/koa.d.ts +0 -9
- package/dist/services/server/koa.d.ts.map +1 -1
- package/dist/services/server/koa.js +14 -10
- package/dist/services/server/koa.js.map +1 -1
- package/dist/services/server/koa.mjs +7 -9
- package/dist/services/server/koa.mjs.map +1 -1
- package/dist/services/server/middleware.d.ts.map +1 -1
- package/dist/services/server/middleware.js +5 -1
- package/dist/services/server/middleware.js.map +1 -1
- package/dist/services/server/openapi.d.ts.map +1 -1
- package/dist/services/server/openapi.js +11 -6
- package/dist/services/server/openapi.js.map +1 -1
- package/dist/services/server/policy.d.ts.map +1 -1
- package/dist/services/server/register-middlewares.d.ts.map +1 -1
- package/dist/services/server/register-routes.d.ts.map +1 -1
- package/dist/services/server/register-routes.js +8 -4
- package/dist/services/server/register-routes.js.map +1 -1
- package/dist/services/server/routing.d.ts +0 -2
- package/dist/services/server/routing.d.ts.map +1 -1
- package/dist/services/server/routing.js +5 -1
- package/dist/services/server/routing.js.map +1 -1
- package/dist/services/session-manager.d.ts +20 -0
- package/dist/services/session-manager.d.ts.map +1 -1
- package/dist/services/session-manager.js +71 -9
- package/dist/services/session-manager.js.map +1 -1
- package/dist/services/session-manager.mjs +57 -0
- package/dist/services/session-manager.mjs.map +1 -1
- package/dist/services/webhook-runner.js +7 -2
- package/dist/services/webhook-runner.js.map +1 -1
- package/dist/services/webhook-store.d.ts.map +1 -1
- package/dist/services/worker-queue.js +5 -1
- package/dist/services/worker-queue.js.map +1 -1
- package/dist/utils/convert-custom-field-type.d.ts.map +1 -1
- package/dist/utils/cron.d.ts.map +1 -1
- package/dist/utils/fetch.d.ts.map +1 -1
- package/dist/utils/filepath-to-prop-path.d.ts.map +1 -1
- package/dist/utils/filepath-to-prop-path.js +13 -8
- package/dist/utils/filepath-to-prop-path.js.map +1 -1
- package/dist/utils/is-initialized.d.ts.map +1 -1
- package/dist/utils/load-config-file.d.ts.map +1 -1
- package/dist/utils/load-config-file.js +7 -2
- package/dist/utils/load-config-file.js.map +1 -1
- package/dist/utils/load-files.d.ts +1 -1
- package/dist/utils/load-files.d.ts.map +1 -1
- package/dist/utils/load-files.js +12 -6
- package/dist/utils/load-files.js.map +1 -1
- package/dist/utils/open-browser.d.ts +0 -1
- package/dist/utils/open-browser.d.ts.map +1 -1
- package/dist/utils/open-browser.js +5 -1
- package/dist/utils/open-browser.js.map +1 -1
- package/dist/utils/resolve-working-dirs.d.ts.map +1 -1
- package/dist/utils/resolve-working-dirs.js +6 -2
- package/dist/utils/resolve-working-dirs.js.map +1 -1
- package/dist/utils/signals.d.ts.map +1 -1
- package/dist/utils/startup-logger.d.ts.map +1 -1
- package/dist/utils/startup-logger.js +27 -21
- package/dist/utils/startup-logger.js.map +1 -1
- package/dist/utils/transform-content-types-to-models.d.ts +3 -3
- package/dist/utils/transform-content-types-to-models.d.ts.map +1 -1
- package/dist/utils/transform-content-types-to-models.js +10 -5
- package/dist/utils/transform-content-types-to-models.js.map +1 -1
- package/dist/utils/update-notifier/index.d.ts.map +1 -1
- package/dist/utils/update-notifier/index.js +21 -8
- package/dist/utils/update-notifier/index.js.map +1 -1
- package/dist/utils/update-notifier/index.mjs +6 -1
- package/dist/utils/update-notifier/index.mjs.map +1 -1
- package/package.json +18 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.js","sources":["../../../src/services/server/openapi.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport * as openapi from '@strapi/openapi';\nimport type { Core } from '@strapi/types';\n\ntype OpenAPIConfig = Core.Config.OpenAPI;\ntype OpenAPIRouteType = keyof OpenAPIConfig;\ntype OpenAPIEndpointConfig = NonNullable<OpenAPIConfig[OpenAPIRouteType]>;\ntype OpenAPIAccess =\n | NonNullable<NonNullable<OpenAPIConfig['content-api']>['access']>\n | NonNullable<NonNullable<OpenAPIConfig['admin']>['access']>;\n\nconst SUPPORTED_ACCESS = {\n 'content-api': ['disabled', 'public'],\n admin: ['disabled', 'authenticated'],\n} as const satisfies Record<OpenAPIRouteType, readonly OpenAPIAccess[]>;\n\ninterface ResolvedEndpointConfig {\n type: OpenAPIRouteType;\n access: OpenAPIAccess;\n routePath: string;\n routerPrefix?: string;\n fullPath: string;\n cacheEnabled: boolean;\n cacheMaxAgeMs: number;\n absoluteCachePath: string;\n}\n\nconst DEFAULTS = {\n routePath: '/openapi.json',\n access: 'disabled' as const,\n cacheEnabled: true,\n cacheMaxAgeMs: 60_000,\n cacheRelativeFilePaths: {\n 'content-api': '.strapi/openapi/content-api.json',\n admin: '.strapi/openapi/admin.json',\n } as Record<OpenAPIRouteType, string>,\n};\n\nconst normalizePath = (value: string) => {\n if (!value) {\n return DEFAULTS.routePath;\n }\n\n return value.startsWith('/') ? value : `/${value}`;\n};\n\nconst joinPaths = (basePath: string, routePath: string) => {\n const normalizedBasePath = normalizePath(basePath || '/');\n const normalizedRoutePath = normalizePath(routePath || DEFAULTS.routePath);\n\n const trimmedBasePath = normalizedBasePath === '/' ? '' : normalizedBasePath.replace(/\\/+$/, '');\n\n return `${trimmedBasePath}${normalizedRoutePath}` || '/';\n};\n\nconst stripBasePrefix = (routePath: string, basePath: string) => {\n const normalizedBasePath = normalizePath(basePath || '/');\n const normalizedRoutePath = normalizePath(routePath || DEFAULTS.routePath);\n\n if (normalizedBasePath === '/') {\n return normalizedRoutePath;\n }\n\n if (normalizedRoutePath === normalizedBasePath) {\n return '/';\n }\n\n if (normalizedRoutePath.startsWith(`${normalizedBasePath}/`)) {\n const strippedPath = normalizedRoutePath.slice(normalizedBasePath.length);\n return normalizePath(strippedPath);\n }\n\n return normalizedRoutePath;\n};\n\nconst resolveEndpointConfig = (\n strapi: Core.Strapi,\n rawConfig: OpenAPIEndpointConfig | undefined,\n type: OpenAPIRouteType\n): ResolvedEndpointConfig => {\n const apiPrefix = strapi.config.get('api.rest.prefix', '/api');\n const adminPath = strapi.config.get('admin.path', '/admin');\n const basePath = type === 'content-api' ? apiPrefix : adminPath;\n\n const configuredPath = rawConfig?.route?.path ?? DEFAULTS.routePath;\n const routePath = stripBasePrefix(configuredPath, basePath);\n const routerPrefix = type === 'admin' ? normalizePath(basePath) : undefined;\n const fullPath =\n type === 'content-api'\n ? joinPaths(normalizePath(apiPrefix), routePath)\n : joinPaths(routerPrefix!, routePath);\n const access = rawConfig?.access ?? DEFAULTS.access;\n const supportedAccess = SUPPORTED_ACCESS[type];\n\n if (!(supportedAccess as readonly OpenAPIAccess[]).includes(access)) {\n throw new Error(\n `Invalid OpenAPI access \"${access}\" for \"${type}\". Expected one of: ${supportedAccess.join(', ')}`\n );\n }\n\n const cacheEnabled = rawConfig?.cache?.enabled ?? DEFAULTS.cacheEnabled;\n const cacheMaxAgeMs = rawConfig?.cache?.maxAgeMs ?? DEFAULTS.cacheMaxAgeMs;\n const configuredCachePath = rawConfig?.cache?.filePath ?? DEFAULTS.cacheRelativeFilePaths[type];\n const absoluteCachePath = path.isAbsolute(configuredCachePath)\n ? configuredCachePath\n : path.resolve(strapi.dirs.app.root, configuredCachePath);\n\n return {\n type,\n access,\n routePath,\n routerPrefix,\n fullPath,\n cacheEnabled,\n cacheMaxAgeMs,\n absoluteCachePath,\n };\n};\n\n/**\n * Build the route `config` (auth + policies) for an endpoint.\n *\n * - `admin`: requires an authenticated admin via the `admin::isAuthenticatedAdmin`\n * policy.\n * Granular per-permission RBAC is intentionally left for a later iteration.\n * - `content-api`: only supports public access for now, which disables auth so\n * anyone can read the spec.\n */\nconst buildRouteConfig = (config: ResolvedEndpointConfig): Record<string, unknown> => {\n if (config.type === 'admin') {\n return { policies: ['admin::isAuthenticatedAdmin'] };\n }\n\n return { auth: false };\n};\n\nconst resolveOpenAPIConfig = (strapi: Core.Strapi) => {\n const rawConfig = strapi.config.get('server.openapi', {}) as OpenAPIConfig;\n\n return [\n resolveEndpointConfig(strapi, rawConfig['content-api'], 'content-api'),\n resolveEndpointConfig(strapi, rawConfig.admin, 'admin'),\n ].filter((config) => config.access !== 'disabled');\n};\n\nconst readCache = async (cachePath: string, maxAgeMs: number) => {\n if (maxAgeMs < 0) {\n return null;\n }\n\n try {\n const stat = await fs.stat(cachePath);\n const ageMs = Date.now() - stat.mtimeMs;\n\n if (ageMs > maxAgeMs) {\n return null;\n }\n\n return await fs.readJson(cachePath);\n } catch {\n return null;\n }\n};\n\nconst writeCache = async (cachePath: string, document: unknown) => {\n await fs.outputJson(cachePath, document, { spaces: 2 });\n};\n\nconst generateDocument = (strapi: Core.Strapi, type: OpenAPIRouteType) => {\n return openapi.generate(strapi, { type }).document;\n};\n\nexport const registerOpenAPIRoute = (strapi: Core.Strapi) => {\n const configs = resolveOpenAPIConfig(strapi);\n\n if (!configs.length) {\n return;\n }\n\n const fullPathSet = new Set<string>();\n\n for (const config of configs) {\n if (fullPathSet.has(config.fullPath)) {\n throw new Error(`Duplicate OpenAPI endpoint path detected: \"${config.fullPath}\"`);\n }\n\n fullPathSet.add(config.fullPath);\n }\n\n const routers = configs.map((config) => {\n const handler: Core.MiddlewareHandler = async (ctx) => {\n try {\n if (config.cacheEnabled) {\n const cachedDocument = await readCache(config.absoluteCachePath, config.cacheMaxAgeMs);\n\n if (cachedDocument) {\n ctx.set('Content-Type', 'application/json');\n ctx.body = cachedDocument;\n return;\n }\n }\n\n const document = generateDocument(strapi, config.type);\n\n if (config.cacheEnabled) {\n await writeCache(config.absoluteCachePath, document);\n }\n\n ctx.set('Content-Type', 'application/json');\n ctx.body = document;\n } catch (error) {\n strapi.log.error(error);\n ctx.internalServerError('Failed to generate OpenAPI document');\n }\n };\n\n return {\n type: config.type,\n ...(config.routerPrefix ? { prefix: config.routerPrefix } : {}),\n routes: [\n {\n method: 'GET' as const,\n path: config.routePath,\n handler,\n info: {\n type: config.type,\n },\n config: buildRouteConfig(config),\n },\n ],\n };\n });\n\n routers.forEach((router) => strapi.server.routes(router));\n};\n"],"names":["SUPPORTED_ACCESS","admin","DEFAULTS","routePath","access","cacheEnabled","cacheMaxAgeMs","cacheRelativeFilePaths","normalizePath","value","startsWith","joinPaths","basePath","normalizedBasePath","normalizedRoutePath","trimmedBasePath","replace","stripBasePrefix","strippedPath","slice","length","resolveEndpointConfig","strapi","rawConfig","type","apiPrefix","config","get","adminPath","configuredPath","route","path","routerPrefix","undefined","fullPath","supportedAccess","includes","Error","join","cache","enabled","maxAgeMs","configuredCachePath","filePath","absoluteCachePath","isAbsolute","resolve","dirs","app","root","buildRouteConfig","policies","auth","resolveOpenAPIConfig","filter","readCache","cachePath","stat","fs","ageMs","Date","now","mtimeMs","readJson","writeCache","document","outputJson","spaces","generateDocument","openapi","generate","registerOpenAPIRoute","configs","fullPathSet","Set","has","add","routers","map","handler","ctx","cachedDocument","set","body","error","log","internalServerError","prefix","routes","method","info","forEach","router","server"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"openapi.js","sources":["../../../src/services/server/openapi.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport * as openapi from '@strapi/openapi';\nimport type { Core } from '@strapi/types';\n\ntype OpenAPIConfig = Core.Config.OpenAPI;\ntype OpenAPIRouteType = keyof OpenAPIConfig;\ntype OpenAPIEndpointConfig = NonNullable<OpenAPIConfig[OpenAPIRouteType]>;\ntype OpenAPIAccess =\n | NonNullable<NonNullable<OpenAPIConfig['content-api']>['access']>\n | NonNullable<NonNullable<OpenAPIConfig['admin']>['access']>;\n\nconst SUPPORTED_ACCESS = {\n 'content-api': ['disabled', 'public'],\n admin: ['disabled', 'authenticated'],\n} as const satisfies Record<OpenAPIRouteType, readonly OpenAPIAccess[]>;\n\ninterface ResolvedEndpointConfig {\n type: OpenAPIRouteType;\n access: OpenAPIAccess;\n routePath: string;\n routerPrefix?: string;\n fullPath: string;\n cacheEnabled: boolean;\n cacheMaxAgeMs: number;\n absoluteCachePath: string;\n}\n\nconst DEFAULTS = {\n routePath: '/openapi.json',\n access: 'disabled' as const,\n cacheEnabled: true,\n cacheMaxAgeMs: 60_000,\n cacheRelativeFilePaths: {\n 'content-api': '.strapi/openapi/content-api.json',\n admin: '.strapi/openapi/admin.json',\n } as Record<OpenAPIRouteType, string>,\n};\n\nconst normalizePath = (value: string) => {\n if (!value) {\n return DEFAULTS.routePath;\n }\n\n return value.startsWith('/') ? value : `/${value}`;\n};\n\nconst joinPaths = (basePath: string, routePath: string) => {\n const normalizedBasePath = normalizePath(basePath || '/');\n const normalizedRoutePath = normalizePath(routePath || DEFAULTS.routePath);\n\n const trimmedBasePath = normalizedBasePath === '/' ? '' : normalizedBasePath.replace(/\\/+$/, '');\n\n return `${trimmedBasePath}${normalizedRoutePath}` || '/';\n};\n\nconst stripBasePrefix = (routePath: string, basePath: string) => {\n const normalizedBasePath = normalizePath(basePath || '/');\n const normalizedRoutePath = normalizePath(routePath || DEFAULTS.routePath);\n\n if (normalizedBasePath === '/') {\n return normalizedRoutePath;\n }\n\n if (normalizedRoutePath === normalizedBasePath) {\n return '/';\n }\n\n if (normalizedRoutePath.startsWith(`${normalizedBasePath}/`)) {\n const strippedPath = normalizedRoutePath.slice(normalizedBasePath.length);\n return normalizePath(strippedPath);\n }\n\n return normalizedRoutePath;\n};\n\nconst resolveEndpointConfig = (\n strapi: Core.Strapi,\n rawConfig: OpenAPIEndpointConfig | undefined,\n type: OpenAPIRouteType\n): ResolvedEndpointConfig => {\n const apiPrefix = strapi.config.get('api.rest.prefix', '/api');\n const adminPath = strapi.config.get('admin.path', '/admin');\n const basePath = type === 'content-api' ? apiPrefix : adminPath;\n\n const configuredPath = rawConfig?.route?.path ?? DEFAULTS.routePath;\n const routePath = stripBasePrefix(configuredPath, basePath);\n const routerPrefix = type === 'admin' ? normalizePath(basePath) : undefined;\n const fullPath =\n type === 'content-api'\n ? joinPaths(normalizePath(apiPrefix), routePath)\n : joinPaths(routerPrefix!, routePath);\n const access = rawConfig?.access ?? DEFAULTS.access;\n const supportedAccess = SUPPORTED_ACCESS[type];\n\n if (!(supportedAccess as readonly OpenAPIAccess[]).includes(access)) {\n throw new Error(\n `Invalid OpenAPI access \"${access}\" for \"${type}\". Expected one of: ${supportedAccess.join(', ')}`\n );\n }\n\n const cacheEnabled = rawConfig?.cache?.enabled ?? DEFAULTS.cacheEnabled;\n const cacheMaxAgeMs = rawConfig?.cache?.maxAgeMs ?? DEFAULTS.cacheMaxAgeMs;\n const configuredCachePath = rawConfig?.cache?.filePath ?? DEFAULTS.cacheRelativeFilePaths[type];\n const absoluteCachePath = path.isAbsolute(configuredCachePath)\n ? configuredCachePath\n : path.resolve(strapi.dirs.app.root, configuredCachePath);\n\n return {\n type,\n access,\n routePath,\n routerPrefix,\n fullPath,\n cacheEnabled,\n cacheMaxAgeMs,\n absoluteCachePath,\n };\n};\n\n/**\n * Build the route `config` (auth + policies) for an endpoint.\n *\n * - `admin`: requires an authenticated admin via the `admin::isAuthenticatedAdmin`\n * policy.\n * Granular per-permission RBAC is intentionally left for a later iteration.\n * - `content-api`: only supports public access for now, which disables auth so\n * anyone can read the spec.\n */\nconst buildRouteConfig = (config: ResolvedEndpointConfig): Record<string, unknown> => {\n if (config.type === 'admin') {\n return { policies: ['admin::isAuthenticatedAdmin'] };\n }\n\n return { auth: false };\n};\n\nconst resolveOpenAPIConfig = (strapi: Core.Strapi) => {\n const rawConfig = strapi.config.get('server.openapi', {}) as OpenAPIConfig;\n\n return [\n resolveEndpointConfig(strapi, rawConfig['content-api'], 'content-api'),\n resolveEndpointConfig(strapi, rawConfig.admin, 'admin'),\n ].filter((config) => config.access !== 'disabled');\n};\n\nconst readCache = async (cachePath: string, maxAgeMs: number) => {\n if (maxAgeMs < 0) {\n return null;\n }\n\n try {\n const stat = await fs.stat(cachePath);\n const ageMs = Date.now() - stat.mtimeMs;\n\n if (ageMs > maxAgeMs) {\n return null;\n }\n\n return await fs.readJson(cachePath);\n } catch {\n return null;\n }\n};\n\nconst writeCache = async (cachePath: string, document: unknown) => {\n await fs.outputJson(cachePath, document, { spaces: 2 });\n};\n\nconst generateDocument = (strapi: Core.Strapi, type: OpenAPIRouteType) => {\n return openapi.generate(strapi, { type }).document;\n};\n\nexport const registerOpenAPIRoute = (strapi: Core.Strapi) => {\n const configs = resolveOpenAPIConfig(strapi);\n\n if (!configs.length) {\n return;\n }\n\n const fullPathSet = new Set<string>();\n\n for (const config of configs) {\n if (fullPathSet.has(config.fullPath)) {\n throw new Error(`Duplicate OpenAPI endpoint path detected: \"${config.fullPath}\"`);\n }\n\n fullPathSet.add(config.fullPath);\n }\n\n const routers = configs.map((config) => {\n const handler: Core.MiddlewareHandler = async (ctx) => {\n try {\n if (config.cacheEnabled) {\n const cachedDocument = await readCache(config.absoluteCachePath, config.cacheMaxAgeMs);\n\n if (cachedDocument) {\n ctx.set('Content-Type', 'application/json');\n ctx.body = cachedDocument;\n return;\n }\n }\n\n const document = generateDocument(strapi, config.type);\n\n if (config.cacheEnabled) {\n await writeCache(config.absoluteCachePath, document);\n }\n\n ctx.set('Content-Type', 'application/json');\n ctx.body = document;\n } catch (error) {\n strapi.log.error(error);\n ctx.internalServerError('Failed to generate OpenAPI document');\n }\n };\n\n return {\n type: config.type,\n ...(config.routerPrefix ? { prefix: config.routerPrefix } : {}),\n routes: [\n {\n method: 'GET' as const,\n path: config.routePath,\n handler,\n info: {\n type: config.type,\n },\n config: buildRouteConfig(config),\n },\n ],\n };\n });\n\n routers.forEach((router) => strapi.server.routes(router));\n};\n"],"names":["SUPPORTED_ACCESS","admin","DEFAULTS","routePath","access","cacheEnabled","cacheMaxAgeMs","cacheRelativeFilePaths","normalizePath","value","startsWith","joinPaths","basePath","normalizedBasePath","normalizedRoutePath","trimmedBasePath","replace","stripBasePrefix","strippedPath","slice","length","resolveEndpointConfig","strapi","rawConfig","type","apiPrefix","config","get","adminPath","configuredPath","route","path","routerPrefix","undefined","fullPath","supportedAccess","includes","Error","join","cache","enabled","maxAgeMs","configuredCachePath","filePath","absoluteCachePath","isAbsolute","resolve","dirs","app","root","buildRouteConfig","policies","auth","resolveOpenAPIConfig","filter","readCache","cachePath","stat","fs","ageMs","Date","now","mtimeMs","readJson","writeCache","document","outputJson","spaces","generateDocument","openapi","generate","registerOpenAPIRoute","configs","fullPathSet","Set","has","add","routers","map","handler","ctx","cachedDocument","set","body","error","log","internalServerError","prefix","routes","method","info","forEach","router","server"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../src/services/server/policy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,QAAA,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../src/services/server/policy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,QAAA,MAAM,yBAAyB,GAAI,OAAO,IAAI,CAAC,KAAK,EAAE,QAAQ,IAAI,CAAC,MAAM,2BAmBxE,CAAC;AAEF,OAAO,EAAE,yBAAyB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-middlewares.d.ts","sourceRoot":"","sources":["../../../src/services/server/register-middlewares.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAiD1C;;GAEG;AACH,QAAA,MAAM,8BAA8B,
|
|
1
|
+
{"version":3,"file":"register-middlewares.d.ts","sourceRoot":"","sources":["../../../src/services/server/register-middlewares.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAiD1C;;GAEG;AACH,QAAA,MAAM,8BAA8B,GAAU,QAAQ,IAAI,CAAC,MAAM,kBAchE,CAAC;AAkCF,eAAe,8BAA8B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-routes.d.ts","sourceRoot":"","sources":["../../../src/services/server/register-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAiB1C;;GAEG;
|
|
1
|
+
{"version":3,"file":"register-routes.d.ts","sourceRoot":"","sources":["../../../src/services/server/register-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAiB1C;;GAEG;yBACa,QAAQ,IAAI,CAAC,MAAM;AAAnC,wBAKE"}
|
|
@@ -3,10 +3,14 @@
|
|
|
3
3
|
var _ = require('lodash');
|
|
4
4
|
var openapi = require('./openapi.js');
|
|
5
5
|
|
|
6
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
+
|
|
8
|
+
var ___default = /*#__PURE__*/_interopDefault(_);
|
|
9
|
+
|
|
6
10
|
const createRouteScopeGenerator = (namespace)=>(route)=>{
|
|
7
11
|
const prefix = namespace.endsWith('::') ? namespace : `${namespace}.`;
|
|
8
12
|
if (typeof route.handler === 'string') {
|
|
9
|
-
|
|
13
|
+
___default.default.defaultsDeep(route, {
|
|
10
14
|
config: {
|
|
11
15
|
auth: {
|
|
12
16
|
scope: [
|
|
@@ -33,7 +37,7 @@ const createRouteScopeGenerator = (namespace)=>(route)=>{
|
|
|
33
37
|
// Instantiate function-like routers
|
|
34
38
|
// Mutate admin.routes in-place and make sure router factories are instantiated correctly
|
|
35
39
|
strapi.admin.routes = instantiateRouterInputs(strapi.admin.routes, strapi);
|
|
36
|
-
|
|
40
|
+
___default.default.forEach(strapi.admin.routes, (router)=>{
|
|
37
41
|
router.type = router.type || 'admin';
|
|
38
42
|
router.prefix = router.prefix || `/admin`;
|
|
39
43
|
router.routes.forEach((route)=>{
|
|
@@ -69,7 +73,7 @@ const createRouteScopeGenerator = (namespace)=>(route)=>{
|
|
|
69
73
|
// Instantiate function-like routers
|
|
70
74
|
// Mutate plugin.routes in-place and make sure router factories are instantiated correctly
|
|
71
75
|
plugin.routes = instantiateRouterInputs(plugin.routes, strapi);
|
|
72
|
-
|
|
76
|
+
___default.default.forEach(plugin.routes, (router)=>{
|
|
73
77
|
router.type = router.type ?? 'admin';
|
|
74
78
|
router.prefix = router.prefix ?? `/${pluginName}`;
|
|
75
79
|
router.routes.forEach((route)=>{
|
|
@@ -92,7 +96,7 @@ const createRouteScopeGenerator = (namespace)=>(route)=>{
|
|
|
92
96
|
const generateRouteScope = createRouteScopeGenerator(`api::${apiName}`);
|
|
93
97
|
// Mutate api.routes in-place and make sure router factories are instantiated correctly
|
|
94
98
|
api.routes = instantiateRouterInputs(api.routes, strapi);
|
|
95
|
-
|
|
99
|
+
___default.default.forEach(api.routes, (router)=>{
|
|
96
100
|
// TODO: remove once auth setup
|
|
97
101
|
// pass meta down to compose endpoint
|
|
98
102
|
router.type = 'content-api';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-routes.js","sources":["../../../src/services/server/register-routes.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Core } from '@strapi/types';\nimport { registerOpenAPIRoute } from './openapi';\n\nconst createRouteScopeGenerator = (namespace: string) => (route: Core.RouteInput) => {\n const prefix = namespace.endsWith('::') ? namespace : `${namespace}.`;\n\n if (typeof route.handler === 'string') {\n _.defaultsDeep(route, {\n config: {\n auth: {\n scope: [`${route.handler.startsWith(prefix) ? '' : prefix}${route.handler}`],\n },\n },\n });\n }\n};\n\n/**\n * Register all routes\n */\nexport default (strapi: Core.Strapi) => {\n registerAdminRoutes(strapi);\n registerAPIRoutes(strapi);\n registerPluginRoutes(strapi);\n registerOpenAPIRoute(strapi);\n};\n\n/**\n * Register admin routes\n * @param {import('../../').Strapi} strapi\n */\nconst registerAdminRoutes = (strapi: Core.Strapi) => {\n const generateRouteScope = createRouteScopeGenerator(`admin::`);\n\n // Instantiate function-like routers\n // Mutate admin.routes in-place and make sure router factories are instantiated correctly\n strapi.admin.routes = instantiateRouterInputs(strapi.admin.routes, strapi);\n\n _.forEach(strapi.admin.routes, (router) => {\n router.type = router.type || 'admin';\n router.prefix = router.prefix || `/admin`;\n router.routes.forEach((route) => {\n generateRouteScope(route);\n route.info = { pluginName: 'admin' };\n });\n strapi.server.routes(router);\n });\n};\n\n/**\n * Register plugin routes\n * @param {import('../../').Strapi} strapi\n */\nconst registerPluginRoutes = (strapi: Core.Strapi) => {\n for (const pluginName of Object.keys(strapi.plugins)) {\n const plugin = strapi.plugins[pluginName];\n\n const generateRouteScope = createRouteScopeGenerator(`plugin::${pluginName}`);\n\n if (Array.isArray(plugin.routes)) {\n plugin.routes.forEach((route) => {\n generateRouteScope(route);\n route.info = { pluginName };\n });\n strapi.contentAPI.applyExtraParamsToRoutes(plugin.routes);\n\n strapi.server.routes({\n type: 'admin',\n prefix: `/${pluginName}`,\n routes: plugin.routes,\n });\n } else {\n // Instantiate function-like routers\n // Mutate plugin.routes in-place and make sure router factories are instantiated correctly\n plugin.routes = instantiateRouterInputs(plugin.routes, strapi);\n\n _.forEach(plugin.routes, (router) => {\n router.type = router.type ?? 'admin';\n router.prefix = router.prefix ?? `/${pluginName}`;\n router.routes.forEach((route) => {\n generateRouteScope(route);\n route.info = { pluginName };\n });\n strapi.contentAPI.applyExtraParamsToRoutes(router.routes ?? []);\n\n strapi.server.routes(router);\n });\n }\n }\n};\n\n/**\n * Register api routes\n */\nconst registerAPIRoutes = (strapi: Core.Strapi) => {\n for (const apiName of Object.keys(strapi.apis)) {\n const api = strapi.api(apiName);\n\n const generateRouteScope = createRouteScopeGenerator(`api::${apiName}`);\n\n // Mutate api.routes in-place and make sure router factories are instantiated correctly\n api.routes = instantiateRouterInputs(api.routes, strapi);\n\n _.forEach(api.routes, (router) => {\n // TODO: remove once auth setup\n // pass meta down to compose endpoint\n router.type = 'content-api';\n router.routes?.forEach((route) => {\n generateRouteScope(route);\n route.info = { apiName };\n });\n strapi.contentAPI.applyExtraParamsToRoutes(router.routes ?? []);\n\n return strapi.server.routes(router);\n });\n }\n};\n\nconst instantiateRouterInputs = (\n routers: Record<string, Core.RouterConfig>,\n strapi: Core.Strapi\n): Record<string, Core.Router> => {\n const entries = Object.entries(routers);\n\n return entries.reduce((record, [key, inputOrCallback]) => {\n const isCallback = typeof inputOrCallback === 'function';\n\n return { ...record, [key]: isCallback ? inputOrCallback({ strapi }) : inputOrCallback };\n }, {});\n};\n"],"names":["createRouteScopeGenerator","namespace","route","prefix","endsWith","handler","_","defaultsDeep","config","auth","scope","startsWith","strapi","registerAdminRoutes","registerAPIRoutes","registerPluginRoutes","registerOpenAPIRoute","generateRouteScope","admin","routes","instantiateRouterInputs","forEach","router","type","info","pluginName","server","Object","keys","plugins","plugin","Array","isArray","contentAPI","applyExtraParamsToRoutes","apiName","apis","api","routers","entries","reduce","record","key","inputOrCallback","isCallback"],"mappings":"
|
|
1
|
+
{"version":3,"file":"register-routes.js","sources":["../../../src/services/server/register-routes.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Core } from '@strapi/types';\nimport { registerOpenAPIRoute } from './openapi';\n\nconst createRouteScopeGenerator = (namespace: string) => (route: Core.RouteInput) => {\n const prefix = namespace.endsWith('::') ? namespace : `${namespace}.`;\n\n if (typeof route.handler === 'string') {\n _.defaultsDeep(route, {\n config: {\n auth: {\n scope: [`${route.handler.startsWith(prefix) ? '' : prefix}${route.handler}`],\n },\n },\n });\n }\n};\n\n/**\n * Register all routes\n */\nexport default (strapi: Core.Strapi) => {\n registerAdminRoutes(strapi);\n registerAPIRoutes(strapi);\n registerPluginRoutes(strapi);\n registerOpenAPIRoute(strapi);\n};\n\n/**\n * Register admin routes\n * @param {import('../../').Strapi} strapi\n */\nconst registerAdminRoutes = (strapi: Core.Strapi) => {\n const generateRouteScope = createRouteScopeGenerator(`admin::`);\n\n // Instantiate function-like routers\n // Mutate admin.routes in-place and make sure router factories are instantiated correctly\n strapi.admin.routes = instantiateRouterInputs(strapi.admin.routes, strapi);\n\n _.forEach(strapi.admin.routes, (router) => {\n router.type = router.type || 'admin';\n router.prefix = router.prefix || `/admin`;\n router.routes.forEach((route) => {\n generateRouteScope(route);\n route.info = { pluginName: 'admin' };\n });\n strapi.server.routes(router);\n });\n};\n\n/**\n * Register plugin routes\n * @param {import('../../').Strapi} strapi\n */\nconst registerPluginRoutes = (strapi: Core.Strapi) => {\n for (const pluginName of Object.keys(strapi.plugins)) {\n const plugin = strapi.plugins[pluginName];\n\n const generateRouteScope = createRouteScopeGenerator(`plugin::${pluginName}`);\n\n if (Array.isArray(plugin.routes)) {\n plugin.routes.forEach((route) => {\n generateRouteScope(route);\n route.info = { pluginName };\n });\n strapi.contentAPI.applyExtraParamsToRoutes(plugin.routes);\n\n strapi.server.routes({\n type: 'admin',\n prefix: `/${pluginName}`,\n routes: plugin.routes,\n });\n } else {\n // Instantiate function-like routers\n // Mutate plugin.routes in-place and make sure router factories are instantiated correctly\n plugin.routes = instantiateRouterInputs(plugin.routes, strapi);\n\n _.forEach(plugin.routes, (router) => {\n router.type = router.type ?? 'admin';\n router.prefix = router.prefix ?? `/${pluginName}`;\n router.routes.forEach((route) => {\n generateRouteScope(route);\n route.info = { pluginName };\n });\n strapi.contentAPI.applyExtraParamsToRoutes(router.routes ?? []);\n\n strapi.server.routes(router);\n });\n }\n }\n};\n\n/**\n * Register api routes\n */\nconst registerAPIRoutes = (strapi: Core.Strapi) => {\n for (const apiName of Object.keys(strapi.apis)) {\n const api = strapi.api(apiName);\n\n const generateRouteScope = createRouteScopeGenerator(`api::${apiName}`);\n\n // Mutate api.routes in-place and make sure router factories are instantiated correctly\n api.routes = instantiateRouterInputs(api.routes, strapi);\n\n _.forEach(api.routes, (router) => {\n // TODO: remove once auth setup\n // pass meta down to compose endpoint\n router.type = 'content-api';\n router.routes?.forEach((route) => {\n generateRouteScope(route);\n route.info = { apiName };\n });\n strapi.contentAPI.applyExtraParamsToRoutes(router.routes ?? []);\n\n return strapi.server.routes(router);\n });\n }\n};\n\nconst instantiateRouterInputs = (\n routers: Record<string, Core.RouterConfig>,\n strapi: Core.Strapi\n): Record<string, Core.Router> => {\n const entries = Object.entries(routers);\n\n return entries.reduce((record, [key, inputOrCallback]) => {\n const isCallback = typeof inputOrCallback === 'function';\n\n return { ...record, [key]: isCallback ? inputOrCallback({ strapi }) : inputOrCallback };\n }, {});\n};\n"],"names":["createRouteScopeGenerator","namespace","route","prefix","endsWith","handler","_","defaultsDeep","config","auth","scope","startsWith","strapi","registerAdminRoutes","registerAPIRoutes","registerPluginRoutes","registerOpenAPIRoute","generateRouteScope","admin","routes","instantiateRouterInputs","forEach","router","type","info","pluginName","server","Object","keys","plugins","plugin","Array","isArray","contentAPI","applyExtraParamsToRoutes","apiName","apis","api","routers","entries","reduce","record","key","inputOrCallback","isCallback"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../../src/services/server/routing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../../src/services/server/routing.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAkE1C,QAAA,MAAM,mBAAmB,GAAI,aAAa,IAAI,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAYxD,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,OAAM;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO;wBAmBhD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,MAAM;CAkB3E,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -5,6 +5,10 @@ var fp = require('lodash/fp');
|
|
|
5
5
|
var strapiUtils = require('@strapi/utils');
|
|
6
6
|
var composeEndpoint = require('./compose-endpoint.js');
|
|
7
7
|
|
|
8
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
|
|
10
|
+
var Router__default = /*#__PURE__*/_interopDefault(Router);
|
|
11
|
+
|
|
8
12
|
const policyOrMiddlewareSchema = strapiUtils.yup.lazy((value)=>{
|
|
9
13
|
if (typeof value === 'string') {
|
|
10
14
|
return strapiUtils.yup.string().required();
|
|
@@ -90,7 +94,7 @@ const createRouteManager = (strapi, opts = {})=>{
|
|
|
90
94
|
if (Array.isArray(routes)) {
|
|
91
95
|
routes.forEach((route)=>createRoute(route, router));
|
|
92
96
|
} else if (routes.routes) {
|
|
93
|
-
const subRouter = new
|
|
97
|
+
const subRouter = new Router__default.default({
|
|
94
98
|
prefix: routes.prefix
|
|
95
99
|
});
|
|
96
100
|
routes.routes.forEach((route)=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.js","sources":["../../../src/services/server/routing.ts"],"sourcesContent":["import Router from '@koa/router';\nimport { has } from 'lodash/fp';\nimport { yup } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nimport createEndpointComposer from './compose-endpoint';\n\nconst policyOrMiddlewareSchema = yup.lazy((value) => {\n if (typeof value === 'string') {\n return yup.string().required();\n }\n\n if (typeof value === 'function') {\n return yup.mixed().isFunction();\n }\n\n return yup.object({\n name: yup.string().required(),\n options: yup.object().notRequired(), // any options\n });\n});\n\nconst routeSchema = yup.object({\n method: yup.string().oneOf(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'ALL']).required(),\n path: yup.string().required(),\n handler: yup.lazy((value) => {\n if (typeof value === 'string') {\n return yup.string().required();\n }\n\n if (Array.isArray(value)) {\n return yup.array().required();\n }\n\n return yup.mixed().isFunction().required();\n }),\n request: yup\n .object({\n params: yup.object().notRequired(),\n query: yup.object().notRequired(),\n body: yup.object().notRequired(),\n })\n .notRequired(),\n response: yup.object().notRequired(),\n config: yup\n .object({\n auth: yup.lazy((value) => {\n if (value === false) {\n return yup.boolean().required();\n }\n\n return yup.object({\n scope: yup.array().of(yup.string()).required(),\n });\n }),\n policies: yup\n .array()\n // FIXME: fixed in yup v1\n .of(policyOrMiddlewareSchema as any)\n .notRequired(),\n middlewares: yup\n .array()\n // FIXME: fixed in yup v1\n .of(policyOrMiddlewareSchema as any)\n .notRequired(),\n })\n .notRequired(),\n});\n\nconst validateRouteConfig = (routeConfig: Core.RouteInput) => {\n try {\n return routeSchema.validateSync(routeConfig, {\n strict: true,\n abortEarly: false,\n stripUnknown: true,\n });\n } catch (error) {\n if (error instanceof yup.ValidationError) {\n throw new Error(`Invalid route config ${error.message}`);\n }\n }\n};\n\nconst createRouteManager = (strapi: Core.Strapi, opts: { type?: string } = {}) => {\n const { type } = opts;\n\n const composeEndpoint = createEndpointComposer(strapi);\n\n const createRoute = (route: Core.RouteInput, router: Router) => {\n validateRouteConfig(route);\n\n // NOTE: the router type is used to tag controller actions and for authentication / authorization so we need to pass this info down to the route level\n const routeWithInfo = Object.assign(route, {\n info: {\n ...(route.info ?? {}),\n type: type ?? 'api',\n },\n });\n\n composeEndpoint(routeWithInfo, { router });\n };\n\n const addRoutes = (routes: Core.Router | Core.RouteInput[], router: Router) => {\n if (Array.isArray(routes)) {\n routes.forEach((route) => createRoute(route, router));\n } else if (routes.routes) {\n const subRouter = new Router({ prefix: routes.prefix });\n\n routes.routes.forEach((route) => {\n const hasPrefix = has('prefix', route.config);\n createRoute(route, hasPrefix ? router : subRouter);\n });\n\n return router.use(subRouter.routes(), subRouter.allowedMethods());\n }\n };\n\n return {\n addRoutes,\n };\n};\n\nexport { validateRouteConfig, createRouteManager };\n"],"names":["policyOrMiddlewareSchema","yup","lazy","value","string","required","mixed","isFunction","object","name","options","notRequired","routeSchema","method","oneOf","path","handler","Array","isArray","array","request","params","query","body","response","config","auth","boolean","scope","of","policies","middlewares","validateRouteConfig","routeConfig","validateSync","strict","abortEarly","stripUnknown","error","ValidationError","Error","message","createRouteManager","strapi","opts","type","composeEndpoint","createEndpointComposer","createRoute","route","router","routeWithInfo","Object","assign","info","addRoutes","routes","forEach","subRouter","Router","prefix","hasPrefix","has","use","allowedMethods"],"mappings":"
|
|
1
|
+
{"version":3,"file":"routing.js","sources":["../../../src/services/server/routing.ts"],"sourcesContent":["import Router from '@koa/router';\nimport { has } from 'lodash/fp';\nimport { yup } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nimport createEndpointComposer from './compose-endpoint';\n\nconst policyOrMiddlewareSchema = yup.lazy((value) => {\n if (typeof value === 'string') {\n return yup.string().required();\n }\n\n if (typeof value === 'function') {\n return yup.mixed().isFunction();\n }\n\n return yup.object({\n name: yup.string().required(),\n options: yup.object().notRequired(), // any options\n });\n});\n\nconst routeSchema = yup.object({\n method: yup.string().oneOf(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'ALL']).required(),\n path: yup.string().required(),\n handler: yup.lazy((value) => {\n if (typeof value === 'string') {\n return yup.string().required();\n }\n\n if (Array.isArray(value)) {\n return yup.array().required();\n }\n\n return yup.mixed().isFunction().required();\n }),\n request: yup\n .object({\n params: yup.object().notRequired(),\n query: yup.object().notRequired(),\n body: yup.object().notRequired(),\n })\n .notRequired(),\n response: yup.object().notRequired(),\n config: yup\n .object({\n auth: yup.lazy((value) => {\n if (value === false) {\n return yup.boolean().required();\n }\n\n return yup.object({\n scope: yup.array().of(yup.string()).required(),\n });\n }),\n policies: yup\n .array()\n // FIXME: fixed in yup v1\n .of(policyOrMiddlewareSchema as any)\n .notRequired(),\n middlewares: yup\n .array()\n // FIXME: fixed in yup v1\n .of(policyOrMiddlewareSchema as any)\n .notRequired(),\n })\n .notRequired(),\n});\n\nconst validateRouteConfig = (routeConfig: Core.RouteInput) => {\n try {\n return routeSchema.validateSync(routeConfig, {\n strict: true,\n abortEarly: false,\n stripUnknown: true,\n });\n } catch (error) {\n if (error instanceof yup.ValidationError) {\n throw new Error(`Invalid route config ${error.message}`);\n }\n }\n};\n\nconst createRouteManager = (strapi: Core.Strapi, opts: { type?: string } = {}) => {\n const { type } = opts;\n\n const composeEndpoint = createEndpointComposer(strapi);\n\n const createRoute = (route: Core.RouteInput, router: Router) => {\n validateRouteConfig(route);\n\n // NOTE: the router type is used to tag controller actions and for authentication / authorization so we need to pass this info down to the route level\n const routeWithInfo = Object.assign(route, {\n info: {\n ...(route.info ?? {}),\n type: type ?? 'api',\n },\n });\n\n composeEndpoint(routeWithInfo, { router });\n };\n\n const addRoutes = (routes: Core.Router | Core.RouteInput[], router: Router) => {\n if (Array.isArray(routes)) {\n routes.forEach((route) => createRoute(route, router));\n } else if (routes.routes) {\n const subRouter = new Router({ prefix: routes.prefix });\n\n routes.routes.forEach((route) => {\n const hasPrefix = has('prefix', route.config);\n createRoute(route, hasPrefix ? router : subRouter);\n });\n\n return router.use(subRouter.routes(), subRouter.allowedMethods());\n }\n };\n\n return {\n addRoutes,\n };\n};\n\nexport { validateRouteConfig, createRouteManager };\n"],"names":["policyOrMiddlewareSchema","yup","lazy","value","string","required","mixed","isFunction","object","name","options","notRequired","routeSchema","method","oneOf","path","handler","Array","isArray","array","request","params","query","body","response","config","auth","boolean","scope","of","policies","middlewares","validateRouteConfig","routeConfig","validateSync","strict","abortEarly","stripUnknown","error","ValidationError","Error","message","createRouteManager","strapi","opts","type","composeEndpoint","createEndpointComposer","createRoute","route","router","routeWithInfo","Object","assign","info","addRoutes","routes","forEach","subRouter","Router","prefix","hasPrefix","has","use","allowedMethods"],"mappings":"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"}
|
|
@@ -3,6 +3,11 @@ import type { Database } from '@strapi/database';
|
|
|
3
3
|
export interface SessionProvider {
|
|
4
4
|
create(session: SessionData): Promise<SessionData>;
|
|
5
5
|
findBySessionId(sessionId: string): Promise<SessionData | null>;
|
|
6
|
+
findByUser(criteria: {
|
|
7
|
+
userId: string;
|
|
8
|
+
origin: string;
|
|
9
|
+
status?: SessionData['status'];
|
|
10
|
+
}): Promise<SessionData[]>;
|
|
6
11
|
updateBySessionId(sessionId: string, data: Partial<SessionData>): Promise<void>;
|
|
7
12
|
deleteBySessionId(sessionId: string): Promise<void>;
|
|
8
13
|
deleteExpired(): Promise<void>;
|
|
@@ -21,6 +26,7 @@ export interface SessionData {
|
|
|
21
26
|
childId?: string | null;
|
|
22
27
|
type?: 'refresh' | 'session';
|
|
23
28
|
status?: 'active' | 'rotated' | 'revoked';
|
|
29
|
+
metadata?: Record<string, unknown> | null;
|
|
24
30
|
expiresAt: Date;
|
|
25
31
|
absoluteExpiresAt?: Date | null;
|
|
26
32
|
createdAt?: Date;
|
|
@@ -63,6 +69,7 @@ declare class OriginSessionManager {
|
|
|
63
69
|
constructor(sessionManager: SessionManager, origin: string);
|
|
64
70
|
generateRefreshToken(userId: string, deviceId: string | undefined, options?: {
|
|
65
71
|
type?: 'refresh' | 'session';
|
|
72
|
+
metadata?: Record<string, unknown>;
|
|
66
73
|
}): Promise<{
|
|
67
74
|
token: string;
|
|
68
75
|
sessionId: string;
|
|
@@ -90,6 +97,16 @@ declare class OriginSessionManager {
|
|
|
90
97
|
};
|
|
91
98
|
validateRefreshToken(token: string): Promise<ValidateRefreshTokenResult>;
|
|
92
99
|
invalidateRefreshToken(userId: string, deviceId?: string): Promise<void>;
|
|
100
|
+
/**
|
|
101
|
+
* Lists the active sessions of a user for this origin. Rotated/expired records
|
|
102
|
+
* are excluded so each live login family yields a single entry.
|
|
103
|
+
*/
|
|
104
|
+
listSessions(userId: string): Promise<SessionData[]>;
|
|
105
|
+
/**
|
|
106
|
+
* Revokes a single session by id, but only if it belongs to the given user and origin.
|
|
107
|
+
* Returns true when a matching session was found and deleted.
|
|
108
|
+
*/
|
|
109
|
+
revokeSessionById(userId: string, sessionId: string): Promise<boolean>;
|
|
93
110
|
/**
|
|
94
111
|
* Returns true when a session exists and is not expired for this origin.
|
|
95
112
|
* If the session exists but is expired, it will be deleted as part of this check.
|
|
@@ -126,6 +143,7 @@ declare class SessionManager {
|
|
|
126
143
|
get cleanupThreshold(): number;
|
|
127
144
|
generateRefreshToken(userId: string, deviceId: string | undefined, origin: string, options?: {
|
|
128
145
|
type?: 'refresh' | 'session';
|
|
146
|
+
metadata?: Record<string, unknown>;
|
|
129
147
|
}): Promise<{
|
|
130
148
|
token: string;
|
|
131
149
|
sessionId: string;
|
|
@@ -140,6 +158,8 @@ declare class SessionManager {
|
|
|
140
158
|
};
|
|
141
159
|
validateRefreshToken(token: string, origin: string): Promise<ValidateRefreshTokenResult>;
|
|
142
160
|
invalidateRefreshToken(origin: string, userId: string, deviceId?: string): Promise<void>;
|
|
161
|
+
listSessions(origin: string, userId: string): Promise<SessionData[]>;
|
|
162
|
+
revokeSessionById(origin: string, userId: string, sessionId: string): Promise<boolean>;
|
|
143
163
|
generateAccessToken(refreshToken: string, origin: string): Promise<{
|
|
144
164
|
token: string;
|
|
145
165
|
} | {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/services/session-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGjD,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACnD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAChE,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5F;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAExB,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1C,SAAS,EAAE,IAAI,CAAC;IAChB,iBAAiB,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAEpE,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EACF,eAAe,GACf,eAAe,GACf,mBAAmB,GACnB,iBAAiB,GACjB,kBAAkB,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/services/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,11 @@ var crypto = require('crypto');
|
|
|
4
4
|
var jwt = require('jsonwebtoken');
|
|
5
5
|
var constants = require('../constants.js');
|
|
6
6
|
|
|
7
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
+
|
|
9
|
+
var crypto__default = /*#__PURE__*/_interopDefault(crypto);
|
|
10
|
+
var jwt__default = /*#__PURE__*/_interopDefault(jwt);
|
|
11
|
+
|
|
7
12
|
class DatabaseSessionProvider {
|
|
8
13
|
async create(session) {
|
|
9
14
|
const result = await this.db.query(this.contentType).create({
|
|
@@ -19,6 +24,21 @@ class DatabaseSessionProvider {
|
|
|
19
24
|
});
|
|
20
25
|
return result;
|
|
21
26
|
}
|
|
27
|
+
async findByUser(criteria) {
|
|
28
|
+
const results = await this.db.query(this.contentType).findMany({
|
|
29
|
+
where: {
|
|
30
|
+
userId: criteria.userId,
|
|
31
|
+
origin: criteria.origin,
|
|
32
|
+
...criteria.status ? {
|
|
33
|
+
status: criteria.status
|
|
34
|
+
} : {}
|
|
35
|
+
},
|
|
36
|
+
orderBy: {
|
|
37
|
+
createdAt: 'DESC'
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
return results;
|
|
41
|
+
}
|
|
22
42
|
async updateBySessionId(sessionId, data) {
|
|
23
43
|
await this.db.query(this.contentType).update({
|
|
24
44
|
where: {
|
|
@@ -83,6 +103,18 @@ class OriginSessionManager {
|
|
|
83
103
|
return this.sessionManager.invalidateRefreshToken(this.origin, userId, deviceId);
|
|
84
104
|
}
|
|
85
105
|
/**
|
|
106
|
+
* Lists the active sessions of a user for this origin. Rotated/expired records
|
|
107
|
+
* are excluded so each live login family yields a single entry.
|
|
108
|
+
*/ async listSessions(userId) {
|
|
109
|
+
return this.sessionManager.listSessions(this.origin, userId);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Revokes a single session by id, but only if it belongs to the given user and origin.
|
|
113
|
+
* Returns true when a matching session was found and deleted.
|
|
114
|
+
*/ async revokeSessionById(userId, sessionId) {
|
|
115
|
+
return this.sessionManager.revokeSessionById(this.origin, userId, sessionId);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
86
118
|
* Returns true when a session exists and is not expired for this origin.
|
|
87
119
|
* If the session exists but is expired, it will be deleted as part of this check.
|
|
88
120
|
*/ async isSessionActive(sessionId) {
|
|
@@ -140,7 +172,7 @@ class SessionManager {
|
|
|
140
172
|
}
|
|
141
173
|
}
|
|
142
174
|
generateSessionId() {
|
|
143
|
-
return
|
|
175
|
+
return crypto__default.default.randomBytes(16).toString('hex');
|
|
144
176
|
}
|
|
145
177
|
async maybeCleanupExpired() {
|
|
146
178
|
this.cleanupInvocationCounter += 1;
|
|
@@ -181,6 +213,9 @@ class SessionManager {
|
|
|
181
213
|
childId: null,
|
|
182
214
|
type: tokenType,
|
|
183
215
|
status: 'active',
|
|
216
|
+
...options?.metadata ? {
|
|
217
|
+
metadata: options.metadata
|
|
218
|
+
} : {},
|
|
184
219
|
expiresAt,
|
|
185
220
|
absoluteExpiresAt
|
|
186
221
|
});
|
|
@@ -196,7 +231,7 @@ class SessionManager {
|
|
|
196
231
|
// Filter out conflicting options that are already handled by the payload or used for key selection
|
|
197
232
|
const jwtOptions = config.jwtOptions || {};
|
|
198
233
|
const { expiresIn, privateKey, publicKey, ...jwtSignOptions } = jwtOptions;
|
|
199
|
-
const token =
|
|
234
|
+
const token = jwt__default.default.sign(payload, jwtKey, {
|
|
200
235
|
algorithm,
|
|
201
236
|
noTimestamp: true,
|
|
202
237
|
...jwtSignOptions
|
|
@@ -215,7 +250,7 @@ class SessionManager {
|
|
|
215
250
|
const config = this.getConfigForOrigin(origin);
|
|
216
251
|
const algorithm = config.algorithm || constants.DEFAULT_ALGORITHM;
|
|
217
252
|
const jwtKey = this.getJwtKey(config, algorithm, 'verify');
|
|
218
|
-
const payload =
|
|
253
|
+
const payload = jwt__default.default.verify(token, jwtKey, {
|
|
219
254
|
algorithms: [
|
|
220
255
|
algorithm
|
|
221
256
|
],
|
|
@@ -253,7 +288,7 @@ class SessionManager {
|
|
|
253
288
|
],
|
|
254
289
|
...config.jwtOptions
|
|
255
290
|
};
|
|
256
|
-
const payload =
|
|
291
|
+
const payload = jwt__default.default.verify(token, jwtKey, verifyOptions);
|
|
257
292
|
if (payload.type !== 'refresh') {
|
|
258
293
|
return {
|
|
259
294
|
isValid: false
|
|
@@ -294,7 +329,7 @@ class SessionManager {
|
|
|
294
329
|
sessionId: payload.sessionId
|
|
295
330
|
};
|
|
296
331
|
} catch (error) {
|
|
297
|
-
if (error instanceof
|
|
332
|
+
if (error instanceof jwt__default.default.JsonWebTokenError) {
|
|
298
333
|
return {
|
|
299
334
|
isValid: false
|
|
300
335
|
};
|
|
@@ -309,6 +344,28 @@ class SessionManager {
|
|
|
309
344
|
deviceId
|
|
310
345
|
});
|
|
311
346
|
}
|
|
347
|
+
async listSessions(origin, userId) {
|
|
348
|
+
if (!origin || typeof origin !== 'string') {
|
|
349
|
+
throw new Error('SessionManager: Origin parameter is required and must be a non-empty string');
|
|
350
|
+
}
|
|
351
|
+
return this.provider.findByUser({
|
|
352
|
+
userId,
|
|
353
|
+
origin,
|
|
354
|
+
status: 'active'
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
async revokeSessionById(origin, userId, sessionId) {
|
|
358
|
+
if (!origin || typeof origin !== 'string') {
|
|
359
|
+
throw new Error('SessionManager: Origin parameter is required and must be a non-empty string');
|
|
360
|
+
}
|
|
361
|
+
const session = await this.provider.findBySessionId(sessionId);
|
|
362
|
+
// Only allow revoking a session that belongs to the requesting user and origin.
|
|
363
|
+
if (session?.userId !== userId || session?.origin !== origin) {
|
|
364
|
+
return false;
|
|
365
|
+
}
|
|
366
|
+
await this.provider.deleteBySessionId(sessionId);
|
|
367
|
+
return true;
|
|
368
|
+
}
|
|
312
369
|
async generateAccessToken(refreshToken, origin) {
|
|
313
370
|
if (!origin || typeof origin !== 'string') {
|
|
314
371
|
throw new Error('SessionManager: Origin parameter is required and must be a non-empty string');
|
|
@@ -330,7 +387,7 @@ class SessionManager {
|
|
|
330
387
|
// Filter out conflicting options that are already handled by the payload or used for key selection
|
|
331
388
|
const jwtOptions = config.jwtOptions || {};
|
|
332
389
|
const { expiresIn, privateKey, publicKey, ...jwtSignOptions } = jwtOptions;
|
|
333
|
-
const token =
|
|
390
|
+
const token = jwt__default.default.sign(payload, jwtKey, {
|
|
334
391
|
algorithm,
|
|
335
392
|
expiresIn: config.accessTokenLifespan,
|
|
336
393
|
...jwtSignOptions
|
|
@@ -347,7 +404,7 @@ class SessionManager {
|
|
|
347
404
|
const config = this.getConfigForOrigin(origin);
|
|
348
405
|
const algorithm = config.algorithm || constants.DEFAULT_ALGORITHM;
|
|
349
406
|
const jwtKey = this.getJwtKey(config, algorithm, 'verify');
|
|
350
|
-
const payload =
|
|
407
|
+
const payload = jwt__default.default.verify(refreshToken, jwtKey, {
|
|
351
408
|
algorithms: [
|
|
352
409
|
algorithm
|
|
353
410
|
],
|
|
@@ -379,7 +436,7 @@ class SessionManager {
|
|
|
379
436
|
};
|
|
380
437
|
// Filter out conflicting options that are already handled by the payload
|
|
381
438
|
const { expiresIn, ...jwtSignOptions } = config.jwtOptions || {};
|
|
382
|
-
const childToken =
|
|
439
|
+
const childToken = jwt__default.default.sign(childPayload, jwtKey, {
|
|
383
440
|
algorithm,
|
|
384
441
|
noTimestamp: true,
|
|
385
442
|
...jwtSignOptions
|
|
@@ -427,6 +484,11 @@ class SessionManager {
|
|
|
427
484
|
childId: null,
|
|
428
485
|
type: tokenType,
|
|
429
486
|
status: 'active',
|
|
487
|
+
// Preserve origin-defined metadata (e.g. deviceName, loginAt) across rotation so the
|
|
488
|
+
// active record always reflects the original session details.
|
|
489
|
+
...current.metadata ? {
|
|
490
|
+
metadata: current.metadata
|
|
491
|
+
} : {},
|
|
430
492
|
expiresAt: childExpiresAt,
|
|
431
493
|
absoluteExpiresAt: current.absoluteExpiresAt ?? new Date(absolute)
|
|
432
494
|
});
|
|
@@ -441,7 +503,7 @@ class SessionManager {
|
|
|
441
503
|
};
|
|
442
504
|
// Filter out conflicting options that are already handled by the payload
|
|
443
505
|
const { expiresIn, ...jwtSignOptions } = config.jwtOptions || {};
|
|
444
|
-
const childToken =
|
|
506
|
+
const childToken = jwt__default.default.sign(payloadOut, jwtKey, {
|
|
445
507
|
algorithm,
|
|
446
508
|
noTimestamp: true,
|
|
447
509
|
...jwtSignOptions
|