@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
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACnG,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAElF,KAAK,UAAU,IAAI;IACjB,6CAA6C;IAC7C,MAAM,eAAe,EAAE,CAAC;IACxB,MAAM,YAAY,EAAE,CAAC;IAErB,uEAAuE;IACvE,qDAAqD;IACrD,MAAM,QAAQ,EAAE,CAAC;IACjB,4BAA4B,EAAE,CAAC;IAC/B,MAAM,kBAAkB,EAAE,CAAC;IAE3B,8FAA8F;IAC9F,sEAAsE;IACtE,MAAM,2BAA2B,EAAE,CAAC;IAEpC,gEAAgE;IAChE,uEAAuE;IACvE,2CAA2C;IAC3C,MAAM,IAAI,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAEvC,oEAAoE;IACpE,+DAA+D;IAC/D,MAAM,GAAG,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAEtC,kEAAkE;IAClE,MAAM,YAAY,GAAG,MAAM,kBAAkB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IAE7D,sEAAsE;IACtE,MAAM,GAAG,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACvD,0BAA0B,CAAC,YAAY,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IACH,8BAA8B,CAAC,MAAM,CAAC,CAAC;IAEvC,iEAAiE;IACjE,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;QACxC,IAAI,eAAe;YAAE,OAAO;QAC5B,eAAe,GAAG,IAAI,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,0BAA0B,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;YACjC,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,UAAU,CAAC,KAAK,EAAE,CAAC;QAEnB,IAAI,CAAC;YACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;YACH,MAAM,aAAa,GAAG,MAAM,yBAAyB,EAAE,CAAC;YACxD,IAAI,CAAC,aAAa;gBAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACtF,MAAM,kBAAkB,EAAE,CAAC;YAC3B,MAAM,eAAe,EAAE,CAAC;YACxB,YAAY,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,0BAA0B,CAAC,CAAC;YAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -24,34 +24,37 @@ export declare const ADMIN_PERMISSIONS: {
|
|
|
24
24
|
readonly ORG_READ: 'admin:org:read';
|
|
25
25
|
readonly ORG_UPDATE: 'admin:org:update';
|
|
26
26
|
readonly ORG_SUSPEND: 'admin:org:suspend';
|
|
27
|
-
readonly
|
|
27
|
+
readonly ORG_DELETE: 'admin:org:delete';
|
|
28
28
|
readonly APP_CREATE: 'admin:app:create';
|
|
29
29
|
readonly APP_READ: 'admin:app:read';
|
|
30
30
|
readonly APP_UPDATE: 'admin:app:update';
|
|
31
|
-
readonly
|
|
31
|
+
readonly APP_DELETE: 'admin:app:delete';
|
|
32
|
+
readonly MODULE_DELETE: 'admin:module:delete';
|
|
32
33
|
readonly CLIENT_CREATE: 'admin:client:create';
|
|
33
34
|
readonly CLIENT_READ: 'admin:client:read';
|
|
34
35
|
readonly CLIENT_UPDATE: 'admin:client:update';
|
|
35
36
|
readonly CLIENT_REVOKE: 'admin:client:revoke';
|
|
37
|
+
readonly CLIENT_DELETE: 'admin:client:delete';
|
|
36
38
|
readonly USER_CREATE: 'admin:user:create';
|
|
37
39
|
readonly USER_READ: 'admin:user:read';
|
|
38
40
|
readonly USER_UPDATE: 'admin:user:update';
|
|
39
|
-
readonly
|
|
40
|
-
readonly
|
|
41
|
+
readonly USER_LIFECYCLE: 'admin:user:lifecycle';
|
|
42
|
+
readonly USER_DELETE: 'admin:user:delete';
|
|
41
43
|
readonly USER_INVITE: 'admin:user:invite';
|
|
42
44
|
readonly USER_2FA: 'admin:user:2fa';
|
|
43
45
|
readonly ROLE_CREATE: 'admin:role:create';
|
|
44
46
|
readonly ROLE_READ: 'admin:role:read';
|
|
45
47
|
readonly ROLE_UPDATE: 'admin:role:update';
|
|
46
|
-
readonly
|
|
48
|
+
readonly ROLE_DELETE: 'admin:role:delete';
|
|
47
49
|
readonly ROLE_ASSIGN: 'admin:role:assign';
|
|
48
50
|
readonly PERMISSION_CREATE: 'admin:permission:create';
|
|
49
51
|
readonly PERMISSION_READ: 'admin:permission:read';
|
|
50
|
-
readonly
|
|
52
|
+
readonly PERMISSION_UPDATE: 'admin:permission:update';
|
|
53
|
+
readonly PERMISSION_DELETE: 'admin:permission:delete';
|
|
51
54
|
readonly CLAIM_CREATE: 'admin:claim:create';
|
|
52
55
|
readonly CLAIM_READ: 'admin:claim:read';
|
|
53
56
|
readonly CLAIM_UPDATE: 'admin:claim:update';
|
|
54
|
-
readonly
|
|
57
|
+
readonly CLAIM_DELETE: 'admin:claim:delete';
|
|
55
58
|
readonly CONFIG_READ: 'admin:config:read';
|
|
56
59
|
readonly CONFIG_UPDATE: 'admin:config:update';
|
|
57
60
|
readonly KEY_READ: 'admin:key:read';
|
|
@@ -68,6 +71,8 @@ export declare const ADMIN_PERMISSIONS: {
|
|
|
68
71
|
export type AdminPermission = (typeof ADMIN_PERMISSIONS)[keyof typeof ADMIN_PERMISSIONS];
|
|
69
72
|
/** Array of all admin permission slug values (useful for iteration/validation) */
|
|
70
73
|
export declare const ALL_ADMIN_PERMISSIONS: readonly AdminPermission[];
|
|
74
|
+
/** Exact role slug required for complete-environment administrative operations. */
|
|
75
|
+
export declare const SUPER_ADMIN_ROLE_SLUG = "porta-super-admin";
|
|
71
76
|
/**
|
|
72
77
|
* Shape of a predefined admin role definition.
|
|
73
78
|
* Used during `porta init` to seed RBAC for the admin application.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-permissions.d.ts","sourceRoot":"","sources":["../../src/lib/admin-permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB;aAE5B,UAAU,EAAE,kBAAkB;aAC9B,QAAQ,EAAE,gBAAgB;aAC1B,UAAU,EAAE,kBAAkB;aAC9B,WAAW,EAAE,mBAAmB;aAChC,
|
|
1
|
+
{"version":3,"file":"admin-permissions.d.ts","sourceRoot":"","sources":["../../src/lib/admin-permissions.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,40 +28,43 @@ export const ADMIN_PERMISSIONS = {
|
|
|
28
28
|
ORG_READ: 'admin:org:read',
|
|
29
29
|
ORG_UPDATE: 'admin:org:update',
|
|
30
30
|
ORG_SUSPEND: 'admin:org:suspend',
|
|
31
|
-
|
|
31
|
+
ORG_DELETE: 'admin:org:delete',
|
|
32
32
|
// Application management
|
|
33
33
|
APP_CREATE: 'admin:app:create',
|
|
34
34
|
APP_READ: 'admin:app:read',
|
|
35
35
|
APP_UPDATE: 'admin:app:update',
|
|
36
|
-
|
|
36
|
+
APP_DELETE: 'admin:app:delete',
|
|
37
|
+
MODULE_DELETE: 'admin:module:delete',
|
|
37
38
|
// Client management
|
|
38
39
|
CLIENT_CREATE: 'admin:client:create',
|
|
39
40
|
CLIENT_READ: 'admin:client:read',
|
|
40
41
|
CLIENT_UPDATE: 'admin:client:update',
|
|
41
42
|
CLIENT_REVOKE: 'admin:client:revoke',
|
|
43
|
+
CLIENT_DELETE: 'admin:client:delete',
|
|
42
44
|
// User management
|
|
43
45
|
USER_CREATE: 'admin:user:create',
|
|
44
46
|
USER_READ: 'admin:user:read',
|
|
45
47
|
USER_UPDATE: 'admin:user:update',
|
|
46
|
-
|
|
47
|
-
|
|
48
|
+
USER_LIFECYCLE: 'admin:user:lifecycle',
|
|
49
|
+
USER_DELETE: 'admin:user:delete',
|
|
48
50
|
USER_INVITE: 'admin:user:invite',
|
|
49
51
|
USER_2FA: 'admin:user:2fa',
|
|
50
52
|
// Role management
|
|
51
53
|
ROLE_CREATE: 'admin:role:create',
|
|
52
54
|
ROLE_READ: 'admin:role:read',
|
|
53
55
|
ROLE_UPDATE: 'admin:role:update',
|
|
54
|
-
|
|
56
|
+
ROLE_DELETE: 'admin:role:delete',
|
|
55
57
|
ROLE_ASSIGN: 'admin:role:assign',
|
|
56
58
|
// Permission management
|
|
57
59
|
PERMISSION_CREATE: 'admin:permission:create',
|
|
58
60
|
PERMISSION_READ: 'admin:permission:read',
|
|
59
|
-
|
|
61
|
+
PERMISSION_UPDATE: 'admin:permission:update',
|
|
62
|
+
PERMISSION_DELETE: 'admin:permission:delete',
|
|
60
63
|
// Custom claims management
|
|
61
64
|
CLAIM_CREATE: 'admin:claim:create',
|
|
62
65
|
CLAIM_READ: 'admin:claim:read',
|
|
63
66
|
CLAIM_UPDATE: 'admin:claim:update',
|
|
64
|
-
|
|
67
|
+
CLAIM_DELETE: 'admin:claim:delete',
|
|
65
68
|
// System configuration
|
|
66
69
|
CONFIG_READ: 'admin:config:read',
|
|
67
70
|
CONFIG_UPDATE: 'admin:config:update',
|
|
@@ -82,6 +85,8 @@ export const ADMIN_PERMISSIONS = {
|
|
|
82
85
|
};
|
|
83
86
|
/** Array of all admin permission slug values (useful for iteration/validation) */
|
|
84
87
|
export const ALL_ADMIN_PERMISSIONS = Object.values(ADMIN_PERMISSIONS);
|
|
88
|
+
/** Exact role slug required for complete-environment administrative operations. */
|
|
89
|
+
export const SUPER_ADMIN_ROLE_SLUG = 'porta-super-admin';
|
|
85
90
|
/**
|
|
86
91
|
* Predefined admin role definitions with their permission sets.
|
|
87
92
|
*
|
|
@@ -96,7 +101,7 @@ export const ALL_ADMIN_PERMISSIONS = Object.values(ADMIN_PERMISSIONS);
|
|
|
96
101
|
*/
|
|
97
102
|
export const ADMIN_ROLE_DEFINITIONS = {
|
|
98
103
|
SUPER_ADMIN: {
|
|
99
|
-
slug:
|
|
104
|
+
slug: SUPER_ADMIN_ROLE_SLUG,
|
|
100
105
|
name: 'Super Admin',
|
|
101
106
|
description: 'Full system access, cannot be deleted',
|
|
102
107
|
permissions: ALL_ADMIN_PERMISSIONS,
|
|
@@ -110,7 +115,7 @@ export const ADMIN_ROLE_DEFINITIONS = {
|
|
|
110
115
|
ADMIN_PERMISSIONS.ORG_READ,
|
|
111
116
|
ADMIN_PERMISSIONS.ORG_UPDATE,
|
|
112
117
|
ADMIN_PERMISSIONS.ORG_SUSPEND,
|
|
113
|
-
ADMIN_PERMISSIONS.
|
|
118
|
+
ADMIN_PERMISSIONS.ORG_DELETE,
|
|
114
119
|
ADMIN_PERMISSIONS.STATS_READ,
|
|
115
120
|
],
|
|
116
121
|
},
|
|
@@ -122,10 +127,11 @@ export const ADMIN_ROLE_DEFINITIONS = {
|
|
|
122
127
|
ADMIN_PERMISSIONS.USER_CREATE,
|
|
123
128
|
ADMIN_PERMISSIONS.USER_READ,
|
|
124
129
|
ADMIN_PERMISSIONS.USER_UPDATE,
|
|
125
|
-
ADMIN_PERMISSIONS.
|
|
126
|
-
ADMIN_PERMISSIONS.
|
|
130
|
+
ADMIN_PERMISSIONS.USER_LIFECYCLE,
|
|
131
|
+
ADMIN_PERMISSIONS.USER_DELETE,
|
|
127
132
|
ADMIN_PERMISSIONS.USER_INVITE,
|
|
128
133
|
ADMIN_PERMISSIONS.USER_2FA,
|
|
134
|
+
ADMIN_PERMISSIONS.APP_READ,
|
|
129
135
|
ADMIN_PERMISSIONS.ROLE_ASSIGN,
|
|
130
136
|
ADMIN_PERMISSIONS.ROLE_READ,
|
|
131
137
|
ADMIN_PERMISSIONS.CLAIM_READ,
|
|
@@ -138,25 +144,29 @@ export const ADMIN_ROLE_DEFINITIONS = {
|
|
|
138
144
|
name: 'Application Admin',
|
|
139
145
|
description: 'Manage applications, clients, RBAC definitions',
|
|
140
146
|
permissions: [
|
|
147
|
+
ADMIN_PERMISSIONS.ORG_READ,
|
|
141
148
|
ADMIN_PERMISSIONS.APP_CREATE,
|
|
142
149
|
ADMIN_PERMISSIONS.APP_READ,
|
|
143
150
|
ADMIN_PERMISSIONS.APP_UPDATE,
|
|
144
|
-
ADMIN_PERMISSIONS.
|
|
151
|
+
ADMIN_PERMISSIONS.APP_DELETE,
|
|
152
|
+
ADMIN_PERMISSIONS.MODULE_DELETE,
|
|
145
153
|
ADMIN_PERMISSIONS.CLIENT_CREATE,
|
|
146
154
|
ADMIN_PERMISSIONS.CLIENT_READ,
|
|
147
155
|
ADMIN_PERMISSIONS.CLIENT_UPDATE,
|
|
148
156
|
ADMIN_PERMISSIONS.CLIENT_REVOKE,
|
|
157
|
+
ADMIN_PERMISSIONS.CLIENT_DELETE,
|
|
149
158
|
ADMIN_PERMISSIONS.ROLE_CREATE,
|
|
150
159
|
ADMIN_PERMISSIONS.ROLE_READ,
|
|
151
160
|
ADMIN_PERMISSIONS.ROLE_UPDATE,
|
|
152
|
-
ADMIN_PERMISSIONS.
|
|
161
|
+
ADMIN_PERMISSIONS.ROLE_DELETE,
|
|
153
162
|
ADMIN_PERMISSIONS.PERMISSION_CREATE,
|
|
154
163
|
ADMIN_PERMISSIONS.PERMISSION_READ,
|
|
155
|
-
ADMIN_PERMISSIONS.
|
|
164
|
+
ADMIN_PERMISSIONS.PERMISSION_UPDATE,
|
|
165
|
+
ADMIN_PERMISSIONS.PERMISSION_DELETE,
|
|
156
166
|
ADMIN_PERMISSIONS.CLAIM_CREATE,
|
|
157
167
|
ADMIN_PERMISSIONS.CLAIM_READ,
|
|
158
168
|
ADMIN_PERMISSIONS.CLAIM_UPDATE,
|
|
159
|
-
ADMIN_PERMISSIONS.
|
|
169
|
+
ADMIN_PERMISSIONS.CLAIM_DELETE,
|
|
160
170
|
],
|
|
161
171
|
},
|
|
162
172
|
AUDITOR: {
|
|
@@ -199,7 +209,7 @@ export const LEGACY_ADMIN_ROLE = 'porta-admin';
|
|
|
199
209
|
* @returns true if the role grants super-admin level access
|
|
200
210
|
*/
|
|
201
211
|
export function isSuperAdminRole(roleSlug) {
|
|
202
|
-
return
|
|
212
|
+
return roleSlug === ADMIN_ROLE_DEFINITIONS.SUPER_ADMIN.slug || roleSlug === LEGACY_ADMIN_ROLE;
|
|
203
213
|
}
|
|
204
214
|
/**
|
|
205
215
|
* Resolve the effective admin role slug, mapping legacy roles to their
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-permissions.js","sourceRoot":"","sources":["../../src/lib/admin-permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,0BAA0B;IAC1B,UAAU,EAAE,kBAAkB;IAC9B,QAAQ,EAAE,gBAAgB;IAC1B,UAAU,EAAE,kBAAkB;IAC9B,WAAW,EAAE,mBAAmB;IAChC,
|
|
1
|
+
{"version":3,"file":"admin-permissions.js","sourceRoot":"","sources":["../../src/lib/admin-permissions.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/audit-log.d.ts
CHANGED
|
@@ -38,8 +38,8 @@ export declare function writeAuditLog(entry: AuditLogEntry): Promise<void>;
|
|
|
38
38
|
* administrative mutations must call it before commit so an unavailable durable audit boundary
|
|
39
39
|
* rolls back the mutation instead of creating an unaudited success.
|
|
40
40
|
*
|
|
41
|
-
* @param client -
|
|
41
|
+
* @param client - Query boundary currently routed through the mutation transaction.
|
|
42
42
|
* @param entry - Closed business audit entry.
|
|
43
43
|
*/
|
|
44
|
-
export declare function writeAuditLogInTransaction(client: PoolClient, entry: AuditLogEntry): Promise<void>;
|
|
44
|
+
export declare function writeAuditLogInTransaction(client: Pick<PoolClient, 'query'>, entry: AuditLogEntry): Promise<void>;
|
|
45
45
|
//# sourceMappingURL=audit-log.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../src/lib/audit-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAQrC,gDAAgD;AAChD,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BvE;AAED;;;;;;;;;GASG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../src/lib/audit-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAQrC,gDAAgD;AAChD,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BvE;AAED;;;;;;;;;GASG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,EACjC,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,IAAI,CAAC,CAoBf"}
|
package/dist/lib/audit-log.js
CHANGED
|
@@ -55,7 +55,7 @@ export async function writeAuditLog(entry) {
|
|
|
55
55
|
* administrative mutations must call it before commit so an unavailable durable audit boundary
|
|
56
56
|
* rolls back the mutation instead of creating an unaudited success.
|
|
57
57
|
*
|
|
58
|
-
* @param client -
|
|
58
|
+
* @param client - Query boundary currently routed through the mutation transaction.
|
|
59
59
|
* @param entry - Closed business audit entry.
|
|
60
60
|
*/
|
|
61
61
|
export async function writeAuditLogInTransaction(client, entry) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../../src/lib/audit-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAmBrC,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAoB;IACtD,MAAM,mBAAmB,CAAC,KAAK,IAAI,EAAE;QACnC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,KAAK,CACd;;;;;mDAK2C,EAC3C;gBACE,KAAK,CAAC,cAAc,IAAI,IAAI;gBAC5B,KAAK,CAAC,MAAM,IAAI,IAAI;gBACpB,KAAK,CAAC,OAAO,IAAI,IAAI;gBACrB,KAAK,CAAC,SAAS;gBACf,KAAK,CAAC,aAAa;gBACnB,KAAK,CAAC,WAAW,IAAI,IAAI;gBACzB,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;gBACtD,KAAK,CAAC,SAAS,IAAI,IAAI;gBACvB,KAAK,CAAC,SAAS,IAAI,IAAI;aACxB,CACF,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CACT,EAAE,KAAK,EAAE,kCAAkC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,EACzE,kCAAkC,CACnC,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,
|
|
1
|
+
{"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../../src/lib/audit-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAmBrC,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAoB;IACtD,MAAM,mBAAmB,CAAC,KAAK,IAAI,EAAE;QACnC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,KAAK,CACd;;;;;mDAK2C,EAC3C;gBACE,KAAK,CAAC,cAAc,IAAI,IAAI;gBAC5B,KAAK,CAAC,MAAM,IAAI,IAAI;gBACpB,KAAK,CAAC,OAAO,IAAI,IAAI;gBACrB,KAAK,CAAC,SAAS;gBACf,KAAK,CAAC,aAAa;gBACnB,KAAK,CAAC,WAAW,IAAI,IAAI;gBACzB,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;gBACtD,KAAK,CAAC,SAAS,IAAI,IAAI;gBACvB,KAAK,CAAC,SAAS,IAAI,IAAI;aACxB,CACF,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CACT,EAAE,KAAK,EAAE,kCAAkC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,EACzE,kCAAkC,CACnC,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,MAAiC,EACjC,KAAoB;IAEpB,MAAM,MAAM,CAAC,KAAK,CAChB;;;;;iDAK6C,EAC7C;QACE,KAAK,CAAC,cAAc,IAAI,IAAI;QAC5B,KAAK,CAAC,MAAM,IAAI,IAAI;QACpB,KAAK,CAAC,OAAO,IAAI,IAAI;QACrB,KAAK,CAAC,SAAS;QACf,KAAK,CAAC,aAAa;QACnB,KAAK,CAAC,WAAW,IAAI,IAAI;QACzB,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;QACtD,KAAK,CAAC,SAAS,IAAI,IAAI;QACvB,KAAK,CAAC,SAAS,IAAI,IAAI;KACxB,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Identifiers needed to finish targeted authority cleanup after commit. */
|
|
2
|
+
export interface RevokedAuthority {
|
|
3
|
+
/** Stored OIDC grant IDs removed with the affected users' authority. */
|
|
4
|
+
readonly grantIds: readonly string[];
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Revoke database-backed sessions and OIDC state for affected users.
|
|
8
|
+
*
|
|
9
|
+
* The caller must already own the request transaction and must identify the
|
|
10
|
+
* affected users before calling this function. Redis cleanup is deliberately
|
|
11
|
+
* excluded so the PostgreSQL transaction remains short.
|
|
12
|
+
*
|
|
13
|
+
* @param userIds - Users whose effective authority was reduced
|
|
14
|
+
* @returns Grant identifiers needed by detached post-commit cleanup
|
|
15
|
+
* @throws When called outside an active database transaction
|
|
16
|
+
*/
|
|
17
|
+
export declare function revokeAffectedAuthorityInTransaction(userIds: readonly string[]): Promise<RevokedAuthority>;
|
|
18
|
+
//# sourceMappingURL=authority-revocation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authority-revocation.d.ts","sourceRoot":"","sources":["../../src/lib/authority-revocation.ts"],"names":[],"mappings":"AAGA,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,oCAAoC,CACxD,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,OAAO,CAAC,gBAAgB,CAAC,CA0B3B"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { getDatabaseTransactionClient } from './database.js';
|
|
2
|
+
/**
|
|
3
|
+
* Revoke database-backed sessions and OIDC state for affected users.
|
|
4
|
+
*
|
|
5
|
+
* The caller must already own the request transaction and must identify the
|
|
6
|
+
* affected users before calling this function. Redis cleanup is deliberately
|
|
7
|
+
* excluded so the PostgreSQL transaction remains short.
|
|
8
|
+
*
|
|
9
|
+
* @param userIds - Users whose effective authority was reduced
|
|
10
|
+
* @returns Grant identifiers needed by detached post-commit cleanup
|
|
11
|
+
* @throws When called outside an active database transaction
|
|
12
|
+
*/
|
|
13
|
+
export async function revokeAffectedAuthorityInTransaction(userIds) {
|
|
14
|
+
const transaction = requireTransaction();
|
|
15
|
+
const orderedUserIds = [...new Set(userIds)].sort();
|
|
16
|
+
if (orderedUserIds.length === 0)
|
|
17
|
+
return { grantIds: [] };
|
|
18
|
+
const grants = await transaction.query(`SELECT id FROM oidc_payloads
|
|
19
|
+
WHERE type = 'Grant' AND payload->>'accountId' = ANY($1::text[])
|
|
20
|
+
ORDER BY id`, [orderedUserIds]);
|
|
21
|
+
const grantIds = grants.rows.map((row) => row.id);
|
|
22
|
+
await transaction.query(`UPDATE admin_sessions SET revoked_at = NOW()
|
|
23
|
+
WHERE user_id = ANY($1::uuid[]) AND revoked_at IS NULL`, [orderedUserIds]);
|
|
24
|
+
await transaction.query(`DELETE FROM oidc_payloads
|
|
25
|
+
WHERE id = ANY($1::varchar[]) OR grant_id = ANY($1::varchar[])
|
|
26
|
+
OR payload->>'accountId' = ANY($2::text[])`, [grantIds, orderedUserIds]);
|
|
27
|
+
return { grantIds };
|
|
28
|
+
}
|
|
29
|
+
/** Return the active request transaction or reject unsafe partial use. */
|
|
30
|
+
function requireTransaction() {
|
|
31
|
+
const transaction = getDatabaseTransactionClient();
|
|
32
|
+
if (!transaction) {
|
|
33
|
+
throw new Error('Authority revocation requires an active database transaction');
|
|
34
|
+
}
|
|
35
|
+
return transaction;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=authority-revocation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authority-revocation.js","sourceRoot":"","sources":["../../src/lib/authority-revocation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAQ7D;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,oCAAoC,CACxD,OAA0B;IAE1B,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IACzC,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAEzD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,CACpC;;iBAEa,EACb,CAAC,cAAc,CAAC,CACjB,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAElD,MAAM,WAAW,CAAC,KAAK,CACrB;4DACwD,EACxD,CAAC,cAAc,CAAC,CACjB,CAAC;IACF,MAAM,WAAW,CAAC,KAAK,CACrB;;kDAE8C,EAC9C,CAAC,QAAQ,EAAE,cAAc,CAAC,CAC3B,CAAC;IAEF,OAAO,EAAE,QAAQ,EAAE,CAAC;AACtB,CAAC;AAED,0EAA0E;AAC1E,SAAS,kBAAkB;IACzB,MAAM,WAAW,GAAG,4BAA4B,EAAE,CAAC;IACnD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -4,44 +4,74 @@
|
|
|
4
4
|
* Manages organization logo and favicon image uploads stored as PostgreSQL
|
|
5
5
|
* bytea. Images are validated for type, size, and content before storage.
|
|
6
6
|
*
|
|
7
|
-
* Supported formats: PNG, SVG, ICO, JPEG, WebP
|
|
8
|
-
* Max file size: 512 KB
|
|
7
|
+
* Supported formats: PNG, SVG, ICO, JPEG, and WebP.
|
|
9
8
|
*
|
|
10
9
|
* @module branding-assets
|
|
11
|
-
* @see 06-bulk-operations-branding.md
|
|
12
10
|
*/
|
|
11
|
+
/** Branding image slot owned by an organization. */
|
|
13
12
|
export type AssetType = 'logo' | 'favicon';
|
|
13
|
+
/** Metadata returned for a stored organization branding asset. */
|
|
14
14
|
export interface BrandingAsset {
|
|
15
|
+
/** Stable asset identifier. */
|
|
15
16
|
id: string;
|
|
17
|
+
/** Organization that owns the asset. */
|
|
16
18
|
organizationId: string;
|
|
19
|
+
/** Branding slot occupied by the asset. */
|
|
17
20
|
assetType: AssetType;
|
|
21
|
+
/** Media type confirmed from the stored content. */
|
|
18
22
|
contentType: string;
|
|
23
|
+
/** Number of decoded bytes stored in PostgreSQL. */
|
|
19
24
|
fileSize: number;
|
|
25
|
+
/** Time at which the asset row was created. */
|
|
20
26
|
createdAt: Date;
|
|
27
|
+
/** Time at which the asset content was last replaced. */
|
|
21
28
|
updatedAt: Date;
|
|
22
29
|
}
|
|
30
|
+
/** Stored branding metadata together with its validated binary content. */
|
|
23
31
|
export interface BrandingAssetWithData extends BrandingAsset {
|
|
32
|
+
/** Validated image bytes. SVG bytes contain the sanitized representation. */
|
|
24
33
|
data: Buffer;
|
|
25
34
|
}
|
|
35
|
+
/** Expected client-data failure raised when branding image validation rejects an upload. */
|
|
36
|
+
export declare class BrandingAssetValidationError extends Error {
|
|
37
|
+
/** Create a branding validation failure without exposing image content. */
|
|
38
|
+
constructor(message: string);
|
|
39
|
+
}
|
|
26
40
|
/**
|
|
27
41
|
* Upload (upsert) a branding asset for an organization.
|
|
28
42
|
* If an asset of the same type already exists, it is replaced.
|
|
29
43
|
*
|
|
30
|
-
* @
|
|
44
|
+
* @param organizationId - Organization that owns the asset.
|
|
45
|
+
* @param assetType - Branding slot to create or replace.
|
|
46
|
+
* @param contentType - Declared image media type.
|
|
47
|
+
* @param data - Decoded image bytes supplied by the caller.
|
|
48
|
+
* @returns Metadata for the stored asset.
|
|
49
|
+
* @throws Error when the image type, size, signature, or SVG content is invalid.
|
|
31
50
|
*/
|
|
32
51
|
export declare function uploadAsset(organizationId: string, assetType: AssetType, contentType: string, data: Buffer): Promise<BrandingAsset>;
|
|
33
52
|
/**
|
|
34
53
|
* Get a branding asset with its binary data.
|
|
35
54
|
* Returns null if no asset exists.
|
|
55
|
+
*
|
|
56
|
+
* @param organizationId - Organization that owns the asset.
|
|
57
|
+
* @param assetType - Branding slot to read.
|
|
58
|
+
* @returns Stored metadata and bytes, or `null` when the slot is empty.
|
|
36
59
|
*/
|
|
37
60
|
export declare function getAsset(organizationId: string, assetType: AssetType): Promise<BrandingAssetWithData | null>;
|
|
38
61
|
/**
|
|
39
|
-
* List branding assets for an organization
|
|
62
|
+
* List branding assets for an organization without loading binary data.
|
|
63
|
+
*
|
|
64
|
+
* @param organizationId - Organization whose asset metadata is requested.
|
|
65
|
+
* @returns Metadata ordered by branding slot.
|
|
40
66
|
*/
|
|
41
67
|
export declare function listAssets(organizationId: string): Promise<BrandingAsset[]>;
|
|
42
68
|
/**
|
|
43
69
|
* Delete a branding asset.
|
|
44
70
|
* Returns true if the asset existed and was deleted.
|
|
71
|
+
*
|
|
72
|
+
* @param organizationId - Organization that owns the asset.
|
|
73
|
+
* @param assetType - Branding slot to remove.
|
|
74
|
+
* @returns Whether an asset row was removed.
|
|
45
75
|
*/
|
|
46
76
|
export declare function deleteAsset(organizationId: string, assetType: AssetType): Promise<boolean>;
|
|
47
77
|
//# sourceMappingURL=branding-assets.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branding-assets.d.ts","sourceRoot":"","sources":["../../src/lib/branding-assets.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"branding-assets.d.ts","sourceRoot":"","sources":["../../src/lib/branding-assets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,oDAAoD;AACpD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAE3C,kEAAkE;AAClE,MAAM,WAAW,aAAa;IAC5B,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,wCAAwC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,SAAS,EAAE,SAAS,CAAC;IACrB,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,SAAS,EAAE,IAAI,CAAC;IAChB,yDAAyD;IACzD,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,2EAA2E;AAC3E,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;CACd;AAED,4FAA4F;AAC5F,qBAAa,4BAA6B,SAAQ,KAAK;IACrD,2EAA2E;IAC3E,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,CAAC,CAwBxB;AAED;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAC5B,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAWvC;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAYjF;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAOhG"}
|
|
@@ -4,25 +4,20 @@
|
|
|
4
4
|
* Manages organization logo and favicon image uploads stored as PostgreSQL
|
|
5
5
|
* bytea. Images are validated for type, size, and content before storage.
|
|
6
6
|
*
|
|
7
|
-
* Supported formats: PNG, SVG, ICO, JPEG, WebP
|
|
8
|
-
* Max file size: 512 KB
|
|
7
|
+
* Supported formats: PNG, SVG, ICO, JPEG, and WebP.
|
|
9
8
|
*
|
|
10
9
|
* @module branding-assets
|
|
11
|
-
* @see 06-bulk-operations-branding.md
|
|
12
10
|
*/
|
|
13
11
|
import { getPool } from './database.js';
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
'image/jpeg',
|
|
24
|
-
'image/webp',
|
|
25
|
-
]);
|
|
12
|
+
import { validateImage } from './image-validator.js';
|
|
13
|
+
/** Expected client-data failure raised when branding image validation rejects an upload. */
|
|
14
|
+
export class BrandingAssetValidationError extends Error {
|
|
15
|
+
/** Create a branding validation failure without exposing image content. */
|
|
16
|
+
constructor(message) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.name = 'BrandingAssetValidationError';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
26
21
|
// ============================================================================
|
|
27
22
|
// Service functions
|
|
28
23
|
// ============================================================================
|
|
@@ -30,18 +25,19 @@ const ALLOWED_CONTENT_TYPES = new Set([
|
|
|
30
25
|
* Upload (upsert) a branding asset for an organization.
|
|
31
26
|
* If an asset of the same type already exists, it is replaced.
|
|
32
27
|
*
|
|
33
|
-
* @
|
|
28
|
+
* @param organizationId - Organization that owns the asset.
|
|
29
|
+
* @param assetType - Branding slot to create or replace.
|
|
30
|
+
* @param contentType - Declared image media type.
|
|
31
|
+
* @param data - Decoded image bytes supplied by the caller.
|
|
32
|
+
* @returns Metadata for the stored asset.
|
|
33
|
+
* @throws Error when the image type, size, signature, or SVG content is invalid.
|
|
34
34
|
*/
|
|
35
35
|
export async function uploadAsset(organizationId, assetType, contentType, data) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
if (data.length === 0) {
|
|
40
|
-
throw new Error('Asset data cannot be empty');
|
|
41
|
-
}
|
|
42
|
-
if (data.length > MAX_FILE_SIZE) {
|
|
43
|
-
throw new Error(`File too large: ${data.length} bytes (max ${MAX_FILE_SIZE})`);
|
|
36
|
+
const validation = validateImage(data, contentType, assetType);
|
|
37
|
+
if (!validation.valid || validation.data === undefined) {
|
|
38
|
+
throw new BrandingAssetValidationError(validation.error ?? 'Branding asset is invalid');
|
|
44
39
|
}
|
|
40
|
+
const validatedData = validation.data;
|
|
45
41
|
const pool = getPool();
|
|
46
42
|
const { rows } = await pool.query(`INSERT INTO branding_assets (organization_id, asset_type, content_type, data, file_size)
|
|
47
43
|
VALUES ($1, $2, $3, $4, $5)
|
|
@@ -52,12 +48,16 @@ export async function uploadAsset(organizationId, assetType, contentType, data)
|
|
|
52
48
|
updated_at = NOW()
|
|
53
49
|
RETURNING id, organization_id AS "organizationId", asset_type AS "assetType",
|
|
54
50
|
content_type AS "contentType", file_size AS "fileSize",
|
|
55
|
-
created_at AS "createdAt", updated_at AS "updatedAt"`, [organizationId, assetType, contentType,
|
|
51
|
+
created_at AS "createdAt", updated_at AS "updatedAt"`, [organizationId, assetType, contentType, validatedData, validatedData.length]);
|
|
56
52
|
return rows[0];
|
|
57
53
|
}
|
|
58
54
|
/**
|
|
59
55
|
* Get a branding asset with its binary data.
|
|
60
56
|
* Returns null if no asset exists.
|
|
57
|
+
*
|
|
58
|
+
* @param organizationId - Organization that owns the asset.
|
|
59
|
+
* @param assetType - Branding slot to read.
|
|
60
|
+
* @returns Stored metadata and bytes, or `null` when the slot is empty.
|
|
61
61
|
*/
|
|
62
62
|
export async function getAsset(organizationId, assetType) {
|
|
63
63
|
const pool = getPool();
|
|
@@ -69,7 +69,10 @@ export async function getAsset(organizationId, assetType) {
|
|
|
69
69
|
return rows[0] ?? null;
|
|
70
70
|
}
|
|
71
71
|
/**
|
|
72
|
-
* List branding assets for an organization
|
|
72
|
+
* List branding assets for an organization without loading binary data.
|
|
73
|
+
*
|
|
74
|
+
* @param organizationId - Organization whose asset metadata is requested.
|
|
75
|
+
* @returns Metadata ordered by branding slot.
|
|
73
76
|
*/
|
|
74
77
|
export async function listAssets(organizationId) {
|
|
75
78
|
const pool = getPool();
|
|
@@ -84,6 +87,10 @@ export async function listAssets(organizationId) {
|
|
|
84
87
|
/**
|
|
85
88
|
* Delete a branding asset.
|
|
86
89
|
* Returns true if the asset existed and was deleted.
|
|
90
|
+
*
|
|
91
|
+
* @param organizationId - Organization that owns the asset.
|
|
92
|
+
* @param assetType - Branding slot to remove.
|
|
93
|
+
* @returns Whether an asset row was removed.
|
|
87
94
|
*/
|
|
88
95
|
export async function deleteAsset(organizationId, assetType) {
|
|
89
96
|
const pool = getPool();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branding-assets.js","sourceRoot":"","sources":["../../src/lib/branding-assets.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"branding-assets.js","sourceRoot":"","sources":["../../src/lib/branding-assets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAiCrD,4FAA4F;AAC5F,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACrD,2EAA2E;IAC3E,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,cAAsB,EACtB,SAAoB,EACpB,WAAmB,EACnB,IAAY;IAEZ,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAC/D,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACvD,MAAM,IAAI,4BAA4B,CAAC,UAAU,CAAC,KAAK,IAAI,2BAA2B,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC;IAEtC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAC/B;;;;;;;;;oEASgE,EAChE,CAAC,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,CAC9E,CAAC;IAEF,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,cAAsB,EACtB,SAAoB;IAEpB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAC/B;;;;oDAIgD,EAChD,CAAC,cAAc,EAAE,SAAS,CAAC,CAC5B,CAAC;IACF,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,cAAsB;IACrD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAC/B;;;;;yBAKqB,EACrB,CAAC,cAAc,CAAC,CACjB,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,cAAsB,EAAE,SAAoB;IAC5E,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CACnC,4EAA4E,EAC5E,CAAC,cAAc,EAAE,SAAS,CAAC,CAC5B,CAAC;IACF,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
/** Supported entity types for bulk operations. */
|
|
10
10
|
export type BulkEntityType = 'organization' | 'user';
|
|
11
11
|
/** Supported actions across both bulk entity types. */
|
|
12
|
-
export type BulkAction = 'activate' | 'suspend' | 'deactivate'
|
|
12
|
+
export type BulkAction = 'activate' | 'suspend' | 'deactivate';
|
|
13
13
|
/** Closed public outcome for one requested item. */
|
|
14
14
|
export type BulkItemOutcome = 'succeeded' | 'failed' | 'not_attempted';
|
|
15
15
|
/** Closed public reason for an unsuccessful item. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bulk-operations.d.ts","sourceRoot":"","sources":["../../src/lib/bulk-operations.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,kDAAkD;AAClD,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,MAAM,CAAC;AAErD,uDAAuD;AACvD,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"bulk-operations.d.ts","sourceRoot":"","sources":["../../src/lib/bulk-operations.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,kDAAkD;AAClD,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,MAAM,CAAC;AAErD,uDAAuD;AACvD,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC;AAE/D,oDAAoD;AACpD,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,QAAQ,GAAG,eAAe,CAAC;AAEvE,qDAAqD;AACrD,MAAM,MAAM,YAAY,GAAG,6BAA6B,GAAG,oBAAoB,GAAG,eAAe,CAAC;AAElG,mDAAmD;AACnD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,iDAAiD;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C,2DAA2D;IAC3D,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAqJD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAqEjG"}
|
|
@@ -13,14 +13,10 @@ import { writeAuditLogInTransaction } from './audit-log.js';
|
|
|
13
13
|
const ORGANIZATION_TRANSITIONS = Object.freeze({
|
|
14
14
|
activate: { from: ['suspended'], to: 'active' },
|
|
15
15
|
suspend: { from: ['active'], to: 'suspended' },
|
|
16
|
-
archive: { from: ['active', 'suspended'], to: 'archived' },
|
|
17
16
|
});
|
|
18
17
|
const USER_TRANSITIONS = Object.freeze({
|
|
19
|
-
activate: { from: ['inactive'
|
|
18
|
+
activate: { from: ['inactive'], to: 'active' },
|
|
20
19
|
deactivate: { from: ['active'], to: 'inactive' },
|
|
21
|
-
suspend: { from: ['active'], to: 'suspended' },
|
|
22
|
-
lock: { from: ['active'], to: 'locked' },
|
|
23
|
-
unlock: { from: ['locked'], to: 'active' },
|
|
24
20
|
});
|
|
25
21
|
const MAXIMUM_ITEMS = 100;
|
|
26
22
|
const MAXIMUM_REASON_CHARACTERS = 500;
|
|
@@ -64,14 +60,6 @@ async function lockCurrentStatus(client, input, id) {
|
|
|
64
60
|
}
|
|
65
61
|
/** Persist the status transition using only closed table and field choices. */
|
|
66
62
|
async function updateStatus(client, input, id, nextStatus) {
|
|
67
|
-
if (input.entityType === 'user' &&
|
|
68
|
-
input.reason &&
|
|
69
|
-
(input.action === 'suspend' || input.action === 'lock')) {
|
|
70
|
-
await client.query(`UPDATE users
|
|
71
|
-
SET status = $1, updated_at = NOW(), suspension_reason = $2
|
|
72
|
-
WHERE id = $3 AND organization_id = $4`, [nextStatus, input.reason, id, input.organizationId]);
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
63
|
if (input.entityType === 'user') {
|
|
76
64
|
await client.query(`UPDATE users SET status = $1, updated_at = NOW()
|
|
77
65
|
WHERE id = $2 AND organization_id = $3`, [nextStatus, id, input.organizationId]);
|