@nocobase/app-server 0.11.1-alpha.5 → 2.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +295 -0
- package/dist/application/index.d.ts +128 -0
- package/dist/application/index.d.ts.map +1 -0
- package/dist/application/index.js +386 -0
- package/dist/application/index.js.map +1 -0
- package/dist/caching/config.d.ts +2 -0
- package/dist/caching/config.d.ts.map +1 -0
- package/dist/caching/config.js +2 -0
- package/dist/caching/config.js.map +1 -0
- package/dist/caching/index.d.ts +5 -0
- package/dist/caching/index.d.ts.map +1 -0
- package/dist/caching/index.js +4 -0
- package/dist/caching/index.js.map +1 -0
- package/dist/caching/provider.d.ts +8 -0
- package/dist/caching/provider.d.ts.map +1 -0
- package/dist/caching/provider.js +14 -0
- package/dist/caching/provider.js.map +1 -0
- package/dist/caching/token.d.ts +4 -0
- package/dist/caching/token.d.ts.map +1 -0
- package/dist/caching/token.js +3 -0
- package/dist/caching/token.js.map +1 -0
- package/dist/config/app-config-types.d.ts +44 -0
- package/dist/config/app-config-types.d.ts.map +1 -0
- package/dist/config/app-config-types.js +2 -0
- package/dist/config/app-config-types.js.map +1 -0
- package/dist/config/app-config.d.ts +60 -0
- package/dist/config/app-config.d.ts.map +1 -0
- package/dist/config/app-config.js +247 -0
- package/dist/config/app-config.js.map +1 -0
- package/dist/config/context.d.ts +3 -0
- package/dist/config/context.d.ts.map +1 -0
- package/dist/config/context.js +7 -0
- package/dist/config/context.js.map +1 -0
- package/dist/config/define-app-config.d.ts +71 -0
- package/dist/config/define-app-config.d.ts.map +1 -0
- package/dist/config/define-app-config.js +48 -0
- package/dist/config/define-app-config.js.map +1 -0
- package/dist/config/index.d.ts +13 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +11 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/not-configured.d.ts +23 -0
- package/dist/config/not-configured.d.ts.map +1 -0
- package/dist/config/not-configured.js +31 -0
- package/dist/config/not-configured.js.map +1 -0
- package/dist/config/paths.d.ts +27 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +27 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/placeholder-secret.d.ts +19 -0
- package/dist/config/placeholder-secret.d.ts.map +1 -0
- package/dist/config/placeholder-secret.js +26 -0
- package/dist/config/placeholder-secret.js.map +1 -0
- package/dist/config/runtime-environment.d.ts +11 -0
- package/dist/config/runtime-environment.d.ts.map +1 -0
- package/dist/config/runtime-environment.js +20 -0
- package/dist/config/runtime-environment.js.map +1 -0
- package/dist/config/types.d.ts +12 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validation.d.ts +36 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +186 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/config/variables.d.ts +57 -0
- package/dist/config/variables.d.ts.map +1 -0
- package/dist/config/variables.js +89 -0
- package/dist/config/variables.js.map +1 -0
- package/dist/database/collections-artifact.d.ts +99 -0
- package/dist/database/collections-artifact.d.ts.map +1 -0
- package/dist/database/collections-artifact.js +397 -0
- package/dist/database/collections-artifact.js.map +1 -0
- package/dist/database/collections-directory.d.ts +36 -0
- package/dist/database/collections-directory.d.ts.map +1 -0
- package/dist/database/collections-directory.js +115 -0
- package/dist/database/collections-directory.js.map +1 -0
- package/dist/database/collections-doctor.d.ts +43 -0
- package/dist/database/collections-doctor.d.ts.map +1 -0
- package/dist/database/collections-doctor.js +88 -0
- package/dist/database/collections-doctor.js.map +1 -0
- package/dist/database/connection-check.d.ts +25 -0
- package/dist/database/connection-check.d.ts.map +1 -0
- package/dist/database/connection-check.js +65 -0
- package/dist/database/connection-check.js.map +1 -0
- package/dist/database/connection-selection.d.ts +16 -0
- package/dist/database/connection-selection.d.ts.map +1 -0
- package/dist/database/connection-selection.js +30 -0
- package/dist/database/connection-selection.js.map +1 -0
- package/dist/database/define-app-database-config.d.ts +49 -0
- package/dist/database/define-app-database-config.d.ts.map +1 -0
- package/dist/database/define-app-database-config.js +73 -0
- package/dist/database/define-app-database-config.js.map +1 -0
- package/dist/database/environment.d.ts +11 -0
- package/dist/database/environment.d.ts.map +1 -0
- package/dist/database/environment.js +49 -0
- package/dist/database/environment.js.map +1 -0
- package/dist/database/index.d.ts +17 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +16 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/manager.d.ts +16 -0
- package/dist/database/manager.d.ts.map +1 -0
- package/dist/database/manager.js +83 -0
- package/dist/database/manager.js.map +1 -0
- package/dist/database/migrator.d.ts +88 -0
- package/dist/database/migrator.d.ts.map +1 -0
- package/dist/database/migrator.js +143 -0
- package/dist/database/migrator.js.map +1 -0
- package/dist/database/ownership.d.ts +6 -0
- package/dist/database/ownership.d.ts.map +1 -0
- package/dist/database/ownership.js +50 -0
- package/dist/database/ownership.js.map +1 -0
- package/dist/database/plan.d.ts +36 -0
- package/dist/database/plan.d.ts.map +1 -0
- package/dist/database/plan.js +136 -0
- package/dist/database/plan.js.map +1 -0
- package/dist/database/provider.d.ts +43 -0
- package/dist/database/provider.d.ts.map +1 -0
- package/dist/database/provider.js +171 -0
- package/dist/database/provider.js.map +1 -0
- package/dist/database/resolve-config.d.ts +42 -0
- package/dist/database/resolve-config.d.ts.map +1 -0
- package/dist/database/resolve-config.js +118 -0
- package/dist/database/resolve-config.js.map +1 -0
- package/dist/database/seeder.d.ts +50 -0
- package/dist/database/seeder.d.ts.map +1 -0
- package/dist/database/seeder.js +117 -0
- package/dist/database/seeder.js.map +1 -0
- package/dist/database/storage.d.ts +10 -0
- package/dist/database/storage.d.ts.map +1 -0
- package/dist/database/storage.js +37 -0
- package/dist/database/storage.js.map +1 -0
- package/dist/database/task-config.d.ts +7 -0
- package/dist/database/task-config.d.ts.map +1 -0
- package/dist/database/task-config.js +19 -0
- package/dist/database/task-config.js.map +1 -0
- package/dist/database/task-container.d.ts +3 -0
- package/dist/database/task-container.d.ts.map +1 -0
- package/dist/database/task-container.js +34 -0
- package/dist/database/task-container.js.map +1 -0
- package/dist/database/tasks.d.ts +104 -0
- package/dist/database/tasks.d.ts.map +1 -0
- package/dist/database/tasks.js +350 -0
- package/dist/database/tasks.js.map +1 -0
- package/dist/database/types.d.ts +92 -0
- package/dist/database/types.d.ts.map +1 -0
- package/dist/database/types.js +2 -0
- package/dist/database/types.js.map +1 -0
- package/dist/drive/config.d.ts +2 -0
- package/dist/drive/config.d.ts.map +1 -0
- package/dist/drive/config.js +2 -0
- package/dist/drive/config.js.map +1 -0
- package/dist/drive/index.d.ts +5 -0
- package/dist/drive/index.d.ts.map +1 -0
- package/dist/drive/index.js +4 -0
- package/dist/drive/index.js.map +1 -0
- package/dist/drive/provider.d.ts +9 -0
- package/dist/drive/provider.d.ts.map +1 -0
- package/dist/drive/provider.js +22 -0
- package/dist/drive/provider.js.map +1 -0
- package/dist/drive/token.d.ts +4 -0
- package/dist/drive/token.d.ts.map +1 -0
- package/dist/drive/token.js +3 -0
- package/dist/drive/token.js.map +1 -0
- package/dist/i18n/index.d.ts +37 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +44 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/id-generator/config.d.ts +2 -0
- package/dist/id-generator/config.d.ts.map +1 -0
- package/dist/id-generator/config.js +2 -0
- package/dist/id-generator/config.js.map +1 -0
- package/dist/id-generator/index.d.ts +5 -0
- package/dist/id-generator/index.d.ts.map +1 -0
- package/dist/id-generator/index.js +4 -0
- package/dist/id-generator/index.js.map +1 -0
- package/dist/id-generator/provider.d.ts +7 -0
- package/dist/id-generator/provider.d.ts.map +1 -0
- package/dist/id-generator/provider.js +11 -0
- package/dist/id-generator/provider.js.map +1 -0
- package/dist/id-generator/token.d.ts +4 -0
- package/dist/id-generator/token.d.ts.map +1 -0
- package/dist/id-generator/token.js +3 -0
- package/dist/id-generator/token.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/jobs/config.d.ts +2 -0
- package/dist/jobs/config.d.ts.map +1 -0
- package/dist/jobs/config.js +2 -0
- package/dist/jobs/config.js.map +1 -0
- package/dist/jobs/index.d.ts +4 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +4 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/provider.d.ts +23 -0
- package/dist/jobs/provider.d.ts.map +1 -0
- package/dist/jobs/provider.js +55 -0
- package/dist/jobs/provider.js.map +1 -0
- package/dist/jobs/token.d.ts +8 -0
- package/dist/jobs/token.d.ts.map +1 -0
- package/dist/jobs/token.js +7 -0
- package/dist/jobs/token.js.map +1 -0
- package/dist/logging/config.d.ts +16 -0
- package/dist/logging/config.d.ts.map +1 -0
- package/dist/logging/config.js +26 -0
- package/dist/logging/config.js.map +1 -0
- package/dist/logging/index.d.ts +5 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +5 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/middleware.d.ts +13 -0
- package/dist/logging/middleware.d.ts.map +1 -0
- package/dist/logging/middleware.js +128 -0
- package/dist/logging/middleware.js.map +1 -0
- package/dist/logging/provider.d.ts +9 -0
- package/dist/logging/provider.d.ts.map +1 -0
- package/dist/logging/provider.js +95 -0
- package/dist/logging/provider.js.map +1 -0
- package/dist/logging/token.d.ts +4 -0
- package/dist/logging/token.d.ts.map +1 -0
- package/dist/logging/token.js +3 -0
- package/dist/logging/token.js.map +1 -0
- package/dist/node/config.d.ts +6 -0
- package/dist/node/config.d.ts.map +1 -0
- package/dist/node/config.js +2 -0
- package/dist/node/config.js.map +1 -0
- package/dist/node/index.d.ts +6 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +6 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/not-configured-message.d.ts +10 -0
- package/dist/node/not-configured-message.d.ts.map +1 -0
- package/dist/node/not-configured-message.js +24 -0
- package/dist/node/not-configured-message.js.map +1 -0
- package/dist/node/proxy.d.ts +25 -0
- package/dist/node/proxy.d.ts.map +1 -0
- package/dist/node/proxy.js +229 -0
- package/dist/node/proxy.js.map +1 -0
- package/dist/node/runtime.d.ts +45 -0
- package/dist/node/runtime.d.ts.map +1 -0
- package/dist/node/runtime.js +176 -0
- package/dist/node/runtime.js.map +1 -0
- package/dist/node/scope.d.ts +55 -0
- package/dist/node/scope.d.ts.map +1 -0
- package/dist/node/scope.js +115 -0
- package/dist/node/scope.js.map +1 -0
- package/dist/node/server.d.ts +80 -0
- package/dist/node/server.d.ts.map +1 -0
- package/dist/node/server.js +283 -0
- package/dist/node/server.js.map +1 -0
- package/dist/plugins/define.d.ts +4 -0
- package/dist/plugins/define.d.ts.map +1 -0
- package/dist/plugins/define.js +45 -0
- package/dist/plugins/define.js.map +1 -0
- package/dist/plugins/index.d.ts +27 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +4 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/inspect.d.ts +79 -0
- package/dist/plugins/inspect.d.ts.map +1 -0
- package/dist/plugins/inspect.js +142 -0
- package/dist/plugins/inspect.js.map +1 -0
- package/dist/plugins/resolve.d.ts +14 -0
- package/dist/plugins/resolve.d.ts.map +1 -0
- package/dist/plugins/resolve.js +101 -0
- package/dist/plugins/resolve.js.map +1 -0
- package/dist/plugins/types.d.ts +91 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +2 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/proxy/http-proxy.d.ts +8 -0
- package/dist/proxy/http-proxy.d.ts.map +1 -0
- package/dist/proxy/http-proxy.js +59 -0
- package/dist/proxy/http-proxy.js.map +1 -0
- package/dist/proxy/index.d.ts +3 -0
- package/dist/proxy/index.d.ts.map +1 -0
- package/dist/proxy/index.js +3 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/proxy/origin.d.ts +12 -0
- package/dist/proxy/origin.d.ts.map +1 -0
- package/dist/proxy/origin.js +61 -0
- package/dist/proxy/origin.js.map +1 -0
- package/dist/queue/config.d.ts +4 -0
- package/dist/queue/config.d.ts.map +1 -0
- package/dist/queue/config.js +2 -0
- package/dist/queue/config.js.map +1 -0
- package/dist/queue/index.d.ts +4 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +4 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/queue/provider.d.ts +24 -0
- package/dist/queue/provider.d.ts.map +1 -0
- package/dist/queue/provider.js +57 -0
- package/dist/queue/provider.js.map +1 -0
- package/dist/queue/token.d.ts +9 -0
- package/dist/queue/token.d.ts.map +1 -0
- package/dist/queue/token.js +8 -0
- package/dist/queue/token.js.map +1 -0
- package/dist/realtime/index.d.ts +6 -0
- package/dist/realtime/index.d.ts.map +1 -0
- package/dist/realtime/index.js +6 -0
- package/dist/realtime/index.js.map +1 -0
- package/dist/realtime/provider.d.ts +10 -0
- package/dist/realtime/provider.d.ts.map +1 -0
- package/dist/realtime/provider.js +19 -0
- package/dist/realtime/provider.js.map +1 -0
- package/dist/realtime/service.d.ts +9 -0
- package/dist/realtime/service.d.ts.map +1 -0
- package/dist/realtime/service.js +347 -0
- package/dist/realtime/service.js.map +1 -0
- package/dist/realtime/types.d.ts +74 -0
- package/dist/realtime/types.d.ts.map +1 -0
- package/dist/realtime/types.js +4 -0
- package/dist/realtime/types.js.map +1 -0
- package/dist/realtime/websocket.d.ts +7 -0
- package/dist/realtime/websocket.d.ts.map +1 -0
- package/dist/realtime/websocket.js +57 -0
- package/dist/realtime/websocket.js.map +1 -0
- package/dist/router/api-error.d.ts +171 -0
- package/dist/router/api-error.d.ts.map +1 -0
- package/dist/router/api-error.js +291 -0
- package/dist/router/api-error.js.map +1 -0
- package/dist/router/api-limits.d.ts +80 -0
- package/dist/router/api-limits.d.ts.map +1 -0
- package/dist/router/api-limits.js +281 -0
- package/dist/router/api-limits.js.map +1 -0
- package/dist/router/cli/derive.d.ts +32 -0
- package/dist/router/cli/derive.d.ts.map +1 -0
- package/dist/router/cli/derive.js +548 -0
- package/dist/router/cli/derive.js.map +1 -0
- package/dist/router/cli/index.d.ts +6 -0
- package/dist/router/cli/index.d.ts.map +1 -0
- package/dist/router/cli/index.js +6 -0
- package/dist/router/cli/index.js.map +1 -0
- package/dist/router/cli/reference.d.ts +9 -0
- package/dist/router/cli/reference.d.ts.map +1 -0
- package/dist/router/cli/reference.js +64 -0
- package/dist/router/cli/reference.js.map +1 -0
- package/dist/router/cli/routes.d.ts +9 -0
- package/dist/router/cli/routes.d.ts.map +1 -0
- package/dist/router/cli/routes.js +228 -0
- package/dist/router/cli/routes.js.map +1 -0
- package/dist/router/cli/service.d.ts +50 -0
- package/dist/router/cli/service.d.ts.map +1 -0
- package/dist/router/cli/service.js +104 -0
- package/dist/router/cli/service.js.map +1 -0
- package/dist/router/cli/types.d.ts +278 -0
- package/dist/router/cli/types.d.ts.map +1 -0
- package/dist/router/cli/types.js +18 -0
- package/dist/router/cli/types.js.map +1 -0
- package/dist/router/duplicate-routes.d.ts +25 -0
- package/dist/router/duplicate-routes.d.ts.map +1 -0
- package/dist/router/duplicate-routes.js +51 -0
- package/dist/router/duplicate-routes.js.map +1 -0
- package/dist/router/health.d.ts +7 -0
- package/dist/router/health.d.ts.map +1 -0
- package/dist/router/health.js +48 -0
- package/dist/router/health.js.map +1 -0
- package/dist/router/index.d.ts +26 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +29 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/openapi/components.d.ts +24 -0
- package/dist/router/openapi/components.d.ts.map +1 -0
- package/dist/router/openapi/components.js +128 -0
- package/dist/router/openapi/components.js.map +1 -0
- package/dist/router/openapi/declared.d.ts +19 -0
- package/dist/router/openapi/declared.d.ts.map +1 -0
- package/dist/router/openapi/declared.js +46 -0
- package/dist/router/openapi/declared.js.map +1 -0
- package/dist/router/openapi/describe.d.ts +82 -0
- package/dist/router/openapi/describe.d.ts.map +1 -0
- package/dist/router/openapi/describe.js +207 -0
- package/dist/router/openapi/describe.js.map +1 -0
- package/dist/router/openapi/docs-routes.d.ts +10 -0
- package/dist/router/openapi/docs-routes.d.ts.map +1 -0
- package/dist/router/openapi/docs-routes.js +157 -0
- package/dist/router/openapi/docs-routes.js.map +1 -0
- package/dist/router/openapi/document.d.ts +151 -0
- package/dist/router/openapi/document.d.ts.map +1 -0
- package/dist/router/openapi/document.js +471 -0
- package/dist/router/openapi/document.js.map +1 -0
- package/dist/router/openapi/index.d.ts +7 -0
- package/dist/router/openapi/index.d.ts.map +1 -0
- package/dist/router/openapi/index.js +7 -0
- package/dist/router/openapi/index.js.map +1 -0
- package/dist/router/openapi/repository-document.d.ts +30 -0
- package/dist/router/openapi/repository-document.d.ts.map +1 -0
- package/dist/router/openapi/repository-document.js +812 -0
- package/dist/router/openapi/repository-document.js.map +1 -0
- package/dist/router/openapi/schema.d.ts +30 -0
- package/dist/router/openapi/schema.d.ts.map +1 -0
- package/dist/router/openapi/schema.js +301 -0
- package/dist/router/openapi/schema.js.map +1 -0
- package/dist/router/openapi/service.d.ts +101 -0
- package/dist/router/openapi/service.d.ts.map +1 -0
- package/dist/router/openapi/service.js +162 -0
- package/dist/router/openapi/service.js.map +1 -0
- package/dist/router/repository-constraints.d.ts +15 -0
- package/dist/router/repository-constraints.d.ts.map +1 -0
- package/dist/router/repository-constraints.js +14 -0
- package/dist/router/repository-constraints.js.map +1 -0
- package/dist/router/repository-routes.d.ts +90 -0
- package/dist/router/repository-routes.d.ts.map +1 -0
- package/dist/router/repository-routes.js +452 -0
- package/dist/router/repository-routes.js.map +1 -0
- package/dist/router/routes.d.ts +24 -0
- package/dist/router/routes.d.ts.map +1 -0
- package/dist/router/routes.js +19 -0
- package/dist/router/routes.js.map +1 -0
- package/dist/runtime/application.d.ts +8 -0
- package/dist/runtime/application.d.ts.map +1 -0
- package/dist/runtime/application.js +22 -0
- package/dist/runtime/application.js.map +1 -0
- package/dist/runtime/definition.d.ts +50 -0
- package/dist/runtime/definition.d.ts.map +1 -0
- package/dist/runtime/definition.js +82 -0
- package/dist/runtime/definition.js.map +1 -0
- package/dist/runtime/index.d.ts +8 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +7 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/lifecycle.d.ts +29 -0
- package/dist/runtime/lifecycle.d.ts.map +1 -0
- package/dist/runtime/lifecycle.js +104 -0
- package/dist/runtime/lifecycle.js.map +1 -0
- package/dist/runtime/mount.d.ts +4 -0
- package/dist/runtime/mount.d.ts.map +1 -0
- package/dist/runtime/mount.js +47 -0
- package/dist/runtime/mount.js.map +1 -0
- package/dist/runtime/scope.d.ts +29 -0
- package/dist/runtime/scope.d.ts.map +1 -0
- package/dist/runtime/scope.js +48 -0
- package/dist/runtime/scope.js.map +1 -0
- package/dist/runtime/types.d.ts +55 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +2 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/sample-data/index.d.ts +3 -0
- package/dist/sample-data/index.d.ts.map +1 -0
- package/dist/sample-data/index.js +3 -0
- package/dist/sample-data/index.js.map +1 -0
- package/dist/sample-data/registry.d.ts +4 -0
- package/dist/sample-data/registry.d.ts.map +1 -0
- package/dist/sample-data/registry.js +74 -0
- package/dist/sample-data/registry.js.map +1 -0
- package/dist/sample-data/token.d.ts +64 -0
- package/dist/sample-data/token.d.ts.map +1 -0
- package/dist/sample-data/token.js +7 -0
- package/dist/sample-data/token.js.map +1 -0
- package/dist/secrets/config.d.ts +15 -0
- package/dist/secrets/config.d.ts.map +1 -0
- package/dist/secrets/config.js +43 -0
- package/dist/secrets/config.js.map +1 -0
- package/dist/secrets/index.d.ts +6 -0
- package/dist/secrets/index.d.ts.map +1 -0
- package/dist/secrets/index.js +6 -0
- package/dist/secrets/index.js.map +1 -0
- package/dist/secrets/provider.d.ts +7 -0
- package/dist/secrets/provider.d.ts.map +1 -0
- package/dist/secrets/provider.js +10 -0
- package/dist/secrets/provider.js.map +1 -0
- package/dist/secrets/service.d.ts +64 -0
- package/dist/secrets/service.d.ts.map +1 -0
- package/dist/secrets/service.js +47 -0
- package/dist/secrets/service.js.map +1 -0
- package/dist/secrets/table-store.d.ts +34 -0
- package/dist/secrets/table-store.d.ts.map +1 -0
- package/dist/secrets/table-store.js +118 -0
- package/dist/secrets/table-store.js.map +1 -0
- package/dist/secrets/token.d.ts +4 -0
- package/dist/secrets/token.d.ts.map +1 -0
- package/dist/secrets/token.js +3 -0
- package/dist/secrets/token.js.map +1 -0
- package/dist/session/config.d.ts +10 -0
- package/dist/session/config.d.ts.map +1 -0
- package/dist/session/config.js +2 -0
- package/dist/session/config.js.map +1 -0
- package/dist/session/index.d.ts +4 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +4 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/provider.d.ts +26 -0
- package/dist/session/provider.d.ts.map +1 -0
- package/dist/session/provider.js +69 -0
- package/dist/session/provider.js.map +1 -0
- package/dist/session/token.d.ts +4 -0
- package/dist/session/token.d.ts.map +1 -0
- package/dist/session/token.js +3 -0
- package/dist/session/token.js.map +1 -0
- package/dist/spa/config.d.ts +5 -0
- package/dist/spa/config.d.ts.map +1 -0
- package/dist/spa/config.js +2 -0
- package/dist/spa/config.js.map +1 -0
- package/dist/spa/content-types.d.ts +2 -0
- package/dist/spa/content-types.d.ts.map +1 -0
- package/dist/spa/content-types.js +25 -0
- package/dist/spa/content-types.js.map +1 -0
- package/dist/spa/index.d.ts +9 -0
- package/dist/spa/index.d.ts.map +1 -0
- package/dist/spa/index.js +9 -0
- package/dist/spa/index.js.map +1 -0
- package/dist/spa/provider.d.ts +13 -0
- package/dist/spa/provider.d.ts.map +1 -0
- package/dist/spa/provider.js +90 -0
- package/dist/spa/provider.js.map +1 -0
- package/dist/spa/routes.d.ts +4 -0
- package/dist/spa/routes.d.ts.map +1 -0
- package/dist/spa/routes.js +96 -0
- package/dist/spa/routes.js.map +1 -0
- package/dist/spa/runtime-html.d.ts +14 -0
- package/dist/spa/runtime-html.d.ts.map +1 -0
- package/dist/spa/runtime-html.js +85 -0
- package/dist/spa/runtime-html.js.map +1 -0
- package/dist/spa/serve-index.d.ts +9 -0
- package/dist/spa/serve-index.d.ts.map +1 -0
- package/dist/spa/serve-index.js +12 -0
- package/dist/spa/serve-index.js.map +1 -0
- package/dist/spa/static-assets.d.ts +7 -0
- package/dist/spa/static-assets.d.ts.map +1 -0
- package/dist/spa/static-assets.js +90 -0
- package/dist/spa/static-assets.js.map +1 -0
- package/dist/spa/types.d.ts +23 -0
- package/dist/spa/types.d.ts.map +1 -0
- package/dist/spa/types.js +2 -0
- package/dist/spa/types.js.map +1 -0
- package/dist/support/index.d.ts +4 -0
- package/dist/support/index.d.ts.map +1 -0
- package/dist/support/index.js +4 -0
- package/dist/support/index.js.map +1 -0
- package/dist/support/paths.d.ts +10 -0
- package/dist/support/paths.d.ts.map +1 -0
- package/dist/support/paths.js +25 -0
- package/dist/support/paths.js.map +1 -0
- package/dist/support/redirects.d.ts +3 -0
- package/dist/support/redirects.d.ts.map +1 -0
- package/dist/support/redirects.js +48 -0
- package/dist/support/redirects.js.map +1 -0
- package/dist/support/requests.d.ts +2 -0
- package/dist/support/requests.d.ts.map +1 -0
- package/dist/support/requests.js +13 -0
- package/dist/support/requests.js.map +1 -0
- package/dist/swagger-ui/LICENSE +202 -0
- package/dist/swagger-ui/NOTICE +2 -0
- package/dist/swagger-ui/favicon-16x16.png +0 -0
- package/dist/swagger-ui/favicon-32x32.png +0 -0
- package/dist/swagger-ui/swagger-ui-bundle.js +2 -0
- package/dist/swagger-ui/swagger-ui-bundle.js.LICENSE.txt +129 -0
- package/dist/swagger-ui/swagger-ui.css +3 -0
- package/dist/websocket.d.ts +61 -0
- package/dist/websocket.d.ts.map +1 -0
- package/dist/websocket.js +371 -0
- package/dist/websocket.js.map +1 -0
- package/package.json +193 -12
- package/LICENSE +0 -661
- package/lib/config/cache.d.ts +0 -2
- package/lib/config/cache.js +0 -16
- package/lib/config/database.d.ts +0 -3
- package/lib/config/database.js +0 -25
- package/lib/config/index.d.ts +0 -10
- package/lib/config/index.js +0 -20
- package/lib/config/logger.d.ts +0 -3
- package/lib/config/logger.js +0 -11
- package/lib/config/plugins.d.ts +0 -3
- package/lib/config/plugins.js +0 -8
- package/lib/config/resourcer.d.ts +0 -4
- package/lib/config/resourcer.js +0 -10
- package/lib/index.d.ts +0 -3
- package/lib/index.js +0 -21
- package/src/config/cache.ts +0 -5
- package/src/config/database.ts +0 -21
- package/src/config/index.ts +0 -13
- package/src/config/logger.ts +0 -6
- package/src/config/plugins.ts +0 -3
- package/src/config/resourcer.ts +0 -3
- package/src/index.ts +0 -10
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { type ServiceToken } from '@nocobase/service-provider';
|
|
2
|
+
/**
|
|
3
|
+
* Sample data a service builds rather than a seed: what has to go through other plugins' services, such as projects
|
|
4
|
+
* with issues and comments. It runs once the application is ready, under the same condition as a seed declared with
|
|
5
|
+
* `sample: true` — the database was installed by this start and `app.sampleData` is set — and is recorded in the
|
|
6
|
+
* seed history of the default connection as `sample-data:<name>`, so it never runs twice on its own.
|
|
7
|
+
*/
|
|
8
|
+
export interface SampleDataRegistration {
|
|
9
|
+
/** Unique within the application, such as `acme/demo`. */
|
|
10
|
+
readonly name: string;
|
|
11
|
+
/** The package that registers it, recorded with it. */
|
|
12
|
+
readonly packageName: string;
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
/** A recorded sample, as the ledger returns it. */
|
|
16
|
+
export interface SampleDataRecord {
|
|
17
|
+
readonly name: string;
|
|
18
|
+
readonly status: 'executed' | 'skipped';
|
|
19
|
+
}
|
|
20
|
+
/** Where samples are recorded: the default connection's seed history. The database provider supplies it. */
|
|
21
|
+
export interface SampleDataLedger {
|
|
22
|
+
history(): Promise<readonly SampleDataRecord[]>;
|
|
23
|
+
record(entry: {
|
|
24
|
+
readonly packageName: string;
|
|
25
|
+
readonly name: string;
|
|
26
|
+
readonly status: 'executed' | 'skipped';
|
|
27
|
+
readonly durationMs?: number | null;
|
|
28
|
+
}): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
export interface SampleDataRunResult {
|
|
31
|
+
/** Registration names that ran. */
|
|
32
|
+
readonly executed: readonly string[];
|
|
33
|
+
/** Registration names recorded as skipped without running. */
|
|
34
|
+
readonly skipped: readonly string[];
|
|
35
|
+
/** Registrations that threw; each is recorded as skipped, so `nocobase db sample` can run it again. */
|
|
36
|
+
readonly failed: readonly {
|
|
37
|
+
readonly name: string;
|
|
38
|
+
readonly error: unknown;
|
|
39
|
+
}[];
|
|
40
|
+
}
|
|
41
|
+
export interface SampleDataService {
|
|
42
|
+
/** Adds sample data to build. Call it from a service provider's `register()` or `boot()`. */
|
|
43
|
+
register(registration: SampleDataRegistration): void;
|
|
44
|
+
registrations(): readonly SampleDataRegistration[];
|
|
45
|
+
/**
|
|
46
|
+
* Called by the database provider once startup tasks ran: where samples are recorded, and whether this start
|
|
47
|
+
* installed the database with `app.sampleData` set. Without it, a run does nothing.
|
|
48
|
+
*/
|
|
49
|
+
prepare(state: {
|
|
50
|
+
readonly ledger: SampleDataLedger;
|
|
51
|
+
readonly enabled: boolean;
|
|
52
|
+
}): void;
|
|
53
|
+
/**
|
|
54
|
+
* Makes the next run build every registration recorded as skipped, or not recorded at all, whatever `prepare` said.
|
|
55
|
+
* `nocobase db sample` uses it.
|
|
56
|
+
*/
|
|
57
|
+
rerunSkipped(): void;
|
|
58
|
+
/** Builds or skips what is not recorded yet. The application calls it once every provider is ready. */
|
|
59
|
+
run(): Promise<SampleDataRunResult>;
|
|
60
|
+
}
|
|
61
|
+
export declare const sampleDataToken: ServiceToken<SampleDataService>;
|
|
62
|
+
/** The seed history name a registration is recorded under. */
|
|
63
|
+
export declare function sampleDataRecordName(name: string): string;
|
|
64
|
+
//# sourceMappingURL=token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/sample-data/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AAEpC;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED,mDAAmD;AACnD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;CACzC;AAED,4GAA4G;AAC5G,MAAM,WAAW,gBAAgB;IAC/B,OAAO,IAAI,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,EAAE;QACZ,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;QACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACrC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,mCAAmC;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,uGAAuG;IACvG,QAAQ,CAAC,MAAM,EAAE,SAAS;QACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;KACzB,EAAE,CAAC;CACL;AAED,MAAM,WAAW,iBAAiB;IAChC,6FAA6F;IAC7F,QAAQ,CAAC,YAAY,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACrD,aAAa,IAAI,SAAS,sBAAsB,EAAE,CAAC;IACnD;;;OAGG;IACH,OAAO,CAAC,KAAK,EAAE;QACb,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;QAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;KAC3B,GAAG,IAAI,CAAC;IACT;;;OAGG;IACH,YAAY,IAAI,IAAI,CAAC;IACrB,uGAAuG;IACvG,GAAG,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACrC;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,CAAC,iBAAiB,CACe,CAAC;AAE5E,8DAA8D;AAC9D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createServiceToken, } from '@nocobase/service-provider';
|
|
2
|
+
export const sampleDataToken = createServiceToken('@nocobase/app-server/sample-data');
|
|
3
|
+
/** The seed history name a registration is recorded under. */
|
|
4
|
+
export function sampleDataRecordName(name) {
|
|
5
|
+
return `sample-data:${name}`;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/sample-data/token.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAEnB,MAAM,4BAA4B,CAAC;AAkEpC,MAAM,CAAC,MAAM,eAAe,GAC1B,kBAAkB,CAAoB,kCAAkC,CAAC,CAAC;AAE5E,8DAA8D;AAC9D,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,eAAe,IAAI,EAAE,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type SecretKeyEntry } from '@nocobase/secrets';
|
|
2
|
+
import type { EnvironmentMapping, EnvironmentMetadata } from '@nocobase/config/providers/env';
|
|
3
|
+
import { type AppConfigDefinition, type AppConfigFactory, type ConfigValidator } from '../config/define-app-config.js';
|
|
4
|
+
export type { SecretKeyEntry } from '@nocobase/secrets';
|
|
5
|
+
/** The `secrets` section: the master keys stored secrets are encrypted with, the current one first. */
|
|
6
|
+
export interface SecretsConfig {
|
|
7
|
+
readonly keys?: readonly SecretKeyEntry[];
|
|
8
|
+
}
|
|
9
|
+
/** `SECRETS_KEYS=2:<key>,1:<key>`, the current key first. */
|
|
10
|
+
export declare function envSecretKeys(path: string, metadata?: EnvironmentMetadata): EnvironmentMapping;
|
|
11
|
+
/** Rejects weak, placeholder and duplicate keys. A missing list is reported by `config check`, not here. */
|
|
12
|
+
export declare const validateSecretsConfig: ConfigValidator<SecretsConfig>;
|
|
13
|
+
/** Declares the `secrets` section with its validation and the `SECRETS_KEYS` variable. */
|
|
14
|
+
export declare function defineSecretsConfig(definition?: Partial<AppConfigDefinition<SecretsConfig>>): AppConfigFactory<SecretsConfig>;
|
|
15
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/secrets/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,gCAAgC,CAAC;AAGxC,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,uGAAuG;AACvG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CAC3C;AAED,6DAA6D;AAC7D,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,mBAAwB,GACjC,kBAAkB,CAQpB;AAcD,4GAA4G;AAC5G,eAAO,MAAM,qBAAqB,EAAE,eAAe,CAAC,aAAa,CAahE,CAAC;AAEF,0FAA0F;AAC1F,wBAAgB,mBAAmB,CACjC,UAAU,GAAE,OAAO,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAM,GAC3D,gBAAgB,CAAC,aAAa,CAAC,CAajC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { parseSecretKeysEnv, validateSecretKeys, } from '@nocobase/secrets';
|
|
2
|
+
import { defineAppConfig, } from '../config/define-app-config.js';
|
|
3
|
+
import { isPlaceholderSecret } from '../config/placeholder-secret.js';
|
|
4
|
+
/** `SECRETS_KEYS=2:<key>,1:<key>`, the current key first. */
|
|
5
|
+
export function envSecretKeys(path, metadata = {}) {
|
|
6
|
+
return {
|
|
7
|
+
...metadata,
|
|
8
|
+
path,
|
|
9
|
+
type: 'secretKeys',
|
|
10
|
+
parse: (value) => parseSecretKeysEnv(value).map((entry) => ({ ...entry })),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
const SECRETS_ENVIRONMENT = {
|
|
14
|
+
SECRETS_KEYS: envSecretKeys('keys', {
|
|
15
|
+
description: 'The master keys stored secrets are encrypted with, as version:key pairs, the current one first.',
|
|
16
|
+
secret: true,
|
|
17
|
+
generate: 'secretKeys',
|
|
18
|
+
}),
|
|
19
|
+
};
|
|
20
|
+
const KEY_FIX = 'Generate a key with: openssl rand -hex 32, and put it first in secrets.keys with a version above every other.';
|
|
21
|
+
/** Rejects weak, placeholder and duplicate keys. A missing list is reported by `config check`, not here. */
|
|
22
|
+
export const validateSecretsConfig = (secrets, context) => {
|
|
23
|
+
for (const issue of validateSecretKeys(secrets.keys, {
|
|
24
|
+
isPlaceholder: isPlaceholderSecret,
|
|
25
|
+
})) {
|
|
26
|
+
context.error(issue.index === undefined ? 'keys' : `keys.${issue.index}`, issue.message, { fix: KEY_FIX });
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
/** Declares the `secrets` section with its validation and the `SECRETS_KEYS` variable. */
|
|
30
|
+
export function defineSecretsConfig(definition = {}) {
|
|
31
|
+
const extra = definition.validate === undefined
|
|
32
|
+
? []
|
|
33
|
+
: Array.isArray(definition.validate)
|
|
34
|
+
? definition.validate
|
|
35
|
+
: [definition.validate];
|
|
36
|
+
return defineAppConfig({
|
|
37
|
+
defaults: definition.defaults ?? { keys: [] },
|
|
38
|
+
validate: [validateSecretsConfig, ...extra],
|
|
39
|
+
public: definition.public ?? [],
|
|
40
|
+
env: { ...SECRETS_ENVIRONMENT, ...definition.env },
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/secrets/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GAEnB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EACL,eAAe,GAIhB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAStE,6DAA6D;AAC7D,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,WAAgC,EAAE;IAElC,OAAO;QACL,GAAG,QAAQ;QACX,IAAI;QACJ,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,CAAC,KAAa,EAAE,EAAE,CACvB,kBAAkB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED,MAAM,mBAAmB,GAAiD;IACxE,YAAY,EAAE,aAAa,CAAC,MAAM,EAAE;QAClC,WAAW,EACT,iGAAiG;QACnG,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,YAAY;KACvB,CAAC;CACH,CAAC;AAEF,MAAM,OAAO,GACX,+GAA+G,CAAC;AAElH,4GAA4G;AAC5G,MAAM,CAAC,MAAM,qBAAqB,GAAmC,CACnE,OAAO,EACP,OAAO,EACP,EAAE;IACF,KAAK,MAAM,KAAK,IAAI,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAAE;QACnD,aAAa,EAAE,mBAAmB;KACnC,CAAC,EAAE,CAAC;QACH,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,KAAK,EAAE,EAC1D,KAAK,CAAC,OAAO,EACb,EAAE,GAAG,EAAE,OAAO,EAAE,CACjB,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,0FAA0F;AAC1F,MAAM,UAAU,mBAAmB,CACjC,aAA0D,EAAE;IAE5D,MAAM,KAAK,GACT,UAAU,CAAC,QAAQ,KAAK,SAAS;QAC/B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;YAClC,CAAC,CAAE,UAAU,CAAC,QAAsD;YACpE,CAAC,CAAC,CAAC,UAAU,CAAC,QAA0C,CAAC,CAAC;IAChE,OAAO,eAAe,CAAgB;QACpC,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QAC7C,QAAQ,EAAE,CAAC,qBAAqB,EAAE,GAAG,KAAK,CAAC;QAC3C,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,EAAE;QAC/B,GAAG,EAAE,EAAE,GAAG,mBAAmB,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE;KACnD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/secrets/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/secrets/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ServiceProvider } from '@nocobase/service-provider';
|
|
2
|
+
import type { AppPluginApplication } from '../plugins/index.js';
|
|
3
|
+
export declare class SecretsProvider extends ServiceProvider<AppPluginApplication> {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
register(): void;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/secrets/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAKhE,qBAAa,eAAgB,SAAQ,eAAe,CAAC,oBAAoB,CAAC;IACxE,SAAgB,IAAI,EAAE,MAAM,CAAkC;IAE9C,QAAQ,IAAI,IAAI;CAOjC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ServiceProvider } from '@nocobase/service-provider';
|
|
2
|
+
import { createSecretsService } from './service.js';
|
|
3
|
+
import { secretsServiceToken } from './token.js';
|
|
4
|
+
export class SecretsProvider extends ServiceProvider {
|
|
5
|
+
name = '@nocobase/app-server/secrets';
|
|
6
|
+
register() {
|
|
7
|
+
this.app.container.singleton(secretsServiceToken, () => createSecretsService(this.app.config.get('secrets') ?? { keys: [] }));
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/secrets/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAI7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,OAAO,eAAgB,SAAQ,eAAqC;IACxD,IAAI,GAAW,8BAA8B,CAAC;IAE9C,QAAQ;QACtB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,EAAE,GAAG,EAAE,CACrD,oBAAoB,CAClB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAC9D,CACF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { type DerivedSecret, type SecretsEnvelopeInfo, type SecretsSealOptions } from '@nocobase/secrets';
|
|
2
|
+
import type { SecretsConfig } from './config.js';
|
|
3
|
+
export { SecretsError, isSecretsError, type DerivedSecret, type SecretsEnvelopeInfo, type SecretsErrorCode, type SecretsSealOptions, } from '@nocobase/secrets';
|
|
4
|
+
/** What `secrets status` and `secrets rotate` hand a store. */
|
|
5
|
+
export interface SecretsStoreContext {
|
|
6
|
+
readonly secrets: SecretsService;
|
|
7
|
+
/** How many rows to read and rewrite at a time. */
|
|
8
|
+
readonly batchSize: number;
|
|
9
|
+
/** `rotate --dry-run`: count what would change, write nothing. */
|
|
10
|
+
readonly dryRun: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface SecretsStoreStatus {
|
|
13
|
+
/** Sealed values the store holds. */
|
|
14
|
+
readonly total: number;
|
|
15
|
+
/** Count of sealed values by the key version that sealed them. */
|
|
16
|
+
readonly byVersion: Readonly<Record<string, number>>;
|
|
17
|
+
/** Values not sealed with the current key, including legacy ones a store still reads. */
|
|
18
|
+
readonly needsReseal: number;
|
|
19
|
+
/** Values in a format the store reads only for compatibility. */
|
|
20
|
+
readonly legacy?: number;
|
|
21
|
+
}
|
|
22
|
+
export interface SecretsResealResult {
|
|
23
|
+
/** Values rewritten under the current key (or that would be, under `dryRun`). */
|
|
24
|
+
readonly resealed: number;
|
|
25
|
+
/** Values that could not be opened, left as they were. */
|
|
26
|
+
readonly failed: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A place that keeps sealed values: one table, or a few columns of one. `reseal` rewrites every value not sealed with
|
|
30
|
+
* the current key and must be safe to run again — after an interruption, or alongside a running application.
|
|
31
|
+
*/
|
|
32
|
+
export interface SecretsStore {
|
|
33
|
+
readonly name: string;
|
|
34
|
+
status(context: SecretsStoreContext): Promise<SecretsStoreStatus>;
|
|
35
|
+
reseal(context: SecretsStoreContext): Promise<SecretsResealResult>;
|
|
36
|
+
}
|
|
37
|
+
export interface SecretsService {
|
|
38
|
+
/** Whether keys are configured, so that `seal`, `open` and `keyring` work. */
|
|
39
|
+
readonly ready: boolean;
|
|
40
|
+
/** The version new values are sealed with; `undefined` when not ready. */
|
|
41
|
+
readonly currentVersion: number | undefined;
|
|
42
|
+
/** Encrypts `plaintext` for `purpose`. Throws `SECRETS_NOT_CONFIGURED` when not ready. */
|
|
43
|
+
seal(plaintext: string, options: SecretsSealOptions): string;
|
|
44
|
+
/** Decrypts what `seal` produced with the same purpose and `aad`. */
|
|
45
|
+
open(sealed: string, options: SecretsSealOptions): string;
|
|
46
|
+
/** The key version of a sealed value, without opening it. */
|
|
47
|
+
inspect(sealed: string): SecretsEnvelopeInfo;
|
|
48
|
+
/** Whether a sealed value was sealed with a key other than the current one. */
|
|
49
|
+
needsReseal(sealed: string): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Every configured version's key derived for `purpose`, current first, for a library that encrypts on its own and
|
|
52
|
+
* takes a rotation list, such as Better Auth's `secrets`.
|
|
53
|
+
*/
|
|
54
|
+
keyring(purpose: string): DerivedSecret[];
|
|
55
|
+
registerStore(store: SecretsStore): void;
|
|
56
|
+
stores(): readonly SecretsStore[];
|
|
57
|
+
}
|
|
58
|
+
export declare const SECRETS_NOT_CONFIGURED_MESSAGE: string;
|
|
59
|
+
/**
|
|
60
|
+
* The service over the configured keys. Without keys, or with keys that fail validation, it is not ready rather than
|
|
61
|
+
* failing to construct: a command that never touches a secret still runs, and every use reports what to configure.
|
|
62
|
+
*/
|
|
63
|
+
export declare function createSecretsService(config: SecretsConfig): SecretsService;
|
|
64
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/secrets/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,aAAa,EAElB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,+DAA+D;AAC/D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,yFAAyF;IACzF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,iFAAiF;IACjF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAClE,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,cAAc;IAC7B,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,0EAA0E;IAC1E,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,0FAA0F;IAC1F,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAAC;IAC7D,qEAAqE;IACrE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAAC;IAC1D,6DAA6D;IAC7D,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC7C,+EAA+E;IAC/E,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACrC;;;OAGG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC;IAC1C,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACzC,MAAM,IAAI,SAAS,YAAY,EAAE,CAAC;CACnC;AAED,eAAO,MAAM,8BAA8B,EAAE,MAC2J,CAAC;AAEzM;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc,CAyC1E"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { createKeyring, inspectSecret, isSecretsError, SecretsError, } from '@nocobase/secrets';
|
|
2
|
+
export { SecretsError, isSecretsError, } from '@nocobase/secrets';
|
|
3
|
+
export const SECRETS_NOT_CONFIGURED_MESSAGE = 'No secrets key is configured. Run pnpm nocobase config init, or set secrets.keys in the configuration file (SECRETS_KEYS in the environment) to a random key such as one from: openssl rand -hex 32.';
|
|
4
|
+
/**
|
|
5
|
+
* The service over the configured keys. Without keys, or with keys that fail validation, it is not ready rather than
|
|
6
|
+
* failing to construct: a command that never touches a secret still runs, and every use reports what to configure.
|
|
7
|
+
*/
|
|
8
|
+
export function createSecretsService(config) {
|
|
9
|
+
let keyring;
|
|
10
|
+
let unavailable;
|
|
11
|
+
if (!config.keys || config.keys.length === 0) {
|
|
12
|
+
unavailable = new SecretsError('SECRETS_NOT_CONFIGURED', SECRETS_NOT_CONFIGURED_MESSAGE);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
try {
|
|
16
|
+
keyring = createKeyring(config.keys);
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
if (!isSecretsError(error))
|
|
20
|
+
throw error;
|
|
21
|
+
unavailable = error;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const require = () => {
|
|
25
|
+
if (keyring)
|
|
26
|
+
return keyring;
|
|
27
|
+
throw unavailable;
|
|
28
|
+
};
|
|
29
|
+
const stores = new Map();
|
|
30
|
+
return {
|
|
31
|
+
ready: keyring !== undefined,
|
|
32
|
+
currentVersion: keyring?.currentVersion,
|
|
33
|
+
seal: (plaintext, options) => require().seal(plaintext, options),
|
|
34
|
+
open: (sealed, options) => require().open(sealed, options),
|
|
35
|
+
inspect: (sealed) => inspectSecret(sealed),
|
|
36
|
+
needsReseal: (sealed) => inspectSecret(sealed).version !== require().currentVersion,
|
|
37
|
+
keyring: (purpose) => require().derive(purpose),
|
|
38
|
+
registerStore(store) {
|
|
39
|
+
if (stores.has(store.name)) {
|
|
40
|
+
throw new Error(`A secrets store named ${store.name} is already registered.`);
|
|
41
|
+
}
|
|
42
|
+
stores.set(store.name, store);
|
|
43
|
+
},
|
|
44
|
+
stores: () => [...stores.values()],
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/secrets/service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,YAAY,GAKb,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EACL,YAAY,EACZ,cAAc,GAKf,MAAM,mBAAmB,CAAC;AA6D3B,MAAM,CAAC,MAAM,8BAA8B,GACzC,sMAAsM,CAAC;AAEzM;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAqB;IACxD,IAAI,OAA4B,CAAC;IACjC,IAAI,WAAqC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,WAAW,GAAG,IAAI,YAAY,CAC5B,wBAAwB,EACxB,8BAA8B,CAC/B,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;YACxC,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,GAAY,EAAE;QAC5B,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAC5B,MAAM,WAAY,CAAC;IACrB,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAE/C,OAAO;QACL,KAAK,EAAE,OAAO,KAAK,SAAS;QAC5B,cAAc,EAAE,OAAO,EAAE,cAAc;QACvC,IAAI,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;QAChE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;QAC1D,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC;QAC1C,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CACtB,aAAa,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC,cAAc;QAC5D,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;QAC/C,aAAa,CAAC,KAAK;YACjB,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CACb,yBAAyB,KAAK,CAAC,IAAI,yBAAyB,CAC7D,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;KACnC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { DatabaseConnection } from '@nocobase/db';
|
|
2
|
+
import type { SecretsStore } from './service.js';
|
|
3
|
+
type Row = Record<string, unknown>;
|
|
4
|
+
/** A value format a column still reads for compatibility. Such values count as legacy and are resealed. */
|
|
5
|
+
export interface SecretsLegacyFormat {
|
|
6
|
+
matches(value: string): boolean;
|
|
7
|
+
open(value: string, row: Row): string;
|
|
8
|
+
}
|
|
9
|
+
export interface SecretsTableColumn {
|
|
10
|
+
readonly column: string;
|
|
11
|
+
readonly purpose: string;
|
|
12
|
+
/** What the column's values are bound to, read from the row, such as its id. */
|
|
13
|
+
readonly aad?: (row: Row) => readonly string[];
|
|
14
|
+
readonly legacy?: SecretsLegacyFormat;
|
|
15
|
+
}
|
|
16
|
+
export interface SecretsTableStoreOptions {
|
|
17
|
+
readonly name: string;
|
|
18
|
+
readonly table: string;
|
|
19
|
+
/** The column rows are paged and updated by. Defaults to `id`. */
|
|
20
|
+
readonly key?: string;
|
|
21
|
+
readonly columns: readonly SecretsTableColumn[];
|
|
22
|
+
/** Further columns `aad` or `legacy.open` read. */
|
|
23
|
+
readonly select?: readonly string[];
|
|
24
|
+
readonly connection: () => DatabaseConnection;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* A store over columns of one table. Rows are paged by `key`, so a run reads a bounded batch at a time, and each value
|
|
28
|
+
* is rewritten only if it still holds what was read, so a run racing the application or another run never overwrites
|
|
29
|
+
* a newer value. Running it again picks up where an interrupted run stopped, because sealed-with-current values are
|
|
30
|
+
* skipped.
|
|
31
|
+
*/
|
|
32
|
+
export declare function createSecretsTableStore(options: SecretsTableStoreOptions): SecretsStore;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=table-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-store.d.ts","sourceRoot":"","sources":["../../src/secrets/table-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,OAAO,KAAK,EAEV,YAAY,EAGb,MAAM,cAAc,CAAC;AAEtB,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnC,2GAA2G;AAC3G,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,gFAAgF;IAChF,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC;CACvC;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAChD,mDAAmD;IACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,kBAAkB,CAAC;CAC/C;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,wBAAwB,GAChC,YAAY,CAqGd"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { isSealedSecret } from '@nocobase/secrets';
|
|
2
|
+
/**
|
|
3
|
+
* A store over columns of one table. Rows are paged by `key`, so a run reads a bounded batch at a time, and each value
|
|
4
|
+
* is rewritten only if it still holds what was read, so a run racing the application or another run never overwrites
|
|
5
|
+
* a newer value. Running it again picks up where an interrupted run stopped, because sealed-with-current values are
|
|
6
|
+
* skipped.
|
|
7
|
+
*/
|
|
8
|
+
export function createSecretsTableStore(options) {
|
|
9
|
+
const key = options.key ?? 'id';
|
|
10
|
+
const selection = [
|
|
11
|
+
...new Set([
|
|
12
|
+
key,
|
|
13
|
+
...options.columns.map((column) => column.column),
|
|
14
|
+
...(options.select ?? []),
|
|
15
|
+
]),
|
|
16
|
+
];
|
|
17
|
+
async function* batches(batchSize) {
|
|
18
|
+
let last;
|
|
19
|
+
for (;;) {
|
|
20
|
+
let query = options
|
|
21
|
+
.connection()
|
|
22
|
+
.query.selectFrom(options.table)
|
|
23
|
+
.select(selection);
|
|
24
|
+
if (last !== undefined)
|
|
25
|
+
query = query.where(key, '>', last);
|
|
26
|
+
const rows = await query
|
|
27
|
+
.orderBy(key, 'asc')
|
|
28
|
+
.limit(batchSize)
|
|
29
|
+
.execute();
|
|
30
|
+
if (rows.length === 0)
|
|
31
|
+
return;
|
|
32
|
+
yield rows;
|
|
33
|
+
if (rows.length < batchSize)
|
|
34
|
+
return;
|
|
35
|
+
last = rows[rows.length - 1][key];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
name: options.name,
|
|
40
|
+
async status(context) {
|
|
41
|
+
const byVersion = {};
|
|
42
|
+
let total = 0;
|
|
43
|
+
let needsReseal = 0;
|
|
44
|
+
let legacy = 0;
|
|
45
|
+
for await (const rows of batches(context.batchSize)) {
|
|
46
|
+
for (const row of rows) {
|
|
47
|
+
for (const column of options.columns) {
|
|
48
|
+
const value = row[column.column];
|
|
49
|
+
if (typeof value !== 'string' || value === '')
|
|
50
|
+
continue;
|
|
51
|
+
total += 1;
|
|
52
|
+
const version = classify(value, column);
|
|
53
|
+
byVersion[version] = (byVersion[version] ?? 0) + 1;
|
|
54
|
+
if (version === 'legacy')
|
|
55
|
+
legacy += 1;
|
|
56
|
+
if (version === 'legacy' ||
|
|
57
|
+
(version !== 'malformed' &&
|
|
58
|
+
Number(version) !== context.secrets.currentVersion)) {
|
|
59
|
+
needsReseal += 1;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return { total, byVersion, needsReseal, ...(legacy ? { legacy } : {}) };
|
|
65
|
+
},
|
|
66
|
+
async reseal(context) {
|
|
67
|
+
let resealed = 0;
|
|
68
|
+
let failed = 0;
|
|
69
|
+
for await (const rows of batches(context.batchSize)) {
|
|
70
|
+
for (const row of rows) {
|
|
71
|
+
for (const column of options.columns) {
|
|
72
|
+
const value = row[column.column];
|
|
73
|
+
if (typeof value !== 'string' || value === '')
|
|
74
|
+
continue;
|
|
75
|
+
const version = classify(value, column);
|
|
76
|
+
if (version === 'malformed')
|
|
77
|
+
continue;
|
|
78
|
+
if (version !== 'legacy' &&
|
|
79
|
+
Number(version) === context.secrets.currentVersion)
|
|
80
|
+
continue;
|
|
81
|
+
const seal = { purpose: column.purpose, aad: column.aad?.(row) };
|
|
82
|
+
let plaintext;
|
|
83
|
+
try {
|
|
84
|
+
plaintext =
|
|
85
|
+
version === 'legacy'
|
|
86
|
+
? column.legacy.open(value, row)
|
|
87
|
+
: context.secrets.open(value, seal);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
failed += 1;
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (context.dryRun) {
|
|
94
|
+
resealed += 1;
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
const result = await options
|
|
98
|
+
.connection()
|
|
99
|
+
.query.updateTable(options.table)
|
|
100
|
+
.set({ [column.column]: context.secrets.seal(plaintext, seal) })
|
|
101
|
+
.where(key, '=', row[key])
|
|
102
|
+
.where(column.column, '=', value)
|
|
103
|
+
.execute();
|
|
104
|
+
if ((result.updatedCount ?? 1) > 0)
|
|
105
|
+
resealed += 1;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return { resealed, failed };
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function classify(value, column) {
|
|
114
|
+
if (isSealedSecret(value))
|
|
115
|
+
return value.split('.')[1];
|
|
116
|
+
return column.legacy?.matches(value) ? 'legacy' : 'malformed';
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=table-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-store.js","sourceRoot":"","sources":["../../src/secrets/table-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/secrets/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,eAAO,MAAM,mBAAmB,EAAE,YAAY,CAAC,cAAc,CACO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/secrets/token.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAEnB,MAAM,4BAA4B,CAAC;AAIpC,MAAM,CAAC,MAAM,mBAAmB,GAC9B,kBAAkB,CAAiB,8BAA8B,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type AppSessionConfig } from '@nocobase/session';
|
|
2
|
+
export interface AppSessionGcLotteryConfig {
|
|
3
|
+
readonly hits: number;
|
|
4
|
+
readonly total: number;
|
|
5
|
+
}
|
|
6
|
+
export interface AppSessionConfigInput extends Omit<AppSessionConfig, 'gcLottery' | 'secret'> {
|
|
7
|
+
readonly gcLottery: AppSessionGcLotteryConfig;
|
|
8
|
+
readonly secret?: string;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/session/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CACjD,gBAAgB,EAChB,WAAW,GAAG,QAAQ,CACvB;IACC,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAC9C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/session/config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type AppSessionConfig } from '@nocobase/session';
|
|
2
|
+
import { ServiceProvider } from '@nocobase/service-provider';
|
|
3
|
+
import type { AppPluginApplication } from '../plugins/index.js';
|
|
4
|
+
import { type AppHttpMiddleware } from '../router/index.js';
|
|
5
|
+
import { type AppSessionConfigInput } from './config.js';
|
|
6
|
+
export declare class SessionProvider extends ServiceProvider<AppPluginApplication> {
|
|
7
|
+
readonly name: string;
|
|
8
|
+
private readonly ephemeralSecret;
|
|
9
|
+
register(): void;
|
|
10
|
+
shutdown(): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* The cookie keys used when `session.secret` is not set: derived from the secrets keys, current first, so adding a
|
|
13
|
+
* key keeps existing cookies readable. Without secrets keys, a key made up for this process.
|
|
14
|
+
*/
|
|
15
|
+
private fallbackSecrets;
|
|
16
|
+
}
|
|
17
|
+
/** The purpose session cookie keys are derived for from the secrets keys. */
|
|
18
|
+
export declare const SESSION_COOKIE_PURPOSE = "@nocobase/session/cookie";
|
|
19
|
+
/** The keys a session cookie is encrypted with when `session.secret` is not set. */
|
|
20
|
+
export interface AppSessionSecrets {
|
|
21
|
+
readonly secret: string;
|
|
22
|
+
readonly previousSecrets: readonly string[];
|
|
23
|
+
}
|
|
24
|
+
export declare function resolveAppSessionConfig(configured: AppSessionConfigInput, fallback: string | AppSessionSecrets): AppSessionConfig;
|
|
25
|
+
export declare const sessionHttpMiddleware: AppHttpMiddleware<AppPluginApplication>;
|
|
26
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/session/provider.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,eAAe,EAEhB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGzD,qBAAa,eAAgB,SAAQ,eAAe,CAAC,oBAAoB,CAAC;IACxE,SAAgB,IAAI,EAAE,MAAM,CAAkC;IAC9D,OAAO,CAAC,QAAQ,CAAC,eAAe,CACQ;IAExB,QAAQ,IAAI,IAAI;IAWV,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/C;;;OAGG;IACH,OAAO,CAAC,eAAe;CAaxB;AAED,6EAA6E;AAC7E,eAAO,MAAM,sBAAsB,6BAA6B,CAAC;AAEjE,oFAAoF;AACpF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAED,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,qBAAqB,EACjC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GACnC,gBAAgB,CA4BlB;AAED,eAAO,MAAM,qBAAqB,EAAE,iBAAiB,CAAC,oBAAoB,CAStE,CAAC"}
|