@portaidentity/server 1.7.3 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/dist/applications/index.d.ts +2 -2
- package/dist/applications/index.d.ts.map +1 -1
- package/dist/applications/index.js +2 -2
- package/dist/applications/index.js.map +1 -1
- package/dist/applications/repository.d.ts +49 -4
- package/dist/applications/repository.d.ts.map +1 -1
- package/dist/applications/repository.js +148 -10
- package/dist/applications/repository.js.map +1 -1
- package/dist/applications/service.d.ts +35 -17
- package/dist/applications/service.d.ts.map +1 -1
- package/dist/applications/service.js +144 -35
- package/dist/applications/service.js.map +1 -1
- package/dist/applications/types.d.ts +1 -1
- package/dist/applications/types.d.ts.map +1 -1
- package/dist/applications/validators.d.ts +14 -0
- package/dist/applications/validators.d.ts.map +1 -0
- package/dist/applications/validators.js +14 -0
- package/dist/applications/validators.js.map +1 -0
- package/dist/auth/effective-branding.d.ts +35 -0
- package/dist/auth/effective-branding.d.ts.map +1 -0
- package/dist/auth/effective-branding.js +81 -0
- package/dist/auth/effective-branding.js.map +1 -0
- package/dist/auth/email-service.d.ts +3 -8
- package/dist/auth/email-service.d.ts.map +1 -1
- package/dist/auth/email-service.js +22 -30
- package/dist/auth/email-service.js.map +1 -1
- package/dist/auth/i18n.d.ts +5 -0
- package/dist/auth/i18n.d.ts.map +1 -1
- package/dist/auth/i18n.js +6 -5
- package/dist/auth/i18n.js.map +1 -1
- package/dist/auth/rate-limiter.d.ts +6 -10
- package/dist/auth/rate-limiter.d.ts.map +1 -1
- package/dist/auth/rate-limiter.js +12 -16
- package/dist/auth/rate-limiter.js.map +1 -1
- package/dist/auth/recovery-job-processor.d.ts.map +1 -1
- package/dist/auth/recovery-job-processor.js +1 -1
- package/dist/auth/recovery-job-processor.js.map +1 -1
- package/dist/auth/template-engine.d.ts +3 -1
- package/dist/auth/template-engine.d.ts.map +1 -1
- package/dist/auth/template-engine.js +1 -1
- package/dist/auth/template-engine.js.map +1 -1
- package/dist/auth/token-repository.d.ts +9 -3
- package/dist/auth/token-repository.d.ts.map +1 -1
- package/dist/auth/token-repository.js +17 -8
- package/dist/auth/token-repository.js.map +1 -1
- package/dist/cli/commands/init.d.ts +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +12 -12
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/error-handler.d.ts +3 -2
- package/dist/cli/error-handler.d.ts.map +1 -1
- package/dist/cli/error-handler.js +9 -2
- package/dist/cli/error-handler.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/clients/index.d.ts +1 -1
- package/dist/clients/index.js +1 -1
- package/dist/clients/repository.d.ts +24 -0
- package/dist/clients/repository.d.ts.map +1 -1
- package/dist/clients/repository.js +39 -0
- package/dist/clients/repository.js.map +1 -1
- package/dist/clients/secret-repository.d.ts +35 -8
- package/dist/clients/secret-repository.d.ts.map +1 -1
- package/dist/clients/secret-repository.js +69 -16
- package/dist/clients/secret-repository.js.map +1 -1
- package/dist/clients/secret-service.d.ts +5 -9
- package/dist/clients/secret-service.d.ts.map +1 -1
- package/dist/clients/secret-service.js +13 -22
- package/dist/clients/secret-service.js.map +1 -1
- package/dist/clients/service.d.ts +10 -13
- package/dist/clients/service.d.ts.map +1 -1
- package/dist/clients/service.js +121 -42
- package/dist/clients/service.js.map +1 -1
- package/dist/clients/types.d.ts +14 -1
- package/dist/clients/types.d.ts.map +1 -1
- package/dist/clients/types.js +1 -0
- package/dist/clients/types.js.map +1 -1
- package/dist/clients/validators.d.ts +83 -1
- package/dist/clients/validators.d.ts.map +1 -1
- package/dist/clients/validators.js +110 -0
- package/dist/clients/validators.js.map +1 -1
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/schema.d.ts +1 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +23 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/custom-claims/repository.d.ts +14 -9
- package/dist/custom-claims/repository.d.ts.map +1 -1
- package/dist/custom-claims/repository.js +38 -11
- package/dist/custom-claims/repository.js.map +1 -1
- package/dist/custom-claims/service.d.ts +11 -6
- package/dist/custom-claims/service.d.ts.map +1 -1
- package/dist/custom-claims/service.js +43 -20
- package/dist/custom-claims/service.js.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/admin-permissions.d.ts +12 -7
- package/dist/lib/admin-permissions.d.ts.map +1 -1
- package/dist/lib/admin-permissions.js +26 -16
- package/dist/lib/admin-permissions.js.map +1 -1
- package/dist/lib/audit-log.d.ts +2 -2
- package/dist/lib/audit-log.d.ts.map +1 -1
- package/dist/lib/audit-log.js +1 -1
- package/dist/lib/audit-log.js.map +1 -1
- package/dist/lib/authority-revocation.d.ts +18 -0
- package/dist/lib/authority-revocation.d.ts.map +1 -0
- package/dist/lib/authority-revocation.js +37 -0
- package/dist/lib/authority-revocation.js.map +1 -0
- package/dist/lib/branding-assets.d.ts +35 -5
- package/dist/lib/branding-assets.d.ts.map +1 -1
- package/dist/lib/branding-assets.js +33 -26
- package/dist/lib/branding-assets.js.map +1 -1
- package/dist/lib/bulk-operations.d.ts +1 -1
- package/dist/lib/bulk-operations.d.ts.map +1 -1
- package/dist/lib/bulk-operations.js +1 -13
- package/dist/lib/bulk-operations.js.map +1 -1
- package/dist/lib/cursor.d.ts +2 -0
- package/dist/lib/cursor.d.ts.map +1 -1
- package/dist/lib/cursor.js +2 -7
- package/dist/lib/cursor.js.map +1 -1
- package/dist/lib/database.d.ts.map +1 -1
- package/dist/lib/database.js +5 -0
- package/dist/lib/database.js.map +1 -1
- package/dist/lib/deletion-cleanup.d.ts +43 -0
- package/dist/lib/deletion-cleanup.d.ts.map +1 -0
- package/dist/lib/deletion-cleanup.js +207 -0
- package/dist/lib/deletion-cleanup.js.map +1 -0
- package/dist/lib/image-validator.d.ts +3 -1
- package/dist/lib/image-validator.d.ts.map +1 -1
- package/dist/lib/image-validator.js +32 -19
- package/dist/lib/image-validator.js.map +1 -1
- package/dist/lib/log-format.d.ts +20 -0
- package/dist/lib/log-format.d.ts.map +1 -0
- package/dist/lib/log-format.js +22 -0
- package/dist/lib/log-format.js.map +1 -0
- package/dist/lib/logger.d.ts +3 -1
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +21 -4
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/redis.d.ts.map +1 -1
- package/dist/lib/redis.js +3 -0
- package/dist/lib/redis.js.map +1 -1
- package/dist/lib/session-tracking.d.ts +73 -11
- package/dist/lib/session-tracking.d.ts.map +1 -1
- package/dist/lib/session-tracking.js +76 -32
- package/dist/lib/session-tracking.js.map +1 -1
- package/dist/lib/signing-key-crypto.d.ts.map +1 -1
- package/dist/lib/signing-key-crypto.js +4 -5
- package/dist/lib/signing-key-crypto.js.map +1 -1
- package/dist/lib/signing-keys.d.ts +3 -4
- package/dist/lib/signing-keys.d.ts.map +1 -1
- package/dist/lib/signing-keys.js +66 -41
- package/dist/lib/signing-keys.js.map +1 -1
- package/dist/lib/super-admin-protection.d.ts +5 -5
- package/dist/lib/super-admin-protection.d.ts.map +1 -1
- package/dist/lib/super-admin-protection.js +6 -9
- package/dist/lib/super-admin-protection.js.map +1 -1
- package/dist/lib/system-config-catalog.d.ts +268 -0
- package/dist/lib/system-config-catalog.d.ts.map +1 -0
- package/dist/lib/system-config-catalog.js +90 -0
- package/dist/lib/system-config-catalog.js.map +1 -0
- package/dist/lib/system-config.d.ts +30 -33
- package/dist/lib/system-config.d.ts.map +1 -1
- package/dist/lib/system-config.js +78 -93
- package/dist/lib/system-config.js.map +1 -1
- package/dist/lib/with-timeout.d.ts +32 -0
- package/dist/lib/with-timeout.d.ts.map +1 -0
- package/dist/lib/with-timeout.js +45 -0
- package/dist/lib/with-timeout.js.map +1 -0
- package/dist/middleware/admin-auth.d.ts +6 -5
- package/dist/middleware/admin-auth.d.ts.map +1 -1
- package/dist/middleware/admin-auth.js +30 -20
- package/dist/middleware/admin-auth.js.map +1 -1
- package/dist/middleware/admin-cors.d.ts +3 -3
- package/dist/middleware/admin-cors.js +3 -3
- package/dist/middleware/admin-mutation-audit.d.ts +3 -2
- package/dist/middleware/admin-mutation-audit.d.ts.map +1 -1
- package/dist/middleware/admin-mutation-audit.js +12 -5
- package/dist/middleware/admin-mutation-audit.js.map +1 -1
- package/dist/middleware/admin-rate-limiter.d.ts +7 -8
- package/dist/middleware/admin-rate-limiter.d.ts.map +1 -1
- package/dist/middleware/admin-rate-limiter.js +7 -8
- package/dist/middleware/admin-rate-limiter.js.map +1 -1
- package/dist/middleware/client-secret-hash.d.ts +10 -29
- package/dist/middleware/client-secret-hash.d.ts.map +1 -1
- package/dist/middleware/client-secret-hash.js +161 -59
- package/dist/middleware/client-secret-hash.js.map +1 -1
- package/dist/middleware/health.d.ts +17 -0
- package/dist/middleware/health.d.ts.map +1 -1
- package/dist/middleware/health.js +25 -21
- package/dist/middleware/health.js.map +1 -1
- package/dist/middleware/ready.d.ts.map +1 -1
- package/dist/middleware/ready.js +1 -12
- package/dist/middleware/ready.js.map +1 -1
- package/dist/middleware/require-existing-organization.d.ts +18 -0
- package/dist/middleware/require-existing-organization.d.ts.map +1 -0
- package/dist/middleware/require-existing-organization.js +38 -0
- package/dist/middleware/require-existing-organization.js.map +1 -0
- package/dist/middleware/require-permission.d.ts.map +1 -1
- package/dist/middleware/require-permission.js +35 -1
- package/dist/middleware/require-permission.js.map +1 -1
- package/dist/middleware/require-user-organization.d.ts.map +1 -1
- package/dist/middleware/require-user-organization.js +4 -2
- package/dist/middleware/require-user-organization.js.map +1 -1
- package/dist/middleware/security-headers.d.ts +18 -0
- package/dist/middleware/security-headers.d.ts.map +1 -1
- package/dist/middleware/security-headers.js +32 -1
- package/dist/middleware/security-headers.js.map +1 -1
- package/dist/middleware/tenant-resolver.d.ts +1 -2
- package/dist/middleware/tenant-resolver.d.ts.map +1 -1
- package/dist/middleware/tenant-resolver.js +1 -5
- package/dist/middleware/tenant-resolver.js.map +1 -1
- package/dist/middleware/token-rate-limiter.d.ts +37 -16
- package/dist/middleware/token-rate-limiter.d.ts.map +1 -1
- package/dist/middleware/token-rate-limiter.js +126 -54
- package/dist/middleware/token-rate-limiter.js.map +1 -1
- package/dist/oidc/account-finder.d.ts +5 -5
- package/dist/oidc/account-finder.d.ts.map +1 -1
- package/dist/oidc/account-finder.js +31 -23
- package/dist/oidc/account-finder.js.map +1 -1
- package/dist/oidc/adapter-factory.d.ts.map +1 -1
- package/dist/oidc/adapter-factory.js +83 -3
- package/dist/oidc/adapter-factory.js.map +1 -1
- package/dist/oidc/configuration.d.ts +3 -8
- package/dist/oidc/configuration.d.ts.map +1 -1
- package/dist/oidc/configuration.js +67 -50
- package/dist/oidc/configuration.js.map +1 -1
- package/dist/oidc/provider.d.ts.map +1 -1
- package/dist/oidc/provider.js +7 -0
- package/dist/oidc/provider.js.map +1 -1
- package/dist/oidc/redis-adapter.d.ts +2 -3
- package/dist/oidc/redis-adapter.d.ts.map +1 -1
- package/dist/oidc/redis-adapter.js +54 -46
- package/dist/oidc/redis-adapter.js.map +1 -1
- package/dist/organizations/branding-url.d.ts +17 -0
- package/dist/organizations/branding-url.d.ts.map +1 -0
- package/dist/organizations/branding-url.js +38 -0
- package/dist/organizations/branding-url.js.map +1 -0
- package/dist/organizations/index.d.ts +2 -2
- package/dist/organizations/index.d.ts.map +1 -1
- package/dist/organizations/index.js +1 -1
- package/dist/organizations/index.js.map +1 -1
- package/dist/organizations/repository.d.ts +22 -32
- package/dist/organizations/repository.d.ts.map +1 -1
- package/dist/organizations/repository.js +64 -45
- package/dist/organizations/repository.js.map +1 -1
- package/dist/organizations/service.d.ts +14 -46
- package/dist/organizations/service.d.ts.map +1 -1
- package/dist/organizations/service.js +60 -112
- package/dist/organizations/service.js.map +1 -1
- package/dist/organizations/types.d.ts +1 -15
- package/dist/organizations/types.d.ts.map +1 -1
- package/dist/organizations/validators.d.ts +41 -0
- package/dist/organizations/validators.d.ts.map +1 -0
- package/dist/organizations/validators.js +48 -0
- package/dist/organizations/validators.js.map +1 -0
- package/dist/portability/apply.d.ts +15 -0
- package/dist/portability/apply.d.ts.map +1 -0
- package/dist/portability/apply.js +274 -0
- package/dist/portability/apply.js.map +1 -0
- package/dist/portability/authorization.d.ts +30 -0
- package/dist/portability/authorization.d.ts.map +1 -0
- package/dist/portability/authorization.js +130 -0
- package/dist/portability/authorization.js.map +1 -0
- package/dist/portability/cleanup.d.ts +29 -0
- package/dist/portability/cleanup.d.ts.map +1 -0
- package/dist/portability/cleanup.js +167 -0
- package/dist/portability/cleanup.js.map +1 -0
- package/dist/portability/export.d.ts +18 -0
- package/dist/portability/export.d.ts.map +1 -0
- package/dist/portability/export.js +125 -0
- package/dist/portability/export.js.map +1 -0
- package/dist/portability/import-repository.d.ts +204 -0
- package/dist/portability/import-repository.d.ts.map +1 -0
- package/dist/portability/import-repository.js +348 -0
- package/dist/portability/import-repository.js.map +1 -0
- package/dist/portability/import-user-client-writers.d.ts +40 -0
- package/dist/portability/import-user-client-writers.d.ts.map +1 -0
- package/dist/portability/import-user-client-writers.js +171 -0
- package/dist/portability/import-user-client-writers.js.map +1 -0
- package/dist/portability/index.d.ts +8 -0
- package/dist/portability/index.d.ts.map +1 -0
- package/dist/portability/index.js +8 -0
- package/dist/portability/index.js.map +1 -0
- package/dist/portability/plan-support.d.ts +137 -0
- package/dist/portability/plan-support.d.ts.map +1 -0
- package/dist/portability/plan-support.js +337 -0
- package/dist/portability/plan-support.js.map +1 -0
- package/dist/portability/plan.d.ts +34 -0
- package/dist/portability/plan.d.ts.map +1 -0
- package/dist/portability/plan.js +450 -0
- package/dist/portability/plan.js.map +1 -0
- package/dist/portability/repository.d.ts +95 -0
- package/dist/portability/repository.d.ts.map +1 -0
- package/dist/portability/repository.js +390 -0
- package/dist/portability/repository.js.map +1 -0
- package/dist/portability/schema.d.ts +591 -0
- package/dist/portability/schema.d.ts.map +1 -0
- package/dist/portability/schema.js +459 -0
- package/dist/portability/schema.js.map +1 -0
- package/dist/portability/types.d.ts +382 -0
- package/dist/portability/types.d.ts.map +1 -0
- package/dist/portability/types.js +19 -0
- package/dist/portability/types.js.map +1 -0
- package/dist/rbac/errors.d.ts +4 -0
- package/dist/rbac/errors.d.ts.map +1 -1
- package/dist/rbac/errors.js +7 -0
- package/dist/rbac/errors.js.map +1 -1
- package/dist/rbac/index.d.ts +3 -3
- package/dist/rbac/index.d.ts.map +1 -1
- package/dist/rbac/index.js +3 -3
- package/dist/rbac/index.js.map +1 -1
- package/dist/rbac/mapping-repository.d.ts +84 -9
- package/dist/rbac/mapping-repository.d.ts.map +1 -1
- package/dist/rbac/mapping-repository.js +222 -55
- package/dist/rbac/mapping-repository.js.map +1 -1
- package/dist/rbac/permission-repository.d.ts +36 -19
- package/dist/rbac/permission-repository.d.ts.map +1 -1
- package/dist/rbac/permission-repository.js +93 -35
- package/dist/rbac/permission-repository.js.map +1 -1
- package/dist/rbac/permission-service.d.ts +18 -19
- package/dist/rbac/permission-service.d.ts.map +1 -1
- package/dist/rbac/permission-service.js +100 -57
- package/dist/rbac/permission-service.js.map +1 -1
- package/dist/rbac/role-repository.d.ts +29 -24
- package/dist/rbac/role-repository.d.ts.map +1 -1
- package/dist/rbac/role-repository.js +66 -43
- package/dist/rbac/role-repository.js.map +1 -1
- package/dist/rbac/role-service.d.ts +35 -32
- package/dist/rbac/role-service.d.ts.map +1 -1
- package/dist/rbac/role-service.js +210 -96
- package/dist/rbac/role-service.js.map +1 -1
- package/dist/rbac/slugs.d.ts +16 -27
- package/dist/rbac/slugs.d.ts.map +1 -1
- package/dist/rbac/slugs.js +36 -59
- package/dist/rbac/slugs.js.map +1 -1
- package/dist/rbac/types.d.ts +2 -4
- package/dist/rbac/types.d.ts.map +1 -1
- package/dist/rbac/types.js.map +1 -1
- package/dist/rbac/user-role-service.d.ts +23 -24
- package/dist/rbac/user-role-service.d.ts.map +1 -1
- package/dist/rbac/user-role-service.js +117 -61
- package/dist/rbac/user-role-service.js.map +1 -1
- package/dist/routes/applications.d.ts +4 -2
- package/dist/routes/applications.d.ts.map +1 -1
- package/dist/routes/applications.js +57 -19
- package/dist/routes/applications.js.map +1 -1
- package/dist/routes/audit.js +1 -1
- package/dist/routes/audit.js.map +1 -1
- package/dist/routes/branding.d.ts +3 -3
- package/dist/routes/branding.d.ts.map +1 -1
- package/dist/routes/branding.js +44 -16
- package/dist/routes/branding.js.map +1 -1
- package/dist/routes/bulk.d.ts +0 -5
- package/dist/routes/bulk.d.ts.map +1 -1
- package/dist/routes/bulk.js +3 -5
- package/dist/routes/bulk.js.map +1 -1
- package/dist/routes/clients.d.ts +4 -4
- package/dist/routes/clients.d.ts.map +1 -1
- package/dist/routes/clients.js +113 -52
- package/dist/routes/clients.js.map +1 -1
- package/dist/routes/config.d.ts +17 -12
- package/dist/routes/config.d.ts.map +1 -1
- package/dist/routes/config.js +165 -64
- package/dist/routes/config.js.map +1 -1
- package/dist/routes/custom-claims.d.ts.map +1 -1
- package/dist/routes/custom-claims.js +8 -2
- package/dist/routes/custom-claims.js.map +1 -1
- package/dist/routes/exports.d.ts +2 -1
- package/dist/routes/exports.d.ts.map +1 -1
- package/dist/routes/exports.js +57 -1
- package/dist/routes/exports.js.map +1 -1
- package/dist/routes/imports.d.ts +2 -2
- package/dist/routes/imports.d.ts.map +1 -1
- package/dist/routes/imports.js +95 -40
- package/dist/routes/imports.js.map +1 -1
- package/dist/routes/interactions.d.ts.map +1 -1
- package/dist/routes/interactions.js +113 -87
- package/dist/routes/interactions.js.map +1 -1
- package/dist/routes/invitation.d.ts.map +1 -1
- package/dist/routes/invitation.js +28 -27
- package/dist/routes/invitation.js.map +1 -1
- package/dist/routes/keys.d.ts.map +1 -1
- package/dist/routes/keys.js +26 -13
- package/dist/routes/keys.js.map +1 -1
- package/dist/routes/magic-link.d.ts.map +1 -1
- package/dist/routes/magic-link.js +5 -17
- package/dist/routes/magic-link.js.map +1 -1
- package/dist/routes/organizations.d.ts +1 -2
- package/dist/routes/organizations.d.ts.map +1 -1
- package/dist/routes/organizations.js +43 -104
- package/dist/routes/organizations.js.map +1 -1
- package/dist/routes/password-reset.d.ts.map +1 -1
- package/dist/routes/password-reset.js +13 -35
- package/dist/routes/password-reset.js.map +1 -1
- package/dist/routes/permissions.d.ts +1 -1
- package/dist/routes/permissions.d.ts.map +1 -1
- package/dist/routes/permissions.js +58 -17
- package/dist/routes/permissions.js.map +1 -1
- package/dist/routes/public-branding.d.ts +16 -0
- package/dist/routes/public-branding.d.ts.map +1 -0
- package/dist/routes/public-branding.js +52 -0
- package/dist/routes/public-branding.js.map +1 -0
- package/dist/routes/roles.d.ts +1 -1
- package/dist/routes/roles.d.ts.map +1 -1
- package/dist/routes/roles.js +63 -21
- package/dist/routes/roles.js.map +1 -1
- package/dist/routes/sessions.d.ts.map +1 -1
- package/dist/routes/sessions.js +23 -12
- package/dist/routes/sessions.js.map +1 -1
- package/dist/routes/two-factor.d.ts.map +1 -1
- package/dist/routes/two-factor.js +91 -38
- package/dist/routes/two-factor.js.map +1 -1
- package/dist/routes/user-roles.d.ts.map +1 -1
- package/dist/routes/user-roles.js +56 -9
- package/dist/routes/user-roles.js.map +1 -1
- package/dist/routes/users.d.ts +4 -8
- package/dist/routes/users.d.ts.map +1 -1
- package/dist/routes/users.js +108 -265
- package/dist/routes/users.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +53 -37
- package/dist/server.js.map +1 -1
- package/dist/two-factor/errors.d.ts +9 -0
- package/dist/two-factor/errors.d.ts.map +1 -1
- package/dist/two-factor/errors.js +12 -0
- package/dist/two-factor/errors.js.map +1 -1
- package/dist/two-factor/index.d.ts +5 -4
- package/dist/two-factor/index.d.ts.map +1 -1
- package/dist/two-factor/index.js +4 -4
- package/dist/two-factor/index.js.map +1 -1
- package/dist/two-factor/repository.d.ts +17 -6
- package/dist/two-factor/repository.d.ts.map +1 -1
- package/dist/two-factor/repository.js +37 -9
- package/dist/two-factor/repository.js.map +1 -1
- package/dist/two-factor/service.d.ts.map +1 -1
- package/dist/two-factor/service.js +26 -19
- package/dist/two-factor/service.js.map +1 -1
- package/dist/two-factor/totp.d.ts +13 -2
- package/dist/two-factor/totp.d.ts.map +1 -1
- package/dist/two-factor/totp.js +20 -7
- package/dist/two-factor/totp.js.map +1 -1
- package/dist/two-factor/types.d.ts +3 -0
- package/dist/two-factor/types.d.ts.map +1 -1
- package/dist/two-factor/types.js +5 -0
- package/dist/two-factor/types.js.map +1 -1
- package/dist/users/gdpr.d.ts +2 -40
- package/dist/users/gdpr.d.ts.map +1 -1
- package/dist/users/gdpr.js +3 -110
- package/dist/users/gdpr.js.map +1 -1
- package/dist/users/index.d.ts +5 -4
- package/dist/users/index.d.ts.map +1 -1
- package/dist/users/index.js +5 -4
- package/dist/users/index.js.map +1 -1
- package/dist/users/repository.d.ts +49 -3
- package/dist/users/repository.d.ts.map +1 -1
- package/dist/users/repository.js +169 -18
- package/dist/users/repository.js.map +1 -1
- package/dist/users/service.d.ts +19 -51
- package/dist/users/service.d.ts.map +1 -1
- package/dist/users/service.js +72 -122
- package/dist/users/service.js.map +1 -1
- package/dist/users/types.d.ts +4 -5
- package/dist/users/types.d.ts.map +1 -1
- package/dist/users/types.js.map +1 -1
- package/dist/users/validators.d.ts +28 -0
- package/dist/users/validators.d.ts.map +1 -0
- package/dist/users/validators.js +25 -0
- package/dist/users/validators.js.map +1 -0
- package/locales/default/en/errors.json +2 -1
- package/migrations/024_application_client_correction.sql +39 -0
- package/migrations/025_record_deletion_lifecycle.sql +26 -0
- package/migrations/026_simplify_user_lifecycle.sql +33 -0
- package/migrations/027_branding_asset_size_limits.sql +19 -0
- package/migrations/028_totp_replay_protection.sql +17 -0
- package/migrations/029_public_session_identifiers.sql +16 -0
- package/migrations/030_global_configuration_catalog.sql +39 -0
- package/migrations/031_monotonic_updated_at.sql +28 -0
- package/migrations/032_client_require_consent.sql +15 -0
- package/package.json +2 -2
- package/dist/lib/data-import-plan.d.ts +0 -50
- package/dist/lib/data-import-plan.d.ts.map +0 -1
- package/dist/lib/data-import-plan.js +0 -235
- package/dist/lib/data-import-plan.js.map +0 -1
- package/dist/lib/data-import.d.ts +0 -276
- package/dist/lib/data-import.d.ts.map +0 -1
- package/dist/lib/data-import.js +0 -1694
- package/dist/lib/data-import.js.map +0 -1
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/** Small deterministic helpers shared by portability planning steps. */
|
|
2
|
+
import type { ImportClientRow, ImportOrganizationRow, ImportUserRow } from './import-repository.js';
|
|
3
|
+
import type { PortabilityAction, PortabilityActionCounts, PortabilityEntityType, PortabilityImportMode, PortabilityManifest, PortabilityNaturalKey, PortabilityResultError, PortabilityResultErrorCode, PortabilityResultItem } from './types.js';
|
|
4
|
+
/** Entity groups in their required parent-before-child order. */
|
|
5
|
+
export declare const entityOrder: readonly PortabilityEntityType[];
|
|
6
|
+
/** Mutable accumulator used only while assembling a safe result. */
|
|
7
|
+
export interface PlanAccumulator {
|
|
8
|
+
readonly items: PortabilityResultItem[];
|
|
9
|
+
readonly errors: PortabilityResultError[];
|
|
10
|
+
readonly summary: Record<PortabilityEntityType, PortabilityActionCounts>;
|
|
11
|
+
}
|
|
12
|
+
/** @returns Zeroed action counts for every fixed entity group. */
|
|
13
|
+
export declare function emptySummary(): Record<PortabilityEntityType, PortabilityActionCounts>;
|
|
14
|
+
/**
|
|
15
|
+
* @param parts - Normalized natural-key components
|
|
16
|
+
* @returns Components joined with an unambiguous internal separator
|
|
17
|
+
*/
|
|
18
|
+
export declare function key(...parts: readonly string[]): string;
|
|
19
|
+
/**
|
|
20
|
+
* @param value - Stored or validated slug
|
|
21
|
+
* @returns Lowercase trimmed slug used only for matching
|
|
22
|
+
*/
|
|
23
|
+
export declare function normalizedSlug(value: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* @param value - External RBAC claim value
|
|
26
|
+
* @returns Trimmed value with case and inner content preserved
|
|
27
|
+
*/
|
|
28
|
+
export declare function normalizedRbac(value: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* @param value - User email identity
|
|
31
|
+
* @returns Trimmed lowercase identity used for matching
|
|
32
|
+
*/
|
|
33
|
+
export declare function normalizedEmail(value: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* @param left - First normalized portable value
|
|
36
|
+
* @param right - Second normalized portable value
|
|
37
|
+
* @returns Whether both values serialize identically
|
|
38
|
+
*/
|
|
39
|
+
export declare function sameValue(left: unknown, right: unknown): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* @param rows - Destination or manifest records
|
|
42
|
+
* @param selectKey - Normalized key selector
|
|
43
|
+
* @returns Every row grouped without discarding ambiguous matches
|
|
44
|
+
*/
|
|
45
|
+
export declare function groupByKey<Row>(rows: readonly Row[], selectKey: (row: Row) => string): Map<string, Row[]>;
|
|
46
|
+
/**
|
|
47
|
+
* @param matches - Destination rows sharing a normalized key
|
|
48
|
+
* @returns Fixed cardinality state used by dependency validation
|
|
49
|
+
*/
|
|
50
|
+
export declare function dependencyState<Row>(matches: readonly Row[] | undefined): 'resolved' | 'missing' | 'ambiguous';
|
|
51
|
+
/**
|
|
52
|
+
* Add an action and increment its group count.
|
|
53
|
+
*
|
|
54
|
+
* @param accumulator - Result being assembled
|
|
55
|
+
* @param entityType - Manifest collection
|
|
56
|
+
* @param action - Planned action
|
|
57
|
+
* @param naturalKey - Safe public identity
|
|
58
|
+
* @param credentialWillBeGenerated - Whether a new confidential client needs one secret
|
|
59
|
+
*/
|
|
60
|
+
export declare function addItem(accumulator: PlanAccumulator, entityType: PortabilityEntityType, action: PortabilityAction, naturalKey: PortabilityNaturalKey, credentialWillBeGenerated?: boolean): void;
|
|
61
|
+
/**
|
|
62
|
+
* Add one bounded public error while retaining the complete rejected count.
|
|
63
|
+
*
|
|
64
|
+
* @param accumulator - Result being assembled
|
|
65
|
+
* @param entityType - Rejected manifest collection
|
|
66
|
+
* @param naturalKey - Safe public identity
|
|
67
|
+
* @param code - Fixed non-reflective rejection code
|
|
68
|
+
* @param countRejected - Whether the error represents a manifest record in aggregate counts
|
|
69
|
+
*/
|
|
70
|
+
export declare function addError(accumulator: PlanAccumulator, entityType: PortabilityEntityType, naturalKey: PortabilityNaturalKey, code: PortabilityResultErrorCode, countRejected?: boolean): void;
|
|
71
|
+
/**
|
|
72
|
+
* Check whether an application-qualified record belongs to the manifest selection.
|
|
73
|
+
*
|
|
74
|
+
* @param manifest - Strict normalized import manifest
|
|
75
|
+
* @param applicationSlug - Application owner named by one record
|
|
76
|
+
* @returns Whether the record is inside the declared application scope
|
|
77
|
+
*/
|
|
78
|
+
export declare function applicationIsSelected(manifest: PortabilityManifest, applicationSlug: string): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Validate scope metadata that may have no corresponding manifest record.
|
|
81
|
+
*
|
|
82
|
+
* @param manifest - Strict normalized import manifest
|
|
83
|
+
* @param accumulator - Result being assembled
|
|
84
|
+
* @param organizations - Destination organizations grouped by normalized slug
|
|
85
|
+
* @param manifestOrganizations - Organization slugs created by this manifest
|
|
86
|
+
*/
|
|
87
|
+
export declare function validateRootScope(manifest: PortabilityManifest, accumulator: PlanAccumulator, organizations: ReadonlyMap<string, readonly ImportOrganizationRow[]>, manifestOrganizations: ReadonlySet<string>): void;
|
|
88
|
+
/**
|
|
89
|
+
* @param mode - Preview or apply behavior
|
|
90
|
+
* @param exists - Whether one compatible destination record exists
|
|
91
|
+
* @param mutableValuesMatch - Whether all portable mutable values already match
|
|
92
|
+
* @returns Create, update, or skip action
|
|
93
|
+
*/
|
|
94
|
+
export declare function recordAction(mode: PortabilityImportMode, exists: boolean, mutableValuesMatch: boolean): PortabilityAction;
|
|
95
|
+
/**
|
|
96
|
+
* @param left - First safe result outcome
|
|
97
|
+
* @param right - Second safe result outcome
|
|
98
|
+
* @returns Stable dependency-order comparison
|
|
99
|
+
*/
|
|
100
|
+
export declare function compareOutcomes(left: Pick<PortabilityResultItem, 'entity_type' | 'natural_key'>, right: Pick<PortabilityResultItem, 'entity_type' | 'natural_key'>): number;
|
|
101
|
+
/**
|
|
102
|
+
* @param manifest - Strict normalized manifest
|
|
103
|
+
* @param accumulator - Result being assembled
|
|
104
|
+
* @returns Stable identities for every record rejected as a duplicate
|
|
105
|
+
*/
|
|
106
|
+
export declare function rejectDuplicates(manifest: PortabilityManifest, accumulator: PlanAccumulator): ReadonlySet<string>;
|
|
107
|
+
/** Create the stable identity used to exclude a rejected duplicate from ordinary planning. */
|
|
108
|
+
export declare function recordIdentity(entityType: PortabilityEntityType, naturalKey: PortabilityNaturalKey): string;
|
|
109
|
+
/**
|
|
110
|
+
* @param source - Portable organization fields
|
|
111
|
+
* @param destination - Existing destination organization
|
|
112
|
+
* @param destinationAssets - Existing validated image bytes by branding slot
|
|
113
|
+
* @returns Whether every mutable organization field and asset matches
|
|
114
|
+
*/
|
|
115
|
+
export declare function organizationMatches(source: PortabilityManifest['organizations'][number], destination: ImportOrganizationRow, destinationAssets: ReadonlyMap<'logo' | 'favicon', {
|
|
116
|
+
readonly content_type: string;
|
|
117
|
+
readonly data: Buffer;
|
|
118
|
+
}>): boolean;
|
|
119
|
+
/**
|
|
120
|
+
* @param source - Portable user profile
|
|
121
|
+
* @param destination - Existing destination user
|
|
122
|
+
* @returns Whether portable fields match while ignoring authentication and lock state
|
|
123
|
+
*/
|
|
124
|
+
export declare function userMatches(source: PortabilityManifest['users'][number], destination: ImportUserRow): boolean;
|
|
125
|
+
/**
|
|
126
|
+
* @param source - Portable OIDC client
|
|
127
|
+
* @param destination - Existing destination client
|
|
128
|
+
* @returns Whether every mutable protocol and lifecycle field matches
|
|
129
|
+
*/
|
|
130
|
+
export declare function clientMutableValuesMatch(source: PortabilityManifest['clients'][number], destination: ImportClientRow): boolean;
|
|
131
|
+
/**
|
|
132
|
+
* @param manifestHasParent - Whether the manifest creates or matches the parent itself
|
|
133
|
+
* @param matches - Destination rows sharing the normalized parent key
|
|
134
|
+
* @returns Fixed safe error, or null when the parent resolves
|
|
135
|
+
*/
|
|
136
|
+
export declare function parentError<Row>(manifestHasParent: boolean, matches: readonly Row[] | undefined): PortabilityResultErrorCode | null;
|
|
137
|
+
//# sourceMappingURL=plan-support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-support.d.ts","sourceRoot":"","sources":["../../src/portability/plan-support.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
/** Small deterministic helpers shared by portability planning steps. */
|
|
2
|
+
/** Entity groups in their required parent-before-child order. */
|
|
3
|
+
export const entityOrder = [
|
|
4
|
+
'organizations',
|
|
5
|
+
'applications',
|
|
6
|
+
'application_modules',
|
|
7
|
+
'roles',
|
|
8
|
+
'permissions',
|
|
9
|
+
'claim_definitions',
|
|
10
|
+
'role_permission_mappings',
|
|
11
|
+
'users',
|
|
12
|
+
'user_role_assignments',
|
|
13
|
+
'user_claim_values',
|
|
14
|
+
'clients',
|
|
15
|
+
];
|
|
16
|
+
/** @returns Zeroed action counts for every fixed entity group. */
|
|
17
|
+
export function emptySummary() {
|
|
18
|
+
return Object.fromEntries(entityOrder.map((entityType) => [
|
|
19
|
+
entityType,
|
|
20
|
+
{ created: 0, updated: 0, skipped: 0, rejected: 0 },
|
|
21
|
+
]));
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* @param parts - Normalized natural-key components
|
|
25
|
+
* @returns Components joined with an unambiguous internal separator
|
|
26
|
+
*/
|
|
27
|
+
export function key(...parts) {
|
|
28
|
+
return parts.join('\u001f');
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* @param value - Stored or validated slug
|
|
32
|
+
* @returns Lowercase trimmed slug used only for matching
|
|
33
|
+
*/
|
|
34
|
+
export function normalizedSlug(value) {
|
|
35
|
+
return value.trim().toLowerCase();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* @param value - External RBAC claim value
|
|
39
|
+
* @returns Trimmed value with case and inner content preserved
|
|
40
|
+
*/
|
|
41
|
+
export function normalizedRbac(value) {
|
|
42
|
+
return value.trim();
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* @param value - User email identity
|
|
46
|
+
* @returns Trimmed lowercase identity used for matching
|
|
47
|
+
*/
|
|
48
|
+
export function normalizedEmail(value) {
|
|
49
|
+
return value.trim().toLowerCase();
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @param left - First normalized portable value
|
|
53
|
+
* @param right - Second normalized portable value
|
|
54
|
+
* @returns Whether both values serialize identically
|
|
55
|
+
*/
|
|
56
|
+
export function sameValue(left, right) {
|
|
57
|
+
return JSON.stringify(left) === JSON.stringify(right);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* @param rows - Destination or manifest records
|
|
61
|
+
* @param selectKey - Normalized key selector
|
|
62
|
+
* @returns Every row grouped without discarding ambiguous matches
|
|
63
|
+
*/
|
|
64
|
+
export function groupByKey(rows, selectKey) {
|
|
65
|
+
const grouped = new Map();
|
|
66
|
+
for (const row of rows) {
|
|
67
|
+
const rowKey = selectKey(row);
|
|
68
|
+
grouped.set(rowKey, [...(grouped.get(rowKey) ?? []), row]);
|
|
69
|
+
}
|
|
70
|
+
return grouped;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* @param matches - Destination rows sharing a normalized key
|
|
74
|
+
* @returns Fixed cardinality state used by dependency validation
|
|
75
|
+
*/
|
|
76
|
+
export function dependencyState(matches) {
|
|
77
|
+
if (matches === undefined || matches.length === 0)
|
|
78
|
+
return 'missing';
|
|
79
|
+
return matches.length === 1 ? 'resolved' : 'ambiguous';
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Add an action and increment its group count.
|
|
83
|
+
*
|
|
84
|
+
* @param accumulator - Result being assembled
|
|
85
|
+
* @param entityType - Manifest collection
|
|
86
|
+
* @param action - Planned action
|
|
87
|
+
* @param naturalKey - Safe public identity
|
|
88
|
+
* @param credentialWillBeGenerated - Whether a new confidential client needs one secret
|
|
89
|
+
*/
|
|
90
|
+
export function addItem(accumulator, entityType, action, naturalKey, credentialWillBeGenerated = false) {
|
|
91
|
+
accumulator.summary[entityType] = {
|
|
92
|
+
...accumulator.summary[entityType],
|
|
93
|
+
[action]: accumulator.summary[entityType][action] + 1,
|
|
94
|
+
};
|
|
95
|
+
accumulator.items.push({
|
|
96
|
+
entity_type: entityType,
|
|
97
|
+
action,
|
|
98
|
+
natural_key: naturalKey,
|
|
99
|
+
...(credentialWillBeGenerated ? { credential_will_be_generated: true } : {}),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Add one bounded public error while retaining the complete rejected count.
|
|
104
|
+
*
|
|
105
|
+
* @param accumulator - Result being assembled
|
|
106
|
+
* @param entityType - Rejected manifest collection
|
|
107
|
+
* @param naturalKey - Safe public identity
|
|
108
|
+
* @param code - Fixed non-reflective rejection code
|
|
109
|
+
* @param countRejected - Whether the error represents a manifest record in aggregate counts
|
|
110
|
+
*/
|
|
111
|
+
export function addError(accumulator, entityType, naturalKey, code, countRejected = true) {
|
|
112
|
+
if (countRejected)
|
|
113
|
+
accumulator.summary[entityType] = {
|
|
114
|
+
...accumulator.summary[entityType],
|
|
115
|
+
rejected: accumulator.summary[entityType].rejected + 1,
|
|
116
|
+
};
|
|
117
|
+
if (accumulator.errors.length < 100)
|
|
118
|
+
accumulator.errors.push({ entity_type: entityType, natural_key: naturalKey, code });
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Check whether an application-qualified record belongs to the manifest selection.
|
|
122
|
+
*
|
|
123
|
+
* @param manifest - Strict normalized import manifest
|
|
124
|
+
* @param applicationSlug - Application owner named by one record
|
|
125
|
+
* @returns Whether the record is inside the declared application scope
|
|
126
|
+
*/
|
|
127
|
+
export function applicationIsSelected(manifest, applicationSlug) {
|
|
128
|
+
return (manifest.application_selection.all_applications ||
|
|
129
|
+
manifest.application_selection.application_slugs.some((selected) => normalizedSlug(selected) === normalizedSlug(applicationSlug)));
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Validate scope metadata that may have no corresponding manifest record.
|
|
133
|
+
*
|
|
134
|
+
* @param manifest - Strict normalized import manifest
|
|
135
|
+
* @param accumulator - Result being assembled
|
|
136
|
+
* @param organizations - Destination organizations grouped by normalized slug
|
|
137
|
+
* @param manifestOrganizations - Organization slugs created by this manifest
|
|
138
|
+
*/
|
|
139
|
+
export function validateRootScope(manifest, accumulator, organizations, manifestOrganizations) {
|
|
140
|
+
if (manifest.scope.kind === 'organization') {
|
|
141
|
+
const selected = normalizedSlug(manifest.scope.organization_slug);
|
|
142
|
+
const matches = organizations.get(selected);
|
|
143
|
+
const code = selected === 'porta-admin' || matches?.[0]?.is_super_admin
|
|
144
|
+
? 'control_plane_record'
|
|
145
|
+
: (matches?.length ?? 0) > 1
|
|
146
|
+
? 'ambiguous_dependency'
|
|
147
|
+
: matches?.[0] === undefined && !manifestOrganizations.has(selected)
|
|
148
|
+
? 'missing_dependency'
|
|
149
|
+
: null;
|
|
150
|
+
if (code !== null)
|
|
151
|
+
addError(accumulator, 'organizations', { slug: selected }, code, false);
|
|
152
|
+
}
|
|
153
|
+
if (manifest.application_selection.application_slugs.some((slug) => normalizedSlug(slug) === 'porta-admin')) {
|
|
154
|
+
addError(accumulator, 'applications', { slug: 'porta-admin' }, 'control_plane_record', false);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* @param mode - Preview or apply behavior
|
|
159
|
+
* @param exists - Whether one compatible destination record exists
|
|
160
|
+
* @param mutableValuesMatch - Whether all portable mutable values already match
|
|
161
|
+
* @returns Create, update, or skip action
|
|
162
|
+
*/
|
|
163
|
+
export function recordAction(mode, exists, mutableValuesMatch) {
|
|
164
|
+
if (!exists)
|
|
165
|
+
return 'created';
|
|
166
|
+
if (mode === 'keep-existing' || mutableValuesMatch)
|
|
167
|
+
return 'skipped';
|
|
168
|
+
return 'updated';
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* @param left - First safe result outcome
|
|
172
|
+
* @param right - Second safe result outcome
|
|
173
|
+
* @returns Stable dependency-order comparison
|
|
174
|
+
*/
|
|
175
|
+
export function compareOutcomes(left, right) {
|
|
176
|
+
const groupOrder = entityOrder.indexOf(left.entity_type) - entityOrder.indexOf(right.entity_type);
|
|
177
|
+
if (groupOrder !== 0)
|
|
178
|
+
return groupOrder;
|
|
179
|
+
const leftKey = Object.values(left.natural_key).join('\u001f');
|
|
180
|
+
const rightKey = Object.values(right.natural_key).join('\u001f');
|
|
181
|
+
return leftKey < rightKey ? -1 : leftKey > rightKey ? 1 : 0;
|
|
182
|
+
}
|
|
183
|
+
/** Return public natural keys for all manifest collections. */
|
|
184
|
+
function manifestNaturalKeys(manifest) {
|
|
185
|
+
return {
|
|
186
|
+
organizations: manifest.organizations.map(({ slug }) => ({ slug })),
|
|
187
|
+
applications: manifest.applications.map(({ slug }) => ({ slug })),
|
|
188
|
+
application_modules: manifest.application_modules.map(({ application_slug, slug }) => ({
|
|
189
|
+
application_slug,
|
|
190
|
+
slug,
|
|
191
|
+
})),
|
|
192
|
+
roles: manifest.roles.map(({ application_slug, slug }) => ({ application_slug, slug })),
|
|
193
|
+
permissions: manifest.permissions.map(({ application_slug, slug }) => ({
|
|
194
|
+
application_slug,
|
|
195
|
+
slug,
|
|
196
|
+
})),
|
|
197
|
+
claim_definitions: manifest.claim_definitions.map(({ application_slug, claim_name }) => ({
|
|
198
|
+
application_slug,
|
|
199
|
+
claim_name,
|
|
200
|
+
})),
|
|
201
|
+
role_permission_mappings: manifest.role_permission_mappings.map(({ application_slug, role_slug }) => ({ application_slug, role_slug })),
|
|
202
|
+
users: manifest.users.map(({ organization_slug, email }) => ({ organization_slug, email })),
|
|
203
|
+
user_role_assignments: manifest.user_role_assignments.map(({ organization_slug, email, application_slug, role_slug }) => ({
|
|
204
|
+
organization_slug,
|
|
205
|
+
email,
|
|
206
|
+
application_slug,
|
|
207
|
+
role_slug,
|
|
208
|
+
})),
|
|
209
|
+
user_claim_values: manifest.user_claim_values.map(({ organization_slug, email, application_slug, claim_name }) => ({
|
|
210
|
+
organization_slug,
|
|
211
|
+
email,
|
|
212
|
+
application_slug,
|
|
213
|
+
claim_name,
|
|
214
|
+
})),
|
|
215
|
+
clients: manifest.clients.map(({ client_id }) => ({ client_id })),
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* @param manifest - Strict normalized manifest
|
|
220
|
+
* @param accumulator - Result being assembled
|
|
221
|
+
* @returns Stable identities for every record rejected as a duplicate
|
|
222
|
+
*/
|
|
223
|
+
export function rejectDuplicates(manifest, accumulator) {
|
|
224
|
+
const duplicateRecords = new Set();
|
|
225
|
+
const keysByType = manifestNaturalKeys(manifest);
|
|
226
|
+
for (const entityType of entityOrder) {
|
|
227
|
+
const grouped = groupByKey(keysByType[entityType], (naturalKey) => Object.values(naturalKey).join('\u001f'));
|
|
228
|
+
for (const matches of grouped.values()) {
|
|
229
|
+
if (matches.length < 2)
|
|
230
|
+
continue;
|
|
231
|
+
for (const naturalKey of matches) {
|
|
232
|
+
duplicateRecords.add(recordIdentity(entityType, naturalKey));
|
|
233
|
+
addError(accumulator, entityType, naturalKey, 'duplicate_natural_key');
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return duplicateRecords;
|
|
238
|
+
}
|
|
239
|
+
/** Create the stable identity used to exclude a rejected duplicate from ordinary planning. */
|
|
240
|
+
export function recordIdentity(entityType, naturalKey) {
|
|
241
|
+
return `${entityType}\u001e${Object.values(naturalKey).join('\u001f')}`;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* @param source - Portable organization fields
|
|
245
|
+
* @param destination - Existing destination organization
|
|
246
|
+
* @param destinationAssets - Existing validated image bytes by branding slot
|
|
247
|
+
* @returns Whether every mutable organization field and asset matches
|
|
248
|
+
*/
|
|
249
|
+
export function organizationMatches(source, destination, destinationAssets) {
|
|
250
|
+
const logo = destinationAssets.get('logo');
|
|
251
|
+
const favicon = destinationAssets.get('favicon');
|
|
252
|
+
const logoMatches = source.branding.logo_asset === null
|
|
253
|
+
? logo === undefined
|
|
254
|
+
: logo?.content_type === source.branding.logo_asset.media_type &&
|
|
255
|
+
logo.data.toString('base64') === source.branding.logo_asset.content_base64;
|
|
256
|
+
const faviconMatches = source.branding.favicon_asset === null
|
|
257
|
+
? favicon === undefined
|
|
258
|
+
: favicon?.content_type === source.branding.favicon_asset.media_type &&
|
|
259
|
+
favicon.data.toString('base64') === source.branding.favicon_asset.content_base64;
|
|
260
|
+
return (source.name === destination.name &&
|
|
261
|
+
source.status === destination.status &&
|
|
262
|
+
source.default_locale === destination.default_locale &&
|
|
263
|
+
sameValue(source.default_login_methods, destination.default_login_methods) &&
|
|
264
|
+
source.two_factor_policy === destination.two_factor_policy &&
|
|
265
|
+
source.branding.logo_url === destination.branding_logo_url &&
|
|
266
|
+
source.branding.favicon_url === destination.branding_favicon_url &&
|
|
267
|
+
source.branding.primary_color === destination.branding_primary_color &&
|
|
268
|
+
source.branding.company_name === destination.branding_company_name &&
|
|
269
|
+
source.branding.custom_css === destination.branding_custom_css &&
|
|
270
|
+
logoMatches &&
|
|
271
|
+
faviconMatches);
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* @param source - Portable user profile
|
|
275
|
+
* @param destination - Existing destination user
|
|
276
|
+
* @returns Whether portable fields match while ignoring authentication and lock state
|
|
277
|
+
*/
|
|
278
|
+
export function userMatches(source, destination) {
|
|
279
|
+
return sameValue(source, {
|
|
280
|
+
organization_slug: destination.organization_slug,
|
|
281
|
+
email: normalizedEmail(destination.email),
|
|
282
|
+
email_verified: destination.email_verified,
|
|
283
|
+
given_name: destination.given_name,
|
|
284
|
+
family_name: destination.family_name,
|
|
285
|
+
middle_name: destination.middle_name,
|
|
286
|
+
nickname: destination.nickname,
|
|
287
|
+
preferred_username: destination.preferred_username,
|
|
288
|
+
profile_url: destination.profile_url,
|
|
289
|
+
picture_url: destination.picture_url,
|
|
290
|
+
website_url: destination.website_url,
|
|
291
|
+
gender: destination.gender,
|
|
292
|
+
birthdate: destination.birthdate,
|
|
293
|
+
zoneinfo: destination.zoneinfo,
|
|
294
|
+
locale: destination.locale,
|
|
295
|
+
phone_number: destination.phone_number,
|
|
296
|
+
phone_number_verified: destination.phone_number_verified,
|
|
297
|
+
address_street: destination.address_street,
|
|
298
|
+
address_locality: destination.address_locality,
|
|
299
|
+
address_region: destination.address_region,
|
|
300
|
+
address_postal_code: destination.address_postal_code,
|
|
301
|
+
address_country: destination.address_country,
|
|
302
|
+
status: destination.status,
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* @param source - Portable OIDC client
|
|
307
|
+
* @param destination - Existing destination client
|
|
308
|
+
* @returns Whether every mutable protocol and lifecycle field matches
|
|
309
|
+
*/
|
|
310
|
+
export function clientMutableValuesMatch(source, destination) {
|
|
311
|
+
return (source.name === destination.name &&
|
|
312
|
+
source.status === destination.status &&
|
|
313
|
+
sameValue(source.grant_types, destination.grant_types) &&
|
|
314
|
+
sameValue(source.response_types, destination.response_types) &&
|
|
315
|
+
source.scope === destination.scope &&
|
|
316
|
+
sameValue(source.login_methods, destination.login_methods) &&
|
|
317
|
+
source.token_endpoint_auth_method === destination.token_endpoint_auth_method &&
|
|
318
|
+
sameValue(source.redirect_uris, destination.redirect_uris) &&
|
|
319
|
+
sameValue(source.post_logout_redirect_uris, destination.post_logout_redirect_uris) &&
|
|
320
|
+
sameValue(source.allowed_origins, destination.allowed_origins) &&
|
|
321
|
+
source.require_pkce === destination.require_pkce &&
|
|
322
|
+
source.require_consent === destination.require_consent);
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* @param manifestHasParent - Whether the manifest creates or matches the parent itself
|
|
326
|
+
* @param matches - Destination rows sharing the normalized parent key
|
|
327
|
+
* @returns Fixed safe error, or null when the parent resolves
|
|
328
|
+
*/
|
|
329
|
+
export function parentError(manifestHasParent, matches) {
|
|
330
|
+
if (manifestHasParent)
|
|
331
|
+
return null;
|
|
332
|
+
const state = dependencyState(matches);
|
|
333
|
+
if (state === 'resolved')
|
|
334
|
+
return null;
|
|
335
|
+
return state === 'ambiguous' ? 'ambiguous_dependency' : 'missing_dependency';
|
|
336
|
+
}
|
|
337
|
+
//# sourceMappingURL=plan-support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-support.js","sourceRoot":"","sources":["../../src/portability/plan-support.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** Mutation-free normalization, dependency resolution, and import action planning. */
|
|
2
|
+
import { type PortabilityImportSnapshot } from './import-repository.js';
|
|
3
|
+
import type { PortabilityImportMode, PortabilityManifest, PortabilityResult } from './types.js';
|
|
4
|
+
/** Internal resolved plan retained for the later atomic writer. */
|
|
5
|
+
export interface ResolvedPortabilityPlan {
|
|
6
|
+
/** Strict normalized manifest used to build every action. */
|
|
7
|
+
readonly manifest: PortabilityManifest;
|
|
8
|
+
/** Destination snapshot containing private relationship identifiers. */
|
|
9
|
+
readonly snapshot: PortabilityImportSnapshot;
|
|
10
|
+
/** Safe public result from the same snapshot. */
|
|
11
|
+
readonly result: PortabilityResult;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Build the resolved plan using the current request-owned transaction.
|
|
15
|
+
*
|
|
16
|
+
* Apply uses this boundary so preview and mutation share the same normalization,
|
|
17
|
+
* compatibility, and dependency checks.
|
|
18
|
+
*
|
|
19
|
+
* @param input - Manifest received by the service
|
|
20
|
+
* @param mode - Requested preview or apply behavior
|
|
21
|
+
* @returns Normalized manifest, private snapshot, and safe public result
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildResolvedPortabilityPlan(input: PortabilityManifest, mode: PortabilityImportMode): Promise<ResolvedPortabilityPlan>;
|
|
24
|
+
/**
|
|
25
|
+
* Build a safe preview result without changing product, credential, or audit records.
|
|
26
|
+
*
|
|
27
|
+
* @param manifest - Complete manifest received from an import request
|
|
28
|
+
* @param mode - Import behavior represented by the plan
|
|
29
|
+
* @returns Ordered safe plan result
|
|
30
|
+
* @example
|
|
31
|
+
* const preview = await buildPortabilityPlan(manifest, 'dry-run');
|
|
32
|
+
*/
|
|
33
|
+
export declare function buildPortabilityPlan(manifest: PortabilityManifest, mode: PortabilityImportMode): Promise<PortabilityResult>;
|
|
34
|
+
//# sourceMappingURL=plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/portability/plan.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAItF,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,wBAAwB,CAAC;AAyBhC,OAAO,KAAK,EAEV,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EAElB,MAAM,YAAY,CAAC;AAEpB,mEAAmE;AACnE,MAAM,WAAW,uBAAuB;IACtC,6DAA6D;IAC7D,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAC;IAC7C,iDAAiD;IACjD,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;CACpC;AAED;;;;;;;;;GASG;AACH,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,mBAAmB,EAC1B,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,uBAAuB,CAAC,CAumBlC;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,mBAAmB,EAC7B,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAI5B"}
|