@portaidentity/server 1.7.3 → 1.9.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 +28 -0
- package/dist/applications/index.d.ts +2 -2
- package/dist/applications/index.d.ts.map +1 -1
- package/dist/applications/index.js +2 -2
- package/dist/applications/index.js.map +1 -1
- package/dist/applications/repository.d.ts +49 -4
- package/dist/applications/repository.d.ts.map +1 -1
- package/dist/applications/repository.js +148 -10
- package/dist/applications/repository.js.map +1 -1
- package/dist/applications/service.d.ts +35 -17
- package/dist/applications/service.d.ts.map +1 -1
- package/dist/applications/service.js +144 -35
- package/dist/applications/service.js.map +1 -1
- package/dist/applications/types.d.ts +1 -1
- package/dist/applications/types.d.ts.map +1 -1
- package/dist/applications/validators.d.ts +14 -0
- package/dist/applications/validators.d.ts.map +1 -0
- package/dist/applications/validators.js +14 -0
- package/dist/applications/validators.js.map +1 -0
- package/dist/auth/effective-branding.d.ts +35 -0
- package/dist/auth/effective-branding.d.ts.map +1 -0
- package/dist/auth/effective-branding.js +81 -0
- package/dist/auth/effective-branding.js.map +1 -0
- package/dist/auth/email-service.d.ts +3 -8
- package/dist/auth/email-service.d.ts.map +1 -1
- package/dist/auth/email-service.js +22 -30
- package/dist/auth/email-service.js.map +1 -1
- package/dist/auth/i18n.d.ts +5 -0
- package/dist/auth/i18n.d.ts.map +1 -1
- package/dist/auth/i18n.js +6 -5
- package/dist/auth/i18n.js.map +1 -1
- package/dist/auth/rate-limiter.d.ts +6 -10
- package/dist/auth/rate-limiter.d.ts.map +1 -1
- package/dist/auth/rate-limiter.js +12 -16
- package/dist/auth/rate-limiter.js.map +1 -1
- package/dist/auth/recovery-job-processor.d.ts.map +1 -1
- package/dist/auth/recovery-job-processor.js +1 -1
- package/dist/auth/recovery-job-processor.js.map +1 -1
- package/dist/auth/template-engine.d.ts +3 -1
- package/dist/auth/template-engine.d.ts.map +1 -1
- package/dist/auth/template-engine.js +1 -1
- package/dist/auth/template-engine.js.map +1 -1
- package/dist/auth/token-repository.d.ts +9 -3
- package/dist/auth/token-repository.d.ts.map +1 -1
- package/dist/auth/token-repository.js +17 -8
- package/dist/auth/token-repository.js.map +1 -1
- package/dist/cli/commands/init.d.ts +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +12 -12
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/error-handler.d.ts +3 -2
- package/dist/cli/error-handler.d.ts.map +1 -1
- package/dist/cli/error-handler.js +9 -2
- package/dist/cli/error-handler.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/clients/index.d.ts +1 -1
- package/dist/clients/index.js +1 -1
- package/dist/clients/repository.d.ts +24 -0
- package/dist/clients/repository.d.ts.map +1 -1
- package/dist/clients/repository.js +39 -0
- package/dist/clients/repository.js.map +1 -1
- package/dist/clients/secret-repository.d.ts +35 -8
- package/dist/clients/secret-repository.d.ts.map +1 -1
- package/dist/clients/secret-repository.js +69 -16
- package/dist/clients/secret-repository.js.map +1 -1
- package/dist/clients/secret-service.d.ts +5 -9
- package/dist/clients/secret-service.d.ts.map +1 -1
- package/dist/clients/secret-service.js +13 -22
- package/dist/clients/secret-service.js.map +1 -1
- package/dist/clients/service.d.ts +10 -13
- package/dist/clients/service.d.ts.map +1 -1
- package/dist/clients/service.js +121 -42
- package/dist/clients/service.js.map +1 -1
- package/dist/clients/types.d.ts +14 -1
- package/dist/clients/types.d.ts.map +1 -1
- package/dist/clients/types.js +1 -0
- package/dist/clients/types.js.map +1 -1
- package/dist/clients/validators.d.ts +83 -1
- package/dist/clients/validators.d.ts.map +1 -1
- package/dist/clients/validators.js +110 -0
- package/dist/clients/validators.js.map +1 -1
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/schema.d.ts +1 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +23 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/custom-claims/repository.d.ts +14 -9
- package/dist/custom-claims/repository.d.ts.map +1 -1
- package/dist/custom-claims/repository.js +38 -11
- package/dist/custom-claims/repository.js.map +1 -1
- package/dist/custom-claims/service.d.ts +11 -6
- package/dist/custom-claims/service.d.ts.map +1 -1
- package/dist/custom-claims/service.js +43 -20
- package/dist/custom-claims/service.js.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/admin-permissions.d.ts +12 -7
- package/dist/lib/admin-permissions.d.ts.map +1 -1
- package/dist/lib/admin-permissions.js +26 -16
- package/dist/lib/admin-permissions.js.map +1 -1
- package/dist/lib/audit-log.d.ts +2 -2
- package/dist/lib/audit-log.d.ts.map +1 -1
- package/dist/lib/audit-log.js +1 -1
- package/dist/lib/audit-log.js.map +1 -1
- package/dist/lib/authority-revocation.d.ts +18 -0
- package/dist/lib/authority-revocation.d.ts.map +1 -0
- package/dist/lib/authority-revocation.js +37 -0
- package/dist/lib/authority-revocation.js.map +1 -0
- package/dist/lib/branding-assets.d.ts +35 -5
- package/dist/lib/branding-assets.d.ts.map +1 -1
- package/dist/lib/branding-assets.js +33 -26
- package/dist/lib/branding-assets.js.map +1 -1
- package/dist/lib/bulk-operations.d.ts +1 -1
- package/dist/lib/bulk-operations.d.ts.map +1 -1
- package/dist/lib/bulk-operations.js +1 -13
- package/dist/lib/bulk-operations.js.map +1 -1
- package/dist/lib/cursor.d.ts +2 -0
- package/dist/lib/cursor.d.ts.map +1 -1
- package/dist/lib/cursor.js +2 -7
- package/dist/lib/cursor.js.map +1 -1
- package/dist/lib/database.d.ts.map +1 -1
- package/dist/lib/database.js +5 -0
- package/dist/lib/database.js.map +1 -1
- package/dist/lib/deletion-cleanup.d.ts +43 -0
- package/dist/lib/deletion-cleanup.d.ts.map +1 -0
- package/dist/lib/deletion-cleanup.js +207 -0
- package/dist/lib/deletion-cleanup.js.map +1 -0
- package/dist/lib/image-validator.d.ts +3 -1
- package/dist/lib/image-validator.d.ts.map +1 -1
- package/dist/lib/image-validator.js +32 -19
- package/dist/lib/image-validator.js.map +1 -1
- package/dist/lib/log-format.d.ts +20 -0
- package/dist/lib/log-format.d.ts.map +1 -0
- package/dist/lib/log-format.js +22 -0
- package/dist/lib/log-format.js.map +1 -0
- package/dist/lib/logger.d.ts +3 -1
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +21 -4
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/redis.d.ts.map +1 -1
- package/dist/lib/redis.js +3 -0
- package/dist/lib/redis.js.map +1 -1
- package/dist/lib/session-tracking.d.ts +73 -11
- package/dist/lib/session-tracking.d.ts.map +1 -1
- package/dist/lib/session-tracking.js +76 -32
- package/dist/lib/session-tracking.js.map +1 -1
- package/dist/lib/signing-key-crypto.d.ts.map +1 -1
- package/dist/lib/signing-key-crypto.js +4 -5
- package/dist/lib/signing-key-crypto.js.map +1 -1
- package/dist/lib/signing-keys.d.ts +3 -4
- package/dist/lib/signing-keys.d.ts.map +1 -1
- package/dist/lib/signing-keys.js +66 -41
- package/dist/lib/signing-keys.js.map +1 -1
- package/dist/lib/super-admin-protection.d.ts +5 -5
- package/dist/lib/super-admin-protection.d.ts.map +1 -1
- package/dist/lib/super-admin-protection.js +6 -9
- package/dist/lib/super-admin-protection.js.map +1 -1
- package/dist/lib/system-config-catalog.d.ts +268 -0
- package/dist/lib/system-config-catalog.d.ts.map +1 -0
- package/dist/lib/system-config-catalog.js +90 -0
- package/dist/lib/system-config-catalog.js.map +1 -0
- package/dist/lib/system-config.d.ts +30 -33
- package/dist/lib/system-config.d.ts.map +1 -1
- package/dist/lib/system-config.js +78 -93
- package/dist/lib/system-config.js.map +1 -1
- package/dist/lib/with-timeout.d.ts +32 -0
- package/dist/lib/with-timeout.d.ts.map +1 -0
- package/dist/lib/with-timeout.js +45 -0
- package/dist/lib/with-timeout.js.map +1 -0
- package/dist/middleware/admin-auth.d.ts +6 -5
- package/dist/middleware/admin-auth.d.ts.map +1 -1
- package/dist/middleware/admin-auth.js +30 -20
- package/dist/middleware/admin-auth.js.map +1 -1
- package/dist/middleware/admin-cors.d.ts +3 -3
- package/dist/middleware/admin-cors.js +3 -3
- package/dist/middleware/admin-mutation-audit.d.ts +3 -2
- package/dist/middleware/admin-mutation-audit.d.ts.map +1 -1
- package/dist/middleware/admin-mutation-audit.js +12 -5
- package/dist/middleware/admin-mutation-audit.js.map +1 -1
- package/dist/middleware/admin-rate-limiter.d.ts +7 -8
- package/dist/middleware/admin-rate-limiter.d.ts.map +1 -1
- package/dist/middleware/admin-rate-limiter.js +7 -8
- package/dist/middleware/admin-rate-limiter.js.map +1 -1
- package/dist/middleware/client-secret-hash.d.ts +10 -29
- package/dist/middleware/client-secret-hash.d.ts.map +1 -1
- package/dist/middleware/client-secret-hash.js +161 -59
- package/dist/middleware/client-secret-hash.js.map +1 -1
- package/dist/middleware/health.d.ts +17 -0
- package/dist/middleware/health.d.ts.map +1 -1
- package/dist/middleware/health.js +25 -21
- package/dist/middleware/health.js.map +1 -1
- package/dist/middleware/ready.d.ts.map +1 -1
- package/dist/middleware/ready.js +1 -12
- package/dist/middleware/ready.js.map +1 -1
- package/dist/middleware/require-existing-organization.d.ts +18 -0
- package/dist/middleware/require-existing-organization.d.ts.map +1 -0
- package/dist/middleware/require-existing-organization.js +38 -0
- package/dist/middleware/require-existing-organization.js.map +1 -0
- package/dist/middleware/require-permission.d.ts.map +1 -1
- package/dist/middleware/require-permission.js +35 -1
- package/dist/middleware/require-permission.js.map +1 -1
- package/dist/middleware/require-user-organization.d.ts.map +1 -1
- package/dist/middleware/require-user-organization.js +4 -2
- package/dist/middleware/require-user-organization.js.map +1 -1
- package/dist/middleware/security-headers.d.ts +18 -0
- package/dist/middleware/security-headers.d.ts.map +1 -1
- package/dist/middleware/security-headers.js +32 -1
- package/dist/middleware/security-headers.js.map +1 -1
- package/dist/middleware/tenant-resolver.d.ts +1 -2
- package/dist/middleware/tenant-resolver.d.ts.map +1 -1
- package/dist/middleware/tenant-resolver.js +1 -5
- package/dist/middleware/tenant-resolver.js.map +1 -1
- package/dist/middleware/token-rate-limiter.d.ts +37 -16
- package/dist/middleware/token-rate-limiter.d.ts.map +1 -1
- package/dist/middleware/token-rate-limiter.js +126 -54
- package/dist/middleware/token-rate-limiter.js.map +1 -1
- package/dist/oidc/account-finder.d.ts +5 -5
- package/dist/oidc/account-finder.d.ts.map +1 -1
- package/dist/oidc/account-finder.js +31 -23
- package/dist/oidc/account-finder.js.map +1 -1
- package/dist/oidc/adapter-factory.d.ts.map +1 -1
- package/dist/oidc/adapter-factory.js +83 -3
- package/dist/oidc/adapter-factory.js.map +1 -1
- package/dist/oidc/configuration.d.ts +3 -8
- package/dist/oidc/configuration.d.ts.map +1 -1
- package/dist/oidc/configuration.js +67 -50
- package/dist/oidc/configuration.js.map +1 -1
- package/dist/oidc/provider.d.ts.map +1 -1
- package/dist/oidc/provider.js +7 -0
- package/dist/oidc/provider.js.map +1 -1
- package/dist/oidc/redis-adapter.d.ts +2 -3
- package/dist/oidc/redis-adapter.d.ts.map +1 -1
- package/dist/oidc/redis-adapter.js +54 -46
- package/dist/oidc/redis-adapter.js.map +1 -1
- package/dist/organizations/branding-url.d.ts +17 -0
- package/dist/organizations/branding-url.d.ts.map +1 -0
- package/dist/organizations/branding-url.js +38 -0
- package/dist/organizations/branding-url.js.map +1 -0
- package/dist/organizations/index.d.ts +2 -2
- package/dist/organizations/index.d.ts.map +1 -1
- package/dist/organizations/index.js +1 -1
- package/dist/organizations/index.js.map +1 -1
- package/dist/organizations/repository.d.ts +22 -32
- package/dist/organizations/repository.d.ts.map +1 -1
- package/dist/organizations/repository.js +64 -45
- package/dist/organizations/repository.js.map +1 -1
- package/dist/organizations/service.d.ts +14 -46
- package/dist/organizations/service.d.ts.map +1 -1
- package/dist/organizations/service.js +60 -112
- package/dist/organizations/service.js.map +1 -1
- package/dist/organizations/types.d.ts +1 -15
- package/dist/organizations/types.d.ts.map +1 -1
- package/dist/organizations/validators.d.ts +41 -0
- package/dist/organizations/validators.d.ts.map +1 -0
- package/dist/organizations/validators.js +48 -0
- package/dist/organizations/validators.js.map +1 -0
- package/dist/portability/apply.d.ts +15 -0
- package/dist/portability/apply.d.ts.map +1 -0
- package/dist/portability/apply.js +274 -0
- package/dist/portability/apply.js.map +1 -0
- package/dist/portability/authorization.d.ts +30 -0
- package/dist/portability/authorization.d.ts.map +1 -0
- package/dist/portability/authorization.js +130 -0
- package/dist/portability/authorization.js.map +1 -0
- package/dist/portability/cleanup.d.ts +29 -0
- package/dist/portability/cleanup.d.ts.map +1 -0
- package/dist/portability/cleanup.js +167 -0
- package/dist/portability/cleanup.js.map +1 -0
- package/dist/portability/export.d.ts +18 -0
- package/dist/portability/export.d.ts.map +1 -0
- package/dist/portability/export.js +125 -0
- package/dist/portability/export.js.map +1 -0
- package/dist/portability/import-repository.d.ts +204 -0
- package/dist/portability/import-repository.d.ts.map +1 -0
- package/dist/portability/import-repository.js +348 -0
- package/dist/portability/import-repository.js.map +1 -0
- package/dist/portability/import-user-client-writers.d.ts +40 -0
- package/dist/portability/import-user-client-writers.d.ts.map +1 -0
- package/dist/portability/import-user-client-writers.js +171 -0
- package/dist/portability/import-user-client-writers.js.map +1 -0
- package/dist/portability/index.d.ts +8 -0
- package/dist/portability/index.d.ts.map +1 -0
- package/dist/portability/index.js +8 -0
- package/dist/portability/index.js.map +1 -0
- package/dist/portability/plan-support.d.ts +137 -0
- package/dist/portability/plan-support.d.ts.map +1 -0
- package/dist/portability/plan-support.js +337 -0
- package/dist/portability/plan-support.js.map +1 -0
- package/dist/portability/plan.d.ts +34 -0
- package/dist/portability/plan.d.ts.map +1 -0
- package/dist/portability/plan.js +450 -0
- package/dist/portability/plan.js.map +1 -0
- package/dist/portability/repository.d.ts +95 -0
- package/dist/portability/repository.d.ts.map +1 -0
- package/dist/portability/repository.js +390 -0
- package/dist/portability/repository.js.map +1 -0
- package/dist/portability/schema.d.ts +591 -0
- package/dist/portability/schema.d.ts.map +1 -0
- package/dist/portability/schema.js +459 -0
- package/dist/portability/schema.js.map +1 -0
- package/dist/portability/types.d.ts +382 -0
- package/dist/portability/types.d.ts.map +1 -0
- package/dist/portability/types.js +19 -0
- package/dist/portability/types.js.map +1 -0
- package/dist/rbac/errors.d.ts +4 -0
- package/dist/rbac/errors.d.ts.map +1 -1
- package/dist/rbac/errors.js +7 -0
- package/dist/rbac/errors.js.map +1 -1
- package/dist/rbac/index.d.ts +3 -3
- package/dist/rbac/index.d.ts.map +1 -1
- package/dist/rbac/index.js +3 -3
- package/dist/rbac/index.js.map +1 -1
- package/dist/rbac/mapping-repository.d.ts +84 -9
- package/dist/rbac/mapping-repository.d.ts.map +1 -1
- package/dist/rbac/mapping-repository.js +222 -55
- package/dist/rbac/mapping-repository.js.map +1 -1
- package/dist/rbac/permission-repository.d.ts +36 -19
- package/dist/rbac/permission-repository.d.ts.map +1 -1
- package/dist/rbac/permission-repository.js +93 -35
- package/dist/rbac/permission-repository.js.map +1 -1
- package/dist/rbac/permission-service.d.ts +18 -19
- package/dist/rbac/permission-service.d.ts.map +1 -1
- package/dist/rbac/permission-service.js +100 -57
- package/dist/rbac/permission-service.js.map +1 -1
- package/dist/rbac/role-repository.d.ts +29 -24
- package/dist/rbac/role-repository.d.ts.map +1 -1
- package/dist/rbac/role-repository.js +66 -43
- package/dist/rbac/role-repository.js.map +1 -1
- package/dist/rbac/role-service.d.ts +35 -32
- package/dist/rbac/role-service.d.ts.map +1 -1
- package/dist/rbac/role-service.js +210 -96
- package/dist/rbac/role-service.js.map +1 -1
- package/dist/rbac/slugs.d.ts +16 -27
- package/dist/rbac/slugs.d.ts.map +1 -1
- package/dist/rbac/slugs.js +36 -59
- package/dist/rbac/slugs.js.map +1 -1
- package/dist/rbac/types.d.ts +2 -4
- package/dist/rbac/types.d.ts.map +1 -1
- package/dist/rbac/types.js.map +1 -1
- package/dist/rbac/user-role-service.d.ts +23 -24
- package/dist/rbac/user-role-service.d.ts.map +1 -1
- package/dist/rbac/user-role-service.js +117 -61
- package/dist/rbac/user-role-service.js.map +1 -1
- package/dist/routes/applications.d.ts +4 -2
- package/dist/routes/applications.d.ts.map +1 -1
- package/dist/routes/applications.js +57 -19
- package/dist/routes/applications.js.map +1 -1
- package/dist/routes/audit.js +1 -1
- package/dist/routes/audit.js.map +1 -1
- package/dist/routes/branding.d.ts +3 -3
- package/dist/routes/branding.d.ts.map +1 -1
- package/dist/routes/branding.js +44 -16
- package/dist/routes/branding.js.map +1 -1
- package/dist/routes/bulk.d.ts +0 -5
- package/dist/routes/bulk.d.ts.map +1 -1
- package/dist/routes/bulk.js +3 -5
- package/dist/routes/bulk.js.map +1 -1
- package/dist/routes/clients.d.ts +4 -4
- package/dist/routes/clients.d.ts.map +1 -1
- package/dist/routes/clients.js +113 -52
- package/dist/routes/clients.js.map +1 -1
- package/dist/routes/config.d.ts +17 -12
- package/dist/routes/config.d.ts.map +1 -1
- package/dist/routes/config.js +165 -64
- package/dist/routes/config.js.map +1 -1
- package/dist/routes/custom-claims.d.ts.map +1 -1
- package/dist/routes/custom-claims.js +8 -2
- package/dist/routes/custom-claims.js.map +1 -1
- package/dist/routes/exports.d.ts +2 -1
- package/dist/routes/exports.d.ts.map +1 -1
- package/dist/routes/exports.js +57 -1
- package/dist/routes/exports.js.map +1 -1
- package/dist/routes/imports.d.ts +2 -2
- package/dist/routes/imports.d.ts.map +1 -1
- package/dist/routes/imports.js +95 -40
- package/dist/routes/imports.js.map +1 -1
- package/dist/routes/interactions.d.ts.map +1 -1
- package/dist/routes/interactions.js +113 -87
- package/dist/routes/interactions.js.map +1 -1
- package/dist/routes/invitation.d.ts.map +1 -1
- package/dist/routes/invitation.js +28 -27
- package/dist/routes/invitation.js.map +1 -1
- package/dist/routes/keys.d.ts.map +1 -1
- package/dist/routes/keys.js +26 -13
- package/dist/routes/keys.js.map +1 -1
- package/dist/routes/magic-link.d.ts.map +1 -1
- package/dist/routes/magic-link.js +5 -17
- package/dist/routes/magic-link.js.map +1 -1
- package/dist/routes/organizations.d.ts +1 -2
- package/dist/routes/organizations.d.ts.map +1 -1
- package/dist/routes/organizations.js +43 -104
- package/dist/routes/organizations.js.map +1 -1
- package/dist/routes/password-reset.d.ts.map +1 -1
- package/dist/routes/password-reset.js +13 -35
- package/dist/routes/password-reset.js.map +1 -1
- package/dist/routes/permissions.d.ts +1 -1
- package/dist/routes/permissions.d.ts.map +1 -1
- package/dist/routes/permissions.js +58 -17
- package/dist/routes/permissions.js.map +1 -1
- package/dist/routes/public-branding.d.ts +16 -0
- package/dist/routes/public-branding.d.ts.map +1 -0
- package/dist/routes/public-branding.js +52 -0
- package/dist/routes/public-branding.js.map +1 -0
- package/dist/routes/roles.d.ts +1 -1
- package/dist/routes/roles.d.ts.map +1 -1
- package/dist/routes/roles.js +63 -21
- package/dist/routes/roles.js.map +1 -1
- package/dist/routes/sessions.d.ts.map +1 -1
- package/dist/routes/sessions.js +23 -12
- package/dist/routes/sessions.js.map +1 -1
- package/dist/routes/two-factor.d.ts.map +1 -1
- package/dist/routes/two-factor.js +91 -38
- package/dist/routes/two-factor.js.map +1 -1
- package/dist/routes/user-roles.d.ts.map +1 -1
- package/dist/routes/user-roles.js +56 -9
- package/dist/routes/user-roles.js.map +1 -1
- package/dist/routes/users.d.ts +4 -8
- package/dist/routes/users.d.ts.map +1 -1
- package/dist/routes/users.js +108 -265
- package/dist/routes/users.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +53 -37
- package/dist/server.js.map +1 -1
- package/dist/two-factor/errors.d.ts +9 -0
- package/dist/two-factor/errors.d.ts.map +1 -1
- package/dist/two-factor/errors.js +12 -0
- package/dist/two-factor/errors.js.map +1 -1
- package/dist/two-factor/index.d.ts +5 -4
- package/dist/two-factor/index.d.ts.map +1 -1
- package/dist/two-factor/index.js +4 -4
- package/dist/two-factor/index.js.map +1 -1
- package/dist/two-factor/repository.d.ts +17 -6
- package/dist/two-factor/repository.d.ts.map +1 -1
- package/dist/two-factor/repository.js +37 -9
- package/dist/two-factor/repository.js.map +1 -1
- package/dist/two-factor/service.d.ts.map +1 -1
- package/dist/two-factor/service.js +26 -19
- package/dist/two-factor/service.js.map +1 -1
- package/dist/two-factor/totp.d.ts +13 -2
- package/dist/two-factor/totp.d.ts.map +1 -1
- package/dist/two-factor/totp.js +20 -7
- package/dist/two-factor/totp.js.map +1 -1
- package/dist/two-factor/types.d.ts +3 -0
- package/dist/two-factor/types.d.ts.map +1 -1
- package/dist/two-factor/types.js +5 -0
- package/dist/two-factor/types.js.map +1 -1
- package/dist/users/gdpr.d.ts +2 -40
- package/dist/users/gdpr.d.ts.map +1 -1
- package/dist/users/gdpr.js +3 -110
- package/dist/users/gdpr.js.map +1 -1
- package/dist/users/index.d.ts +5 -4
- package/dist/users/index.d.ts.map +1 -1
- package/dist/users/index.js +5 -4
- package/dist/users/index.js.map +1 -1
- package/dist/users/repository.d.ts +49 -3
- package/dist/users/repository.d.ts.map +1 -1
- package/dist/users/repository.js +169 -18
- package/dist/users/repository.js.map +1 -1
- package/dist/users/service.d.ts +19 -51
- package/dist/users/service.d.ts.map +1 -1
- package/dist/users/service.js +72 -122
- package/dist/users/service.js.map +1 -1
- package/dist/users/types.d.ts +4 -5
- package/dist/users/types.d.ts.map +1 -1
- package/dist/users/types.js.map +1 -1
- package/dist/users/validators.d.ts +28 -0
- package/dist/users/validators.d.ts.map +1 -0
- package/dist/users/validators.js +25 -0
- package/dist/users/validators.js.map +1 -0
- package/locales/default/en/errors.json +2 -1
- package/migrations/024_application_client_correction.sql +39 -0
- package/migrations/025_record_deletion_lifecycle.sql +26 -0
- package/migrations/026_simplify_user_lifecycle.sql +33 -0
- package/migrations/027_branding_asset_size_limits.sql +19 -0
- package/migrations/028_totp_replay_protection.sql +17 -0
- package/migrations/029_public_session_identifiers.sql +16 -0
- package/migrations/030_global_configuration_catalog.sql +39 -0
- package/migrations/031_monotonic_updated_at.sql +28 -0
- package/migrations/032_client_require_consent.sql +15 -0
- package/package.json +2 -2
- package/dist/lib/data-import-plan.d.ts +0 -50
- package/dist/lib/data-import-plan.d.ts.map +0 -1
- package/dist/lib/data-import-plan.js +0 -235
- package/dist/lib/data-import-plan.js.map +0 -1
- package/dist/lib/data-import.d.ts +0 -276
- package/dist/lib/data-import.d.ts.map +0 -1
- package/dist/lib/data-import.js +0 -1694
- package/dist/lib/data-import.js.map +0 -1
|
@@ -11,8 +11,6 @@
|
|
|
11
11
|
*
|
|
12
12
|
* Protected operations (all throw 403 Forbidden):
|
|
13
13
|
* - Delete
|
|
14
|
-
* - Suspend
|
|
15
|
-
* - Lock
|
|
16
14
|
* - Deactivate
|
|
17
15
|
* - Remove porta-super-admin role
|
|
18
16
|
* - Manage 2FA (disable, reset, regenerate recovery codes)
|
|
@@ -25,7 +23,8 @@ export declare const SUPER_ADMIN_USER_ID_KEY = "super_admin_user_id";
|
|
|
25
23
|
* Operations that are forbidden on the super-admin user.
|
|
26
24
|
* Used in error messages to clearly communicate what was attempted.
|
|
27
25
|
*/
|
|
28
|
-
export declare const PROTECTED_OPERATIONS: readonly ['delete', '
|
|
26
|
+
export declare const PROTECTED_OPERATIONS: readonly ['delete', 'deactivate', 'remove-super-admin-role', 'manage-2fa'];
|
|
27
|
+
/** Destructive operations that cannot target the bootstrap administrator. */
|
|
29
28
|
export type ProtectedOperation = (typeof PROTECTED_OPERATIONS)[number];
|
|
30
29
|
/**
|
|
31
30
|
* Check if a user is the protected super-admin user.
|
|
@@ -47,6 +46,7 @@ export declare class SuperAdminProtectionError extends Error {
|
|
|
47
46
|
readonly status = 403;
|
|
48
47
|
/** The operation that was attempted */
|
|
49
48
|
readonly operation: ProtectedOperation;
|
|
49
|
+
/** Create the public rejection for an attempted protected operation. */
|
|
50
50
|
constructor(operation: ProtectedOperation);
|
|
51
51
|
}
|
|
52
52
|
/**
|
|
@@ -54,8 +54,8 @@ export declare class SuperAdminProtectionError extends Error {
|
|
|
54
54
|
*
|
|
55
55
|
* Call this before executing any destructive operation on a user:
|
|
56
56
|
* ```typescript
|
|
57
|
-
* await guardSuperAdmin(userId, '
|
|
58
|
-
* // ... proceed with
|
|
57
|
+
* await guardSuperAdmin(userId, 'deactivate');
|
|
58
|
+
* // ... proceed with deactivation
|
|
59
59
|
* ```
|
|
60
60
|
*
|
|
61
61
|
* If the user is not the super-admin, this function is a no-op.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"super-admin-protection.d.ts","sourceRoot":"","sources":["../../src/lib/super-admin-protection.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"super-admin-protection.d.ts","sourceRoot":"","sources":["../../src/lib/super-admin-protection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,gEAAgE;AAChE,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;AAE7D;;;GAGG;AACH,eAAO,MAAM,oBAAoB,YAC/B,QAAQ,EACR,YAAY,EACZ,yBAAyB,EACzB,YAAY,CACJ,CAAC;AAEX,6EAA6E;AAC7E,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAMvE;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQvE;AAMD;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,oCAAoC;IACpC,QAAQ,CAAC,MAAM,OAAO;IACtB,uCAAuC;IACvC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IAEvC,wEAAwE;IACxE,YAAY,SAAS,EAAE,kBAAkB,EAIxC;CACF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,kBAAkB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAKf"}
|
|
@@ -11,15 +11,13 @@
|
|
|
11
11
|
*
|
|
12
12
|
* Protected operations (all throw 403 Forbidden):
|
|
13
13
|
* - Delete
|
|
14
|
-
* - Suspend
|
|
15
|
-
* - Lock
|
|
16
14
|
* - Deactivate
|
|
17
15
|
* - Remove porta-super-admin role
|
|
18
16
|
* - Manage 2FA (disable, reset, regenerate recovery codes)
|
|
19
17
|
*
|
|
20
18
|
* @module lib/super-admin-protection
|
|
21
19
|
*/
|
|
22
|
-
import {
|
|
20
|
+
import { getInternalSystemConfigString } from './system-config.js';
|
|
23
21
|
// ============================================================================
|
|
24
22
|
// Constants
|
|
25
23
|
// ============================================================================
|
|
@@ -31,8 +29,6 @@ export const SUPER_ADMIN_USER_ID_KEY = 'super_admin_user_id';
|
|
|
31
29
|
*/
|
|
32
30
|
export const PROTECTED_OPERATIONS = [
|
|
33
31
|
'delete',
|
|
34
|
-
'suspend',
|
|
35
|
-
'lock',
|
|
36
32
|
'deactivate',
|
|
37
33
|
'remove-super-admin-role',
|
|
38
34
|
'manage-2fa',
|
|
@@ -51,9 +47,9 @@ export const PROTECTED_OPERATIONS = [
|
|
|
51
47
|
* @returns true if the user is the super-admin
|
|
52
48
|
*/
|
|
53
49
|
export async function isSuperAdminUser(userId) {
|
|
54
|
-
//
|
|
50
|
+
// The internal reader returns the fallback when the key doesn't exist.
|
|
55
51
|
// Empty string fallback means: if no super-admin is configured, nobody matches.
|
|
56
|
-
const superAdminUserId = await
|
|
52
|
+
const superAdminUserId = await getInternalSystemConfigString(SUPER_ADMIN_USER_ID_KEY, '');
|
|
57
53
|
if (!superAdminUserId) {
|
|
58
54
|
return false;
|
|
59
55
|
}
|
|
@@ -71,6 +67,7 @@ export class SuperAdminProtectionError extends Error {
|
|
|
71
67
|
status = 403;
|
|
72
68
|
/** The operation that was attempted */
|
|
73
69
|
operation;
|
|
70
|
+
/** Create the public rejection for an attempted protected operation. */
|
|
74
71
|
constructor(operation) {
|
|
75
72
|
super(`Cannot ${operation} the super-admin user`);
|
|
76
73
|
this.name = 'SuperAdminProtectionError';
|
|
@@ -82,8 +79,8 @@ export class SuperAdminProtectionError extends Error {
|
|
|
82
79
|
*
|
|
83
80
|
* Call this before executing any destructive operation on a user:
|
|
84
81
|
* ```typescript
|
|
85
|
-
* await guardSuperAdmin(userId, '
|
|
86
|
-
* // ... proceed with
|
|
82
|
+
* await guardSuperAdmin(userId, 'deactivate');
|
|
83
|
+
* // ... proceed with deactivation
|
|
87
84
|
* ```
|
|
88
85
|
*
|
|
89
86
|
* If the user is not the super-admin, this function is a no-op.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"super-admin-protection.js","sourceRoot":"","sources":["../../src/lib/super-admin-protection.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"super-admin-protection.js","sourceRoot":"","sources":["../../src/lib/super-admin-protection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AAEnE,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,gEAAgE;AAChE,MAAM,CAAC,MAAM,uBAAuB,GAAG,qBAAqB,CAAC;AAE7D;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,QAAQ;IACR,YAAY;IACZ,yBAAyB;IACzB,YAAY;CACJ,CAAC;AAKX,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAc;IACnD,uEAAuE;IACvE,gFAAgF;IAChF,MAAM,gBAAgB,GAAG,MAAM,6BAA6B,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;IAC1F,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,gBAAgB,KAAK,MAAM,CAAC;AACrC,CAAC;AAED,+EAA+E;AAC/E,QAAQ;AACR,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAClD,oCAAoC;IAC3B,MAAM,GAAG,GAAG,CAAC;IACtB,uCAAuC;IAC9B,SAAS,CAAqB;IAEvC,wEAAwE;IACxE,YAAY,SAA6B;QACvC,KAAK,CAAC,UAAU,SAAS,uBAAuB,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAc,EACd,SAA6B;IAE7B,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/** Closed operational policy. Database rows own values, never these definitions or defaults. */
|
|
2
|
+
/** Locales for which Porta ships every authentication namespace. */
|
|
3
|
+
export declare const SUPPORTED_LOCALES: readonly ["en"];
|
|
4
|
+
/** A completely packaged authentication locale. */
|
|
5
|
+
export type SupportedLocale = (typeof SUPPORTED_LOCALES)[number];
|
|
6
|
+
/** Administrative tab containing a policy field. */
|
|
7
|
+
export type SystemConfigGroup = 'lifetimes' | 'rate-limits' | 'lockout' | 'general';
|
|
8
|
+
/** Whether a saved value is read at runtime or only during provider construction. */
|
|
9
|
+
export type SystemConfigApplicationMode = 'runtime' | 'restart-required';
|
|
10
|
+
/** Native JSON scalar kind accepted by a policy field. */
|
|
11
|
+
export type SystemConfigValueType = 'integer' | 'string';
|
|
12
|
+
/** Unit used to explain a native policy value without changing its representation. */
|
|
13
|
+
export type SystemConfigUnit = 'seconds' | 'attempts' | 'days' | 'locale';
|
|
14
|
+
/** Valid native operational policy; locale strings must be completely packaged. */
|
|
15
|
+
export type SystemConfigValue = number | SupportedLocale;
|
|
16
|
+
/**
|
|
17
|
+
* Immutable public policy in administrative display order. Bootstrap settings and secrets are
|
|
18
|
+
* deliberately absent; adding a field requires an explicit application change and migration.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* const defaults = SYSTEM_CONFIG_CATALOG.map(({ key, defaultValue }) => [key, defaultValue]);
|
|
22
|
+
*/
|
|
23
|
+
export declare const SYSTEM_CONFIG_CATALOG: readonly [Readonly<{
|
|
24
|
+
key: "access_token_ttl";
|
|
25
|
+
group: SystemConfigGroup;
|
|
26
|
+
label: string;
|
|
27
|
+
description: string;
|
|
28
|
+
valueType: 'integer';
|
|
29
|
+
unit: "attempts" | "days" | "seconds";
|
|
30
|
+
defaultValue: number;
|
|
31
|
+
minimum: number;
|
|
32
|
+
maximum: number;
|
|
33
|
+
applicationMode: SystemConfigApplicationMode;
|
|
34
|
+
}>, Readonly<{
|
|
35
|
+
key: "id_token_ttl";
|
|
36
|
+
group: SystemConfigGroup;
|
|
37
|
+
label: string;
|
|
38
|
+
description: string;
|
|
39
|
+
valueType: 'integer';
|
|
40
|
+
unit: "attempts" | "days" | "seconds";
|
|
41
|
+
defaultValue: number;
|
|
42
|
+
minimum: number;
|
|
43
|
+
maximum: number;
|
|
44
|
+
applicationMode: SystemConfigApplicationMode;
|
|
45
|
+
}>, Readonly<{
|
|
46
|
+
key: "refresh_token_ttl";
|
|
47
|
+
group: SystemConfigGroup;
|
|
48
|
+
label: string;
|
|
49
|
+
description: string;
|
|
50
|
+
valueType: 'integer';
|
|
51
|
+
unit: "attempts" | "days" | "seconds";
|
|
52
|
+
defaultValue: number;
|
|
53
|
+
minimum: number;
|
|
54
|
+
maximum: number;
|
|
55
|
+
applicationMode: SystemConfigApplicationMode;
|
|
56
|
+
}>, Readonly<{
|
|
57
|
+
key: "authorization_code_ttl";
|
|
58
|
+
group: SystemConfigGroup;
|
|
59
|
+
label: string;
|
|
60
|
+
description: string;
|
|
61
|
+
valueType: 'integer';
|
|
62
|
+
unit: "attempts" | "days" | "seconds";
|
|
63
|
+
defaultValue: number;
|
|
64
|
+
minimum: number;
|
|
65
|
+
maximum: number;
|
|
66
|
+
applicationMode: SystemConfigApplicationMode;
|
|
67
|
+
}>, Readonly<{
|
|
68
|
+
key: "session_ttl";
|
|
69
|
+
group: SystemConfigGroup;
|
|
70
|
+
label: string;
|
|
71
|
+
description: string;
|
|
72
|
+
valueType: 'integer';
|
|
73
|
+
unit: "attempts" | "days" | "seconds";
|
|
74
|
+
defaultValue: number;
|
|
75
|
+
minimum: number;
|
|
76
|
+
maximum: number;
|
|
77
|
+
applicationMode: SystemConfigApplicationMode;
|
|
78
|
+
}>, Readonly<{
|
|
79
|
+
key: "magic_link_ttl";
|
|
80
|
+
group: SystemConfigGroup;
|
|
81
|
+
label: string;
|
|
82
|
+
description: string;
|
|
83
|
+
valueType: 'integer';
|
|
84
|
+
unit: "attempts" | "days" | "seconds";
|
|
85
|
+
defaultValue: number;
|
|
86
|
+
minimum: number;
|
|
87
|
+
maximum: number;
|
|
88
|
+
applicationMode: SystemConfigApplicationMode;
|
|
89
|
+
}>, Readonly<{
|
|
90
|
+
key: "password_reset_ttl";
|
|
91
|
+
group: SystemConfigGroup;
|
|
92
|
+
label: string;
|
|
93
|
+
description: string;
|
|
94
|
+
valueType: 'integer';
|
|
95
|
+
unit: "attempts" | "days" | "seconds";
|
|
96
|
+
defaultValue: number;
|
|
97
|
+
minimum: number;
|
|
98
|
+
maximum: number;
|
|
99
|
+
applicationMode: SystemConfigApplicationMode;
|
|
100
|
+
}>, Readonly<{
|
|
101
|
+
key: "invitation_ttl";
|
|
102
|
+
group: SystemConfigGroup;
|
|
103
|
+
label: string;
|
|
104
|
+
description: string;
|
|
105
|
+
valueType: 'integer';
|
|
106
|
+
unit: "attempts" | "days" | "seconds";
|
|
107
|
+
defaultValue: number;
|
|
108
|
+
minimum: number;
|
|
109
|
+
maximum: number;
|
|
110
|
+
applicationMode: SystemConfigApplicationMode;
|
|
111
|
+
}>, Readonly<{
|
|
112
|
+
key: "rate_limit_login_max";
|
|
113
|
+
group: SystemConfigGroup;
|
|
114
|
+
label: string;
|
|
115
|
+
description: string;
|
|
116
|
+
valueType: 'integer';
|
|
117
|
+
unit: "attempts" | "days" | "seconds";
|
|
118
|
+
defaultValue: number;
|
|
119
|
+
minimum: number;
|
|
120
|
+
maximum: number;
|
|
121
|
+
applicationMode: SystemConfigApplicationMode;
|
|
122
|
+
}>, Readonly<{
|
|
123
|
+
key: "rate_limit_login_window";
|
|
124
|
+
group: SystemConfigGroup;
|
|
125
|
+
label: string;
|
|
126
|
+
description: string;
|
|
127
|
+
valueType: 'integer';
|
|
128
|
+
unit: "attempts" | "days" | "seconds";
|
|
129
|
+
defaultValue: number;
|
|
130
|
+
minimum: number;
|
|
131
|
+
maximum: number;
|
|
132
|
+
applicationMode: SystemConfigApplicationMode;
|
|
133
|
+
}>, Readonly<{
|
|
134
|
+
key: "rate_limit_magic_link_max";
|
|
135
|
+
group: SystemConfigGroup;
|
|
136
|
+
label: string;
|
|
137
|
+
description: string;
|
|
138
|
+
valueType: 'integer';
|
|
139
|
+
unit: "attempts" | "days" | "seconds";
|
|
140
|
+
defaultValue: number;
|
|
141
|
+
minimum: number;
|
|
142
|
+
maximum: number;
|
|
143
|
+
applicationMode: SystemConfigApplicationMode;
|
|
144
|
+
}>, Readonly<{
|
|
145
|
+
key: "rate_limit_magic_link_window";
|
|
146
|
+
group: SystemConfigGroup;
|
|
147
|
+
label: string;
|
|
148
|
+
description: string;
|
|
149
|
+
valueType: 'integer';
|
|
150
|
+
unit: "attempts" | "days" | "seconds";
|
|
151
|
+
defaultValue: number;
|
|
152
|
+
minimum: number;
|
|
153
|
+
maximum: number;
|
|
154
|
+
applicationMode: SystemConfigApplicationMode;
|
|
155
|
+
}>, Readonly<{
|
|
156
|
+
key: "rate_limit_password_reset_max";
|
|
157
|
+
group: SystemConfigGroup;
|
|
158
|
+
label: string;
|
|
159
|
+
description: string;
|
|
160
|
+
valueType: 'integer';
|
|
161
|
+
unit: "attempts" | "days" | "seconds";
|
|
162
|
+
defaultValue: number;
|
|
163
|
+
minimum: number;
|
|
164
|
+
maximum: number;
|
|
165
|
+
applicationMode: SystemConfigApplicationMode;
|
|
166
|
+
}>, Readonly<{
|
|
167
|
+
key: "rate_limit_password_reset_window";
|
|
168
|
+
group: SystemConfigGroup;
|
|
169
|
+
label: string;
|
|
170
|
+
description: string;
|
|
171
|
+
valueType: 'integer';
|
|
172
|
+
unit: "attempts" | "days" | "seconds";
|
|
173
|
+
defaultValue: number;
|
|
174
|
+
minimum: number;
|
|
175
|
+
maximum: number;
|
|
176
|
+
applicationMode: SystemConfigApplicationMode;
|
|
177
|
+
}>, Readonly<{
|
|
178
|
+
key: "max_failed_logins";
|
|
179
|
+
group: SystemConfigGroup;
|
|
180
|
+
label: string;
|
|
181
|
+
description: string;
|
|
182
|
+
valueType: 'integer';
|
|
183
|
+
unit: "attempts" | "days" | "seconds";
|
|
184
|
+
defaultValue: number;
|
|
185
|
+
minimum: number;
|
|
186
|
+
maximum: number;
|
|
187
|
+
applicationMode: SystemConfigApplicationMode;
|
|
188
|
+
}>, Readonly<{
|
|
189
|
+
key: "lockout_duration_seconds";
|
|
190
|
+
group: SystemConfigGroup;
|
|
191
|
+
label: string;
|
|
192
|
+
description: string;
|
|
193
|
+
valueType: 'integer';
|
|
194
|
+
unit: "attempts" | "days" | "seconds";
|
|
195
|
+
defaultValue: number;
|
|
196
|
+
minimum: number;
|
|
197
|
+
maximum: number;
|
|
198
|
+
applicationMode: SystemConfigApplicationMode;
|
|
199
|
+
}>, Readonly<{
|
|
200
|
+
key: "audit_retention_days";
|
|
201
|
+
group: SystemConfigGroup;
|
|
202
|
+
label: string;
|
|
203
|
+
description: string;
|
|
204
|
+
valueType: 'integer';
|
|
205
|
+
unit: "attempts" | "days" | "seconds";
|
|
206
|
+
defaultValue: number;
|
|
207
|
+
minimum: number;
|
|
208
|
+
maximum: number;
|
|
209
|
+
applicationMode: SystemConfigApplicationMode;
|
|
210
|
+
}>, Readonly<{
|
|
211
|
+
readonly key: 'default_locale';
|
|
212
|
+
readonly group: 'general';
|
|
213
|
+
readonly label: 'Default locale';
|
|
214
|
+
readonly description: 'Final locale fallback used by the authentication UI.';
|
|
215
|
+
readonly valueType: 'string';
|
|
216
|
+
readonly unit: 'locale';
|
|
217
|
+
readonly defaultValue: 'en';
|
|
218
|
+
readonly allowedValues: readonly ["en"];
|
|
219
|
+
readonly applicationMode: 'runtime';
|
|
220
|
+
}>];
|
|
221
|
+
/** Exact public keys, derived from the same catalog used by runtime and administrative readers. */
|
|
222
|
+
export type SystemConfigKey = (typeof SYSTEM_CONFIG_CATALOG)[number]['key'];
|
|
223
|
+
/** Public keys whose native values are integers. */
|
|
224
|
+
export type NumericSystemConfigKey = Exclude<SystemConfigKey, 'default_locale'>;
|
|
225
|
+
/** Application-owned metadata for one editable operational-policy field. */
|
|
226
|
+
export interface SystemConfigDefinition {
|
|
227
|
+
/** Closed identifier used in storage and requests. */
|
|
228
|
+
readonly key: SystemConfigKey;
|
|
229
|
+
/** Administrative tab to which this field belongs. */
|
|
230
|
+
readonly group: SystemConfigGroup;
|
|
231
|
+
/** Human-readable field caption. */
|
|
232
|
+
readonly label: string;
|
|
233
|
+
/** Operational effect explained without infrastructure details. */
|
|
234
|
+
readonly description: string;
|
|
235
|
+
/** Accepted native JSON scalar kind. */
|
|
236
|
+
readonly valueType: SystemConfigValueType;
|
|
237
|
+
/** Unit of the stored value. */
|
|
238
|
+
readonly unit: SystemConfigUnit;
|
|
239
|
+
/** Safe runtime fallback when storage is missing, invalid or unavailable. */
|
|
240
|
+
readonly defaultValue: SystemConfigValue;
|
|
241
|
+
/** Inclusive lower bound for integer fields. */
|
|
242
|
+
readonly minimum?: number;
|
|
243
|
+
/** Inclusive upper bound for integer fields. */
|
|
244
|
+
readonly maximum?: number;
|
|
245
|
+
/** Completely supported values for a locale field. */
|
|
246
|
+
readonly allowedValues?: readonly SupportedLocale[];
|
|
247
|
+
/** Whether every provider instance must restart after saving this field. */
|
|
248
|
+
readonly applicationMode: SystemConfigApplicationMode;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Resolve an untrusted name without querying whether an internal database row exists.
|
|
252
|
+
* @param key - Exact, case-sensitive name; no trimming or normalization is performed.
|
|
253
|
+
* @returns Public definition, or undefined for every non-catalog name.
|
|
254
|
+
* @example
|
|
255
|
+
* findSystemConfigDefinition('magic_link_ttl')?.defaultValue; // 900
|
|
256
|
+
*/
|
|
257
|
+
export declare function findSystemConfigDefinition(key: string): SystemConfigDefinition | undefined;
|
|
258
|
+
/**
|
|
259
|
+
* Validate submitted or stored policy without coercion. Numeric text and unsupported locales fail.
|
|
260
|
+
* @param definition - Application-owned public metadata.
|
|
261
|
+
* @param value - Untrusted native value from JSON or PostgreSQL.
|
|
262
|
+
* @returns The same valid scalar, or undefined when its type or bounds are wrong.
|
|
263
|
+
* @example
|
|
264
|
+
* const definition = findSystemConfigDefinition('magic_link_ttl');
|
|
265
|
+
* if (definition) validateSystemConfigValue(definition, 1200); // 1200
|
|
266
|
+
*/
|
|
267
|
+
export declare function validateSystemConfigValue(definition: SystemConfigDefinition, value: unknown): SystemConfigValue | undefined;
|
|
268
|
+
//# sourceMappingURL=system-config-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-config-catalog.d.ts","sourceRoot":"","sources":["../../src/lib/system-config-catalog.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAEhG,oEAAoE;AACpE,eAAO,MAAM,iBAAiB,iBAAiC,CAAC;AAEhE,mDAAmD;AACnD,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,oDAAoD;AACpD,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,GAAG,SAAS,CAAC;AAEpF,qFAAqF;AACrF,MAAM,MAAM,2BAA2B,GAAG,SAAS,GAAG,kBAAkB,CAAC;AAEzE,0DAA0D;AAC1D,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEzD,sFAAsF;AACtF,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE1E,mFAAmF;AACnF,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,eAAe,CAAC;AA4BzD;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB;;;;;eAhBnB,SAAS;;;;;;;;;;;eAAT,SAAS;;;;;;;;;;;eAAT,SAAS;;;;;;;;;;;eAAT,SAAS;;;;;;;;;;;eAAT,SAAS;;;;;;;;;;;eAAT,SAAS;;;;;;;;;;;eAAT,SAAS;;;;;;;;;;;eAAT,SAAS;;;;;;;;;;;eAAT,SAAS;;;;;;;;;;;eAAT,SAAS;;;;;;;;;;;eAAT,SAAS;;;;;;;;;;;eAAT,SAAS;;;;;;;;;;;eAAT,SAAS;;;;;;;;;;;eAAT,SAAS;;;;;;;;;;;eAAT,SAAS;;;;;;;;;;;eAAT,SAAS;;;;;;;;;;;eAAT,SAAS;;;;;;;kBAiMf,gBAAgB;oBACd,SAAS;oBACT,gBAAgB;0BACV,sDAAsD;wBACxD,QAAQ;mBACb,QAAQ;2BACA,IAAI;;8BAED,SAAS;GAEnB,CAAC;AAEZ,mGAAmG;AACnG,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;AAE5E,oDAAoD;AACpD,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;AAEhF,4EAA4E;AAC5E,MAAM,WAAW,sBAAsB;IACrC,sDAAsD;IACtD,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;IAC9B,sDAAsD;IACtD,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAClC,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,wCAAwC;IACxC,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC1C,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,6EAA6E;IAC7E,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,gDAAgD;IAChD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,gDAAgD;IAChD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,sDAAsD;IACtD,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACpD,4EAA4E;IAC5E,QAAQ,CAAC,eAAe,EAAE,2BAA2B,CAAC;CACvD;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS,CAE1F;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,sBAAsB,EAClC,KAAK,EAAE,OAAO,GACb,iBAAiB,GAAG,SAAS,CAe/B"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/** Closed operational policy. Database rows own values, never these definitions or defaults. */
|
|
2
|
+
/** Locales for which Porta ships every authentication namespace. */
|
|
3
|
+
export const SUPPORTED_LOCALES = Object.freeze(['en']);
|
|
4
|
+
/** Build a frozen integer definition while preserving its literal key for typed callers. */
|
|
5
|
+
function integerDefinition(key, group, label, description, unit, defaultValue, minimum, maximum, applicationMode = 'runtime') {
|
|
6
|
+
return Object.freeze({
|
|
7
|
+
key,
|
|
8
|
+
group,
|
|
9
|
+
label,
|
|
10
|
+
description,
|
|
11
|
+
valueType: 'integer',
|
|
12
|
+
unit,
|
|
13
|
+
defaultValue,
|
|
14
|
+
minimum,
|
|
15
|
+
maximum,
|
|
16
|
+
applicationMode,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Immutable public policy in administrative display order. Bootstrap settings and secrets are
|
|
21
|
+
* deliberately absent; adding a field requires an explicit application change and migration.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* const defaults = SYSTEM_CONFIG_CATALOG.map(({ key, defaultValue }) => [key, defaultValue]);
|
|
25
|
+
*/
|
|
26
|
+
export const SYSTEM_CONFIG_CATALOG = Object.freeze([
|
|
27
|
+
integerDefinition('access_token_ttl', 'lifetimes', 'Access token lifetime', 'How long newly issued access tokens remain valid.', 'seconds', 3600, 60, 86400, 'restart-required'),
|
|
28
|
+
integerDefinition('id_token_ttl', 'lifetimes', 'ID token lifetime', 'How long newly issued ID tokens remain valid.', 'seconds', 3600, 60, 86400, 'restart-required'),
|
|
29
|
+
integerDefinition('refresh_token_ttl', 'lifetimes', 'Refresh token lifetime', 'How long newly issued refresh tokens remain valid.', 'seconds', 2592000, 300, 31536000, 'restart-required'),
|
|
30
|
+
integerDefinition('authorization_code_ttl', 'lifetimes', 'Authorization code lifetime', 'How long a newly issued authorization code remains valid.', 'seconds', 600, 30, 3600, 'restart-required'),
|
|
31
|
+
integerDefinition('session_ttl', 'lifetimes', 'Session lifetime', 'How long newly created OIDC sessions remain valid.', 'seconds', 86400, 300, 2592000, 'restart-required'),
|
|
32
|
+
integerDefinition('magic_link_ttl', 'lifetimes', 'Magic-link lifetime', 'How long a newly created magic-link token remains valid.', 'seconds', 900, 60, 3600),
|
|
33
|
+
integerDefinition('password_reset_ttl', 'lifetimes', 'Password-reset lifetime', 'How long a newly created password-reset token remains valid.', 'seconds', 3600, 300, 86400),
|
|
34
|
+
integerDefinition('invitation_ttl', 'lifetimes', 'Invitation lifetime', 'How long a newly created user invitation remains valid.', 'seconds', 604800, 300, 2592000),
|
|
35
|
+
integerDefinition('rate_limit_login_max', 'rate-limits', 'Login attempt limit', 'Maximum login attempts allowed in one login window.', 'attempts', 10, 1, 100),
|
|
36
|
+
integerDefinition('rate_limit_login_window', 'rate-limits', 'Login window', 'Window used to count login attempts.', 'seconds', 900, 60, 86400),
|
|
37
|
+
integerDefinition('rate_limit_magic_link_max', 'rate-limits', 'Magic-link request limit', 'Maximum magic-link requests allowed in one window.', 'attempts', 5, 1, 100),
|
|
38
|
+
integerDefinition('rate_limit_magic_link_window', 'rate-limits', 'Magic-link request window', 'Window used to count magic-link requests.', 'seconds', 900, 60, 86400),
|
|
39
|
+
integerDefinition('rate_limit_password_reset_max', 'rate-limits', 'Password-reset request limit', 'Maximum password-reset requests allowed in one window.', 'attempts', 5, 1, 100),
|
|
40
|
+
integerDefinition('rate_limit_password_reset_window', 'rate-limits', 'Password-reset request window', 'Window used to count password-reset requests.', 'seconds', 900, 60, 86400),
|
|
41
|
+
integerDefinition('max_failed_logins', 'lockout', 'Failed login limit', 'Failed login count that activates automatic lockout.', 'attempts', 5, 1, 100),
|
|
42
|
+
integerDefinition('lockout_duration_seconds', 'lockout', 'Lockout duration', 'Duration applied when automatic lockout eligibility is checked.', 'seconds', 900, 60, 604800),
|
|
43
|
+
integerDefinition('audit_retention_days', 'general', 'Audit retention', 'Default number of days retained by audit cleanup.', 'days', 90, 1, 3650),
|
|
44
|
+
Object.freeze({
|
|
45
|
+
key: 'default_locale',
|
|
46
|
+
group: 'general',
|
|
47
|
+
label: 'Default locale',
|
|
48
|
+
description: 'Final locale fallback used by the authentication UI.',
|
|
49
|
+
valueType: 'string',
|
|
50
|
+
unit: 'locale',
|
|
51
|
+
defaultValue: 'en',
|
|
52
|
+
allowedValues: SUPPORTED_LOCALES,
|
|
53
|
+
applicationMode: 'runtime',
|
|
54
|
+
}),
|
|
55
|
+
]);
|
|
56
|
+
/**
|
|
57
|
+
* Resolve an untrusted name without querying whether an internal database row exists.
|
|
58
|
+
* @param key - Exact, case-sensitive name; no trimming or normalization is performed.
|
|
59
|
+
* @returns Public definition, or undefined for every non-catalog name.
|
|
60
|
+
* @example
|
|
61
|
+
* findSystemConfigDefinition('magic_link_ttl')?.defaultValue; // 900
|
|
62
|
+
*/
|
|
63
|
+
export function findSystemConfigDefinition(key) {
|
|
64
|
+
return SYSTEM_CONFIG_CATALOG.find((definition) => definition.key === key);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Validate submitted or stored policy without coercion. Numeric text and unsupported locales fail.
|
|
68
|
+
* @param definition - Application-owned public metadata.
|
|
69
|
+
* @param value - Untrusted native value from JSON or PostgreSQL.
|
|
70
|
+
* @returns The same valid scalar, or undefined when its type or bounds are wrong.
|
|
71
|
+
* @example
|
|
72
|
+
* const definition = findSystemConfigDefinition('magic_link_ttl');
|
|
73
|
+
* if (definition) validateSystemConfigValue(definition, 1200); // 1200
|
|
74
|
+
*/
|
|
75
|
+
export function validateSystemConfigValue(definition, value) {
|
|
76
|
+
if (definition.valueType === 'integer') {
|
|
77
|
+
if (typeof value !== 'number' ||
|
|
78
|
+
!Number.isInteger(value) ||
|
|
79
|
+
definition.minimum === undefined ||
|
|
80
|
+
definition.maximum === undefined ||
|
|
81
|
+
value < definition.minimum ||
|
|
82
|
+
value > definition.maximum)
|
|
83
|
+
return undefined;
|
|
84
|
+
return value;
|
|
85
|
+
}
|
|
86
|
+
if (typeof value !== 'string')
|
|
87
|
+
return undefined;
|
|
88
|
+
return definition.allowedValues?.find((locale) => locale === value);
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=system-config-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-config-catalog.js","sourceRoot":"","sources":["../../src/lib/system-config-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* System configuration service — reads runtime settings from the system_config table.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Found values are cached in-memory for 60 seconds to minimize database queries.
|
|
5
5
|
* The cache is shared across all requests within the process.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* native JSONB types. The typed getters handle parsing and coercion for each type.
|
|
7
|
+
* Public values use native JSONB scalars and the immutable catalog's validation and defaults.
|
|
8
|
+
* No coercion is performed. Missing, invalid or unavailable policy uses a bounded safe warning.
|
|
10
9
|
*
|
|
11
10
|
* @example
|
|
12
|
-
* const ttl = await getSystemConfigNumber('access_token_ttl'
|
|
13
|
-
* const secure = await getSystemConfigBoolean('cookie_secure', true);
|
|
11
|
+
* const ttl = await getSystemConfigNumber('access_token_ttl');
|
|
14
12
|
* const allTtls = await loadOidcTtlConfig();
|
|
15
13
|
*/
|
|
14
|
+
import type { NumericSystemConfigKey, SupportedLocale } from './system-config-catalog.js';
|
|
16
15
|
/** OIDC TTL configuration loaded from system_config table */
|
|
17
16
|
export interface OidcTtlConfig {
|
|
18
17
|
/** Access token lifetime in seconds (default: 3600 = 1 hour) */
|
|
@@ -31,40 +30,37 @@ export interface OidcTtlConfig {
|
|
|
31
30
|
grant: number;
|
|
32
31
|
}
|
|
33
32
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* @
|
|
37
|
-
* @
|
|
38
|
-
* @
|
|
33
|
+
* Read a native, bounded integer or its exact catalog default, without caller-owned fallbacks.
|
|
34
|
+
* @param key - Public integer policy key.
|
|
35
|
+
* @returns Valid stored integer or the same catalog's safe default.
|
|
36
|
+
* @throws Error when JavaScript callers supply a non-numeric or non-catalog key.
|
|
37
|
+
* @example
|
|
38
|
+
* await getSystemConfigNumber('magic_link_ttl'); // seconds
|
|
39
39
|
*/
|
|
40
|
-
export declare function
|
|
40
|
+
export declare function getSystemConfigNumber(key: NumericSystemConfigKey): Promise<number>;
|
|
41
41
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* @param key - Config key (e.g., 'access_token_ttl')
|
|
49
|
-
* @param fallback - Default value returned if key not found or not a valid number
|
|
50
|
-
* @returns The config value as a number, or the fallback
|
|
42
|
+
* Read the final authentication locale fallback without coercing arbitrary database content.
|
|
43
|
+
* @param key - The closed public locale key.
|
|
44
|
+
* @returns Completely supported stored locale or its catalog default.
|
|
45
|
+
* @throws Error when JavaScript callers supply a non-locale or non-catalog key.
|
|
46
|
+
* @example
|
|
47
|
+
* await getSystemConfigString('default_locale'); // 'en'
|
|
51
48
|
*/
|
|
52
|
-
export declare function
|
|
49
|
+
export declare function getSystemConfigString(key: 'default_locale'): Promise<SupportedLocale>;
|
|
53
50
|
/**
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
* @
|
|
60
|
-
*
|
|
61
|
-
* @returns The config value as a boolean, or the fallback
|
|
51
|
+
* Read trusted internal string rows independently of public operational policy. Internal rows
|
|
52
|
+
* never enter administrative projections, and raw exceptions or stored content are not logged.
|
|
53
|
+
* @param key - Internal name supplied by Porta code, not by an administrative request.
|
|
54
|
+
* @param fallback - Safe result when storage is absent, unavailable or not a native string.
|
|
55
|
+
* @returns Native internal string, or the supplied fallback.
|
|
56
|
+
* @example
|
|
57
|
+
* await getInternalSystemConfigString('super_admin_user_id', '');
|
|
62
58
|
*/
|
|
63
|
-
export declare function
|
|
59
|
+
export declare function getInternalSystemConfigString(key: string, fallback: string): Promise<string>;
|
|
64
60
|
/**
|
|
65
61
|
* Load all TTL config values needed by the OIDC provider.
|
|
66
62
|
*
|
|
67
|
-
* Reads each TTL
|
|
63
|
+
* Reads each native TTL through the same catalog used by administrative policy.
|
|
68
64
|
* Called once at provider initialization to build the TTL configuration.
|
|
69
65
|
* The interaction TTL is hardcoded (not stored in system_config).
|
|
70
66
|
*
|
|
@@ -73,7 +69,8 @@ export declare function getSystemConfigBoolean(key: string, fallback: boolean):
|
|
|
73
69
|
export declare function loadOidcTtlConfig(): Promise<OidcTtlConfig>;
|
|
74
70
|
/**
|
|
75
71
|
* Clear the in-memory config cache.
|
|
76
|
-
*
|
|
72
|
+
* Successful administrative saves call this after commit. Replacing the map also isolates
|
|
73
|
+
* reads already awaiting PostgreSQL, so their later completion cannot restore stale policy.
|
|
77
74
|
*/
|
|
78
75
|
export declare function clearSystemConfigCache(): void;
|
|
79
76
|
//# sourceMappingURL=system-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-config.d.ts","sourceRoot":"","sources":["../../src/lib/system-config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"system-config.d.ts","sourceRoot":"","sources":["../../src/lib/system-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EACV,sBAAsB,EACtB,eAAe,EAGhB,MAAM,4BAA4B,CAAC;AAUpC,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,iGAAiG;IACjG,WAAW,EAAE,MAAM,CAAC;IACpB,qFAAqF;IACrF,KAAK,EAAE,MAAM,CAAC;CACf;AA+DD;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAIxF;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAI3F;AAED;;;;;;;;GAQG;AACH,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,aAAa,CAAC,CAoBhE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
|