webapp-factory 0.1.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/README.md +145 -0
- package/dist/access-control/adapters/in-memory-relations.d.ts +7 -0
- package/dist/access-control/adapters/in-memory-relations.d.ts.map +1 -0
- package/dist/access-control/adapters/in-memory-relations.js +6 -0
- package/dist/access-control/adapters/in-memory-relations.js.map +1 -0
- package/dist/access-control/core/enforcement.d.ts +13 -0
- package/dist/access-control/core/enforcement.d.ts.map +1 -0
- package/dist/access-control/core/enforcement.js +38 -0
- package/dist/access-control/core/enforcement.js.map +1 -0
- package/dist/access-control/core/errors.d.ts +30 -0
- package/dist/access-control/core/errors.d.ts.map +1 -0
- package/dist/access-control/core/errors.js +46 -0
- package/dist/access-control/core/errors.js.map +1 -0
- package/dist/access-control/core/pdp.d.ts +14 -0
- package/dist/access-control/core/pdp.d.ts.map +1 -0
- package/dist/access-control/core/pdp.js +79 -0
- package/dist/access-control/core/pdp.js.map +1 -0
- package/dist/access-control/core/ports.d.ts +68 -0
- package/dist/access-control/core/ports.d.ts.map +1 -0
- package/dist/access-control/core/ports.js +6 -0
- package/dist/access-control/core/ports.js.map +1 -0
- package/dist/access-control/core/rbac.d.ts +10 -0
- package/dist/access-control/core/rbac.d.ts.map +1 -0
- package/dist/access-control/core/rbac.js +78 -0
- package/dist/access-control/core/rbac.js.map +1 -0
- package/dist/access-control/core/rebac.d.ts +15 -0
- package/dist/access-control/core/rebac.d.ts.map +1 -0
- package/dist/access-control/core/rebac.js +48 -0
- package/dist/access-control/core/rebac.js.map +1 -0
- package/dist/access-control/index.d.ts +15 -0
- package/dist/access-control/index.d.ts.map +1 -0
- package/dist/access-control/index.js +20 -0
- package/dist/access-control/index.js.map +1 -0
- package/dist/access-control/nestjs/access-control.module.d.ts +34 -0
- package/dist/access-control/nestjs/access-control.module.d.ts.map +1 -0
- package/dist/access-control/nestjs/access-control.module.js +80 -0
- package/dist/access-control/nestjs/access-control.module.js.map +1 -0
- package/dist/audit/adapters/in-memory-store.d.ts +3 -0
- package/dist/audit/adapters/in-memory-store.d.ts.map +1 -0
- package/dist/audit/adapters/in-memory-store.js +66 -0
- package/dist/audit/adapters/in-memory-store.js.map +1 -0
- package/dist/audit/adapters/pg-store.d.ts +22 -0
- package/dist/audit/adapters/pg-store.d.ts.map +1 -0
- package/dist/audit/adapters/pg-store.js +119 -0
- package/dist/audit/adapters/pg-store.js.map +1 -0
- package/dist/audit/core/audit-log.d.ts +41 -0
- package/dist/audit/core/audit-log.d.ts.map +1 -0
- package/dist/audit/core/audit-log.js +78 -0
- package/dist/audit/core/audit-log.js.map +1 -0
- package/dist/audit/core/errors.d.ts +22 -0
- package/dist/audit/core/errors.d.ts.map +1 -0
- package/dist/audit/core/errors.js +35 -0
- package/dist/audit/core/errors.js.map +1 -0
- package/dist/audit/core/hash.d.ts +9 -0
- package/dist/audit/core/hash.d.ts.map +1 -0
- package/dist/audit/core/hash.js +45 -0
- package/dist/audit/core/hash.js.map +1 -0
- package/dist/audit/core/ports.d.ts +68 -0
- package/dist/audit/core/ports.d.ts.map +1 -0
- package/dist/audit/core/ports.js +6 -0
- package/dist/audit/core/ports.js.map +1 -0
- package/dist/audit/index.d.ts +13 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +16 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/auth/adapters/argon2id-hasher.d.ts +15 -0
- package/dist/auth/adapters/argon2id-hasher.d.ts.map +1 -0
- package/dist/auth/adapters/argon2id-hasher.js +61 -0
- package/dist/auth/adapters/argon2id-hasher.js.map +1 -0
- package/dist/auth/adapters/in-memory-stores.d.ts +14 -0
- package/dist/auth/adapters/in-memory-stores.d.ts.map +1 -0
- package/dist/auth/adapters/in-memory-stores.js +78 -0
- package/dist/auth/adapters/in-memory-stores.js.map +1 -0
- package/dist/auth/core/auth-service.d.ts +40 -0
- package/dist/auth/core/auth-service.d.ts.map +1 -0
- package/dist/auth/core/auth-service.js +106 -0
- package/dist/auth/core/auth-service.js.map +1 -0
- package/dist/auth/core/credentials.d.ts +15 -0
- package/dist/auth/core/credentials.d.ts.map +1 -0
- package/dist/auth/core/credentials.js +15 -0
- package/dist/auth/core/credentials.js.map +1 -0
- package/dist/auth/core/crypto-util.d.ts +7 -0
- package/dist/auth/core/crypto-util.d.ts.map +1 -0
- package/dist/auth/core/crypto-util.js +15 -0
- package/dist/auth/core/crypto-util.js.map +1 -0
- package/dist/auth/core/errors.d.ts +33 -0
- package/dist/auth/core/errors.d.ts.map +1 -0
- package/dist/auth/core/errors.js +48 -0
- package/dist/auth/core/errors.js.map +1 -0
- package/dist/auth/core/jwt.d.ts +5 -0
- package/dist/auth/core/jwt.d.ts.map +1 -0
- package/dist/auth/core/jwt.js +40 -0
- package/dist/auth/core/jwt.js.map +1 -0
- package/dist/auth/core/ports.d.ts +95 -0
- package/dist/auth/core/ports.d.ts.map +1 -0
- package/dist/auth/core/ports.js +7 -0
- package/dist/auth/core/ports.js.map +1 -0
- package/dist/auth/core/single-use.d.ts +10 -0
- package/dist/auth/core/single-use.d.ts.map +1 -0
- package/dist/auth/core/single-use.js +47 -0
- package/dist/auth/core/single-use.js.map +1 -0
- package/dist/auth/core/tokens.d.ts +14 -0
- package/dist/auth/core/tokens.d.ts.map +1 -0
- package/dist/auth/core/tokens.js +85 -0
- package/dist/auth/core/tokens.js.map +1 -0
- package/dist/auth/index.d.ts +18 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +22 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/nestjs/auth.module.d.ts +17 -0
- package/dist/auth/nestjs/auth.module.d.ts.map +1 -0
- package/dist/auth/nestjs/auth.module.js +18 -0
- package/dist/auth/nestjs/auth.module.js.map +1 -0
- package/dist/cache/adapters/in-memory-store.d.ts +6 -0
- package/dist/cache/adapters/in-memory-store.d.ts.map +1 -0
- package/dist/cache/adapters/in-memory-store.js +65 -0
- package/dist/cache/adapters/in-memory-store.js.map +1 -0
- package/dist/cache/adapters/redis-store.d.ts +32 -0
- package/dist/cache/adapters/redis-store.d.ts.map +1 -0
- package/dist/cache/adapters/redis-store.js +59 -0
- package/dist/cache/adapters/redis-store.js.map +1 -0
- package/dist/cache/core/cache.d.ts +31 -0
- package/dist/cache/core/cache.d.ts.map +1 -0
- package/dist/cache/core/cache.js +89 -0
- package/dist/cache/core/cache.js.map +1 -0
- package/dist/cache/core/errors.d.ts +17 -0
- package/dist/cache/core/errors.d.ts.map +1 -0
- package/dist/cache/core/errors.js +27 -0
- package/dist/cache/core/errors.js.map +1 -0
- package/dist/cache/core/lock.d.ts +21 -0
- package/dist/cache/core/lock.d.ts.map +1 -0
- package/dist/cache/core/lock.js +47 -0
- package/dist/cache/core/lock.js.map +1 -0
- package/dist/cache/core/ports.d.ts +33 -0
- package/dist/cache/core/ports.d.ts.map +1 -0
- package/dist/cache/core/ports.js +6 -0
- package/dist/cache/core/ports.js.map +1 -0
- package/dist/cache/core/pubsub.d.ts +14 -0
- package/dist/cache/core/pubsub.d.ts.map +1 -0
- package/dist/cache/core/pubsub.js +13 -0
- package/dist/cache/core/pubsub.js.map +1 -0
- package/dist/cache/core/serializer.d.ts +4 -0
- package/dist/cache/core/serializer.d.ts.map +1 -0
- package/dist/cache/core/serializer.js +6 -0
- package/dist/cache/core/serializer.js.map +1 -0
- package/dist/cache/index.d.ts +14 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +19 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/config/adapters/reporters.d.ts +17 -0
- package/dist/config/adapters/reporters.d.ts.map +1 -0
- package/dist/config/adapters/reporters.js +35 -0
- package/dist/config/adapters/reporters.js.map +1 -0
- package/dist/config/adapters/secret-resolvers.d.ts +21 -0
- package/dist/config/adapters/secret-resolvers.d.ts.map +1 -0
- package/dist/config/adapters/secret-resolvers.js +60 -0
- package/dist/config/adapters/secret-resolvers.js.map +1 -0
- package/dist/config/adapters/zod-schema.d.ts +20 -0
- package/dist/config/adapters/zod-schema.d.ts.map +1 -0
- package/dist/config/adapters/zod-schema.js +35 -0
- package/dist/config/adapters/zod-schema.js.map +1 -0
- package/dist/config/core/env-loader.d.ts +47 -0
- package/dist/config/core/env-loader.d.ts.map +1 -0
- package/dist/config/core/env-loader.js +155 -0
- package/dist/config/core/env-loader.js.map +1 -0
- package/dist/config/core/errors.d.ts +34 -0
- package/dist/config/core/errors.d.ts.map +1 -0
- package/dist/config/core/errors.js +49 -0
- package/dist/config/core/errors.js.map +1 -0
- package/dist/config/core/freeze.d.ts +7 -0
- package/dist/config/core/freeze.d.ts.map +1 -0
- package/dist/config/core/freeze.js +20 -0
- package/dist/config/core/freeze.js.map +1 -0
- package/dist/config/core/load-config.d.ts +43 -0
- package/dist/config/core/load-config.d.ts.map +1 -0
- package/dist/config/core/load-config.js +74 -0
- package/dist/config/core/load-config.js.map +1 -0
- package/dist/config/core/merge.d.ts +19 -0
- package/dist/config/core/merge.d.ts.map +1 -0
- package/dist/config/core/merge.js +31 -0
- package/dist/config/core/merge.js.map +1 -0
- package/dist/config/core/ports.d.ts +58 -0
- package/dist/config/core/ports.d.ts.map +1 -0
- package/dist/config/core/ports.js +2 -0
- package/dist/config/core/ports.js.map +1 -0
- package/dist/config/core/secret-resolver.d.ts +16 -0
- package/dist/config/core/secret-resolver.d.ts.map +1 -0
- package/dist/config/core/secret-resolver.js +73 -0
- package/dist/config/core/secret-resolver.js.map +1 -0
- package/dist/config/core/secret.d.ts +21 -0
- package/dist/config/core/secret.d.ts.map +1 -0
- package/dist/config/core/secret.js +40 -0
- package/dist/config/core/secret.js.map +1 -0
- package/dist/config/index.d.ts +16 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +23 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/nestjs/config-kit.module.d.ts +37 -0
- package/dist/config/nestjs/config-kit.module.d.ts.map +1 -0
- package/dist/config/nestjs/config-kit.module.js +24 -0
- package/dist/config/nestjs/config-kit.module.js.map +1 -0
- package/dist/http/adapters/zod-schema.d.ts +11 -0
- package/dist/http/adapters/zod-schema.d.ts.map +1 -0
- package/dist/http/adapters/zod-schema.js +74 -0
- package/dist/http/adapters/zod-schema.js.map +1 -0
- package/dist/http/core/context.d.ts +25 -0
- package/dist/http/core/context.d.ts.map +1 -0
- package/dist/http/core/context.js +60 -0
- package/dist/http/core/context.js.map +1 -0
- package/dist/http/core/errors.d.ts +41 -0
- package/dist/http/core/errors.d.ts.map +1 -0
- package/dist/http/core/errors.js +99 -0
- package/dist/http/core/errors.js.map +1 -0
- package/dist/http/core/kernel.d.ts +54 -0
- package/dist/http/core/kernel.d.ts.map +1 -0
- package/dist/http/core/kernel.js +122 -0
- package/dist/http/core/kernel.js.map +1 -0
- package/dist/http/core/openapi.d.ts +37 -0
- package/dist/http/core/openapi.d.ts.map +1 -0
- package/dist/http/core/openapi.js +99 -0
- package/dist/http/core/openapi.js.map +1 -0
- package/dist/http/core/pagination.d.ts +17 -0
- package/dist/http/core/pagination.d.ts.map +1 -0
- package/dist/http/core/pagination.js +108 -0
- package/dist/http/core/pagination.js.map +1 -0
- package/dist/http/core/ports.d.ts +106 -0
- package/dist/http/core/ports.d.ts.map +1 -0
- package/dist/http/core/ports.js +6 -0
- package/dist/http/core/ports.js.map +1 -0
- package/dist/http/core/redaction.d.ts +8 -0
- package/dist/http/core/redaction.d.ts.map +1 -0
- package/dist/http/core/redaction.js +45 -0
- package/dist/http/core/redaction.js.map +1 -0
- package/dist/http/core/router.d.ts +37 -0
- package/dist/http/core/router.d.ts.map +1 -0
- package/dist/http/core/router.js +120 -0
- package/dist/http/core/router.js.map +1 -0
- package/dist/http/core/security.d.ts +43 -0
- package/dist/http/core/security.d.ts.map +1 -0
- package/dist/http/core/security.js +66 -0
- package/dist/http/core/security.js.map +1 -0
- package/dist/http/core/validation.d.ts +9 -0
- package/dist/http/core/validation.d.ts.map +1 -0
- package/dist/http/core/validation.js +36 -0
- package/dist/http/core/validation.js.map +1 -0
- package/dist/http/index.d.ts +20 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +29 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/nestjs/http-kernel.module.d.ts +37 -0
- package/dist/http/nestjs/http-kernel.module.d.ts.map +1 -0
- package/dist/http/nestjs/http-kernel.module.js +77 -0
- package/dist/http/nestjs/http-kernel.module.js.map +1 -0
- package/dist/http/nodejs/http-adapter.d.ts +11 -0
- package/dist/http/nodejs/http-adapter.d.ts.map +1 -0
- package/dist/http/nodejs/http-adapter.js +60 -0
- package/dist/http/nodejs/http-adapter.js.map +1 -0
- package/dist/i18n/core/catalog.d.ts +23 -0
- package/dist/i18n/core/catalog.d.ts.map +1 -0
- package/dist/i18n/core/catalog.js +31 -0
- package/dist/i18n/core/catalog.js.map +1 -0
- package/dist/i18n/core/errors.d.ts +14 -0
- package/dist/i18n/core/errors.d.ts.map +1 -0
- package/dist/i18n/core/errors.js +22 -0
- package/dist/i18n/core/errors.js.map +1 -0
- package/dist/i18n/core/i18n.d.ts +20 -0
- package/dist/i18n/core/i18n.d.ts.map +1 -0
- package/dist/i18n/core/i18n.js +48 -0
- package/dist/i18n/core/i18n.js.map +1 -0
- package/dist/i18n/core/message.d.ts +8 -0
- package/dist/i18n/core/message.d.ts.map +1 -0
- package/dist/i18n/core/message.js +38 -0
- package/dist/i18n/core/message.js.map +1 -0
- package/dist/i18n/core/negotiate.d.ts +13 -0
- package/dist/i18n/core/negotiate.d.ts.map +1 -0
- package/dist/i18n/core/negotiate.js +46 -0
- package/dist/i18n/core/negotiate.js.map +1 -0
- package/dist/i18n/core/ports.d.ts +35 -0
- package/dist/i18n/core/ports.d.ts.map +1 -0
- package/dist/i18n/core/ports.js +6 -0
- package/dist/i18n/core/ports.js.map +1 -0
- package/dist/i18n/index.d.ts +14 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +18 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/nestjs/i18n.module.d.ts +16 -0
- package/dist/i18n/nestjs/i18n.module.d.ts.map +1 -0
- package/dist/i18n/nestjs/i18n.module.js +17 -0
- package/dist/i18n/nestjs/i18n.module.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/jobs/adapters/in-memory-idempotency.d.ts +9 -0
- package/dist/jobs/adapters/in-memory-idempotency.d.ts.map +1 -0
- package/dist/jobs/adapters/in-memory-idempotency.js +34 -0
- package/dist/jobs/adapters/in-memory-idempotency.js.map +1 -0
- package/dist/jobs/adapters/in-memory-queue-store.d.ts +7 -0
- package/dist/jobs/adapters/in-memory-queue-store.d.ts.map +1 -0
- package/dist/jobs/adapters/in-memory-queue-store.js +70 -0
- package/dist/jobs/adapters/in-memory-queue-store.js.map +1 -0
- package/dist/jobs/adapters/redis-queue-store.d.ts +28 -0
- package/dist/jobs/adapters/redis-queue-store.d.ts.map +1 -0
- package/dist/jobs/adapters/redis-queue-store.js +86 -0
- package/dist/jobs/adapters/redis-queue-store.js.map +1 -0
- package/dist/jobs/core/backoff.d.ts +15 -0
- package/dist/jobs/core/backoff.d.ts.map +1 -0
- package/dist/jobs/core/backoff.js +20 -0
- package/dist/jobs/core/backoff.js.map +1 -0
- package/dist/jobs/core/cron.d.ts +13 -0
- package/dist/jobs/core/cron.d.ts.map +1 -0
- package/dist/jobs/core/cron.js +101 -0
- package/dist/jobs/core/cron.js.map +1 -0
- package/dist/jobs/core/errors.d.ts +18 -0
- package/dist/jobs/core/errors.d.ts.map +1 -0
- package/dist/jobs/core/errors.js +30 -0
- package/dist/jobs/core/errors.js.map +1 -0
- package/dist/jobs/core/ports.d.ts +80 -0
- package/dist/jobs/core/ports.d.ts.map +1 -0
- package/dist/jobs/core/ports.js +6 -0
- package/dist/jobs/core/ports.js.map +1 -0
- package/dist/jobs/core/queue.d.ts +16 -0
- package/dist/jobs/core/queue.d.ts.map +1 -0
- package/dist/jobs/core/queue.js +29 -0
- package/dist/jobs/core/queue.js.map +1 -0
- package/dist/jobs/core/registry.d.ts +4 -0
- package/dist/jobs/core/registry.d.ts.map +1 -0
- package/dist/jobs/core/registry.js +11 -0
- package/dist/jobs/core/registry.js.map +1 -0
- package/dist/jobs/core/scheduler.d.ts +30 -0
- package/dist/jobs/core/scheduler.d.ts.map +1 -0
- package/dist/jobs/core/scheduler.js +53 -0
- package/dist/jobs/core/scheduler.js.map +1 -0
- package/dist/jobs/core/serializer.d.ts +3 -0
- package/dist/jobs/core/serializer.d.ts.map +1 -0
- package/dist/jobs/core/serializer.js +5 -0
- package/dist/jobs/core/serializer.js.map +1 -0
- package/dist/jobs/core/worker.d.ts +28 -0
- package/dist/jobs/core/worker.d.ts.map +1 -0
- package/dist/jobs/core/worker.js +118 -0
- package/dist/jobs/core/worker.js.map +1 -0
- package/dist/jobs/index.d.ts +18 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +23 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/mailer/adapters/dev-inbox.d.ts +17 -0
- package/dist/mailer/adapters/dev-inbox.d.ts.map +1 -0
- package/dist/mailer/adapters/dev-inbox.js +29 -0
- package/dist/mailer/adapters/dev-inbox.js.map +1 -0
- package/dist/mailer/adapters/i18n-renderer.d.ts +13 -0
- package/dist/mailer/adapters/i18n-renderer.d.ts.map +1 -0
- package/dist/mailer/adapters/i18n-renderer.js +27 -0
- package/dist/mailer/adapters/i18n-renderer.js.map +1 -0
- package/dist/mailer/adapters/in-memory-templates.d.ts +6 -0
- package/dist/mailer/adapters/in-memory-templates.d.ts.map +1 -0
- package/dist/mailer/adapters/in-memory-templates.js +6 -0
- package/dist/mailer/adapters/in-memory-templates.js.map +1 -0
- package/dist/mailer/adapters/transports.d.ts +19 -0
- package/dist/mailer/adapters/transports.d.ts.map +1 -0
- package/dist/mailer/adapters/transports.js +38 -0
- package/dist/mailer/adapters/transports.js.map +1 -0
- package/dist/mailer/core/errors.d.ts +23 -0
- package/dist/mailer/core/errors.d.ts.map +1 -0
- package/dist/mailer/core/errors.js +40 -0
- package/dist/mailer/core/errors.js.map +1 -0
- package/dist/mailer/core/failover.d.ts +3 -0
- package/dist/mailer/core/failover.d.ts.map +1 -0
- package/dist/mailer/core/failover.js +30 -0
- package/dist/mailer/core/failover.js.map +1 -0
- package/dist/mailer/core/mailer.d.ts +25 -0
- package/dist/mailer/core/mailer.d.ts.map +1 -0
- package/dist/mailer/core/mailer.js +61 -0
- package/dist/mailer/core/mailer.js.map +1 -0
- package/dist/mailer/core/ports.d.ts +54 -0
- package/dist/mailer/core/ports.d.ts.map +1 -0
- package/dist/mailer/core/ports.js +6 -0
- package/dist/mailer/core/ports.js.map +1 -0
- package/dist/mailer/core/render.d.ts +4 -0
- package/dist/mailer/core/render.d.ts.map +1 -0
- package/dist/mailer/core/render.js +29 -0
- package/dist/mailer/core/render.js.map +1 -0
- package/dist/mailer/index.d.ts +17 -0
- package/dist/mailer/index.d.ts.map +1 -0
- package/dist/mailer/index.js +21 -0
- package/dist/mailer/index.js.map +1 -0
- package/dist/mailer/nestjs/mailer.module.d.ts +17 -0
- package/dist/mailer/nestjs/mailer.module.d.ts.map +1 -0
- package/dist/mailer/nestjs/mailer.module.js +15 -0
- package/dist/mailer/nestjs/mailer.module.js.map +1 -0
- package/dist/observability/core/context.d.ts +9 -0
- package/dist/observability/core/context.d.ts.map +1 -0
- package/dist/observability/core/context.js +15 -0
- package/dist/observability/core/context.js.map +1 -0
- package/dist/observability/core/health.d.ts +40 -0
- package/dist/observability/core/health.d.ts.map +1 -0
- package/dist/observability/core/health.js +51 -0
- package/dist/observability/core/health.js.map +1 -0
- package/dist/observability/core/logger.d.ts +22 -0
- package/dist/observability/core/logger.d.ts.map +1 -0
- package/dist/observability/core/logger.js +45 -0
- package/dist/observability/core/logger.js.map +1 -0
- package/dist/observability/core/metrics.d.ts +63 -0
- package/dist/observability/core/metrics.d.ts.map +1 -0
- package/dist/observability/core/metrics.js +172 -0
- package/dist/observability/core/metrics.js.map +1 -0
- package/dist/observability/core/redaction.d.ts +10 -0
- package/dist/observability/core/redaction.d.ts.map +1 -0
- package/dist/observability/core/redaction.js +48 -0
- package/dist/observability/core/redaction.js.map +1 -0
- package/dist/observability/core/tracing.d.ts +52 -0
- package/dist/observability/core/tracing.d.ts.map +1 -0
- package/dist/observability/core/tracing.js +88 -0
- package/dist/observability/core/tracing.js.map +1 -0
- package/dist/observability/index.d.ts +14 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +19 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/nestjs/observability.module.d.ts +35 -0
- package/dist/observability/nestjs/observability.module.d.ts.map +1 -0
- package/dist/observability/nestjs/observability.module.js +87 -0
- package/dist/observability/nestjs/observability.module.js.map +1 -0
- package/dist/persistence/adapters/in-memory-driver.d.ts +18 -0
- package/dist/persistence/adapters/in-memory-driver.d.ts.map +1 -0
- package/dist/persistence/adapters/in-memory-driver.js +229 -0
- package/dist/persistence/adapters/in-memory-driver.js.map +1 -0
- package/dist/persistence/adapters/pg-driver.d.ts +21 -0
- package/dist/persistence/adapters/pg-driver.d.ts.map +1 -0
- package/dist/persistence/adapters/pg-driver.js +42 -0
- package/dist/persistence/adapters/pg-driver.js.map +1 -0
- package/dist/persistence/adapters/testcontainer-harness.d.ts +37 -0
- package/dist/persistence/adapters/testcontainer-harness.d.ts.map +1 -0
- package/dist/persistence/adapters/testcontainer-harness.js +79 -0
- package/dist/persistence/adapters/testcontainer-harness.js.map +1 -0
- package/dist/persistence/core/errors.d.ts +36 -0
- package/dist/persistence/core/errors.d.ts.map +1 -0
- package/dist/persistence/core/errors.js +58 -0
- package/dist/persistence/core/errors.js.map +1 -0
- package/dist/persistence/core/migrations.d.ts +16 -0
- package/dist/persistence/core/migrations.d.ts.map +1 -0
- package/dist/persistence/core/migrations.js +95 -0
- package/dist/persistence/core/migrations.js.map +1 -0
- package/dist/persistence/core/pool.d.ts +4 -0
- package/dist/persistence/core/pool.d.ts.map +1 -0
- package/dist/persistence/core/pool.js +180 -0
- package/dist/persistence/core/pool.js.map +1 -0
- package/dist/persistence/core/ports.d.ts +91 -0
- package/dist/persistence/core/ports.d.ts.map +1 -0
- package/dist/persistence/core/ports.js +6 -0
- package/dist/persistence/core/ports.js.map +1 -0
- package/dist/persistence/core/repository.d.ts +18 -0
- package/dist/persistence/core/repository.d.ts.map +1 -0
- package/dist/persistence/core/repository.js +113 -0
- package/dist/persistence/core/repository.js.map +1 -0
- package/dist/persistence/core/sql.d.ts +13 -0
- package/dist/persistence/core/sql.d.ts.map +1 -0
- package/dist/persistence/core/sql.js +35 -0
- package/dist/persistence/core/sql.js.map +1 -0
- package/dist/persistence/index.d.ts +14 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +22 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/pg.d.ts +7 -0
- package/dist/persistence/pg.d.ts.map +1 -0
- package/dist/persistence/pg.js +7 -0
- package/dist/persistence/pg.js.map +1 -0
- package/dist/privacy/adapters/audit-sink.d.ts +19 -0
- package/dist/privacy/adapters/audit-sink.d.ts.map +1 -0
- package/dist/privacy/adapters/audit-sink.js +13 -0
- package/dist/privacy/adapters/audit-sink.js.map +1 -0
- package/dist/privacy/adapters/in-memory-consent-store.d.ts +7 -0
- package/dist/privacy/adapters/in-memory-consent-store.d.ts.map +1 -0
- package/dist/privacy/adapters/in-memory-consent-store.js +18 -0
- package/dist/privacy/adapters/in-memory-consent-store.js.map +1 -0
- package/dist/privacy/adapters/pg-consent-store.d.ts +26 -0
- package/dist/privacy/adapters/pg-consent-store.d.ts.map +1 -0
- package/dist/privacy/adapters/pg-consent-store.js +43 -0
- package/dist/privacy/adapters/pg-consent-store.js.map +1 -0
- package/dist/privacy/core/consent.d.ts +35 -0
- package/dist/privacy/core/consent.d.ts.map +1 -0
- package/dist/privacy/core/consent.js +49 -0
- package/dist/privacy/core/consent.js.map +1 -0
- package/dist/privacy/core/erasure.d.ts +22 -0
- package/dist/privacy/core/erasure.d.ts.map +1 -0
- package/dist/privacy/core/erasure.js +35 -0
- package/dist/privacy/core/erasure.js.map +1 -0
- package/dist/privacy/core/errors.d.ts +18 -0
- package/dist/privacy/core/errors.d.ts.map +1 -0
- package/dist/privacy/core/errors.js +30 -0
- package/dist/privacy/core/errors.js.map +1 -0
- package/dist/privacy/core/export.d.ts +20 -0
- package/dist/privacy/core/export.d.ts.map +1 -0
- package/dist/privacy/core/export.js +30 -0
- package/dist/privacy/core/export.js.map +1 -0
- package/dist/privacy/core/ports.d.ts +48 -0
- package/dist/privacy/core/ports.d.ts.map +1 -0
- package/dist/privacy/core/ports.js +6 -0
- package/dist/privacy/core/ports.js.map +1 -0
- package/dist/privacy/core/registry.d.ts +17 -0
- package/dist/privacy/core/registry.d.ts.map +1 -0
- package/dist/privacy/core/registry.js +31 -0
- package/dist/privacy/core/registry.js.map +1 -0
- package/dist/privacy/index.d.ts +16 -0
- package/dist/privacy/index.d.ts.map +1 -0
- package/dist/privacy/index.js +21 -0
- package/dist/privacy/index.js.map +1 -0
- package/dist/rate-limit/adapters/in-memory-store.d.ts +7 -0
- package/dist/rate-limit/adapters/in-memory-store.d.ts.map +1 -0
- package/dist/rate-limit/adapters/in-memory-store.js +50 -0
- package/dist/rate-limit/adapters/in-memory-store.js.map +1 -0
- package/dist/rate-limit/adapters/redis-store.d.ts +11 -0
- package/dist/rate-limit/adapters/redis-store.d.ts.map +1 -0
- package/dist/rate-limit/adapters/redis-store.js +93 -0
- package/dist/rate-limit/adapters/redis-store.js.map +1 -0
- package/dist/rate-limit/core/enforcer.d.ts +23 -0
- package/dist/rate-limit/core/enforcer.d.ts.map +1 -0
- package/dist/rate-limit/core/enforcer.js +27 -0
- package/dist/rate-limit/core/enforcer.js.map +1 -0
- package/dist/rate-limit/core/errors.d.ts +19 -0
- package/dist/rate-limit/core/errors.d.ts.map +1 -0
- package/dist/rate-limit/core/errors.js +32 -0
- package/dist/rate-limit/core/errors.js.map +1 -0
- package/dist/rate-limit/core/ports.d.ts +50 -0
- package/dist/rate-limit/core/ports.d.ts.map +1 -0
- package/dist/rate-limit/core/ports.js +6 -0
- package/dist/rate-limit/core/ports.js.map +1 -0
- package/dist/rate-limit/core/sliding-window.d.ts +9 -0
- package/dist/rate-limit/core/sliding-window.d.ts.map +1 -0
- package/dist/rate-limit/core/sliding-window.js +24 -0
- package/dist/rate-limit/core/sliding-window.js.map +1 -0
- package/dist/rate-limit/core/token-bucket.d.ts +9 -0
- package/dist/rate-limit/core/token-bucket.d.ts.map +1 -0
- package/dist/rate-limit/core/token-bucket.js +24 -0
- package/dist/rate-limit/core/token-bucket.js.map +1 -0
- package/dist/rate-limit/index.d.ts +15 -0
- package/dist/rate-limit/index.d.ts.map +1 -0
- package/dist/rate-limit/index.js +19 -0
- package/dist/rate-limit/index.js.map +1 -0
- package/dist/rate-limit/nestjs/rate-limit.module.d.ts +25 -0
- package/dist/rate-limit/nestjs/rate-limit.module.d.ts.map +1 -0
- package/dist/rate-limit/nestjs/rate-limit.module.js +63 -0
- package/dist/rate-limit/nestjs/rate-limit.module.js.map +1 -0
- package/dist/rate-limit/nodejs/middleware.d.ts +16 -0
- package/dist/rate-limit/nodejs/middleware.d.ts.map +1 -0
- package/dist/rate-limit/nodejs/middleware.js +26 -0
- package/dist/rate-limit/nodejs/middleware.js.map +1 -0
- package/dist/test-kit/adapters/infra-bootstrap.d.ts +40 -0
- package/dist/test-kit/adapters/infra-bootstrap.d.ts.map +1 -0
- package/dist/test-kit/adapters/infra-bootstrap.js +64 -0
- package/dist/test-kit/adapters/infra-bootstrap.js.map +1 -0
- package/dist/test-kit/core/contract.d.ts +49 -0
- package/dist/test-kit/core/contract.d.ts.map +1 -0
- package/dist/test-kit/core/contract.js +52 -0
- package/dist/test-kit/core/contract.js.map +1 -0
- package/dist/test-kit/core/errors.d.ts +12 -0
- package/dist/test-kit/core/errors.d.ts.map +1 -0
- package/dist/test-kit/core/errors.js +19 -0
- package/dist/test-kit/core/errors.js.map +1 -0
- package/dist/test-kit/core/factories.d.ts +24 -0
- package/dist/test-kit/core/factories.d.ts.map +1 -0
- package/dist/test-kit/core/factories.js +57 -0
- package/dist/test-kit/core/factories.js.map +1 -0
- package/dist/test-kit/core/http-client.d.ts +46 -0
- package/dist/test-kit/core/http-client.d.ts.map +1 -0
- package/dist/test-kit/core/http-client.js +63 -0
- package/dist/test-kit/core/http-client.js.map +1 -0
- package/dist/test-kit/index.d.ts +10 -0
- package/dist/test-kit/index.d.ts.map +1 -0
- package/dist/test-kit/index.js +14 -0
- package/dist/test-kit/index.js.map +1 -0
- package/dist/test-kit/infra.d.ts +6 -0
- package/dist/test-kit/infra.d.ts.map +1 -0
- package/dist/test-kit/infra.js +6 -0
- package/dist/test-kit/infra.js.map +1 -0
- package/package.json +170 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orkestreert de volledige config-pijplijn en bindt US-0101 t/m US-0105 samen:
|
|
3
|
+
*
|
|
4
|
+
* 1. Lagen samenstellen: basis + per-omgeving override (US-0105) + extra bronnen + `.env` + env
|
|
5
|
+
* (US-0101, met voorrang env > .env > sources > override > basis).
|
|
6
|
+
* 2. Secret-referenties oplossen en redigeren (US-0102).
|
|
7
|
+
* 3. Valideren tegen het geïnjecteerde schema -> getypt, bevroren object (US-0103).
|
|
8
|
+
* 4. Bij falen: geredigeerd, geaggregeerd foutrapport via de reporter-poort + fail-fast (US-0104).
|
|
9
|
+
*
|
|
10
|
+
* De coercie van scalairen gebeurt in het schema (bv. Zod `z.coerce`), zodat alle type- en
|
|
11
|
+
* validatiefouten in één rapport verzameld worden.
|
|
12
|
+
*/
|
|
13
|
+
import { ConfigValidationError } from './errors.js';
|
|
14
|
+
import { mergeSources, parseDotenv, parseEnv } from './env-loader.js';
|
|
15
|
+
import { deepFreeze } from './freeze.js';
|
|
16
|
+
import { resolveSecrets } from './secret-resolver.js';
|
|
17
|
+
const defaultExit = (code) => process.exit(code);
|
|
18
|
+
/**
|
|
19
|
+
* Laadt, valideert en bevriest de configuratie. Retourneert een volledig getypt, onveranderlijk
|
|
20
|
+
* object. Gooit {@link ConfigValidationError} (of stopt het proces bij `onFailure: 'exit'`) wanneer
|
|
21
|
+
* de effectieve config niet aan het schema voldoet.
|
|
22
|
+
*/
|
|
23
|
+
export async function loadConfig(options) {
|
|
24
|
+
const activeEnvironment = resolveActiveEnvironment(options);
|
|
25
|
+
let raw = composeLayers(options, activeEnvironment);
|
|
26
|
+
if (options.resolver) {
|
|
27
|
+
raw = await resolveSecrets(raw, options.resolver, {
|
|
28
|
+
extraSecretPaths: options.extraSecretPaths ?? [],
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
const result = options.schema.validate(raw);
|
|
32
|
+
if (!result.success) {
|
|
33
|
+
const report = {
|
|
34
|
+
title: options.reportTitle ?? 'Ongeldige configuratie',
|
|
35
|
+
issues: result.issues,
|
|
36
|
+
environment: activeEnvironment,
|
|
37
|
+
};
|
|
38
|
+
options.reporter?.report(report);
|
|
39
|
+
if ((options.onFailure ?? 'throw') === 'exit') {
|
|
40
|
+
(options.exit ?? defaultExit)(1);
|
|
41
|
+
}
|
|
42
|
+
throw new ConfigValidationError(result.issues, activeEnvironment);
|
|
43
|
+
}
|
|
44
|
+
return deepFreeze(result.value);
|
|
45
|
+
}
|
|
46
|
+
function resolveActiveEnvironment(options) {
|
|
47
|
+
if (options.activeEnvironment !== undefined)
|
|
48
|
+
return options.activeEnvironment;
|
|
49
|
+
if (options.environmentKey !== undefined) {
|
|
50
|
+
const source = options.env ?? process.env;
|
|
51
|
+
return source[options.environmentKey];
|
|
52
|
+
}
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
function composeLayers(options, activeEnvironment) {
|
|
56
|
+
const layers = [];
|
|
57
|
+
if (options.base)
|
|
58
|
+
layers.push(options.base);
|
|
59
|
+
if (options.overrides && activeEnvironment !== undefined) {
|
|
60
|
+
const layer = options.overrides[activeEnvironment];
|
|
61
|
+
if (layer !== undefined)
|
|
62
|
+
layers.push(layer);
|
|
63
|
+
}
|
|
64
|
+
if (options.sources)
|
|
65
|
+
layers.push(...options.sources);
|
|
66
|
+
if (options.dotenv !== undefined) {
|
|
67
|
+
layers.push(parseEnv(parseDotenv(options.dotenv), options.envOptions));
|
|
68
|
+
}
|
|
69
|
+
if (options.env !== undefined) {
|
|
70
|
+
layers.push(parseEnv(options.env, options.envOptions));
|
|
71
|
+
}
|
|
72
|
+
return mergeSources(...layers);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=load-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-config.js","sourceRoot":"","sources":["../../../src/config/core/load-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* US-0105 — Per-omgeving overrides.
|
|
3
|
+
*
|
|
4
|
+
* Een basisconfiguratie geldt voor alle omgevingen; een per-omgeving laag (geselecteerd via een
|
|
5
|
+
* omgeving-indicator) overschrijft specifieke keys via een deterministische diepe merge (override
|
|
6
|
+
* wint). De set omgevingen komt uit de geïnjecteerde configuratie; de module kent geen vaste
|
|
7
|
+
* omgevingsnamen.
|
|
8
|
+
*/
|
|
9
|
+
import type { RawConfig } from './ports.js';
|
|
10
|
+
/** Diepe merge van twee ruwe objecten; `override` wint. Arrays en scalars worden vervangen. */
|
|
11
|
+
export declare function deepMerge(base: RawConfig, override: RawConfig): RawConfig;
|
|
12
|
+
/**
|
|
13
|
+
* Bepaalt de effectieve config door de basis samen te voegen met de laag van de actieve omgeving.
|
|
14
|
+
* Onbekende/ontbrekende omgeving (`activeEnvironment` undefined of niet in `overrides`) valt terug
|
|
15
|
+
* op uitsluitend de basisconfig (US-0105 AC2).
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveEnvironmentLayers(base: RawConfig, overrides: Record<string, RawConfig>, activeEnvironment: string | undefined): RawConfig;
|
|
18
|
+
export declare function isPlainObject(value: unknown): value is RawConfig;
|
|
19
|
+
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/config/core/merge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,+FAA+F;AAC/F,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,GAAG,SAAS,CAWzE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EACpC,iBAAiB,EAAE,MAAM,GAAG,SAAS,GACpC,SAAS,CAKX;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAEhE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** Diepe merge van twee ruwe objecten; `override` wint. Arrays en scalars worden vervangen. */
|
|
2
|
+
export function deepMerge(base, override) {
|
|
3
|
+
const out = { ...base };
|
|
4
|
+
for (const [key, value] of Object.entries(override)) {
|
|
5
|
+
const existing = out[key];
|
|
6
|
+
if (isPlainObject(existing) && isPlainObject(value)) {
|
|
7
|
+
out[key] = deepMerge(existing, value);
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
out[key] = value;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return out;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Bepaalt de effectieve config door de basis samen te voegen met de laag van de actieve omgeving.
|
|
17
|
+
* Onbekende/ontbrekende omgeving (`activeEnvironment` undefined of niet in `overrides`) valt terug
|
|
18
|
+
* op uitsluitend de basisconfig (US-0105 AC2).
|
|
19
|
+
*/
|
|
20
|
+
export function resolveEnvironmentLayers(base, overrides, activeEnvironment) {
|
|
21
|
+
if (activeEnvironment === undefined)
|
|
22
|
+
return { ...base };
|
|
23
|
+
const layer = overrides[activeEnvironment];
|
|
24
|
+
if (layer === undefined)
|
|
25
|
+
return { ...base };
|
|
26
|
+
return deepMerge(base, layer);
|
|
27
|
+
}
|
|
28
|
+
export function isPlainObject(value) {
|
|
29
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../../src/config/core/merge.ts"],"names":[],"mappings":"AAUA,+FAA+F;AAC/F,MAAM,UAAU,SAAS,CAAC,IAAe,EAAE,QAAmB;IAC5D,MAAM,GAAG,GAAc,EAAE,GAAG,IAAI,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YACpD,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CACtC,IAAe,EACf,SAAoC,EACpC,iBAAqC;IAErC,IAAI,iBAAiB,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;IACxD,MAAM,KAAK,GAAG,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC3C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;IAC5C,OAAO,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ports (interfaces) waarop de config-kit-core leunt. Het consumerende project levert de adapters.
|
|
3
|
+
* Deze poorten vormen het portabiliteits-contract: de core kent geen concrete implementaties.
|
|
4
|
+
*/
|
|
5
|
+
import type { ConfigIssue } from './errors.js';
|
|
6
|
+
/** Ruw, genest configuratie-object zoals opgeleverd door de env-loader. */
|
|
7
|
+
export type RawConfig = {
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
};
|
|
10
|
+
/** Resultaat van een schemavalidatie. */
|
|
11
|
+
export type ValidationResult<T> = {
|
|
12
|
+
success: true;
|
|
13
|
+
value: T;
|
|
14
|
+
} | {
|
|
15
|
+
success: false;
|
|
16
|
+
issues: ConfigIssue[];
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Config-schema-poort (US-0103). Het consumerende project injecteert een schema; de core roept
|
|
20
|
+
* uitsluitend `validate` aan en leidt het output-type `T` hieruit af. Zie de Zod-adapter voor een
|
|
21
|
+
* kant-en-klare implementatie.
|
|
22
|
+
*/
|
|
23
|
+
export interface ConfigSchema<T> {
|
|
24
|
+
validate(raw: unknown): ValidationResult<T>;
|
|
25
|
+
}
|
|
26
|
+
/** Ontlede secret-referentie, bv. `file:///run/secrets/db` of `vault://kv/data/app#password`. */
|
|
27
|
+
export interface SecretRef {
|
|
28
|
+
/** Het schema-deel, bv. `file`, `vault`, `env`. */
|
|
29
|
+
scheme: string;
|
|
30
|
+
/** Alles na `://`, bv. `/run/secrets/db` of `kv/data/app#password`. */
|
|
31
|
+
location: string;
|
|
32
|
+
/** De volledige oorspronkelijke referentie. */
|
|
33
|
+
raw: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Secret-resolver-poort (US-0102). Lost referenties op tot hun werkelijke waarde. De concrete
|
|
37
|
+
* backend (file, vault, of een adapter van de consumer) is injecteerbaar.
|
|
38
|
+
*/
|
|
39
|
+
export interface SecretResolver {
|
|
40
|
+
/** Kan deze resolver de gegeven referentie oplossen? */
|
|
41
|
+
canResolve(ref: SecretRef): boolean;
|
|
42
|
+
/** Los de referentie op tot een klaartekstwaarde. Mag sync of async zijn. */
|
|
43
|
+
resolve(ref: SecretRef): Promise<string> | string;
|
|
44
|
+
}
|
|
45
|
+
/** Geredigeerd foutrapport dat via de reporter-poort wordt uitgeschreven (US-0104). */
|
|
46
|
+
export interface ConfigReport {
|
|
47
|
+
title: string;
|
|
48
|
+
issues: ConfigIssue[];
|
|
49
|
+
environment?: string | undefined;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Reporter/logger-poort (US-0104). Het consumerende project bepaalt de vorm (stdout, structured
|
|
53
|
+
* log). De core dwingt geen specifieke logger af.
|
|
54
|
+
*/
|
|
55
|
+
export interface Reporter {
|
|
56
|
+
report(report: ConfigReport): void;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=ports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../../src/config/core/ports.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,2EAA2E;AAC3E,MAAM,MAAM,SAAS,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAEnD,yCAAyC;AACzC,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAC1B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GAC3B;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC;AAE9C;;;;GAIG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;CAC7C;AAED,iGAAiG;AACjG,MAAM,WAAW,SAAS;IACxB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC;IACpC,6EAA6E;IAC7E,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CACnD;AAED,uFAAuF;AACvF,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;CACpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../../../src/config/core/ports.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { RawConfig, SecretRef, SecretResolver } from './ports.js';
|
|
2
|
+
/** Ontleedt een string in een {@link SecretRef}, of `null` als het geen referentie is. */
|
|
3
|
+
export declare function parseSecretRef(value: string): SecretRef | null;
|
|
4
|
+
export interface ResolveSecretsOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Extra dotted paden die als secret behandeld moeten worden, ook als de waarde een letterlijke
|
|
7
|
+
* (niet-referentie) string is. Handig voor literals die geredigeerd moeten worden.
|
|
8
|
+
*/
|
|
9
|
+
extraSecretPaths?: string[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Loopt door het ruwe object, lost referenties op via de resolver en wrapt secretwaarden in
|
|
13
|
+
* {@link Secret}. Retourneert een nieuw object; de invoer blijft ongewijzigd.
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolveSecrets(raw: RawConfig, resolver: SecretResolver, options?: ResolveSecretsOptions): Promise<RawConfig>;
|
|
16
|
+
//# sourceMappingURL=secret-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-resolver.d.ts","sourceRoot":"","sources":["../../../src/config/core/secret-resolver.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKvE,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAM9D;AAED,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,SAAS,CAAC,CAGpB"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* US-0102 — Secret-resolutie (file/vault-refs, redactie).
|
|
3
|
+
*
|
|
4
|
+
* Herkent secret-referenties (bv. `file:///run/secrets/db` of `vault://kv/data/app#password`) in
|
|
5
|
+
* het ruwe config-object en lost ze op via de geïnjecteerde {@link SecretResolver}-poort. Opgeloste
|
|
6
|
+
* waarden worden als {@link Secret} gemarkeerd zodat ze consequent geredigeerd worden. Faalt veilig:
|
|
7
|
+
* een resolutiefout benoemt de key en referentie, maar nooit een (deels) opgeloste waarde.
|
|
8
|
+
*/
|
|
9
|
+
import { SecretResolutionError } from './errors.js';
|
|
10
|
+
import { isPlainObject } from './merge.js';
|
|
11
|
+
import { Secret } from './secret.js';
|
|
12
|
+
const REF_PATTERN = /^([a-z][a-z0-9+.-]*):\/\/(.*)$/i;
|
|
13
|
+
/** Ontleedt een string in een {@link SecretRef}, of `null` als het geen referentie is. */
|
|
14
|
+
export function parseSecretRef(value) {
|
|
15
|
+
const match = REF_PATTERN.exec(value);
|
|
16
|
+
if (!match)
|
|
17
|
+
return null;
|
|
18
|
+
const scheme = match[1].toLowerCase();
|
|
19
|
+
const location = match[2];
|
|
20
|
+
return { scheme, location, raw: value };
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Loopt door het ruwe object, lost referenties op via de resolver en wrapt secretwaarden in
|
|
24
|
+
* {@link Secret}. Retourneert een nieuw object; de invoer blijft ongewijzigd.
|
|
25
|
+
*/
|
|
26
|
+
export async function resolveSecrets(raw, resolver, options = {}) {
|
|
27
|
+
const secretPaths = new Set(options.extraSecretPaths ?? []);
|
|
28
|
+
return (await walk(raw, [], resolver, secretPaths));
|
|
29
|
+
}
|
|
30
|
+
async function walk(node, path, resolver, secretPaths) {
|
|
31
|
+
const dotted = path.join('.');
|
|
32
|
+
if (typeof node === 'string') {
|
|
33
|
+
const ref = parseSecretRef(node);
|
|
34
|
+
if (ref) {
|
|
35
|
+
const value = await resolveRef(ref, dotted, resolver);
|
|
36
|
+
return new Secret(value);
|
|
37
|
+
}
|
|
38
|
+
if (secretPaths.has(dotted)) {
|
|
39
|
+
return new Secret(node);
|
|
40
|
+
}
|
|
41
|
+
return node;
|
|
42
|
+
}
|
|
43
|
+
if (Array.isArray(node)) {
|
|
44
|
+
return Promise.all(node.map((item, i) => walk(item, [...path, String(i)], resolver, secretPaths)));
|
|
45
|
+
}
|
|
46
|
+
if (isPlainObject(node)) {
|
|
47
|
+
const out = {};
|
|
48
|
+
for (const [key, value] of Object.entries(node)) {
|
|
49
|
+
out[key] = await walk(value, [...path, key], resolver, secretPaths);
|
|
50
|
+
}
|
|
51
|
+
return out;
|
|
52
|
+
}
|
|
53
|
+
return node;
|
|
54
|
+
}
|
|
55
|
+
async function resolveRef(ref, path, resolver) {
|
|
56
|
+
if (!resolver.canResolve(ref)) {
|
|
57
|
+
throw new SecretResolutionError(path, ref.raw, `geen resolver voor schema "${ref.scheme}"`);
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
return await resolver.resolve(ref);
|
|
61
|
+
}
|
|
62
|
+
catch (cause) {
|
|
63
|
+
// Belangrijk: nooit de (deels) opgeloste waarde of de oorspronkelijke fout-payload lekken.
|
|
64
|
+
const reason = cause instanceof Error ? cause.message : 'onbekende fout';
|
|
65
|
+
throw new SecretResolutionError(path, ref.raw, sanitizeReason(reason, ref));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** Verwijdert de referentie-locatie uit de reden zodat er zeker geen secret-hint in lekt. */
|
|
69
|
+
function sanitizeReason(reason, ref) {
|
|
70
|
+
// Houd de reden kort en generiek; de referentie zelf staat al veilig in de error.
|
|
71
|
+
return reason.replaceAll(ref.location, '<locatie>');
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=secret-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-resolver.js","sourceRoot":"","sources":["../../../src/config/core/secret-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret — een waarde die nooit in klaartekst mag lekken via serialisatie, logging of inspectie.
|
|
3
|
+
*
|
|
4
|
+
* De werkelijke waarde wordt buiten de instance bewaard (module-scoped WeakMap), zodat het object
|
|
5
|
+
* zelf geen enumerable/inspecteerbare property met de secret bevat. `JSON.stringify`, `String()`,
|
|
6
|
+
* `console.log`/`util.inspect` en spreads leveren daardoor consequent de redactiemarker op.
|
|
7
|
+
*/
|
|
8
|
+
declare const REDACTED = "***";
|
|
9
|
+
export declare class Secret {
|
|
10
|
+
constructor(value: string);
|
|
11
|
+
/** Haal de werkelijke secretwaarde op. Alleen bewust aanroepen op het punt van gebruik. */
|
|
12
|
+
reveal(): string;
|
|
13
|
+
/** Redactie bij `JSON.stringify`. */
|
|
14
|
+
toJSON(): string;
|
|
15
|
+
/** Redactie bij string-coercion / template-literals. */
|
|
16
|
+
toString(): string;
|
|
17
|
+
}
|
|
18
|
+
/** Type-guard voor een {@link Secret}. */
|
|
19
|
+
export declare function isSecret(value: unknown): value is Secret;
|
|
20
|
+
export { REDACTED };
|
|
21
|
+
//# sourceMappingURL=secret.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret.d.ts","sourceRoot":"","sources":["../../../src/config/core/secret.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,QAAA,MAAM,QAAQ,QAAQ,CAAC;AAIvB,qBAAa,MAAM;gBACL,KAAK,EAAE,MAAM;IAIzB,2FAA2F;IAC3F,MAAM,IAAI,MAAM;IAQhB,qCAAqC;IACrC,MAAM,IAAI,MAAM;IAIhB,wDAAwD;IACxD,QAAQ,IAAI,MAAM;CAQnB;AAED,0CAA0C;AAC1C,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret — een waarde die nooit in klaartekst mag lekken via serialisatie, logging of inspectie.
|
|
3
|
+
*
|
|
4
|
+
* De werkelijke waarde wordt buiten de instance bewaard (module-scoped WeakMap), zodat het object
|
|
5
|
+
* zelf geen enumerable/inspecteerbare property met de secret bevat. `JSON.stringify`, `String()`,
|
|
6
|
+
* `console.log`/`util.inspect` en spreads leveren daardoor consequent de redactiemarker op.
|
|
7
|
+
*/
|
|
8
|
+
const REDACTED = '***';
|
|
9
|
+
const store = new WeakMap();
|
|
10
|
+
export class Secret {
|
|
11
|
+
constructor(value) {
|
|
12
|
+
store.set(this, value);
|
|
13
|
+
}
|
|
14
|
+
/** Haal de werkelijke secretwaarde op. Alleen bewust aanroepen op het punt van gebruik. */
|
|
15
|
+
reveal() {
|
|
16
|
+
const value = store.get(this);
|
|
17
|
+
if (value === undefined) {
|
|
18
|
+
throw new Error('Secret is niet beschikbaar (mogelijk niet correct geconstrueerd).');
|
|
19
|
+
}
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
/** Redactie bij `JSON.stringify`. */
|
|
23
|
+
toJSON() {
|
|
24
|
+
return REDACTED;
|
|
25
|
+
}
|
|
26
|
+
/** Redactie bij string-coercion / template-literals. */
|
|
27
|
+
toString() {
|
|
28
|
+
return REDACTED;
|
|
29
|
+
}
|
|
30
|
+
/** Redactie bij `util.inspect` / `console.log` (Node). */
|
|
31
|
+
[Symbol.for('nodejs.util.inspect.custom')]() {
|
|
32
|
+
return REDACTED;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** Type-guard voor een {@link Secret}. */
|
|
36
|
+
export function isSecret(value) {
|
|
37
|
+
return value instanceof Secret;
|
|
38
|
+
}
|
|
39
|
+
export { REDACTED };
|
|
40
|
+
//# sourceMappingURL=secret.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret.js","sourceRoot":"","sources":["../../../src/config/core/secret.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,QAAQ,GAAG,KAAK,CAAC;AAEvB,MAAM,KAAK,GAAG,IAAI,OAAO,EAAkB,CAAC;AAE5C,MAAM,OAAO,MAAM;IACjB,YAAY,KAAa;QACvB,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,2FAA2F;IAC3F,MAAM;QACJ,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qCAAqC;IACrC,MAAM;QACJ,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,wDAAwD;IACxD,QAAQ;QACN,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,0DAA0D;IAC1D,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QACxC,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED,0CAA0C;AAC1C,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,KAAK,YAAY,MAAM,CAAC;AACjC,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* webapp-factory/backend-foundation/config — domein-loze, getypte configuratie- en secret-loading met schemavalidatie,
|
|
3
|
+
* fail-fast start en per-omgeving overrides. Pure TypeScript-core + ports/adapters.
|
|
4
|
+
*/
|
|
5
|
+
export type { ConfigSchema, ConfigReport, RawConfig, Reporter, SecretRef, SecretResolver, ValidationResult, } from './core/ports.js';
|
|
6
|
+
export { ConfigKitError, ConfigParseError, ConfigValidationError, SecretResolutionError, type ConfigIssue, } from './core/errors.js';
|
|
7
|
+
export { Secret, isSecret, REDACTED } from './core/secret.js';
|
|
8
|
+
export { parseEnv, parseDotenv, mergeSources, coerceByMap, type ParseEnvOptions, type ScalarKind, type TypeMap, } from './core/env-loader.js';
|
|
9
|
+
export { resolveSecrets, parseSecretRef, type ResolveSecretsOptions, } from './core/secret-resolver.js';
|
|
10
|
+
export { deepMerge, resolveEnvironmentLayers } from './core/merge.js';
|
|
11
|
+
export { deepFreeze } from './core/freeze.js';
|
|
12
|
+
export { loadConfig, type LoadConfigOptions } from './core/load-config.js';
|
|
13
|
+
export { zodSchema, zodSecret } from './adapters/zod-schema.js';
|
|
14
|
+
export { fileSecretResolver, mapSecretResolver, functionSecretResolver, compositeSecretResolver, } from './adapters/secret-resolvers.js';
|
|
15
|
+
export { consoleReporter, collectingReporter, formatReport } from './adapters/reporters.js';
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,SAAS,EACT,cAAc,EACd,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,WAAW,GACjB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG9D,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,WAAW,EACX,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,OAAO,GACb,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,cAAc,EACd,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAGtE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG3E,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* webapp-factory/backend-foundation/config — domein-loze, getypte configuratie- en secret-loading met schemavalidatie,
|
|
3
|
+
* fail-fast start en per-omgeving overrides. Pure TypeScript-core + ports/adapters.
|
|
4
|
+
*/
|
|
5
|
+
// Core: fouten
|
|
6
|
+
export { ConfigKitError, ConfigParseError, ConfigValidationError, SecretResolutionError, } from './core/errors.js';
|
|
7
|
+
// Core: secrets & redactie
|
|
8
|
+
export { Secret, isSecret, REDACTED } from './core/secret.js';
|
|
9
|
+
// Core: env-loading (US-0101)
|
|
10
|
+
export { parseEnv, parseDotenv, mergeSources, coerceByMap, } from './core/env-loader.js';
|
|
11
|
+
// Core: secret-resolutie (US-0102)
|
|
12
|
+
export { resolveSecrets, parseSecretRef, } from './core/secret-resolver.js';
|
|
13
|
+
// Core: per-omgeving overrides (US-0105)
|
|
14
|
+
export { deepMerge, resolveEnvironmentLayers } from './core/merge.js';
|
|
15
|
+
// Core: freeze-util
|
|
16
|
+
export { deepFreeze } from './core/freeze.js';
|
|
17
|
+
// Core: orkestrator (US-0101..US-0105)
|
|
18
|
+
export { loadConfig } from './core/load-config.js';
|
|
19
|
+
// Adapters
|
|
20
|
+
export { zodSchema, zodSecret } from './adapters/zod-schema.js';
|
|
21
|
+
export { fileSecretResolver, mapSecretResolver, functionSecretResolver, compositeSecretResolver, } from './adapters/secret-resolvers.js';
|
|
22
|
+
export { consoleReporter, collectingReporter, formatReport } from './adapters/reporters.js';
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,eAAe;AACf,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,GAEtB,MAAM,kBAAkB,CAAC;AAE1B,2BAA2B;AAC3B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE9D,8BAA8B;AAC9B,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,WAAW,GAIZ,MAAM,sBAAsB,CAAC;AAE9B,mCAAmC;AACnC,OAAO,EACL,cAAc,EACd,cAAc,GAEf,MAAM,2BAA2B,CAAC;AAEnC,yCAAyC;AACzC,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAEtE,oBAAoB;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,uCAAuC;AACvC,OAAO,EAAE,UAAU,EAA0B,MAAM,uBAAuB,CAAC;AAE3E,WAAW;AACX,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dunne NestJS-adapter. Maakt het gevalideerde, bevroren config-object beschikbaar via dependency
|
|
3
|
+
* injection. De Nest-types worden uitsluitend als `import type` gebruikt, zodat config-kit geen
|
|
4
|
+
* harde runtime-afhankelijkheid op `@nestjs/common` heeft (pure core + dunne adapter). `@nestjs/common`
|
|
5
|
+
* is een optionele peer-dependency: alleen nodig als je deze subpath importeert.
|
|
6
|
+
*
|
|
7
|
+
* Gebruik in een Nest-app:
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* @Module({
|
|
11
|
+
* imports: [ConfigKitModule.forRootAsync({ schema, env: process.env })],
|
|
12
|
+
* })
|
|
13
|
+
* export class AppModule {}
|
|
14
|
+
*
|
|
15
|
+
* // elders:
|
|
16
|
+
* constructor(@Inject(CONFIG_KIT) private readonly config: AppConfig) {}
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
import type { DynamicModule, InjectionToken } from '@nestjs/common';
|
|
20
|
+
import { type LoadConfigOptions } from '../core/load-config.js';
|
|
21
|
+
/** DI-token waaronder het config-object wordt geregistreerd. */
|
|
22
|
+
export declare const CONFIG_KIT: unique symbol;
|
|
23
|
+
export interface ConfigKitModuleOptions<T> extends LoadConfigOptions<T> {
|
|
24
|
+
/** Registreer de module globaal (default true), zodat het token overal injecteerbaar is. */
|
|
25
|
+
global?: boolean;
|
|
26
|
+
/** Alternatief DI-token; default {@link CONFIG_KIT}. */
|
|
27
|
+
token?: InjectionToken;
|
|
28
|
+
}
|
|
29
|
+
export declare class ConfigKitModule {
|
|
30
|
+
/**
|
|
31
|
+
* Async root-registratie: laadt en valideert de config bij bootstrap (fail-fast) en levert het
|
|
32
|
+
* bevroren object onder het token. Faalt de validatie, dan verwerpt de provider-factory en stopt
|
|
33
|
+
* de Nest-bootstrap (fail-fast, US-0104).
|
|
34
|
+
*/
|
|
35
|
+
static forRootAsync<T>(options: ConfigKitModuleOptions<T>): DynamicModule;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=config-kit.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-kit.module.d.ts","sourceRoot":"","sources":["../../../src/config/nestjs/config-kit.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAY,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAc,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE5E,gEAAgE;AAChE,eAAO,MAAM,UAAU,eAAkC,CAAC;AAE1D,MAAM,WAAW,sBAAsB,CAAC,CAAC,CAAE,SAAQ,iBAAiB,CAAC,CAAC,CAAC;IACrE,4FAA4F;IAC5F,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wDAAwD;IACxD,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED,qBAAa,eAAe;IAC1B;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,aAAa;CAa1E"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { loadConfig } from '../core/load-config.js';
|
|
2
|
+
/** DI-token waaronder het config-object wordt geregistreerd. */
|
|
3
|
+
export const CONFIG_KIT = Symbol.for('config-kit.config');
|
|
4
|
+
export class ConfigKitModule {
|
|
5
|
+
/**
|
|
6
|
+
* Async root-registratie: laadt en valideert de config bij bootstrap (fail-fast) en levert het
|
|
7
|
+
* bevroren object onder het token. Faalt de validatie, dan verwerpt de provider-factory en stopt
|
|
8
|
+
* de Nest-bootstrap (fail-fast, US-0104).
|
|
9
|
+
*/
|
|
10
|
+
static forRootAsync(options) {
|
|
11
|
+
const token = options.token ?? CONFIG_KIT;
|
|
12
|
+
const provider = {
|
|
13
|
+
provide: token,
|
|
14
|
+
useFactory: () => loadConfig(options),
|
|
15
|
+
};
|
|
16
|
+
return {
|
|
17
|
+
module: ConfigKitModule,
|
|
18
|
+
global: options.global ?? true,
|
|
19
|
+
providers: [provider],
|
|
20
|
+
exports: [token],
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=config-kit.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-kit.module.js","sourceRoot":"","sources":["../../../src/config/nestjs/config-kit.module.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,UAAU,EAA0B,MAAM,wBAAwB,CAAC;AAE5E,gEAAgE;AAChE,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AAS1D,MAAM,OAAO,eAAe;IAC1B;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAI,OAAkC;QACvD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC;QAC1C,MAAM,QAAQ,GAAa;YACzB,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,GAAe,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;SAClD,CAAC;QACF,OAAO;YACL,MAAM,EAAE,eAAe;YACvB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;YAC9B,SAAS,EAAE,CAAC,QAAQ,CAAC;YACrB,OAAO,EAAE,CAAC,KAAK,CAAC;SACjB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod-adapter voor de {@link Schema}-poort (US-0203) met JSON-schema-afleiding voor OpenAPI (US-0206).
|
|
3
|
+
* De validatie-engine is zo vervangbaar zonder de kernel te wijzigen.
|
|
4
|
+
*/
|
|
5
|
+
import { z, type ZodType, type ZodTypeAny } from 'zod';
|
|
6
|
+
import type { JsonSchema, Schema } from '../core/ports.js';
|
|
7
|
+
/** Maakt een {@link Schema} van een Zod-schema. */
|
|
8
|
+
export declare function zodSchema<S extends ZodType>(schema: S): Schema<z.infer<S>>;
|
|
9
|
+
/** Minimale Zod → JSON-schema-conversie voor OpenAPI; onbekende types vallen terug op generiek. */
|
|
10
|
+
export declare function zodToJsonSchema(schema: ZodTypeAny): JsonSchema;
|
|
11
|
+
//# sourceMappingURL=zod-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zod-schema.d.ts","sourceRoot":"","sources":["../../../src/http/adapters/zod-schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,CAAC,EAAE,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,KAAK,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAqB,MAAM,kBAAkB,CAAC;AAE9E,mDAAmD;AACnD,wBAAgB,SAAS,CAAC,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAiB1E;AAED,mGAAmG;AACnG,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAoC9D"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod-adapter voor de {@link Schema}-poort (US-0203) met JSON-schema-afleiding voor OpenAPI (US-0206).
|
|
3
|
+
* De validatie-engine is zo vervangbaar zonder de kernel te wijzigen.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
/** Maakt een {@link Schema} van een Zod-schema. */
|
|
7
|
+
export function zodSchema(schema) {
|
|
8
|
+
return {
|
|
9
|
+
validate(input) {
|
|
10
|
+
const result = schema.safeParse(input);
|
|
11
|
+
if (result.success)
|
|
12
|
+
return { success: true, value: result.data };
|
|
13
|
+
return {
|
|
14
|
+
success: false,
|
|
15
|
+
issues: result.error.issues.map((i) => ({
|
|
16
|
+
path: i.path.length > 0 ? i.path.join('.') : '(root)',
|
|
17
|
+
message: i.message,
|
|
18
|
+
})),
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
jsonSchema() {
|
|
22
|
+
return zodToJsonSchema(schema);
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/** Minimale Zod → JSON-schema-conversie voor OpenAPI; onbekende types vallen terug op generiek. */
|
|
27
|
+
export function zodToJsonSchema(schema) {
|
|
28
|
+
const def = schema._def;
|
|
29
|
+
switch (def['typeName']) {
|
|
30
|
+
case 'ZodString':
|
|
31
|
+
return { type: 'string' };
|
|
32
|
+
case 'ZodNumber':
|
|
33
|
+
return { type: hasIntCheck(def) ? 'integer' : 'number' };
|
|
34
|
+
case 'ZodBoolean':
|
|
35
|
+
return { type: 'boolean' };
|
|
36
|
+
case 'ZodLiteral':
|
|
37
|
+
return { const: def['value'] };
|
|
38
|
+
case 'ZodEnum':
|
|
39
|
+
return { type: 'string', enum: def['values'] };
|
|
40
|
+
case 'ZodArray':
|
|
41
|
+
return { type: 'array', items: zodToJsonSchema(def['type']) };
|
|
42
|
+
case 'ZodObject': {
|
|
43
|
+
const shape = def['shape']();
|
|
44
|
+
const properties = {};
|
|
45
|
+
const required = [];
|
|
46
|
+
for (const [key, value] of Object.entries(shape)) {
|
|
47
|
+
properties[key] = zodToJsonSchema(value);
|
|
48
|
+
if (!isOptional(value))
|
|
49
|
+
required.push(key);
|
|
50
|
+
}
|
|
51
|
+
const out = { type: 'object', properties };
|
|
52
|
+
if (required.length > 0)
|
|
53
|
+
out.required = required;
|
|
54
|
+
return out;
|
|
55
|
+
}
|
|
56
|
+
case 'ZodOptional':
|
|
57
|
+
case 'ZodDefault':
|
|
58
|
+
case 'ZodNullable':
|
|
59
|
+
return zodToJsonSchema(def['innerType']);
|
|
60
|
+
case 'ZodEffects':
|
|
61
|
+
return zodToJsonSchema(def['schema']);
|
|
62
|
+
default:
|
|
63
|
+
return { type: 'object', additionalProperties: true };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function hasIntCheck(def) {
|
|
67
|
+
const checks = def['checks'];
|
|
68
|
+
return Array.isArray(checks) && checks.some((c) => c.kind === 'int');
|
|
69
|
+
}
|
|
70
|
+
function isOptional(schema) {
|
|
71
|
+
const typeName = schema._def.typeName;
|
|
72
|
+
return typeName === 'ZodOptional' || typeName === 'ZodDefault';
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=zod-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zod-schema.js","sourceRoot":"","sources":["../../../src/http/adapters/zod-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { KernelRequest, RequestContext } from './ports.js';
|
|
2
|
+
export interface ContextConfig {
|
|
3
|
+
/** Inkomende/uitgaande correlation-header. Default `x-correlation-id`. */
|
|
4
|
+
correlationHeader?: string;
|
|
5
|
+
/** Uitgaande request-id-header. Default `x-request-id`. */
|
|
6
|
+
requestIdHeader?: string;
|
|
7
|
+
/** Geldig formaat voor een aangeleverde correlation-id. Default: veilig token. */
|
|
8
|
+
correlationPattern?: RegExp;
|
|
9
|
+
/** Id-generator. Default `crypto.randomUUID`. */
|
|
10
|
+
idGenerator?: () => string;
|
|
11
|
+
}
|
|
12
|
+
export interface BuiltContext {
|
|
13
|
+
context: RequestContext;
|
|
14
|
+
/** True als een aangeleverde correlation-header ongeldig was en vervangen is (US-0202 AC3). */
|
|
15
|
+
invalidCorrelation: boolean;
|
|
16
|
+
}
|
|
17
|
+
/** Bouwt de request-context uit de inkomende headers en de configuratie. */
|
|
18
|
+
export declare function buildRequestContext(headers: KernelRequest['headers'], config?: ContextConfig): BuiltContext;
|
|
19
|
+
/** Response-headers voor de context (request-id + correlation-id). */
|
|
20
|
+
export declare function contextHeaders(context: RequestContext, config?: ContextConfig): Record<string, string>;
|
|
21
|
+
/** Draait `fn` met de gegeven context beschikbaar via {@link getRequestContext}. */
|
|
22
|
+
export declare function runWithContext<T>(context: RequestContext, fn: () => T): T;
|
|
23
|
+
/** Haalt de huidige request-context op (undefined buiten een request). */
|
|
24
|
+
export declare function getRequestContext(): RequestContext | undefined;
|
|
25
|
+
//# sourceMappingURL=context.d.ts.map
|