@portaidentity/server 1.7.3 → 1.8.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 +5 -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/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 +18 -0
- package/dist/clients/repository.d.ts.map +1 -1
- package/dist/clients/repository.js +36 -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 +112 -40
- package/dist/clients/service.js.map +1 -1
- package/dist/clients/types.d.ts +1 -1
- package/dist/clients/types.d.ts.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 +64 -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 +347 -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 +168 -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 +336 -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 +388 -0
- package/dist/portability/repository.js.map +1 -0
- package/dist/portability/schema.d.ts +589 -0
- package/dist/portability/schema.d.ts.map +1 -0
- package/dist/portability/schema.js +458 -0
- package/dist/portability/schema.js.map +1 -0
- package/dist/portability/types.d.ts +381 -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 +111 -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 +16 -34
- package/dist/routes/interactions.js.map +1 -1
- package/dist/routes/invitation.d.ts.map +1 -1
- package/dist/routes/invitation.js +10 -23
- 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/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
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
/** Explicit PostgreSQL reads used to plan selective portability imports. */
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import { getPool } from '../lib/database.js';
|
|
4
|
+
/**
|
|
5
|
+
* Restrict organization-owned reads to the requested portability scope.
|
|
6
|
+
*
|
|
7
|
+
* @param column - Qualified organization slug column
|
|
8
|
+
* @param manifest - Normalized import manifest
|
|
9
|
+
* @returns Parameterized organization predicate
|
|
10
|
+
*/
|
|
11
|
+
function organizationFilter(column, manifest) {
|
|
12
|
+
if (manifest.scope.kind === 'organization') {
|
|
13
|
+
return {
|
|
14
|
+
sql: `WHERE LOWER(BTRIM(${column})) = $1`,
|
|
15
|
+
values: [manifest.scope.organization_slug.trim().toLowerCase()],
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
return { sql: 'WHERE NOT o.is_super_admin', values: [] };
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Restrict application-owned reads to the declared application selection.
|
|
22
|
+
*
|
|
23
|
+
* @param column - Qualified application slug column
|
|
24
|
+
* @param manifest - Normalized import manifest
|
|
25
|
+
* @param parameterIndex - First PostgreSQL placeholder available to this predicate
|
|
26
|
+
* @returns Parameterized application predicate
|
|
27
|
+
*/
|
|
28
|
+
function applicationFilter(column, manifest, parameterIndex = 1) {
|
|
29
|
+
if (manifest.application_selection.all_applications) {
|
|
30
|
+
return { sql: `WHERE LOWER(BTRIM(${column})) <> 'porta-admin'`, values: [] };
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
sql: `WHERE LOWER(BTRIM(${column})) = ANY($${parameterIndex}::text[])`,
|
|
34
|
+
values: [
|
|
35
|
+
manifest.application_selection.application_slugs.map((slug) => slug.trim().toLowerCase()),
|
|
36
|
+
],
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Read the small destination catalog used to plan an import.
|
|
41
|
+
*
|
|
42
|
+
* The product is configured by an administrator and does not need large-data streaming here.
|
|
43
|
+
* Explicit columns keep credentials, lock state, audit data, and other non-portable fields out of
|
|
44
|
+
* planner memory. The surrounding request transaction provides the consistent snapshot.
|
|
45
|
+
*
|
|
46
|
+
* @param manifest - Normalized scope, category, application selection, and imported client IDs
|
|
47
|
+
* @returns Destination records with internal identifiers retained only for relationship matching
|
|
48
|
+
*/
|
|
49
|
+
export async function readPortabilityImportSnapshot(manifest) {
|
|
50
|
+
const pool = getPool();
|
|
51
|
+
const organizationScope = organizationFilter(manifest.scope.kind === 'organization' ? 'slug' : 'o.slug', manifest);
|
|
52
|
+
const ownedOrganizationScope = organizationFilter('o.slug', manifest);
|
|
53
|
+
const selectedApplications = applicationFilter('a.slug', manifest);
|
|
54
|
+
const applicationTableSelection = applicationFilter('slug', manifest);
|
|
55
|
+
const selectedApplicationsAfterOrganization = applicationFilter('a.slug', manifest, ownedOrganizationScope.values.length + 1);
|
|
56
|
+
const includesOrganizations = manifest.categories.includes('organizations');
|
|
57
|
+
const includesAuthorization = manifest.categories.includes('applications_authorization');
|
|
58
|
+
const includesUsers = manifest.categories.includes('users_assignments');
|
|
59
|
+
const includesClients = manifest.categories.includes('oidc_clients');
|
|
60
|
+
const includesApplicationData = includesAuthorization || includesUsers || includesClients;
|
|
61
|
+
const organizations = await pool.query(`SELECT o.id, o.slug, o.name, o.status, o.is_super_admin, o.default_locale,
|
|
62
|
+
o.default_login_methods,
|
|
63
|
+
two_factor_policy, branding_logo_url, branding_favicon_url,
|
|
64
|
+
branding_primary_color, branding_company_name, branding_custom_css
|
|
65
|
+
FROM organizations o
|
|
66
|
+
${organizationScope.sql}`, [...organizationScope.values]);
|
|
67
|
+
const applications = includesApplicationData
|
|
68
|
+
? await pool.query(`SELECT id, slug, name, description, status
|
|
69
|
+
FROM applications
|
|
70
|
+
${applicationTableSelection.sql}`, [...applicationTableSelection.values])
|
|
71
|
+
: { rows: [] };
|
|
72
|
+
const brandingAssets = includesOrganizations
|
|
73
|
+
? await pool.query(`SELECT o.slug AS organization_slug, b.asset_type, b.content_type, b.data
|
|
74
|
+
FROM branding_assets b
|
|
75
|
+
JOIN organizations o ON o.id = b.organization_id
|
|
76
|
+
${ownedOrganizationScope.sql}`, [...ownedOrganizationScope.values])
|
|
77
|
+
: { rows: [] };
|
|
78
|
+
const modules = includesAuthorization
|
|
79
|
+
? await pool.query(`SELECT m.id, m.application_id, a.slug AS application_slug, m.slug, m.name,
|
|
80
|
+
m.description, m.status
|
|
81
|
+
FROM application_modules m
|
|
82
|
+
JOIN applications a ON a.id = m.application_id
|
|
83
|
+
${selectedApplications.sql}`, [...selectedApplications.values])
|
|
84
|
+
: { rows: [] };
|
|
85
|
+
const roles = includesAuthorization || includesUsers
|
|
86
|
+
? await pool.query(`SELECT r.id, r.application_id, a.slug AS application_slug, r.slug, r.name, r.description
|
|
87
|
+
FROM roles r
|
|
88
|
+
JOIN applications a ON a.id = r.application_id
|
|
89
|
+
${selectedApplications.sql}`, [...selectedApplications.values])
|
|
90
|
+
: { rows: [] };
|
|
91
|
+
const permissions = includesAuthorization
|
|
92
|
+
? await pool.query(`SELECT p.id, p.application_id, p.module_id, a.slug AS application_slug, p.slug,
|
|
93
|
+
m.slug AS module_slug, p.name, p.description
|
|
94
|
+
FROM permissions p
|
|
95
|
+
JOIN applications a ON a.id = p.application_id
|
|
96
|
+
LEFT JOIN application_modules m ON m.id = p.module_id
|
|
97
|
+
${selectedApplications.sql}`, [...selectedApplications.values])
|
|
98
|
+
: { rows: [] };
|
|
99
|
+
const includeClaimDefinitions = includesAuthorization || manifest.user_claim_values.length > 0;
|
|
100
|
+
const claims = includeClaimDefinitions
|
|
101
|
+
? await pool.query(`SELECT c.id, c.application_id, a.slug AS application_slug, c.claim_name, c.claim_type,
|
|
102
|
+
c.description, c.include_in_id_token, c.include_in_access_token,
|
|
103
|
+
c.include_in_userinfo
|
|
104
|
+
FROM custom_claim_definitions c
|
|
105
|
+
JOIN applications a ON a.id = c.application_id
|
|
106
|
+
${selectedApplications.sql}`, [...selectedApplications.values])
|
|
107
|
+
: { rows: [] };
|
|
108
|
+
const rolePermissions = includesAuthorization
|
|
109
|
+
? await pool.query(`SELECT a.slug AS application_slug, r.slug AS role_slug,
|
|
110
|
+
ARRAY_AGG(p.slug ORDER BY BTRIM(p.slug) COLLATE "C") AS permission_slugs
|
|
111
|
+
FROM role_permissions rp
|
|
112
|
+
JOIN roles r ON r.id = rp.role_id
|
|
113
|
+
JOIN permissions p ON p.id = rp.permission_id
|
|
114
|
+
JOIN applications a ON a.id = r.application_id
|
|
115
|
+
${selectedApplications.sql} AND p.application_id = r.application_id
|
|
116
|
+
GROUP BY a.slug, r.slug`, [...selectedApplications.values])
|
|
117
|
+
: { rows: [] };
|
|
118
|
+
const users = includesUsers
|
|
119
|
+
? await pool.query(`SELECT u.id, u.organization_id, o.slug AS organization_slug, u.email::text AS email,
|
|
120
|
+
u.email_verified, u.given_name, u.family_name, u.middle_name, u.nickname,
|
|
121
|
+
u.preferred_username, u.profile_url, u.picture_url, u.website_url, u.gender,
|
|
122
|
+
u.birthdate::text AS birthdate, u.zoneinfo, u.locale, u.phone_number,
|
|
123
|
+
u.phone_number_verified, u.address_street, u.address_locality, u.address_region,
|
|
124
|
+
u.address_postal_code, u.address_country,
|
|
125
|
+
CASE WHEN u.status = 'inactive' THEN 'inactive' ELSE 'active' END AS status
|
|
126
|
+
FROM users u
|
|
127
|
+
JOIN organizations o ON o.id = u.organization_id
|
|
128
|
+
${ownedOrganizationScope.sql}`, [...ownedOrganizationScope.values])
|
|
129
|
+
: { rows: [] };
|
|
130
|
+
const userRoles = includesUsers
|
|
131
|
+
? await pool.query(`SELECT o.slug AS organization_slug, u.email::text AS email, a.slug AS application_slug,
|
|
132
|
+
r.slug AS role_slug
|
|
133
|
+
FROM user_roles ur
|
|
134
|
+
JOIN users u ON u.id = ur.user_id
|
|
135
|
+
JOIN organizations o ON o.id = u.organization_id
|
|
136
|
+
JOIN roles r ON r.id = ur.role_id
|
|
137
|
+
JOIN applications a ON a.id = r.application_id
|
|
138
|
+
${ownedOrganizationScope.sql} AND ${selectedApplicationsAfterOrganization.sql.slice('WHERE '.length)}`, [...ownedOrganizationScope.values, ...selectedApplicationsAfterOrganization.values])
|
|
139
|
+
: { rows: [] };
|
|
140
|
+
const userClaimValues = includesUsers
|
|
141
|
+
? await pool.query(`SELECT o.slug AS organization_slug, u.email::text AS email, a.slug AS application_slug,
|
|
142
|
+
c.claim_name, v.value
|
|
143
|
+
FROM custom_claim_values v
|
|
144
|
+
JOIN users u ON u.id = v.user_id
|
|
145
|
+
JOIN organizations o ON o.id = u.organization_id
|
|
146
|
+
JOIN custom_claim_definitions c ON c.id = v.claim_id
|
|
147
|
+
JOIN applications a ON a.id = c.application_id
|
|
148
|
+
${ownedOrganizationScope.sql} AND ${selectedApplicationsAfterOrganization.sql.slice('WHERE '.length)}`, [...ownedOrganizationScope.values, ...selectedApplicationsAfterOrganization.values])
|
|
149
|
+
: { rows: [] };
|
|
150
|
+
const clients = includesClients
|
|
151
|
+
? await pool.query(`SELECT c.id, c.organization_id, c.application_id, c.client_id,
|
|
152
|
+
o.slug AS organization_slug, a.slug AS application_slug,
|
|
153
|
+
c.client_name AS name, c.client_type, c.application_type, c.status,
|
|
154
|
+
c.grant_types, c.response_types, c.scope, c.login_methods,
|
|
155
|
+
c.token_endpoint_auth_method, c.redirect_uris,
|
|
156
|
+
COALESCE(c.post_logout_redirect_uris, '{}') AS post_logout_redirect_uris,
|
|
157
|
+
COALESCE(c.allowed_origins, '{}') AS allowed_origins, c.require_pkce
|
|
158
|
+
FROM clients c
|
|
159
|
+
JOIN organizations o ON o.id = c.organization_id
|
|
160
|
+
JOIN applications a ON a.id = c.application_id
|
|
161
|
+
WHERE c.client_id = ANY($1::text[])`, [manifest.clients.map((client) => client.client_id)])
|
|
162
|
+
: { rows: [] };
|
|
163
|
+
return {
|
|
164
|
+
organizations: organizations.rows,
|
|
165
|
+
brandingAssets: brandingAssets.rows,
|
|
166
|
+
applications: applications.rows,
|
|
167
|
+
applicationModules: modules.rows,
|
|
168
|
+
roles: roles.rows,
|
|
169
|
+
permissions: permissions.rows,
|
|
170
|
+
claimDefinitions: claims.rows,
|
|
171
|
+
rolePermissions: rolePermissions.rows,
|
|
172
|
+
users: users.rows.map((row) => ({
|
|
173
|
+
...row,
|
|
174
|
+
status: row.status === 'inactive' ? 'inactive' : 'active',
|
|
175
|
+
})),
|
|
176
|
+
userRoles: userRoles.rows,
|
|
177
|
+
userClaimValues: userClaimValues.rows,
|
|
178
|
+
clients: clients.rows,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Insert or update one organization and its optional branding assets.
|
|
183
|
+
*
|
|
184
|
+
* @param record - Strict portable organization fields
|
|
185
|
+
* @param destinationId - Existing identifier for update, or null for create
|
|
186
|
+
* @param destinationAssetTypes - Branding slots which currently contain stored bytes
|
|
187
|
+
* @returns Authoritative destination identifier
|
|
188
|
+
*/
|
|
189
|
+
export async function writePortabilityOrganization(record, destinationId, destinationAssetTypes) {
|
|
190
|
+
const pool = getPool();
|
|
191
|
+
const authoritativeId = destinationId ?? randomUUID();
|
|
192
|
+
const values = [
|
|
193
|
+
record.name,
|
|
194
|
+
record.status,
|
|
195
|
+
record.default_locale,
|
|
196
|
+
record.default_login_methods,
|
|
197
|
+
record.two_factor_policy,
|
|
198
|
+
record.branding.logo_url,
|
|
199
|
+
record.branding.favicon_url,
|
|
200
|
+
record.branding.primary_color,
|
|
201
|
+
record.branding.company_name,
|
|
202
|
+
record.branding.custom_css,
|
|
203
|
+
];
|
|
204
|
+
const result = destinationId === null
|
|
205
|
+
? await pool.query(`INSERT INTO organizations
|
|
206
|
+
(id, name, status, default_locale, default_login_methods, two_factor_policy,
|
|
207
|
+
branding_logo_url, branding_favicon_url, branding_primary_color,
|
|
208
|
+
branding_company_name, branding_custom_css, slug)
|
|
209
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) RETURNING id`, [authoritativeId, ...values, record.slug])
|
|
210
|
+
: await pool.query(`UPDATE organizations SET name = $1, status = $2, default_locale = $3,
|
|
211
|
+
default_login_methods = $4, two_factor_policy = $5, branding_logo_url = $6,
|
|
212
|
+
branding_favicon_url = $7, branding_primary_color = $8,
|
|
213
|
+
branding_company_name = $9, branding_custom_css = $10, updated_at = NOW()
|
|
214
|
+
WHERE id = $11 RETURNING id`, [...values, destinationId]);
|
|
215
|
+
const organizationId = result.rows[0]?.id ?? authoritativeId;
|
|
216
|
+
for (const assetType of ['logo', 'favicon']) {
|
|
217
|
+
const asset = assetType === 'logo' ? record.branding.logo_asset : record.branding.favicon_asset;
|
|
218
|
+
if (asset === null) {
|
|
219
|
+
if (!destinationAssetTypes.has(assetType))
|
|
220
|
+
continue;
|
|
221
|
+
await pool.query('DELETE FROM branding_assets WHERE organization_id = $1 AND asset_type = $2', [organizationId, assetType]);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
const data = Buffer.from(asset.content_base64, 'base64');
|
|
225
|
+
await pool.query(`INSERT INTO branding_assets
|
|
226
|
+
(organization_id, asset_type, file_name, content_type, file_size, data)
|
|
227
|
+
VALUES ($1, $2, $3, $4, $5, $6)
|
|
228
|
+
ON CONFLICT (organization_id, asset_type) DO UPDATE
|
|
229
|
+
SET file_name = EXCLUDED.file_name, content_type = EXCLUDED.content_type,
|
|
230
|
+
file_size = EXCLUDED.file_size, data = EXCLUDED.data, updated_at = NOW()`, [organizationId, assetType, `imported-${assetType}`, asset.media_type, data.length, data]);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return organizationId;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* @param record - Strict portable application fields
|
|
237
|
+
* @param destinationId - Existing identifier for update, or null for create
|
|
238
|
+
* @returns Authoritative destination identifier
|
|
239
|
+
*/
|
|
240
|
+
export async function writePortabilityApplication(record, destinationId) {
|
|
241
|
+
const authoritativeId = destinationId ?? randomUUID();
|
|
242
|
+
const result = destinationId === null
|
|
243
|
+
? await getPool().query(`INSERT INTO applications (id, slug, name, description, status)
|
|
244
|
+
VALUES ($1, $2, $3, $4, $5) RETURNING id`, [authoritativeId, record.slug, record.name, record.description, record.status])
|
|
245
|
+
: await getPool().query(`UPDATE applications SET name = $1, description = $2, status = $3, updated_at = NOW()
|
|
246
|
+
WHERE id = $4 RETURNING id`, [record.name, record.description, record.status, destinationId]);
|
|
247
|
+
return result.rows[0]?.id ?? authoritativeId;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* @param record - Strict portable module fields
|
|
251
|
+
* @param applicationId - Resolved parent application identifier
|
|
252
|
+
* @param destinationId - Existing identifier for update, or null for create
|
|
253
|
+
* @returns Authoritative destination identifier
|
|
254
|
+
*/
|
|
255
|
+
export async function writePortabilityModule(record, applicationId, destinationId) {
|
|
256
|
+
const authoritativeId = destinationId ?? randomUUID();
|
|
257
|
+
const result = destinationId === null
|
|
258
|
+
? await getPool().query(`INSERT INTO application_modules (id, application_id, slug, name, description, status)
|
|
259
|
+
VALUES ($1, $2, $3, $4, $5, $6) RETURNING id`, [
|
|
260
|
+
authoritativeId,
|
|
261
|
+
applicationId,
|
|
262
|
+
record.slug,
|
|
263
|
+
record.name,
|
|
264
|
+
record.description,
|
|
265
|
+
record.status,
|
|
266
|
+
])
|
|
267
|
+
: await getPool().query(`UPDATE application_modules SET name = $1, description = $2, status = $3,
|
|
268
|
+
updated_at = NOW() WHERE id = $4 RETURNING id`, [record.name, record.description, record.status, destinationId]);
|
|
269
|
+
return result.rows[0]?.id ?? authoritativeId;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* @param record - Strict portable role fields
|
|
273
|
+
* @param applicationId - Resolved parent application identifier
|
|
274
|
+
* @param destinationId - Existing identifier for update, or null for create
|
|
275
|
+
* @returns Authoritative destination identifier
|
|
276
|
+
*/
|
|
277
|
+
export async function writePortabilityRole(record, applicationId, destinationId) {
|
|
278
|
+
const authoritativeId = destinationId ?? randomUUID();
|
|
279
|
+
const result = destinationId === null
|
|
280
|
+
? await getPool().query(`INSERT INTO roles (id, application_id, slug, name, description)
|
|
281
|
+
VALUES ($1, $2, $3, $4, $5) RETURNING id`, [authoritativeId, applicationId, record.slug, record.name, record.description])
|
|
282
|
+
: await getPool().query(`UPDATE roles SET name = $1, description = $2, updated_at = NOW()
|
|
283
|
+
WHERE id = $3 RETURNING id`, [record.name, record.description, destinationId]);
|
|
284
|
+
return result.rows[0]?.id ?? authoritativeId;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* @param record - Strict portable permission fields
|
|
288
|
+
* @param applicationId - Resolved parent application identifier
|
|
289
|
+
* @param moduleId - Resolved optional module identifier
|
|
290
|
+
* @param destinationId - Existing identifier for update, or null for create
|
|
291
|
+
* @returns Authoritative destination identifier
|
|
292
|
+
*/
|
|
293
|
+
export async function writePortabilityPermission(record, applicationId, moduleId, destinationId) {
|
|
294
|
+
const authoritativeId = destinationId ?? randomUUID();
|
|
295
|
+
const result = destinationId === null
|
|
296
|
+
? await getPool().query(`INSERT INTO permissions (id, application_id, module_id, slug, name, description)
|
|
297
|
+
VALUES ($1, $2, $3, $4, $5, $6) RETURNING id`, [authoritativeId, applicationId, moduleId, record.slug, record.name, record.description])
|
|
298
|
+
: await getPool().query(`UPDATE permissions SET name = $1, description = $2
|
|
299
|
+
WHERE id = $3 RETURNING id`, [record.name, record.description, destinationId]);
|
|
300
|
+
return result.rows[0]?.id ?? authoritativeId;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* @param record - Strict portable claim-definition fields
|
|
304
|
+
* @param applicationId - Resolved parent application identifier
|
|
305
|
+
* @param destinationId - Existing identifier for update, or null for create
|
|
306
|
+
* @returns Authoritative destination identifier
|
|
307
|
+
*/
|
|
308
|
+
export async function writePortabilityClaimDefinition(record, applicationId, destinationId) {
|
|
309
|
+
const authoritativeId = destinationId ?? randomUUID();
|
|
310
|
+
const result = destinationId === null
|
|
311
|
+
? await getPool().query(`INSERT INTO custom_claim_definitions
|
|
312
|
+
(id, application_id, claim_name, claim_type, description, include_in_id_token,
|
|
313
|
+
include_in_access_token, include_in_userinfo)
|
|
314
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING id`, [
|
|
315
|
+
authoritativeId,
|
|
316
|
+
applicationId,
|
|
317
|
+
record.claim_name,
|
|
318
|
+
record.claim_type,
|
|
319
|
+
record.description,
|
|
320
|
+
record.include_in_id_token,
|
|
321
|
+
record.include_in_access_token,
|
|
322
|
+
record.include_in_userinfo,
|
|
323
|
+
])
|
|
324
|
+
: await getPool().query(`UPDATE custom_claim_definitions SET description = $1, include_in_id_token = $2,
|
|
325
|
+
include_in_access_token = $3, include_in_userinfo = $4, updated_at = NOW()
|
|
326
|
+
WHERE id = $5 RETURNING id`, [
|
|
327
|
+
record.description,
|
|
328
|
+
record.include_in_id_token,
|
|
329
|
+
record.include_in_access_token,
|
|
330
|
+
record.include_in_userinfo,
|
|
331
|
+
destinationId,
|
|
332
|
+
]);
|
|
333
|
+
return result.rows[0]?.id ?? authoritativeId;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Add listed role-permission edges without removing destination-only edges.
|
|
337
|
+
*
|
|
338
|
+
* @param roleId - Resolved role identifier
|
|
339
|
+
* @param permissionIds - Resolved permission identifiers listed by the manifest
|
|
340
|
+
*/
|
|
341
|
+
export async function writePortabilityRolePermissions(roleId, permissionIds) {
|
|
342
|
+
for (const permissionId of permissionIds) {
|
|
343
|
+
await getPool().query(`INSERT INTO role_permissions (role_id, permission_id)
|
|
344
|
+
VALUES ($1, $2) ON CONFLICT (role_id, permission_id) DO NOTHING`, [roleId, permissionId]);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
//# sourceMappingURL=import-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-repository.js","sourceRoot":"","sources":["../../src/portability/import-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** Transaction-bound user, relationship, client, and credential import writes. */
|
|
2
|
+
import type { PortabilityClient, PortabilityCredential, PortabilityJsonValue, PortabilityUser } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Insert or update one portable user without touching credentials or automatic lock fields.
|
|
5
|
+
*
|
|
6
|
+
* @param record - Strict portable user fields
|
|
7
|
+
* @param organizationId - Resolved parent organization identifier
|
|
8
|
+
* @param destinationId - Existing identifier for update, or null for create
|
|
9
|
+
* @returns Authoritative destination user identifier
|
|
10
|
+
*/
|
|
11
|
+
export declare function writePortabilityUser(record: PortabilityUser, organizationId: string, destinationId: string | null): Promise<string>;
|
|
12
|
+
/**
|
|
13
|
+
* Add one listed user-role assignment without changing destination-only assignments.
|
|
14
|
+
*
|
|
15
|
+
* @param userId - Resolved destination user identifier
|
|
16
|
+
* @param roleId - Resolved destination role identifier
|
|
17
|
+
*/
|
|
18
|
+
export declare function writePortabilityUserRole(userId: string, roleId: string): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Insert or update one listed custom-claim value.
|
|
21
|
+
*
|
|
22
|
+
* @param userId - Resolved destination user identifier
|
|
23
|
+
* @param claimId - Resolved destination claim-definition identifier
|
|
24
|
+
* @param value - Portable JSON claim value
|
|
25
|
+
*/
|
|
26
|
+
export declare function writePortabilityUserClaimValue(userId: string, claimId: string, value: PortabilityJsonValue): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Insert or update one OIDC client and create one credential only for a new confidential client.
|
|
29
|
+
*
|
|
30
|
+
* @param record - Strict portable client fields
|
|
31
|
+
* @param organizationId - Resolved owner organization identifier
|
|
32
|
+
* @param applicationId - Resolved owner application identifier
|
|
33
|
+
* @param destinationId - Existing identifier for update, or null for create
|
|
34
|
+
* @returns Destination identifier and optional one-time credential
|
|
35
|
+
*/
|
|
36
|
+
export declare function writePortabilityClient(record: PortabilityClient, organizationId: string, applicationId: string, destinationId: string | null): Promise<{
|
|
37
|
+
readonly id: string;
|
|
38
|
+
readonly credential?: PortabilityCredential;
|
|
39
|
+
}>;
|
|
40
|
+
//# sourceMappingURL=import-user-client-writers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-user-client-writers.d.ts","sourceRoot":"","sources":["../../src/portability/import-user-client-writers.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAKlF,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EAChB,MAAM,YAAY,CAAC;AA0BpB;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,eAAe,EACvB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,GAAG,IAAI,GAC3B,OAAO,CAAC,MAAM,CAAC,CAiDjB;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM5F;AAED;;;;;;GAMG;AACH,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,iBAAiB,EACzB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,GAAG,IAAI,GAC3B,OAAO,CAAC;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,qBAAqB,CAAA;CAAE,CAAC,CA4E/E"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/** Transaction-bound user, relationship, client, and credential import writes. */
|
|
2
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
3
|
+
import { generateSecret, hashSecret } from '../clients/crypto.js';
|
|
4
|
+
import { getPool } from '../lib/database.js';
|
|
5
|
+
/**
|
|
6
|
+
* Add six UTC calendar months while clamping month-end to the target month's last day.
|
|
7
|
+
*
|
|
8
|
+
* @param now - Credential creation time
|
|
9
|
+
* @returns Exact UTC credential expiry time
|
|
10
|
+
*/
|
|
11
|
+
function importedSecretExpiry(now) {
|
|
12
|
+
const targetMonth = now.getUTCMonth() + 6;
|
|
13
|
+
const targetYear = now.getUTCFullYear() + Math.floor(targetMonth / 12);
|
|
14
|
+
const normalizedMonth = targetMonth % 12;
|
|
15
|
+
const lastDay = new Date(Date.UTC(targetYear, normalizedMonth + 1, 0)).getUTCDate();
|
|
16
|
+
return new Date(Date.UTC(targetYear, normalizedMonth, Math.min(now.getUTCDate(), lastDay), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds(), now.getUTCMilliseconds()));
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Insert or update one portable user without touching credentials or automatic lock fields.
|
|
20
|
+
*
|
|
21
|
+
* @param record - Strict portable user fields
|
|
22
|
+
* @param organizationId - Resolved parent organization identifier
|
|
23
|
+
* @param destinationId - Existing identifier for update, or null for create
|
|
24
|
+
* @returns Authoritative destination user identifier
|
|
25
|
+
*/
|
|
26
|
+
export async function writePortabilityUser(record, organizationId, destinationId) {
|
|
27
|
+
const authoritativeId = destinationId ?? randomUUID();
|
|
28
|
+
const profileValues = [
|
|
29
|
+
record.email_verified,
|
|
30
|
+
record.given_name,
|
|
31
|
+
record.family_name,
|
|
32
|
+
record.middle_name,
|
|
33
|
+
record.nickname,
|
|
34
|
+
record.preferred_username,
|
|
35
|
+
record.profile_url,
|
|
36
|
+
record.picture_url,
|
|
37
|
+
record.website_url,
|
|
38
|
+
record.gender,
|
|
39
|
+
record.birthdate,
|
|
40
|
+
record.zoneinfo,
|
|
41
|
+
record.locale,
|
|
42
|
+
record.phone_number,
|
|
43
|
+
record.phone_number_verified,
|
|
44
|
+
record.address_street,
|
|
45
|
+
record.address_locality,
|
|
46
|
+
record.address_region,
|
|
47
|
+
record.address_postal_code,
|
|
48
|
+
record.address_country,
|
|
49
|
+
record.status,
|
|
50
|
+
];
|
|
51
|
+
const result = destinationId === null
|
|
52
|
+
? await getPool().query(`INSERT INTO users
|
|
53
|
+
(id, organization_id, email, email_verified, given_name, family_name, middle_name,
|
|
54
|
+
nickname, preferred_username, profile_url, picture_url, website_url, gender,
|
|
55
|
+
birthdate, zoneinfo, locale, phone_number, phone_number_verified, address_street,
|
|
56
|
+
address_locality, address_region, address_postal_code, address_country, status)
|
|
57
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14,
|
|
58
|
+
$15, $16, $17, $18, $19, $20, $21, $22, $23, $24) RETURNING id`, [authoritativeId, organizationId, record.email, ...profileValues])
|
|
59
|
+
: await getPool().query(`UPDATE users SET email_verified = $1, given_name = $2, family_name = $3,
|
|
60
|
+
middle_name = $4, nickname = $5, preferred_username = $6, profile_url = $7,
|
|
61
|
+
picture_url = $8, website_url = $9, gender = $10, birthdate = $11,
|
|
62
|
+
zoneinfo = $12, locale = $13, phone_number = $14,
|
|
63
|
+
phone_number_verified = $15, address_street = $16, address_locality = $17,
|
|
64
|
+
address_region = $18, address_postal_code = $19, address_country = $20,
|
|
65
|
+
status = CASE WHEN status = 'locked' AND $21 = 'active' THEN status ELSE $21 END,
|
|
66
|
+
updated_at = NOW() WHERE id = $22 RETURNING id`, [...profileValues, destinationId]);
|
|
67
|
+
return result.rows[0]?.id ?? authoritativeId;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Add one listed user-role assignment without changing destination-only assignments.
|
|
71
|
+
*
|
|
72
|
+
* @param userId - Resolved destination user identifier
|
|
73
|
+
* @param roleId - Resolved destination role identifier
|
|
74
|
+
*/
|
|
75
|
+
export async function writePortabilityUserRole(userId, roleId) {
|
|
76
|
+
await getPool().query(`INSERT INTO user_roles (user_id, role_id, assigned_by)
|
|
77
|
+
VALUES ($1, $2, NULL) ON CONFLICT (user_id, role_id) DO NOTHING`, [userId, roleId]);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Insert or update one listed custom-claim value.
|
|
81
|
+
*
|
|
82
|
+
* @param userId - Resolved destination user identifier
|
|
83
|
+
* @param claimId - Resolved destination claim-definition identifier
|
|
84
|
+
* @param value - Portable JSON claim value
|
|
85
|
+
*/
|
|
86
|
+
export async function writePortabilityUserClaimValue(userId, claimId, value) {
|
|
87
|
+
await getPool().query(`INSERT INTO custom_claim_values (user_id, claim_id, value)
|
|
88
|
+
VALUES ($1, $2, $3::jsonb)
|
|
89
|
+
ON CONFLICT (user_id, claim_id) DO UPDATE SET value = EXCLUDED.value, updated_at = NOW()`, [userId, claimId, JSON.stringify(value)]);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Insert or update one OIDC client and create one credential only for a new confidential client.
|
|
93
|
+
*
|
|
94
|
+
* @param record - Strict portable client fields
|
|
95
|
+
* @param organizationId - Resolved owner organization identifier
|
|
96
|
+
* @param applicationId - Resolved owner application identifier
|
|
97
|
+
* @param destinationId - Existing identifier for update, or null for create
|
|
98
|
+
* @returns Destination identifier and optional one-time credential
|
|
99
|
+
*/
|
|
100
|
+
export async function writePortabilityClient(record, organizationId, applicationId, destinationId) {
|
|
101
|
+
const authoritativeId = destinationId ?? randomUUID();
|
|
102
|
+
const mutableValues = [
|
|
103
|
+
record.name,
|
|
104
|
+
record.status,
|
|
105
|
+
record.grant_types,
|
|
106
|
+
record.response_types,
|
|
107
|
+
record.scope,
|
|
108
|
+
record.login_methods,
|
|
109
|
+
record.token_endpoint_auth_method,
|
|
110
|
+
record.redirect_uris,
|
|
111
|
+
record.post_logout_redirect_uris,
|
|
112
|
+
record.allowed_origins,
|
|
113
|
+
record.require_pkce,
|
|
114
|
+
];
|
|
115
|
+
if (destinationId === null) {
|
|
116
|
+
await getPool().query(`INSERT INTO clients
|
|
117
|
+
(id, client_id, organization_id, application_id, client_name, client_type,
|
|
118
|
+
application_type, status, grant_types, response_types, scope, login_methods,
|
|
119
|
+
token_endpoint_auth_method, redirect_uris, post_logout_redirect_uris,
|
|
120
|
+
allowed_origins, require_pkce)
|
|
121
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17)`, [
|
|
122
|
+
authoritativeId,
|
|
123
|
+
record.client_id,
|
|
124
|
+
organizationId,
|
|
125
|
+
applicationId,
|
|
126
|
+
record.name,
|
|
127
|
+
record.client_type,
|
|
128
|
+
record.application_type,
|
|
129
|
+
record.status,
|
|
130
|
+
record.grant_types,
|
|
131
|
+
record.response_types,
|
|
132
|
+
record.scope,
|
|
133
|
+
record.login_methods,
|
|
134
|
+
record.token_endpoint_auth_method,
|
|
135
|
+
record.redirect_uris,
|
|
136
|
+
record.post_logout_redirect_uris,
|
|
137
|
+
record.allowed_origins,
|
|
138
|
+
record.require_pkce,
|
|
139
|
+
]);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
await getPool().query(`UPDATE clients SET client_name = $1, status = $2, grant_types = $3,
|
|
143
|
+
response_types = $4, scope = $5, login_methods = $6,
|
|
144
|
+
token_endpoint_auth_method = $7, redirect_uris = $8,
|
|
145
|
+
post_logout_redirect_uris = $9, allowed_origins = $10, require_pkce = $11,
|
|
146
|
+
updated_at = NOW() WHERE id = $12`, [...mutableValues, destinationId]);
|
|
147
|
+
}
|
|
148
|
+
if (destinationId !== null || record.client_type !== 'confidential') {
|
|
149
|
+
return { id: authoritativeId };
|
|
150
|
+
}
|
|
151
|
+
const secret = generateSecret();
|
|
152
|
+
const secretHash = await hashSecret(secret);
|
|
153
|
+
const secretSha256 = createHash('sha256').update(secret).digest('hex');
|
|
154
|
+
const expiresAt = importedSecretExpiry(new Date());
|
|
155
|
+
await getPool().query(`INSERT INTO client_secrets
|
|
156
|
+
(client_id, secret_hash, secret_sha256, label, expires_at)
|
|
157
|
+
VALUES ($1, $2, $3, 'Imported', $4)`, [authoritativeId, secretHash, secretSha256, expiresAt]);
|
|
158
|
+
return {
|
|
159
|
+
id: authoritativeId,
|
|
160
|
+
credential: {
|
|
161
|
+
client_id: record.client_id,
|
|
162
|
+
label: 'Imported',
|
|
163
|
+
secret,
|
|
164
|
+
expires_at: expiresAt.toISOString(),
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=import-user-client-writers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-user-client-writers.js","sourceRoot":"","sources":["../../src/portability/import-user-client-writers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Public server contract for selective environment portability. */
|
|
2
|
+
export { exportManifestRequestSchema, importManifestRequestSchema, portabilityApplicationSelectionSchema, portabilityCategorySchema, portabilityEntityTypeSchema, portabilityManifestSchema, portabilityResultSchema, portabilityScopeSchema, } from './schema.js';
|
|
3
|
+
export { requiredPortabilityPermissions, requirePortabilityAuthorization, } from './authorization.js';
|
|
4
|
+
export { exportPortabilityManifest, type PortabilityExport } from './export.js';
|
|
5
|
+
export { buildPortabilityPlan } from './plan.js';
|
|
6
|
+
export { applyPortabilityManifest } from './apply.js';
|
|
7
|
+
export { PortabilityError, type ExportManifestRequest, type ImportManifestRequest, type PortabilityAction, type PortabilityActionCounts, type PortabilityActor, type PortabilityApplication, type PortabilityApplicationModule, type PortabilityApplicationSelection, type PortabilityBranding, type PortabilityBrandingAsset, type PortabilityCategory, type PortabilityClaimDefinition, type PortabilityClient, type PortabilityCredential, type PortabilityEntityType, type PortabilityErrorCode, type PortabilityImportMode, type PortabilityJsonValue, type PortabilityManifest, type PortabilityNaturalKey, type PortabilityOrganization, type PortabilityPermission, type PortabilityResult, type PortabilityResultError, type PortabilityResultErrorCode, type PortabilityResultItem, type PortabilityRole, type PortabilityRolePermissionMapping, type PortabilityScope, type PortabilityUser, type PortabilityUserClaimValue, type PortabilityUserRoleAssignment, } from './types.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/portability/index.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,qCAAqC,EACrC,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,yBAAyB,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,4BAA4B,EACjC,KAAK,+BAA+B,EACpC,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,gCAAgC,EACrC,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC9B,KAAK,6BAA6B,GACnC,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Public server contract for selective environment portability. */
|
|
2
|
+
export { exportManifestRequestSchema, importManifestRequestSchema, portabilityApplicationSelectionSchema, portabilityCategorySchema, portabilityEntityTypeSchema, portabilityManifestSchema, portabilityResultSchema, portabilityScopeSchema, } from './schema.js';
|
|
3
|
+
export { requiredPortabilityPermissions, requirePortabilityAuthorization, } from './authorization.js';
|
|
4
|
+
export { exportPortabilityManifest } from './export.js';
|
|
5
|
+
export { buildPortabilityPlan } from './plan.js';
|
|
6
|
+
export { applyPortabilityManifest } from './apply.js';
|
|
7
|
+
export { PortabilityError, } from './types.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/portability/index.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,qCAAqC,EACrC,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,yBAAyB,EAA0B,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EACL,gBAAgB,GAiCjB,MAAM,YAAY,CAAC"}
|