@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,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Account finder for node-oidc-provider.
|
|
3
|
+
*
|
|
4
|
+
* Maps user records from the database to OIDC account objects with a
|
|
5
|
+
* claims() method. The provider calls findAccount when it needs user
|
|
6
|
+
* information for ID tokens, userinfo endpoint responses, etc.
|
|
7
|
+
*
|
|
8
|
+
* This implementation delegates to the user service for lookup and
|
|
9
|
+
* the claims builder for scope-based claims mapping. The user must
|
|
10
|
+
* be active to be returned — non-active users get undefined (no account).
|
|
11
|
+
*
|
|
12
|
+
* Claims flow:
|
|
13
|
+
* 1. buildUserClaims(user, scopes) → standard OIDC claims (sub, name, email...)
|
|
14
|
+
* 2. buildRoleClaims(userId) → role slugs array (cache-first)
|
|
15
|
+
* 3. buildPermissionClaims(userId) → permission slugs array (cache-first)
|
|
16
|
+
* 4. buildCustomClaims(userId, appId, tokenType) → custom per-app claims
|
|
17
|
+
*
|
|
18
|
+
* The applicationId for custom claims is resolved from the OIDC client
|
|
19
|
+
* context. If unavailable (e.g., no client context), custom claims are
|
|
20
|
+
* skipped gracefully.
|
|
21
|
+
*
|
|
22
|
+
* @see users/service.ts — User lookup for OIDC
|
|
23
|
+
* @see users/claims.ts — Standard OIDC claims builder
|
|
24
|
+
* @see rbac/user-role-service.ts — RBAC claims builders
|
|
25
|
+
* @see custom-claims/service.ts — Custom claims builder
|
|
26
|
+
*/
|
|
27
|
+
import { findUserForOidc } from '../users/service.js';
|
|
28
|
+
import { buildUserClaims } from '../users/claims.js';
|
|
29
|
+
import { buildRoleClaims, buildPermissionClaims } from '../rbac/user-role-service.js';
|
|
30
|
+
import { buildCustomClaims } from '../custom-claims/service.js';
|
|
31
|
+
import { logger } from '../lib/logger.js';
|
|
32
|
+
/**
|
|
33
|
+
* Find an OIDC account by subject identifier (user ID).
|
|
34
|
+
*
|
|
35
|
+
* Delegates to the user service's findUserForOidc which returns
|
|
36
|
+
* active users only. Returns an account object with a claims() method
|
|
37
|
+
* that builds scope-filtered OIDC Standard Claims merged with RBAC
|
|
38
|
+
* role/permission claims and per-application custom claims.
|
|
39
|
+
*
|
|
40
|
+
* @param ctx - Koa context with OIDC extensions (used to resolve client/app context)
|
|
41
|
+
* @param sub - The subject identifier (user UUID)
|
|
42
|
+
* @returns Account object with claims() method, or undefined if not found
|
|
43
|
+
*/
|
|
44
|
+
export async function findAccount(ctx, sub) {
|
|
45
|
+
try {
|
|
46
|
+
const user = await findUserForOidc(sub);
|
|
47
|
+
if (!user)
|
|
48
|
+
return undefined;
|
|
49
|
+
return {
|
|
50
|
+
accountId: user.id,
|
|
51
|
+
/**
|
|
52
|
+
* Return claims for the user including standard OIDC claims,
|
|
53
|
+
* RBAC roles/permissions, and per-application custom claims.
|
|
54
|
+
*
|
|
55
|
+
* Standard claims are filtered by scopes (OpenID Connect Core §5.4).
|
|
56
|
+
* RBAC claims (roles, permissions) are always included as arrays.
|
|
57
|
+
* Custom claims are filtered by token type inclusion flags.
|
|
58
|
+
*/
|
|
59
|
+
async claims(use, scope) {
|
|
60
|
+
// Parse space-separated scope string into array
|
|
61
|
+
const scopes = scope ? scope.split(' ') : [];
|
|
62
|
+
// 1. Standard OIDC claims (scope-filtered)
|
|
63
|
+
const standardClaims = buildUserClaims(user, scopes);
|
|
64
|
+
// 2. RBAC claims (always included — cache-first resolution)
|
|
65
|
+
const [roles, permissions] = await Promise.all([
|
|
66
|
+
buildRoleClaims(user.id),
|
|
67
|
+
buildPermissionClaims(user.id),
|
|
68
|
+
]);
|
|
69
|
+
// 3. Custom claims (per-application, filtered by token type)
|
|
70
|
+
// Resolve applicationId from the OIDC client context if available
|
|
71
|
+
const applicationId = resolveApplicationId(ctx);
|
|
72
|
+
let customClaims = {};
|
|
73
|
+
if (applicationId) {
|
|
74
|
+
// Map OIDC 'use' parameter to our TokenType
|
|
75
|
+
const tokenType = mapUseToTokenType(use);
|
|
76
|
+
customClaims = await buildCustomClaims(user.id, applicationId, tokenType);
|
|
77
|
+
}
|
|
78
|
+
// Merge all claims — standard first, then RBAC arrays, then custom
|
|
79
|
+
return {
|
|
80
|
+
...standardClaims,
|
|
81
|
+
roles,
|
|
82
|
+
permissions,
|
|
83
|
+
...customClaims,
|
|
84
|
+
};
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
logger.error({ sub, error }, 'Failed to look up OIDC account');
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Resolve the applicationId from the OIDC context.
|
|
95
|
+
*
|
|
96
|
+
* The OIDC provider passes the Koa context which includes the client
|
|
97
|
+
* object at ctx.oidc.client. The client has an applicationId stored
|
|
98
|
+
* in its metadata. Returns null if the context doesn't have the
|
|
99
|
+
* expected structure (graceful fallback).
|
|
100
|
+
*
|
|
101
|
+
* @param ctx - Koa context with OIDC extensions
|
|
102
|
+
* @returns Application UUID or null if not resolvable
|
|
103
|
+
*/
|
|
104
|
+
function resolveApplicationId(ctx) {
|
|
105
|
+
try {
|
|
106
|
+
// Navigate the OIDC context structure: ctx.oidc.client.applicationId
|
|
107
|
+
const oidcCtx = ctx;
|
|
108
|
+
return oidcCtx?.oidc?.client?.applicationId ?? null;
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Map the OIDC 'use' parameter to our TokenType enum.
|
|
116
|
+
*
|
|
117
|
+
* The OIDC provider passes 'id_token', 'userinfo', or occasionally
|
|
118
|
+
* other values. We map them to our TokenType for custom claims filtering.
|
|
119
|
+
*
|
|
120
|
+
* @param use - Token type from OIDC provider
|
|
121
|
+
* @returns Mapped TokenType
|
|
122
|
+
*/
|
|
123
|
+
function mapUseToTokenType(use) {
|
|
124
|
+
switch (use) {
|
|
125
|
+
case 'id_token':
|
|
126
|
+
return 'id_token';
|
|
127
|
+
case 'userinfo':
|
|
128
|
+
return 'userinfo';
|
|
129
|
+
default:
|
|
130
|
+
// Default to access_token for introspection and other uses
|
|
131
|
+
return 'access_token';
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=account-finder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-finder.js","sourceRoot":"","sources":["../../src/oidc/account-finder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAgB1C;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,GAAY,EACZ,GAAW;IAEX,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAE5B,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,EAAE;YAClB;;;;;;;eAOG;YACH,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,KAAa;gBACrC,gDAAgD;gBAChD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAE7C,2CAA2C;gBAC3C,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAErD,4DAA4D;gBAC5D,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBAC7C,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxB,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;iBAC/B,CAAC,CAAC;gBAEH,6DAA6D;gBAC7D,kEAAkE;gBAClE,MAAM,aAAa,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;gBAChD,IAAI,YAAY,GAA4B,EAAE,CAAC;gBAC/C,IAAI,aAAa,EAAE,CAAC;oBAClB,4CAA4C;oBAC5C,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;oBACzC,YAAY,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;gBAC5E,CAAC;gBAED,mEAAmE;gBACnE,OAAO;oBACL,GAAG,cAAc;oBACjB,KAAK;oBACL,WAAW;oBACX,GAAG,YAAY;iBAChB,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,gCAAgC,CAAC,CAAC;QAC/D,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,oBAAoB,CAAC,GAAY;IACxC,IAAI,CAAC;QACH,qEAAqE;QACrE,MAAM,OAAO,GAAG,GAAyD,CAAC;QAC1E,OAAO,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,IAAI,IAAI,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,iBAAiB,CAAC,GAAW;IACpC,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB;YACE,2DAA2D;YAC3D,OAAO,cAAc,CAAC;IAC1B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hybrid adapter factory for node-oidc-provider.
|
|
3
|
+
*
|
|
4
|
+
* Routes short-lived, high-throughput models to RedisAdapter and
|
|
5
|
+
* long-lived models to PostgresAdapter. This maximizes performance
|
|
6
|
+
* for frequently accessed artifacts (sessions, interactions, auth codes)
|
|
7
|
+
* while ensuring persistence for long-lived ones (access tokens,
|
|
8
|
+
* refresh tokens, grants).
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* const provider = new Provider(issuer, {
|
|
12
|
+
* adapter: createAdapterFactory(),
|
|
13
|
+
* });
|
|
14
|
+
*
|
|
15
|
+
* The factory returns a CLASS (not an instance) — node-oidc-provider
|
|
16
|
+
* instantiates it with `new AdapterClass(modelName)`.
|
|
17
|
+
*/
|
|
18
|
+
import { PostgresAdapter } from './postgres-adapter.js';
|
|
19
|
+
import { RedisAdapter } from './redis-adapter.js';
|
|
20
|
+
import type { AdapterPayload } from './postgres-adapter.js';
|
|
21
|
+
/**
|
|
22
|
+
* Models routed to Redis for performance.
|
|
23
|
+
*
|
|
24
|
+
* These are short-lived, high-throughput artifacts where Redis's
|
|
25
|
+
* in-memory speed and automatic TTL expiry are ideal:
|
|
26
|
+
* - Session: frequently accessed per-request, 24h TTL
|
|
27
|
+
* - Interaction: very short-lived login flow state, 1h TTL
|
|
28
|
+
* - AuthorizationCode: short-lived, high throughput, 10min TTL
|
|
29
|
+
* - ReplayDetection: performance-critical duplicate detection
|
|
30
|
+
* - ClientCredentials: short-lived M2M tokens, 1h TTL
|
|
31
|
+
* - PushedAuthorizationRequest: short-lived PAR requests, 1h TTL
|
|
32
|
+
*/
|
|
33
|
+
export declare const REDIS_MODELS: Set<string>;
|
|
34
|
+
/**
|
|
35
|
+
* Check if a model name should be stored in Redis.
|
|
36
|
+
*
|
|
37
|
+
* @param name - OIDC model name (e.g., 'Session', 'AccessToken')
|
|
38
|
+
* @returns true if the model should use Redis, false for PostgreSQL
|
|
39
|
+
*/
|
|
40
|
+
export declare function isRedisModel(name: string): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Create the hybrid adapter factory for node-oidc-provider.
|
|
43
|
+
*
|
|
44
|
+
* Returns a class constructor that node-oidc-provider calls with
|
|
45
|
+
* `new AdapterClass(modelName)`. The constructor internally creates
|
|
46
|
+
* either a RedisAdapter or PostgresAdapter based on the model name.
|
|
47
|
+
*
|
|
48
|
+
* @returns A class constructor compatible with node-oidc-provider's adapter option
|
|
49
|
+
*/
|
|
50
|
+
export declare function createAdapterFactory(): {
|
|
51
|
+
new (name: string): {
|
|
52
|
+
/** The underlying adapter (Redis or PostgreSQL) */
|
|
53
|
+
delegate: PostgresAdapter | RedisAdapter;
|
|
54
|
+
/** The OIDC model name this adapter instance handles */
|
|
55
|
+
name: string;
|
|
56
|
+
/** Create or update an OIDC artifact */
|
|
57
|
+
upsert(id: string, payload: AdapterPayload, expiresIn: number): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Find an artifact by its primary ID.
|
|
60
|
+
*
|
|
61
|
+
* For the 'Client' model, routes to findForOidc() which resolves
|
|
62
|
+
* clients from the clients table (not oidc_payloads). This is the
|
|
63
|
+
* bridge between Porta's client management and oidc-provider.
|
|
64
|
+
*/
|
|
65
|
+
find(id: string): Promise<AdapterPayload | undefined>;
|
|
66
|
+
/** Find an artifact by user code (device flow) */
|
|
67
|
+
findByUserCode(userCode: string): Promise<AdapterPayload | undefined>;
|
|
68
|
+
/** Find an artifact by UID (sessions) */
|
|
69
|
+
findByUid(uid: string): Promise<AdapterPayload | undefined>;
|
|
70
|
+
/** Mark an artifact as consumed */
|
|
71
|
+
consume(id: string): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Delete an artifact by ID.
|
|
74
|
+
*
|
|
75
|
+
* For Session models, this performs a cascade delete: before destroying the
|
|
76
|
+
* session itself, it reads the session's authorizations to extract grant IDs,
|
|
77
|
+
* then deletes all associated grants and tokens from PostgreSQL and cleans up
|
|
78
|
+
* Redis grant sets. This ensures "explicit logout = total cleanup."
|
|
79
|
+
*
|
|
80
|
+
* For all other models, delegates directly to the underlying adapter.
|
|
81
|
+
*
|
|
82
|
+
* Error handling: cascade failures are logged but do NOT prevent the session
|
|
83
|
+
* from being destroyed — the user must always be able to log out.
|
|
84
|
+
*/
|
|
85
|
+
destroy(id: string): Promise<void>;
|
|
86
|
+
/** Revoke all artifacts for a given grant */
|
|
87
|
+
revokeByGrantId(grantId: string): Promise<void>;
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=adapter-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-factory.d.ts","sourceRoot":"","sources":["../../src/oidc/adapter-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,eAAe,EAAqB,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAsB,MAAM,oBAAoB,CAAC;AAGtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,aAOvB,CAAC;AAEH;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB;eAad,MAAM;QANxB,mDAAmD;kBAClC,eAAe,GAAG,YAAY;QAE/C,wDAAwD;cAC3C,MAAM;QAanB,wCAAwC;mBACvB,MAAM,WAAW,cAAc,aAAa,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;QAInF;;;;;;WAMG;iBACY,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;QAO3D,kDAAkD;iCACnB,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;QAI3E,yCAAyC;uBACpB,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;QAIjE,mCAAmC;oBACjB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;QAIxC;;;;;;;;;;;;WAYG;oBACe,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;QAgDxC,6CAA6C;iCACd,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;;EAIxD"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hybrid adapter factory for node-oidc-provider.
|
|
3
|
+
*
|
|
4
|
+
* Routes short-lived, high-throughput models to RedisAdapter and
|
|
5
|
+
* long-lived models to PostgresAdapter. This maximizes performance
|
|
6
|
+
* for frequently accessed artifacts (sessions, interactions, auth codes)
|
|
7
|
+
* while ensuring persistence for long-lived ones (access tokens,
|
|
8
|
+
* refresh tokens, grants).
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* const provider = new Provider(issuer, {
|
|
12
|
+
* adapter: createAdapterFactory(),
|
|
13
|
+
* });
|
|
14
|
+
*
|
|
15
|
+
* The factory returns a CLASS (not an instance) — node-oidc-provider
|
|
16
|
+
* instantiates it with `new AdapterClass(modelName)`.
|
|
17
|
+
*/
|
|
18
|
+
import { PostgresAdapter, revokeGrantsByIds } from './postgres-adapter.js';
|
|
19
|
+
import { RedisAdapter, cleanupRedisGrants } from './redis-adapter.js';
|
|
20
|
+
import { findForOidc } from '../clients/service.js';
|
|
21
|
+
import { logger } from '../lib/logger.js';
|
|
22
|
+
/**
|
|
23
|
+
* Models routed to Redis for performance.
|
|
24
|
+
*
|
|
25
|
+
* These are short-lived, high-throughput artifacts where Redis's
|
|
26
|
+
* in-memory speed and automatic TTL expiry are ideal:
|
|
27
|
+
* - Session: frequently accessed per-request, 24h TTL
|
|
28
|
+
* - Interaction: very short-lived login flow state, 1h TTL
|
|
29
|
+
* - AuthorizationCode: short-lived, high throughput, 10min TTL
|
|
30
|
+
* - ReplayDetection: performance-critical duplicate detection
|
|
31
|
+
* - ClientCredentials: short-lived M2M tokens, 1h TTL
|
|
32
|
+
* - PushedAuthorizationRequest: short-lived PAR requests, 1h TTL
|
|
33
|
+
*/
|
|
34
|
+
export const REDIS_MODELS = new Set([
|
|
35
|
+
'Session',
|
|
36
|
+
'Interaction',
|
|
37
|
+
'AuthorizationCode',
|
|
38
|
+
'ReplayDetection',
|
|
39
|
+
'ClientCredentials',
|
|
40
|
+
'PushedAuthorizationRequest',
|
|
41
|
+
]);
|
|
42
|
+
/**
|
|
43
|
+
* Check if a model name should be stored in Redis.
|
|
44
|
+
*
|
|
45
|
+
* @param name - OIDC model name (e.g., 'Session', 'AccessToken')
|
|
46
|
+
* @returns true if the model should use Redis, false for PostgreSQL
|
|
47
|
+
*/
|
|
48
|
+
export function isRedisModel(name) {
|
|
49
|
+
return REDIS_MODELS.has(name);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Create the hybrid adapter factory for node-oidc-provider.
|
|
53
|
+
*
|
|
54
|
+
* Returns a class constructor that node-oidc-provider calls with
|
|
55
|
+
* `new AdapterClass(modelName)`. The constructor internally creates
|
|
56
|
+
* either a RedisAdapter or PostgresAdapter based on the model name.
|
|
57
|
+
*
|
|
58
|
+
* @returns A class constructor compatible with node-oidc-provider's adapter option
|
|
59
|
+
*/
|
|
60
|
+
export function createAdapterFactory() {
|
|
61
|
+
/**
|
|
62
|
+
* HybridAdapter delegates all operations to either RedisAdapter or
|
|
63
|
+
* PostgresAdapter based on the model name. This is transparent to
|
|
64
|
+
* node-oidc-provider — it just sees a standard adapter interface.
|
|
65
|
+
*/
|
|
66
|
+
return class HybridAdapter {
|
|
67
|
+
/** The underlying adapter (Redis or PostgreSQL) */
|
|
68
|
+
delegate;
|
|
69
|
+
/** The OIDC model name this adapter instance handles */
|
|
70
|
+
name;
|
|
71
|
+
constructor(name) {
|
|
72
|
+
this.name = name;
|
|
73
|
+
// Route to the appropriate adapter based on the model name
|
|
74
|
+
if (REDIS_MODELS.has(name)) {
|
|
75
|
+
this.delegate = new RedisAdapter(name);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
this.delegate = new PostgresAdapter(name);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** Create or update an OIDC artifact */
|
|
82
|
+
async upsert(id, payload, expiresIn) {
|
|
83
|
+
return this.delegate.upsert(id, payload, expiresIn);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Find an artifact by its primary ID.
|
|
87
|
+
*
|
|
88
|
+
* For the 'Client' model, routes to findForOidc() which resolves
|
|
89
|
+
* clients from the clients table (not oidc_payloads). This is the
|
|
90
|
+
* bridge between Porta's client management and oidc-provider.
|
|
91
|
+
*/
|
|
92
|
+
async find(id) {
|
|
93
|
+
if (this.name === 'Client') {
|
|
94
|
+
return findForOidc(id);
|
|
95
|
+
}
|
|
96
|
+
return this.delegate.find(id);
|
|
97
|
+
}
|
|
98
|
+
/** Find an artifact by user code (device flow) */
|
|
99
|
+
async findByUserCode(userCode) {
|
|
100
|
+
return this.delegate.findByUserCode(userCode);
|
|
101
|
+
}
|
|
102
|
+
/** Find an artifact by UID (sessions) */
|
|
103
|
+
async findByUid(uid) {
|
|
104
|
+
return this.delegate.findByUid(uid);
|
|
105
|
+
}
|
|
106
|
+
/** Mark an artifact as consumed */
|
|
107
|
+
async consume(id) {
|
|
108
|
+
return this.delegate.consume(id);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Delete an artifact by ID.
|
|
112
|
+
*
|
|
113
|
+
* For Session models, this performs a cascade delete: before destroying the
|
|
114
|
+
* session itself, it reads the session's authorizations to extract grant IDs,
|
|
115
|
+
* then deletes all associated grants and tokens from PostgreSQL and cleans up
|
|
116
|
+
* Redis grant sets. This ensures "explicit logout = total cleanup."
|
|
117
|
+
*
|
|
118
|
+
* For all other models, delegates directly to the underlying adapter.
|
|
119
|
+
*
|
|
120
|
+
* Error handling: cascade failures are logged but do NOT prevent the session
|
|
121
|
+
* from being destroyed — the user must always be able to log out.
|
|
122
|
+
*/
|
|
123
|
+
async destroy(id) {
|
|
124
|
+
if (this.name === 'Session') {
|
|
125
|
+
try {
|
|
126
|
+
// Step 1: Read session to extract grant IDs before destroying it.
|
|
127
|
+
// The session payload has an `authorizations` map:
|
|
128
|
+
// { [clientId]: { grantId, sid } }
|
|
129
|
+
const session = await this.delegate.find(id);
|
|
130
|
+
if (session?.authorizations) {
|
|
131
|
+
const grantIds = [];
|
|
132
|
+
const authorizations = session.authorizations;
|
|
133
|
+
for (const auth of Object.values(authorizations)) {
|
|
134
|
+
if (auth.grantId)
|
|
135
|
+
grantIds.push(auth.grantId);
|
|
136
|
+
}
|
|
137
|
+
if (grantIds.length > 0) {
|
|
138
|
+
// Step 2a: Cascade delete all grant-related records from PostgreSQL.
|
|
139
|
+
// This is the critical cleanup — removes AccessTokens, RefreshTokens,
|
|
140
|
+
// Grants, and any other artifacts sharing these grant IDs.
|
|
141
|
+
await revokeGrantsByIds(grantIds);
|
|
142
|
+
// Step 2b: Best-effort cleanup of Redis grant sets and member keys.
|
|
143
|
+
// Not critical — Redis keys have TTLs — but removes stale keys immediately.
|
|
144
|
+
await cleanupRedisGrants(grantIds);
|
|
145
|
+
logger.info({ sessionId: id, grantIds }, 'Session destroy: cascade-deleted grants and tokens');
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
// Cascade failed — log but proceed with session destruction.
|
|
151
|
+
// The user must always be able to log out; orphaned tokens will
|
|
152
|
+
// expire naturally via their TTLs.
|
|
153
|
+
logger.error({ err, sessionId: id }, 'Session destroy: cascade cleanup failed (proceeding with session deletion)');
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Step 3: Delete the session/artifact itself via the delegate
|
|
157
|
+
return this.delegate.destroy(id);
|
|
158
|
+
}
|
|
159
|
+
/** Revoke all artifacts for a given grant */
|
|
160
|
+
async revokeByGrantId(grantId) {
|
|
161
|
+
return this.delegate.revokeByGrantId(grantId);
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=adapter-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-factory.js","sourceRoot":"","sources":["../../src/oidc/adapter-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG1C;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAClC,SAAS;IACT,aAAa;IACb,mBAAmB;IACnB,iBAAiB;IACjB,mBAAmB;IACnB,4BAA4B;CAC7B,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB;IAClC;;;;OAIG;IACH,OAAO,MAAM,aAAa;QACxB,mDAAmD;QAC5C,QAAQ,CAAiC;QAEhD,wDAAwD;QACjD,IAAI,CAAS;QAEpB,YAAY,IAAY;YACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YAEjB,2DAA2D;YAC3D,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,OAAuB,EAAE,SAAiB;YACjE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACtD,CAAC;QAED;;;;;;WAMG;QACH,KAAK,CAAC,IAAI,CAAC,EAAU;YACnB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3B,OAAO,WAAW,CAAC,EAAE,CAAwC,CAAC;YAChE,CAAC;YACD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC;QAED,kDAAkD;QAClD,KAAK,CAAC,cAAc,CAAC,QAAgB;YACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAChD,CAAC;QAED,yCAAyC;QACzC,KAAK,CAAC,SAAS,CAAC,GAAW;YACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;QAED,mCAAmC;QACnC,KAAK,CAAC,OAAO,CAAC,EAAU;YACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC;QAED;;;;;;;;;;;;WAYG;QACH,KAAK,CAAC,OAAO,CAAC,EAAU;YACtB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,IAAI,CAAC;oBACH,kEAAkE;oBAClE,mDAAmD;oBACnD,qCAAqC;oBACrC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC7C,IAAI,OAAO,EAAE,cAAc,EAAE,CAAC;wBAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;wBAC9B,MAAM,cAAc,GAAG,OAAO,CAAC,cAG9B,CAAC;wBACF,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;4BACjD,IAAI,IAAI,CAAC,OAAO;gCAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBAChD,CAAC;wBAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACxB,qEAAqE;4BACrE,sEAAsE;4BACtE,2DAA2D;4BAC3D,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;4BAElC,oEAAoE;4BACpE,4EAA4E;4BAC5E,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;4BAEnC,MAAM,CAAC,IAAI,CACT,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,EAC3B,oDAAoD,CACrD,CAAC;wBACJ,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,6DAA6D;oBAC7D,gEAAgE;oBAChE,mCAAmC;oBACnC,MAAM,CAAC,KAAK,CACV,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,EACtB,4EAA4E,CAC7E,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,8DAA8D;YAC9D,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC;QAED,6CAA6C;QAC7C,KAAK,CAAC,eAAe,CAAC,OAAe;YACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OIDC provider configuration builder.
|
|
3
|
+
*
|
|
4
|
+
* Builds the complete node-oidc-provider configuration object from external
|
|
5
|
+
* dependencies (TTLs, keys, adapter factory, finders). This is a pure function
|
|
6
|
+
* with no side effects — all dependencies are injected as parameters.
|
|
7
|
+
*
|
|
8
|
+
* The configuration enables:
|
|
9
|
+
* - Hybrid adapter (Postgres/Redis) for OIDC artifact storage
|
|
10
|
+
* - ES256 signing keys loaded from the database
|
|
11
|
+
* - Client lookup via adapter pattern (adapter.find('Client', id) → findForOidc())
|
|
12
|
+
* - PKCE required for all authorization code flows (S256 only)
|
|
13
|
+
* - Token introspection, revocation, and client credentials
|
|
14
|
+
* - Standard OIDC scopes and claims mapping
|
|
15
|
+
* - Refresh token rotation
|
|
16
|
+
* - Cookie signing with rotation support
|
|
17
|
+
*/
|
|
18
|
+
import type { OidcTtlConfig } from '../lib/system-config.js';
|
|
19
|
+
import type { JwkKeyPair } from '../lib/signing-keys.js';
|
|
20
|
+
import type { Organization } from '../organizations/types.js';
|
|
21
|
+
/** Parameters required to build the provider configuration */
|
|
22
|
+
export interface BuildProviderConfigParams {
|
|
23
|
+
/** Token TTL configuration loaded from system_config table */
|
|
24
|
+
ttl: OidcTtlConfig;
|
|
25
|
+
/** JWK key set loaded from signing_keys table */
|
|
26
|
+
jwks: {
|
|
27
|
+
keys: JwkKeyPair[];
|
|
28
|
+
};
|
|
29
|
+
/** Cookie signing keys from application config (supports rotation) */
|
|
30
|
+
cookieKeys: string[];
|
|
31
|
+
/** Account finder function — looks up users by subject ID */
|
|
32
|
+
findAccount: (ctx: unknown, sub: string) => Promise<{
|
|
33
|
+
accountId: string;
|
|
34
|
+
claims: (use: string, scope: string) => Promise<Record<string, unknown>>;
|
|
35
|
+
} | undefined>;
|
|
36
|
+
/** Adapter class factory — node-oidc-provider instantiates with `new` */
|
|
37
|
+
adapterFactory: unknown;
|
|
38
|
+
/** Interaction URL builder — returns the login/consent URL for a given interaction */
|
|
39
|
+
interactionUrl: (ctx: unknown, interaction: {
|
|
40
|
+
uid: string;
|
|
41
|
+
}) => string;
|
|
42
|
+
/** CORS handler — determines if an origin is allowed for a client */
|
|
43
|
+
clientBasedCORS?: (ctx: unknown, origin: string, client: unknown) => boolean;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Build default branding when org resolution is not possible.
|
|
47
|
+
* Used by rendering hooks when the session is destroyed or org lookup fails.
|
|
48
|
+
*
|
|
49
|
+
* @returns Default branding with Porta's standard blue primary color
|
|
50
|
+
*/
|
|
51
|
+
export declare function buildDefaultBranding(): {
|
|
52
|
+
logoUrl: string | null;
|
|
53
|
+
faviconUrl: string | null;
|
|
54
|
+
primaryColor: string;
|
|
55
|
+
companyName: string;
|
|
56
|
+
customCss: string | null;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Best-effort organization resolution for oidc-provider rendering hooks.
|
|
60
|
+
*
|
|
61
|
+
* Tries multiple strategies in order:
|
|
62
|
+
* 1. Session accountId → user lookup → org lookup
|
|
63
|
+
* 2. Client metadata → organizationId → org lookup
|
|
64
|
+
* 3. Returns undefined (caller uses default branding)
|
|
65
|
+
*
|
|
66
|
+
* All errors are caught and logged — never throws.
|
|
67
|
+
*
|
|
68
|
+
* @param ctx - oidc-provider's enhanced Koa context (KoaContextWithOIDC)
|
|
69
|
+
* @returns The resolved Organization, or undefined if resolution fails
|
|
70
|
+
*/
|
|
71
|
+
export declare function resolveOrgForProviderHook(ctx: unknown): Promise<Organization | undefined>;
|
|
72
|
+
/**
|
|
73
|
+
* Custom logoutSource hook for node-oidc-provider.
|
|
74
|
+
*
|
|
75
|
+
* Replaces the provider's default bare HTML logout confirmation page with
|
|
76
|
+
* Porta's styled Handlebars template. Injects a styled submit button into
|
|
77
|
+
* the provider's pre-built form (which contains the correct action URL and
|
|
78
|
+
* xsrf hidden field).
|
|
79
|
+
*
|
|
80
|
+
* Falls back to minimal inline HTML if the template engine fails, ensuring
|
|
81
|
+
* the user can still sign out even if templating breaks.
|
|
82
|
+
*
|
|
83
|
+
* @param ctx - oidc-provider's enhanced Koa context
|
|
84
|
+
* @param form - Pre-built HTML form from the provider (contains action + xsrf)
|
|
85
|
+
*/
|
|
86
|
+
export declare function logoutSourceHook(ctx: any, form: string): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Custom postLogoutSuccessSource hook for node-oidc-provider.
|
|
89
|
+
*
|
|
90
|
+
* Replaces the provider's default bare HTML post-logout page with
|
|
91
|
+
* Porta's styled Handlebars template. At this point the session is
|
|
92
|
+
* already destroyed, so org resolution is not possible — default
|
|
93
|
+
* branding is always used.
|
|
94
|
+
*
|
|
95
|
+
* Falls back to minimal inline HTML if the template engine fails.
|
|
96
|
+
*
|
|
97
|
+
* @param ctx - oidc-provider's enhanced Koa context
|
|
98
|
+
*/
|
|
99
|
+
export declare function postLogoutSuccessSourceHook(ctx: any): Promise<void>;
|
|
100
|
+
/**
|
|
101
|
+
* Custom renderError hook for node-oidc-provider.
|
|
102
|
+
*
|
|
103
|
+
* Replaces the provider's default bare HTML error page with Porta's styled
|
|
104
|
+
* Handlebars template. The OIDC error code (e.g., 'invalid_client') is shown
|
|
105
|
+
* to the user, but the raw error_description is intentionally suppressed to
|
|
106
|
+
* prevent information leakage — a generic i18n error message is shown instead.
|
|
107
|
+
*
|
|
108
|
+
* SECURITY: error_description may contain internal details like "client not
|
|
109
|
+
* found", "grant not found", etc. Only the standardized OIDC error code is
|
|
110
|
+
* safe to display.
|
|
111
|
+
*
|
|
112
|
+
* @param ctx - oidc-provider's enhanced Koa context
|
|
113
|
+
* @param out - OIDC error details (error code + optional description)
|
|
114
|
+
* @param _error - Original Error object (used to detect SessionNotFound)
|
|
115
|
+
*/
|
|
116
|
+
export declare function renderErrorHook(ctx: any, out: {
|
|
117
|
+
error: string;
|
|
118
|
+
error_description?: string;
|
|
119
|
+
}, _error: Error): Promise<void>;
|
|
120
|
+
/**
|
|
121
|
+
* Custom `loadExistingGrant` for node-oidc-provider.
|
|
122
|
+
*
|
|
123
|
+
* Mirrors the provider default (resolve the grant from the consent result or
|
|
124
|
+
* the session's grant id), then conditionally **upgrades** an existing grant to
|
|
125
|
+
* include `offline_access`.
|
|
126
|
+
*
|
|
127
|
+
* Why this exists (Bug #2): with `prompt=login` and a pre-existing Grant that
|
|
128
|
+
* lacks `offline_access`, the provider does not route through the consent
|
|
129
|
+
* interaction, so the consent handlers' `offline_access`-adding code never runs.
|
|
130
|
+
* The authorization code is then issued WITHOUT `offline_access` in its granted
|
|
131
|
+
* scopes, and `issueRefreshToken` returns false — so no refresh token is minted.
|
|
132
|
+
* This is exactly the CLI failure ("no refresh_token available" ~1h later).
|
|
133
|
+
*
|
|
134
|
+
* The upgrade is strictly gated (AR-6 / AR-7): only when the request asked for
|
|
135
|
+
* `offline_access`, the client allows the `refresh_token` grant, AND the grant
|
|
136
|
+
* does not already include `offline_access`. In every other case the grant is
|
|
137
|
+
* returned unchanged — identical to the provider default — so no other client
|
|
138
|
+
* or flow is affected.
|
|
139
|
+
*
|
|
140
|
+
* @param ctx - node-oidc-provider's enhanced Koa context
|
|
141
|
+
* @returns the existing Grant (possibly upgraded) or undefined
|
|
142
|
+
*/
|
|
143
|
+
export declare function loadExistingGrant(ctx: any): Promise<unknown | undefined>;
|
|
144
|
+
/**
|
|
145
|
+
* Build the complete node-oidc-provider configuration object.
|
|
146
|
+
*
|
|
147
|
+
* Takes all external dependencies as parameters to keep this function
|
|
148
|
+
* pure and testable. The resulting configuration covers all OIDC features
|
|
149
|
+
* needed by Porta.
|
|
150
|
+
*
|
|
151
|
+
* @param params - All dependencies for the provider configuration
|
|
152
|
+
* @returns Complete Configuration object for node-oidc-provider
|
|
153
|
+
*/
|
|
154
|
+
export declare function buildProviderConfiguration(params: BuildProviderConfigParams): Record<string, unknown>;
|
|
155
|
+
//# sourceMappingURL=configuration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../src/oidc/configuration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAQzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG9D,8DAA8D;AAC9D,MAAM,WAAW,yBAAyB;IACxC,8DAA8D;IAC9D,GAAG,EAAE,aAAa,CAAC;IACnB,iDAAiD;IACjD,IAAI,EAAE;QAAE,IAAI,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;IAC7B,sEAAsE;IACtE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,6DAA6D;IAC7D,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;KAAE,GAAG,SAAS,CAAC,CAAC;IACjK,yEAAyE;IACzE,cAAc,EAAE,OAAO,CAAC;IACxB,sFAAsF;IACtF,cAAc,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IACvE,qEAAqE;IACrE,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;CAC9E;AAMD;;;;;GAKG;AACH,wBAAgB,oBAAoB;IAEhC,OAAO,EAAU,MAAM,GAAG,IAAI;IAC9B,UAAU,EAAU,MAAM,GAAG,IAAI;IACjC,YAAY;IACZ,WAAW;IACX,SAAS,EAAU,MAAM,GAAG,IAAI;EAEnC;AAmBD;;;;;;;;;;;;GAYG;AACH,wBAAsB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CA8B/F;AAMD;;;;;;;;;;;;;GAaG;AAEH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoD5E;AAED;;;;;;;;;;;GAWG;AAEH,wBAAsB,2BAA2B,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBzE;AAkDD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,eAAe,CAEnC,GAAG,EAAE,GAAG,EACR,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,EAClD,MAAM,EAAE,KAAK,GACZ,OAAO,CAAC,IAAI,CAAC,CA0Df;AAMD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,iBAAiB,CAErC,GAAG,EAAE,GAAG,GACP,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CA8B9B;AAMD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,yBAAyB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyKrG"}
|