@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 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Two-factor authentication cache — Redis-backed fast lookup layer.
|
|
3
|
+
*
|
|
4
|
+
* Provides get/set/invalidate operations for a user's 2FA status stored
|
|
5
|
+
* in Redis. The cached status includes whether 2FA is enabled, the method,
|
|
6
|
+
* TOTP configuration state, and remaining recovery codes.
|
|
7
|
+
*
|
|
8
|
+
* Cache key: `2fa:status:{userId}` with a 5-minute TTL (matches org/user caches).
|
|
9
|
+
*
|
|
10
|
+
* Used by the auth login flow to quickly determine if 2FA is required
|
|
11
|
+
* without hitting the database for every authentication attempt.
|
|
12
|
+
*
|
|
13
|
+
* All Redis errors are caught and logged — cache failures never
|
|
14
|
+
* propagate to callers. The system gracefully degrades to direct
|
|
15
|
+
* database lookups when Redis is unavailable.
|
|
16
|
+
*/
|
|
17
|
+
import type { TwoFactorStatus } from './types.js';
|
|
18
|
+
/**
|
|
19
|
+
* Get a user's 2FA status from cache.
|
|
20
|
+
*
|
|
21
|
+
* Returns null on cache miss, invalid JSON, or Redis error.
|
|
22
|
+
* Callers should fall back to building the status from the database.
|
|
23
|
+
*
|
|
24
|
+
* @param userId - User UUID
|
|
25
|
+
* @returns Cached 2FA status or null
|
|
26
|
+
*/
|
|
27
|
+
export declare function getCachedTwoFactorStatus(userId: string): Promise<TwoFactorStatus | null>;
|
|
28
|
+
/**
|
|
29
|
+
* Store a user's 2FA status in cache.
|
|
30
|
+
*
|
|
31
|
+
* The status object is simple (no Date fields) so JSON serialization
|
|
32
|
+
* is straightforward — no special deserialization needed.
|
|
33
|
+
*
|
|
34
|
+
* @param userId - User UUID
|
|
35
|
+
* @param status - 2FA status to cache
|
|
36
|
+
*/
|
|
37
|
+
export declare function cacheTwoFactorStatus(userId: string, status: TwoFactorStatus): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Invalidate the cached 2FA status for a user.
|
|
40
|
+
*
|
|
41
|
+
* Should be called after any 2FA state change (setup, disable,
|
|
42
|
+
* verification, recovery code use) to ensure stale data is not served.
|
|
43
|
+
*
|
|
44
|
+
* @param userId - User UUID
|
|
45
|
+
*/
|
|
46
|
+
export declare function invalidateTwoFactorCache(userId: string): Promise<void>;
|
|
47
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/two-factor/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAgBlD;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAW9F;AAMD;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAWjG;AAMD;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAa5E"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Two-factor authentication cache — Redis-backed fast lookup layer.
|
|
3
|
+
*
|
|
4
|
+
* Provides get/set/invalidate operations for a user's 2FA status stored
|
|
5
|
+
* in Redis. The cached status includes whether 2FA is enabled, the method,
|
|
6
|
+
* TOTP configuration state, and remaining recovery codes.
|
|
7
|
+
*
|
|
8
|
+
* Cache key: `2fa:status:{userId}` with a 5-minute TTL (matches org/user caches).
|
|
9
|
+
*
|
|
10
|
+
* Used by the auth login flow to quickly determine if 2FA is required
|
|
11
|
+
* without hitting the database for every authentication attempt.
|
|
12
|
+
*
|
|
13
|
+
* All Redis errors are caught and logged — cache failures never
|
|
14
|
+
* propagate to callers. The system gracefully degrades to direct
|
|
15
|
+
* database lookups when Redis is unavailable.
|
|
16
|
+
*/
|
|
17
|
+
import { getRedis } from '../lib/redis.js';
|
|
18
|
+
import { logger } from '../lib/logger.js';
|
|
19
|
+
import { afterDatabaseCommit } from '../lib/database.js';
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Constants
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
/** Cache TTL in seconds (5 minutes — matches organizations/users caches) */
|
|
24
|
+
const CACHE_TTL = 300;
|
|
25
|
+
/** Key prefix for user 2FA status lookups */
|
|
26
|
+
const STATUS_PREFIX = '2fa:status:';
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Cache retrieval
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
/**
|
|
31
|
+
* Get a user's 2FA status from cache.
|
|
32
|
+
*
|
|
33
|
+
* Returns null on cache miss, invalid JSON, or Redis error.
|
|
34
|
+
* Callers should fall back to building the status from the database.
|
|
35
|
+
*
|
|
36
|
+
* @param userId - User UUID
|
|
37
|
+
* @returns Cached 2FA status or null
|
|
38
|
+
*/
|
|
39
|
+
export async function getCachedTwoFactorStatus(userId) {
|
|
40
|
+
try {
|
|
41
|
+
const redis = getRedis();
|
|
42
|
+
const data = await redis.get(`${STATUS_PREFIX}${userId}`);
|
|
43
|
+
if (!data)
|
|
44
|
+
return null;
|
|
45
|
+
return deserializeStatus(data);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Graceful degradation — log and return null so caller falls back to DB
|
|
49
|
+
logger.warn({ event: 'two-factor-cache-read-failed' }, 'Two-factor cache read failed');
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// Cache storage
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
/**
|
|
57
|
+
* Store a user's 2FA status in cache.
|
|
58
|
+
*
|
|
59
|
+
* The status object is simple (no Date fields) so JSON serialization
|
|
60
|
+
* is straightforward — no special deserialization needed.
|
|
61
|
+
*
|
|
62
|
+
* @param userId - User UUID
|
|
63
|
+
* @param status - 2FA status to cache
|
|
64
|
+
*/
|
|
65
|
+
export async function cacheTwoFactorStatus(userId, status) {
|
|
66
|
+
await afterDatabaseCommit(async () => {
|
|
67
|
+
try {
|
|
68
|
+
const redis = getRedis();
|
|
69
|
+
const data = JSON.stringify(status);
|
|
70
|
+
await redis.set(`${STATUS_PREFIX}${userId}`, data, 'EX', CACHE_TTL);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Graceful degradation — cache write failure is non-fatal
|
|
74
|
+
logger.warn({ event: 'two-factor-cache-write-failed' }, 'Two-factor cache write failed');
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
// Cache invalidation
|
|
80
|
+
// ---------------------------------------------------------------------------
|
|
81
|
+
/**
|
|
82
|
+
* Invalidate the cached 2FA status for a user.
|
|
83
|
+
*
|
|
84
|
+
* Should be called after any 2FA state change (setup, disable,
|
|
85
|
+
* verification, recovery code use) to ensure stale data is not served.
|
|
86
|
+
*
|
|
87
|
+
* @param userId - User UUID
|
|
88
|
+
*/
|
|
89
|
+
export async function invalidateTwoFactorCache(userId) {
|
|
90
|
+
await afterDatabaseCommit(async () => {
|
|
91
|
+
try {
|
|
92
|
+
const redis = getRedis();
|
|
93
|
+
await redis.del(`${STATUS_PREFIX}${userId}`);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// Graceful degradation — cache invalidation failure is non-fatal
|
|
97
|
+
logger.warn({ event: 'two-factor-cache-invalidation-failed' }, 'Two-factor cache invalidation failed');
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
// ---------------------------------------------------------------------------
|
|
102
|
+
// Serialization helpers
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
/**
|
|
105
|
+
* Deserialize a JSON string from Redis into a TwoFactorStatus object.
|
|
106
|
+
*
|
|
107
|
+
* The TwoFactorStatus interface has no Date fields, so no special
|
|
108
|
+
* deserialization is needed beyond JSON.parse().
|
|
109
|
+
*
|
|
110
|
+
* @param data - JSON string from Redis
|
|
111
|
+
* @returns TwoFactorStatus object or null if parse fails
|
|
112
|
+
*/
|
|
113
|
+
function deserializeStatus(data) {
|
|
114
|
+
try {
|
|
115
|
+
return JSON.parse(data);
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
logger.warn('Failed to parse cached 2FA status JSON');
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/two-factor/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,4EAA4E;AAC5E,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB,6CAA6C;AAC7C,MAAM,aAAa,GAAG,aAAa,CAAC;AAEpC,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,MAAc;IAC3D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,aAAa,GAAG,MAAM,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;QACxE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,EAAE,8BAA8B,CAAC,CAAC;QACvF,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAc,EAAE,MAAuB;IAChF,MAAM,mBAAmB,CAAC,KAAK,IAAI,EAAE;QACnC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,aAAa,GAAG,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACtE,CAAC;QAAC,MAAM,CAAC;YACP,0DAA0D;YAC1D,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,+BAA+B,EAAE,EAAE,+BAA+B,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,MAAc;IAC3D,MAAM,mBAAmB,CAAC,KAAK,IAAI,EAAE;QACnC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;YACzB,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,aAAa,GAAG,MAAM,EAAE,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;YACjE,MAAM,CAAC,IAAI,CACT,EAAE,KAAK,EAAE,sCAAsC,EAAE,EACjD,sCAAsC,CACvC,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,SAAS,iBAAiB,CAAC,IAAY;IACrC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAoB,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Two-factor authentication cryptography utilities.
|
|
3
|
+
*
|
|
4
|
+
* Provides AES-256-GCM encryption and decryption for TOTP secrets.
|
|
5
|
+
* TOTP secrets must be stored encrypted at rest because they are
|
|
6
|
+
* long-lived shared secrets — compromise would allow an attacker
|
|
7
|
+
* to generate valid TOTP codes indefinitely.
|
|
8
|
+
*
|
|
9
|
+
* The encryption key comes from the TWO_FACTOR_ENCRYPTION_KEY env var
|
|
10
|
+
* (32 bytes, hex-encoded = 64 characters). A random 12-byte IV is
|
|
11
|
+
* generated per encryption operation. The GCM auth tag provides
|
|
12
|
+
* authenticated encryption (tamper detection).
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Encrypt a TOTP secret with AES-256-GCM.
|
|
16
|
+
*
|
|
17
|
+
* Generates a random IV for each encryption operation to ensure
|
|
18
|
+
* the same plaintext never produces the same ciphertext.
|
|
19
|
+
*
|
|
20
|
+
* @param plaintext - The TOTP secret to encrypt (base32-encoded string)
|
|
21
|
+
* @param encryptionKey - 32-byte hex-encoded encryption key (64 hex chars)
|
|
22
|
+
* @returns Object containing encrypted data, IV, and auth tag (all hex-encoded)
|
|
23
|
+
* @throws TwoFactorCryptoError if the encryption key is invalid
|
|
24
|
+
*/
|
|
25
|
+
export declare function encryptTotpSecret(plaintext: string, encryptionKey: string): {
|
|
26
|
+
encrypted: string;
|
|
27
|
+
iv: string;
|
|
28
|
+
tag: string;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Decrypt a TOTP secret from its AES-256-GCM encrypted form.
|
|
32
|
+
*
|
|
33
|
+
* @param encrypted - Hex-encoded encrypted data
|
|
34
|
+
* @param iv - Hex-encoded initialization vector
|
|
35
|
+
* @param tag - Hex-encoded GCM authentication tag
|
|
36
|
+
* @param encryptionKey - 32-byte hex-encoded encryption key (64 hex chars)
|
|
37
|
+
* @returns The decrypted TOTP secret (base32-encoded string)
|
|
38
|
+
* @throws TwoFactorCryptoError if decryption fails (wrong key, tampered data, etc.)
|
|
39
|
+
*/
|
|
40
|
+
export declare function decryptTotpSecret(encrypted: string, iv: string, tag: string, encryptionKey: string): string;
|
|
41
|
+
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/two-factor/crypto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAUH;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAyBhD;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,GACpB,MAAM,CA0BR"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Two-factor authentication cryptography utilities.
|
|
3
|
+
*
|
|
4
|
+
* Provides AES-256-GCM encryption and decryption for TOTP secrets.
|
|
5
|
+
* TOTP secrets must be stored encrypted at rest because they are
|
|
6
|
+
* long-lived shared secrets — compromise would allow an attacker
|
|
7
|
+
* to generate valid TOTP codes indefinitely.
|
|
8
|
+
*
|
|
9
|
+
* The encryption key comes from the TWO_FACTOR_ENCRYPTION_KEY env var
|
|
10
|
+
* (32 bytes, hex-encoded = 64 characters). A random 12-byte IV is
|
|
11
|
+
* generated per encryption operation. The GCM auth tag provides
|
|
12
|
+
* authenticated encryption (tamper detection).
|
|
13
|
+
*/
|
|
14
|
+
import { createCipheriv, createDecipheriv, randomBytes } from 'node:crypto';
|
|
15
|
+
import { TwoFactorCryptoError } from './errors.js';
|
|
16
|
+
/** AES-256-GCM cipher parameters */
|
|
17
|
+
const ALGORITHM = 'aes-256-gcm';
|
|
18
|
+
const IV_LENGTH = 12; // 96-bit IV recommended for GCM
|
|
19
|
+
const TAG_LENGTH = 16; // 128-bit authentication tag
|
|
20
|
+
/**
|
|
21
|
+
* Encrypt a TOTP secret with AES-256-GCM.
|
|
22
|
+
*
|
|
23
|
+
* Generates a random IV for each encryption operation to ensure
|
|
24
|
+
* the same plaintext never produces the same ciphertext.
|
|
25
|
+
*
|
|
26
|
+
* @param plaintext - The TOTP secret to encrypt (base32-encoded string)
|
|
27
|
+
* @param encryptionKey - 32-byte hex-encoded encryption key (64 hex chars)
|
|
28
|
+
* @returns Object containing encrypted data, IV, and auth tag (all hex-encoded)
|
|
29
|
+
* @throws TwoFactorCryptoError if the encryption key is invalid
|
|
30
|
+
*/
|
|
31
|
+
export function encryptTotpSecret(plaintext, encryptionKey) {
|
|
32
|
+
// Validate the encryption key is a valid 32-byte hex string
|
|
33
|
+
const keyBuffer = parseEncryptionKey(encryptionKey);
|
|
34
|
+
// Generate a random 12-byte IV — unique per encryption operation
|
|
35
|
+
const iv = randomBytes(IV_LENGTH);
|
|
36
|
+
const cipher = createCipheriv(ALGORITHM, keyBuffer, iv, {
|
|
37
|
+
authTagLength: TAG_LENGTH,
|
|
38
|
+
});
|
|
39
|
+
// Encrypt the plaintext
|
|
40
|
+
const encrypted = Buffer.concat([
|
|
41
|
+
cipher.update(plaintext, 'utf8'),
|
|
42
|
+
cipher.final(),
|
|
43
|
+
]);
|
|
44
|
+
// Get the GCM authentication tag (provides tamper detection)
|
|
45
|
+
const tag = cipher.getAuthTag();
|
|
46
|
+
return {
|
|
47
|
+
encrypted: encrypted.toString('hex'),
|
|
48
|
+
iv: iv.toString('hex'),
|
|
49
|
+
tag: tag.toString('hex'),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Decrypt a TOTP secret from its AES-256-GCM encrypted form.
|
|
54
|
+
*
|
|
55
|
+
* @param encrypted - Hex-encoded encrypted data
|
|
56
|
+
* @param iv - Hex-encoded initialization vector
|
|
57
|
+
* @param tag - Hex-encoded GCM authentication tag
|
|
58
|
+
* @param encryptionKey - 32-byte hex-encoded encryption key (64 hex chars)
|
|
59
|
+
* @returns The decrypted TOTP secret (base32-encoded string)
|
|
60
|
+
* @throws TwoFactorCryptoError if decryption fails (wrong key, tampered data, etc.)
|
|
61
|
+
*/
|
|
62
|
+
export function decryptTotpSecret(encrypted, iv, tag, encryptionKey) {
|
|
63
|
+
const keyBuffer = parseEncryptionKey(encryptionKey);
|
|
64
|
+
try {
|
|
65
|
+
const decipher = createDecipheriv(ALGORITHM, keyBuffer, Buffer.from(iv, 'hex'), { authTagLength: TAG_LENGTH });
|
|
66
|
+
// Set the auth tag before decryption — GCM verifies integrity
|
|
67
|
+
decipher.setAuthTag(Buffer.from(tag, 'hex'));
|
|
68
|
+
const decrypted = Buffer.concat([
|
|
69
|
+
decipher.update(Buffer.from(encrypted, 'hex')),
|
|
70
|
+
decipher.final(),
|
|
71
|
+
]);
|
|
72
|
+
return decrypted.toString('utf8');
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
// Re-throw as a domain error — the underlying error may be
|
|
76
|
+
// "Unsupported state or unable to authenticate data" (wrong key/tag)
|
|
77
|
+
const message = error instanceof Error ? error.message : 'Unknown decryption error';
|
|
78
|
+
throw new TwoFactorCryptoError(`Decryption failed: ${message}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Parse and validate a hex-encoded encryption key.
|
|
83
|
+
*
|
|
84
|
+
* @param hexKey - 64 hex characters representing 32 bytes
|
|
85
|
+
* @returns Buffer containing the 32-byte key
|
|
86
|
+
* @throws TwoFactorCryptoError if the key is not a valid 32-byte hex string
|
|
87
|
+
*/
|
|
88
|
+
function parseEncryptionKey(hexKey) {
|
|
89
|
+
if (!hexKey || hexKey.length !== 64 || !/^[0-9a-f]+$/i.test(hexKey)) {
|
|
90
|
+
throw new TwoFactorCryptoError('Invalid encryption key: must be 64 hex characters (32 bytes)');
|
|
91
|
+
}
|
|
92
|
+
return Buffer.from(hexKey, 'hex');
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/two-factor/crypto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,oCAAoC;AACpC,MAAM,SAAS,GAAG,aAAa,CAAC;AAChC,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,gCAAgC;AACtD,MAAM,UAAU,GAAG,EAAE,CAAC,CAAC,6BAA6B;AAEpD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,aAAqB;IAErB,4DAA4D;IAC5D,MAAM,SAAS,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAEpD,iEAAiE;IACjE,MAAM,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAElC,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE;QACtD,aAAa,EAAE,UAAU;KAC1B,CAAC,CAAC;IAEH,wBAAwB;IACxB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC;QAChC,MAAM,CAAC,KAAK,EAAE;KACf,CAAC,CAAC;IAEH,6DAA6D;IAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAEhC,OAAO;QACL,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;QACpC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtB,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;KACzB,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,EAAU,EACV,GAAW,EACX,aAAqB;IAErB,MAAM,SAAS,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,gBAAgB,CAC/B,SAAS,EACT,SAAS,EACT,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,EACtB,EAAE,aAAa,EAAE,UAAU,EAAE,CAC9B,CAAC;QAEF,8DAA8D;QAC9D,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QAE7C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;YAC9B,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC9C,QAAQ,CAAC,KAAK,EAAE;SACjB,CAAC,CAAC;QAEH,OAAO,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,2DAA2D;QAC3D,qEAAqE;QACrE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;QACpF,MAAM,IAAI,oBAAoB,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,MAAc;IACxC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,oBAAoB,CAC5B,8DAA8D,CAC/D,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Two-factor authentication error types.
|
|
3
|
+
*
|
|
4
|
+
* Custom error classes for 2FA-specific business rule violations.
|
|
5
|
+
* Route handlers map these to appropriate HTTP status codes:
|
|
6
|
+
* - TwoFactorNotEnabledError → 400
|
|
7
|
+
* - TotpNotConfiguredError → 400
|
|
8
|
+
* - OtpExpiredError → 400
|
|
9
|
+
* - OtpInvalidError → 400
|
|
10
|
+
* - RecoveryCodeInvalidError → 400
|
|
11
|
+
* - RecoveryCodesExhaustedError → 400
|
|
12
|
+
* - TwoFactorRequiredError → 403
|
|
13
|
+
* - TwoFactorAlreadyEnabledError → 409
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Base error class for all 2FA errors.
|
|
17
|
+
* Provides a common type for catch blocks and error mapping.
|
|
18
|
+
*/
|
|
19
|
+
export declare class TwoFactorError extends Error {
|
|
20
|
+
constructor(message: string);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Thrown when a 2FA operation is attempted but the user has not enabled 2FA.
|
|
24
|
+
* Example: trying to verify a TOTP code without having 2FA set up.
|
|
25
|
+
*/
|
|
26
|
+
export declare class TwoFactorNotEnabledError extends TwoFactorError {
|
|
27
|
+
constructor(userId: string);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Thrown when a TOTP operation is attempted but no TOTP config exists.
|
|
31
|
+
* Example: trying to verify a TOTP code without having configured TOTP.
|
|
32
|
+
*/
|
|
33
|
+
export declare class TotpNotConfiguredError extends TwoFactorError {
|
|
34
|
+
constructor(userId: string);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Thrown when an OTP code has expired (past its expires_at timestamp).
|
|
38
|
+
*/
|
|
39
|
+
export declare class OtpExpiredError extends TwoFactorError {
|
|
40
|
+
constructor();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Thrown when an OTP code does not match the stored hash.
|
|
44
|
+
*/
|
|
45
|
+
export declare class OtpInvalidError extends TwoFactorError {
|
|
46
|
+
constructor();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Thrown when a recovery code does not match any unused stored hash.
|
|
50
|
+
*/
|
|
51
|
+
export declare class RecoveryCodeInvalidError extends TwoFactorError {
|
|
52
|
+
constructor();
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Thrown when all recovery codes have been used and none remain.
|
|
56
|
+
* The user must contact an admin or re-enroll 2FA.
|
|
57
|
+
*/
|
|
58
|
+
export declare class RecoveryCodesExhaustedError extends TwoFactorError {
|
|
59
|
+
constructor(userId: string);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Thrown when the organization's 2FA policy requires 2FA but the user
|
|
63
|
+
* has not yet set it up. Used during login flow to redirect to setup.
|
|
64
|
+
*/
|
|
65
|
+
export declare class TwoFactorRequiredError extends TwoFactorError {
|
|
66
|
+
constructor(userId: string);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Thrown when a user tries to set up 2FA but already has it enabled.
|
|
70
|
+
* They must disable existing 2FA first before re-enrolling.
|
|
71
|
+
*/
|
|
72
|
+
export declare class TwoFactorAlreadyEnabledError extends TwoFactorError {
|
|
73
|
+
constructor(userId: string);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Thrown when a 2FA encryption/decryption operation fails.
|
|
77
|
+
* Usually indicates a wrong or missing TWO_FACTOR_ENCRYPTION_KEY.
|
|
78
|
+
*/
|
|
79
|
+
export declare class TwoFactorCryptoError extends TwoFactorError {
|
|
80
|
+
constructor(message: string);
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/two-factor/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;GAGG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,cAAc;IAC1D,YAAY,MAAM,EAAE,MAAM,EAGzB;CACF;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,cAAc;IACxD,YAAY,MAAM,EAAE,MAAM,EAGzB;CACF;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,cAAc;IACjD,cAGC;CACF;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,cAAc;IACjD,cAGC;CACF;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,cAAc;IAC1D,cAGC;CACF;AAED;;;GAGG;AACH,qBAAa,2BAA4B,SAAQ,cAAc;IAC7D,YAAY,MAAM,EAAE,MAAM,EAGzB;CACF;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,cAAc;IACxD,YAAY,MAAM,EAAE,MAAM,EAGzB;CACF;AAED;;;GAGG;AACH,qBAAa,4BAA6B,SAAQ,cAAc;IAC9D,YAAY,MAAM,EAAE,MAAM,EAGzB;CACF;AAED;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,cAAc;IACtD,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Two-factor authentication error types.
|
|
3
|
+
*
|
|
4
|
+
* Custom error classes for 2FA-specific business rule violations.
|
|
5
|
+
* Route handlers map these to appropriate HTTP status codes:
|
|
6
|
+
* - TwoFactorNotEnabledError → 400
|
|
7
|
+
* - TotpNotConfiguredError → 400
|
|
8
|
+
* - OtpExpiredError → 400
|
|
9
|
+
* - OtpInvalidError → 400
|
|
10
|
+
* - RecoveryCodeInvalidError → 400
|
|
11
|
+
* - RecoveryCodesExhaustedError → 400
|
|
12
|
+
* - TwoFactorRequiredError → 403
|
|
13
|
+
* - TwoFactorAlreadyEnabledError → 409
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Base error class for all 2FA errors.
|
|
17
|
+
* Provides a common type for catch blocks and error mapping.
|
|
18
|
+
*/
|
|
19
|
+
export class TwoFactorError extends Error {
|
|
20
|
+
constructor(message) {
|
|
21
|
+
super(message);
|
|
22
|
+
this.name = 'TwoFactorError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Thrown when a 2FA operation is attempted but the user has not enabled 2FA.
|
|
27
|
+
* Example: trying to verify a TOTP code without having 2FA set up.
|
|
28
|
+
*/
|
|
29
|
+
export class TwoFactorNotEnabledError extends TwoFactorError {
|
|
30
|
+
constructor(userId) {
|
|
31
|
+
super(`Two-factor authentication is not enabled for user: ${userId}`);
|
|
32
|
+
this.name = 'TwoFactorNotEnabledError';
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Thrown when a TOTP operation is attempted but no TOTP config exists.
|
|
37
|
+
* Example: trying to verify a TOTP code without having configured TOTP.
|
|
38
|
+
*/
|
|
39
|
+
export class TotpNotConfiguredError extends TwoFactorError {
|
|
40
|
+
constructor(userId) {
|
|
41
|
+
super(`TOTP is not configured for user: ${userId}`);
|
|
42
|
+
this.name = 'TotpNotConfiguredError';
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Thrown when an OTP code has expired (past its expires_at timestamp).
|
|
47
|
+
*/
|
|
48
|
+
export class OtpExpiredError extends TwoFactorError {
|
|
49
|
+
constructor() {
|
|
50
|
+
super('OTP code has expired');
|
|
51
|
+
this.name = 'OtpExpiredError';
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Thrown when an OTP code does not match the stored hash.
|
|
56
|
+
*/
|
|
57
|
+
export class OtpInvalidError extends TwoFactorError {
|
|
58
|
+
constructor() {
|
|
59
|
+
super('Invalid OTP code');
|
|
60
|
+
this.name = 'OtpInvalidError';
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Thrown when a recovery code does not match any unused stored hash.
|
|
65
|
+
*/
|
|
66
|
+
export class RecoveryCodeInvalidError extends TwoFactorError {
|
|
67
|
+
constructor() {
|
|
68
|
+
super('Invalid recovery code');
|
|
69
|
+
this.name = 'RecoveryCodeInvalidError';
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Thrown when all recovery codes have been used and none remain.
|
|
74
|
+
* The user must contact an admin or re-enroll 2FA.
|
|
75
|
+
*/
|
|
76
|
+
export class RecoveryCodesExhaustedError extends TwoFactorError {
|
|
77
|
+
constructor(userId) {
|
|
78
|
+
super(`All recovery codes have been used for user: ${userId}`);
|
|
79
|
+
this.name = 'RecoveryCodesExhaustedError';
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Thrown when the organization's 2FA policy requires 2FA but the user
|
|
84
|
+
* has not yet set it up. Used during login flow to redirect to setup.
|
|
85
|
+
*/
|
|
86
|
+
export class TwoFactorRequiredError extends TwoFactorError {
|
|
87
|
+
constructor(userId) {
|
|
88
|
+
super(`Two-factor authentication is required for user: ${userId}`);
|
|
89
|
+
this.name = 'TwoFactorRequiredError';
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Thrown when a user tries to set up 2FA but already has it enabled.
|
|
94
|
+
* They must disable existing 2FA first before re-enrolling.
|
|
95
|
+
*/
|
|
96
|
+
export class TwoFactorAlreadyEnabledError extends TwoFactorError {
|
|
97
|
+
constructor(userId) {
|
|
98
|
+
super(`Two-factor authentication is already enabled for user: ${userId}`);
|
|
99
|
+
this.name = 'TwoFactorAlreadyEnabledError';
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Thrown when a 2FA encryption/decryption operation fails.
|
|
104
|
+
* Usually indicates a wrong or missing TWO_FACTOR_ENCRYPTION_KEY.
|
|
105
|
+
*/
|
|
106
|
+
export class TwoFactorCryptoError extends TwoFactorError {
|
|
107
|
+
constructor(message) {
|
|
108
|
+
super(`Two-factor crypto error: ${message}`);
|
|
109
|
+
this.name = 'TwoFactorCryptoError';
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/two-factor/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;GAGG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,wBAAyB,SAAQ,cAAc;IAC1D,YAAY,MAAc;QACxB,KAAK,CAAC,sDAAsD,MAAM,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,sBAAuB,SAAQ,cAAc;IACxD,YAAY,MAAc;QACxB,KAAK,CAAC,oCAAoC,MAAM,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,cAAc;IACjD;QACE,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,cAAc;IACjD;QACE,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,wBAAyB,SAAQ,cAAc;IAC1D;QACE,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,2BAA4B,SAAQ,cAAc;IAC7D,YAAY,MAAc;QACxB,KAAK,CAAC,+CAA+C,MAAM,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,sBAAuB,SAAQ,cAAc;IACxD,YAAY,MAAc;QACxB,KAAK,CAAC,mDAAmD,MAAM,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,4BAA6B,SAAQ,cAAc;IAC9D,YAAY,MAAc;QACxB,KAAK,CAAC,0DAA0D,MAAM,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,oBAAqB,SAAQ,cAAc;IACtD,YAAY,OAAe;QACzB,KAAK,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Two-factor authentication module — barrel export.
|
|
3
|
+
*
|
|
4
|
+
* Public API for the 2FA module. Re-exports types, errors, and crypto
|
|
5
|
+
* utilities. Additional exports (otp, totp, recovery, repository, cache,
|
|
6
|
+
* service) will be added as they are implemented in subsequent phases.
|
|
7
|
+
*/
|
|
8
|
+
export type { TwoFactorMethod, TwoFactorPolicy, UserTotp, OtpCode, RecoveryCode, TwoFactorSetupResult, TwoFactorStatus, InsertTotpData, UserTotpRow, OtpCodeRow, RecoveryCodeRow, } from './types.js';
|
|
9
|
+
export { mapRowToUserTotp, mapRowToOtpCode, mapRowToRecoveryCode, } from './types.js';
|
|
10
|
+
export { TwoFactorError, TwoFactorNotEnabledError, TotpNotConfiguredError, OtpExpiredError, OtpInvalidError, RecoveryCodeInvalidError, RecoveryCodesExhaustedError, TwoFactorRequiredError, TwoFactorAlreadyEnabledError, TwoFactorCryptoError, } from './errors.js';
|
|
11
|
+
export { encryptTotpSecret, decryptTotpSecret } from './crypto.js';
|
|
12
|
+
export { generateOtpCode, hashOtpCode, verifyOtpCode } from './otp.js';
|
|
13
|
+
export { generateTotpSecret, generateTotpUri, generateQrCodeDataUri, verifyTotpCode, } from './totp.js';
|
|
14
|
+
export { generateRecoveryCodes, hashRecoveryCode, verifyRecoveryCode, } from './recovery.js';
|
|
15
|
+
export { insertTotp, findTotpByUserId, markTotpVerified, deleteTotp, insertOtpCode, findActiveOtpCodes, markOtpCodeUsed, deleteExpiredOtpCodes, countActiveOtpCodes, insertRecoveryCodes, findUnusedRecoveryCodes, markRecoveryCodeUsed, deleteAllRecoveryCodes, countUnusedRecoveryCodes, } from './repository.js';
|
|
16
|
+
export { getCachedTwoFactorStatus, cacheTwoFactorStatus, invalidateTwoFactorCache, } from './cache.js';
|
|
17
|
+
export { setupEmailOtp, setupTotp, getPendingTotpSetupInfo, confirmTotpSetup, sendOtpCode, verifyOtp, verifyTotp, verifyRecoveryCode as verifyRecoveryCodeService, getTwoFactorStatus, disableTwoFactor, regenerateRecoveryCodes, requiresTwoFactor, determineTwoFactorMethod, } from './service.js';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/two-factor/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,eAAe,EACf,eAAe,EACf,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,WAAW,EACX,UAAU,EACV,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,wBAAwB,EACxB,2BAA2B,EAC3B,sBAAsB,EACtB,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGnE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGvE,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,cAAc,GACf,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,aAAa,EACb,SAAS,EACT,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,UAAU,EACV,kBAAkB,IAAI,yBAAyB,EAC/C,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Two-factor authentication module — barrel export.
|
|
3
|
+
*
|
|
4
|
+
* Public API for the 2FA module. Re-exports types, errors, and crypto
|
|
5
|
+
* utilities. Additional exports (otp, totp, recovery, repository, cache,
|
|
6
|
+
* service) will be added as they are implemented in subsequent phases.
|
|
7
|
+
*/
|
|
8
|
+
export { mapRowToUserTotp, mapRowToOtpCode, mapRowToRecoveryCode, } from './types.js';
|
|
9
|
+
// Errors
|
|
10
|
+
export { TwoFactorError, TwoFactorNotEnabledError, TotpNotConfiguredError, OtpExpiredError, OtpInvalidError, RecoveryCodeInvalidError, RecoveryCodesExhaustedError, TwoFactorRequiredError, TwoFactorAlreadyEnabledError, TwoFactorCryptoError, } from './errors.js';
|
|
11
|
+
// Crypto
|
|
12
|
+
export { encryptTotpSecret, decryptTotpSecret } from './crypto.js';
|
|
13
|
+
// OTP
|
|
14
|
+
export { generateOtpCode, hashOtpCode, verifyOtpCode } from './otp.js';
|
|
15
|
+
// TOTP
|
|
16
|
+
export { generateTotpSecret, generateTotpUri, generateQrCodeDataUri, verifyTotpCode, } from './totp.js';
|
|
17
|
+
// Recovery codes
|
|
18
|
+
export { generateRecoveryCodes, hashRecoveryCode, verifyRecoveryCode, } from './recovery.js';
|
|
19
|
+
// Repository
|
|
20
|
+
export { insertTotp, findTotpByUserId, markTotpVerified, deleteTotp, insertOtpCode, findActiveOtpCodes, markOtpCodeUsed, deleteExpiredOtpCodes, countActiveOtpCodes, insertRecoveryCodes, findUnusedRecoveryCodes, markRecoveryCodeUsed, deleteAllRecoveryCodes, countUnusedRecoveryCodes, } from './repository.js';
|
|
21
|
+
// Cache
|
|
22
|
+
export { getCachedTwoFactorStatus, cacheTwoFactorStatus, invalidateTwoFactorCache, } from './cache.js';
|
|
23
|
+
// Service
|
|
24
|
+
export { setupEmailOtp, setupTotp, getPendingTotpSetupInfo, confirmTotpSetup, sendOtpCode, verifyOtp, verifyTotp, verifyRecoveryCode as verifyRecoveryCodeService, getTwoFactorStatus, disableTwoFactor, regenerateRecoveryCodes, requiresTwoFactor, determineTwoFactorMethod, } from './service.js';
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/two-factor/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,SAAS;AACT,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,wBAAwB,EACxB,2BAA2B,EAC3B,sBAAsB,EACtB,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAErB,SAAS;AACT,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEnE,MAAM;AACN,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEvE,OAAO;AACP,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,cAAc,GACf,MAAM,WAAW,CAAC;AAEnB,iBAAiB;AACjB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,aAAa;AACb,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AAEzB,QAAQ;AACR,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAEpB,UAAU;AACV,OAAO,EACL,aAAa,EACb,SAAS,EACT,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,UAAU,EACV,kBAAkB,IAAI,yBAAyB,EAC/C,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,cAAc,CAAC"}
|