@portaidentity/server 1.7.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/CHANGELOG.md +11 -0
- package/LICENSE +21 -0
- package/README.md +33 -0
- package/dist/applications/cache.d.ts +64 -0
- package/dist/applications/cache.d.ts.map +1 -0
- package/dist/applications/cache.js +161 -0
- package/dist/applications/cache.js.map +1 -0
- package/dist/applications/errors.d.ts +25 -0
- package/dist/applications/errors.d.ts.map +1 -0
- package/dist/applications/errors.js +31 -0
- package/dist/applications/errors.js.map +1 -0
- package/dist/applications/index.d.ts +17 -0
- package/dist/applications/index.d.ts.map +1 -0
- package/dist/applications/index.js +19 -0
- package/dist/applications/index.js.map +1 -0
- package/dist/applications/repository.d.ts +184 -0
- package/dist/applications/repository.d.ts.map +1 -0
- package/dist/applications/repository.js +367 -0
- package/dist/applications/repository.js.map +1 -0
- package/dist/applications/service.d.ts +160 -0
- package/dist/applications/service.d.ts.map +1 -0
- package/dist/applications/service.js +388 -0
- package/dist/applications/service.js.map +1 -0
- package/dist/applications/slugs.d.ts +61 -0
- package/dist/applications/slugs.d.ts.map +1 -0
- package/dist/applications/slugs.js +115 -0
- package/dist/applications/slugs.js.map +1 -0
- package/dist/applications/types.d.ts +129 -0
- package/dist/applications/types.d.ts.map +1 -0
- package/dist/applications/types.js +62 -0
- package/dist/applications/types.js.map +1 -0
- package/dist/auth/csrf.d.ts +71 -0
- package/dist/auth/csrf.d.ts.map +1 -0
- package/dist/auth/csrf.js +112 -0
- package/dist/auth/csrf.js.map +1 -0
- package/dist/auth/email-renderer.d.ts +37 -0
- package/dist/auth/email-renderer.d.ts.map +1 -0
- package/dist/auth/email-renderer.js +116 -0
- package/dist/auth/email-renderer.js.map +1 -0
- package/dist/auth/email-service.d.ts +154 -0
- package/dist/auth/email-service.d.ts.map +1 -0
- package/dist/auth/email-service.js +415 -0
- package/dist/auth/email-service.js.map +1 -0
- package/dist/auth/email-transport.d.ts +65 -0
- package/dist/auth/email-transport.d.ts.map +1 -0
- package/dist/auth/email-transport.js +82 -0
- package/dist/auth/email-transport.js.map +1 -0
- package/dist/auth/i18n.d.ts +81 -0
- package/dist/auth/i18n.d.ts.map +1 -0
- package/dist/auth/i18n.js +395 -0
- package/dist/auth/i18n.js.map +1 -0
- package/dist/auth/index.d.ts +28 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +31 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/interaction-authority.d.ts +39 -0
- package/dist/auth/interaction-authority.d.ts.map +1 -0
- package/dist/auth/interaction-authority.js +30 -0
- package/dist/auth/interaction-authority.js.map +1 -0
- package/dist/auth/magic-link-session.d.ts +81 -0
- package/dist/auth/magic-link-session.d.ts.map +1 -0
- package/dist/auth/magic-link-session.js +183 -0
- package/dist/auth/magic-link-session.js.map +1 -0
- package/dist/auth/rate-limiter.d.ts +143 -0
- package/dist/auth/rate-limiter.d.ts.map +1 -0
- package/dist/auth/rate-limiter.js +220 -0
- package/dist/auth/rate-limiter.js.map +1 -0
- package/dist/auth/recovery-crypto.d.ts +34 -0
- package/dist/auth/recovery-crypto.d.ts.map +1 -0
- package/dist/auth/recovery-crypto.js +103 -0
- package/dist/auth/recovery-crypto.js.map +1 -0
- package/dist/auth/recovery-job-processor.d.ts +24 -0
- package/dist/auth/recovery-job-processor.d.ts.map +1 -0
- package/dist/auth/recovery-job-processor.js +123 -0
- package/dist/auth/recovery-job-processor.js.map +1 -0
- package/dist/auth/recovery-job-repository.d.ts +219 -0
- package/dist/auth/recovery-job-repository.d.ts.map +1 -0
- package/dist/auth/recovery-job-repository.js +340 -0
- package/dist/auth/recovery-job-repository.js.map +1 -0
- package/dist/auth/recovery-service.d.ts +27 -0
- package/dist/auth/recovery-service.d.ts.map +1 -0
- package/dist/auth/recovery-service.js +53 -0
- package/dist/auth/recovery-service.js.map +1 -0
- package/dist/auth/recovery-worker.d.ts +158 -0
- package/dist/auth/recovery-worker.d.ts.map +1 -0
- package/dist/auth/recovery-worker.js +306 -0
- package/dist/auth/recovery-worker.js.map +1 -0
- package/dist/auth/template-engine.d.ts +134 -0
- package/dist/auth/template-engine.d.ts.map +1 -0
- package/dist/auth/template-engine.js +225 -0
- package/dist/auth/template-engine.js.map +1 -0
- package/dist/auth/token-repository.d.ts +238 -0
- package/dist/auth/token-repository.d.ts.map +1 -0
- package/dist/auth/token-repository.js +475 -0
- package/dist/auth/token-repository.js.map +1 -0
- package/dist/auth/tokens.d.ts +45 -0
- package/dist/auth/tokens.d.ts.map +1 -0
- package/dist/auth/tokens.js +51 -0
- package/dist/auth/tokens.js.map +1 -0
- package/dist/cli/bootstrap.d.ts +55 -0
- package/dist/cli/bootstrap.d.ts.map +1 -0
- package/dist/cli/bootstrap.js +90 -0
- package/dist/cli/bootstrap.js.map +1 -0
- package/dist/cli/commands/health.d.ts +20 -0
- package/dist/cli/commands/health.d.ts.map +1 -0
- package/dist/cli/commands/health.js +80 -0
- package/dist/cli/commands/health.js.map +1 -0
- package/dist/cli/commands/init.d.ts +48 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +349 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts +19 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/migrate.js +88 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/commands/seed.d.ts +19 -0
- package/dist/cli/commands/seed.d.ts.map +1 -0
- package/dist/cli/commands/seed.js +71 -0
- package/dist/cli/commands/seed.js.map +1 -0
- package/dist/cli/commands/user-2fa.d.ts +29 -0
- package/dist/cli/commands/user-2fa.d.ts.map +1 -0
- package/dist/cli/commands/user-2fa.js +113 -0
- package/dist/cli/commands/user-2fa.js.map +1 -0
- package/dist/cli/error-handler.d.ts +31 -0
- package/dist/cli/error-handler.d.ts.map +1 -0
- package/dist/cli/error-handler.js +65 -0
- package/dist/cli/error-handler.js.map +1 -0
- package/dist/cli/index.d.ts +48 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +99 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/output.d.ts +94 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +124 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/prompt.d.ts +48 -0
- package/dist/cli/prompt.d.ts.map +1 -0
- package/dist/cli/prompt.js +96 -0
- package/dist/cli/prompt.js.map +1 -0
- package/dist/clients/cache.d.ts +63 -0
- package/dist/clients/cache.d.ts.map +1 -0
- package/dist/clients/cache.js +160 -0
- package/dist/clients/cache.js.map +1 -0
- package/dist/clients/crypto.d.ts +69 -0
- package/dist/clients/crypto.d.ts.map +1 -0
- package/dist/clients/crypto.js +83 -0
- package/dist/clients/crypto.js.map +1 -0
- package/dist/clients/errors.d.ts +27 -0
- package/dist/clients/errors.d.ts.map +1 -0
- package/dist/clients/errors.js +33 -0
- package/dist/clients/errors.js.map +1 -0
- package/dist/clients/index.d.ts +19 -0
- package/dist/clients/index.d.ts.map +1 -0
- package/dist/clients/index.js +23 -0
- package/dist/clients/index.js.map +1 -0
- package/dist/clients/repository.d.ts +161 -0
- package/dist/clients/repository.d.ts.map +1 -0
- package/dist/clients/repository.js +318 -0
- package/dist/clients/repository.js.map +1 -0
- package/dist/clients/resolve-login-methods.d.ts +74 -0
- package/dist/clients/resolve-login-methods.d.ts.map +1 -0
- package/dist/clients/resolve-login-methods.js +68 -0
- package/dist/clients/resolve-login-methods.js.map +1 -0
- package/dist/clients/secret-repository.d.ts +109 -0
- package/dist/clients/secret-repository.d.ts.map +1 -0
- package/dist/clients/secret-repository.js +166 -0
- package/dist/clients/secret-repository.js.map +1 -0
- package/dist/clients/secret-service.d.ts +87 -0
- package/dist/clients/secret-service.d.ts.map +1 -0
- package/dist/clients/secret-service.js +204 -0
- package/dist/clients/secret-service.js.map +1 -0
- package/dist/clients/service.d.ts +158 -0
- package/dist/clients/service.d.ts.map +1 -0
- package/dist/clients/service.js +523 -0
- package/dist/clients/service.js.map +1 -0
- package/dist/clients/types.d.ts +214 -0
- package/dist/clients/types.d.ts.map +1 -0
- package/dist/clients/types.js +77 -0
- package/dist/clients/types.js.map +1 -0
- package/dist/clients/validators.d.ts +87 -0
- package/dist/clients/validators.d.ts.map +1 -0
- package/dist/clients/validators.js +164 -0
- package/dist/clients/validators.js.map +1 -0
- package/dist/config/index.d.ts +23 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +52 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schema.d.ts +35 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +167 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/custom-claims/cache.d.ts +48 -0
- package/dist/custom-claims/cache.d.ts.map +1 -0
- package/dist/custom-claims/cache.js +122 -0
- package/dist/custom-claims/cache.js.map +1 -0
- package/dist/custom-claims/errors.d.ts +25 -0
- package/dist/custom-claims/errors.d.ts.map +1 -0
- package/dist/custom-claims/errors.js +31 -0
- package/dist/custom-claims/errors.js.map +1 -0
- package/dist/custom-claims/index.d.ts +14 -0
- package/dist/custom-claims/index.d.ts.map +1 -0
- package/dist/custom-claims/index.js +17 -0
- package/dist/custom-claims/index.js.map +1 -0
- package/dist/custom-claims/repository.d.ts +147 -0
- package/dist/custom-claims/repository.d.ts.map +1 -0
- package/dist/custom-claims/repository.js +338 -0
- package/dist/custom-claims/repository.js.map +1 -0
- package/dist/custom-claims/service.d.ts +129 -0
- package/dist/custom-claims/service.d.ts.map +1 -0
- package/dist/custom-claims/service.js +296 -0
- package/dist/custom-claims/service.js.map +1 -0
- package/dist/custom-claims/types.d.ts +132 -0
- package/dist/custom-claims/types.d.ts.map +1 -0
- package/dist/custom-claims/types.js +61 -0
- package/dist/custom-claims/types.js.map +1 -0
- package/dist/custom-claims/validators.d.ts +61 -0
- package/dist/custom-claims/validators.d.ts.map +1 -0
- package/dist/custom-claims/validators.js +136 -0
- package/dist/custom-claims/validators.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/admin-permissions.d.ts +147 -0
- package/dist/lib/admin-permissions.d.ts.map +1 -0
- package/dist/lib/admin-permissions.js +261 -0
- package/dist/lib/admin-permissions.js.map +1 -0
- package/dist/lib/audit-log.d.ts +45 -0
- package/dist/lib/audit-log.d.ts.map +1 -0
- package/dist/lib/audit-log.js +79 -0
- package/dist/lib/audit-log.js.map +1 -0
- package/dist/lib/branding-assets.d.ts +47 -0
- package/dist/lib/branding-assets.d.ts.map +1 -0
- package/dist/lib/branding-assets.js +93 -0
- package/dist/lib/branding-assets.js.map +1 -0
- package/dist/lib/bulk-operations.d.ts +54 -0
- package/dist/lib/bulk-operations.d.ts.map +1 -0
- package/dist/lib/bulk-operations.js +201 -0
- package/dist/lib/bulk-operations.js.map +1 -0
- package/dist/lib/cursor.d.ts +110 -0
- package/dist/lib/cursor.d.ts.map +1 -0
- package/dist/lib/cursor.js +115 -0
- package/dist/lib/cursor.js.map +1 -0
- package/dist/lib/data-export.d.ts +67 -0
- package/dist/lib/data-export.d.ts.map +1 -0
- package/dist/lib/data-export.js +272 -0
- package/dist/lib/data-export.js.map +1 -0
- package/dist/lib/data-import-plan.d.ts +50 -0
- package/dist/lib/data-import-plan.d.ts.map +1 -0
- package/dist/lib/data-import-plan.js +235 -0
- package/dist/lib/data-import-plan.js.map +1 -0
- package/dist/lib/data-import.d.ts +276 -0
- package/dist/lib/data-import.d.ts.map +1 -0
- package/dist/lib/data-import.js +1694 -0
- package/dist/lib/data-import.js.map +1 -0
- package/dist/lib/database.d.ts +22 -0
- package/dist/lib/database.d.ts.map +1 -0
- package/dist/lib/database.js +103 -0
- package/dist/lib/database.js.map +1 -0
- package/dist/lib/entity-history.d.ts +52 -0
- package/dist/lib/entity-history.d.ts.map +1 -0
- package/dist/lib/entity-history.js +121 -0
- package/dist/lib/entity-history.js.map +1 -0
- package/dist/lib/etag.d.ts +92 -0
- package/dist/lib/etag.d.ts.map +1 -0
- package/dist/lib/etag.js +155 -0
- package/dist/lib/etag.js.map +1 -0
- package/dist/lib/image-validator.d.ts +44 -0
- package/dist/lib/image-validator.d.ts.map +1 -0
- package/dist/lib/image-validator.js +204 -0
- package/dist/lib/image-validator.js.map +1 -0
- package/dist/lib/logger.d.ts +15 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +84 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/migrator.d.ts +14 -0
- package/dist/lib/migrator.d.ts.map +1 -0
- package/dist/lib/migrator.js +34 -0
- package/dist/lib/migrator.js.map +1 -0
- package/dist/lib/redis.d.ts +5 -0
- package/dist/lib/redis.d.ts.map +1 -0
- package/dist/lib/redis.js +29 -0
- package/dist/lib/redis.js.map +1 -0
- package/dist/lib/runtime-paths.d.ts +38 -0
- package/dist/lib/runtime-paths.d.ts.map +1 -0
- package/dist/lib/runtime-paths.js +50 -0
- package/dist/lib/runtime-paths.js.map +1 -0
- package/dist/lib/session-tracking.d.ts +81 -0
- package/dist/lib/session-tracking.d.ts.map +1 -0
- package/dist/lib/session-tracking.js +145 -0
- package/dist/lib/session-tracking.js.map +1 -0
- package/dist/lib/signing-key-crypto.d.ts +53 -0
- package/dist/lib/signing-key-crypto.d.ts.map +1 -0
- package/dist/lib/signing-key-crypto.js +108 -0
- package/dist/lib/signing-key-crypto.js.map +1 -0
- package/dist/lib/signing-keys.d.ts +141 -0
- package/dist/lib/signing-keys.d.ts.map +1 -0
- package/dist/lib/signing-keys.js +206 -0
- package/dist/lib/signing-keys.js.map +1 -0
- package/dist/lib/stats.d.ts +83 -0
- package/dist/lib/stats.d.ts.map +1 -0
- package/dist/lib/stats.js +187 -0
- package/dist/lib/stats.js.map +1 -0
- package/dist/lib/super-admin-protection.d.ts +69 -0
- package/dist/lib/super-admin-protection.d.ts.map +1 -0
- package/dist/lib/super-admin-protection.js +102 -0
- package/dist/lib/super-admin-protection.js.map +1 -0
- package/dist/lib/system-config.d.ts +79 -0
- package/dist/lib/system-config.d.ts.map +1 -0
- package/dist/lib/system-config.js +159 -0
- package/dist/lib/system-config.js.map +1 -0
- package/dist/middleware/admin-auth.d.ts +100 -0
- package/dist/middleware/admin-auth.d.ts.map +1 -0
- package/dist/middleware/admin-auth.js +241 -0
- package/dist/middleware/admin-auth.js.map +1 -0
- package/dist/middleware/admin-cors.d.ts +41 -0
- package/dist/middleware/admin-cors.d.ts.map +1 -0
- package/dist/middleware/admin-cors.js +83 -0
- package/dist/middleware/admin-cors.js.map +1 -0
- package/dist/middleware/admin-mutation-audit.d.ts +9 -0
- package/dist/middleware/admin-mutation-audit.d.ts.map +1 -0
- package/dist/middleware/admin-mutation-audit.js +76 -0
- package/dist/middleware/admin-mutation-audit.js.map +1 -0
- package/dist/middleware/admin-rate-limiter.d.ts +56 -0
- package/dist/middleware/admin-rate-limiter.d.ts.map +1 -0
- package/dist/middleware/admin-rate-limiter.js +97 -0
- package/dist/middleware/admin-rate-limiter.js.map +1 -0
- package/dist/middleware/client-secret-hash.d.ts +34 -0
- package/dist/middleware/client-secret-hash.d.ts.map +1 -0
- package/dist/middleware/client-secret-hash.js +74 -0
- package/dist/middleware/client-secret-hash.js.map +1 -0
- package/dist/middleware/error-handler.d.ts +3 -0
- package/dist/middleware/error-handler.d.ts.map +1 -0
- package/dist/middleware/error-handler.js +93 -0
- package/dist/middleware/error-handler.js.map +1 -0
- package/dist/middleware/health.d.ts +3 -0
- package/dist/middleware/health.d.ts.map +1 -0
- package/dist/middleware/health.js +35 -0
- package/dist/middleware/health.js.map +1 -0
- package/dist/middleware/metrics.d.ts +40 -0
- package/dist/middleware/metrics.d.ts.map +1 -0
- package/dist/middleware/metrics.js +75 -0
- package/dist/middleware/metrics.js.map +1 -0
- package/dist/middleware/oidc-client-tenant.d.ts +37 -0
- package/dist/middleware/oidc-client-tenant.d.ts.map +1 -0
- package/dist/middleware/oidc-client-tenant.js +156 -0
- package/dist/middleware/oidc-client-tenant.js.map +1 -0
- package/dist/middleware/oidc-cors.d.ts +33 -0
- package/dist/middleware/oidc-cors.d.ts.map +1 -0
- package/dist/middleware/oidc-cors.js +68 -0
- package/dist/middleware/oidc-cors.js.map +1 -0
- package/dist/middleware/oidc-preflight-cors.d.ts +54 -0
- package/dist/middleware/oidc-preflight-cors.d.ts.map +1 -0
- package/dist/middleware/oidc-preflight-cors.js +267 -0
- package/dist/middleware/oidc-preflight-cors.js.map +1 -0
- package/dist/middleware/prompt-login-reset.d.ts +103 -0
- package/dist/middleware/prompt-login-reset.d.ts.map +1 -0
- package/dist/middleware/prompt-login-reset.js +204 -0
- package/dist/middleware/prompt-login-reset.js.map +1 -0
- package/dist/middleware/ready.d.ts +23 -0
- package/dist/middleware/ready.d.ts.map +1 -0
- package/dist/middleware/ready.js +60 -0
- package/dist/middleware/ready.js.map +1 -0
- package/dist/middleware/request-logger.d.ts +27 -0
- package/dist/middleware/request-logger.d.ts.map +1 -0
- package/dist/middleware/request-logger.js +46 -0
- package/dist/middleware/request-logger.js.map +1 -0
- package/dist/middleware/require-permission.d.ts +28 -0
- package/dist/middleware/require-permission.d.ts.map +1 -0
- package/dist/middleware/require-permission.js +63 -0
- package/dist/middleware/require-permission.js.map +1 -0
- package/dist/middleware/require-user-organization.d.ts +18 -0
- package/dist/middleware/require-user-organization.d.ts.map +1 -0
- package/dist/middleware/require-user-organization.js +53 -0
- package/dist/middleware/require-user-organization.js.map +1 -0
- package/dist/middleware/root-page.d.ts +62 -0
- package/dist/middleware/root-page.d.ts.map +1 -0
- package/dist/middleware/root-page.js +134 -0
- package/dist/middleware/root-page.js.map +1 -0
- package/dist/middleware/security-headers.d.ts +98 -0
- package/dist/middleware/security-headers.d.ts.map +1 -0
- package/dist/middleware/security-headers.js +159 -0
- package/dist/middleware/security-headers.js.map +1 -0
- package/dist/middleware/tenant-resolver.d.ts +37 -0
- package/dist/middleware/tenant-resolver.d.ts.map +1 -0
- package/dist/middleware/tenant-resolver.js +71 -0
- package/dist/middleware/tenant-resolver.js.map +1 -0
- package/dist/middleware/token-rate-limiter.d.ts +89 -0
- package/dist/middleware/token-rate-limiter.d.ts.map +1 -0
- package/dist/middleware/token-rate-limiter.js +189 -0
- package/dist/middleware/token-rate-limiter.js.map +1 -0
- package/dist/oidc/account-finder.d.ts +52 -0
- package/dist/oidc/account-finder.d.ts.map +1 -0
- package/dist/oidc/account-finder.js +134 -0
- package/dist/oidc/account-finder.js.map +1 -0
- package/dist/oidc/adapter-factory.d.ts +90 -0
- package/dist/oidc/adapter-factory.d.ts.map +1 -0
- package/dist/oidc/adapter-factory.js +165 -0
- package/dist/oidc/adapter-factory.js.map +1 -0
- package/dist/oidc/configuration.d.ts +155 -0
- package/dist/oidc/configuration.d.ts.map +1 -0
- package/dist/oidc/configuration.js +531 -0
- package/dist/oidc/configuration.js.map +1 -0
- package/dist/oidc/postgres-adapter.d.ts +159 -0
- package/dist/oidc/postgres-adapter.d.ts.map +1 -0
- package/dist/oidc/postgres-adapter.js +222 -0
- package/dist/oidc/postgres-adapter.js.map +1 -0
- package/dist/oidc/protocol-security-observer.d.ts +38 -0
- package/dist/oidc/protocol-security-observer.d.ts.map +1 -0
- package/dist/oidc/protocol-security-observer.js +93 -0
- package/dist/oidc/protocol-security-observer.js.map +1 -0
- package/dist/oidc/provider.d.ts +37 -0
- package/dist/oidc/provider.d.ts.map +1 -0
- package/dist/oidc/provider.js +71 -0
- package/dist/oidc/provider.js.map +1 -0
- package/dist/oidc/redis-adapter.d.ts +140 -0
- package/dist/oidc/redis-adapter.d.ts.map +1 -0
- package/dist/oidc/redis-adapter.js +344 -0
- package/dist/oidc/redis-adapter.js.map +1 -0
- package/dist/organizations/cache.d.ts +60 -0
- package/dist/organizations/cache.d.ts.map +1 -0
- package/dist/organizations/cache.js +157 -0
- package/dist/organizations/cache.js.map +1 -0
- package/dist/organizations/errors.d.ts +25 -0
- package/dist/organizations/errors.d.ts.map +1 -0
- package/dist/organizations/errors.js +31 -0
- package/dist/organizations/errors.js.map +1 -0
- package/dist/organizations/index.d.ts +15 -0
- package/dist/organizations/index.d.ts.map +1 -0
- package/dist/organizations/index.js +15 -0
- package/dist/organizations/index.js.map +1 -0
- package/dist/organizations/repository.d.ts +183 -0
- package/dist/organizations/repository.d.ts.map +1 -0
- package/dist/organizations/repository.js +354 -0
- package/dist/organizations/repository.js.map +1 -0
- package/dist/organizations/service.d.ts +168 -0
- package/dist/organizations/service.d.ts.map +1 -0
- package/dist/organizations/service.js +511 -0
- package/dist/organizations/service.js.map +1 -0
- package/dist/organizations/slugs.d.ts +57 -0
- package/dist/organizations/slugs.d.ts.map +1 -0
- package/dist/organizations/slugs.js +130 -0
- package/dist/organizations/slugs.js.map +1 -0
- package/dist/organizations/types.d.ts +146 -0
- package/dist/organizations/types.d.ts.map +1 -0
- package/dist/organizations/types.js +49 -0
- package/dist/organizations/types.js.map +1 -0
- package/dist/rbac/cache.d.ts +110 -0
- package/dist/rbac/cache.d.ts.map +1 -0
- package/dist/rbac/cache.js +271 -0
- package/dist/rbac/cache.js.map +1 -0
- package/dist/rbac/errors.d.ts +34 -0
- package/dist/rbac/errors.d.ts.map +1 -0
- package/dist/rbac/errors.js +43 -0
- package/dist/rbac/errors.js.map +1 -0
- package/dist/rbac/index.d.ts +17 -0
- package/dist/rbac/index.d.ts.map +1 -0
- package/dist/rbac/index.js +21 -0
- package/dist/rbac/index.js.map +1 -0
- package/dist/rbac/mapping-repository.d.ts +121 -0
- package/dist/rbac/mapping-repository.d.ts.map +1 -0
- package/dist/rbac/mapping-repository.js +224 -0
- package/dist/rbac/mapping-repository.js.map +1 -0
- package/dist/rbac/permission-repository.d.ts +100 -0
- package/dist/rbac/permission-repository.d.ts.map +1 -0
- package/dist/rbac/permission-repository.js +190 -0
- package/dist/rbac/permission-repository.js.map +1 -0
- package/dist/rbac/permission-service.d.ts +85 -0
- package/dist/rbac/permission-service.d.ts.map +1 -0
- package/dist/rbac/permission-service.js +179 -0
- package/dist/rbac/permission-service.js.map +1 -0
- package/dist/rbac/role-repository.d.ts +104 -0
- package/dist/rbac/role-repository.d.ts.map +1 -0
- package/dist/rbac/role-repository.js +202 -0
- package/dist/rbac/role-repository.js.map +1 -0
- package/dist/rbac/role-service.d.ts +111 -0
- package/dist/rbac/role-service.d.ts.map +1 -0
- package/dist/rbac/role-service.js +256 -0
- package/dist/rbac/role-service.js.map +1 -0
- package/dist/rbac/slugs.d.ts +116 -0
- package/dist/rbac/slugs.d.ts.map +1 -0
- package/dist/rbac/slugs.js +178 -0
- package/dist/rbac/slugs.js.map +1 -0
- package/dist/rbac/types.d.ts +187 -0
- package/dist/rbac/types.d.ts.map +1 -0
- package/dist/rbac/types.js +75 -0
- package/dist/rbac/types.js.map +1 -0
- package/dist/rbac/user-role-service.d.ts +101 -0
- package/dist/rbac/user-role-service.d.ts.map +1 -0
- package/dist/rbac/user-role-service.js +166 -0
- package/dist/rbac/user-role-service.js.map +1 -0
- package/dist/routes/applications.d.ts +40 -0
- package/dist/routes/applications.d.ts.map +1 -0
- package/dist/routes/applications.js +284 -0
- package/dist/routes/applications.js.map +1 -0
- package/dist/routes/audit.d.ts +31 -0
- package/dist/routes/audit.d.ts.map +1 -0
- package/dist/routes/audit.js +140 -0
- package/dist/routes/audit.js.map +1 -0
- package/dist/routes/branding.d.ts +17 -0
- package/dist/routes/branding.d.ts.map +1 -0
- package/dist/routes/branding.js +104 -0
- package/dist/routes/branding.js.map +1 -0
- package/dist/routes/bulk.d.ts +37 -0
- package/dist/routes/bulk.d.ts.map +1 -0
- package/dist/routes/bulk.js +94 -0
- package/dist/routes/bulk.js.map +1 -0
- package/dist/routes/clients.d.ts +44 -0
- package/dist/routes/clients.d.ts.map +1 -0
- package/dist/routes/clients.js +353 -0
- package/dist/routes/clients.js.map +1 -0
- package/dist/routes/config.d.ts +35 -0
- package/dist/routes/config.d.ts.map +1 -0
- package/dist/routes/config.js +115 -0
- package/dist/routes/config.js.map +1 -0
- package/dist/routes/custom-claims.d.ts +38 -0
- package/dist/routes/custom-claims.d.ts.map +1 -0
- package/dist/routes/custom-claims.js +208 -0
- package/dist/routes/custom-claims.js.map +1 -0
- package/dist/routes/exports.d.ts +21 -0
- package/dist/routes/exports.d.ts.map +1 -0
- package/dist/routes/exports.js +98 -0
- package/dist/routes/exports.js.map +1 -0
- package/dist/routes/imports.d.ts +18 -0
- package/dist/routes/imports.d.ts.map +1 -0
- package/dist/routes/imports.js +72 -0
- package/dist/routes/imports.js.map +1 -0
- package/dist/routes/interactions.d.ts +111 -0
- package/dist/routes/interactions.d.ts.map +1 -0
- package/dist/routes/interactions.js +1074 -0
- package/dist/routes/interactions.js.map +1 -0
- package/dist/routes/invitation.d.ts +31 -0
- package/dist/routes/invitation.d.ts.map +1 -0
- package/dist/routes/invitation.js +342 -0
- package/dist/routes/invitation.js.map +1 -0
- package/dist/routes/keys.d.ts +28 -0
- package/dist/routes/keys.d.ts.map +1 -0
- package/dist/routes/keys.js +91 -0
- package/dist/routes/keys.js.map +1 -0
- package/dist/routes/magic-link.d.ts +43 -0
- package/dist/routes/magic-link.d.ts.map +1 -0
- package/dist/routes/magic-link.js +264 -0
- package/dist/routes/magic-link.js.map +1 -0
- package/dist/routes/organizations.d.ts +38 -0
- package/dist/routes/organizations.d.ts.map +1 -0
- package/dist/routes/organizations.js +347 -0
- package/dist/routes/organizations.js.map +1 -0
- package/dist/routes/password-reset.d.ts +65 -0
- package/dist/routes/password-reset.d.ts.map +1 -0
- package/dist/routes/password-reset.js +493 -0
- package/dist/routes/password-reset.js.map +1 -0
- package/dist/routes/permissions.d.ts +33 -0
- package/dist/routes/permissions.d.ts.map +1 -0
- package/dist/routes/permissions.js +166 -0
- package/dist/routes/permissions.js.map +1 -0
- package/dist/routes/roles.d.ts +37 -0
- package/dist/routes/roles.d.ts.map +1 -0
- package/dist/routes/roles.js +222 -0
- package/dist/routes/roles.js.map +1 -0
- package/dist/routes/sessions.d.ts +37 -0
- package/dist/routes/sessions.d.ts.map +1 -0
- package/dist/routes/sessions.js +121 -0
- package/dist/routes/sessions.js.map +1 -0
- package/dist/routes/stats.d.ts +28 -0
- package/dist/routes/stats.d.ts.map +1 -0
- package/dist/routes/stats.js +65 -0
- package/dist/routes/stats.js.map +1 -0
- package/dist/routes/two-factor-admin.d.ts +54 -0
- package/dist/routes/two-factor-admin.d.ts.map +1 -0
- package/dist/routes/two-factor-admin.js +344 -0
- package/dist/routes/two-factor-admin.js.map +1 -0
- package/dist/routes/two-factor.d.ts +31 -0
- package/dist/routes/two-factor.d.ts.map +1 -0
- package/dist/routes/two-factor.js +595 -0
- package/dist/routes/two-factor.js.map +1 -0
- package/dist/routes/user-roles.d.ts +33 -0
- package/dist/routes/user-roles.d.ts.map +1 -0
- package/dist/routes/user-roles.js +129 -0
- package/dist/routes/user-roles.js.map +1 -0
- package/dist/routes/users.d.ts +61 -0
- package/dist/routes/users.d.ts.map +1 -0
- package/dist/routes/users.js +868 -0
- package/dist/routes/users.js.map +1 -0
- package/dist/security/decision-context.d.ts +52 -0
- package/dist/security/decision-context.d.ts.map +1 -0
- package/dist/security/decision-context.js +150 -0
- package/dist/security/decision-context.js.map +1 -0
- package/dist/security/decision-event.d.ts +128 -0
- package/dist/security/decision-event.d.ts.map +1 -0
- package/dist/security/decision-event.js +225 -0
- package/dist/security/decision-event.js.map +1 -0
- package/dist/security/transport-decision.d.ts +6 -0
- package/dist/security/transport-decision.d.ts.map +1 -0
- package/dist/security/transport-decision.js +37 -0
- package/dist/security/transport-decision.js.map +1 -0
- package/dist/server.d.ts +50 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +491 -0
- package/dist/server.js.map +1 -0
- package/dist/two-factor/cache.d.ts +47 -0
- package/dist/two-factor/cache.d.ts.map +1 -0
- package/dist/two-factor/cache.js +122 -0
- package/dist/two-factor/cache.js.map +1 -0
- package/dist/two-factor/crypto.d.ts +41 -0
- package/dist/two-factor/crypto.d.ts.map +1 -0
- package/dist/two-factor/crypto.js +94 -0
- package/dist/two-factor/crypto.js.map +1 -0
- package/dist/two-factor/errors.d.ts +82 -0
- package/dist/two-factor/errors.d.ts.map +1 -0
- package/dist/two-factor/errors.js +112 -0
- package/dist/two-factor/errors.js.map +1 -0
- package/dist/two-factor/index.d.ts +18 -0
- package/dist/two-factor/index.d.ts.map +1 -0
- package/dist/two-factor/index.js +25 -0
- package/dist/two-factor/index.js.map +1 -0
- package/dist/two-factor/otp.d.ts +43 -0
- package/dist/two-factor/otp.d.ts.map +1 -0
- package/dist/two-factor/otp.js +57 -0
- package/dist/two-factor/otp.js.map +1 -0
- package/dist/two-factor/recovery.d.ts +45 -0
- package/dist/two-factor/recovery.d.ts.map +1 -0
- package/dist/two-factor/recovery.js +104 -0
- package/dist/two-factor/recovery.js.map +1 -0
- package/dist/two-factor/repository.d.ts +156 -0
- package/dist/two-factor/repository.d.ts.map +1 -0
- package/dist/two-factor/repository.js +251 -0
- package/dist/two-factor/repository.js.map +1 -0
- package/dist/two-factor/service.d.ts +232 -0
- package/dist/two-factor/service.d.ts.map +1 -0
- package/dist/two-factor/service.js +599 -0
- package/dist/two-factor/service.js.map +1 -0
- package/dist/two-factor/totp.d.ts +57 -0
- package/dist/two-factor/totp.d.ts.map +1 -0
- package/dist/two-factor/totp.js +96 -0
- package/dist/two-factor/totp.js.map +1 -0
- package/dist/two-factor/types.d.ts +152 -0
- package/dist/two-factor/types.d.ts.map +1 -0
- package/dist/two-factor/types.js +64 -0
- package/dist/two-factor/types.js.map +1 -0
- package/dist/users/cache.d.ts +49 -0
- package/dist/users/cache.d.ts.map +1 -0
- package/dist/users/cache.js +140 -0
- package/dist/users/cache.js.map +1 -0
- package/dist/users/claims.d.ts +67 -0
- package/dist/users/claims.d.ts.map +1 -0
- package/dist/users/claims.js +104 -0
- package/dist/users/claims.js.map +1 -0
- package/dist/users/errors.d.ts +25 -0
- package/dist/users/errors.d.ts.map +1 -0
- package/dist/users/errors.js +31 -0
- package/dist/users/errors.js.map +1 -0
- package/dist/users/gdpr.d.ts +110 -0
- package/dist/users/gdpr.d.ts.map +1 -0
- package/dist/users/gdpr.js +211 -0
- package/dist/users/gdpr.js.map +1 -0
- package/dist/users/index.d.ts +20 -0
- package/dist/users/index.d.ts.map +1 -0
- package/dist/users/index.js +19 -0
- package/dist/users/index.js.map +1 -0
- package/dist/users/password.d.ts +85 -0
- package/dist/users/password.d.ts.map +1 -0
- package/dist/users/password.js +138 -0
- package/dist/users/password.js.map +1 -0
- package/dist/users/repository.d.ts +263 -0
- package/dist/users/repository.d.ts.map +1 -0
- package/dist/users/repository.js +499 -0
- package/dist/users/repository.js.map +1 -0
- package/dist/users/service.d.ts +299 -0
- package/dist/users/service.d.ts.map +1 -0
- package/dist/users/service.js +698 -0
- package/dist/users/service.js.map +1 -0
- package/dist/users/types.d.ts +220 -0
- package/dist/users/types.d.ts.map +1 -0
- package/dist/users/types.js +77 -0
- package/dist/users/types.js.map +1 -0
- package/locales/default/en/common.json +10 -0
- package/locales/default/en/consent.json +13 -0
- package/locales/default/en/emails.json +17 -0
- package/locales/default/en/errors.json +21 -0
- package/locales/default/en/forgot-password.json +11 -0
- package/locales/default/en/invitation.json +18 -0
- package/locales/default/en/login.json +17 -0
- package/locales/default/en/logout.json +9 -0
- package/locales/default/en/magic-link.json +12 -0
- package/locales/default/en/reset-password.json +16 -0
- package/locales/default/en/two-factor.json +29 -0
- package/migrations/.gitkeep +0 -0
- package/migrations/001_extensions.sql +22 -0
- package/migrations/002_organizations.sql +43 -0
- package/migrations/003_applications.sql +50 -0
- package/migrations/004_clients.sql +74 -0
- package/migrations/005_users.sql +119 -0
- package/migrations/006_roles_permissions.sql +80 -0
- package/migrations/007_custom_claims.sql +55 -0
- package/migrations/008_config.sql +51 -0
- package/migrations/009_audit_log.sql +31 -0
- package/migrations/010_oidc_adapter.sql +34 -0
- package/migrations/011_seed.sql +53 -0
- package/migrations/012_two_factor.sql +88 -0
- package/migrations/013_client_secret_sha256.sql +22 -0
- package/migrations/014_login_methods.sql +34 -0
- package/migrations/015_signing_key_encryption.sql +20 -0
- package/migrations/016_failed_login_count.sql +27 -0
- package/migrations/017_audit_retention.sql +11 -0
- package/migrations/018_admin_api_enhancements.sql +78 -0
- package/migrations/019_invitation_details.sql +27 -0
- package/migrations/020_two_factor_admin_permission.sql +108 -0
- package/migrations/021_auth_recovery_jobs.sql +74 -0
- package/migrations/022_recovery_artifact_ownership.sql +25 -0
- package/migrations/023_magic_link_authority.sql +39 -0
- package/package.json +106 -0
- package/templates/default/emails/invitation.hbs +39 -0
- package/templates/default/emails/invitation.txt.hbs +18 -0
- package/templates/default/emails/magic-link.hbs +30 -0
- package/templates/default/emails/magic-link.txt.hbs +11 -0
- package/templates/default/emails/otp-code.hbs +31 -0
- package/templates/default/emails/otp-code.txt.hbs +15 -0
- package/templates/default/emails/password-changed.hbs +24 -0
- package/templates/default/emails/password-changed.txt.hbs +7 -0
- package/templates/default/emails/password-reset.hbs +30 -0
- package/templates/default/emails/password-reset.txt.hbs +11 -0
- package/templates/default/emails/welcome.hbs +25 -0
- package/templates/default/emails/welcome.txt.hbs +9 -0
- package/templates/default/layouts/main.hbs +49 -0
- package/templates/default/pages/accept-invite.hbs +25 -0
- package/templates/default/pages/consent.hbs +27 -0
- package/templates/default/pages/error.hbs +15 -0
- package/templates/default/pages/forgot-password.hbs +21 -0
- package/templates/default/pages/invite-expired.hbs +6 -0
- package/templates/default/pages/invite-success.hbs +9 -0
- package/templates/default/pages/login.hbs +108 -0
- package/templates/default/pages/logout-success.hbs +5 -0
- package/templates/default/pages/logout.hbs +24 -0
- package/templates/default/pages/magic-link-sent.hbs +10 -0
- package/templates/default/pages/magic-link-success.hbs +17 -0
- package/templates/default/pages/reset-password.hbs +20 -0
- package/templates/default/pages/reset-success.hbs +9 -0
- package/templates/default/pages/two-factor-setup.hbs +65 -0
- package/templates/default/pages/two-factor-verify.hbs +77 -0
- package/templates/default/partials/flash-messages.hbs +10 -0
- package/templates/default/partials/footer.hbs +4 -0
- package/templates/default/partials/header.hbs +8 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client types, interfaces, and row mapping functions.
|
|
3
|
+
*
|
|
4
|
+
* Defines the shape of OIDC client registrations and their secrets.
|
|
5
|
+
* Clients are scoped to an organization + application pair and represent
|
|
6
|
+
* deployment targets (web, mobile, SPA).
|
|
7
|
+
*
|
|
8
|
+
* Row mapping functions convert snake_case DB rows to camelCase domain
|
|
9
|
+
* objects. Array columns (TEXT[]) from PostgreSQL are handled directly —
|
|
10
|
+
* pg returns them as JavaScript arrays.
|
|
11
|
+
*/
|
|
12
|
+
/** Client type — confidential (has secret) or public (no secret) */
|
|
13
|
+
export type ClientType = 'confidential' | 'public';
|
|
14
|
+
/** Application type — how the client is deployed */
|
|
15
|
+
export type ApplicationType = 'web' | 'native' | 'spa';
|
|
16
|
+
/** Client status values */
|
|
17
|
+
export type ClientStatus = 'active' | 'inactive' | 'revoked';
|
|
18
|
+
/** Secret status values */
|
|
19
|
+
export type SecretStatus = 'active' | 'revoked';
|
|
20
|
+
/**
|
|
21
|
+
* Supported login methods.
|
|
22
|
+
*
|
|
23
|
+
* This is an extensible union — future methods (e.g., `'sso'`, `'passkey'`)
|
|
24
|
+
* can be added here. The set of currently valid values is mirrored in
|
|
25
|
+
* {@link LOGIN_METHODS} for runtime validation.
|
|
26
|
+
*/
|
|
27
|
+
export type LoginMethod = 'password' | 'magic_link';
|
|
28
|
+
/**
|
|
29
|
+
* Runtime list of all currently valid {@link LoginMethod} values.
|
|
30
|
+
*
|
|
31
|
+
* Used by validation helpers in the organizations / clients service layers
|
|
32
|
+
* and by the CLI flag parser to validate user-supplied input.
|
|
33
|
+
*/
|
|
34
|
+
export declare const LOGIN_METHODS: readonly LoginMethod[];
|
|
35
|
+
/** Full client record (camelCase) */
|
|
36
|
+
export interface Client {
|
|
37
|
+
id: string;
|
|
38
|
+
organizationId: string;
|
|
39
|
+
applicationId: string;
|
|
40
|
+
clientId: string;
|
|
41
|
+
clientName: string;
|
|
42
|
+
clientType: ClientType;
|
|
43
|
+
applicationType: ApplicationType;
|
|
44
|
+
redirectUris: string[];
|
|
45
|
+
postLogoutRedirectUris: string[];
|
|
46
|
+
grantTypes: string[];
|
|
47
|
+
responseTypes: string[];
|
|
48
|
+
scope: string;
|
|
49
|
+
tokenEndpointAuthMethod: string;
|
|
50
|
+
allowedOrigins: string[];
|
|
51
|
+
requirePkce: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Per-client login-method override.
|
|
54
|
+
* - `null` → inherit from the organization's `defaultLoginMethods`
|
|
55
|
+
* - non-empty array → use these methods exclusively
|
|
56
|
+
*
|
|
57
|
+
* An empty array is never persisted (rejected by the service layer). The
|
|
58
|
+
* {@link ./resolve-login-methods.ts | resolveLoginMethods} helper combines
|
|
59
|
+
* this with the org default to produce the effective methods for render
|
|
60
|
+
* and enforcement.
|
|
61
|
+
*/
|
|
62
|
+
loginMethods: LoginMethod[] | null;
|
|
63
|
+
status: ClientStatus;
|
|
64
|
+
createdAt: Date;
|
|
65
|
+
updatedAt: Date;
|
|
66
|
+
}
|
|
67
|
+
/** Client secret record (camelCase) — secret_hash is NEVER exposed via this type */
|
|
68
|
+
export interface ClientSecret {
|
|
69
|
+
id: string;
|
|
70
|
+
clientId: string;
|
|
71
|
+
label: string | null;
|
|
72
|
+
expiresAt: Date | null;
|
|
73
|
+
status: SecretStatus;
|
|
74
|
+
lastUsedAt: Date | null;
|
|
75
|
+
createdAt: Date;
|
|
76
|
+
}
|
|
77
|
+
/** Returned only once at secret creation time */
|
|
78
|
+
export interface SecretWithPlaintext {
|
|
79
|
+
id: string;
|
|
80
|
+
clientId: string;
|
|
81
|
+
label: string | null;
|
|
82
|
+
plaintext: string;
|
|
83
|
+
expiresAt: Date | null;
|
|
84
|
+
createdAt: Date;
|
|
85
|
+
}
|
|
86
|
+
/** Returned when creating a confidential client */
|
|
87
|
+
export interface ClientWithSecret {
|
|
88
|
+
client: Client;
|
|
89
|
+
secret: SecretWithPlaintext | null;
|
|
90
|
+
}
|
|
91
|
+
/** Input for creating a new client */
|
|
92
|
+
export interface CreateClientInput {
|
|
93
|
+
organizationId: string;
|
|
94
|
+
applicationId: string;
|
|
95
|
+
clientName: string;
|
|
96
|
+
clientType: ClientType;
|
|
97
|
+
applicationType: ApplicationType;
|
|
98
|
+
redirectUris: string[];
|
|
99
|
+
postLogoutRedirectUris?: string[];
|
|
100
|
+
grantTypes?: string[];
|
|
101
|
+
responseTypes?: string[];
|
|
102
|
+
scope?: string;
|
|
103
|
+
tokenEndpointAuthMethod?: string;
|
|
104
|
+
allowedOrigins?: string[];
|
|
105
|
+
requirePkce?: boolean;
|
|
106
|
+
secretLabel?: string;
|
|
107
|
+
/**
|
|
108
|
+
* Optional per-client login-method override set at creation time.
|
|
109
|
+
* - omitted → field persists as `null` (inherit from org default)
|
|
110
|
+
* - explicit `null` → same as omitted (inherit)
|
|
111
|
+
* - non-empty array → use these methods exclusively
|
|
112
|
+
*
|
|
113
|
+
* The service layer validates and normalizes the value. Empty arrays are
|
|
114
|
+
* rejected; an empty array means "no login possible" and is never valid.
|
|
115
|
+
*/
|
|
116
|
+
loginMethods?: LoginMethod[] | null;
|
|
117
|
+
}
|
|
118
|
+
/** Input for updating a client (partial) */
|
|
119
|
+
export interface UpdateClientInput {
|
|
120
|
+
clientName?: string;
|
|
121
|
+
redirectUris?: string[];
|
|
122
|
+
postLogoutRedirectUris?: string[];
|
|
123
|
+
grantTypes?: string[];
|
|
124
|
+
responseTypes?: string[];
|
|
125
|
+
scope?: string;
|
|
126
|
+
tokenEndpointAuthMethod?: string;
|
|
127
|
+
allowedOrigins?: string[];
|
|
128
|
+
requirePkce?: boolean;
|
|
129
|
+
/**
|
|
130
|
+
* Per-client login-method override. Three-state input:
|
|
131
|
+
* - `undefined` → leave the current value alone (partial update)
|
|
132
|
+
* - `null` → clear any existing override (revert to inheriting org default)
|
|
133
|
+
* - non-empty array → replace with these methods
|
|
134
|
+
*
|
|
135
|
+
* Empty arrays are rejected by the service validator.
|
|
136
|
+
*/
|
|
137
|
+
loginMethods?: LoginMethod[] | null;
|
|
138
|
+
}
|
|
139
|
+
/** Input for creating a secret */
|
|
140
|
+
export interface CreateSecretInput {
|
|
141
|
+
label?: string;
|
|
142
|
+
expiresAt?: Date;
|
|
143
|
+
}
|
|
144
|
+
/** Options for listing clients */
|
|
145
|
+
export interface ListClientsOptions {
|
|
146
|
+
page: number;
|
|
147
|
+
pageSize: number;
|
|
148
|
+
organizationId?: string;
|
|
149
|
+
applicationId?: string;
|
|
150
|
+
status?: ClientStatus;
|
|
151
|
+
search?: string;
|
|
152
|
+
sortBy?: 'client_name' | 'created_at';
|
|
153
|
+
sortOrder?: 'asc' | 'desc';
|
|
154
|
+
}
|
|
155
|
+
/** Paginated result (reusable generic) */
|
|
156
|
+
export interface PaginatedResult<T> {
|
|
157
|
+
data: T[];
|
|
158
|
+
total: number;
|
|
159
|
+
page: number;
|
|
160
|
+
pageSize: number;
|
|
161
|
+
totalPages: number;
|
|
162
|
+
}
|
|
163
|
+
/** Raw row from the clients table */
|
|
164
|
+
export interface ClientRow {
|
|
165
|
+
id: string;
|
|
166
|
+
organization_id: string;
|
|
167
|
+
application_id: string;
|
|
168
|
+
client_id: string;
|
|
169
|
+
client_name: string;
|
|
170
|
+
client_type: string;
|
|
171
|
+
application_type: string;
|
|
172
|
+
redirect_uris: string[];
|
|
173
|
+
post_logout_redirect_uris: string[];
|
|
174
|
+
grant_types: string[];
|
|
175
|
+
response_types: string[];
|
|
176
|
+
scope: string;
|
|
177
|
+
token_endpoint_auth_method: string;
|
|
178
|
+
allowed_origins: string[];
|
|
179
|
+
require_pkce: boolean;
|
|
180
|
+
/**
|
|
181
|
+
* Nullable TEXT[] column. `null` means "inherit org default".
|
|
182
|
+
* Stored as-is by pg; the domain mapper preserves the null sentinel.
|
|
183
|
+
*/
|
|
184
|
+
login_methods: string[] | null;
|
|
185
|
+
status: string;
|
|
186
|
+
created_at: Date;
|
|
187
|
+
updated_at: Date;
|
|
188
|
+
}
|
|
189
|
+
/** Raw row from the client_secrets table */
|
|
190
|
+
export interface ClientSecretRow {
|
|
191
|
+
id: string;
|
|
192
|
+
client_id: string;
|
|
193
|
+
secret_hash: string;
|
|
194
|
+
label: string | null;
|
|
195
|
+
expires_at: Date | null;
|
|
196
|
+
status: string;
|
|
197
|
+
last_used_at: Date | null;
|
|
198
|
+
created_at: Date;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Map a snake_case client row to a camelCase Client object.
|
|
202
|
+
*
|
|
203
|
+
* Array columns (redirect_uris, grant_types, etc.) are returned as
|
|
204
|
+
* JavaScript arrays by the pg driver — no parsing needed.
|
|
205
|
+
*/
|
|
206
|
+
export declare function mapRowToClient(row: ClientRow): Client;
|
|
207
|
+
/**
|
|
208
|
+
* Map a snake_case client_secrets row to a camelCase ClientSecret object.
|
|
209
|
+
*
|
|
210
|
+
* IMPORTANT: The secret_hash field is intentionally excluded from the
|
|
211
|
+
* mapped output. Secret hashes should never leave the repository layer.
|
|
212
|
+
*/
|
|
213
|
+
export declare function mapRowToClientSecret(row: ClientSecretRow): ClientSecret;
|
|
214
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/clients/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client types, interfaces, and row mapping functions.
|
|
3
|
+
*
|
|
4
|
+
* Defines the shape of OIDC client registrations and their secrets.
|
|
5
|
+
* Clients are scoped to an organization + application pair and represent
|
|
6
|
+
* deployment targets (web, mobile, SPA).
|
|
7
|
+
*
|
|
8
|
+
* Row mapping functions convert snake_case DB rows to camelCase domain
|
|
9
|
+
* objects. Array columns (TEXT[]) from PostgreSQL are handled directly —
|
|
10
|
+
* pg returns them as JavaScript arrays.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Runtime list of all currently valid {@link LoginMethod} values.
|
|
14
|
+
*
|
|
15
|
+
* Used by validation helpers in the organizations / clients service layers
|
|
16
|
+
* and by the CLI flag parser to validate user-supplied input.
|
|
17
|
+
*/
|
|
18
|
+
export const LOGIN_METHODS = [
|
|
19
|
+
'password',
|
|
20
|
+
'magic_link',
|
|
21
|
+
];
|
|
22
|
+
// ===========================================================================
|
|
23
|
+
// Row mapping functions
|
|
24
|
+
// ===========================================================================
|
|
25
|
+
/**
|
|
26
|
+
* Map a snake_case client row to a camelCase Client object.
|
|
27
|
+
*
|
|
28
|
+
* Array columns (redirect_uris, grant_types, etc.) are returned as
|
|
29
|
+
* JavaScript arrays by the pg driver — no parsing needed.
|
|
30
|
+
*/
|
|
31
|
+
export function mapRowToClient(row) {
|
|
32
|
+
return {
|
|
33
|
+
id: row.id,
|
|
34
|
+
organizationId: row.organization_id,
|
|
35
|
+
applicationId: row.application_id,
|
|
36
|
+
clientId: row.client_id,
|
|
37
|
+
clientName: row.client_name,
|
|
38
|
+
clientType: row.client_type,
|
|
39
|
+
applicationType: row.application_type,
|
|
40
|
+
redirectUris: row.redirect_uris ?? [],
|
|
41
|
+
postLogoutRedirectUris: row.post_logout_redirect_uris ?? [],
|
|
42
|
+
grantTypes: row.grant_types ?? [],
|
|
43
|
+
responseTypes: row.response_types ?? [],
|
|
44
|
+
scope: row.scope,
|
|
45
|
+
tokenEndpointAuthMethod: row.token_endpoint_auth_method,
|
|
46
|
+
allowedOrigins: row.allowed_origins ?? [],
|
|
47
|
+
requirePkce: row.require_pkce,
|
|
48
|
+
// Preserve the null sentinel — null means "inherit org default".
|
|
49
|
+
// When non-null, the DB column is a TEXT[] of valid LoginMethod values
|
|
50
|
+
// (enforced by the service-layer validator on write). Cast is safe because
|
|
51
|
+
// writes are funneled through that validator.
|
|
52
|
+
loginMethods: row.login_methods === null
|
|
53
|
+
? null
|
|
54
|
+
: row.login_methods,
|
|
55
|
+
status: row.status,
|
|
56
|
+
createdAt: row.created_at,
|
|
57
|
+
updatedAt: row.updated_at,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Map a snake_case client_secrets row to a camelCase ClientSecret object.
|
|
62
|
+
*
|
|
63
|
+
* IMPORTANT: The secret_hash field is intentionally excluded from the
|
|
64
|
+
* mapped output. Secret hashes should never leave the repository layer.
|
|
65
|
+
*/
|
|
66
|
+
export function mapRowToClientSecret(row) {
|
|
67
|
+
return {
|
|
68
|
+
id: row.id,
|
|
69
|
+
clientId: row.client_id,
|
|
70
|
+
label: row.label,
|
|
71
|
+
expiresAt: row.expires_at,
|
|
72
|
+
status: row.status,
|
|
73
|
+
lastUsedAt: row.last_used_at,
|
|
74
|
+
createdAt: row.created_at,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/clients/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA2BH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,UAAU;IACV,YAAY;CACJ,CAAC;AAkMX,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,GAAc;IAC3C,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,cAAc,EAAE,GAAG,CAAC,eAAe;QACnC,aAAa,EAAE,GAAG,CAAC,cAAc;QACjC,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,UAAU,EAAE,GAAG,CAAC,WAAyB;QACzC,eAAe,EAAE,GAAG,CAAC,gBAAmC;QACxD,YAAY,EAAE,GAAG,CAAC,aAAa,IAAI,EAAE;QACrC,sBAAsB,EAAE,GAAG,CAAC,yBAAyB,IAAI,EAAE;QAC3D,UAAU,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE;QACjC,aAAa,EAAE,GAAG,CAAC,cAAc,IAAI,EAAE;QACvC,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,uBAAuB,EAAE,GAAG,CAAC,0BAA0B;QACvD,cAAc,EAAE,GAAG,CAAC,eAAe,IAAI,EAAE;QACzC,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,iEAAiE;QACjE,uEAAuE;QACvE,2EAA2E;QAC3E,8CAA8C;QAC9C,YAAY,EAAE,GAAG,CAAC,aAAa,KAAK,IAAI;YACtC,CAAC,CAAC,IAAI;YACN,CAAC,CAAE,GAAG,CAAC,aAA+B;QACxC,MAAM,EAAE,GAAG,CAAC,MAAsB;QAClC,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC;AAGD;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAoB;IACvD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,MAAM,EAAE,GAAG,CAAC,MAAsB;QAClC,UAAU,EAAE,GAAG,CAAC,YAAY;QAC5B,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client validators — redirect URI validation and default grant type logic.
|
|
3
|
+
*
|
|
4
|
+
* Redirect URI validation follows OIDC/OAuth 2.0 security best practices:
|
|
5
|
+
* - HTTPS required in production (localhost exempted for development)
|
|
6
|
+
* - No fragment components (#) allowed
|
|
7
|
+
* - No wildcards in path or query
|
|
8
|
+
* - Custom URI schemes allowed for native apps
|
|
9
|
+
*
|
|
10
|
+
* Default grant types and auth methods are determined by the combination
|
|
11
|
+
* of client type (confidential/public) and application type (web/spa/native).
|
|
12
|
+
*/
|
|
13
|
+
import type { ClientType, ApplicationType } from './types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Validate a single redirect URI according to OIDC security rules.
|
|
16
|
+
*
|
|
17
|
+
* Rules:
|
|
18
|
+
* 1. Must be a parseable URL
|
|
19
|
+
* 2. HTTPS required in production (except localhost)
|
|
20
|
+
* 3. No fragment components (#)
|
|
21
|
+
* 4. No wildcards (* in path or query)
|
|
22
|
+
* 5. Custom URI schemes allowed for native apps (e.g., com.example.app:/callback)
|
|
23
|
+
*
|
|
24
|
+
* @param uri - The redirect URI to validate
|
|
25
|
+
* @param isProduction - Whether to enforce HTTPS (true in production)
|
|
26
|
+
* @returns Validation result with optional error message
|
|
27
|
+
*/
|
|
28
|
+
export declare function validateRedirectUri(uri: string, isProduction: boolean): {
|
|
29
|
+
isValid: boolean;
|
|
30
|
+
error?: string;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Validate an array of redirect URIs.
|
|
34
|
+
*
|
|
35
|
+
* Checks each URI individually and enforces a maximum count.
|
|
36
|
+
*
|
|
37
|
+
* @param uris - Array of redirect URIs to validate
|
|
38
|
+
* @param isProduction - Whether to enforce HTTPS
|
|
39
|
+
* @param max - Maximum allowed URIs (default: 10)
|
|
40
|
+
* @returns Validation result with optional array of errors
|
|
41
|
+
*/
|
|
42
|
+
export declare function validateRedirectUris(uris: string[], isProduction: boolean, max?: number): {
|
|
43
|
+
isValid: boolean;
|
|
44
|
+
errors?: string[];
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Get default grant types based on client type and application type.
|
|
48
|
+
*
|
|
49
|
+
* | ClientType | AppType | Default Grants |
|
|
50
|
+
* |--------------|---------|-------------------------------------------------------|
|
|
51
|
+
* | confidential | web | authorization_code, refresh_token, client_credentials |
|
|
52
|
+
* | confidential | native | authorization_code, refresh_token |
|
|
53
|
+
* | confidential | spa | authorization_code, refresh_token |
|
|
54
|
+
* | public | spa | authorization_code, refresh_token |
|
|
55
|
+
* | public | native | authorization_code, refresh_token |
|
|
56
|
+
* | public | web | authorization_code, refresh_token |
|
|
57
|
+
*
|
|
58
|
+
* @param clientType - The client type (confidential or public)
|
|
59
|
+
* @param applicationType - The application deployment type
|
|
60
|
+
* @returns Array of default grant type strings
|
|
61
|
+
*/
|
|
62
|
+
export declare function getDefaultGrantTypes(clientType: ClientType, applicationType: ApplicationType): string[];
|
|
63
|
+
/**
|
|
64
|
+
* Get default token endpoint authentication method based on client type.
|
|
65
|
+
*
|
|
66
|
+
* - confidential → 'client_secret_basic' (sends credentials in Authorization header)
|
|
67
|
+
* - public → 'none' (public clients cannot authenticate at token endpoint)
|
|
68
|
+
*
|
|
69
|
+
* @param clientType - The client type
|
|
70
|
+
* @returns Token endpoint auth method string
|
|
71
|
+
*/
|
|
72
|
+
export declare function getDefaultTokenEndpointAuthMethod(clientType: ClientType): string;
|
|
73
|
+
/**
|
|
74
|
+
* Get default response types.
|
|
75
|
+
* All clients default to ['code'] (authorization code flow).
|
|
76
|
+
*
|
|
77
|
+
* @returns Array of default response type strings
|
|
78
|
+
*/
|
|
79
|
+
export declare function getDefaultResponseTypes(): string[];
|
|
80
|
+
/**
|
|
81
|
+
* Get default scope.
|
|
82
|
+
* All clients default to 'openid profile email'.
|
|
83
|
+
*
|
|
84
|
+
* @returns Default scope string
|
|
85
|
+
*/
|
|
86
|
+
export declare function getDefaultScope(): string;
|
|
87
|
+
//# sourceMappingURL=validators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/clients/validators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAS9D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,OAAO,GACpB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA+CtC;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EAAE,EACd,YAAY,EAAE,OAAO,EACrB,GAAG,GAAE,MAAkC,GACtC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAyBzC;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,eAAe,GAC/B,MAAM,EAAE,CAQV;AAED;;;;;;;;GAQG;AACH,wBAAgB,iCAAiC,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAEhF;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAElD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client validators — redirect URI validation and default grant type logic.
|
|
3
|
+
*
|
|
4
|
+
* Redirect URI validation follows OIDC/OAuth 2.0 security best practices:
|
|
5
|
+
* - HTTPS required in production (localhost exempted for development)
|
|
6
|
+
* - No fragment components (#) allowed
|
|
7
|
+
* - No wildcards in path or query
|
|
8
|
+
* - Custom URI schemes allowed for native apps
|
|
9
|
+
*
|
|
10
|
+
* Default grant types and auth methods are determined by the combination
|
|
11
|
+
* of client type (confidential/public) and application type (web/spa/native).
|
|
12
|
+
*/
|
|
13
|
+
// ===========================================================================
|
|
14
|
+
// Redirect URI Validation
|
|
15
|
+
// ===========================================================================
|
|
16
|
+
/** Maximum redirect URIs allowed per client */
|
|
17
|
+
const DEFAULT_MAX_REDIRECT_URIS = 10;
|
|
18
|
+
/**
|
|
19
|
+
* Validate a single redirect URI according to OIDC security rules.
|
|
20
|
+
*
|
|
21
|
+
* Rules:
|
|
22
|
+
* 1. Must be a parseable URL
|
|
23
|
+
* 2. HTTPS required in production (except localhost)
|
|
24
|
+
* 3. No fragment components (#)
|
|
25
|
+
* 4. No wildcards (* in path or query)
|
|
26
|
+
* 5. Custom URI schemes allowed for native apps (e.g., com.example.app:/callback)
|
|
27
|
+
*
|
|
28
|
+
* @param uri - The redirect URI to validate
|
|
29
|
+
* @param isProduction - Whether to enforce HTTPS (true in production)
|
|
30
|
+
* @returns Validation result with optional error message
|
|
31
|
+
*/
|
|
32
|
+
export function validateRedirectUri(uri, isProduction) {
|
|
33
|
+
// Empty URI check
|
|
34
|
+
if (!uri || uri.trim().length === 0) {
|
|
35
|
+
return { isValid: false, error: 'Redirect URI cannot be empty' };
|
|
36
|
+
}
|
|
37
|
+
// Try to parse the URI
|
|
38
|
+
let parsed;
|
|
39
|
+
try {
|
|
40
|
+
parsed = new URL(uri);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// Could be a custom scheme for native apps (e.g., com.example.app:/callback)
|
|
44
|
+
// Custom schemes won't parse with URL constructor if they don't use //
|
|
45
|
+
if (/^[a-z][a-z0-9+.-]*:/.test(uri) && !uri.startsWith('http')) {
|
|
46
|
+
// Allow custom schemes — they're valid for native apps
|
|
47
|
+
// Still check for fragments
|
|
48
|
+
if (uri.includes('#')) {
|
|
49
|
+
return { isValid: false, error: 'Redirect URI must not contain a fragment (#)' };
|
|
50
|
+
}
|
|
51
|
+
return { isValid: true };
|
|
52
|
+
}
|
|
53
|
+
return { isValid: false, error: `Invalid URI: ${uri}` };
|
|
54
|
+
}
|
|
55
|
+
// No fragments allowed
|
|
56
|
+
if (parsed.hash) {
|
|
57
|
+
return { isValid: false, error: 'Redirect URI must not contain a fragment (#)' };
|
|
58
|
+
}
|
|
59
|
+
// No wildcards in path or query
|
|
60
|
+
if (parsed.pathname.includes('*') || parsed.search.includes('*')) {
|
|
61
|
+
return { isValid: false, error: 'Redirect URI must not contain wildcards (*)' };
|
|
62
|
+
}
|
|
63
|
+
// HTTPS required in production (except localhost)
|
|
64
|
+
if (isProduction) {
|
|
65
|
+
const isLocalhost = parsed.hostname === 'localhost' || parsed.hostname === '127.0.0.1';
|
|
66
|
+
if (parsed.protocol !== 'https:' && !isLocalhost) {
|
|
67
|
+
return {
|
|
68
|
+
isValid: false,
|
|
69
|
+
error: 'Redirect URI must use HTTPS in production (except localhost)',
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return { isValid: true };
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Validate an array of redirect URIs.
|
|
77
|
+
*
|
|
78
|
+
* Checks each URI individually and enforces a maximum count.
|
|
79
|
+
*
|
|
80
|
+
* @param uris - Array of redirect URIs to validate
|
|
81
|
+
* @param isProduction - Whether to enforce HTTPS
|
|
82
|
+
* @param max - Maximum allowed URIs (default: 10)
|
|
83
|
+
* @returns Validation result with optional array of errors
|
|
84
|
+
*/
|
|
85
|
+
export function validateRedirectUris(uris, isProduction, max = DEFAULT_MAX_REDIRECT_URIS) {
|
|
86
|
+
if (uris.length === 0) {
|
|
87
|
+
return { isValid: false, errors: ['At least one redirect URI is required'] };
|
|
88
|
+
}
|
|
89
|
+
if (uris.length > max) {
|
|
90
|
+
return {
|
|
91
|
+
isValid: false,
|
|
92
|
+
errors: [`Maximum ${max} redirect URIs allowed, got ${uris.length}`],
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
const errors = [];
|
|
96
|
+
for (const uri of uris) {
|
|
97
|
+
const result = validateRedirectUri(uri, isProduction);
|
|
98
|
+
if (!result.isValid) {
|
|
99
|
+
errors.push(result.error);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (errors.length > 0) {
|
|
103
|
+
return { isValid: false, errors };
|
|
104
|
+
}
|
|
105
|
+
return { isValid: true };
|
|
106
|
+
}
|
|
107
|
+
// ===========================================================================
|
|
108
|
+
// Default Grant Types
|
|
109
|
+
// ===========================================================================
|
|
110
|
+
/**
|
|
111
|
+
* Get default grant types based on client type and application type.
|
|
112
|
+
*
|
|
113
|
+
* | ClientType | AppType | Default Grants |
|
|
114
|
+
* |--------------|---------|-------------------------------------------------------|
|
|
115
|
+
* | confidential | web | authorization_code, refresh_token, client_credentials |
|
|
116
|
+
* | confidential | native | authorization_code, refresh_token |
|
|
117
|
+
* | confidential | spa | authorization_code, refresh_token |
|
|
118
|
+
* | public | spa | authorization_code, refresh_token |
|
|
119
|
+
* | public | native | authorization_code, refresh_token |
|
|
120
|
+
* | public | web | authorization_code, refresh_token |
|
|
121
|
+
*
|
|
122
|
+
* @param clientType - The client type (confidential or public)
|
|
123
|
+
* @param applicationType - The application deployment type
|
|
124
|
+
* @returns Array of default grant type strings
|
|
125
|
+
*/
|
|
126
|
+
export function getDefaultGrantTypes(clientType, applicationType) {
|
|
127
|
+
// Confidential web clients get client_credentials in addition to auth code
|
|
128
|
+
if (clientType === 'confidential' && applicationType === 'web') {
|
|
129
|
+
return ['authorization_code', 'refresh_token', 'client_credentials'];
|
|
130
|
+
}
|
|
131
|
+
// All other combinations: authorization_code + refresh_token
|
|
132
|
+
return ['authorization_code', 'refresh_token'];
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get default token endpoint authentication method based on client type.
|
|
136
|
+
*
|
|
137
|
+
* - confidential → 'client_secret_basic' (sends credentials in Authorization header)
|
|
138
|
+
* - public → 'none' (public clients cannot authenticate at token endpoint)
|
|
139
|
+
*
|
|
140
|
+
* @param clientType - The client type
|
|
141
|
+
* @returns Token endpoint auth method string
|
|
142
|
+
*/
|
|
143
|
+
export function getDefaultTokenEndpointAuthMethod(clientType) {
|
|
144
|
+
return clientType === 'confidential' ? 'client_secret_basic' : 'none';
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get default response types.
|
|
148
|
+
* All clients default to ['code'] (authorization code flow).
|
|
149
|
+
*
|
|
150
|
+
* @returns Array of default response type strings
|
|
151
|
+
*/
|
|
152
|
+
export function getDefaultResponseTypes() {
|
|
153
|
+
return ['code'];
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get default scope.
|
|
157
|
+
* All clients default to 'openid profile email'.
|
|
158
|
+
*
|
|
159
|
+
* @returns Default scope string
|
|
160
|
+
*/
|
|
161
|
+
export function getDefaultScope() {
|
|
162
|
+
return 'openid profile email';
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/clients/validators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,+CAA+C;AAC/C,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAErC;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,mBAAmB,CACjC,GAAW,EACX,YAAqB;IAErB,kBAAkB;IAClB,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC;IACnE,CAAC;IAED,uBAAuB;IACvB,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,6EAA6E;QAC7E,uEAAuE;QACvE,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/D,uDAAuD;YACvD,4BAA4B;YAC5B,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,8CAA8C,EAAE,CAAC;YACnF,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,GAAG,EAAE,EAAE,CAAC;IAC1D,CAAC;IAED,uBAAuB;IACvB,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,8CAA8C,EAAE,CAAC;IACnF,CAAC;IAED,gCAAgC;IAChC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACjE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,6CAA6C,EAAE,CAAC;IAClF,CAAC;IAED,kDAAkD;IAClD,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,WAAW,GACf,MAAM,CAAC,QAAQ,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC;QACrE,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;YACjD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,8DAA8D;aACtE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAc,EACd,YAAqB,EACrB,GAAG,GAAW,yBAAyB;IAEvC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,uCAAuC,CAAC,EAAE,CAAC;IAC/E,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACtB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,CAAC,WAAW,GAAG,+BAA+B,IAAI,CAAC,MAAM,EAAE,CAAC;SACrE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAM,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACpC,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAsB,EACtB,eAAgC;IAEhC,2EAA2E;IAC3E,IAAI,UAAU,KAAK,cAAc,IAAI,eAAe,KAAK,KAAK,EAAE,CAAC;QAC/D,OAAO,CAAC,oBAAoB,EAAE,eAAe,EAAE,oBAAoB,CAAC,CAAC;IACvE,CAAC;IAED,6DAA6D;IAC7D,OAAO,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iCAAiC,CAAC,UAAsB;IACtE,OAAO,UAAU,KAAK,cAAc,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC;AACxE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,sBAAsB,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const config: {
|
|
2
|
+
nodeEnv: "development" | "production" | "test";
|
|
3
|
+
port: number;
|
|
4
|
+
host: string;
|
|
5
|
+
databaseUrl: string;
|
|
6
|
+
redisUrl: string;
|
|
7
|
+
issuerBaseUrl: string;
|
|
8
|
+
cookieKeys: string[];
|
|
9
|
+
smtp: {
|
|
10
|
+
host: string;
|
|
11
|
+
port: number;
|
|
12
|
+
user?: string | undefined;
|
|
13
|
+
pass?: string | undefined;
|
|
14
|
+
from: string;
|
|
15
|
+
};
|
|
16
|
+
logLevel: "debug" | "error" | "fatal" | "info" | "warn";
|
|
17
|
+
trustProxy: boolean;
|
|
18
|
+
twoFactorEncryptionKey?: string | undefined;
|
|
19
|
+
signingKeyEncryptionKey: string;
|
|
20
|
+
adminCorsOrigins: string[];
|
|
21
|
+
metricsEnabled: boolean;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AA6DA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;CAAe,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import dotenv from 'dotenv';
|
|
2
|
+
import { logger } from '../lib/logger.js';
|
|
3
|
+
import { configSchema } from './schema.js';
|
|
4
|
+
dotenv.config();
|
|
5
|
+
function loadConfig() {
|
|
6
|
+
// Log a loud warning when the production safety escape hatch is active.
|
|
7
|
+
// This runs before parsing so the message always appears, even if config
|
|
8
|
+
// is otherwise invalid. The escape hatch exists for incident response only.
|
|
9
|
+
if (process.env.NODE_ENV === 'production' &&
|
|
10
|
+
process.env.PORTA_SKIP_PROD_SAFETY === 'true') {
|
|
11
|
+
logger.error({ event: 'config.safety_skipped' }, 'PORTA_SKIP_PROD_SAFETY=true — production safety checks bypassed');
|
|
12
|
+
}
|
|
13
|
+
const result = configSchema.safeParse({
|
|
14
|
+
nodeEnv: process.env.NODE_ENV,
|
|
15
|
+
port: process.env.PORT,
|
|
16
|
+
host: process.env.HOST,
|
|
17
|
+
databaseUrl: process.env.DATABASE_URL,
|
|
18
|
+
redisUrl: process.env.REDIS_URL,
|
|
19
|
+
issuerBaseUrl: process.env.ISSUER_BASE_URL,
|
|
20
|
+
// COOKIE_KEYS is a comma-separated list of secrets for OIDC cookie signing.
|
|
21
|
+
// Supports key rotation: first key signs, subsequent keys verify old cookies.
|
|
22
|
+
cookieKeys: process.env.COOKIE_KEYS?.split(',') ?? [],
|
|
23
|
+
smtp: {
|
|
24
|
+
host: process.env.SMTP_HOST,
|
|
25
|
+
port: process.env.SMTP_PORT,
|
|
26
|
+
user: process.env.SMTP_USER,
|
|
27
|
+
pass: process.env.SMTP_PASS,
|
|
28
|
+
from: process.env.SMTP_FROM,
|
|
29
|
+
},
|
|
30
|
+
logLevel: process.env.LOG_LEVEL,
|
|
31
|
+
trustProxy: process.env.TRUST_PROXY,
|
|
32
|
+
twoFactorEncryptionKey: process.env.TWO_FACTOR_ENCRYPTION_KEY,
|
|
33
|
+
signingKeyEncryptionKey: process.env.SIGNING_KEY_ENCRYPTION_KEY,
|
|
34
|
+
// ADMIN_CORS_ORIGINS is a comma-separated list of allowed origins for the admin API.
|
|
35
|
+
// Empty or unset = deny all cross-origin requests (secure default).
|
|
36
|
+
adminCorsOrigins: process.env.ADMIN_CORS_ORIGINS
|
|
37
|
+
? process.env.ADMIN_CORS_ORIGINS.split(',').map((s) => s.trim()).filter(Boolean)
|
|
38
|
+
: [],
|
|
39
|
+
metricsEnabled: process.env.METRICS_ENABLED,
|
|
40
|
+
});
|
|
41
|
+
if (!result.success) {
|
|
42
|
+
// Log each validation issue on its own line for clear operator diagnosis.
|
|
43
|
+
logger.fatal({ event: 'config.invalid' }, '❌ Invalid configuration — refusing to start');
|
|
44
|
+
for (const issue of result.error.issues) {
|
|
45
|
+
logger.fatal(` ${issue.path.join('.')}: ${issue.message}`);
|
|
46
|
+
}
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
return result.data;
|
|
50
|
+
}
|
|
51
|
+
export const config = loadConfig();
|
|
52
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAkB,MAAM,aAAa,CAAC;AAE3D,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,SAAS,UAAU;IACjB,wEAAwE;IACxE,yEAAyE;IACzE,4EAA4E;IAC5E,IACE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;QACrC,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,MAAM,EAC7C,CAAC;QACD,MAAM,CAAC,KAAK,CACV,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAClC,iEAAiE,CAClE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC;QACpC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;QAC7B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI;QACtB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI;QACtB,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACrC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;QAC/B,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;QAC1C,4EAA4E;QAC5E,8EAA8E;QAC9E,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE;QACrD,IAAI,EAAE;YACJ,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;YAC3B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;YAC3B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;YAC3B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;YAC3B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;SAC5B;QACD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;QAC/B,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;QACnC,sBAAsB,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB;QAC7D,uBAAuB,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B;QAC/D,qFAAqF;QACrF,oEAAoE;QACpE,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;YAC9C,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YAChF,CAAC,CAAC,EAAE;QACN,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;KAC5C,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,0EAA0E;QAC1E,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,6CAA6C,CAAC,CAAC;QACzF,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACxC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC"}
|