@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,450 @@
|
|
|
1
|
+
/** Mutation-free normalization, dependency resolution, and import action planning. */
|
|
2
|
+
import { runDatabaseTransaction } from '../lib/database.js';
|
|
3
|
+
import { validateClaimValue } from '../custom-claims/validators.js';
|
|
4
|
+
import { readPortabilityImportSnapshot, } from './import-repository.js';
|
|
5
|
+
import { addError, addItem, applicationIsSelected, clientMutableValuesMatch, compareOutcomes, dependencyState, emptySummary, groupByKey, key, normalizedEmail, normalizedRbac, normalizedSlug, organizationMatches, parentError, recordAction, recordIdentity, rejectDuplicates, sameValue, userMatches, validateRootScope, } from './plan-support.js';
|
|
6
|
+
import { portabilityManifestSchema, portabilityResultSchema } from './schema.js';
|
|
7
|
+
/**
|
|
8
|
+
* Build the resolved plan using the current request-owned transaction.
|
|
9
|
+
*
|
|
10
|
+
* Apply uses this boundary so preview and mutation share the same normalization,
|
|
11
|
+
* compatibility, and dependency checks.
|
|
12
|
+
*
|
|
13
|
+
* @param input - Manifest received by the service
|
|
14
|
+
* @param mode - Requested preview or apply behavior
|
|
15
|
+
* @returns Normalized manifest, private snapshot, and safe public result
|
|
16
|
+
*/
|
|
17
|
+
export async function buildResolvedPortabilityPlan(input, mode) {
|
|
18
|
+
const manifest = portabilityManifestSchema.parse(input);
|
|
19
|
+
const snapshot = await readPortabilityImportSnapshot(manifest);
|
|
20
|
+
const accumulator = { items: [], errors: [], summary: emptySummary() };
|
|
21
|
+
const duplicateRecords = rejectDuplicates(manifest, accumulator);
|
|
22
|
+
const organizations = groupByKey(snapshot.organizations, (row) => normalizedSlug(row.slug));
|
|
23
|
+
const brandingAssets = groupByKey(snapshot.brandingAssets, (row) => normalizedSlug(row.organization_slug));
|
|
24
|
+
const applications = groupByKey(snapshot.applications, (row) => normalizedSlug(row.slug));
|
|
25
|
+
const modules = groupByKey(snapshot.applicationModules, (row) => key(normalizedSlug(row.application_slug), normalizedSlug(row.slug)));
|
|
26
|
+
const roles = groupByKey(snapshot.roles, (row) => key(normalizedSlug(row.application_slug), normalizedRbac(row.slug)));
|
|
27
|
+
const permissions = groupByKey(snapshot.permissions, (row) => key(normalizedSlug(row.application_slug), normalizedRbac(row.slug)));
|
|
28
|
+
const claims = groupByKey(snapshot.claimDefinitions, (row) => key(normalizedSlug(row.application_slug), row.claim_name));
|
|
29
|
+
const users = groupByKey(snapshot.users, (row) => key(normalizedSlug(row.organization_slug), normalizedEmail(row.email)));
|
|
30
|
+
const clients = groupByKey(snapshot.clients, (row) => row.client_id);
|
|
31
|
+
const manifestOrganizations = new Set(manifest.organizations.map((row) => normalizedSlug(row.slug)));
|
|
32
|
+
const manifestApplications = new Set(manifest.applications.map((row) => normalizedSlug(row.slug)));
|
|
33
|
+
const manifestModules = new Set(manifest.application_modules.map((row) => key(normalizedSlug(row.application_slug), normalizedSlug(row.slug))));
|
|
34
|
+
const manifestRoles = new Set(manifest.roles.map((row) => key(normalizedSlug(row.application_slug), normalizedRbac(row.slug))));
|
|
35
|
+
const manifestPermissions = new Set(manifest.permissions.map((row) => key(normalizedSlug(row.application_slug), normalizedRbac(row.slug))));
|
|
36
|
+
const manifestClaims = new Set(manifest.claim_definitions.map((row) => key(normalizedSlug(row.application_slug), row.claim_name)));
|
|
37
|
+
const manifestUsers = new Set(manifest.users.map((row) => key(normalizedSlug(row.organization_slug), normalizedEmail(row.email))));
|
|
38
|
+
const selectedOrganization = manifest.scope.kind === 'organization'
|
|
39
|
+
? normalizedSlug(manifest.scope.organization_slug)
|
|
40
|
+
: null;
|
|
41
|
+
validateRootScope(manifest, accumulator, organizations, manifestOrganizations);
|
|
42
|
+
for (const source of manifest.organizations) {
|
|
43
|
+
const naturalKey = { slug: source.slug };
|
|
44
|
+
if (duplicateRecords.has(recordIdentity('organizations', naturalKey)))
|
|
45
|
+
continue;
|
|
46
|
+
if (selectedOrganization !== null && normalizedSlug(source.slug) !== selectedOrganization) {
|
|
47
|
+
addError(accumulator, 'organizations', naturalKey, 'cross_scope_reference');
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (source.slug === 'porta-admin') {
|
|
51
|
+
addError(accumulator, 'organizations', naturalKey, 'control_plane_record');
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
const matches = organizations.get(normalizedSlug(source.slug));
|
|
55
|
+
if ((matches?.length ?? 0) > 1) {
|
|
56
|
+
addError(accumulator, 'organizations', naturalKey, 'ambiguous_dependency');
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
const destination = matches?.[0];
|
|
60
|
+
if (destination?.is_super_admin) {
|
|
61
|
+
addError(accumulator, 'organizations', naturalKey, 'control_plane_record');
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
addItem(accumulator, 'organizations', recordAction(mode, destination !== undefined, destination !== undefined &&
|
|
65
|
+
organizationMatches(source, destination, new Map((brandingAssets.get(normalizedSlug(source.slug)) ?? []).map((asset) => [
|
|
66
|
+
asset.asset_type,
|
|
67
|
+
{ content_type: asset.content_type, data: asset.data },
|
|
68
|
+
])))), naturalKey);
|
|
69
|
+
}
|
|
70
|
+
for (const source of manifest.applications) {
|
|
71
|
+
const naturalKey = { slug: source.slug };
|
|
72
|
+
if (duplicateRecords.has(recordIdentity('applications', naturalKey)))
|
|
73
|
+
continue;
|
|
74
|
+
if (!applicationIsSelected(manifest, source.slug)) {
|
|
75
|
+
addError(accumulator, 'applications', naturalKey, 'cross_scope_reference');
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (source.slug === 'porta-admin') {
|
|
79
|
+
addError(accumulator, 'applications', naturalKey, 'control_plane_record');
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const matches = applications.get(normalizedSlug(source.slug));
|
|
83
|
+
if ((matches?.length ?? 0) > 1) {
|
|
84
|
+
addError(accumulator, 'applications', naturalKey, 'ambiguous_dependency');
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const destination = matches?.[0];
|
|
88
|
+
const same = destination !== undefined &&
|
|
89
|
+
source.name === destination.name &&
|
|
90
|
+
source.description === destination.description &&
|
|
91
|
+
source.status === destination.status;
|
|
92
|
+
addItem(accumulator, 'applications', recordAction(mode, destination !== undefined, same), naturalKey);
|
|
93
|
+
}
|
|
94
|
+
for (const source of manifest.application_modules) {
|
|
95
|
+
const naturalKey = { application_slug: source.application_slug, slug: source.slug };
|
|
96
|
+
const appKey = normalizedSlug(source.application_slug);
|
|
97
|
+
if (duplicateRecords.has(recordIdentity('application_modules', naturalKey)))
|
|
98
|
+
continue;
|
|
99
|
+
if (!applicationIsSelected(manifest, source.application_slug)) {
|
|
100
|
+
addError(accumulator, 'application_modules', naturalKey, 'cross_scope_reference');
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
const dependency = parentError(manifestApplications.has(appKey), applications.get(appKey));
|
|
104
|
+
if (appKey === 'porta-admin')
|
|
105
|
+
addError(accumulator, 'application_modules', naturalKey, 'control_plane_record');
|
|
106
|
+
else if (dependency !== null)
|
|
107
|
+
addError(accumulator, 'application_modules', naturalKey, dependency);
|
|
108
|
+
else {
|
|
109
|
+
const matches = modules.get(key(appKey, normalizedSlug(source.slug)));
|
|
110
|
+
if ((matches?.length ?? 0) > 1) {
|
|
111
|
+
addError(accumulator, 'application_modules', naturalKey, 'ambiguous_dependency');
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
const destination = matches?.[0];
|
|
115
|
+
const same = destination !== undefined &&
|
|
116
|
+
source.name === destination.name &&
|
|
117
|
+
source.description === destination.description &&
|
|
118
|
+
source.status === destination.status;
|
|
119
|
+
addItem(accumulator, 'application_modules', recordAction(mode, destination !== undefined, same), naturalKey);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
for (const source of manifest.roles) {
|
|
123
|
+
const naturalKey = { application_slug: source.application_slug, slug: source.slug };
|
|
124
|
+
const appKey = normalizedSlug(source.application_slug);
|
|
125
|
+
if (duplicateRecords.has(recordIdentity('roles', naturalKey)))
|
|
126
|
+
continue;
|
|
127
|
+
if (!applicationIsSelected(manifest, source.application_slug)) {
|
|
128
|
+
addError(accumulator, 'roles', naturalKey, 'cross_scope_reference');
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const dependency = parentError(manifestApplications.has(appKey), applications.get(appKey));
|
|
132
|
+
if (appKey === 'porta-admin')
|
|
133
|
+
addError(accumulator, 'roles', naturalKey, 'control_plane_record');
|
|
134
|
+
else if (dependency !== null)
|
|
135
|
+
addError(accumulator, 'roles', naturalKey, dependency);
|
|
136
|
+
else {
|
|
137
|
+
const matches = roles.get(key(appKey, normalizedRbac(source.slug)));
|
|
138
|
+
if ((matches?.length ?? 0) > 1) {
|
|
139
|
+
addError(accumulator, 'roles', naturalKey, 'ambiguous_dependency');
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
const destination = matches?.[0];
|
|
143
|
+
const same = destination !== undefined &&
|
|
144
|
+
source.name === destination.name &&
|
|
145
|
+
source.description === destination.description;
|
|
146
|
+
addItem(accumulator, 'roles', recordAction(mode, destination !== undefined, same), naturalKey);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
for (const source of manifest.permissions) {
|
|
150
|
+
const naturalKey = { application_slug: source.application_slug, slug: source.slug };
|
|
151
|
+
const appKey = normalizedSlug(source.application_slug);
|
|
152
|
+
if (duplicateRecords.has(recordIdentity('permissions', naturalKey)))
|
|
153
|
+
continue;
|
|
154
|
+
if (!applicationIsSelected(manifest, source.application_slug)) {
|
|
155
|
+
addError(accumulator, 'permissions', naturalKey, 'cross_scope_reference');
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
const dependency = parentError(manifestApplications.has(appKey), applications.get(appKey));
|
|
159
|
+
if (appKey === 'porta-admin') {
|
|
160
|
+
addError(accumulator, 'permissions', naturalKey, 'control_plane_record');
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
if (dependency !== null) {
|
|
164
|
+
addError(accumulator, 'permissions', naturalKey, dependency);
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
if (source.module_slug !== null) {
|
|
168
|
+
const moduleKey = key(appKey, normalizedSlug(source.module_slug));
|
|
169
|
+
const moduleDependency = parentError(manifestModules.has(moduleKey), modules.get(moduleKey));
|
|
170
|
+
if (moduleDependency !== null) {
|
|
171
|
+
addError(accumulator, 'permissions', naturalKey, moduleDependency);
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
const matches = permissions.get(key(appKey, normalizedRbac(source.slug)));
|
|
176
|
+
if ((matches?.length ?? 0) > 1) {
|
|
177
|
+
addError(accumulator, 'permissions', naturalKey, 'ambiguous_dependency');
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
const destination = matches?.[0];
|
|
181
|
+
if (destination !== undefined &&
|
|
182
|
+
normalizedSlug(destination.module_slug ?? '') !== normalizedSlug(source.module_slug ?? '')) {
|
|
183
|
+
addError(accumulator, 'permissions', naturalKey, 'incompatible_record');
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
const same = destination !== undefined &&
|
|
187
|
+
source.name === destination.name &&
|
|
188
|
+
source.description === destination.description;
|
|
189
|
+
addItem(accumulator, 'permissions', recordAction(mode, destination !== undefined, same), naturalKey);
|
|
190
|
+
}
|
|
191
|
+
for (const source of manifest.claim_definitions) {
|
|
192
|
+
const naturalKey = { application_slug: source.application_slug, claim_name: source.claim_name };
|
|
193
|
+
const appKey = normalizedSlug(source.application_slug);
|
|
194
|
+
if (duplicateRecords.has(recordIdentity('claim_definitions', naturalKey)))
|
|
195
|
+
continue;
|
|
196
|
+
if (!applicationIsSelected(manifest, source.application_slug)) {
|
|
197
|
+
addError(accumulator, 'claim_definitions', naturalKey, 'cross_scope_reference');
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
const dependency = parentError(manifestApplications.has(appKey), applications.get(appKey));
|
|
201
|
+
if (appKey === 'porta-admin')
|
|
202
|
+
addError(accumulator, 'claim_definitions', naturalKey, 'control_plane_record');
|
|
203
|
+
else if (dependency !== null)
|
|
204
|
+
addError(accumulator, 'claim_definitions', naturalKey, dependency);
|
|
205
|
+
else {
|
|
206
|
+
const matches = claims.get(key(appKey, source.claim_name));
|
|
207
|
+
if ((matches?.length ?? 0) > 1) {
|
|
208
|
+
addError(accumulator, 'claim_definitions', naturalKey, 'ambiguous_dependency');
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
const destination = matches?.[0];
|
|
212
|
+
if (destination !== undefined && destination.claim_type !== source.claim_type) {
|
|
213
|
+
addError(accumulator, 'claim_definitions', naturalKey, 'incompatible_record');
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
const same = destination !== undefined &&
|
|
217
|
+
source.description === destination.description &&
|
|
218
|
+
source.include_in_id_token === destination.include_in_id_token &&
|
|
219
|
+
source.include_in_access_token === destination.include_in_access_token &&
|
|
220
|
+
source.include_in_userinfo === destination.include_in_userinfo;
|
|
221
|
+
addItem(accumulator, 'claim_definitions', recordAction(mode, destination !== undefined, same), naturalKey);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
const rolePermissionEdges = new Set(snapshot.rolePermissions.flatMap((row) => row.permission_slugs.map((permissionSlug) => key(normalizedSlug(row.application_slug), normalizedRbac(row.role_slug), normalizedRbac(permissionSlug)))));
|
|
225
|
+
for (const source of manifest.role_permission_mappings) {
|
|
226
|
+
const naturalKey = { application_slug: source.application_slug, role_slug: source.role_slug };
|
|
227
|
+
const appKey = normalizedSlug(source.application_slug);
|
|
228
|
+
const roleKey = key(appKey, normalizedRbac(source.role_slug));
|
|
229
|
+
if (duplicateRecords.has(recordIdentity('role_permission_mappings', naturalKey)))
|
|
230
|
+
continue;
|
|
231
|
+
if (!applicationIsSelected(manifest, source.application_slug)) {
|
|
232
|
+
addError(accumulator, 'role_permission_mappings', naturalKey, 'cross_scope_reference');
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
let error = appKey === 'porta-admin'
|
|
236
|
+
? 'control_plane_record'
|
|
237
|
+
: parentError(manifestRoles.has(roleKey), roles.get(roleKey));
|
|
238
|
+
for (const permissionSlug of source.permission_slugs) {
|
|
239
|
+
if (error !== null)
|
|
240
|
+
break;
|
|
241
|
+
const permissionKey = key(appKey, normalizedRbac(permissionSlug));
|
|
242
|
+
if (manifestPermissions.has(permissionKey) ||
|
|
243
|
+
dependencyState(permissions.get(permissionKey)) === 'resolved')
|
|
244
|
+
continue;
|
|
245
|
+
const elsewhere = manifest.permissions.some((row) => normalizedRbac(row.slug) === normalizedRbac(permissionSlug)) ||
|
|
246
|
+
snapshot.permissions.some((row) => normalizedRbac(row.slug) === normalizedRbac(permissionSlug));
|
|
247
|
+
error = elsewhere ? 'cross_scope_reference' : 'missing_dependency';
|
|
248
|
+
}
|
|
249
|
+
if (error !== null) {
|
|
250
|
+
addError(accumulator, 'role_permission_mappings', naturalKey, error);
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
const existingEdges = source.permission_slugs.filter((slug) => rolePermissionEdges.has(key(appKey, normalizedRbac(source.role_slug), normalizedRbac(slug)))).length;
|
|
254
|
+
const action = existingEdges === source.permission_slugs.length
|
|
255
|
+
? 'skipped'
|
|
256
|
+
: existingEdges === 0
|
|
257
|
+
? 'created'
|
|
258
|
+
: 'updated';
|
|
259
|
+
addItem(accumulator, 'role_permission_mappings', action, naturalKey);
|
|
260
|
+
}
|
|
261
|
+
for (const source of manifest.users) {
|
|
262
|
+
const naturalKey = { organization_slug: source.organization_slug, email: source.email };
|
|
263
|
+
const orgKey = normalizedSlug(source.organization_slug);
|
|
264
|
+
if (duplicateRecords.has(recordIdentity('users', naturalKey)))
|
|
265
|
+
continue;
|
|
266
|
+
if (selectedOrganization !== null && orgKey !== selectedOrganization) {
|
|
267
|
+
addError(accumulator, 'users', { organization_slug: source.organization_slug, email: '[redacted]' }, 'cross_scope_reference');
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
const dependency = parentError(manifestOrganizations.has(orgKey), organizations.get(orgKey));
|
|
271
|
+
if (orgKey === 'porta-admin')
|
|
272
|
+
addError(accumulator, 'users', naturalKey, 'control_plane_record');
|
|
273
|
+
else if (dependency !== null)
|
|
274
|
+
addError(accumulator, 'users', naturalKey, dependency);
|
|
275
|
+
else {
|
|
276
|
+
const matches = users.get(key(orgKey, normalizedEmail(source.email)));
|
|
277
|
+
if ((matches?.length ?? 0) > 1) {
|
|
278
|
+
addError(accumulator, 'users', naturalKey, 'ambiguous_dependency');
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
const destination = matches?.[0];
|
|
282
|
+
addItem(accumulator, 'users', recordAction(mode, destination !== undefined, destination !== undefined && userMatches(source, destination)), naturalKey);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
const userRoleEdges = new Set(snapshot.userRoles.map((row) => key(normalizedSlug(row.organization_slug), normalizedEmail(row.email), normalizedSlug(row.application_slug), normalizedRbac(row.role_slug))));
|
|
286
|
+
for (const source of manifest.user_role_assignments) {
|
|
287
|
+
const naturalKey = {
|
|
288
|
+
organization_slug: source.organization_slug,
|
|
289
|
+
email: source.email,
|
|
290
|
+
application_slug: source.application_slug,
|
|
291
|
+
role_slug: source.role_slug,
|
|
292
|
+
};
|
|
293
|
+
const orgKey = normalizedSlug(source.organization_slug);
|
|
294
|
+
const appKey = normalizedSlug(source.application_slug);
|
|
295
|
+
const userKey = key(orgKey, normalizedEmail(source.email));
|
|
296
|
+
const roleKey = key(appKey, normalizedRbac(source.role_slug));
|
|
297
|
+
if (duplicateRecords.has(recordIdentity('user_role_assignments', naturalKey)))
|
|
298
|
+
continue;
|
|
299
|
+
let error = null;
|
|
300
|
+
if (!applicationIsSelected(manifest, source.application_slug))
|
|
301
|
+
error = 'cross_scope_reference';
|
|
302
|
+
else if (selectedOrganization !== null && orgKey !== selectedOrganization)
|
|
303
|
+
error = 'cross_scope_reference';
|
|
304
|
+
else if (orgKey === 'porta-admin' || appKey === 'porta-admin')
|
|
305
|
+
error = 'control_plane_record';
|
|
306
|
+
else if (!manifestUsers.has(userKey) && dependencyState(users.get(userKey)) !== 'resolved') {
|
|
307
|
+
const elsewhere = manifest.users.some((row) => normalizedEmail(row.email) === normalizedEmail(source.email)) ||
|
|
308
|
+
snapshot.users.some((row) => normalizedEmail(row.email) === normalizedEmail(source.email));
|
|
309
|
+
error = elsewhere ? 'cross_scope_reference' : 'missing_dependency';
|
|
310
|
+
}
|
|
311
|
+
else if (!manifestRoles.has(roleKey) && dependencyState(roles.get(roleKey)) !== 'resolved') {
|
|
312
|
+
const elsewhere = manifest.roles.some((row) => normalizedRbac(row.slug) === normalizedRbac(source.role_slug)) ||
|
|
313
|
+
snapshot.roles.some((row) => normalizedRbac(row.slug) === normalizedRbac(source.role_slug));
|
|
314
|
+
error = elsewhere ? 'cross_scope_reference' : 'missing_dependency';
|
|
315
|
+
}
|
|
316
|
+
if (error !== null)
|
|
317
|
+
addError(accumulator, 'user_role_assignments', error === 'cross_scope_reference'
|
|
318
|
+
? {
|
|
319
|
+
organization_slug: source.organization_slug,
|
|
320
|
+
email: '[redacted]',
|
|
321
|
+
application_slug: source.application_slug,
|
|
322
|
+
role_slug: source.role_slug,
|
|
323
|
+
}
|
|
324
|
+
: naturalKey, error);
|
|
325
|
+
else
|
|
326
|
+
addItem(accumulator, 'user_role_assignments', userRoleEdges.has(key(orgKey, normalizedEmail(source.email), appKey, normalizedRbac(source.role_slug)))
|
|
327
|
+
? 'skipped'
|
|
328
|
+
: 'created', naturalKey);
|
|
329
|
+
}
|
|
330
|
+
const claimValues = groupByKey(snapshot.userClaimValues, (row) => key(normalizedSlug(row.organization_slug), normalizedEmail(row.email), normalizedSlug(row.application_slug), row.claim_name));
|
|
331
|
+
for (const source of manifest.user_claim_values) {
|
|
332
|
+
const naturalKey = {
|
|
333
|
+
organization_slug: source.organization_slug,
|
|
334
|
+
email: source.email,
|
|
335
|
+
application_slug: source.application_slug,
|
|
336
|
+
claim_name: source.claim_name,
|
|
337
|
+
};
|
|
338
|
+
const orgKey = normalizedSlug(source.organization_slug);
|
|
339
|
+
const appKey = normalizedSlug(source.application_slug);
|
|
340
|
+
const userKey = key(orgKey, normalizedEmail(source.email));
|
|
341
|
+
const claimKey = key(appKey, source.claim_name);
|
|
342
|
+
if (duplicateRecords.has(recordIdentity('user_claim_values', naturalKey)))
|
|
343
|
+
continue;
|
|
344
|
+
let error = null;
|
|
345
|
+
if (!applicationIsSelected(manifest, source.application_slug))
|
|
346
|
+
error = 'cross_scope_reference';
|
|
347
|
+
else if (selectedOrganization !== null && orgKey !== selectedOrganization)
|
|
348
|
+
error = 'cross_scope_reference';
|
|
349
|
+
else if (orgKey === 'porta-admin' || appKey === 'porta-admin')
|
|
350
|
+
error = 'control_plane_record';
|
|
351
|
+
else if (!manifestUsers.has(userKey) && dependencyState(users.get(userKey)) !== 'resolved')
|
|
352
|
+
error = 'missing_dependency';
|
|
353
|
+
else if (!manifestClaims.has(claimKey) &&
|
|
354
|
+
dependencyState(claims.get(claimKey)) !== 'resolved') {
|
|
355
|
+
const elsewhere = manifest.claim_definitions.some((row) => row.claim_name === source.claim_name) ||
|
|
356
|
+
snapshot.claimDefinitions.some((row) => row.claim_name === source.claim_name);
|
|
357
|
+
error = elsewhere ? 'cross_scope_reference' : 'missing_dependency';
|
|
358
|
+
}
|
|
359
|
+
const claimType = manifest.claim_definitions.find((definition) => normalizedSlug(definition.application_slug) === appKey &&
|
|
360
|
+
definition.claim_name === source.claim_name)?.claim_type ?? claims.get(claimKey)?.[0]?.claim_type;
|
|
361
|
+
if (error === null &&
|
|
362
|
+
(claimType === undefined || !validateClaimValue(claimType, source.value).valid)) {
|
|
363
|
+
error = 'invalid_record';
|
|
364
|
+
}
|
|
365
|
+
if (error !== null)
|
|
366
|
+
addError(accumulator, 'user_claim_values', error === 'cross_scope_reference'
|
|
367
|
+
? {
|
|
368
|
+
organization_slug: source.organization_slug,
|
|
369
|
+
email: '[redacted]',
|
|
370
|
+
application_slug: source.application_slug,
|
|
371
|
+
claim_name: source.claim_name,
|
|
372
|
+
}
|
|
373
|
+
: naturalKey, error);
|
|
374
|
+
else {
|
|
375
|
+
const matches = claimValues.get(key(orgKey, normalizedEmail(source.email), appKey, source.claim_name));
|
|
376
|
+
if ((matches?.length ?? 0) > 1) {
|
|
377
|
+
addError(accumulator, 'user_claim_values', naturalKey, 'ambiguous_dependency');
|
|
378
|
+
continue;
|
|
379
|
+
}
|
|
380
|
+
const destination = matches?.[0];
|
|
381
|
+
addItem(accumulator, 'user_claim_values', recordAction(mode, destination !== undefined, destination !== undefined && sameValue(source.value, destination.value)), naturalKey);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
for (const source of manifest.clients) {
|
|
385
|
+
const naturalKey = { client_id: source.client_id };
|
|
386
|
+
const orgKey = normalizedSlug(source.organization_slug);
|
|
387
|
+
const appKey = normalizedSlug(source.application_slug);
|
|
388
|
+
if (duplicateRecords.has(recordIdentity('clients', naturalKey)))
|
|
389
|
+
continue;
|
|
390
|
+
if (!applicationIsSelected(manifest, source.application_slug)) {
|
|
391
|
+
addError(accumulator, 'clients', naturalKey, 'cross_scope_reference');
|
|
392
|
+
continue;
|
|
393
|
+
}
|
|
394
|
+
if (selectedOrganization !== null && orgKey !== selectedOrganization) {
|
|
395
|
+
addError(accumulator, 'clients', naturalKey, 'cross_scope_reference');
|
|
396
|
+
continue;
|
|
397
|
+
}
|
|
398
|
+
if (orgKey === 'porta-admin' || appKey === 'porta-admin') {
|
|
399
|
+
addError(accumulator, 'clients', naturalKey, 'control_plane_record');
|
|
400
|
+
continue;
|
|
401
|
+
}
|
|
402
|
+
const matches = clients.get(source.client_id);
|
|
403
|
+
if ((matches?.length ?? 0) > 1) {
|
|
404
|
+
addError(accumulator, 'clients', naturalKey, 'ambiguous_dependency');
|
|
405
|
+
continue;
|
|
406
|
+
}
|
|
407
|
+
const destination = matches?.[0];
|
|
408
|
+
if (destination !== undefined &&
|
|
409
|
+
(normalizedSlug(destination.organization_slug) !== orgKey ||
|
|
410
|
+
normalizedSlug(destination.application_slug) !== appKey)) {
|
|
411
|
+
addError(accumulator, 'clients', naturalKey, 'client_id_collision');
|
|
412
|
+
continue;
|
|
413
|
+
}
|
|
414
|
+
if (destination === undefined) {
|
|
415
|
+
const orgDependency = parentError(manifestOrganizations.has(orgKey), organizations.get(orgKey));
|
|
416
|
+
const appDependency = parentError(manifestApplications.has(appKey), applications.get(appKey));
|
|
417
|
+
if (orgDependency !== null || appDependency !== null) {
|
|
418
|
+
addError(accumulator, 'clients', naturalKey, orgDependency ?? appDependency ?? 'missing_dependency');
|
|
419
|
+
continue;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
if (destination !== undefined &&
|
|
423
|
+
(destination.client_type !== source.client_type ||
|
|
424
|
+
destination.application_type !== source.application_type)) {
|
|
425
|
+
addError(accumulator, 'clients', naturalKey, 'incompatible_record');
|
|
426
|
+
continue;
|
|
427
|
+
}
|
|
428
|
+
addItem(accumulator, 'clients', recordAction(mode, destination !== undefined, destination !== undefined && clientMutableValuesMatch(source, destination)), naturalKey, destination === undefined && source.client_type === 'confidential');
|
|
429
|
+
}
|
|
430
|
+
const result = portabilityResultSchema.parse({
|
|
431
|
+
mode,
|
|
432
|
+
summary: accumulator.summary,
|
|
433
|
+
items: accumulator.errors.length > 0 ? [] : accumulator.items.sort(compareOutcomes),
|
|
434
|
+
errors: accumulator.errors.sort(compareOutcomes),
|
|
435
|
+
});
|
|
436
|
+
return { manifest, snapshot, result };
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Build a safe preview result without changing product, credential, or audit records.
|
|
440
|
+
*
|
|
441
|
+
* @param manifest - Complete manifest received from an import request
|
|
442
|
+
* @param mode - Import behavior represented by the plan
|
|
443
|
+
* @returns Ordered safe plan result
|
|
444
|
+
* @example
|
|
445
|
+
* const preview = await buildPortabilityPlan(manifest, 'dry-run');
|
|
446
|
+
*/
|
|
447
|
+
export async function buildPortabilityPlan(manifest, mode) {
|
|
448
|
+
return runDatabaseTransaction(async () => (await buildResolvedPortabilityPlan(manifest, mode)).result);
|
|
449
|
+
}
|
|
450
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/portability/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/** Explicit PostgreSQL reads used by selective portability export. */
|
|
2
|
+
import type { PoolClient } from 'pg';
|
|
3
|
+
import type { PortabilityApplication, PortabilityApplicationModule, PortabilityApplicationSelection, PortabilityClaimDefinition, PortabilityOrganization, PortabilityPermission, PortabilityRole, PortabilityRolePermissionMapping, PortabilityScope, PortabilityUser, PortabilityUserClaimValue, PortabilityUserRoleAssignment, PortabilityClient } from './types.js';
|
|
4
|
+
/** Resolved organization scope with internal keys kept outside the manifest. */
|
|
5
|
+
export interface ResolvedOrganizationExportScope {
|
|
6
|
+
/** Internal identifiers used only to qualify dependent reads. */
|
|
7
|
+
readonly organizationIds: readonly string[];
|
|
8
|
+
/** Portable organization records. */
|
|
9
|
+
readonly organizations: readonly PortabilityOrganization[];
|
|
10
|
+
}
|
|
11
|
+
/** Resolved application selection with internal keys kept outside the manifest. */
|
|
12
|
+
export interface ResolvedApplicationExportSelection {
|
|
13
|
+
/** Internal identifiers used only to qualify dependent reads. */
|
|
14
|
+
readonly applicationIds: readonly string[];
|
|
15
|
+
/** Portable selected applications. */
|
|
16
|
+
readonly applications: readonly PortabilityApplication[];
|
|
17
|
+
}
|
|
18
|
+
/** Portable authorization collections owned by selected applications. */
|
|
19
|
+
export interface PortabilityAuthorizationGraph {
|
|
20
|
+
/** Selected application modules. */
|
|
21
|
+
readonly applicationModules: readonly PortabilityApplicationModule[];
|
|
22
|
+
/** Selected application roles. */
|
|
23
|
+
readonly roles: readonly PortabilityRole[];
|
|
24
|
+
/** Selected application permissions. */
|
|
25
|
+
readonly permissions: readonly PortabilityPermission[];
|
|
26
|
+
/** Selected application claim definitions. */
|
|
27
|
+
readonly claimDefinitions: readonly PortabilityClaimDefinition[];
|
|
28
|
+
/** Selected role-to-permission mappings. */
|
|
29
|
+
readonly rolePermissionMappings: readonly PortabilityRolePermissionMapping[];
|
|
30
|
+
}
|
|
31
|
+
/** Portable users and application-qualified relationship collections. */
|
|
32
|
+
export interface PortabilityUserGraph {
|
|
33
|
+
/** Every user in the selected organization scope. */
|
|
34
|
+
readonly users: readonly PortabilityUser[];
|
|
35
|
+
/** Role assignments retained by the application selection. */
|
|
36
|
+
readonly userRoleAssignments: readonly PortabilityUserRoleAssignment[];
|
|
37
|
+
/** Claim values retained by the application selection. */
|
|
38
|
+
readonly userClaimValues: readonly PortabilityUserClaimValue[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Resolve an organization or environment export scope while excluding the control plane.
|
|
42
|
+
*
|
|
43
|
+
* @param client - Request-owned PostgreSQL client
|
|
44
|
+
* @param scope - Validated public export scope
|
|
45
|
+
* @param controlPlaneOrganizationId - Authenticated control-plane organization identifier
|
|
46
|
+
* @returns Portable organizations and private identifiers for dependent reads
|
|
47
|
+
* @throws PortabilityError when an organization scope is missing or protected
|
|
48
|
+
*/
|
|
49
|
+
export declare function readOrganizationExportScope(client: PoolClient, scope: PortabilityScope, controlPlaneOrganizationId: string): Promise<ResolvedOrganizationExportScope>;
|
|
50
|
+
/**
|
|
51
|
+
* Resolve the explicit global application selection and exclude Porta's Admin application.
|
|
52
|
+
*
|
|
53
|
+
* @param client - Request-owned PostgreSQL client
|
|
54
|
+
* @param selection - Validated all-or-explicit application choice
|
|
55
|
+
* @returns Portable applications and private identifiers for dependent reads
|
|
56
|
+
* @throws PortabilityError when an explicit slug is missing or selects the Admin application
|
|
57
|
+
*/
|
|
58
|
+
export declare function readApplicationExportSelection(client: PoolClient, selection: PortabilityApplicationSelection): Promise<ResolvedApplicationExportSelection>;
|
|
59
|
+
/**
|
|
60
|
+
* Read the complete portable authorization graph for selected applications.
|
|
61
|
+
*
|
|
62
|
+
* @param client - Request-owned PostgreSQL client
|
|
63
|
+
* @param applicationIds - Resolved internal application identifiers
|
|
64
|
+
* @returns All portable child collections for those applications
|
|
65
|
+
*/
|
|
66
|
+
export declare function readAuthorizationExportGraph(client: PoolClient, applicationIds: readonly string[]): Promise<PortabilityAuthorizationGraph>;
|
|
67
|
+
/**
|
|
68
|
+
* Attach validated stored branding bytes to portable organization records.
|
|
69
|
+
*
|
|
70
|
+
* @param client - Request-owned PostgreSQL client
|
|
71
|
+
* @param organizations - Portable organizations in the selected scope
|
|
72
|
+
* @param organizationIds - Matching private organization identifiers
|
|
73
|
+
* @returns Organization records with validated logo and favicon content
|
|
74
|
+
* @throws Error when stored bytes no longer satisfy the branding validation boundary
|
|
75
|
+
*/
|
|
76
|
+
export declare function attachOrganizationBrandingAssets(client: PoolClient, organizations: readonly PortabilityOrganization[], organizationIds: readonly string[]): Promise<readonly PortabilityOrganization[]>;
|
|
77
|
+
/**
|
|
78
|
+
* Read every scoped user and only relationships owned by selected applications.
|
|
79
|
+
*
|
|
80
|
+
* @param client - Request-owned PostgreSQL client
|
|
81
|
+
* @param organizationIds - Resolved organization scope identifiers
|
|
82
|
+
* @param applicationIds - Resolved application selection identifiers
|
|
83
|
+
* @returns Portable users, role assignments, and claim values
|
|
84
|
+
*/
|
|
85
|
+
export declare function readUserExportGraph(client: PoolClient, organizationIds: readonly string[], applicationIds: readonly string[]): Promise<PortabilityUserGraph>;
|
|
86
|
+
/**
|
|
87
|
+
* Read OIDC clients owned by both the selected organization and application scopes.
|
|
88
|
+
*
|
|
89
|
+
* @param client - Request-owned PostgreSQL client
|
|
90
|
+
* @param organizationIds - Resolved organization scope identifiers
|
|
91
|
+
* @param applicationIds - Resolved application selection identifiers
|
|
92
|
+
* @returns Portable clients without credential material
|
|
93
|
+
*/
|
|
94
|
+
export declare function readClientExportRecords(client: PoolClient, organizationIds: readonly string[], applicationIds: readonly string[]): Promise<readonly PortabilityClient[]>;
|
|
95
|
+
//# sourceMappingURL=repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/portability/repository.ts"],"names":[],"mappings":"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"}
|