@wildo-ai/saas-models 1.1.2 → 1.1.4
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/dist/esm/__tests__/setup.d.ts.map +1 -1
- package/dist/esm/_inspect.d.ts.map +1 -1
- package/dist/esm/applications/application-metadata.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/applications/application-subject.shared.schemas.d.ts.map +1 -1
- package/dist/esm/applications/application-versions.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/applications/applications-context.schemas.d.ts +14 -10
- package/dist/esm/applications/applications-context.schemas.d.ts.map +1 -1
- package/dist/esm/applications/applications.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/applications/applications.shared.resources-config.schemas.js +4 -3
- package/dist/esm/applications/applications.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/applications/applications.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-account.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-account.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-configuration.shared.schemas.d.ts +0 -4
- package/dist/esm/billing/billing-configuration.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-configuration.shared.schemas.js +59 -17
- package/dist/esm/billing/billing-configuration.shared.schemas.js.map +1 -1
- package/dist/esm/billing/billing-enums.shared.schemas.d.ts +77 -21
- package/dist/esm/billing/billing-enums.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-enums.shared.schemas.js +85 -23
- package/dist/esm/billing/billing-enums.shared.schemas.js.map +1 -1
- package/dist/esm/billing/billing-types.shared.schemas.d.ts +4 -3
- package/dist/esm/billing/billing-types.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-types.shared.schemas.js +45 -0
- package/dist/esm/billing/billing-types.shared.schemas.js.map +1 -1
- package/dist/esm/billing/credit-pool.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/credit-pool.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/invoice-ref.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/invoice-ref.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/price.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/price.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/price.shared.schemas.js +7 -1
- package/dist/esm/billing/price.shared.schemas.js.map +1 -1
- package/dist/esm/billing/product-behavior-policy.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/product-behavior-policy.shared.schemas.js +52 -11
- package/dist/esm/billing/product-behavior-policy.shared.schemas.js.map +1 -1
- package/dist/esm/billing/product-definition.shared.schemas.d.ts +2 -2
- package/dist/esm/billing/product-definition.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/product.shared.resources-config.schemas.d.ts +2 -2
- package/dist/esm/billing/product.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/product.shared.schemas.d.ts +2 -2
- package/dist/esm/billing/product.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/product.shared.schemas.js +7 -3
- package/dist/esm/billing/product.shared.schemas.js.map +1 -1
- package/dist/esm/billing/promotions.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/promotions.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/referral.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/referral.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/subscription.shared.resources-config.schemas.d.ts +1 -1
- package/dist/esm/billing/subscription.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/subscription.shared.resources-config.schemas.js +15 -1
- package/dist/esm/billing/subscription.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/subscription.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/usage-record.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/usage-record.shared.schemas.d.ts +7 -3
- package/dist/esm/billing/usage-record.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/usage-record.shared.schemas.js +22 -3
- package/dist/esm/billing/usage-record.shared.schemas.js.map +1 -1
- package/dist/esm/charts/aggregation-query.shared.schemas.d.ts.map +1 -1
- package/dist/esm/charts/chart-definition-builder.shared.d.ts.map +1 -1
- package/dist/esm/companion/provider-discovery.shared.schemas.d.ts +71 -2
- package/dist/esm/companion/provider-discovery.shared.schemas.d.ts.map +1 -1
- package/dist/esm/companion/provider-discovery.shared.schemas.js +20 -1
- package/dist/esm/companion/provider-discovery.shared.schemas.js.map +1 -1
- package/dist/esm/companion/shared-library-companion.shared.definitions.d.ts.map +1 -1
- package/dist/esm/companion-exports.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/application-audit-logs.shared.resources-config.schemas.d.ts +85 -0
- package/dist/esm/compliance/audit-trails/application-audit-logs.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/audit-trails/application-audit-logs.shared.resources-config.schemas.js +157 -0
- package/dist/esm/compliance/audit-trails/application-audit-logs.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/compliance/audit-trails/audit-log-sink.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-logs.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-trail-config.shared.schemas.d.ts +23 -0
- package/dist/esm/compliance/audit-trails/audit-trail-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-trail-config.shared.schemas.js +56 -0
- package/dist/esm/compliance/audit-trails/audit-trail-config.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/audit-trails/auditable-events.shared.schema.d.ts +658 -26
- package/dist/esm/compliance/audit-trails/auditable-events.shared.schema.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/auditable-events.shared.schema.js +873 -27
- package/dist/esm/compliance/audit-trails/auditable-events.shared.schema.js.map +1 -1
- package/dist/esm/compliance/audit-trails/security-audit-event-envelope.shared.schema.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/security-audit-event-envelope.shared.schema.js +104 -3
- package/dist/esm/compliance/audit-trails/security-audit-event-envelope.shared.schema.js.map +1 -1
- package/dist/esm/compliance/documents/governed-documents.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/ai-use-posture.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/client-storage.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/data-retention.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/impersonalization-scrub.shared.utils.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/impersonalization.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/operating-jurisdictions.shared.schemas.d.ts +54 -26
- package/dist/esm/compliance/privacy/operating-jurisdictions.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/operating-jurisdictions.shared.schemas.js +132 -3
- package/dist/esm/compliance/privacy/operating-jurisdictions.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/operator-compliance-identity.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/personal-data-category.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/personal-data-declaration.shared.utils.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/privacy.shared.schemas.d.ts +17 -0
- package/dist/esm/compliance/privacy/privacy.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/privacy.shared.schemas.js +27 -4
- package/dist/esm/compliance/privacy/privacy.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/redaction.shared.schemas.d.ts +82 -29
- package/dist/esm/compliance/privacy/redaction.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/redaction.shared.schemas.js +95 -29
- package/dist/esm/compliance/privacy/redaction.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/retention-schedule.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/subject-erasure.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/subject-export-render.shared.utils.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/subject-export.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/subject-export.shared.schemas.js +12 -5
- package/dist/esm/compliance/privacy/subject-export.shared.schemas.js.map +1 -1
- package/dist/esm/config/analytics-value-moments.shared.schemas.d.ts +21 -0
- package/dist/esm/config/analytics-value-moments.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/analytics-value-moments.shared.schemas.js +20 -0
- package/dist/esm/config/analytics-value-moments.shared.schemas.js.map +1 -1
- package/dist/esm/config/app-configuration-shared.shared.schemas.d.ts +7 -5
- package/dist/esm/config/app-configuration-shared.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/auth-config-resolution.shared.utils.d.ts +8 -1
- package/dist/esm/config/auth-config-resolution.shared.utils.d.ts.map +1 -1
- package/dist/esm/config/auth-config-resolution.shared.utils.js +29 -0
- package/dist/esm/config/auth-config-resolution.shared.utils.js.map +1 -1
- package/dist/esm/config/brand-assets.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/entity-identity-config.shared.schemas.d.ts +95 -17
- package/dist/esm/config/entity-identity-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/entity-identity-config.shared.schemas.js +86 -8
- package/dist/esm/config/entity-identity-config.shared.schemas.js.map +1 -1
- package/dist/esm/config/frontend/chart-definition.shared.schemas.d.ts +26 -26
- package/dist/esm/config/frontend/chart-definition.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/frontend/chart-registration-alignment.shared.d.ts +139 -3
- package/dist/esm/config/frontend/chart-registration-alignment.shared.d.ts.map +1 -1
- package/dist/esm/config/frontend/chart-registration-alignment.shared.js +151 -4
- package/dist/esm/config/frontend/chart-registration-alignment.shared.js.map +1 -1
- package/dist/esm/config/frontend/navigation.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/frontend/onboarding.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/registration-acquisition-policy.shared.utils.d.ts.map +1 -1
- package/dist/esm/config-authoring.entry.d.ts.map +1 -1
- package/dist/esm/crdt/crdt-merge.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/data-seeding-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/errors/errors.custom-message-ref.shared.definitions.d.ts +34 -0
- package/dist/esm/errors/errors.custom-message-ref.shared.definitions.d.ts.map +1 -1
- package/dist/esm/errors/errors.custom-message-ref.shared.definitions.js +34 -0
- package/dist/esm/errors/errors.custom-message-ref.shared.definitions.js.map +1 -1
- package/dist/esm/errors/errors.shared.definitions.d.ts.map +1 -1
- package/dist/esm/errors/errors.shared.schemas.d.ts.map +1 -1
- package/dist/esm/errors/errors.shared.utils.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-pipeline.shared.schemas.d.ts +45 -12
- package/dist/esm/external-data/external-data-pipeline.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-pipeline.shared.schemas.js.map +1 -1
- package/dist/esm/external-data.exports.d.ts.map +1 -1
- package/dist/esm/external-providers/compose-provider-registry.shared.d.ts.map +1 -1
- package/dist/esm/external-providers/engine-capabilities.shared.schemas.d.ts +110 -58
- package/dist/esm/external-providers/engine-capabilities.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/engine-capabilities.shared.schemas.js +183 -15
- package/dist/esm/external-providers/engine-capabilities.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/engine-capability-resolution-mode.shared.d.ts +15 -3
- package/dist/esm/external-providers/engine-capability-resolution-mode.shared.d.ts.map +1 -1
- package/dist/esm/external-providers/engine-capability-resolution-mode.shared.js +32 -5
- package/dist/esm/external-providers/engine-capability-resolution-mode.shared.js.map +1 -1
- package/dist/esm/external-providers/external-providers.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/frontend-bootstrap.shared.schemas.d.ts +87 -7
- package/dist/esm/external-providers/frontend-bootstrap.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/frontend-capability-public-config.shared.schemas.d.ts +59 -0
- package/dist/esm/external-providers/frontend-capability-public-config.shared.schemas.d.ts.map +1 -0
- package/dist/esm/external-providers/frontend-capability-public-config.shared.schemas.js +61 -0
- package/dist/esm/external-providers/frontend-capability-public-config.shared.schemas.js.map +1 -0
- package/dist/esm/external-providers/frontend-capability-runtime.shared.types.d.ts +97 -0
- package/dist/esm/external-providers/frontend-capability-runtime.shared.types.d.ts.map +1 -0
- package/dist/esm/external-providers/frontend-capability-runtime.shared.types.js +41 -0
- package/dist/esm/external-providers/frontend-capability-runtime.shared.types.js.map +1 -0
- package/dist/esm/external-providers/frontend-provider-entry.shared.schemas.d.ts +205 -2
- package/dist/esm/external-providers/frontend-provider-entry.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/frontend-provider-entry.shared.schemas.js +85 -1
- package/dist/esm/external-providers/frontend-provider-entry.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/frontend-provider-public-config.shared.d.ts +175 -0
- package/dist/esm/external-providers/frontend-provider-public-config.shared.d.ts.map +1 -0
- package/dist/esm/external-providers/frontend-provider-public-config.shared.js +207 -0
- package/dist/esm/external-providers/frontend-provider-public-config.shared.js.map +1 -0
- package/dist/esm/external-providers/provider-capability.shared.schemas.d.ts +5 -28
- package/dist/esm/external-providers/provider-capability.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-capability.shared.schemas.js +4 -2
- package/dist/esm/external-providers/provider-capability.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-compliance-profile.shared.schemas.d.ts +28 -8
- package/dist/esm/external-providers/provider-compliance-profile.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-compliance-profile.shared.schemas.js +15 -4
- package/dist/esm/external-providers/provider-compliance-profile.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-frontend-component-contract.shared.types.d.ts +165 -0
- package/dist/esm/external-providers/provider-frontend-component-contract.shared.types.d.ts.map +1 -0
- package/dist/esm/external-providers/provider-frontend-component-contract.shared.types.js +39 -0
- package/dist/esm/external-providers/provider-frontend-component-contract.shared.types.js.map +1 -0
- package/dist/esm/external-providers/provider-frontend-surface.shared.schemas.d.ts +338 -0
- package/dist/esm/external-providers/provider-frontend-surface.shared.schemas.d.ts.map +1 -0
- package/dist/esm/external-providers/provider-frontend-surface.shared.schemas.js +332 -0
- package/dist/esm/external-providers/provider-frontend-surface.shared.schemas.js.map +1 -0
- package/dist/esm/external-providers/provider-metadata.shared.schemas.d.ts +178 -9
- package/dist/esm/external-providers/provider-metadata.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-metadata.shared.schemas.js +181 -9
- package/dist/esm/external-providers/provider-metadata.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-protocol.shared.schemas.d.ts +7 -5
- package/dist/esm/external-providers/provider-protocol.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-protocol.shared.schemas.js +7 -5
- package/dist/esm/external-providers/provider-protocol.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-tier-rule.shared.utils.d.ts +40 -0
- package/dist/esm/external-providers/provider-tier-rule.shared.utils.d.ts.map +1 -0
- package/dist/esm/external-providers/provider-tier-rule.shared.utils.js +80 -0
- package/dist/esm/external-providers/provider-tier-rule.shared.utils.js.map +1 -0
- package/dist/esm/external-providers/provider-usage-pricing.shared.schemas.d.ts.map +1 -1
- package/dist/esm/features/application-features.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/features/application-features.shared.resources-config.schemas.js +12 -0
- package/dist/esm/features/application-features.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/features/core-feature-definitions.shared.d.ts.map +1 -1
- package/dist/esm/features/core-feature-definitions.shared.js +7 -1
- package/dist/esm/features/core-feature-definitions.shared.js.map +1 -1
- package/dist/esm/features/feature-builders.shared.d.ts +32 -0
- package/dist/esm/features/feature-builders.shared.d.ts.map +1 -1
- package/dist/esm/features/feature-builders.shared.js +32 -0
- package/dist/esm/features/feature-builders.shared.js.map +1 -1
- package/dist/esm/features/feature-definition.shared.schemas.d.ts.map +1 -1
- package/dist/esm/features/feature-registry.shared.d.ts.map +1 -1
- package/dist/esm/features/feature-resolution.shared.schemas.d.ts.map +1 -1
- package/dist/esm/features/scope-features.shared.schemas.d.ts.map +1 -1
- package/dist/esm/features/user-features.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/features/user-features.shared.resources-config.schemas.js +12 -0
- package/dist/esm/features/user-features.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/files/file-remote-reference-link.shared.schemas.d.ts +73 -0
- package/dist/esm/files/file-remote-reference-link.shared.schemas.d.ts.map +1 -0
- package/dist/esm/files/file-remote-reference-link.shared.schemas.js +62 -0
- package/dist/esm/files/file-remote-reference-link.shared.schemas.js.map +1 -0
- package/dist/esm/files/file-upload-grant.shared.schemas.d.ts +14 -2
- package/dist/esm/files/file-upload-grant.shared.schemas.d.ts.map +1 -1
- package/dist/esm/files/file-upload-grant.shared.schemas.js +44 -5
- package/dist/esm/files/file-upload-grant.shared.schemas.js.map +1 -1
- package/dist/esm/files/files.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/files/files.shared.schemas.d.ts +15 -8
- package/dist/esm/files/files.shared.schemas.d.ts.map +1 -1
- package/dist/esm/files/files.shared.schemas.js +15 -8
- package/dist/esm/files/files.shared.schemas.js.map +1 -1
- package/dist/esm/files/files.shared.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a-push-delivery-log.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a-push-delivery-log.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a-token-budget-state.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a-token-budget-state.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/actors.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/actors.shared.schemas.js +3 -2
- package/dist/esm/flows-actors/actors.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/agent-traceability.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/agents.shared.schemas.d.ts +54 -5
- package/dist/esm/flows-actors/agents.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/agents.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/apps-blueprint/apps-blueprint.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/apps-blueprint/artifacts.apps-blueprint.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/deliberation.shared.schemas.d.ts +0 -3
- package/dist/esm/flows-actors/deliberation.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/deliberation.shared.schemas.js +0 -5
- package/dist/esm/flows-actors/deliberation.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors-execution.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors-execution.shared.schemas.d.ts +14 -0
- package/dist/esm/flows-actors/flows-actors-execution.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors-execution.shared.schemas.js +40 -3
- package/dist/esm/flows-actors/flows-actors-execution.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors-task.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors-task.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.commons.shared.schemas.d.ts +19 -0
- package/dist/esm/flows-actors/flows-actors.commons.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.commons.shared.schemas.js +33 -0
- package/dist/esm/flows-actors/flows-actors.commons.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors.configuration.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.frontend.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.io.shared.schemas.d.ts +14 -9
- package/dist/esm/flows-actors/flows-actors.io.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.io.shared.schemas.js +14 -9
- package/dist/esm/flows-actors/flows-actors.io.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors.system.shared.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.system.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.system.shared.schemas.js +3 -2
- package/dist/esm/flows-actors/flows-actors.system.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows.shared.schemas.js +3 -2
- package/dist/esm/flows-actors/flows.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/mcp-servers.shared.schemas.d.ts +130 -0
- package/dist/esm/flows-actors/mcp-servers.shared.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/mcp-servers.shared.schemas.js +153 -0
- package/dist/esm/flows-actors/mcp-servers.shared.schemas.js.map +1 -0
- package/dist/esm/flows-actors/meta-workflows/actions.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/meta-workflows/budget-authority.meta-workflows.shared.schemas.d.ts +0 -3
- package/dist/esm/flows-actors/meta-workflows/budget-authority.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/meta-workflows/budget-authority.meta-workflows.shared.schemas.js +1 -4
- package/dist/esm/flows-actors/meta-workflows/budget-authority.meta-workflows.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/meta-workflows/catalog.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/meta-workflows/context-selection.meta-workflows.shared.schemas.d.ts +0 -16
- package/dist/esm/flows-actors/meta-workflows/context-selection.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/meta-workflows/context-selection.meta-workflows.shared.schemas.js +1 -17
- package/dist/esm/flows-actors/meta-workflows/context-selection.meta-workflows.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/meta-workflows/continuity-identifiers.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/meta-workflows/decisions.meta-workflows.shared.schemas.d.ts +3 -3
- package/dist/esm/flows-actors/meta-workflows/decisions.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/meta-workflows/decisions.meta-workflows.shared.schemas.js +3 -3
- package/dist/esm/flows-actors/meta-workflows/decisions.meta-workflows.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/meta-workflows/execution-binding-common.meta-workflows.shared.schemas.d.ts +2 -8
- package/dist/esm/flows-actors/meta-workflows/execution-binding-common.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/meta-workflows/execution-binding-common.meta-workflows.shared.schemas.js +4 -15
- package/dist/esm/flows-actors/meta-workflows/execution-binding-common.meta-workflows.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/meta-workflows/portable-primitives.meta-workflows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/prompt-ir.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/task-continuity-binding.actors.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/tasks.actors.shared.schemas.d.ts.map +1 -1
- package/dist/esm/frontend-definitions/settings-destination-ref.definitions.d.ts +112 -0
- package/dist/esm/frontend-definitions/settings-destination-ref.definitions.d.ts.map +1 -0
- package/dist/esm/frontend-definitions/settings-destination-ref.definitions.js +113 -0
- package/dist/esm/frontend-definitions/settings-destination-ref.definitions.js.map +1 -0
- package/dist/esm/guidance/guidance-flow.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.utils.d.ts.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.utils.js +1 -0
- package/dist/esm/guidance/guidance-state.shared.utils.js.map +1 -1
- package/dist/esm/guidance/lifecycle-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/lifecycle-state.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/lifecycle-state.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/milestone-builders.shared.d.ts.map +1 -1
- package/dist/esm/guidance/milestone-definition.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/progression-state.shared.resources-config.schemas.d.ts +8 -0
- package/dist/esm/guidance/progression-state.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/progression-state.shared.schemas.d.ts +46 -0
- package/dist/esm/guidance/progression-state.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/progression-state.shared.schemas.js +49 -0
- package/dist/esm/guidance/progression-state.shared.schemas.js.map +1 -1
- package/dist/esm/http-api-binding/http-api-binding-id.shared.utils.d.ts.map +1 -1
- package/dist/esm/http-api-binding/http-api-binding.shared.schemas.d.ts +320 -50
- package/dist/esm/http-api-binding/http-api-binding.shared.schemas.d.ts.map +1 -1
- package/dist/esm/http-api-binding/http-api-binding.shared.schemas.js +137 -36
- package/dist/esm/http-api-binding/http-api-binding.shared.schemas.js.map +1 -1
- package/dist/esm/i18n/labelling.dto.shared.schemas.d.ts.map +1 -1
- package/dist/esm/index.d.ts +15 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +15 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/meta-workflows.exports.d.ts.map +1 -1
- package/dist/esm/monitoring/monitoring.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/email/email-context.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/email/email-template-registry.shared.schemas.d.ts +11 -2
- package/dist/esm/notifications/email/email-template-registry.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/email/email-template-registry.shared.schemas.js.map +1 -1
- package/dist/esm/notifications/email/email-template.shared.enums.d.ts +15 -0
- package/dist/esm/notifications/email/email-template.shared.enums.d.ts.map +1 -1
- package/dist/esm/notifications/email/email-template.shared.enums.js +15 -0
- package/dist/esm/notifications/email/email-template.shared.enums.js.map +1 -1
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-contract.shared.d.ts.map +1 -1
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/m2m/webhook-config.shared.resources-config.schemas.d.ts +1 -0
- package/dist/esm/notifications/m2m/webhook-config.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/m2m/webhook-config.shared.resources-config.schemas.js +19 -0
- package/dist/esm/notifications/m2m/webhook-config.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/notifications/m2m/webhook-config.shared.schemas.d.ts +30 -0
- package/dist/esm/notifications/m2m/webhook-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/m2m/webhook-config.shared.schemas.js +65 -1
- package/dist/esm/notifications/m2m/webhook-config.shared.schemas.js.map +1 -1
- package/dist/esm/notifications/notification-badges.core.definitions.d.ts +6 -4
- package/dist/esm/notifications/notification-badges.core.definitions.d.ts.map +1 -1
- package/dist/esm/notifications/notification-badges.core.definitions.js +6 -4
- package/dist/esm/notifications/notification-badges.core.definitions.js.map +1 -1
- package/dist/esm/notifications/notification-badges.schemas.d.ts +167 -5
- package/dist/esm/notifications/notification-badges.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/notification-badges.schemas.js +191 -6
- package/dist/esm/notifications/notification-badges.schemas.js.map +1 -1
- package/dist/esm/notifications/notification-badges.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/notifications.shared.schemas.d.ts +158 -0
- package/dist/esm/notifications/notifications.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/notifications.shared.schemas.js +200 -1
- package/dist/esm/notifications/notifications.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-features.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-features.shared.resources-config.schemas.js +13 -0
- package/dist/esm/organizations/organization-features.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-members.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-members.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-notifications.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-notifications.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-notifications.shared.schemas.js +22 -1
- package/dist/esm/organizations/organization-notifications.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-preferences.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-preferences.shared.schemas.d.ts +26 -0
- package/dist/esm/organizations/organization-preferences.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-preferences.shared.schemas.js +25 -0
- package/dist/esm/organizations/organization-preferences.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-profile.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-profile.shared.schemas.d.ts +25 -0
- package/dist/esm/organizations/organization-profile.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-profile.shared.schemas.js +42 -17
- package/dist/esm/organizations/organization-profile.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-unit-inheritance.shared.d.ts.map +1 -1
- package/dist/esm/organizations/organization-unit-members.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-unit-members.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-unit-narrowing-decision.shared.d.ts.map +1 -1
- package/dist/esm/organizations/organization-unit-narrowing.example.d.ts.map +1 -1
- package/dist/esm/organizations/organization-unit-narrowing.shared.d.ts +3 -2
- package/dist/esm/organizations/organization-unit-narrowing.shared.d.ts.map +1 -1
- package/dist/esm/organizations/organization-unit-narrowing.shared.js +9 -2
- package/dist/esm/organizations/organization-unit-narrowing.shared.js.map +1 -1
- package/dist/esm/organizations/organization-units.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-units.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organizations.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organizations.shared.resources-config.schemas.js +18 -3
- package/dist/esm/organizations/organizations.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organizations.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/tenant-teardown-config.shared.schemas.d.ts +13 -0
- package/dist/esm/organizations/tenant-teardown-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/tenant-teardown-config.shared.schemas.js +13 -0
- package/dist/esm/organizations/tenant-teardown-config.shared.schemas.js.map +1 -1
- package/dist/esm/provider-registration-runtime.exports.d.ts.map +1 -1
- package/dist/esm/public-runtime/index.d.ts +71 -2
- package/dist/esm/public-runtime/index.d.ts.map +1 -1
- package/dist/esm/public-runtime/index.js +62 -1
- package/dist/esm/public-runtime/index.js.map +1 -1
- package/dist/esm/queue/jobs.shared.resources-config.schemas.d.ts +6 -5
- package/dist/esm/queue/jobs.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/queue/jobs.shared.resources-config.schemas.js +6 -5
- package/dist/esm/queue/jobs.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/queue/jobs.shared.schemas.d.ts +16 -3
- package/dist/esm/queue/jobs.shared.schemas.d.ts.map +1 -1
- package/dist/esm/queue/jobs.shared.schemas.js +16 -3
- package/dist/esm/queue/jobs.shared.schemas.js.map +1 -1
- package/dist/esm/queue/jobs.shared.utils.d.ts.map +1 -1
- package/dist/esm/queue/queues.shared.schemas.d.ts.map +1 -1
- package/dist/esm/queue/queues.shared.utils.d.ts.map +1 -1
- package/dist/esm/requests/manual-controllers-routes-documentation.d.ts +137 -0
- package/dist/esm/requests/manual-controllers-routes-documentation.d.ts.map +1 -0
- package/dist/esm/requests/manual-controllers-routes-documentation.js +1255 -0
- package/dist/esm/requests/manual-controllers-routes-documentation.js.map +1 -0
- package/dist/esm/requests/manual-controllers-routes-urls.d.ts +114 -0
- package/dist/esm/requests/manual-controllers-routes-urls.d.ts.map +1 -1
- package/dist/esm/requests/manual-controllers-routes-urls.js +129 -0
- package/dist/esm/requests/manual-controllers-routes-urls.js.map +1 -1
- package/dist/esm/requests/rate-limits.shared.schemas.d.ts +11 -1
- package/dist/esm/requests/rate-limits.shared.schemas.d.ts.map +1 -1
- package/dist/esm/requests/rate-limits.shared.schemas.js +11 -1
- package/dist/esm/requests/rate-limits.shared.schemas.js.map +1 -1
- package/dist/esm/requests/websocket.shared.schemas.d.ts +28 -3
- package/dist/esm/requests/websocket.shared.schemas.d.ts.map +1 -1
- package/dist/esm/requests/websocket.shared.schemas.js +52 -0
- package/dist/esm/requests/websocket.shared.schemas.js.map +1 -1
- package/dist/esm/resources/child-operations.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/context-policy.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/relationship-display.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/resources-config.shared.factory.d.ts +1 -0
- package/dist/esm/resources/resources-config.shared.factory.d.ts.map +1 -1
- package/dist/esm/resources/resources-config.shared.factory.js +203 -25
- package/dist/esm/resources/resources-config.shared.factory.js.map +1 -1
- package/dist/esm/resources/resources-config.shared.schemas.d.ts +297 -68
- package/dist/esm/resources/resources-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/resources-config.shared.schemas.js.map +1 -1
- package/dist/esm/resources/resources-registry.shared.core.definitions.d.ts.map +1 -1
- package/dist/esm/resources/resources-registry.shared.core.definitions.js +151 -5
- package/dist/esm/resources/resources-registry.shared.core.definitions.js.map +1 -1
- package/dist/esm/resources/resources-relationships.shared.factory.d.ts.map +1 -1
- package/dist/esm/resources/resources-relationships.shared.factory.js +15 -0
- package/dist/esm/resources/resources-relationships.shared.factory.js.map +1 -1
- package/dist/esm/resources/resources-serialization.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/resources.shared.core.definitions.d.ts +54 -0
- package/dist/esm/resources/resources.shared.core.definitions.d.ts.map +1 -1
- package/dist/esm/resources/resources.shared.core.definitions.js +69 -0
- package/dist/esm/resources/resources.shared.core.definitions.js.map +1 -1
- package/dist/esm/resources/resources.shared.schemas.d.ts +11 -2
- package/dist/esm/resources/resources.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/resources.shared.schemas.js +34 -3
- package/dist/esm/resources/resources.shared.schemas.js.map +1 -1
- package/dist/esm/resources/resources.shared.utils.d.ts +32 -7
- package/dist/esm/resources/resources.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/resources.shared.utils.js +32 -7
- package/dist/esm/resources/resources.shared.utils.js.map +1 -1
- package/dist/esm/resources/utils/collection-export.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/composition-cascade-deletability.validation.d.ts.map +1 -1
- package/dist/esm/resources/utils/composition-seedability.validation.d.ts.map +1 -1
- package/dist/esm/resources/utils/context-addressed-composition-singleton.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/duplicate-relationship-registration.validation.d.ts.map +1 -1
- package/dist/esm/resources/utils/field-value-disclosure.utils.d.ts +51 -0
- package/dist/esm/resources/utils/field-value-disclosure.utils.d.ts.map +1 -0
- package/dist/esm/resources/utils/field-value-disclosure.utils.js +53 -0
- package/dist/esm/resources/utils/field-value-disclosure.utils.js.map +1 -0
- package/dist/esm/resources/utils/persistence-adapter-discrimination.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/repository-dto-builder.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/required-fk-fillability.validation.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-operation-type-guards.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.factory.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.relationships.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.schemas.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-subtree.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-context-needs.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.dtos-builder.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.path.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.urls-builder.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-serialization.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-summary.utils.d.ts +16 -2
- package/dist/esm/resources/utils/resources-summary.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-summary.utils.js +19 -5
- package/dist/esm/resources/utils/resources-summary.utils.js.map +1 -1
- package/dist/esm/resources/utils/schema-family-builder.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/schema-type-inference.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/schema-type-utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/schema-variant-resolver.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/shared-persistence-collection.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/shared-persistence-collection.utils.js +11 -0
- package/dist/esm/resources/utils/shared-persistence-collection.utils.js.map +1 -1
- package/dist/esm/resources/utils/templatable-file-fields.shared.utils.d.ts.map +1 -1
- package/dist/esm/runtime/domain-module.shared.definitions.d.ts +25 -0
- package/dist/esm/runtime/domain-module.shared.definitions.d.ts.map +1 -1
- package/dist/esm/runtime/domain-module.shared.definitions.js.map +1 -1
- package/dist/esm/runtime/execution-context.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-keys-application.shared.resources-config.schemas.d.ts +1 -0
- package/dist/esm/security/api-keys/api-keys-application.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-keys-application.shared.resources-config.schemas.js +38 -0
- package/dist/esm/security/api-keys/api-keys-application.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/api-keys/api-keys-organization.shared.resources-config.schemas.d.ts +1 -0
- package/dist/esm/security/api-keys/api-keys-organization.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-keys-organization.shared.resources-config.schemas.js +38 -0
- package/dist/esm/security/api-keys/api-keys-organization.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/api-keys/api-keys.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/anonymous-session/anonymous-session.shared.contract.d.ts.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.dto.schemas.d.ts +5 -12
- package/dist/esm/security/authentications/authentication.shared.dto.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.dto.schemas.js +0 -1
- package/dist/esm/security/authentications/authentication.shared.dto.schemas.js.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.schemas.d.ts +84 -5
- package/dist/esm/security/authentications/authentication.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.schemas.js +83 -3
- package/dist/esm/security/authentications/authentication.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/consumable-token.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/consumable-token.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/cross-frontend-handoff.shared.dto.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/password-reset.shared.dto.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/registration.shared.dto.schemas.d.ts +1 -0
- package/dist/esm/security/authentications/registration.shared.dto.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/registration.shared.dto.schemas.js +11 -0
- package/dist/esm/security/authentications/registration.shared.dto.schemas.js.map +1 -1
- package/dist/esm/security/authentications/scim/scim-organization-unit-mapping.shared.d.ts.map +1 -1
- package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.schemas.d.ts +15 -0
- package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.schemas.js +21 -4
- package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/scim/scim-tokens.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/scim/scim-tokens.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-reliability-contract.shared.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-reliability-contract.shared.js.map +1 -1
- package/dist/esm/security/authentications/siem/siem-export-config.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-export-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/sso/sso-config.shared.resources-config.schemas.d.ts +61 -1
- package/dist/esm/security/authentications/sso/sso-config.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/sso/sso-config.shared.resources-config.schemas.js +238 -6
- package/dist/esm/security/authentications/sso/sso-config.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/sso/sso-config.shared.schemas.d.ts +37 -27
- package/dist/esm/security/authentications/sso/sso-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/sso/sso-config.shared.schemas.js +134 -12
- package/dist/esm/security/authentications/sso/sso-config.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/sso/sso-connection.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/sso/sso-connection.shared.schemas.d.ts +2 -6
- package/dist/esm/security/authentications/sso/sso-connection.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/sso/sso-connection.shared.schemas.js +32 -8
- package/dist/esm/security/authentications/sso/sso-connection.shared.schemas.js.map +1 -1
- package/dist/esm/security/authorizations/administrative-continuity.shared.schemas.d.ts +45 -2
- package/dist/esm/security/authorizations/administrative-continuity.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authorizations/administrative-continuity.shared.schemas.js +45 -2
- package/dist/esm/security/authorizations/administrative-continuity.shared.schemas.js.map +1 -1
- package/dist/esm/security/authorizations/application-access-grants.shared.resources-config.schemas.d.ts +35 -0
- package/dist/esm/security/authorizations/application-access-grants.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/security/authorizations/application-access-grants.shared.resources-config.schemas.js +257 -0
- package/dist/esm/security/authorizations/application-access-grants.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/security/authorizations/application-access-grants.shared.schemas.d.ts +143 -0
- package/dist/esm/security/authorizations/application-access-grants.shared.schemas.d.ts.map +1 -0
- package/dist/esm/security/authorizations/application-access-grants.shared.schemas.js +219 -0
- package/dist/esm/security/authorizations/application-access-grants.shared.schemas.js.map +1 -0
- package/dist/esm/security/authorizations/platform-access-grants.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grants.shared.resources-config.schemas.js +27 -0
- package/dist/esm/security/authorizations/platform-access-grants.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grants.shared.schemas.d.ts +75 -7
- package/dist/esm/security/authorizations/platform-access-grants.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grants.shared.schemas.js +69 -8
- package/dist/esm/security/authorizations/platform-access-grants.shared.schemas.js.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.defaults.d.ts.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.utils.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/provider-credentials-organization.shared.resources-config.schemas.d.ts +31 -0
- package/dist/esm/security/connected-accounts/provider-credentials-organization.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/provider-credentials-organization.shared.resources-config.schemas.js +198 -0
- package/dist/esm/security/connected-accounts/provider-credentials-organization.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/security/connected-accounts/provider-credentials-user.shared.resources-config.schemas.d.ts +31 -0
- package/dist/esm/security/connected-accounts/provider-credentials-user.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/provider-credentials-user.shared.resources-config.schemas.js +191 -0
- package/dist/esm/security/connected-accounts/provider-credentials-user.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/security/connected-accounts/provider-credentials.shared.schemas.d.ts +307 -0
- package/dist/esm/security/connected-accounts/provider-credentials.shared.schemas.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/provider-credentials.shared.schemas.js +530 -0
- package/dist/esm/security/connected-accounts/provider-credentials.shared.schemas.js.map +1 -0
- package/dist/esm/security/oauth-clients/oauth-clients-application.shared.resources-config.schemas.d.ts +4 -1
- package/dist/esm/security/oauth-clients/oauth-clients-application.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients-application.shared.resources-config.schemas.js +29 -0
- package/dist/esm/security/oauth-clients/oauth-clients-application.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients-organization.shared.resources-config.schemas.d.ts +4 -1
- package/dist/esm/security/oauth-clients/oauth-clients-organization.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients-organization.shared.resources-config.schemas.js +29 -0
- package/dist/esm/security/oauth-clients/oauth-clients-organization.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients.shared.schemas.d.ts +6 -0
- package/dist/esm/security/oauth-clients/oauth-clients.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients.shared.schemas.js +31 -0
- package/dist/esm/security/oauth-clients/oauth-clients.shared.schemas.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.schemas.d.ts +13 -0
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.schemas.js +24 -3
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.schemas.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-resource-server.shared.schemas.d.ts.map +1 -1
- package/dist/esm/testing/resource-config-builders.d.ts.map +1 -1
- package/dist/esm/testing.d.ts.map +1 -1
- package/dist/esm/users/anonymous-user-marketing-metadata.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/anonymous-users.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/anonymous-users.shared.schema.d.ts.map +1 -1
- package/dist/esm/users/inbound-contacts.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/inbound-contacts.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-credentials.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-credentials.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-identity-links.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-identity-links.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-preferences-reset.shared.utils.d.ts.map +1 -1
- package/dist/esm/users/user-preferences.shared.resources-config.schemas.d.ts +4 -4
- package/dist/esm/users/user-preferences.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-profiles.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-self-preferences.shared.resources-config.schemas.d.ts +4 -4
- package/dist/esm/users/user-self-preferences.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-self-profiles.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-self.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-self.shared.resources-config.schemas.js +33 -3
- package/dist/esm/users/user-self.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/users.shared.resources-config.schemas.d.ts +17 -1
- package/dist/esm/users/users.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/users.shared.resources-config.schemas.js +136 -5
- package/dist/esm/users/users.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/users.shared.schemas.d.ts +60 -13
- package/dist/esm/users/users.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/users.shared.schemas.js +56 -9
- package/dist/esm/users/users.shared.schemas.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization-notifications.shared.schemas.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"organization-notifications.shared.schemas.js","sourceRoot":"","sources":["../../../src/organizations/organization-notifications.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3D;;;;;;;;;;;;;;;;;OAiBG;IACH,mBAAmB,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,cAAc,EAAE;IAC1D,cAAc,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;IACpC,eAAe,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;IACrC,qBAAqB,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;IAC3C,sBAAsB,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;IAE5C;;;OAGG;IACH,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACzC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACnC,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CAC3C,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC;IACtD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,cAAc,EAAE;IACtD,6EAA6E;IAC7E,iFAAiF;IACjF,gFAAgF;IAChF,eAAe;IACf,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,CAAC,cAAc,EAAE,CAAC,iBAAiB,EAAE;IAE9G,6FAA6F;IAC7F,4EAA4E;IAC5E,+EAA+E;IAC/E,0EAA0E;IAC1E,kDAAkD;IAClD,kBAAkB,EAAE,oCAAoC;SACrD,OAAO,CAAC,oCAAoC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;SACvD,cAAc,EAAE;IAEnB,eAAe;IACf,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,iBAAiB,EAAE,CAAC,iBAAiB,EAAE;IACnG,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,iBAAiB,EAAE,CAAC,iBAAiB,EAAE;CACpG,CAAC,CAAC","sourcesContent":["/**\n * Organization Notifications Shared Schemas\n * \n * Notification preferences and settings.\n * Separated from core organization for performance optimization.\n */\n\nimport { z } from 'zod';\n\n/**\n * Per-category notification routing block for an organization.\n *\n * Every interior field is optional (the routing addresses) or carries a\n * `.default(...)` (the category opt-in booleans), so the object is fully\n * materializable from `{}`. Extracted as a named schema so\n * {@link OrganizationNotificationsSchema} can default it via the Zod-4-safe\n * `Schema.default(Schema.parse({}))` idiom — see the `emailNotifications` field.\n */\nexport const OrganizationEmailNotificationsSchema = z.object({\n /**\n * Where a tenant's organization-flavoured email goes, and whether it goes at all. READ by the\n * notification dispatcher since 2026-09-08 (#410).\n *\n * It was read by NOTHING before that. The record was seeded by apps-manager at provisioning,\n * rendered and edited through the organizations preset and audited, while organization-targeted\n * notifications resolved to member user ids by role and went to each member's own address — so a\n * tenant that filled this screen in changed nothing.\n *\n * The category a notification belongs to is DERIVED from its target: the notification-target\n * vocabulary and these four categories line up one-for-one, so a per-notification declaration\n * would only be a place for the two to disagree. `ORGANIZATION_USERS` is deliberately outside the\n * mapping — it fans out to every member by design, and routing it to one address would change who\n * the message is FOR rather than where it lands.\n *\n * An address REPLACES the member fan-out rather than adding to it: a tenant routing security mail\n * to a SOC address is saying where it goes, not asking for a copy.\n */\n defaultEmailAddress: z.email().optional().isSummaryField(),\n billingAddress: z.email().optional(),\n securityAddress: z.email().optional(),\n administrativeAddress: z.email().optional(),\n usersManagementAddress: z.email().optional(),\n\n /**\n * Category opt-ins. A `false` SUPPRESSES that category entirely — for the members too, not only\n * for the routing address — because a tenant turning billing notifications off means it.\n */\n billing: z.boolean().default(true),\n administrative: z.boolean().default(true),\n security: z.boolean().default(true),\n usersManagement: z.boolean().default(true),\n});\nexport type OrganizationEmailNotifications = z.infer<typeof OrganizationEmailNotificationsSchema>;\n\nexport const OrganizationNotificationsSchema = z.object({\n _id: z.string().min(1).isPrimaryKey().isSummaryField(),\n // `.isUnique()` = idempotency backstop for onParentCreate seeding: the eager\n // `createAsSystem` seed on ORGANIZATIONS create writes one notifications row per\n // org; the unique index makes a re-fire (retry / replay) fail-closed instead of\n // duplicating.\n organizationId: z.string().min(1).isDBIndexed().isUnique().isForeignKey().isSummaryField().excludeFromUpdate(),\n\n // Email notification preferences. `.default(OrganizationEmailNotificationsSchema.parse({}))`\n // makes the block materialize to its interior defaults when omitted, so the\n // resource is default-seedable from its CREATE DTO + parent FK alone (required\n // by the onParentCreate lifecycle guard). The output type keeps the block\n // required, so downstream readers are unaffected.\n emailNotifications: OrganizationEmailNotificationsSchema\n .default(OrganizationEmailNotificationsSchema.parse({}))\n .isSummaryField(),\n\n // Audit fields\n createdAt: z.date().default(() => new Date()).isDBIndexed().excludeFromCreate().excludeFromUpdate(),\n updatedAt: z.date().default(() => new Date()).isDBIndexed().excludeFromCreate().excludeFromUpdate()\n});\nexport type OrganizationNotifications = z.infer<typeof OrganizationNotificationsSchema>;\n\n"]}
|
package/dist/esm/organizations/organization-preferences.shared.resources-config.schemas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization-preferences.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"organization-preferences.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["../../../src/organizations/organization-preferences.shared.resources-config.schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAoD,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAU/H,KAAK,qCAAqC,GACtC,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,CAAC;AAKjC,eAAO,MAAM,kEAAkE,GAAI,wBAAwB,oBAAoB,EAAE;;;;;;;;;;;;;;;;kBAmG/H,CAAC"}
|
|
@@ -31,4 +31,30 @@ export declare const OrganizationPreferencesSchema: z.ZodObject<{
|
|
|
31
31
|
updatedAt: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodDefault<z.ZodDate>>>>;
|
|
32
32
|
}, z.core.$strip>;
|
|
33
33
|
export type OrganizationPreferences = z.infer<typeof OrganizationPreferencesSchema>;
|
|
34
|
+
/**
|
|
35
|
+
* The tenant's regional answer, as the DEFAULT LAYER beneath a member's own (#410).
|
|
36
|
+
*
|
|
37
|
+
* These four fields sit at the top level of {@link OrganizationPreferencesSchema} because they are
|
|
38
|
+
* the organization's own settings, not a sub-record; this is a derived VIEW of them, so the two can
|
|
39
|
+
* never drift. It exists because the frontend needs to carry exactly this much of the tenant's
|
|
40
|
+
* preferences record to `I18nContext` — sending the whole record would put `_id`, audit fields and
|
|
41
|
+
* the member-email-override policy on an event that has no use for any of them.
|
|
42
|
+
*
|
|
43
|
+
* The resolution `I18nContext` performs is: the member's own value, then this, then the framework
|
|
44
|
+
* fallback. A member's explicit choice always wins — that is why
|
|
45
|
+
* {@link UserPreferences_RegionalSchema}'s four fields are optional, so "the member expressed
|
|
46
|
+
* nothing" is representable at all.
|
|
47
|
+
*
|
|
48
|
+
* Unlike the member's block, these fields keep their defaults, and that is correct rather than an
|
|
49
|
+
* oversight: the organization record is seeded at provisioning and always exists, so its values ARE
|
|
50
|
+
* the tenant's answer. A tenant that has edited nothing answers with the same four values the
|
|
51
|
+
* framework would have used, which makes the layer a no-op for it — exactly as it should be.
|
|
52
|
+
*/
|
|
53
|
+
export declare const OrganizationRegionalPreferencesSchema: z.ZodObject<{
|
|
54
|
+
timezone: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodDefault<z.ZodUnion<[z.ZodEnum<typeof import("@wildo-ai/presets-components-models").CommonTimezone>, z.ZodString]>>>>;
|
|
55
|
+
dateFormat: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodDefault<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof DateFormat>>>>;
|
|
56
|
+
timeFormat: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodDefault<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof TimeFormat>>>>;
|
|
57
|
+
locale: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodDefault<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodEnum<typeof AvailableLanguage>>>>>;
|
|
58
|
+
}, z.core.$strip>;
|
|
59
|
+
export type OrganizationRegionalPreferences = z.infer<typeof OrganizationRegionalPreferencesSchema>;
|
|
34
60
|
//# sourceMappingURL=organization-preferences.shared.schemas.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization-preferences.shared.schemas.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"organization-preferences.shared.schemas.d.ts","sourceRoot":"","sources":["../../../src/organizations/organization-preferences.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAkB,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAEhH,eAAO,MAAM,qCAAqC;;;;;iBAKhD,CAAC;AACH,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qCAAqC,CAAC,CAAC;AAEpG,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;iBA+BxC,CAAC;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,qCAAqC;;;;;iBAKhD,CAAC;AACH,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qCAAqC,CAAC,CAAC"}
|
|
@@ -40,4 +40,29 @@ export const OrganizationPreferencesSchema = z.object({
|
|
|
40
40
|
createdAt: z.date().default(() => new Date()).isDBIndexed().excludeFromCreate().excludeFromUpdate(),
|
|
41
41
|
updatedAt: z.date().default(() => new Date()).isDBIndexed().excludeFromCreate().excludeFromUpdate()
|
|
42
42
|
});
|
|
43
|
+
/**
|
|
44
|
+
* The tenant's regional answer, as the DEFAULT LAYER beneath a member's own (#410).
|
|
45
|
+
*
|
|
46
|
+
* These four fields sit at the top level of {@link OrganizationPreferencesSchema} because they are
|
|
47
|
+
* the organization's own settings, not a sub-record; this is a derived VIEW of them, so the two can
|
|
48
|
+
* never drift. It exists because the frontend needs to carry exactly this much of the tenant's
|
|
49
|
+
* preferences record to `I18nContext` — sending the whole record would put `_id`, audit fields and
|
|
50
|
+
* the member-email-override policy on an event that has no use for any of them.
|
|
51
|
+
*
|
|
52
|
+
* The resolution `I18nContext` performs is: the member's own value, then this, then the framework
|
|
53
|
+
* fallback. A member's explicit choice always wins — that is why
|
|
54
|
+
* {@link UserPreferences_RegionalSchema}'s four fields are optional, so "the member expressed
|
|
55
|
+
* nothing" is representable at all.
|
|
56
|
+
*
|
|
57
|
+
* Unlike the member's block, these fields keep their defaults, and that is correct rather than an
|
|
58
|
+
* oversight: the organization record is seeded at provisioning and always exists, so its values ARE
|
|
59
|
+
* the tenant's answer. A tenant that has edited nothing answers with the same four values the
|
|
60
|
+
* framework would have used, which makes the layer a no-op for it — exactly as it should be.
|
|
61
|
+
*/
|
|
62
|
+
export const OrganizationRegionalPreferencesSchema = OrganizationPreferencesSchema.pick({
|
|
63
|
+
timezone: true,
|
|
64
|
+
locale: true,
|
|
65
|
+
dateFormat: true,
|
|
66
|
+
timeFormat: true,
|
|
67
|
+
});
|
|
43
68
|
//# sourceMappingURL=organization-preferences.shared.schemas.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization-preferences.shared.schemas.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"organization-preferences.shared.schemas.js","sourceRoot":"","sources":["../../../src/organizations/organization-preferences.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAEhH,MAAM,CAAC,MAAM,qCAAqC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5D,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE;IACzH,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACtH,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5C,oBAAoB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACjD,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,cAAc,EAAE;IACtD,6EAA6E;IAC7E,+EAA+E;IAC/E,gFAAgF;IAChF,eAAe;IACf,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,CAAC,cAAc,EAAE,CAAC,iBAAiB,EAAE;IAE9G,oBAAoB;IACpB,wEAAwE;IACxE,iEAAiE;IACjE,0EAA0E;IAC1E,gFAAgF;IAChF,iFAAiF;IACjF,sEAAsE;IACtE,2DAA2D;IAC3D,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,cAAc,EAAE;IACtE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,cAAc,EAAE;IAC9H,gFAAgF;IAChF,4DAA4D;IAC5D,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE;IACxG,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE;IAE1G,uBAAuB;IACvB,mBAAmB,EAAE,qCAAqC,CAAC,OAAO,CAAC,qCAAqC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE;IAEpI,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;IAEjE,eAAe;IACf,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,iBAAiB,EAAE,CAAC,iBAAiB,EAAE;IACnG,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,iBAAiB,EAAE,CAAC,iBAAiB,EAAE;CACpG,CAAC,CAAC;AAGH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,qCAAqC,GAAG,6BAA6B,CAAC,IAAI,CAAC;IACtF,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,IAAI;IACZ,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;CACjB,CAAC,CAAC","sourcesContent":["/**\n * Organization Preferences Shared Schemas\n * \n * Localization, regional settings, and application preferences.\n * Separated from core organization for performance optimization.\n */\n\nimport { z } from 'zod';\nimport { AvailableLanguage, TimeFormat, TimezoneSchema, DateFormat } from '@wildo-ai/presets-components-models';\n\nexport const OrganizationLanguagePreferencesSchema = z.object({\n primaryLanguage: z.enum(AvailableLanguage).systemEnum('AvailableLanguage').default(AvailableLanguage.EN).isSummaryField(),\n supportedLanguages: z.array(z.enum(AvailableLanguage).systemEnum('AvailableLanguage')).default([AvailableLanguage.EN]),\n allowUserOverride: z.boolean().default(true),\n enforceForAllMembers: z.boolean().default(false)\n});\nexport type OrganizationLanguagePreferences = z.infer<typeof OrganizationLanguagePreferencesSchema>;\n\nexport const OrganizationPreferencesSchema = z.object({\n _id: z.string().min(1).isPrimaryKey().isSummaryField(),\n // `.isUnique()` = idempotency backstop for onParentCreate seeding: the eager\n // `createAsSystem` seed on ORGANIZATIONS create writes one preferences row per\n // org; the unique index makes a re-fire (retry / replay) fail-closed instead of\n // duplicating.\n organizationId: z.string().min(1).isDBIndexed().isUnique().isForeignKey().isSummaryField().excludeFromUpdate(),\n \n // Regional settings\n // Default 'UTC' (a valid `CommonTimezone`), NOT 'US_SHORT' — that was a\n // `DateFormat` value mistakenly used here. `TimezoneSchema` is a\n // `union([enum(CommonTimezone), string])`, so Zod accepted the bad string\n // (the onParentCreate boot-guard probe passed), but the Mongoose model enforces\n // the enum and rejected 'US_SHORT' at seed time → the org preferences row failed\n // to eager-seed. Mirrors the USER preferences `timezone` default. See\n // composition-oncreate-lifecycle plan (W3 runtime-verify).\n timezone: TimezoneSchema.default('UTC').isDBIndexed().isSummaryField(),\n locale: z.enum(AvailableLanguage).systemEnum('AvailableLanguage').default(AvailableLanguage.EN).isDBIndexed().isSummaryField(),\n // LOCALE_DEFAULT (not ISO_8601): mirrors the USER preferences default — see the\n // rationale on `UserPreferences_RegionalSchema.dateFormat`.\n dateFormat: z.enum(DateFormat).systemEnum('DateFormat').default(DateFormat.LOCALE_DEFAULT).isDBIndexed(),\n timeFormat: z.enum(TimeFormat).systemEnum('TimeFormat').default(TimeFormat.TWENTY_FOUR_HOUR).isDBIndexed(),\n \n // Language preferences\n languagePreferences: OrganizationLanguagePreferencesSchema.default(OrganizationLanguagePreferencesSchema.parse({})).isSummaryField(),\n \n allowMemberEmailOverride: z.boolean().default(true).isDBIndexed(),\n \n // Audit fields\n createdAt: z.date().default(() => new Date()).isDBIndexed().excludeFromCreate().excludeFromUpdate(),\n updatedAt: z.date().default(() => new Date()).isDBIndexed().excludeFromCreate().excludeFromUpdate()\n});\nexport type OrganizationPreferences = z.infer<typeof OrganizationPreferencesSchema>;\n\n/**\n * The tenant's regional answer, as the DEFAULT LAYER beneath a member's own (#410).\n *\n * These four fields sit at the top level of {@link OrganizationPreferencesSchema} because they are\n * the organization's own settings, not a sub-record; this is a derived VIEW of them, so the two can\n * never drift. It exists because the frontend needs to carry exactly this much of the tenant's\n * preferences record to `I18nContext` — sending the whole record would put `_id`, audit fields and\n * the member-email-override policy on an event that has no use for any of them.\n *\n * The resolution `I18nContext` performs is: the member's own value, then this, then the framework\n * fallback. A member's explicit choice always wins — that is why\n * {@link UserPreferences_RegionalSchema}'s four fields are optional, so \"the member expressed\n * nothing\" is representable at all.\n *\n * Unlike the member's block, these fields keep their defaults, and that is correct rather than an\n * oversight: the organization record is seeded at provisioning and always exists, so its values ARE\n * the tenant's answer. A tenant that has edited nothing answers with the same four values the\n * framework would have used, which makes the layer a no-op for it — exactly as it should be.\n */\nexport const OrganizationRegionalPreferencesSchema = OrganizationPreferencesSchema.pick({\n timezone: true,\n locale: true,\n dateFormat: true,\n timeFormat: true,\n});\nexport type OrganizationRegionalPreferences = z.infer<typeof OrganizationRegionalPreferencesSchema>;\n"]}
|
package/dist/esm/organizations/organization-profile.shared.resources-config.schemas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization-profile.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"organization-profile.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["../../../src/organizations/organization-profile.shared.resources-config.schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAoD,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAW/H,oBAAY,8BAA8B;IACxC,eAAe,oBAAoB;CACpC;AAED,KAAK,iCAAiC,GAClC,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,CAAC;AAKjC,eAAO,MAAM,8DAA8D,GAAI,wBAAwB,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAgH3H,CAAC"}
|
|
@@ -33,6 +33,31 @@ export declare const OrganizationBrandingSchema: z.ZodObject<{
|
|
|
33
33
|
customDomain: z.ZodOptional<z.ZodString>;
|
|
34
34
|
}, z.core.$strip>;
|
|
35
35
|
export type OrganizationBranding = z.infer<typeof OrganizationBrandingSchema>;
|
|
36
|
+
/**
|
|
37
|
+
* What a tenant's own sign-in screen should show: the ORGANIZATION's branding when it declared any,
|
|
38
|
+
* otherwise the application's (#410).
|
|
39
|
+
*
|
|
40
|
+
* Per field, not per record — a tenant that uploaded a logo and never picked a colour keeps the
|
|
41
|
+
* application's colour rather than losing it. Resolving the record as a unit would make one
|
|
42
|
+
* expressed field silence the others, which is the same trap the regional-preferences layer had to
|
|
43
|
+
* avoid.
|
|
44
|
+
*
|
|
45
|
+
* A pure function taking the application's ALREADY-RESOLVED values, so it can live beside the schema
|
|
46
|
+
* it resolves without this module knowing anything about brand assets, configuration services or
|
|
47
|
+
* how the application's own logo is chosen. The caller keeps that; this owns only the precedence,
|
|
48
|
+
* which is the part worth having one copy of.
|
|
49
|
+
*
|
|
50
|
+
* `favicon` and `secondaryColor` are deliberately absent: the DTO that carries this to a login
|
|
51
|
+
* screen has no field for either, so resolving them would produce values nothing transports. Adding
|
|
52
|
+
* them is a DTO decision first.
|
|
53
|
+
*/
|
|
54
|
+
export declare function resolveTenantBrandPresentation(branding: OrganizationBranding | null | undefined, applicationBrand: {
|
|
55
|
+
logoUrl?: string;
|
|
56
|
+
primaryColor?: string;
|
|
57
|
+
}): {
|
|
58
|
+
logoUrl?: string;
|
|
59
|
+
primaryColor?: string;
|
|
60
|
+
};
|
|
36
61
|
export declare const OrganizationProfileSchema: z.ZodObject<{
|
|
37
62
|
_id: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>>;
|
|
38
63
|
organizationId: import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<import("@wildo-ai/zod-decorators").DecoratedPrimitiveZodType<z.ZodString>>>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization-profile.shared.schemas.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"organization-profile.shared.schemas.d.ts","sourceRoot":"","sources":["../../../src/organizations/organization-profile.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,oBAAY,gBAAgB;IAC1B,OAAO,YAAY,CAAY,iBAAiB;IAChD,KAAK,UAAU,CAAgB,kBAAkB;IACjD,MAAM,WAAW,CAAc,mBAAmB;IAClD,KAAK,UAAU,CAAgB,qBAAqB;IACpD,UAAU,eAAe;CAC1B;AAED,oBAAY,oBAAoB;IAC9B,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,KAAK,UAAU;IACf,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,KAAK,UAAU;CAChB;AAID,eAAO,MAAM,0BAA0B;;;;;;iBA+BrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,EACjD,gBAAgB,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAK7C;AAED,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAoCpC,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
|
|
@@ -34,24 +34,25 @@ export var OrganizationIndustry;
|
|
|
34
34
|
// Address Schema
|
|
35
35
|
export const OrganizationBrandingSchema = z.object({
|
|
36
36
|
/**
|
|
37
|
-
* Per-org logo (user-authored, absolute URL)
|
|
38
|
-
* brand is the intended default — resolve it from config `brandAssets` via
|
|
39
|
-
* `resolveBrandAsset` / `AppConfigurationService.resolveBrandLogoUrl`.
|
|
37
|
+
* Per-org logo (user-authored, absolute URL), READ by the login screen since 2026-09-08 (#410).
|
|
40
38
|
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* profile is not loaded)
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
* the
|
|
54
|
-
*
|
|
39
|
+
* A tenant that uploads a logo now sees it on its own sign-in page: the identification response
|
|
40
|
+
* resolves this first and falls back to the application's own brand assets. See
|
|
41
|
+
* {@link resolveTenantBrandPresentation}, which owns the precedence.
|
|
42
|
+
*
|
|
43
|
+
* **The audit note this replaces was accurate and its conclusion was wrong**, and the way it went
|
|
44
|
+
* wrong is worth keeping. It read: *"the one place that surfaces an organization's branding logo
|
|
45
|
+
* to a DTO is the auth login response, and it ALREADY applies the app-level default: at
|
|
46
|
+
* identification time only a domain was matched (the org profile is not loaded) … Because the only
|
|
47
|
+
* surfacing seam is already handled, no additional backend fallback seam is introduced here
|
|
48
|
+
* (invented seams are avoided by design)."*
|
|
49
|
+
*
|
|
50
|
+
* Every factual clause held. But "the org profile is not loaded" described what the code DID, not
|
|
51
|
+
* what it could do — the domain lookup resolves `scopeId`, which is the organization id, so the
|
|
52
|
+
* profile was always one read away. Reasoning from the current call graph to "no seam is needed"
|
|
53
|
+
* turned an unfinished implementation into a documented design decision, and it then justified
|
|
54
|
+
* leaving the field inert for as long as anyone read the note. Avoiding invented seams is right;
|
|
55
|
+
* this seam was not invented, it was the one the field exists for.
|
|
55
56
|
*
|
|
56
57
|
* Kept `z.url()` (absolute) because this is direct user input, unlike the
|
|
57
58
|
* backend-populated `logoUrl` output fields (auth-response / email context)
|
|
@@ -63,6 +64,30 @@ export const OrganizationBrandingSchema = z.object({
|
|
|
63
64
|
secondaryColor: ZodTypeForColors.optional(),
|
|
64
65
|
customDomain: z.string().min(1).max(100).optional(),
|
|
65
66
|
});
|
|
67
|
+
/**
|
|
68
|
+
* What a tenant's own sign-in screen should show: the ORGANIZATION's branding when it declared any,
|
|
69
|
+
* otherwise the application's (#410).
|
|
70
|
+
*
|
|
71
|
+
* Per field, not per record — a tenant that uploaded a logo and never picked a colour keeps the
|
|
72
|
+
* application's colour rather than losing it. Resolving the record as a unit would make one
|
|
73
|
+
* expressed field silence the others, which is the same trap the regional-preferences layer had to
|
|
74
|
+
* avoid.
|
|
75
|
+
*
|
|
76
|
+
* A pure function taking the application's ALREADY-RESOLVED values, so it can live beside the schema
|
|
77
|
+
* it resolves without this module knowing anything about brand assets, configuration services or
|
|
78
|
+
* how the application's own logo is chosen. The caller keeps that; this owns only the precedence,
|
|
79
|
+
* which is the part worth having one copy of.
|
|
80
|
+
*
|
|
81
|
+
* `favicon` and `secondaryColor` are deliberately absent: the DTO that carries this to a login
|
|
82
|
+
* screen has no field for either, so resolving them would produce values nothing transports. Adding
|
|
83
|
+
* them is a DTO decision first.
|
|
84
|
+
*/
|
|
85
|
+
export function resolveTenantBrandPresentation(branding, applicationBrand) {
|
|
86
|
+
return {
|
|
87
|
+
logoUrl: branding?.logo ?? applicationBrand.logoUrl,
|
|
88
|
+
primaryColor: branding?.primaryColor ?? applicationBrand.primaryColor,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
66
91
|
export const OrganizationProfileSchema = z.object({
|
|
67
92
|
_id: z.string().min(1).isPrimaryKey().isSummaryField(),
|
|
68
93
|
organizationId: z.string().min(1).isDBIndexed().isForeignKey().isSummaryField().excludeFromUpdate(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization-profile.shared.schemas.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"organization-profile.shared.schemas.js","sourceRoot":"","sources":["../../../src/organizations/organization-profile.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAkB,MAAM,qCAAqC,CAAC;AAErF,oCAAoC;AACpC,MAAM,CAAN,IAAY,gBAMX;AAND,WAAY,gBAAgB;IAC1B,uCAAmB,CAAA;IACnB,mCAAe,CAAA;IACf,qCAAiB,CAAA;IACjB,mCAAe,CAAA;IACf,6CAAyB,CAAA,CAAM,kBAAkB;AACnD,CAAC,EANW,gBAAgB,KAAhB,gBAAgB,QAM3B;AAED,MAAM,CAAN,IAAY,oBAYX;AAZD,WAAY,oBAAoB;IAC9B,iDAAyB,CAAA;IACzB,2CAAmB,CAAA;IACnB,iDAAyB,CAAA;IACzB,+CAAuB,CAAA;IACvB,yCAAiB,CAAA;IACjB,uDAA+B,CAAA;IAC/B,iDAAyB,CAAA;IACzB,uCAAe,CAAA;IACf,iDAAyB,CAAA;IACzB,+CAAuB,CAAA;IACvB,uCAAe,CAAA;AACjB,CAAC,EAZW,oBAAoB,KAApB,oBAAoB,QAY/B;AAED,iBAAiB;AAEjB,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACxB,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC3B,YAAY,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IACzC,cAAc,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IAC3C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACpD,CAAC,CAAC;AAGH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,8BAA8B,CAC5C,QAAiD,EACjD,gBAA6D;IAE7D,OAAO;QACL,OAAO,EAAE,QAAQ,EAAE,IAAI,IAAI,gBAAgB,CAAC,OAAO;QACnD,YAAY,EAAE,QAAQ,EAAE,YAAY,IAAI,gBAAgB,CAAC,YAAY;KACtE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,cAAc,EAAE;IACtD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,CAAC,cAAc,EAAE,CAAC,iBAAiB,EAAE;IAEnG,sBAAsB;IACtB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,cAAc,EAAE;IAC1E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE;IAC3D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAE3C,iBAAiB;IACjB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE;IAC/D,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE;IACvD,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAE5B,WAAW;IACX,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;IAE9D,WAAW;IACX,mFAAmF;IACnF,kFAAkF;IAClF,QAAQ,EAAE,0BAA0B,CAAC,OAAO,CAAC,0BAA0B,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAElF,eAAe;IACf,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QAC5B,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QAC3B,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QAC5B,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KAC3B,CAAC,CAAC,QAAQ,EAAE;IAEb,eAAe;IACf,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,iBAAiB,EAAE,CAAC,iBAAiB,EAAE;IACnG,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,iBAAiB,EAAE,CAAC,iBAAiB,EAAE;CACpG,CAAC,CAAC","sourcesContent":["/**\n * Organization Profile Shared Schemas\n * \n * Company information, branding, and public profile data.\n * Separated from core organization for performance optimization.\n */\n\nimport { z } from 'zod';\nimport { AddressSchema } from '@wildo-ai/presets-components-models';\nimport { ZodTypeForColors } from '@wildo-ai/zod-decorators';\nimport { CommonTimezone, TimezoneSchema } from '@wildo-ai/presets-components-models';\n\n// Organization classification enums\nexport enum OrganizationSize {\n STARTUP = 'STARTUP', // 1-10 employees\n SMALL = 'SMALL', // 11-50 employees\n MEDIUM = 'MEDIUM', // 51-200 employees\n LARGE = 'LARGE', // 201-1000 employees\n ENTERPRISE = 'ENTERPRISE' // 1000+ employees\n}\n\nexport enum OrganizationIndustry {\n TECHNOLOGY = 'TECHNOLOGY',\n FINANCE = 'FINANCE',\n HEALTHCARE = 'HEALTHCARE',\n EDUCATION = 'EDUCATION',\n RETAIL = 'RETAIL',\n MANUFACTURING = 'MANUFACTURING',\n CONSULTING = 'CONSULTING',\n MEDIA = 'MEDIA',\n GOVERNMENT = 'GOVERNMENT',\n NONPROFIT = 'NONPROFIT',\n OTHER = 'OTHER'\n}\n\n// Address Schema\n\nexport const OrganizationBrandingSchema = z.object({\n /**\n * Per-org logo (user-authored, absolute URL), READ by the login screen since 2026-09-08 (#410).\n *\n * A tenant that uploads a logo now sees it on its own sign-in page: the identification response\n * resolves this first and falls back to the application's own brand assets. See\n * {@link resolveTenantBrandPresentation}, which owns the precedence.\n *\n * **The audit note this replaces was accurate and its conclusion was wrong**, and the way it went\n * wrong is worth keeping. It read: *\"the one place that surfaces an organization's branding logo\n * to a DTO is the auth login response, and it ALREADY applies the app-level default: at\n * identification time only a domain was matched (the org profile is not loaded) … Because the only\n * surfacing seam is already handled, no additional backend fallback seam is introduced here\n * (invented seams are avoided by design).\"*\n *\n * Every factual clause held. But \"the org profile is not loaded\" described what the code DID, not\n * what it could do — the domain lookup resolves `scopeId`, which is the organization id, so the\n * profile was always one read away. Reasoning from the current call graph to \"no seam is needed\"\n * turned an unfinished implementation into a documented design decision, and it then justified\n * leaving the field inert for as long as anyone read the note. Avoiding invented seams is right;\n * this seam was not invented, it was the one the field exists for.\n *\n * Kept `z.url()` (absolute) because this is direct user input, unlike the\n * backend-populated `logoUrl` output fields (auth-response / email context)\n * that accept app-relative brand-asset paths.\n */\n logo: z.url().optional(),\n favicon: z.url().optional(),\n primaryColor: ZodTypeForColors.optional(),\n secondaryColor: ZodTypeForColors.optional(),\n customDomain: z.string().min(1).max(100).optional(),\n});\nexport type OrganizationBranding = z.infer<typeof OrganizationBrandingSchema>;\n\n/**\n * What a tenant's own sign-in screen should show: the ORGANIZATION's branding when it declared any,\n * otherwise the application's (#410).\n *\n * Per field, not per record — a tenant that uploaded a logo and never picked a colour keeps the\n * application's colour rather than losing it. Resolving the record as a unit would make one\n * expressed field silence the others, which is the same trap the regional-preferences layer had to\n * avoid.\n *\n * A pure function taking the application's ALREADY-RESOLVED values, so it can live beside the schema\n * it resolves without this module knowing anything about brand assets, configuration services or\n * how the application's own logo is chosen. The caller keeps that; this owns only the precedence,\n * which is the part worth having one copy of.\n *\n * `favicon` and `secondaryColor` are deliberately absent: the DTO that carries this to a login\n * screen has no field for either, so resolving them would produce values nothing transports. Adding\n * them is a DTO decision first.\n */\nexport function resolveTenantBrandPresentation(\n branding: OrganizationBranding | null | undefined,\n applicationBrand: { logoUrl?: string; primaryColor?: string },\n): { logoUrl?: string; primaryColor?: string } {\n return {\n logoUrl: branding?.logo ?? applicationBrand.logoUrl,\n primaryColor: branding?.primaryColor ?? applicationBrand.primaryColor,\n };\n}\n\nexport const OrganizationProfileSchema = z.object({\n _id: z.string().min(1).isPrimaryKey().isSummaryField(),\n organizationId: z.string().min(1).isDBIndexed().isForeignKey().isSummaryField().excludeFromUpdate(),\n \n // Company information\n displayName: z.string().max(100).optional().isDBIndexed().isSummaryField(),\n domain: z.string().min(1).max(100).optional().isDBIndexed(),\n phone: z.string().max(20).optional(),\n website: z.url().optional(),\n description: z.string().max(500).optional(),\n \n // Classification\n industry: z.enum(OrganizationIndustry).optional().isDBIndexed(),\n size: z.enum(OrganizationSize).optional().isDBIndexed(),\n founded: z.date().optional(),\n \n // Location\n address: AddressSchema.optional(),\n timezone: z.string().default(CommonTimezone.UTC).isDBIndexed(),\n \n // Branding\n // `.default(...)` (interior fully optional/defaulted) so the row is eager-seedable\n // via onParentCreate — root-cause fix, consistent with sibling defaulted objects.\n branding: OrganizationBrandingSchema.default(OrganizationBrandingSchema.parse({})),\n \n // Social links\n socialLinks: z.object({\n linkedin: z.url().optional(),\n twitter: z.url().optional(),\n facebook: z.url().optional(),\n github: z.url().optional()\n }).optional(),\n \n // Audit fields\n createdAt: z.date().default(() => new Date()).isDBIndexed().excludeFromCreate().excludeFromUpdate(),\n updatedAt: z.date().default(() => new Date()).isDBIndexed().excludeFromCreate().excludeFromUpdate()\n});\nexport type OrganizationProfile = z.infer<typeof OrganizationProfileSchema>; "]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization-unit-inheritance.shared.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"organization-unit-inheritance.shared.d.ts","sourceRoot":"","sources":["../../../src/organizations/organization-unit-inheritance.shared.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,0CAA0C,EAAE,MAAM,qCAAqC,CAAC;AAGjG;;;;;;;GAOG;AACH,MAAM,MAAM,+BAA+B,GAAG;IAC5C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,0CAA0C,GAAG,IAAI,CAAC;CAC9E,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,8BAA8B,GAAG;IAC3C,wFAAwF;IACxF,QAAQ,CAAC,4BAA4B,EAAE,MAAM,EAAE,CAAC;IAChD,yFAAyF;IACzF,QAAQ,CAAC,4BAA4B,EAAE,MAAM,EAAE,CAAC;CACjD,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,uCAAuC,CAAC,IAAI,EAAE,+BAA+B,GAAG,OAAO,CAEtG;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,6CAA6C,CAC3D,YAAY,EAAE,SAAS,+BAA+B,EAAE,EACxD,iBAAiB,EAAE,SAAS,+BAA+B,EAAE,GAC5D,8BAA8B,CAyBhC;AAED;;;;;GAKG;AACH,wBAAgB,wCAAwC,CACtD,YAAY,EAAE,SAAS,+BAA+B,EAAE,GACvD,OAAO,CAET"}
|
package/dist/esm/organizations/organization-unit-members.shared.resources-config.schemas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization-unit-members.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"organization-unit-members.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["../../../src/organizations/organization-unit-members.shared.resources-config.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAA8B,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAMzG,OAAO,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AAQjF,KAAK,oCAAoC,GACrC,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,CAAC;AAEjC;;;;;;GAMG;AACH,eAAO,MAAM,iEAAiE,GAAI,wBAAwB,oBAAoB,EAAE;;;;;;;;mBA8E9H,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization-unit-members.shared.schemas.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"organization-unit-members.shared.schemas.d.ts","sourceRoot":"","sources":["../../../src/organizations/organization-unit-members.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,4BAA4B;;;;;;;;kBA4CvC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization-unit-narrowing-decision.shared.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"organization-unit-narrowing-decision.shared.d.ts","sourceRoot":"","sources":["../../../src/organizations/organization-unit-narrowing-decision.shared.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAE7F,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,sCAAsC,CAAC;AAGjG,sDAAsD;AACtD,oBAAY,qCAAqC;IAC/C,6FAA6F;IAC7F,YAAY,iBAAiB;IAC7B,2FAA2F;IAC3F,iBAAiB,sBAAsB;IACvC,oFAAoF;IACpF,aAAa,kBAAkB;IAC/B,6EAA6E;IAC7E,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,iCAAiC,GACzC;IAAE,IAAI,EAAE,qCAAqC,CAAC,YAAY,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,qCAAqC,CAAC,iBAAiB,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,qCAAqC,CAAC,aAAa,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,EAAE,CAAA;CAAE,GACnH;IAAE,IAAI,EAAE,qCAAqC,CAAC,MAAM,CAAA;CAAE,CAAC;AAE3D;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,8BAA8B,GAAG;IAC3C,gGAAgG;IAChG,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,8FAA8F;IAC9F,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,4DAA4D;IAC5D,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,iCAAiC,CAAC;IACrD;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,4BAA4B,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3D,CAAC;AAaF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oCAAoC,CAClD,aAAa,EAAE,8BAA8B,GAAG,SAAS,EACzD,aAAa,EAAE,8BAA8B,GAC5C,8BAA8B,CAwBhC;AAED,oGAAoG;AACpG,MAAM,MAAM,qCAAqC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,KAAK,MAAM,EAAE,CAAC;AAc5G;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wCAAwC,CAAC,KAAK,EAAE;IAC9D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,SAAS,yBAAyB,EAAE,GAAG,SAAS,CAAC;IAC1E,QAAQ,CAAC,iBAAiB,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC,CAAC,CAAC;IACpG,QAAQ,CAAC,qBAAqB,EAAE,qCAAqC,CAAC;CACvE,GAAG,iCAAiC,CA6BpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization-unit-narrowing.example.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"organization-unit-narrowing.example.d.ts","sourceRoot":"","sources":["../../../src/organizations/organization-unit-narrowing.example.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,sCAAsC,CAAC;AAEjG;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gCAAgC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAG3G,CAAC;AACF,8EAA8E"}
|
|
@@ -44,7 +44,9 @@ export type OrganizationUnitNarrowingDeclaration = {
|
|
|
44
44
|
};
|
|
45
45
|
/** @wildo_source:part:end saas.models.organization-unit-narrowing-declaration */
|
|
46
46
|
/**
|
|
47
|
-
*
|
|
47
|
+
* @wildo_source:part:start saas.models.organization-unit-narrowing-containment facet:layer:shared facet:family:authorization facet:audience:app-developer
|
|
48
|
+
*
|
|
49
|
+
* Resources that may NEVER be unit-narrowable — the authorization plane.
|
|
48
50
|
*
|
|
49
51
|
* ## The loop this closes
|
|
50
52
|
*
|
|
@@ -87,7 +89,6 @@ export type OrganizationUnitNarrowingDeclaration = {
|
|
|
87
89
|
* its own units, so there is no honest `unitFieldName` to declare. Listing it turns a declaration
|
|
88
90
|
* that could never be correct into a boot failure instead of a silent authorization hole.
|
|
89
91
|
*/
|
|
90
|
-
/** @wildo_source:part:start saas.models.organization-unit-narrowing-containment facet:layer:shared facet:family:authorization */
|
|
91
92
|
export declare const ORGANIZATION_UNIT_NARROWING_FORBIDDEN_RESOURCES: readonly CoreResourceType[];
|
|
92
93
|
/** @wildo_source:part:end saas.models.organization-unit-narrowing-containment */
|
|
93
94
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization-unit-narrowing.shared.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"organization-unit-narrowing.shared.d.ts","sourceRoot":"","sources":["../../../src/organizations/organization-unit-narrowing.shared.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAElF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,MAAM,oCAAoC,GAAG;IACjD,4EAA4E;IAC5E,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,CAAC;AACF,iFAAiF;AAEjF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,eAAO,MAAM,+CAA+C,EAAE,SAAS,gBAAgB,EAetF,CAAC;AACF,iFAAiF;AAEjF;;;;;;;GAOG;AACH,eAAO,MAAM,kCAAkC,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,oCAAoC,CAAC,CAAC,CAAM,CAAC;AAExI;;;;;;;;;;;;GAYG;AACH,wBAAgB,0CAA0C,CACxD,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC,CAAC,EACxF,oBAAoB,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC,CAAC,GAAG,SAAS,GACxG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC,CAAC,CAEzE;AAED,6DAA6D;AAC7D,MAAM,MAAM,kCAAkC,GAAG;IAC/C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,wDAAwD,GAAG,yBAAyB,CAAC;CACvG,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,0CAA0C,CACxD,iBAAiB,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC,CAAC,GACzF,kCAAkC,EAAE,CAgBtC;AAED;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,iBAAiB,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC,CAAC,EAC1F,YAAY,EAAE,MAAM,GACnB,oCAAoC,GAAG,SAAS,CAKlD"}
|
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
import { CoreResourceType } from '../resources/resources.shared.core.definitions.js';
|
|
13
13
|
/** @wildo_source:part:end saas.models.organization-unit-narrowing-declaration */
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* @wildo_source:part:start saas.models.organization-unit-narrowing-containment facet:layer:shared facet:family:authorization facet:audience:app-developer
|
|
16
|
+
*
|
|
17
|
+
* Resources that may NEVER be unit-narrowable — the authorization plane.
|
|
16
18
|
*
|
|
17
19
|
* ## The loop this closes
|
|
18
20
|
*
|
|
@@ -55,7 +57,6 @@ import { CoreResourceType } from '../resources/resources.shared.core.definitions
|
|
|
55
57
|
* its own units, so there is no honest `unitFieldName` to declare. Listing it turns a declaration
|
|
56
58
|
* that could never be correct into a boot failure instead of a silent authorization hole.
|
|
57
59
|
*/
|
|
58
|
-
/** @wildo_source:part:start saas.models.organization-unit-narrowing-containment facet:layer:shared facet:family:authorization */
|
|
59
60
|
export const ORGANIZATION_UNIT_NARROWING_FORBIDDEN_RESOURCES = [
|
|
60
61
|
CoreResourceType.ORGANIZATION_UNIT_MEMBERS,
|
|
61
62
|
CoreResourceType.ORGANIZATION_MEMBERS,
|
|
@@ -65,6 +66,12 @@ export const ORGANIZATION_UNIT_NARROWING_FORBIDDEN_RESOURCES = [
|
|
|
65
66
|
CoreResourceType.ORGANIZATIONS,
|
|
66
67
|
CoreResourceType.ORG_API_KEYS,
|
|
67
68
|
CoreResourceType.OAUTH_CLIENTS_ORGANIZATION,
|
|
69
|
+
// A credential authenticates the WHOLE TENANT toward a third party — there is one Slack workspace
|
|
70
|
+
// behind it, not one per division. Narrowing it to a unit would let a unit-scoped administrator
|
|
71
|
+
// rotate or delete the credential every other unit spends, which is the same issues-authority
|
|
72
|
+
// hazard the sibling entries above record: the grant confines them to a subtree, the object they
|
|
73
|
+
// reach does not live in one.
|
|
74
|
+
CoreResourceType.ORG_PROVIDER_CREDENTIALS,
|
|
68
75
|
];
|
|
69
76
|
/** @wildo_source:part:end saas.models.organization-unit-narrowing-containment */
|
|
70
77
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization-unit-narrowing.shared.js","sourceRoot":"","sources":["../../../../src/organizations/organization-unit-narrowing.shared.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAkClF,iFAAiF;AAEjF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,iIAAiI;AACjI,MAAM,CAAC,MAAM,+CAA+C,GAAgC;IAC1F,gBAAgB,CAAC,yBAAyB;IAC1C,gBAAgB,CAAC,oBAAoB;IACrC,gBAAgB,CAAC,kBAAkB;IACnC,2FAA2F;IAC3F,mFAAmF;IACnF,gBAAgB,CAAC,aAAa;IAC9B,gBAAgB,CAAC,YAAY;IAC7B,gBAAgB,CAAC,0BAA0B;CAC5C,CAAC;AACF,iFAAiF;AAEjF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAsF,EAAE,CAAC;AAExI;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,0CAA0C,CACxD,eAAwF,EACxF,oBAAyG;IAEzG,OAAO,EAAE,GAAG,eAAe,EAAE,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC,EAAE,CAAC;AACjE,CAAC;AAQD;;;;;;GAMG;AACH,MAAM,UAAU,0CAA0C,CACxD,iBAA0F;IAE1F,MAAM,SAAS,GAAG,IAAI,GAAG,CAAS,+CAA+C,CAAC,CAAC;IACnF,MAAM,UAAU,GAAyC,EAAE,CAAC;IAE5D,KAAK,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC5E,IAAI,CAAC,WAAW;YAAE,SAAS;QAC3B,IAAI,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,UAAU,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,wDAAwD,EAAE,CAAC,CAAC;YACpG,SAAS;QACX,CAAC;QACD,IAAI,OAAO,WAAW,CAAC,aAAa,KAAK,QAAQ,IAAI,WAAW,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5F,UAAU,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gCAAgC,CAC9C,iBAA0F,EAC1F,YAAoB;IAEpB,IAAI,+CAA+C,CAAC,QAAQ,CAAC,YAAgC,CAAC;QAAE,OAAO,SAAS,CAAC;IACjH,MAAM,WAAW,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACpD,IAAI,CAAC,WAAW,EAAE,aAAa;QAAE,OAAO,SAAS,CAAC;IAClD,OAAO,WAAW,CAAC;AACrB,CAAC","sourcesContent":["/**\n * Organization-unit narrowing — the opt-in registry and its hard containment rule.\n *\n * Unit grants are ADDITIVE (plan decision D-C3b): they widen a principal's reach, never shrink it.\n * A caller whose organization-wide grant already satisfies an operation is not narrowed at all; a\n * caller who would otherwise be denied gains access to the rows of the units they hold.\n *\n * A resource participates ONLY by opting in here. Narrowing is never implicit: inferring it from the\n * presence of an `organizationUnitId` field would silently change the result set of every existing\n * LIST the moment such a field was added.\n */\n\nimport { CoreResourceType } from '../resources/resources.shared.core.definitions';\n\n/**\n * @wildo_source:part:start saas.models.organization-unit-narrowing-declaration facet:layer:shared facet:family:authorization\n *\n * How one resource is narrowed: the field carrying the unit a row belongs to.\n *\n * Import from `@wildo-ai/saas-models`. Declare narrowing by passing an\n * `organizationUnitNarrowing` map to application startup, keyed by resource type:\n *\n * ```ts\n * organizationUnitNarrowing: {\n * [MyResourceType.PROJECTS]: { unitFieldName: 'organizationUnitId' },\n * }\n * ```\n *\n * `unitFieldName` must name a real field on the resource's main schema that stores the owning\n * `ORGANIZATION_UNITS` id — it becomes a query predicate on every read and a write-time check on\n * every create/update, so a misspelled field is an authorization defect, not a typo.\n *\n * Opting in is ADDITIVE: a caller whose organization-wide role already satisfies the operation is\n * never narrowed and keeps seeing the whole tenant, while a caller who would otherwise be denied\n * gains access to the rows of the units they hold. Opting a resource in therefore cannot shrink any\n * existing result set.\n *\n * Deliberately an object rather than a bare boolean so per-operation narrowing can be added later as\n * an optional property (D-C5) without migrating any existing declaration — Dynamics carries depth\n * per privilege, and Wildo already declares roles per operation variant, so that is the likely next\n * shape. Resource-level is a strict subset of it.\n */\nexport type OrganizationUnitNarrowingDeclaration = {\n /** The field on the resource holding the owning `ORGANIZATION_UNITS` id. */\n readonly unitFieldName: string;\n};\n/** @wildo_source:part:end saas.models.organization-unit-narrowing-declaration */\n\n/**\n * Resources that may NEVER be unit-narrowable — the authorization plane (plan decision D-C4).\n *\n * ## The loop this closes\n *\n * A resource that ISSUES authority must not be governed by the authority it issues. Were\n * `ORGANIZATION_UNIT_MEMBERS` narrowable:\n *\n * 1. a principal who is organization-wide `ORG_MEMBER` but `ORG_ADMIN` of ONE unit\n * 2. satisfies the `ORG_ADMIN` gate on the grant surface via that unit grant,\n * 3. grants themselves `ORG_ADMIN` in every other unit,\n * 4. and the union of all units is organization-wide admin — assembled from a single unit grant.\n *\n * Step 3 is blocked today only because the role ceiling derives from organization-wide grants. That\n * is one refactor away from being undone (see the `D-C4 LOCK` regression test), so the containment\n * is also structural: a unit grant can never reach these resources at all.\n *\n * Every major suite enforces the same separation — SAP puts user↔role assignment behind dedicated\n * authorization objects, Azure puts role assignment outside the data plane behind\n * `Microsoft.Authorization/roleAssignments/write`, and Dynamics forbids assigning a role you do not\n * hold.\n *\n * `ORGANIZATION_MEMBERS` is listed for the same reason one level up: it carries the organization-wide\n * `roles` array that produces `initiatorRoles`. The roles-bearing machine credentials are listed\n * because the roles written at CREATE become the authority of every token minted from them.\n *\n * ## `ORGANIZATIONS` is listed for a SECOND, distinct reason — scope inversion\n *\n * The rule above is \"a resource that ISSUES authority may not be governed by the authority it\n * issues\". `ORGANIZATIONS` is barred by its sibling: **a resource that DEFINES a scope may not be\n * governed by a narrowing INSIDE that scope.** A unit is owned BY an organization, so letting the\n * owned thing gate access to its owner inverts the containment.\n *\n * That is not abstract. The tenant lifecycle verbs live on this resource, and\n * `request_deletion` / `suspend` are `ORG_ADMIN`-gated. Were `ORGANIZATIONS` narrowable, a principal\n * who is organization-wide `ORG_MEMBER` but `ORG_ADMIN` of ONE unit would satisfy that gate through\n * the unit grant — and one division's administrator could mark the ENTIRE tenant for deletion, or\n * halt it. The blast radius is the whole organization, reached from a grant that was supposed to\n * confine them to a subtree of it.\n *\n * It is also meaningless independently of the hazard: an organization is not located inside one of\n * its own units, so there is no honest `unitFieldName` to declare. Listing it turns a declaration\n * that could never be correct into a boot failure instead of a silent authorization hole.\n */\n/** @wildo_source:part:start saas.models.organization-unit-narrowing-containment facet:layer:shared facet:family:authorization */\nexport const ORGANIZATION_UNIT_NARROWING_FORBIDDEN_RESOURCES: readonly CoreResourceType[] = [\n CoreResourceType.ORGANIZATION_UNIT_MEMBERS,\n CoreResourceType.ORGANIZATION_MEMBERS,\n CoreResourceType.ORGANIZATION_UNITS,\n // The tenant itself — scope inversion, and the door to the tenant lifecycle verbs. See the\n // dedicated section above; this is a different rule from the issues-authority one.\n CoreResourceType.ORGANIZATIONS,\n CoreResourceType.ORG_API_KEYS,\n CoreResourceType.OAUTH_CLIENTS_ORGANIZATION,\n];\n/** @wildo_source:part:end saas.models.organization-unit-narrowing-containment */\n\n/**\n * The engine's opted-in resources.\n *\n * EMPTY BY DESIGN. No engine resource carries a unit FK yet, and opting one in is a deliberate\n * per-resource decision, not a default. The mechanism ships ahead of its first consumer so that the\n * containment rule is enforced from the start rather than retrofitted after a resource has already\n * been narrowed incorrectly.\n */\nexport const ENGINE_ORGANIZATION_UNIT_NARROWING: Readonly<Partial<Record<CoreResourceType, OrganizationUnitNarrowingDeclaration>>> = {};\n\n/**\n * Merge the engine's opt-ins with an application's into the map that GOVERNS RUNTIME.\n *\n * The engine ships none today, so in practice this is the application's own map — but the merge\n * exists rather than the application map being used directly, because the containment validation and\n * every runtime lookup must see ONE map. A second, unmerged source is how a resource ends up narrowed\n * on the read path and not on the write path.\n *\n * An application declaration for a resource the engine also declares REPLACES it: the application\n * owns the field name on its own schema. Nothing here validates the result — the caller passes the\n * merged map to {@link collectOrganizationUnitNarrowingViolations} and fails closed at boot, so that\n * an application cannot narrow the authorization plane merely by declaring it later than the engine.\n */\nexport function mergeOrganizationUnitNarrowingDeclarations(\n engineNarrowing: Readonly<Partial<Record<string, OrganizationUnitNarrowingDeclaration>>>,\n applicationNarrowing: Readonly<Partial<Record<string, OrganizationUnitNarrowingDeclaration>>> | undefined,\n): Readonly<Partial<Record<string, OrganizationUnitNarrowingDeclaration>>> {\n return { ...engineNarrowing, ...(applicationNarrowing ?? {}) };\n}\n\n/** A declaration that violates the D-C4 containment rule. */\nexport type OrganizationUnitNarrowingViolation = {\n readonly resourceType: string;\n readonly reason: 'authorization_plane_resource_cannot_be_unit_narrowable' | 'missing_unit_field_name';\n};\n\n/**\n * Validate a narrowing registry against the containment rule.\n *\n * Returns violations rather than throwing so the caller owns the failure mode — the engine boot path\n * turns these into a startup error (fail closed: a misdeclared narrowing is a silent authorization\n * hole, so the application must not start), while tooling can report them without dying.\n */\nexport function collectOrganizationUnitNarrowingViolations(\n narrowingRegistry: Readonly<Partial<Record<string, OrganizationUnitNarrowingDeclaration>>>,\n): OrganizationUnitNarrowingViolation[] {\n const forbidden = new Set<string>(ORGANIZATION_UNIT_NARROWING_FORBIDDEN_RESOURCES);\n const violations: OrganizationUnitNarrowingViolation[] = [];\n\n for (const [resourceType, declaration] of Object.entries(narrowingRegistry)) {\n if (!declaration) continue;\n if (forbidden.has(resourceType)) {\n violations.push({ resourceType, reason: 'authorization_plane_resource_cannot_be_unit_narrowable' });\n continue;\n }\n if (typeof declaration.unitFieldName !== 'string' || declaration.unitFieldName.length === 0) {\n violations.push({ resourceType, reason: 'missing_unit_field_name' });\n }\n }\n\n return violations;\n}\n\n/**\n * Is this resource narrowed by organization unit?\n *\n * The single question every consumer asks. Reading the registry directly is how a call site ends up\n * disagreeing with the containment rule — the forbidden set is re-checked here so a registry that\n * was assembled without validation still cannot narrow the authorization plane.\n */\nexport function resolveOrganizationUnitNarrowing(\n narrowingRegistry: Readonly<Partial<Record<string, OrganizationUnitNarrowingDeclaration>>>,\n resourceType: string,\n): OrganizationUnitNarrowingDeclaration | undefined {\n if (ORGANIZATION_UNIT_NARROWING_FORBIDDEN_RESOURCES.includes(resourceType as CoreResourceType)) return undefined;\n const declaration = narrowingRegistry[resourceType];\n if (!declaration?.unitFieldName) return undefined;\n return declaration;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"organization-unit-narrowing.shared.js","sourceRoot":"","sources":["../../../src/organizations/organization-unit-narrowing.shared.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAkClF,iFAAiF;AAEjF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,MAAM,CAAC,MAAM,+CAA+C,GAAgC;IAC1F,gBAAgB,CAAC,yBAAyB;IAC1C,gBAAgB,CAAC,oBAAoB;IACrC,gBAAgB,CAAC,kBAAkB;IACnC,2FAA2F;IAC3F,mFAAmF;IACnF,gBAAgB,CAAC,aAAa;IAC9B,gBAAgB,CAAC,YAAY;IAC7B,gBAAgB,CAAC,0BAA0B;IAC3C,kGAAkG;IAClG,gGAAgG;IAChG,8FAA8F;IAC9F,iGAAiG;IACjG,8BAA8B;IAC9B,gBAAgB,CAAC,wBAAwB;CAC1C,CAAC;AACF,iFAAiF;AAEjF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAsF,EAAE,CAAC;AAExI;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,0CAA0C,CACxD,eAAwF,EACxF,oBAAyG;IAEzG,OAAO,EAAE,GAAG,eAAe,EAAE,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC,EAAE,CAAC;AACjE,CAAC;AAQD;;;;;;GAMG;AACH,MAAM,UAAU,0CAA0C,CACxD,iBAA0F;IAE1F,MAAM,SAAS,GAAG,IAAI,GAAG,CAAS,+CAA+C,CAAC,CAAC;IACnF,MAAM,UAAU,GAAyC,EAAE,CAAC;IAE5D,KAAK,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC5E,IAAI,CAAC,WAAW;YAAE,SAAS;QAC3B,IAAI,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,UAAU,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,wDAAwD,EAAE,CAAC,CAAC;YACpG,SAAS;QACX,CAAC;QACD,IAAI,OAAO,WAAW,CAAC,aAAa,KAAK,QAAQ,IAAI,WAAW,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5F,UAAU,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gCAAgC,CAC9C,iBAA0F,EAC1F,YAAoB;IAEpB,IAAI,+CAA+C,CAAC,QAAQ,CAAC,YAAgC,CAAC;QAAE,OAAO,SAAS,CAAC;IACjH,MAAM,WAAW,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACpD,IAAI,CAAC,WAAW,EAAE,aAAa;QAAE,OAAO,SAAS,CAAC;IAClD,OAAO,WAAW,CAAC;AACrB,CAAC","sourcesContent":["/**\n * Organization-unit narrowing — the opt-in registry and its hard containment rule.\n *\n * Unit grants are ADDITIVE (plan decision D-C3b): they widen a principal's reach, never shrink it.\n * A caller whose organization-wide grant already satisfies an operation is not narrowed at all; a\n * caller who would otherwise be denied gains access to the rows of the units they hold.\n *\n * A resource participates ONLY by opting in here. Narrowing is never implicit: inferring it from the\n * presence of an `organizationUnitId` field would silently change the result set of every existing\n * LIST the moment such a field was added.\n */\n\nimport { CoreResourceType } from '../resources/resources.shared.core.definitions';\n\n/**\n * @wildo_source:part:start saas.models.organization-unit-narrowing-declaration facet:layer:shared facet:family:authorization\n *\n * How one resource is narrowed: the field carrying the unit a row belongs to.\n *\n * Import from `@wildo-ai/saas-models`. Declare narrowing by passing an\n * `organizationUnitNarrowing` map to application startup, keyed by resource type:\n *\n * ```ts\n * organizationUnitNarrowing: {\n * [MyResourceType.PROJECTS]: { unitFieldName: 'organizationUnitId' },\n * }\n * ```\n *\n * `unitFieldName` must name a real field on the resource's main schema that stores the owning\n * `ORGANIZATION_UNITS` id — it becomes a query predicate on every read and a write-time check on\n * every create/update, so a misspelled field is an authorization defect, not a typo.\n *\n * Opting in is ADDITIVE: a caller whose organization-wide role already satisfies the operation is\n * never narrowed and keeps seeing the whole tenant, while a caller who would otherwise be denied\n * gains access to the rows of the units they hold. Opting a resource in therefore cannot shrink any\n * existing result set.\n *\n * Deliberately an object rather than a bare boolean so per-operation narrowing can be added later as\n * an optional property (D-C5) without migrating any existing declaration — Dynamics carries depth\n * per privilege, and Wildo already declares roles per operation variant, so that is the likely next\n * shape. Resource-level is a strict subset of it.\n */\nexport type OrganizationUnitNarrowingDeclaration = {\n /** The field on the resource holding the owning `ORGANIZATION_UNITS` id. */\n readonly unitFieldName: string;\n};\n/** @wildo_source:part:end saas.models.organization-unit-narrowing-declaration */\n\n/**\n * @wildo_source:part:start saas.models.organization-unit-narrowing-containment facet:layer:shared facet:family:authorization facet:audience:app-developer\n *\n * Resources that may NEVER be unit-narrowable — the authorization plane.\n *\n * ## The loop this closes\n *\n * A resource that ISSUES authority must not be governed by the authority it issues. Were\n * `ORGANIZATION_UNIT_MEMBERS` narrowable:\n *\n * 1. a principal who is organization-wide `ORG_MEMBER` but `ORG_ADMIN` of ONE unit\n * 2. satisfies the `ORG_ADMIN` gate on the grant surface via that unit grant,\n * 3. grants themselves `ORG_ADMIN` in every other unit,\n * 4. and the union of all units is organization-wide admin — assembled from a single unit grant.\n *\n * Step 3 is blocked today only because the role ceiling derives from organization-wide grants. That\n * is one refactor away from being undone (see the `D-C4 LOCK` regression test), so the containment\n * is also structural: a unit grant can never reach these resources at all.\n *\n * Every major suite enforces the same separation — SAP puts user↔role assignment behind dedicated\n * authorization objects, Azure puts role assignment outside the data plane behind\n * `Microsoft.Authorization/roleAssignments/write`, and Dynamics forbids assigning a role you do not\n * hold.\n *\n * `ORGANIZATION_MEMBERS` is listed for the same reason one level up: it carries the organization-wide\n * `roles` array that produces `initiatorRoles`. The roles-bearing machine credentials are listed\n * because the roles written at CREATE become the authority of every token minted from them.\n *\n * ## `ORGANIZATIONS` is listed for a SECOND, distinct reason — scope inversion\n *\n * The rule above is \"a resource that ISSUES authority may not be governed by the authority it\n * issues\". `ORGANIZATIONS` is barred by its sibling: **a resource that DEFINES a scope may not be\n * governed by a narrowing INSIDE that scope.** A unit is owned BY an organization, so letting the\n * owned thing gate access to its owner inverts the containment.\n *\n * That is not abstract. The tenant lifecycle verbs live on this resource, and\n * `request_deletion` / `suspend` are `ORG_ADMIN`-gated. Were `ORGANIZATIONS` narrowable, a principal\n * who is organization-wide `ORG_MEMBER` but `ORG_ADMIN` of ONE unit would satisfy that gate through\n * the unit grant — and one division's administrator could mark the ENTIRE tenant for deletion, or\n * halt it. The blast radius is the whole organization, reached from a grant that was supposed to\n * confine them to a subtree of it.\n *\n * It is also meaningless independently of the hazard: an organization is not located inside one of\n * its own units, so there is no honest `unitFieldName` to declare. Listing it turns a declaration\n * that could never be correct into a boot failure instead of a silent authorization hole.\n */\nexport const ORGANIZATION_UNIT_NARROWING_FORBIDDEN_RESOURCES: readonly CoreResourceType[] = [\n CoreResourceType.ORGANIZATION_UNIT_MEMBERS,\n CoreResourceType.ORGANIZATION_MEMBERS,\n CoreResourceType.ORGANIZATION_UNITS,\n // The tenant itself — scope inversion, and the door to the tenant lifecycle verbs. See the\n // dedicated section above; this is a different rule from the issues-authority one.\n CoreResourceType.ORGANIZATIONS,\n CoreResourceType.ORG_API_KEYS,\n CoreResourceType.OAUTH_CLIENTS_ORGANIZATION,\n // A credential authenticates the WHOLE TENANT toward a third party — there is one Slack workspace\n // behind it, not one per division. Narrowing it to a unit would let a unit-scoped administrator\n // rotate or delete the credential every other unit spends, which is the same issues-authority\n // hazard the sibling entries above record: the grant confines them to a subtree, the object they\n // reach does not live in one.\n CoreResourceType.ORG_PROVIDER_CREDENTIALS,\n];\n/** @wildo_source:part:end saas.models.organization-unit-narrowing-containment */\n\n/**\n * The engine's opted-in resources.\n *\n * EMPTY BY DESIGN. No engine resource carries a unit FK yet, and opting one in is a deliberate\n * per-resource decision, not a default. The mechanism ships ahead of its first consumer so that the\n * containment rule is enforced from the start rather than retrofitted after a resource has already\n * been narrowed incorrectly.\n */\nexport const ENGINE_ORGANIZATION_UNIT_NARROWING: Readonly<Partial<Record<CoreResourceType, OrganizationUnitNarrowingDeclaration>>> = {};\n\n/**\n * Merge the engine's opt-ins with an application's into the map that GOVERNS RUNTIME.\n *\n * The engine ships none today, so in practice this is the application's own map — but the merge\n * exists rather than the application map being used directly, because the containment validation and\n * every runtime lookup must see ONE map. A second, unmerged source is how a resource ends up narrowed\n * on the read path and not on the write path.\n *\n * An application declaration for a resource the engine also declares REPLACES it: the application\n * owns the field name on its own schema. Nothing here validates the result — the caller passes the\n * merged map to {@link collectOrganizationUnitNarrowingViolations} and fails closed at boot, so that\n * an application cannot narrow the authorization plane merely by declaring it later than the engine.\n */\nexport function mergeOrganizationUnitNarrowingDeclarations(\n engineNarrowing: Readonly<Partial<Record<string, OrganizationUnitNarrowingDeclaration>>>,\n applicationNarrowing: Readonly<Partial<Record<string, OrganizationUnitNarrowingDeclaration>>> | undefined,\n): Readonly<Partial<Record<string, OrganizationUnitNarrowingDeclaration>>> {\n return { ...engineNarrowing, ...(applicationNarrowing ?? {}) };\n}\n\n/** A declaration that violates the D-C4 containment rule. */\nexport type OrganizationUnitNarrowingViolation = {\n readonly resourceType: string;\n readonly reason: 'authorization_plane_resource_cannot_be_unit_narrowable' | 'missing_unit_field_name';\n};\n\n/**\n * Validate a narrowing registry against the containment rule.\n *\n * Returns violations rather than throwing so the caller owns the failure mode — the engine boot path\n * turns these into a startup error (fail closed: a misdeclared narrowing is a silent authorization\n * hole, so the application must not start), while tooling can report them without dying.\n */\nexport function collectOrganizationUnitNarrowingViolations(\n narrowingRegistry: Readonly<Partial<Record<string, OrganizationUnitNarrowingDeclaration>>>,\n): OrganizationUnitNarrowingViolation[] {\n const forbidden = new Set<string>(ORGANIZATION_UNIT_NARROWING_FORBIDDEN_RESOURCES);\n const violations: OrganizationUnitNarrowingViolation[] = [];\n\n for (const [resourceType, declaration] of Object.entries(narrowingRegistry)) {\n if (!declaration) continue;\n if (forbidden.has(resourceType)) {\n violations.push({ resourceType, reason: 'authorization_plane_resource_cannot_be_unit_narrowable' });\n continue;\n }\n if (typeof declaration.unitFieldName !== 'string' || declaration.unitFieldName.length === 0) {\n violations.push({ resourceType, reason: 'missing_unit_field_name' });\n }\n }\n\n return violations;\n}\n\n/**\n * Is this resource narrowed by organization unit?\n *\n * The single question every consumer asks. Reading the registry directly is how a call site ends up\n * disagreeing with the containment rule — the forbidden set is re-checked here so a registry that\n * was assembled without validation still cannot narrow the authorization plane.\n */\nexport function resolveOrganizationUnitNarrowing(\n narrowingRegistry: Readonly<Partial<Record<string, OrganizationUnitNarrowingDeclaration>>>,\n resourceType: string,\n): OrganizationUnitNarrowingDeclaration | undefined {\n if (ORGANIZATION_UNIT_NARROWING_FORBIDDEN_RESOURCES.includes(resourceType as CoreResourceType)) return undefined;\n const declaration = narrowingRegistry[resourceType];\n if (!declaration?.unitFieldName) return undefined;\n return declaration;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization-units.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"organization-units.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["../../../src/organizations/organization-units.shared.resources-config.schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAoD,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAU/H,oBAAY,2BAA2B;IACrC,IAAI,SAAS,CAAE,gCAAgC;IAC/C,OAAO,YAAY,CAAE,eAAe;IACpC,OAAO,YAAY;CACpB;AASD,KAAK,8BAA8B,GAC/B,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,CAAC;AAKjC,eAAO,MAAM,2DAA2D,GAAI,wBAAwB,oBAAoB,EAAE;;;;;;;;;;;;mBAmLxH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization-units.shared.schemas.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"organization-units.shared.schemas.d.ts","sourceRoot":"","sources":["../../../src/organizations/organization-units.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB;;GAEG;AACH,oBAAY,oBAAoB;IAC9B,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,MAAM,WAAW;CAClB;AAED,oBAAY,sBAAsB;IAChC,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,SAAS,cAAc;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,oBAAY,0CAA0C;IACpD,qEAAqE;IACrE,YAAY,iBAAiB;IAC7B,wGAAwG;IACxG,cAAc,mBAAmB;CAClC;AAGD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;kBAyClC,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAGtE,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,wBAAwB,EAAE,CAAC;CACtC;AAED,eAAO,MAAM,8BAA8B,EAAE,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAG7E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organizations.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"organizations.shared.resources-config.schemas.d.ts","sourceRoot":"","sources":["../../../src/organizations/organizations.shared.resources-config.schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,kBAAkB,EACnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAoD,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAW/H;;;;;;;;;;;;;;GAcG;AACH,oBAAY,iCAAiC;IAC3C,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB;;;;;;;OAOG;IACH,gBAAgB,qBAAqB;IACrC;;;;;;OAMG;IACH,OAAO,YAAY;CACpB;AAQD,KAAK,0BAA0B,GAC3B,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,IAAI,GAC1B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,GAC5B,qBAAqB,CAAC,MAAM,CAAC;AAKjC,eAAO,MAAM,uDAAuD,GAAI,wBAAwB,oBAAoB,EAAE;;;;;;;;;;;;kBA+pBpH,CAAC"}
|
|
@@ -135,7 +135,16 @@ export const organizationResourceConfiguration_InitializationFactory = (resource
|
|
|
135
135
|
{
|
|
136
136
|
variantType: ResourceOperationVariantType.API_CALL,
|
|
137
137
|
isDefault: true,
|
|
138
|
-
|
|
138
|
+
/*
|
|
139
|
+
* Any authenticated user may create their own organization, and OWNERSHIP IS ESTABLISHED
|
|
140
|
+
* BY THE CREATE FLOW rather than by a role — which was aspirational until 2026-09-08
|
|
141
|
+
* (#436) and is now true: this variant's postfix writes the founding owner membership for
|
|
142
|
+
* the creator, so a self-service create can no longer produce a tenant with no members.
|
|
143
|
+
* The `admin` variant below deliberately does NOT, because a platform operator must not
|
|
144
|
+
* become a member of a customer tenant; that tenant's first owner is named through the
|
|
145
|
+
* audited `organizationMembers.grantOwnership` door.
|
|
146
|
+
*/
|
|
147
|
+
roles: [CORE_APP_ROLES.APP_USER],
|
|
139
148
|
riskLevel: ResourceOperationRiskLevel.MEDIUM,
|
|
140
149
|
// DTOs auto-derived from decorators (excludeFromCreate on _id, createdAt, updatedAt)
|
|
141
150
|
// `status` IS accepted on CREATE (it carries `.default(ACTIVE)`, so an omitted value
|
|
@@ -180,8 +189,14 @@ export const organizationResourceConfiguration_InitializationFactory = (resource
|
|
|
180
189
|
]
|
|
181
190
|
},
|
|
182
191
|
/**
|
|
183
|
-
* ⚠️ THE SCOPE-ROOT COLLECTION OPERATIONS — read this before changing LIST, SEARCH or
|
|
184
|
-
*
|
|
192
|
+
* ⚠️ THE SCOPE-ROOT COLLECTION OPERATIONS — read this before changing LIST, SEARCH, CREATE or
|
|
193
|
+
* the roles any of them declares.
|
|
194
|
+
*
|
|
195
|
+
* THREE verbs, not two. The banner named only the two reads until 2026-09-08 (#436), and the
|
|
196
|
+
* omission read as a decision: a reviewer asking "does CREATE take this branch?" found a
|
|
197
|
+
* document that answered for LIST and SEARCH and said nothing about the third. It does — the
|
|
198
|
+
* branch keys on the RESOURCE being its own scope root, never on the operation — and
|
|
199
|
+
* `scope-root-collection-gate.test.ts` pins CREATE for `APP_USER` alongside the two reads.
|
|
185
200
|
*
|
|
186
201
|
* `organizations` is the ONLY resource that is both ORGANIZATIONS-scoped and its own scope ROOT,
|
|
187
202
|
* and that makes both of its collection reads special in a way no other resource's are.
|