@wildo-ai/saas-models 1.1.3 → 1.1.5
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/applications/application-metadata.shared.resources-config.schemas.d.ts +1 -1
- package/dist/esm/applications/application-versions.shared.resources-config.schemas.d.ts +1 -1
- package/dist/esm/applications/application-versions.shared.resources-config.schemas.js +2 -2
- package/dist/esm/applications/application-versions.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/applications/applications-context.schemas.d.ts +236 -18
- package/dist/esm/applications/applications-context.schemas.d.ts.map +1 -1
- package/dist/esm/applications/applications.shared.resources-config.schemas.d.ts +1 -0
- package/dist/esm/applications/applications.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/applications/applications.shared.resources-config.schemas.js +1 -1
- package/dist/esm/applications/applications.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/applications/applications.shared.schemas.d.ts +3 -2
- package/dist/esm/applications/applications.shared.schemas.d.ts.map +1 -1
- package/dist/esm/applications/applications.shared.schemas.js +40 -5
- package/dist/esm/applications/applications.shared.schemas.js.map +1 -1
- package/dist/esm/billing/billing-account.shared.resources-config.schemas.d.ts +1 -2
- package/dist/esm/billing/billing-account.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-account.shared.resources-config.schemas.js +1 -2
- package/dist/esm/billing/billing-account.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/billing-enums.shared.schemas.d.ts +87 -5
- package/dist/esm/billing/billing-enums.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-enums.shared.schemas.js +91 -5
- package/dist/esm/billing/billing-enums.shared.schemas.js.map +1 -1
- package/dist/esm/billing/billing-types.shared.schemas.d.ts +25 -4
- package/dist/esm/billing/billing-types.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-types.shared.schemas.js +61 -0
- package/dist/esm/billing/billing-types.shared.schemas.js.map +1 -1
- package/dist/esm/billing/price.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/price.shared.resources-config.schemas.js +32 -2
- package/dist/esm/billing/price.shared.resources-config.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 +1 -1
- package/dist/esm/billing/product-behavior-policy.shared.schemas.js.map +1 -1
- package/dist/esm/billing/product.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/product.shared.resources-config.schemas.js +32 -2
- package/dist/esm/billing/product.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/product.shared.schemas.d.ts +1 -0
- package/dist/esm/billing/product.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/product.shared.schemas.js +3 -0
- 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.resources-config.schemas.js +33 -3
- package/dist/esm/billing/promotions.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/referral.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/referral.shared.resources-config.schemas.js +22 -2
- package/dist/esm/billing/referral.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/referral.shared.schemas.d.ts +1 -0
- package/dist/esm/billing/referral.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/referral.shared.schemas.js +3 -0
- package/dist/esm/billing/referral.shared.schemas.js.map +1 -1
- package/dist/esm/billing/subscription.shared.resources-config.schemas.d.ts +23 -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 +48 -2
- package/dist/esm/billing/subscription.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/subscription.shared.schemas.d.ts +1 -0
- package/dist/esm/billing/subscription.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/subscription.shared.schemas.js +3 -0
- package/dist/esm/billing/subscription.shared.schemas.js.map +1 -1
- package/dist/esm/billing/usage-flush-evidence.shared.schemas.d.ts +49 -0
- package/dist/esm/billing/usage-flush-evidence.shared.schemas.d.ts.map +1 -0
- package/dist/esm/billing/usage-flush-evidence.shared.schemas.js +48 -0
- package/dist/esm/billing/usage-flush-evidence.shared.schemas.js.map +1 -0
- package/dist/esm/billing/usage-record.shared.schemas.d.ts +1 -0
- package/dist/esm/billing/usage-record.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/usage-record.shared.schemas.js +3 -0
- package/dist/esm/billing/usage-record.shared.schemas.js.map +1 -1
- package/dist/esm/companion/provider-discovery.shared.schemas.d.ts +8 -0
- package/dist/esm/companion/provider-discovery.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/application-audit-logs.shared.resources-config.schemas.d.ts +14 -3
- package/dist/esm/compliance/audit-trails/application-audit-logs.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/application-audit-logs.shared.resources-config.schemas.js +21 -7
- package/dist/esm/compliance/audit-trails/application-audit-logs.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-export-projection.shared.schemas.d.ts +450 -0
- package/dist/esm/compliance/audit-trails/audit-export-projection.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/audit-trails/audit-export-projection.shared.schemas.js +723 -0
- package/dist/esm/compliance/audit-trails/audit-export-projection.shared.schemas.js.map +1 -0
- package/dist/esm/compliance/audit-trails/audit-logs.shared.resources-config.schemas.d.ts +2 -2
- package/dist/esm/compliance/audit-trails/audit-trail-config.shared.schemas.d.ts +8 -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 +15 -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 +787 -21
- 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 +1079 -26
- 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 +51 -0
- package/dist/esm/compliance/audit-trails/security-audit-event-envelope.shared.schema.js.map +1 -1
- package/dist/esm/compliance/documents/governed-document-interactions.shared.schemas.d.ts +463 -0
- package/dist/esm/compliance/documents/governed-document-interactions.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/documents/governed-document-interactions.shared.schemas.js +526 -0
- package/dist/esm/compliance/documents/governed-document-interactions.shared.schemas.js.map +1 -0
- package/dist/esm/compliance/documents/governed-documents.shared.schemas.d.ts +539 -15
- package/dist/esm/compliance/documents/governed-documents.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/documents/governed-documents.shared.schemas.js +402 -14
- package/dist/esm/compliance/documents/governed-documents.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.resources-config.schemas.d.ts +18 -0
- package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.resources-config.schemas.js +89 -0
- package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.schemas.d.ts +47 -0
- package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.schemas.js +73 -0
- package/dist/esm/compliance/documents/user-governed-document-acceptances.shared.schemas.js.map +1 -0
- package/dist/esm/compliance/privacy/ai-use-posture.shared.schemas.d.ts +21 -0
- package/dist/esm/compliance/privacy/ai-use-posture.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/ai-use-posture.shared.schemas.js +39 -1
- package/dist/esm/compliance/privacy/ai-use-posture.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/capability-consent-purposes.shared.utils.d.ts +33 -0
- package/dist/esm/compliance/privacy/capability-consent-purposes.shared.utils.d.ts.map +1 -0
- package/dist/esm/compliance/privacy/capability-consent-purposes.shared.utils.js +30 -0
- package/dist/esm/compliance/privacy/capability-consent-purposes.shared.utils.js.map +1 -0
- package/dist/esm/compliance/privacy/client-storage.shared.schemas.d.ts +6 -5
- package/dist/esm/compliance/privacy/client-storage.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/client-storage.shared.schemas.js +15 -5
- package/dist/esm/compliance/privacy/client-storage.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/consent-gate-vocabulary.shared.schemas.d.ts +127 -0
- package/dist/esm/compliance/privacy/consent-gate-vocabulary.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/privacy/consent-gate-vocabulary.shared.schemas.js +94 -0
- package/dist/esm/compliance/privacy/consent-gate-vocabulary.shared.schemas.js.map +1 -0
- package/dist/esm/compliance/privacy/consent-purposes.shared.d.ts +125 -0
- package/dist/esm/compliance/privacy/consent-purposes.shared.d.ts.map +1 -0
- package/dist/esm/compliance/privacy/consent-purposes.shared.js +136 -0
- package/dist/esm/compliance/privacy/consent-purposes.shared.js.map +1 -0
- package/dist/esm/compliance/privacy/data-subject-rights.shared.schemas.d.ts +91 -0
- package/dist/esm/compliance/privacy/data-subject-rights.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/privacy/data-subject-rights.shared.schemas.js +123 -0
- package/dist/esm/compliance/privacy/data-subject-rights.shared.schemas.js.map +1 -0
- package/dist/esm/compliance/privacy/operating-jurisdictions.shared.schemas.d.ts +27 -0
- package/dist/esm/compliance/privacy/operating-jurisdictions.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/operating-jurisdictions.shared.schemas.js +36 -2
- 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 +68 -25
- package/dist/esm/compliance/privacy/operator-compliance-identity.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/operator-compliance-identity.shared.schemas.js +74 -22
- package/dist/esm/compliance/privacy/operator-compliance-identity.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/privacy.shared.schemas.d.ts +9 -17
- package/dist/esm/compliance/privacy/privacy.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/privacy.shared.schemas.js +74 -31
- package/dist/esm/compliance/privacy/privacy.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/subject-erasure-lane-evidence.shared.schemas.d.ts +47 -0
- package/dist/esm/compliance/privacy/subject-erasure-lane-evidence.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/privacy/subject-erasure-lane-evidence.shared.schemas.js +98 -0
- package/dist/esm/compliance/privacy/subject-erasure-lane-evidence.shared.schemas.js.map +1 -0
- package/dist/esm/compliance/privacy/subject-erasure.shared.schemas.d.ts +368 -35
- package/dist/esm/compliance/privacy/subject-erasure.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/subject-erasure.shared.schemas.js +403 -17
- package/dist/esm/compliance/privacy/subject-erasure.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/review-cadence.shared.schemas.d.ts +56 -0
- package/dist/esm/compliance/review-cadence.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/review-cadence.shared.schemas.js +71 -0
- package/dist/esm/compliance/review-cadence.shared.schemas.js.map +1 -0
- package/dist/esm/compliance/risk-posture.shared.schemas.d.ts +161 -0
- package/dist/esm/compliance/risk-posture.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/risk-posture.shared.schemas.js +166 -0
- package/dist/esm/compliance/risk-posture.shared.schemas.js.map +1 -0
- package/dist/esm/config/analytics-value-moments.shared.schemas.d.ts +4 -3
- package/dist/esm/config/analytics-value-moments.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/analytics-value-moments.shared.schemas.js +4 -3
- package/dist/esm/config/analytics-value-moments.shared.schemas.js.map +1 -1
- package/dist/esm/config/app-configuration-shared.shared.schemas.d.ts +222 -9
- package/dist/esm/config/app-configuration-shared.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/app-configuration-shared.shared.schemas.js +232 -9
- package/dist/esm/config/app-configuration-shared.shared.schemas.js.map +1 -1
- package/dist/esm/config/auth-config-resolution.shared.utils.d.ts +75 -3
- package/dist/esm/config/auth-config-resolution.shared.utils.d.ts.map +1 -1
- package/dist/esm/config/auth-config-resolution.shared.utils.js +93 -4
- package/dist/esm/config/auth-config-resolution.shared.utils.js.map +1 -1
- package/dist/esm/config/brand-assets.shared.schemas.d.ts +5 -4
- package/dist/esm/config/brand-assets.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/brand-assets.shared.schemas.js +14 -4
- package/dist/esm/config/brand-assets.shared.schemas.js.map +1 -1
- package/dist/esm/config/entity-identity-config.shared.schemas.d.ts +463 -19
- package/dist/esm/config/entity-identity-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/entity-identity-config.shared.schemas.js +535 -28
- package/dist/esm/config/entity-identity-config.shared.schemas.js.map +1 -1
- package/dist/esm/config/frontend/chart-definition.shared.schemas.d.ts +14 -14
- 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 +21 -17
- package/dist/esm/config/frontend/navigation.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/frontend/navigation.shared.schemas.js +58 -40
- package/dist/esm/config/frontend/navigation.shared.schemas.js.map +1 -1
- package/dist/esm/config/frontend/onboarding.shared.schemas.d.ts +90 -133
- package/dist/esm/config/frontend/onboarding.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/frontend/onboarding.shared.schemas.js +148 -100
- package/dist/esm/config/frontend/onboarding.shared.schemas.js.map +1 -1
- package/dist/esm/errors/errors.custom-message-ref.shared.definitions.d.ts +146 -43
- 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 +147 -42
- package/dist/esm/errors/errors.custom-message-ref.shared.definitions.js.map +1 -1
- package/dist/esm/errors/errors.shared.definitions.js +1 -1
- package/dist/esm/errors/errors.shared.definitions.js.map +1 -1
- package/dist/esm/errors/errors.shared.schemas.d.ts +29 -40
- package/dist/esm/errors/errors.shared.schemas.d.ts.map +1 -1
- package/dist/esm/errors/errors.shared.schemas.js +37 -54
- package/dist/esm/errors/errors.shared.schemas.js.map +1 -1
- package/dist/esm/errors/errors.shared.utils.d.ts +24 -0
- package/dist/esm/errors/errors.shared.utils.d.ts.map +1 -1
- package/dist/esm/errors/errors.shared.utils.js +39 -0
- package/dist/esm/errors/errors.shared.utils.js.map +1 -1
- package/dist/esm/errors/thrown-value-description.shared.utils.d.ts +27 -0
- package/dist/esm/errors/thrown-value-description.shared.utils.d.ts.map +1 -0
- package/dist/esm/errors/thrown-value-description.shared.utils.js +67 -0
- package/dist/esm/errors/thrown-value-description.shared.utils.js.map +1 -0
- package/dist/esm/external-data/external-data-pipeline.shared.schemas.d.ts +48 -73
- 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 +103 -9
- package/dist/esm/external-data/external-data-pipeline.shared.schemas.js.map +1 -1
- package/dist/esm/external-data.exports.d.ts +1 -0
- package/dist/esm/external-data.exports.d.ts.map +1 -1
- package/dist/esm/external-data.exports.js +1 -0
- package/dist/esm/external-data.exports.js.map +1 -1
- package/dist/esm/external-providers/engine-capabilities.shared.schemas.d.ts +18 -12
- package/dist/esm/external-providers/engine-capabilities.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/engine-capabilities.shared.schemas.js +18 -12
- 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 +5 -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 +5 -3
- package/dist/esm/external-providers/engine-capability-resolution-mode.shared.js.map +1 -1
- package/dist/esm/external-providers/engine-capability-surface.shared.d.ts +77 -0
- package/dist/esm/external-providers/engine-capability-surface.shared.d.ts.map +1 -0
- package/dist/esm/external-providers/engine-capability-surface.shared.js +173 -0
- package/dist/esm/external-providers/engine-capability-surface.shared.js.map +1 -0
- package/dist/esm/external-providers/external-providers.shared.schemas.d.ts +2 -0
- package/dist/esm/external-providers/external-providers.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/external-providers.shared.schemas.js +21 -0
- package/dist/esm/external-providers/external-providers.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/frontend-bootstrap.shared.schemas.d.ts +131 -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 +114 -0
- package/dist/esm/external-providers/frontend-capability-public-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/frontend-capability-public-config.shared.schemas.js +148 -0
- package/dist/esm/external-providers/frontend-capability-public-config.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/frontend-provider-entry.shared.schemas.d.ts +108 -0
- 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 +86 -0
- 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 +184 -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 +216 -0
- package/dist/esm/external-providers/frontend-provider-public-config.shared.js.map +1 -0
- package/dist/esm/external-providers/provider-authentication-assurance.shared.schemas.d.ts +30 -0
- package/dist/esm/external-providers/provider-authentication-assurance.shared.schemas.d.ts.map +1 -0
- package/dist/esm/external-providers/provider-authentication-assurance.shared.schemas.js +32 -0
- package/dist/esm/external-providers/provider-authentication-assurance.shared.schemas.js.map +1 -0
- package/dist/esm/external-providers/provider-browser-operations.shared.schemas.d.ts +86 -0
- package/dist/esm/external-providers/provider-browser-operations.shared.schemas.d.ts.map +1 -0
- package/dist/esm/external-providers/provider-browser-operations.shared.schemas.js +85 -0
- package/dist/esm/external-providers/provider-browser-operations.shared.schemas.js.map +1 -0
- package/dist/esm/external-providers/provider-capability.shared.schemas.d.ts +14 -13
- package/dist/esm/external-providers/provider-capability.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-capability.shared.schemas.js +10 -10
- 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 +18 -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 +10 -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 +7 -5
- package/dist/esm/external-providers/provider-frontend-surface.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-frontend-surface.shared.schemas.js +7 -5
- package/dist/esm/external-providers/provider-frontend-surface.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/provider-metadata.shared.schemas.d.ts +8 -5
- package/dist/esm/external-providers/provider-metadata.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/provider-metadata.shared.schemas.js +5 -2
- package/dist/esm/external-providers/provider-metadata.shared.schemas.js.map +1 -1
- package/dist/esm/features/application-features.shared.resources-config.schemas.d.ts +2 -0
- 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 +42 -3
- package/dist/esm/features/application-features.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/features/connected-feature.example.d.ts +64 -0
- package/dist/esm/features/connected-feature.example.d.ts.map +1 -0
- package/dist/esm/features/connected-feature.example.js +86 -0
- package/dist/esm/features/connected-feature.example.js.map +1 -0
- package/dist/esm/features/scope-features.shared.schemas.d.ts +53 -0
- package/dist/esm/features/scope-features.shared.schemas.d.ts.map +1 -1
- package/dist/esm/features/scope-features.shared.schemas.js +37 -0
- package/dist/esm/features/scope-features.shared.schemas.js.map +1 -1
- package/dist/esm/features/user-features.shared.resources-config.schemas.d.ts +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 +42 -48
- 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/files.shared.resources-config.schemas.d.ts +3 -3
- package/dist/esm/files/files.shared.resources-config.schemas.js +3 -3
- package/dist/esm/files/files.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/flows-actors/actors.shared.schemas.d.ts +152 -129
- package/dist/esm/flows-actors/actors.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/actors.shared.schemas.js +99 -2
- package/dist/esm/flows-actors/actors.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/agent-traceability.shared.schemas.d.ts +6 -0
- package/dist/esm/flows-actors/agent-traceability.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/agents.shared.schemas.d.ts +3 -3
- package/dist/esm/flows-actors/agents.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/agents.shared.schemas.js +11 -5
- package/dist/esm/flows-actors/agents.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/deliberation.shared.schemas.d.ts +13 -0
- package/dist/esm/flows-actors/deliberation.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/deliberation.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/execution-plan-readiness.shared.utils.d.ts +45 -0
- package/dist/esm/flows-actors/execution-plan-readiness.shared.utils.d.ts.map +1 -0
- package/dist/esm/flows-actors/execution-plan-readiness.shared.utils.js +51 -0
- package/dist/esm/flows-actors/execution-plan-readiness.shared.utils.js.map +1 -0
- package/dist/esm/flows-actors/flows-actors-execution.shared.schemas.d.ts +31 -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 +61 -3
- package/dist/esm/flows-actors/flows-actors-execution.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors-task.shared.schemas.d.ts +2 -2
- package/dist/esm/flows-actors/flows-actors.commons.shared.schemas.d.ts +16 -8
- 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 +23 -11
- 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 +0 -189
- package/dist/esm/flows-actors/flows-actors.configuration.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.configuration.shared.schemas.js +14 -50
- package/dist/esm/flows-actors/flows-actors.configuration.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors.frontend.shared.schemas.d.ts +0 -3
- package/dist/esm/flows-actors/flows-actors.frontend.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.frontend.shared.schemas.js +0 -1
- package/dist/esm/flows-actors/flows-actors.frontend.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors.system.shared.schemas.d.ts +1 -67
- 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 +1 -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 +0 -1
- package/dist/esm/flows-actors/flows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/human-decision.shared.schemas.d.ts +121 -0
- package/dist/esm/flows-actors/human-decision.shared.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/human-decision.shared.schemas.js +252 -0
- package/dist/esm/flows-actors/human-decision.shared.schemas.js.map +1 -0
- package/dist/esm/flows-actors/mcp-servers.shared.schemas.d.ts +2 -0
- package/dist/esm/flows-actors/mcp-servers.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/mcp-servers.shared.schemas.js +13 -0
- package/dist/esm/flows-actors/mcp-servers.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/provider-call-records.shared.resources-config.schemas.d.ts +24 -0
- package/dist/esm/flows-actors/provider-call-records.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/provider-call-records.shared.resources-config.schemas.js +80 -0
- package/dist/esm/flows-actors/provider-call-records.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/flows-actors/provider-call-records.shared.schemas.d.ts +123 -0
- package/dist/esm/flows-actors/provider-call-records.shared.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/provider-call-records.shared.schemas.js +181 -0
- package/dist/esm/flows-actors/provider-call-records.shared.schemas.js.map +1 -0
- package/dist/esm/flows-actors/tasks.actors.shared.schemas.d.ts +58 -81
- package/dist/esm/flows-actors/tasks.actors.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/tasks.actors.shared.schemas.js +75 -38
- package/dist/esm/flows-actors/tasks.actors.shared.schemas.js.map +1 -1
- package/dist/esm/frontend-definitions/settings-destination-ref.definitions.d.ts +217 -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 +230 -0
- package/dist/esm/frontend-definitions/settings-destination-ref.definitions.js.map +1 -0
- package/dist/esm/guidance/guidance-flow.shared.schemas.d.ts +106 -24
- package/dist/esm/guidance/guidance-flow.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/guidance-flow.shared.schemas.js +152 -14
- package/dist/esm/guidance/guidance-flow.shared.schemas.js.map +1 -1
- package/dist/esm/guidance/lifecycle-state.shared.schemas.d.ts +0 -6
- package/dist/esm/guidance/lifecycle-state.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/lifecycle-state.shared.schemas.js +0 -19
- package/dist/esm/guidance/lifecycle-state.shared.schemas.js.map +1 -1
- package/dist/esm/guidance/milestone-builders.shared.d.ts +4 -2
- package/dist/esm/guidance/milestone-builders.shared.d.ts.map +1 -1
- package/dist/esm/guidance/milestone-builders.shared.js +4 -2
- package/dist/esm/guidance/milestone-builders.shared.js.map +1 -1
- package/dist/esm/guidance/milestone-definition.shared.schemas.d.ts +66 -4
- package/dist/esm/guidance/milestone-definition.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/milestone-definition.shared.schemas.js +50 -0
- package/dist/esm/guidance/milestone-definition.shared.schemas.js.map +1 -1
- package/dist/esm/guidance/progression-presentation.shared.schemas.d.ts +71 -0
- package/dist/esm/guidance/progression-presentation.shared.schemas.d.ts.map +1 -0
- package/dist/esm/guidance/progression-presentation.shared.schemas.js +72 -0
- package/dist/esm/guidance/progression-presentation.shared.schemas.js.map +1 -0
- package/dist/esm/guidance/progression-state.shared.resources-config.schemas.d.ts +2 -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 +4 -0
- package/dist/esm/guidance/progression-state.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/progression-state.shared.schemas.js +5 -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-id.shared.utils.js +2 -1
- package/dist/esm/http-api-binding/http-api-binding-id.shared.utils.js.map +1 -1
- package/dist/esm/http-api-binding/http-api-binding.shared.schemas.d.ts +181 -412
- 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 +249 -199
- package/dist/esm/http-api-binding/http-api-binding.shared.schemas.js.map +1 -1
- package/dist/esm/http-api-binding/http-api-transport-dialect.shared.d.ts +107 -0
- package/dist/esm/http-api-binding/http-api-transport-dialect.shared.d.ts.map +1 -0
- package/dist/esm/http-api-binding/http-api-transport-dialect.shared.js +108 -0
- package/dist/esm/http-api-binding/http-api-transport-dialect.shared.js.map +1 -0
- package/dist/esm/http-api-binding/read-through-engine-anchors.shared.d.ts +38 -0
- package/dist/esm/http-api-binding/read-through-engine-anchors.shared.d.ts.map +1 -0
- package/dist/esm/http-api-binding/read-through-engine-anchors.shared.js +42 -0
- package/dist/esm/http-api-binding/read-through-engine-anchors.shared.js.map +1 -0
- package/dist/esm/index.d.ts +47 -4
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +77 -16
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/meta-workflows/actions.meta-workflows.shared.schemas.d.ts.map +1 -0
- package/dist/esm/meta-workflows/actions.meta-workflows.shared.schemas.js.map +1 -0
- package/dist/esm/meta-workflows/catalog.meta-workflows.shared.schemas.d.ts.map +1 -0
- package/dist/esm/meta-workflows/catalog.meta-workflows.shared.schemas.js.map +1 -0
- package/dist/esm/meta-workflows/coding-tasks.meta-workflows.shared.schemas.d.ts +130 -0
- package/dist/esm/meta-workflows/coding-tasks.meta-workflows.shared.schemas.d.ts.map +1 -0
- package/dist/esm/meta-workflows/coding-tasks.meta-workflows.shared.schemas.js +104 -0
- package/dist/esm/meta-workflows/coding-tasks.meta-workflows.shared.schemas.js.map +1 -0
- package/dist/esm/meta-workflows/context-selection.meta-workflows.shared.schemas.d.ts.map +1 -0
- package/dist/esm/meta-workflows/context-selection.meta-workflows.shared.schemas.js.map +1 -0
- package/dist/esm/{flows-actors/meta-workflows → meta-workflows}/decisions.meta-workflows.shared.schemas.d.ts +64 -0
- package/dist/esm/meta-workflows/decisions.meta-workflows.shared.schemas.d.ts.map +1 -0
- package/dist/esm/{flows-actors/meta-workflows → meta-workflows}/decisions.meta-workflows.shared.schemas.js +47 -0
- package/dist/esm/meta-workflows/decisions.meta-workflows.shared.schemas.js.map +1 -0
- package/dist/esm/meta-workflows/orchestration.meta-workflows.shared.schemas.d.ts +544 -0
- package/dist/esm/meta-workflows/orchestration.meta-workflows.shared.schemas.d.ts.map +1 -0
- package/dist/esm/meta-workflows/orchestration.meta-workflows.shared.schemas.js +638 -0
- package/dist/esm/meta-workflows/orchestration.meta-workflows.shared.schemas.js.map +1 -0
- package/dist/esm/{flows-actors/meta-workflows → meta-workflows}/portable-primitives.meta-workflows.shared.schemas.d.ts +15 -8
- package/dist/esm/meta-workflows/portable-primitives.meta-workflows.shared.schemas.d.ts.map +1 -0
- package/dist/esm/{flows-actors/meta-workflows → meta-workflows}/portable-primitives.meta-workflows.shared.schemas.js +15 -8
- package/dist/esm/meta-workflows/portable-primitives.meta-workflows.shared.schemas.js.map +1 -0
- package/dist/esm/meta-workflows.exports.d.ts +21 -25
- package/dist/esm/meta-workflows.exports.d.ts.map +1 -1
- package/dist/esm/meta-workflows.exports.js +21 -25
- package/dist/esm/meta-workflows.exports.js.map +1 -1
- package/dist/esm/notifications/email/email-submission.shared.enums.d.ts +16 -0
- package/dist/esm/notifications/email/email-submission.shared.enums.d.ts.map +1 -0
- package/dist/esm/notifications/email/email-submission.shared.enums.js +17 -0
- package/dist/esm/notifications/email/email-submission.shared.enums.js.map +1 -0
- package/dist/esm/notifications/email/email-template-registry.shared.schemas.d.ts +36 -0
- 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 +50 -3
- package/dist/esm/notifications/email/email-template-registry.shared.schemas.js.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.resources-config.schemas.js +4 -1
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.schemas.d.ts +2 -1
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.schemas.js +3 -2
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.schemas.js.map +1 -1
- 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 +44 -3
- package/dist/esm/notifications/m2m/webhook-config.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/notifications/notification-badges.shared.resources-config.schemas.d.ts +1 -1
- package/dist/esm/notifications/notification-badges.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/notification-badges.shared.resources-config.schemas.js +12 -33
- package/dist/esm/notifications/notification-badges.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/notifications/notifications.shared.schemas.d.ts +68 -6
- package/dist/esm/notifications/notifications.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/notifications.shared.schemas.js +68 -6
- package/dist/esm/notifications/notifications.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/application-owner-organization.shared.schemas.d.ts +145 -0
- package/dist/esm/organizations/application-owner-organization.shared.schemas.d.ts.map +1 -0
- package/dist/esm/organizations/application-owner-organization.shared.schemas.js +146 -0
- package/dist/esm/organizations/application-owner-organization.shared.schemas.js.map +1 -0
- package/dist/esm/organizations/organization-features.shared.resources-config.schemas.d.ts +2 -0
- 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 +39 -3
- 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 +1 -1
- package/dist/esm/organizations/organization-members.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-members.shared.resources-config.schemas.js +18 -14
- package/dist/esm/organizations/organization-members.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-members.shared.schemas.d.ts +1 -1
- package/dist/esm/organizations/organization-members.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-members.shared.schemas.js +9 -1
- package/dist/esm/organizations/organization-members.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-preferences.shared.schemas.d.ts +2 -1
- package/dist/esm/organizations/organization-preferences.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-preferences.shared.schemas.js +3 -0
- package/dist/esm/organizations/organization-preferences.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-profile.shared.schemas.d.ts +3 -1
- package/dist/esm/organizations/organization-profile.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-profile.shared.schemas.js +4 -2
- package/dist/esm/organizations/organization-profile.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-unit-narrowing.shared.d.ts +29 -2
- package/dist/esm/organizations/organization-unit-narrowing.shared.d.ts.map +1 -1
- package/dist/esm/organizations/organization-unit-narrowing.shared.js +27 -0
- package/dist/esm/organizations/organization-unit-narrowing.shared.js.map +1 -1
- package/dist/esm/organizations/organization-units.shared.resources-config.schemas.d.ts +2 -0
- package/dist/esm/organizations/organization-units.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-units.shared.resources-config.schemas.js +3 -0
- package/dist/esm/organizations/organization-units.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-units.shared.schemas.d.ts +17 -5
- package/dist/esm/organizations/organization-units.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-units.shared.schemas.js +65 -5
- package/dist/esm/organizations/organization-units.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organizations.shared.resources-config.schemas.d.ts +51 -7
- package/dist/esm/organizations/organizations.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organizations.shared.resources-config.schemas.js +151 -7
- package/dist/esm/organizations/organizations.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organizations.shared.schemas.d.ts +18 -83
- package/dist/esm/organizations/organizations.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organizations.shared.schemas.js +37 -19
- package/dist/esm/organizations/organizations.shared.schemas.js.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 +1 -0
- package/dist/esm/provider-registration-runtime.exports.d.ts.map +1 -1
- package/dist/esm/provider-registration-runtime.exports.js +1 -0
- package/dist/esm/provider-registration-runtime.exports.js.map +1 -1
- package/dist/esm/public-runtime/index.d.ts +53 -2
- package/dist/esm/public-runtime/index.d.ts.map +1 -1
- package/dist/esm/public-runtime/index.js +45 -2
- package/dist/esm/public-runtime/index.js.map +1 -1
- package/dist/esm/queue/jobs.shared.resources-config.schemas.d.ts +7 -8
- package/dist/esm/queue/jobs.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/queue/jobs.shared.resources-config.schemas.js +30 -6
- package/dist/esm/queue/jobs.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/queue/jobs.shared.schemas.d.ts +388 -2
- package/dist/esm/queue/jobs.shared.schemas.d.ts.map +1 -1
- package/dist/esm/queue/jobs.shared.schemas.js +315 -11
- package/dist/esm/queue/jobs.shared.schemas.js.map +1 -1
- package/dist/esm/queue/jobs.shared.utils.d.ts +6 -4
- package/dist/esm/queue/jobs.shared.utils.d.ts.map +1 -1
- package/dist/esm/queue/jobs.shared.utils.js +5 -4
- package/dist/esm/queue/jobs.shared.utils.js.map +1 -1
- package/dist/esm/queue/queues.shared.schemas.d.ts +20 -8
- package/dist/esm/queue/queues.shared.schemas.d.ts.map +1 -1
- package/dist/esm/queue/queues.shared.schemas.js +23 -18
- package/dist/esm/queue/queues.shared.schemas.js.map +1 -1
- package/dist/esm/queue/queues.shared.utils.d.ts +4 -2
- package/dist/esm/queue/queues.shared.utils.d.ts.map +1 -1
- package/dist/esm/queue/queues.shared.utils.js +4 -2
- package/dist/esm/queue/queues.shared.utils.js.map +1 -1
- package/dist/esm/rag/rag-retrieval-health.shared.d.ts +27 -0
- package/dist/esm/rag/rag-retrieval-health.shared.d.ts.map +1 -0
- package/dist/esm/rag/rag-retrieval-health.shared.js +29 -0
- package/dist/esm/rag/rag-retrieval-health.shared.js.map +1 -0
- package/dist/esm/requests/header-keys.shared.d.ts +6 -0
- package/dist/esm/requests/header-keys.shared.d.ts.map +1 -1
- package/dist/esm/requests/header-keys.shared.js +7 -0
- package/dist/esm/requests/header-keys.shared.js.map +1 -1
- package/dist/esm/requests/idempotency-key.shared.d.ts +76 -0
- package/dist/esm/requests/idempotency-key.shared.d.ts.map +1 -0
- package/dist/esm/requests/idempotency-key.shared.js +112 -0
- package/dist/esm/requests/idempotency-key.shared.js.map +1 -0
- package/dist/esm/requests/manual-controllers-routes-documentation.d.ts.map +1 -1
- package/dist/esm/requests/manual-controllers-routes-documentation.js +275 -20
- package/dist/esm/requests/manual-controllers-routes-documentation.js.map +1 -1
- package/dist/esm/requests/manual-controllers-routes-urls.d.ts +134 -0
- package/dist/esm/requests/manual-controllers-routes-urls.d.ts.map +1 -1
- package/dist/esm/requests/manual-controllers-routes-urls.js +153 -0
- package/dist/esm/requests/manual-controllers-routes-urls.js.map +1 -1
- package/dist/esm/requests/websocket.shared.schemas.d.ts +198 -20
- package/dist/esm/requests/websocket.shared.schemas.d.ts.map +1 -1
- package/dist/esm/requests/websocket.shared.schemas.js +236 -5
- package/dist/esm/requests/websocket.shared.schemas.js.map +1 -1
- package/dist/esm/resources/child-operations.shared.schemas.d.ts +56 -5
- package/dist/esm/resources/child-operations.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/child-operations.shared.schemas.js +97 -5
- package/dist/esm/resources/child-operations.shared.schemas.js.map +1 -1
- package/dist/esm/resources/context-policy.shared.schemas.d.ts +20 -0
- package/dist/esm/resources/context-policy.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/context-policy.shared.schemas.js +3 -0
- package/dist/esm/resources/context-policy.shared.schemas.js.map +1 -1
- package/dist/esm/resources/resources-config.shared.factory.d.ts.map +1 -1
- package/dist/esm/resources/resources-config.shared.factory.js +596 -34
- package/dist/esm/resources/resources-config.shared.factory.js.map +1 -1
- package/dist/esm/resources/resources-config.shared.schemas.d.ts +665 -40
- package/dist/esm/resources/resources-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/resources-config.shared.schemas.js +315 -22
- 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 +431 -69
- package/dist/esm/resources/resources-registry.shared.core.definitions.js.map +1 -1
- package/dist/esm/resources/resources.shared.core.definitions.d.ts +36 -0
- package/dist/esm/resources/resources.shared.core.definitions.d.ts.map +1 -1
- package/dist/esm/resources/resources.shared.core.definitions.js +46 -0
- package/dist/esm/resources/resources.shared.core.definitions.js.map +1 -1
- package/dist/esm/resources/resources.shared.schemas.d.ts +256 -10
- package/dist/esm/resources/resources.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/resources.shared.schemas.js +209 -9
- package/dist/esm/resources/resources.shared.schemas.js.map +1 -1
- package/dist/esm/resources/resources.shared.utils.d.ts +34 -8
- package/dist/esm/resources/resources.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/resources.shared.utils.js +69 -12
- package/dist/esm/resources/resources.shared.utils.js.map +1 -1
- package/dist/esm/resources/utils/composition-cascade-deletability.validation.d.ts +44 -12
- package/dist/esm/resources/utils/composition-cascade-deletability.validation.d.ts.map +1 -1
- package/dist/esm/resources/utils/composition-cascade-deletability.validation.js +46 -23
- package/dist/esm/resources/utils/composition-cascade-deletability.validation.js.map +1 -1
- package/dist/esm/resources/utils/dependent-lifecycle-classification.validation.d.ts +61 -0
- package/dist/esm/resources/utils/dependent-lifecycle-classification.validation.d.ts.map +1 -0
- package/dist/esm/resources/utils/dependent-lifecycle-classification.validation.js +79 -0
- package/dist/esm/resources/utils/dependent-lifecycle-classification.validation.js.map +1 -0
- package/dist/esm/resources/utils/initiator-stamped-field-satisfiability.validation.d.ts +60 -0
- package/dist/esm/resources/utils/initiator-stamped-field-satisfiability.validation.d.ts.map +1 -0
- package/dist/esm/resources/utils/initiator-stamped-field-satisfiability.validation.js +80 -0
- package/dist/esm/resources/utils/initiator-stamped-field-satisfiability.validation.js.map +1 -0
- package/dist/esm/resources/utils/populated-file-fields.shared.utils.d.ts +21 -0
- package/dist/esm/resources/utils/populated-file-fields.shared.utils.d.ts.map +1 -0
- package/dist/esm/resources/utils/populated-file-fields.shared.utils.js +159 -0
- package/dist/esm/resources/utils/populated-file-fields.shared.utils.js.map +1 -0
- package/dist/esm/resources/utils/resources-config-naming.utils.d.ts +15 -0
- package/dist/esm/resources/utils/resources-config-naming.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-naming.utils.js +56 -11
- package/dist/esm/resources/utils/resources-config-naming.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.dtos-builder.utils.d.ts +51 -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.dtos-builder.utils.js +210 -51
- package/dist/esm/resources/utils/resources-config-operations.dtos-builder.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.urls-builder.utils.d.ts +34 -0
- package/dist/esm/resources/utils/resources-config-operations.urls-builder.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.urls-builder.utils.js +45 -1
- package/dist/esm/resources/utils/resources-config-operations.urls-builder.utils.js.map +1 -1
- package/dist/esm/resources/utils/shared-persistence-collection.utils.d.ts +29 -0
- package/dist/esm/resources/utils/shared-persistence-collection.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/shared-persistence-collection.utils.js +30 -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/resources/utils/templatable-file-fields.shared.utils.js +49 -11
- package/dist/esm/resources/utils/templatable-file-fields.shared.utils.js.map +1 -1
- 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 +4 -1
- 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.map +1 -1
- package/dist/esm/security/api-keys/api-keys-organization.shared.resources-config.schemas.js +4 -1
- package/dist/esm/security/api-keys/api-keys-organization.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.dto.schemas.d.ts +129 -17
- package/dist/esm/security/authentications/authentication.shared.dto.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.dto.schemas.js +160 -6
- package/dist/esm/security/authentications/authentication.shared.dto.schemas.js.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.schemas.d.ts +324 -9
- package/dist/esm/security/authentications/authentication.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.schemas.js +411 -8
- package/dist/esm/security/authentications/authentication.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.utils.d.ts +87 -4
- package/dist/esm/security/authentications/authentication.shared.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.utils.js +95 -6
- package/dist/esm/security/authentications/authentication.shared.utils.js.map +1 -1
- package/dist/esm/security/authentications/consumable-token.shared.schemas.d.ts +23 -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 +23 -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 +7 -1
- package/dist/esm/security/authentications/cross-frontend-handoff.shared.dto.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/cross-frontend-handoff.shared.dto.schemas.js +7 -1
- package/dist/esm/security/authentications/cross-frontend-handoff.shared.dto.schemas.js.map +1 -1
- package/dist/esm/security/authentications/password-blocklist.shared.utils.d.ts +74 -0
- package/dist/esm/security/authentications/password-blocklist.shared.utils.d.ts.map +1 -0
- package/dist/esm/security/authentications/password-blocklist.shared.utils.js +122 -0
- package/dist/esm/security/authentications/password-blocklist.shared.utils.js.map +1 -0
- package/dist/esm/security/authentications/registration.shared.dto.schemas.d.ts +88 -2
- package/dist/esm/security/authentications/registration.shared.dto.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/registration.shared.dto.schemas.js +149 -2
- 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 +57 -11
- package/dist/esm/security/authentications/scim/scim-organization-unit-mapping.shared.d.ts.map +1 -1
- package/dist/esm/security/authentications/scim/scim-organization-unit-mapping.shared.js +44 -11
- package/dist/esm/security/authentications/scim/scim-organization-unit-mapping.shared.js.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.resources-config.schemas.js +20 -7
- package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.schemas.d.ts +16 -2
- 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 +32 -2
- 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.resources-config.schemas.js +7 -1
- package/dist/esm/security/authentications/scim/scim-tokens.shared.resources-config.schemas.js.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.resources-config.schemas.js +4 -1
- package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.resources-config.schemas.d.ts +27 -0
- package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.resources-config.schemas.js +109 -0
- package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.schemas.d.ts +66 -0
- package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.schemas.d.ts.map +1 -0
- package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.schemas.js +107 -0
- package/dist/esm/security/authentications/siem/siem-delivery-outbox.shared.schemas.js.map +1 -0
- package/dist/esm/security/authentications/siem/siem-export-config.shared.resources-config.schemas.d.ts +19 -0
- 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.resources-config.schemas.js +50 -13
- package/dist/esm/security/authentications/siem/siem-export-config.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/siem/siem-export-config.shared.schemas.d.ts +18 -6
- package/dist/esm/security/authentications/siem/siem-export-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-export-config.shared.schemas.js +133 -4
- package/dist/esm/security/authentications/siem/siem-export-config.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/sso/sso-config.shared.resources-config.schemas.d.ts +29 -3
- 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 +81 -22
- 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 +0 -40
- 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 +100 -26
- 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 +9 -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.resources-config.schemas.js +9 -1
- package/dist/esm/security/authentications/sso/sso-connection.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/sso/sso-connection.shared.schemas.d.ts +8 -2
- 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 +91 -4
- 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 +50 -6
- package/dist/esm/security/authorizations/administrative-continuity.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authorizations/administrative-continuity.shared.schemas.js +50 -6
- 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 +39 -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 +265 -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 +187 -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 +271 -0
- package/dist/esm/security/authorizations/application-access-grants.shared.schemas.js.map +1 -0
- package/dist/esm/security/authorizations/platform-access-grants.shared.schemas.d.ts +23 -0
- 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 +24 -0
- 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.defaults.js +6 -0
- package/dist/esm/security/authorizations/roles.shared.defaults.js.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.schemas.d.ts +14 -0
- package/dist/esm/security/authorizations/roles.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.schemas.js +19 -0
- package/dist/esm/security/authorizations/roles.shared.schemas.js.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.utils.js +2 -0
- package/dist/esm/security/authorizations/roles.shared.utils.js.map +1 -1
- package/dist/esm/security/connected-accounts/provider-credentials-organization.shared.resources-config.schemas.d.ts +4 -1
- package/dist/esm/security/connected-accounts/provider-credentials-organization.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/provider-credentials-user.shared.resources-config.schemas.d.ts +5 -2
- package/dist/esm/security/connected-accounts/provider-credentials-user.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/provider-credentials-user.shared.resources-config.schemas.js +13 -42
- package/dist/esm/security/connected-accounts/provider-credentials-user.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/connected-accounts/provider-credentials.shared.schemas.d.ts +257 -13
- package/dist/esm/security/connected-accounts/provider-credentials.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/connected-accounts/provider-credentials.shared.schemas.js +281 -49
- package/dist/esm/security/connected-accounts/provider-credentials.shared.schemas.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients-application.shared.resources-config.schemas.d.ts +6 -3
- 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 +74 -4
- 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 +5 -2
- 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 +105 -3
- package/dist/esm/security/oauth-clients/oauth-clients-organization.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/outbound-target-control.shared.schemas.d.ts +67 -0
- package/dist/esm/security/outbound-target-control.shared.schemas.d.ts.map +1 -0
- package/dist/esm/security/outbound-target-control.shared.schemas.js +69 -0
- package/dist/esm/security/outbound-target-control.shared.schemas.js.map +1 -0
- package/dist/esm/systems-of-record/system-of-record-credential-kind.shared.d.ts +159 -0
- package/dist/esm/systems-of-record/system-of-record-credential-kind.shared.d.ts.map +1 -0
- package/dist/esm/systems-of-record/system-of-record-credential-kind.shared.js +164 -0
- package/dist/esm/systems-of-record/system-of-record-credential-kind.shared.js.map +1 -0
- package/dist/esm/systems-of-record/system-of-record-declaration.shared.schemas.d.ts +209 -0
- package/dist/esm/systems-of-record/system-of-record-declaration.shared.schemas.d.ts.map +1 -0
- package/dist/esm/systems-of-record/system-of-record-declaration.shared.schemas.js +150 -0
- package/dist/esm/systems-of-record/system-of-record-declaration.shared.schemas.js.map +1 -0
- package/dist/esm/systems-of-record/system-of-record-env.shared.d.ts +79 -0
- package/dist/esm/systems-of-record/system-of-record-env.shared.d.ts.map +1 -0
- package/dist/esm/systems-of-record/system-of-record-env.shared.js +116 -0
- package/dist/esm/systems-of-record/system-of-record-env.shared.js.map +1 -0
- package/dist/esm/systems-of-record/system-of-record-error-codes.shared.d.ts +145 -0
- package/dist/esm/systems-of-record/system-of-record-error-codes.shared.d.ts.map +1 -0
- package/dist/esm/systems-of-record/system-of-record-error-codes.shared.js +146 -0
- package/dist/esm/systems-of-record/system-of-record-error-codes.shared.js.map +1 -0
- package/dist/esm/systems-of-record/system-of-record-facet.shared.schemas.d.ts +478 -0
- package/dist/esm/systems-of-record/system-of-record-facet.shared.schemas.d.ts.map +1 -0
- package/dist/esm/systems-of-record/system-of-record-facet.shared.schemas.js +619 -0
- package/dist/esm/systems-of-record/system-of-record-facet.shared.schemas.js.map +1 -0
- package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.resources-config.schemas.d.ts +31 -0
- package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.resources-config.schemas.js +232 -0
- package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.schemas.d.ts +127 -0
- package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.schemas.d.ts.map +1 -0
- package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.schemas.js +204 -0
- package/dist/esm/systems-of-record/system-of-record-partition-assignments.shared.schemas.js.map +1 -0
- package/dist/esm/testing/resource-config-builders.d.ts.map +1 -1
- package/dist/esm/testing/resource-config-builders.js +10 -4
- package/dist/esm/testing/resource-config-builders.js.map +1 -1
- package/dist/esm/users/anonymous-user-marketing-metadata.shared.schemas.d.ts +2 -1
- package/dist/esm/users/anonymous-user-marketing-metadata.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/anonymous-user-marketing-metadata.shared.schemas.js +2 -1
- package/dist/esm/users/anonymous-user-marketing-metadata.shared.schemas.js.map +1 -1
- package/dist/esm/users/anonymous-users.shared.resources-config.schemas.d.ts +139 -24
- package/dist/esm/users/anonymous-users.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/anonymous-users.shared.resources-config.schemas.js +255 -0
- package/dist/esm/users/anonymous-users.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/anonymous-users.shared.schema.d.ts +5 -3
- package/dist/esm/users/anonymous-users.shared.schema.d.ts.map +1 -1
- package/dist/esm/users/anonymous-users.shared.schema.js +18 -1
- package/dist/esm/users/anonymous-users.shared.schema.js.map +1 -1
- package/dist/esm/users/inbound-contacts.shared.resources-config.schemas.d.ts +2 -1
- package/dist/esm/users/inbound-contacts.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/inbound-contacts.shared.resources-config.schemas.js +23 -0
- package/dist/esm/users/inbound-contacts.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/inbound-contacts.shared.schemas.d.ts +2 -1
- package/dist/esm/users/inbound-contacts.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-consent-decision.shared.utils.d.ts +127 -0
- package/dist/esm/users/user-consent-decision.shared.utils.d.ts.map +1 -0
- package/dist/esm/users/user-consent-decision.shared.utils.js +189 -0
- package/dist/esm/users/user-consent-decision.shared.utils.js.map +1 -0
- package/dist/esm/users/user-identity-links.shared.resources-config.schemas.d.ts +1 -0
- 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 +1 -0
- package/dist/esm/users/user-identity-links.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-identity-links.shared.schemas.js +30 -0
- package/dist/esm/users/user-identity-links.shared.schemas.js.map +1 -1
- package/dist/esm/users/user-preferences-reset.shared.utils.d.ts +6 -6
- package/dist/esm/users/user-preferences-reset.shared.utils.js +6 -6
- package/dist/esm/users/user-preferences-reset.shared.utils.js.map +1 -1
- package/dist/esm/users/user-preferences.shared.resources-config.schemas.d.ts +74 -29
- package/dist/esm/users/user-preferences.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-preferences.shared.resources-config.schemas.js +99 -0
- package/dist/esm/users/user-preferences.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/user-profiles.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-profiles.shared.resources-config.schemas.js +25 -9
- package/dist/esm/users/user-profiles.shared.resources-config.schemas.js.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-preferences.shared.resources-config.schemas.js +12 -1
- package/dist/esm/users/user-self-preferences.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/user-self.shared.resources-config.schemas.d.ts +1 -0
- 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 +2 -2
- 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 +1 -0
- package/dist/esm/users/users.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/users.shared.resources-config.schemas.js +2 -2
- package/dist/esm/users/users.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/users.shared.schemas.d.ts +28 -10
- package/dist/esm/users/users.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/users.shared.schemas.js +86 -11
- package/dist/esm/users/users.shared.schemas.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +14 -35
- package/dist/esm/flows-actors/apps-blueprint/apps-blueprint-agent-personas.shared.enums.d.ts +0 -19
- package/dist/esm/flows-actors/apps-blueprint/apps-blueprint-agent-personas.shared.enums.d.ts.map +0 -1
- package/dist/esm/flows-actors/apps-blueprint/apps-blueprint-agent-personas.shared.enums.js +0 -35
- package/dist/esm/flows-actors/apps-blueprint/apps-blueprint-agent-personas.shared.enums.js.map +0 -1
- package/dist/esm/flows-actors/apps-blueprint/apps-blueprint.shared.schemas.d.ts +0 -213
- package/dist/esm/flows-actors/apps-blueprint/apps-blueprint.shared.schemas.d.ts.map +0 -1
- package/dist/esm/flows-actors/apps-blueprint/apps-blueprint.shared.schemas.js +0 -287
- package/dist/esm/flows-actors/apps-blueprint/apps-blueprint.shared.schemas.js.map +0 -1
- package/dist/esm/flows-actors/apps-blueprint/artifacts.apps-blueprint.shared.schemas.d.ts +0 -236
- package/dist/esm/flows-actors/apps-blueprint/artifacts.apps-blueprint.shared.schemas.d.ts.map +0 -1
- package/dist/esm/flows-actors/apps-blueprint/artifacts.apps-blueprint.shared.schemas.js +0 -212
- package/dist/esm/flows-actors/apps-blueprint/artifacts.apps-blueprint.shared.schemas.js.map +0 -1
- package/dist/esm/flows-actors/meta-workflows/actions.meta-workflows.shared.schemas.d.ts.map +0 -1
- package/dist/esm/flows-actors/meta-workflows/actions.meta-workflows.shared.schemas.js.map +0 -1
- package/dist/esm/flows-actors/meta-workflows/budget-authority.meta-workflows.shared.schemas.d.ts +0 -17
- package/dist/esm/flows-actors/meta-workflows/budget-authority.meta-workflows.shared.schemas.d.ts.map +0 -1
- package/dist/esm/flows-actors/meta-workflows/budget-authority.meta-workflows.shared.schemas.js +0 -31
- package/dist/esm/flows-actors/meta-workflows/budget-authority.meta-workflows.shared.schemas.js.map +0 -1
- package/dist/esm/flows-actors/meta-workflows/catalog.meta-workflows.shared.schemas.d.ts.map +0 -1
- package/dist/esm/flows-actors/meta-workflows/catalog.meta-workflows.shared.schemas.js.map +0 -1
- package/dist/esm/flows-actors/meta-workflows/context-selection.meta-workflows.shared.schemas.d.ts.map +0 -1
- package/dist/esm/flows-actors/meta-workflows/context-selection.meta-workflows.shared.schemas.js.map +0 -1
- package/dist/esm/flows-actors/meta-workflows/continuity-identifiers.meta-workflows.shared.schemas.d.ts +0 -28
- package/dist/esm/flows-actors/meta-workflows/continuity-identifiers.meta-workflows.shared.schemas.d.ts.map +0 -1
- package/dist/esm/flows-actors/meta-workflows/continuity-identifiers.meta-workflows.shared.schemas.js +0 -28
- package/dist/esm/flows-actors/meta-workflows/continuity-identifiers.meta-workflows.shared.schemas.js.map +0 -1
- package/dist/esm/flows-actors/meta-workflows/decisions.meta-workflows.shared.schemas.d.ts.map +0 -1
- package/dist/esm/flows-actors/meta-workflows/decisions.meta-workflows.shared.schemas.js.map +0 -1
- package/dist/esm/flows-actors/meta-workflows/execution-binding-common.meta-workflows.shared.schemas.d.ts +0 -100
- package/dist/esm/flows-actors/meta-workflows/execution-binding-common.meta-workflows.shared.schemas.d.ts.map +0 -1
- package/dist/esm/flows-actors/meta-workflows/execution-binding-common.meta-workflows.shared.schemas.js +0 -232
- package/dist/esm/flows-actors/meta-workflows/execution-binding-common.meta-workflows.shared.schemas.js.map +0 -1
- package/dist/esm/flows-actors/meta-workflows/execution-binding-vocabularies.meta-workflows.shared.schemas.d.ts +0 -29
- package/dist/esm/flows-actors/meta-workflows/execution-binding-vocabularies.meta-workflows.shared.schemas.d.ts.map +0 -1
- package/dist/esm/flows-actors/meta-workflows/execution-binding-vocabularies.meta-workflows.shared.schemas.js +0 -58
- package/dist/esm/flows-actors/meta-workflows/execution-binding-vocabularies.meta-workflows.shared.schemas.js.map +0 -1
- package/dist/esm/flows-actors/meta-workflows/portable-primitives.meta-workflows.shared.schemas.d.ts.map +0 -1
- package/dist/esm/flows-actors/meta-workflows/portable-primitives.meta-workflows.shared.schemas.js.map +0 -1
- package/dist/esm/flows-actors/task-continuity-binding.actors.shared.schemas.d.ts +0 -81
- package/dist/esm/flows-actors/task-continuity-binding.actors.shared.schemas.d.ts.map +0 -1
- package/dist/esm/flows-actors/task-continuity-binding.actors.shared.schemas.js +0 -82
- package/dist/esm/flows-actors/task-continuity-binding.actors.shared.schemas.js.map +0 -1
- package/dist/esm/flows-actors/utils/flow-actors.context-builder.apps-context.shared.utils.d.ts +0 -2
- package/dist/esm/flows-actors/utils/flow-actors.context-builder.apps-context.shared.utils.d.ts.map +0 -1
- package/dist/esm/flows-actors/utils/flow-actors.context-builder.apps-context.shared.utils.js +0 -1
- package/dist/esm/flows-actors/utils/flow-actors.context-builder.apps-context.shared.utils.js.map +0 -1
- /package/dist/esm/{flows-actors/meta-workflows → meta-workflows}/actions.meta-workflows.shared.schemas.d.ts +0 -0
- /package/dist/esm/{flows-actors/meta-workflows → meta-workflows}/actions.meta-workflows.shared.schemas.js +0 -0
- /package/dist/esm/{flows-actors/meta-workflows → meta-workflows}/catalog.meta-workflows.shared.schemas.d.ts +0 -0
- /package/dist/esm/{flows-actors/meta-workflows → meta-workflows}/catalog.meta-workflows.shared.schemas.js +0 -0
- /package/dist/esm/{flows-actors/meta-workflows → meta-workflows}/context-selection.meta-workflows.shared.schemas.d.ts +0 -0
- /package/dist/esm/{flows-actors/meta-workflows → meta-workflows}/context-selection.meta-workflows.shared.schemas.js +0 -0
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { ResourceConfiguration_QueueConfigSchema } from '../queue/queues.shared.schemas.js';
|
|
2
|
+
import { normalizeScheduledRecoveryPolicy } from '../queue/jobs.shared.schemas.js';
|
|
1
3
|
/**
|
|
2
4
|
* Operations Shared Schemas
|
|
3
5
|
*
|
|
4
6
|
* Reusable operation schemas for bulk actions and common operations
|
|
5
7
|
*/
|
|
6
|
-
import { ExpiresInDurationSchema, getImpersonalizeMaskValue, getImpersonalizeTreatment, getZodObjectShape, getZodType, isBackendOnlyField, isDiscriminatorField, isExcludedFromCreate, isExcludedFromUpdate, isBusinessKeyField, isZodObject, isSummaryField, isTemplatableFileField, isUniqueField, isVirtualField, SingleFileValueSchema, toPatchOptionalField, mainSchemaFieldIsClearable, unwrapSchema, getDataCategories, } from '@wildo-ai/zod-decorators';
|
|
8
|
+
import { ExpiresInDurationSchema, getImpersonalizeMaskValue, getImpersonalizeTreatment, getZodObjectShape, getZodType, isBackendOnlyField, isDiscriminatorField, isExcludedFromCreate, isExcludedFromUpdate, isBusinessKeyField, isZodObject, isSummaryField, isTemplatableFileField, isUniqueField, isVirtualField, SingleFileValueSchema, toPatchOptionalField, mainSchemaFieldIsClearable, unwrapSchema, getDataCategories, markPatchRequestDtoObject, } from '@wildo-ai/zod-decorators';
|
|
7
9
|
import { z } from 'zod';
|
|
8
10
|
import { ErrorType } from '../errors/errors.shared.schemas.js';
|
|
9
11
|
import { ErasureRetentionMode, ResourceDataSubjectKind, RetentionStatus, RetentionStatusSchema } from '../compliance/privacy/impersonalization.shared.schemas.js';
|
|
@@ -27,11 +29,13 @@ import { unknownPersonalDataCategories } from '../compliance/privacy/personal-da
|
|
|
27
29
|
* only when TypeScript must INVENT a specifier for an INFERRED type. Re-run the probe if a
|
|
28
30
|
* root-exported contract here ever starts inferring one.
|
|
29
31
|
*/
|
|
30
|
-
import { HttpApiResourceBindingSchema,
|
|
32
|
+
import { HttpApiResourceBindingSchema, assertHttpApiBindingDialectCoherence } from '../http-api-binding/http-api-binding.shared.schemas.js';
|
|
33
|
+
import { HTTP_API_ENGINE_INJECTED_FIELDS, HTTP_API_TENANT_ANCHOR_FIELD, READ_THROUGH_ORGANIZATION_UNIT_FIELD_NAME, } from '../http-api-binding/read-through-engine-anchors.shared.js';
|
|
34
|
+
import { HttpApiTransportDialect } from '../http-api-binding/http-api-transport-dialect.shared.js';
|
|
31
35
|
import { ExternalDataDestinationPopulation, ExternalDataFieldCoercion, ExternalDataMappingEntryKind, ExternalDataPipelineDeclarationSchema, assertExternalDataPipelineDeclarationCoherence, } from '../external-data/external-data-pipeline.shared.schemas.js';
|
|
32
36
|
import { HttpMethod } from '../requests/http-requests.shared.js';
|
|
33
37
|
import { ConsumableToken_ConsumptionMode, TokenAuthenticationPolicy } from '../security/authentications/consumable-token.shared.schemas.js';
|
|
34
|
-
import { OPERATION_VARIANT_KEY,
|
|
38
|
+
import { OPERATION_VARIANT_KEY, wrapRequestDtoAsBulk, resolveBulkOperationMaxSelection, Resources_Filter_BaseSchema, Resources_Filter_DateRangeSchema, Resources_Filter_NumberRangeSchema, isResourcesFilterNumberRangeSchema, createPaginationRequestSchema, DEFAULT_LIST_PAGE_CEILING, DEFAULT_SEARCH_PAGE_CEILING, createPaginationResponseMetadataSchema, ResourceGeneratedOperationKind, ResourceSystemAccessMode, PersistenceAdapter, isPersistenceAdapter, SortOrder, ResourceCollectionExportResponseSchema, } from './resources-config.shared.schemas.js';
|
|
35
39
|
import { CoreResourceOperation, CoreResourceType, coreResourceShared_FieldIdentifier } from './resources.shared.core.definitions.js';
|
|
36
40
|
import { PRIMARY_SCOPE_FIELD_IDENTIFIERS, PRIMARY_SCOPE_TO_CORE_RESOURCE_TYPE, FIELD_IDENTIFIER_TO_PRIMARY_SCOPE, RelationshipNature, ResourceOperationRiskLevel, ResourceOperationVariantType, ResourceOperation_ServiceRuntimeMode, ResourceParentResourceRequirement, ResourcePrimaryScope, ResourceRelationshipBulkAction, ResourceRelationshipBulkActionResultSchema, ResourceRelationshipBulkClearOperationRequestSchema, ResourceRelationshipBulkCreateOperationRequestSchema, ResourceRelationshipBulkLinkOperationRequestSchema, ResourceRelationshipBulkReplaceOperationRequestSchema, ResourceRelationshipBulkSetOperationRequestSchema, ResourceRelationshipBulkUnlinkOperationRequestSchema, ResourceRelationshipAccessScopeStrategy, ResourceRelationshipCardinality, ResourceTranspositionPolicy } from './resources.shared.schemas.js';
|
|
37
41
|
import { createResourcesRelationship } from './resources-relationships.shared.factory.js';
|
|
@@ -41,6 +45,7 @@ import { ResourcesSummaryUtils } from './utils/resources-summary.utils.js';
|
|
|
41
45
|
import { collectTemplatableFileFieldPaths, stripTemplatableFileFieldsRecursively } from './utils/templatable-file-fields.shared.utils.js';
|
|
42
46
|
import { selectByPersistenceAdapter } from './utils/persistence-adapter-discrimination.shared.utils.js';
|
|
43
47
|
import { isServiceResolvableDefaultOperation, SERVICE_RESOLVABLE_OPERATION_VARIANT_TYPES, URL_BEARING_OPERATION_VARIANT_TYPES, } from './utils/resource-operation-type-guards.utils.js';
|
|
48
|
+
import { describeCaughtError } from '../errors/errors.shared.utils.js';
|
|
44
49
|
// --------------------------------
|
|
45
50
|
// Error Helpers
|
|
46
51
|
// --------------------------------
|
|
@@ -140,6 +145,57 @@ const RETENTION_REQUIRED_SERVICE_RESOLVABLE_OPERATIONS = [
|
|
|
140
145
|
why: 'the see-through read primitive listRetainedAsSystem surfaces retained records via LIST',
|
|
141
146
|
},
|
|
142
147
|
];
|
|
148
|
+
/**
|
|
149
|
+
* The operations an `isAnonymizable` resource must expose to the SERVICE dispatch
|
|
150
|
+
* layer, with the `AnonymousSessionBackendService` primitive that needs each one.
|
|
151
|
+
*
|
|
152
|
+
* Sibling of {@link RETENTION_REQUIRED_SERVICE_RESOLVABLE_OPERATIONS} and consumed by
|
|
153
|
+
* the same TWO halves — presence (is it declared in `coreOperations`?) and
|
|
154
|
+
* resolvability (does it have a default variant `getServiceOperationPathDefault`
|
|
155
|
+
* can serve?). A separate constant rather than a shared one, because the two
|
|
156
|
+
* capabilities demand different operations for different reasons and merging them
|
|
157
|
+
* would make each entry's `why` unreadable.
|
|
158
|
+
*
|
|
159
|
+
* **Each entry is a DISJUNCTION, and that is the whole design decision.** Retention
|
|
160
|
+
* needs three specific operations, so its constant is a flat list of single ops.
|
|
161
|
+
* The anonymous-session cleanup needs to DELETE a known id set, and
|
|
162
|
+
* `deleteOwnedRecords` deliberately serves that with `DELETE_MANY` when the
|
|
163
|
+
* resource publishes one and per-row `DELETE` otherwise — so demanding
|
|
164
|
+
* `DELETE_MANY` would force every anonymizable resource to publish a bulk-delete
|
|
165
|
+
* surface it may not want (`draftNotes`, the only such resource today, publishes
|
|
166
|
+
* `DELETE` alone), while demanding `DELETE` would refuse a resource that
|
|
167
|
+
* legitimately publishes only the bulk form. The honest requirement is "at least
|
|
168
|
+
* one of these resolves", which is exactly what the runtime probes.
|
|
169
|
+
*
|
|
170
|
+
* Measured 2026-09-09: before this guard existed, `deleteOwnedRecords` resolved
|
|
171
|
+
* `DELETE_MANY` unconditionally, so for `draftNotes` the cleanup batch's phase 1
|
|
172
|
+
* threw on every run — the per-session catch counted an error and the
|
|
173
|
+
* `ANONYMOUS_USERS` anchor row was never removed. The runtime is now correct; this
|
|
174
|
+
* constant is what refuses the configuration at boot instead of discovering it at
|
|
175
|
+
* the first sweep.
|
|
176
|
+
*/
|
|
177
|
+
const ANONYMIZABLE_REQUIRED_SERVICE_RESOLVABLE_OPERATIONS = [
|
|
178
|
+
{
|
|
179
|
+
operations: [CoreResourceOperation.LIST],
|
|
180
|
+
primitive: 'listAnonymousRecords',
|
|
181
|
+
why: 'the transposition and cleanup lookups list a session\'s rows via LIST',
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
operations: [CoreResourceOperation.UPDATE_MANY],
|
|
185
|
+
primitive: 'reassignOwnership (updateManyAsSystem)',
|
|
186
|
+
why: 'the anon→user transposition rewrites { userId, anonymousUserId } via updateManyAsSystem',
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
operations: [CoreResourceOperation.DELETE_MANY, CoreResourceOperation.DELETE],
|
|
190
|
+
primitive: 'deleteOwnedRecords',
|
|
191
|
+
why: 'the expired-session sweep, the DISCARD transposition arm and the REPLACE pre-delete all remove '
|
|
192
|
+
+ 'a known id set, preferring DELETE_MANY and falling back to per-row DELETE',
|
|
193
|
+
},
|
|
194
|
+
];
|
|
195
|
+
/** Human-readable "A or B" rendering of one requirement group's alternatives. */
|
|
196
|
+
function describeOperationAlternatives(operations) {
|
|
197
|
+
return operations.length === 1 ? String(operations[0]) : operations.join(' or ');
|
|
198
|
+
}
|
|
143
199
|
function assertOperationPathKeySegment(value, label, operation) {
|
|
144
200
|
if (value.includes(' | ')) {
|
|
145
201
|
throw createConfigurationError(`Operation '${operation}' cannot use ${label} '${value}' because operation path keys reserve the delimiter ' | '`);
|
|
@@ -514,6 +570,41 @@ function validateTokenGenerationConfig(config, resourceIdentifier, operationIden
|
|
|
514
570
|
`consumeAt only applies to one-off session tokens.`);
|
|
515
571
|
}
|
|
516
572
|
}
|
|
573
|
+
/**
|
|
574
|
+
* Validates tokenAuthentication configuration at build time.
|
|
575
|
+
*
|
|
576
|
+
* **The only thing this refuses is an EMPTY `types` array, and that is the whole point.**
|
|
577
|
+
* `types: []` is well-typed, reads as "no restriction needed", and used to fail OPEN: the runtime
|
|
578
|
+
* collapsed an empty list to `undefined` and `ConsumableTokenBackendService.validateToken` treats
|
|
579
|
+
* `undefined` as "the caller does its own binding check", so the operation accepted EVERY consumable
|
|
580
|
+
* token type in the system — a password-reset link, an email-verification link, an OAuth state token
|
|
581
|
+
* — with that token's `roles` flowing into the execution context. That is the confused-deputy shape:
|
|
582
|
+
* one token namespace, several verifiers, and an audience check that was optional at the verifier.
|
|
583
|
+
*
|
|
584
|
+
* Refusing here rather than at the verifier is deliberate. A runtime refusal turns an authoring
|
|
585
|
+
* mistake into a request-time failure on a path nobody may exercise before production; a build-time
|
|
586
|
+
* refusal makes the shape unrepresentable, because a resource config is constructed at module load
|
|
587
|
+
* and an application carrying one cannot boot. `validateToken` ALSO refuses an empty array now, as
|
|
588
|
+
* the chokepoint backstop for a config that never passed through this factory — see issue #313.
|
|
589
|
+
*
|
|
590
|
+
* An operation that genuinely wants no type constraint has no expression here and must not get one:
|
|
591
|
+
* the correct authoring is to name every type the operation accepts. A verifier that owns its own
|
|
592
|
+
* binding check (the file-share download, `validateFileToken`) calls `validateToken` directly and
|
|
593
|
+
* never declares `tokenAuthentication` at all.
|
|
594
|
+
*/
|
|
595
|
+
function validateTokenAuthenticationConfig(config, resourceIdentifier, operationIdentifier) {
|
|
596
|
+
const prefix = `[${resourceIdentifier}.${operationIdentifier}] tokenAuthentication`;
|
|
597
|
+
if (!config.types || config.types.length === 0) {
|
|
598
|
+
throw createConfigurationError(`${prefix}: types must be a non-empty array of the consumable token types this operation accepts. ` +
|
|
599
|
+
`An empty list is not "no restriction" — it would accept EVERY consumable token type in the ` +
|
|
600
|
+
`system (password-reset, email-verification, OAuth state, …) as authentication for this ` +
|
|
601
|
+
`operation, with that token's roles. Name the types explicitly.`);
|
|
602
|
+
}
|
|
603
|
+
if (!config.policy) {
|
|
604
|
+
throw createConfigurationError(`${prefix}: policy is required (ALTERNATIVE — the token replaces JWT auth; or ADDITIVE — the ` +
|
|
605
|
+
`token is required on top of it).`);
|
|
606
|
+
}
|
|
607
|
+
}
|
|
517
608
|
/**
|
|
518
609
|
* Validates tokenRevocation configuration at build time.
|
|
519
610
|
*/
|
|
@@ -690,7 +781,8 @@ function buildUpdateRequestDto(mainSchema, customExclusions) {
|
|
|
690
781
|
// back over the stored value (see `toPatchOptionalField`).
|
|
691
782
|
updateShape[fieldName] = toPatchOptionalField(stripTemplatableFileFieldsRecursively(fieldSchema));
|
|
692
783
|
}
|
|
693
|
-
|
|
784
|
+
// PATCH write rule: absent key untouched, null clears — the fact a form reads to clear a field (#989).
|
|
785
|
+
return stripTemplatableFileFieldsRecursively(markPatchRequestDtoObject(z.object(updateShape)));
|
|
694
786
|
}
|
|
695
787
|
catch {
|
|
696
788
|
// If schema is not an object, return as-is
|
|
@@ -1325,6 +1417,13 @@ export function createResourceSearchQueryRequestSchema(params) {
|
|
|
1325
1417
|
if (schema instanceof z.ZodDate) {
|
|
1326
1418
|
processedFields[key] = Resources_Filter_DateRangeSchema.optional();
|
|
1327
1419
|
}
|
|
1420
|
+
else if (isResourcesFilterNumberRangeSchema(schema)) {
|
|
1421
|
+
// Already the range vocabulary — the author wrote it, which is the opt-in. Named here
|
|
1422
|
+
// rather than left to the fallback below so the numeric range is a VISIBLE branch beside
|
|
1423
|
+
// the date one; the two are the framework's only structured filter shapes and a reader
|
|
1424
|
+
// looking for "which filters are ranges" must find both in one place.
|
|
1425
|
+
processedFields[key] = Resources_Filter_NumberRangeSchema.optional();
|
|
1426
|
+
}
|
|
1328
1427
|
else if (schema instanceof z.ZodString) {
|
|
1329
1428
|
processedFields[key] = schema.optional();
|
|
1330
1429
|
}
|
|
@@ -1486,7 +1585,12 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
1486
1585
|
create: ResourceSystemAccessMode.FORBIDDEN,
|
|
1487
1586
|
update: ResourceSystemAccessMode.FORBIDDEN,
|
|
1488
1587
|
updateMany: ResourceSystemAccessMode.FORBIDDEN,
|
|
1489
|
-
}, isAnonymizable = false,
|
|
1588
|
+
}, isAnonymizable = false,
|
|
1589
|
+
// Carried through UNCHANGED and with no default. Absent means "this resource is not the erasure
|
|
1590
|
+
// lane", which is true of almost every resource — a default here would make every resource claim
|
|
1591
|
+
// to be one. The bindings are validated at boot, not here: this factory has the declaration but
|
|
1592
|
+
// not the registry, and a name resolves against the resource's own schema and operations.
|
|
1593
|
+
subjectErasureLane, transpositionPolicy, retentionPolicy, dataSubjectPolicy, portabilityPolicy, persistenceAdapter, persistenceAdapterIsolation, httpApiBinding, introspectionBinding, coreOperations, customOperation, operationsConfiguration, } = params;
|
|
1490
1594
|
/**
|
|
1491
1595
|
* HTTP_API ↔ binding coherence — enforced at AUTHORING, both directions, because each half
|
|
1492
1596
|
* alone is a contradiction the backend could only discover later and worse:
|
|
@@ -1547,7 +1651,7 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
1547
1651
|
assertHttpApiBindingDialectCoherence(bindingParse.data);
|
|
1548
1652
|
}
|
|
1549
1653
|
catch (error) {
|
|
1550
|
-
throw createConfigurationError(`[${resourceIdentifier}] invalid httpApiBinding declaration: ${
|
|
1654
|
+
throw createConfigurationError(`[${resourceIdentifier}] invalid httpApiBinding declaration: ${describeCaughtError(error)}`);
|
|
1551
1655
|
}
|
|
1552
1656
|
return bindingParse.data;
|
|
1553
1657
|
})();
|
|
@@ -1593,7 +1697,7 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
1593
1697
|
assertHttpApiBindingDialectCoherence(declaration.binding);
|
|
1594
1698
|
}
|
|
1595
1699
|
catch (error) {
|
|
1596
|
-
refuse(
|
|
1700
|
+
refuse(describeCaughtError(error));
|
|
1597
1701
|
}
|
|
1598
1702
|
const shape = getZodObjectShape(mainSchema);
|
|
1599
1703
|
const requireMappedTarget = (fieldName, context) => {
|
|
@@ -1627,6 +1731,34 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
1627
1731
|
if (!isUniqueField(keyFieldSchema)) {
|
|
1628
1732
|
refuse(`remoteKeyLocalField: '${declaration.remoteKeyLocalField}' must ALSO be declared .isUnique(). The schema planner derives a UNIQUE constraint from .isUnique() and NOT from .isBusinessKey(), so without it the store would accept two rows for one remote row whenever two runs overlap — the merge would be enforced only by this engine's read-then-write, never by the database.`);
|
|
1629
1733
|
}
|
|
1734
|
+
/*
|
|
1735
|
+
* The two PARTITION stamps (#1058 E4), when the source instance is partitioned.
|
|
1736
|
+
*
|
|
1737
|
+
* Validated through `requireMappedTarget` like every other engine-written target, so both
|
|
1738
|
+
* inherit the `.excludeFromCreate()/.excludeFromUpdate()` requirement — these decide who may see
|
|
1739
|
+
* a row and whether an orphan pass deletes it, and a caller that could write either could move
|
|
1740
|
+
* its own rows into another subsidiary's confinement or out of the orphan comparison entirely.
|
|
1741
|
+
*
|
|
1742
|
+
* Both must ACCEPT ABSENCE, and that is the one rule the sibling `remoteKeyLocalField` does not
|
|
1743
|
+
* share. A row whose partition field is unset is SHARED (E2) — it belongs to every caller and to
|
|
1744
|
+
* no unit — so both stamps land `null` on it. A required target would reject exactly the rows
|
|
1745
|
+
* the decision says everyone may see, and it would reject them at LOAD time, per row, with a
|
|
1746
|
+
* reason about a field the author never wrote a value for.
|
|
1747
|
+
*/
|
|
1748
|
+
for (const [label, partitionField] of [
|
|
1749
|
+
['partitionUnitLocalField', declaration.partitionUnitLocalField],
|
|
1750
|
+
['partitionKeyLocalField', declaration.partitionKeyLocalField],
|
|
1751
|
+
]) {
|
|
1752
|
+
if (partitionField === undefined)
|
|
1753
|
+
continue;
|
|
1754
|
+
const partitionSchema = requireMappedTarget(partitionField, label);
|
|
1755
|
+
if (!(unwrapSchema(partitionSchema) instanceof z.ZodString)) {
|
|
1756
|
+
refuse(`${label}: '${partitionField}' must be a STRING field — it stores ${label === 'partitionUnitLocalField' ? 'an ORGANIZATION_UNITS id' : "the remote partition key in the canonical text an assignment row holds"}.`);
|
|
1757
|
+
}
|
|
1758
|
+
if (unwrapSchema(partitionSchema) === partitionSchema) {
|
|
1759
|
+
refuse(`${label}: '${partitionField}' must be optional or nullable. A row whose remote partition field is unset is SHARED — it belongs to every caller and to no unit — and this stamp lands null on it, so a required target rejects exactly the rows every caller is entitled to see.`);
|
|
1760
|
+
}
|
|
1761
|
+
}
|
|
1630
1762
|
for (const entry of declaration.mapping) {
|
|
1631
1763
|
const targetSchema = requireMappedTarget(entry.localField, `mapping('${entry.localField}')`);
|
|
1632
1764
|
if (entry.kind === ExternalDataMappingEntryKind.REMOTE_FIELD) {
|
|
@@ -1775,6 +1907,194 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
1775
1907
|
`(DERIVE RESOURCE PRIMARY SCOPE) for the full rationale.`);
|
|
1776
1908
|
}
|
|
1777
1909
|
// ========================================
|
|
1910
|
+
// HTTP_API × PRIMARY SCOPE — a system of record's rows belong to the OWNER organization
|
|
1911
|
+
// ========================================
|
|
1912
|
+
//
|
|
1913
|
+
// Rows read out of a system of record are STAMPED with the organization that owns the application
|
|
1914
|
+
// (#1055 §6), and the engine's per-row gate reads that stamp. Three things have to be true of the
|
|
1915
|
+
// resource for the stamp to mean anything, and all three are checkable HERE.
|
|
1916
|
+
//
|
|
1917
|
+
// ## Why here, and not at registration — R13 was measured and is wrong on this half
|
|
1918
|
+
//
|
|
1919
|
+
// #1055's review pass says "the resource factory never sees relationships", so the anchor check
|
|
1920
|
+
// must move to boot registration. It does see them: `resourceRelationships` is a parameter of this
|
|
1921
|
+
// function (a resource config is a FUNCTION of the registry's relationship list — see any
|
|
1922
|
+
// `*.resources-config.ts`), and `primaryScopeRelationship` is resolved from it thirty lines up.
|
|
1923
|
+
//
|
|
1924
|
+
// So the split the plan prescribed buys nothing and costs the author their error at the moment they
|
|
1925
|
+
// write the file. What genuinely CANNOT be checked here is the INSTANCE — whether `system` names a
|
|
1926
|
+
// declared one and whether the dialects agree — because the saas configuration is not in scope in
|
|
1927
|
+
// an application's `shared-lib`. That half stays at registration, which is the first place both the
|
|
1928
|
+
// binding and the declaration are visible.
|
|
1929
|
+
if (resolvedHttpApiBinding !== undefined) {
|
|
1930
|
+
if (resourcePrimaryScope !== ResourcePrimaryScope.ORGANIZATIONS) {
|
|
1931
|
+
throw createConfigurationError(`[${resourceIdentifier}] an http-api resource must be ORGANIZATIONS-scoped, and this one resolves to `
|
|
1932
|
+
+ `'${resourcePrimaryScope}'. Its rows are stamped with the organization that owns the application, and the `
|
|
1933
|
+
+ `per-row tenant gate reads that stamp — an APPLICATION- or USER_SELF-scoped resource has no organization in `
|
|
1934
|
+
+ `its execution context to compare it against, so every read would be decided by a field nothing could match.`);
|
|
1935
|
+
}
|
|
1936
|
+
/*
|
|
1937
|
+
* The anchor must be REQUIRES_CONTEXT, and it must name no foreign key.
|
|
1938
|
+
*
|
|
1939
|
+
* STANDALONE is the one that was MEASURED to fail rather than reasoned about: it answered
|
|
1940
|
+
* 403 `parent_scope_denied` to an ORG_OWNER, because `initiatorIds.organizationId` is filled only
|
|
1941
|
+
* from URL parameters and a standalone resource is not routed under its scope parent.
|
|
1942
|
+
*
|
|
1943
|
+
* A `foreignKeyField` would be a field the projection can never fill: a remote row carries no
|
|
1944
|
+
* Wildo organization id, which is the entire reason the stamp exists. Naming one would make every
|
|
1945
|
+
* row look as though it declared a tenant it does not have.
|
|
1946
|
+
*/
|
|
1947
|
+
if (primaryScopeRelationship !== undefined) {
|
|
1948
|
+
if (primaryScopeRelationship.accessScopeStrategy !== ResourceRelationshipAccessScopeStrategy.REQUIRES_CONTEXT) {
|
|
1949
|
+
throw createConfigurationError(`[${resourceIdentifier}] an http-api resource's primary-scope relationship must be REQUIRES_CONTEXT, and this `
|
|
1950
|
+
+ `one is '${String(primaryScopeRelationship.accessScopeStrategy)}'. A STANDALONE anchor is not routed under its `
|
|
1951
|
+
+ `organization, so the execution context carries no organization id and an ORG_OWNER is answered `
|
|
1952
|
+
+ `403 parent_scope_denied — measured, not inferred.`);
|
|
1953
|
+
}
|
|
1954
|
+
if (primaryScopeRelationship.foreignKeyField !== undefined) {
|
|
1955
|
+
throw createConfigurationError(`[${resourceIdentifier}] an http-api resource's primary-scope relationship declares `
|
|
1956
|
+
+ `foreignKeyField '${String(primaryScopeRelationship.foreignKeyField)}', which the projection can never fill — `
|
|
1957
|
+
+ `a remote row carries no Wildo organization id. The tenant anchor is STAMPED onto the projected row from the `
|
|
1958
|
+
+ `application's owner organization; remove the foreign key.`);
|
|
1959
|
+
}
|
|
1960
|
+
}
|
|
1961
|
+
}
|
|
1962
|
+
// ========================================
|
|
1963
|
+
// EXTERNAL-DATA PIPELINE × PRIMARY SCOPE — the destination is ORGANIZATIONS-owned, and the ENGINE
|
|
1964
|
+
// supplies the tenant
|
|
1965
|
+
// ========================================
|
|
1966
|
+
//
|
|
1967
|
+
// Since #868 a pipeline load STAMPS every entry with the organization that owns the application
|
|
1968
|
+
// (#1054), under the destination's own declared foreign key. So the question this rule asks has
|
|
1969
|
+
// inverted: it used to demand that the AUTHOR supply the tenant, and now it demands that the author
|
|
1970
|
+
// leave room for the ENGINE to.
|
|
1971
|
+
//
|
|
1972
|
+
// ## What the previous rule was, and why it could not stay
|
|
1973
|
+
//
|
|
1974
|
+
// It refused a required scope FK that no mapping supplied, because a load genuinely carried no
|
|
1975
|
+
// tenant. MEASURED 2026-09-11 against a real Mongo store, through the real engines, on a
|
|
1976
|
+
// destination shaped exactly like Wonder Todos' `externalCustomers`:
|
|
1977
|
+
//
|
|
1978
|
+
// | declaration | run | rows | tenant | reachable |
|
|
1979
|
+
// |-----------------------------------------------|--------------|------|--------|-----------|
|
|
1980
|
+
// | no mapping onto the scope FK | completed | 2 | NO | 0 |
|
|
1981
|
+
// | a CONSTANT mapping onto the scope FK | completed | 2 | YES | 2 |
|
|
1982
|
+
//
|
|
1983
|
+
// The first row is why a refusal existed at all: a `completed-pass` run with `entriesFailed: 0`
|
|
1984
|
+
// that writes rows no contextual read can find. A silent success producing unreachable data is
|
|
1985
|
+
// strictly worse than a refusal.
|
|
1986
|
+
//
|
|
1987
|
+
// But both remedies it offered are now WRONG. A `CONSTANT` id cannot be authored — organizations
|
|
1988
|
+
// are created at runtime, so there is no id to commit — and a STANDALONE anchor was measured to
|
|
1989
|
+
// answer 403 `parent_scope_denied` to an ORG_OWNER, because `initiatorIds.organizationId` is filled
|
|
1990
|
+
// only from URL parameters and a standalone resource is not routed under its scope parent. The rule
|
|
1991
|
+
// was refusing the one correct shape and recommending two broken ones.
|
|
1992
|
+
//
|
|
1993
|
+
// ## What it refuses now, and why each one is a LIE rather than an incompleteness
|
|
1994
|
+
//
|
|
1995
|
+
// Every clause below rejects a declaration that would be UNTRUE if it ran, which is the test
|
|
1996
|
+
// `application-creation-directive.md` sets for a refusal. None of them asks anyone to decide
|
|
1997
|
+
// anything: each names the one shape that works.
|
|
1998
|
+
if (externalDataPipeline !== undefined) {
|
|
1999
|
+
const pipelineDestinationRefusal = (reason) => {
|
|
2000
|
+
throw createConfigurationError(`[${resourceIdentifier}] invalid externalDataPipeline declaration: ${reason}
|
|
2001
|
+
`
|
|
2002
|
+
+ `
|
|
2003
|
+
`
|
|
2004
|
+
+ `A pipeline reads a SYSTEM OF RECORD — a deployment the operator runs, read with the application's own
|
|
2005
|
+
`
|
|
2006
|
+
+ `service identity — so every row it loads belongs to the organization that OWNS the application, and the
|
|
2007
|
+
`
|
|
2008
|
+
+ `engine stamps that organization onto each entry as it is built. What the destination owes is somewhere
|
|
2009
|
+
`
|
|
2010
|
+
+ `to put it: an ORGANIZATIONS primary scope, reached through a ROUTED relationship
|
|
2011
|
+
`
|
|
2012
|
+
+ `(accessScopeStrategy: REQUIRES_CONTEXT) that names a REQUIRED foreignKeyField, with that field mapped by
|
|
2013
|
+
`
|
|
2014
|
+
+ `nothing and declared .excludeFromCreate().excludeFromUpdate().`);
|
|
2015
|
+
};
|
|
2016
|
+
// (a) The destination must be ORGANIZATIONS-scoped. Decision Q2 of #1049: system-of-record data
|
|
2017
|
+
// belongs to the owner organization, so an APPLICATION- or USER_SELF-scoped destination is a
|
|
2018
|
+
// statement about ownership that contradicts where the rows come from.
|
|
2019
|
+
if (resourcePrimaryScope !== ResourcePrimaryScope.ORGANIZATIONS) {
|
|
2020
|
+
pipelineDestinationRefusal(`its primary scope is ${String(resourcePrimaryScope)}, and a system-of-record destination must be ORGANIZATIONS.`);
|
|
2021
|
+
}
|
|
2022
|
+
// (b) There must BE a routed scope relationship carrying a foreign key. Without one the stamp has
|
|
2023
|
+
// nowhere to land: a field the schema does not declare is dropped by the strict re-parse, and
|
|
2024
|
+
// the row lands unanchored — the measured failure above, arriving through the fix for it.
|
|
2025
|
+
// STANDALONE is called out by name because it is the remedy the previous rule recommended.
|
|
2026
|
+
if (primaryScopeRelationship === undefined) {
|
|
2027
|
+
pipelineDestinationRefusal('it declares no primary-scope relationship, so a loaded row has no tenant field.');
|
|
2028
|
+
}
|
|
2029
|
+
if (primaryScopeRelationship.accessScopeStrategy === ResourceRelationshipAccessScopeStrategy.STANDALONE) {
|
|
2030
|
+
pipelineDestinationRefusal('its primary-scope relationship is STANDALONE. A standalone resource is not routed under its organization, so '
|
|
2031
|
+
+ '`initiatorIds.organizationId` is never filled and an ORG_OWNER is answered 403 parent_scope_denied — measured '
|
|
2032
|
+
+ 'on `billableServices`, 2026-09-14. This was the previous rule\'s own first recommendation.');
|
|
2033
|
+
}
|
|
2034
|
+
const scopeForeignKeyField = primaryScopeRelationship.foreignKeyField;
|
|
2035
|
+
if (scopeForeignKeyField === undefined) {
|
|
2036
|
+
pipelineDestinationRefusal('its primary-scope relationship names no foreignKeyField, so there is no column to stamp the owner organization '
|
|
2037
|
+
+ 'onto. (A VIRTUAL read-through resource is the opposite case and must NOT name one — its rows are projected, '
|
|
2038
|
+
+ 'never stored.)');
|
|
2039
|
+
}
|
|
2040
|
+
// (c) Nothing may MAP onto the tenant field. Two sources of truth for the tenant is the defect,
|
|
2041
|
+
// not a convenience: a mapping wins at load time and the stamp becomes decoration.
|
|
2042
|
+
if (externalDataPipeline.mapping.some((entry) => entry.localField === scopeForeignKeyField)) {
|
|
2043
|
+
pipelineDestinationRefusal(`a mapping entry writes '${String(scopeForeignKeyField)}', which the engine stamps. Two sources of truth for the `
|
|
2044
|
+
+ 'tenant is exactly the ambiguity this rule exists to remove — remove the mapping entry.');
|
|
2045
|
+
}
|
|
2046
|
+
// (d) The tenant field must be REQUIRED. Optional means "a row without a tenant is legal", and no
|
|
2047
|
+
// row loaded from a system of record is: an untenanted row is unreadable, and the schema would
|
|
2048
|
+
// be promising that it is a supported state.
|
|
2049
|
+
const scopeFieldSchema = getZodObjectShape(mainSchema)[scopeForeignKeyField];
|
|
2050
|
+
if (scopeFieldSchema === undefined) {
|
|
2051
|
+
pipelineDestinationRefusal(`its primary-scope relationship names foreignKeyField '${String(scopeForeignKeyField)}', which the schema does not `
|
|
2052
|
+
+ 'declare. The stamp would be dropped by the strict re-parse and every row would land unanchored.');
|
|
2053
|
+
}
|
|
2054
|
+
// `unwrapSchema` strips optional/nullable/default wrappers, so an unwrapped schema IDENTICAL to
|
|
2055
|
+
// the declared one means nothing wrapped it — the same test the mapping validation above uses.
|
|
2056
|
+
if (unwrapSchema(scopeFieldSchema) !== scopeFieldSchema) {
|
|
2057
|
+
pipelineDestinationRefusal(`'${String(scopeForeignKeyField)}' is optional, nullable or defaulted. A row loaded from a system of record always `
|
|
2058
|
+
+ 'has an owner, so an absent tenant is not a state this resource can be in — and declaring it legal makes an '
|
|
2059
|
+
+ 'unreadable row look like a supported one.');
|
|
2060
|
+
}
|
|
2061
|
+
// (e) The tenant field must be excluded from CREATE and UPDATE. It is engine-supplied, so a
|
|
2062
|
+
// client that could send it could hand its own rows to another organization — and one that
|
|
2063
|
+
// could update it could move them.
|
|
2064
|
+
if (!isExcludedFromCreate(scopeFieldSchema) || !isExcludedFromUpdate(scopeFieldSchema)) {
|
|
2065
|
+
pipelineDestinationRefusal(`'${String(scopeForeignKeyField)}' is engine-supplied and must be declared `
|
|
2066
|
+
+ '.excludeFromCreate().excludeFromUpdate(). Without them a caller can name the tenant on a write — creating a row '
|
|
2067
|
+
+ 'under another organization, or moving an existing one out of its own.');
|
|
2068
|
+
}
|
|
2069
|
+
/*
|
|
2070
|
+
* (f) The destination population is NOT constrained here, and that DIVERGES from #868's review
|
|
2071
|
+
* decision R2(e), which said to refuse `OPEN` in this slice. Recorded rather than done quietly.
|
|
2072
|
+
*
|
|
2073
|
+
* R2(e)'s reason was that "caller-minted rows under another organization contradict 'belongs to
|
|
2074
|
+
* the owner'". Two things measured against that:
|
|
2075
|
+
*
|
|
2076
|
+
* - Nothing depends on the claim being universally true. The per-row tenant gate reads each
|
|
2077
|
+
* row's own anchor, so a loaded row owned by the owner organization and a caller-minted row
|
|
2078
|
+
* owned by its creator are both read correctly, by different people. There is no site that
|
|
2079
|
+
* asserts "every row of this resource belongs to the owner".
|
|
2080
|
+
* - A caller cannot name the tenant anyway: clause (e) above requires `.excludeFromCreate()`, so
|
|
2081
|
+
* a caller-minted row takes its organization from the request context like any other, and the
|
|
2082
|
+
* orphan walk cannot reach it either — the walk filters on `__seed.seedKey`, which a
|
|
2083
|
+
* caller-minted row does not carry.
|
|
2084
|
+
*
|
|
2085
|
+
* And the deciding one is this repository's own test for a refusal
|
|
2086
|
+
* (`application-creation-directive.md`): if this refuses, what does the operator do next? The
|
|
2087
|
+
* answer would be "change your product decision about whether callers may add rows" — a
|
|
2088
|
+
* DECISION, not a repair to an untrue artifact. That makes it a workflow gate rather than a
|
|
2089
|
+
* refusal, and the directive says a workflow must MARK rather than block.
|
|
2090
|
+
*
|
|
2091
|
+
* Refusing it would also have made three shipped, tested behaviours unreachable: the CREATE/UPDATE
|
|
2092
|
+
* DTO stripping that protects remote-authoritative fields on caller-minted rows, the admission of
|
|
2093
|
+
* create-shaped custom operations, and the admission of a declared caller CREATE. Those pins live
|
|
2094
|
+
* in `external-data-pipeline-coherence.test.ts` and still pass.
|
|
2095
|
+
*/
|
|
2096
|
+
}
|
|
2097
|
+
// ========================================
|
|
1778
2098
|
// isAnonymizable VALIDATION & ENRICHMENT (W7.3a)
|
|
1779
2099
|
// ========================================
|
|
1780
2100
|
let effectiveMainSchema = mainSchema;
|
|
@@ -1801,11 +2121,18 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
1801
2121
|
throw e;
|
|
1802
2122
|
throw createConfigurationError(`[${resourceIdentifier}] isAnonymizable: true but mainSchema is not a ZodObject (cannot validate userId field).`);
|
|
1803
2123
|
}
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
2124
|
+
// PRESENCE half of the anonymizable operation contract: each requirement group must have at
|
|
2125
|
+
// least one of its alternatives declared at all. The RESOLVABILITY half — that a declared op
|
|
2126
|
+
// has a variant `AnonymousSessionBackendService` can actually dispatch — runs later, once the
|
|
2127
|
+
// operation variants are assembled (search `ANONYMIZABLE_REQUIRED_SERVICE_RESOLVABLE_OPERATIONS`).
|
|
2128
|
+
// Deliberately two checks, exactly as for `retentionPolicy`, because they have two different
|
|
2129
|
+
// fixes: "declare the op" vs "declare it with a service-resolvable variant".
|
|
2130
|
+
for (const { operations: alternatives, primitive, why } of ANONYMIZABLE_REQUIRED_SERVICE_RESOLVABLE_OPERATIONS) {
|
|
2131
|
+
if (alternatives.some((alternative) => coreOperations.includes(alternative))) {
|
|
2132
|
+
continue;
|
|
2133
|
+
}
|
|
2134
|
+
throw createConfigurationError(`[${resourceIdentifier}] isAnonymizable: true requires ${describeOperationAlternatives(alternatives)} ` +
|
|
2135
|
+
`in coreOperations (${primitive}: ${why}).`);
|
|
1809
2136
|
}
|
|
1810
2137
|
effectiveMainSchema = mainSchema.extend({
|
|
1811
2138
|
anonymousUserId: z.string().optional().nullable().isDBIndexed()
|
|
@@ -2044,7 +2371,7 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
2044
2371
|
resolveImpersonalizeResetValue(fieldSchema, fieldName);
|
|
2045
2372
|
}
|
|
2046
2373
|
catch (error) {
|
|
2047
|
-
throw createConfigurationError(`[${resourceIdentifier}] ${
|
|
2374
|
+
throw createConfigurationError(`[${resourceIdentifier}] ${describeCaughtError(error)}`);
|
|
2048
2375
|
}
|
|
2049
2376
|
}
|
|
2050
2377
|
}
|
|
@@ -2112,6 +2439,20 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
2112
2439
|
// fields after the strict parse — see deriveTrustedSystemWritePreservedFields).
|
|
2113
2440
|
effectiveMainSchema = effectiveMainSchema.extend({
|
|
2114
2441
|
retentionStatus: RetentionStatusSchema
|
|
2442
|
+
/*
|
|
2443
|
+
* A framework VOCABULARY, declared as one. `RetentionStatus` is injected onto every resource
|
|
2444
|
+
* that declares a `retentionPolicy`, so without this its members would take their words from
|
|
2445
|
+
* each field PATH in turn — the same enum described afresh per resource, by an LLM that
|
|
2446
|
+
* reaches a different phrasing each time. `.systemEnum()` routes them to
|
|
2447
|
+
* `system_enums.RetentionStatus.*`, authored once and read everywhere.
|
|
2448
|
+
*
|
|
2449
|
+
* It changes nothing visible today, deliberately: the field is `.isHidden()` in both modes,
|
|
2450
|
+
* so the planner now asks for no words for it at all (#1298). The declaration is here so
|
|
2451
|
+
* that the day a surface shows a retention state — a retained-row badge, an erasure report —
|
|
2452
|
+
* it inherits ONE vocabulary rather than starting the per-path drift that #1298 measured on
|
|
2453
|
+
* its sibling `impersonalizedAt`, which had collected eleven English labels unseen.
|
|
2454
|
+
*/
|
|
2455
|
+
.systemEnum('RetentionStatus')
|
|
2115
2456
|
.default(RetentionStatus.ACTIVE)
|
|
2116
2457
|
.isDBIndexed()
|
|
2117
2458
|
.excludeFromCreate()
|
|
@@ -2270,6 +2611,123 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
2270
2611
|
// consumes. Unlike a nested `.impersonalizeWith()` — which is a boot error because the row would
|
|
2271
2612
|
// flip to RETAINED with the field intact — a nested category breaks nothing at runtime; it simply
|
|
2272
2613
|
// never reaches a notice.
|
|
2614
|
+
/*
|
|
2615
|
+
* ENGINE-INJECTED ANCHORS on a read-through resource (#1058 R7).
|
|
2616
|
+
*
|
|
2617
|
+
* ## What is being injected, and why an author cannot declare it
|
|
2618
|
+
*
|
|
2619
|
+
* A VIRTUAL resource's schema describes the REMOTE entity. Every field in it comes from the
|
|
2620
|
+
* target, and there is no local row — which is exactly why such a resource may carry no field of
|
|
2621
|
+
* ours, no file and no retrieval corpus. So the two anchors the engine needs have nowhere to be
|
|
2622
|
+
* authored:
|
|
2623
|
+
*
|
|
2624
|
+
* - `organizationId` — the application's OWNER organization, stamped onto every projected row
|
|
2625
|
+
* (#1055 §6). The engine's per-row tenant gate reads it; without it, every read answered
|
|
2626
|
+
* `row_carries_no_tenant_anchor`;
|
|
2627
|
+
* - `organizationUnitId` — the ORGANIZATION UNIT owning the row's remote PARTITION (#1058 §3),
|
|
2628
|
+
* and the field `READ_THROUGH_ORGANIZATION_UNIT_FIELD_NAME` names as this resource's derived
|
|
2629
|
+
* `unitFieldName`.
|
|
2630
|
+
*
|
|
2631
|
+
* Both were already WRITTEN by the projector before this. What they lacked was a declared place:
|
|
2632
|
+
* the resource's own contract, its specification and its OpenAPI knew nothing of two fields every
|
|
2633
|
+
* served row carries. `billable-services.schemas.ts` names that gap as this slice's, and this is
|
|
2634
|
+
* it — the declaration, not the stamp.
|
|
2635
|
+
*
|
|
2636
|
+
* ## Required vs optional, which is a statement about the rows
|
|
2637
|
+
*
|
|
2638
|
+
* `organizationId` is REQUIRED: a row that reaches a caller always has one, because the repository
|
|
2639
|
+
* refuses with `OWNER_ORGANIZATION_ABSENT` before serving anything when there is no owner.
|
|
2640
|
+
*
|
|
2641
|
+
* `organizationUnitId` is OPTIONAL, and that is not caution. Two kinds of row genuinely have no
|
|
2642
|
+
* unit — a SHARED row whose partition field is unset (E2, an Odoo product belonging to no company)
|
|
2643
|
+
* and a row of a partition no operator has assigned (E3). Declaring it required would make both
|
|
2644
|
+
* states illegal in a contract that serves them.
|
|
2645
|
+
*
|
|
2646
|
+
* ## Both are excluded from CREATE and UPDATE
|
|
2647
|
+
*
|
|
2648
|
+
* For the reason the pipeline lane states about its own tenant stamp: a caller who could send this
|
|
2649
|
+
* field could hand rows to another organization, and one who could update it could move them.
|
|
2650
|
+
* Writes are refused on an HTTP_API resource anyway, so this is the second lock rather than the
|
|
2651
|
+
* first — and it is the one that keeps the fields out of the request DTOs, where they would read
|
|
2652
|
+
* as something a client is invited to supply.
|
|
2653
|
+
*/
|
|
2654
|
+
if (persistenceAdapter === PersistenceAdapter.HTTP_API) {
|
|
2655
|
+
// EXPLICIT object check, for the reason the retention injection above records: `getZodObjectShape`
|
|
2656
|
+
// returns `{}` for a union, so a try/catch around it is dead code and the real failure surfaces
|
|
2657
|
+
// later as an undiagnosable `extend is not a function`.
|
|
2658
|
+
if (!isZodObject(effectiveMainSchema)) {
|
|
2659
|
+
throw createConfigurationError(`[${resourceIdentifier}] persistenceAdapter 'http-api' injects the '${HTTP_API_ENGINE_INJECTED_FIELDS.join("' and '")}' `
|
|
2660
|
+
+ 'anchors, which requires a ZodObject mainSchema — polymorphic/union mainSchemas are not supported on a '
|
|
2661
|
+
+ 'read-through resource.');
|
|
2662
|
+
}
|
|
2663
|
+
const httpApiShape = getZodObjectShape(effectiveMainSchema);
|
|
2664
|
+
for (const injectedField of HTTP_API_ENGINE_INJECTED_FIELDS) {
|
|
2665
|
+
/*
|
|
2666
|
+
* Zod-4 `.extend()` SILENTLY OVERWRITES a duplicate key, so an author's own field would be
|
|
2667
|
+
* clobbered rather than reported. Refused for a second reason too: the engine stamps this field
|
|
2668
|
+
* on every projected row regardless, so an authored one could never be the value served — it
|
|
2669
|
+
* would be a declaration the author can read in their own schema and never observe taking
|
|
2670
|
+
* effect.
|
|
2671
|
+
*/
|
|
2672
|
+
if (httpApiShape[injectedField]) {
|
|
2673
|
+
throw createConfigurationError(`[${resourceIdentifier}] declares '${injectedField}', which the engine INJECTS on every http-api resource and `
|
|
2674
|
+
+ 'STAMPS on every projected row. An authored field of that name is never the value served — remove it.');
|
|
2675
|
+
}
|
|
2676
|
+
/*
|
|
2677
|
+
* And nothing in the BINDING may target them either.
|
|
2678
|
+
*
|
|
2679
|
+
* The projector applies both stamps LAST, so a mapping onto one is inert rather than dangerous
|
|
2680
|
+
* — which is precisely why it must be refused here. An authoring mistake that silently does
|
|
2681
|
+
* nothing is worse than one that fails: the author reads a declaration that looks like it
|
|
2682
|
+
* decides the tenant, and no run ever disagrees with them.
|
|
2683
|
+
*
|
|
2684
|
+
* This refusal is what the projector's own comment has claimed since #1055. It did not exist —
|
|
2685
|
+
* measured 2026-09-18 across `saas-models`, `saas-backend-lib` and `saas-specifications`, where
|
|
2686
|
+
* the only mapping-target refusals were the external-data PIPELINE's. It matters more now than
|
|
2687
|
+
* it did then: before this block the fields were undeclared, so an author had no reason to
|
|
2688
|
+
* think of them; declaring them is what makes mapping onto one a thing somebody would try.
|
|
2689
|
+
*/
|
|
2690
|
+
if (resolvedHttpApiBinding?.fieldMappings.some((mapping) => mapping.localField === injectedField)) {
|
|
2691
|
+
throw createConfigurationError(`[${resourceIdentifier}] httpApiBinding maps a remote field onto '${injectedField}', which the engine stamps `
|
|
2692
|
+
+ 'after every mapping. The mapping can never take effect — remove it.');
|
|
2693
|
+
}
|
|
2694
|
+
if (resolvedHttpApiBinding?.keyFields.some((keyField) => keyField.localField === injectedField)) {
|
|
2695
|
+
throw createConfigurationError(`[${resourceIdentifier}] httpApiBinding declares a key component landing on '${injectedField}', which the engine `
|
|
2696
|
+
+ 'stamps after every key component. Name a different localField.');
|
|
2697
|
+
}
|
|
2698
|
+
}
|
|
2699
|
+
effectiveMainSchema = effectiveMainSchema.extend({
|
|
2700
|
+
/*
|
|
2701
|
+
* `.isDBIndexed().isForeignKey()` on the tenant anchor, and the reason is a MEASUREMENT rather
|
|
2702
|
+
* than a convention.
|
|
2703
|
+
*
|
|
2704
|
+
* The SQL planner plans a table for an http-api resource today, and before this injection it
|
|
2705
|
+
* derived the tenant column — WITH its index — from the primary-scope relationship. A bare
|
|
2706
|
+
* `z.string()` here takes precedence over that derivation, so the first `wildo db diff` after
|
|
2707
|
+
* the injection reported `DROP_INDEX organizationId` on Wonder Todos: a declared field
|
|
2708
|
+
* silently replacing a derived one, and dropping its index on the way past.
|
|
2709
|
+
*
|
|
2710
|
+
* These decorators restore the plan the relationship produced. They are also what
|
|
2711
|
+
* `resource-schema-awareness.md` requires of every `organizationId` in an application's own
|
|
2712
|
+
* schema, so the injected field now matches what an author would have had to write.
|
|
2713
|
+
*/
|
|
2714
|
+
[HTTP_API_TENANT_ANCHOR_FIELD]: z.string()
|
|
2715
|
+
.isDBIndexed()
|
|
2716
|
+
.isForeignKey()
|
|
2717
|
+
.excludeFromCreate()
|
|
2718
|
+
.excludeFromUpdate(),
|
|
2719
|
+
/*
|
|
2720
|
+
* NOT indexed, deliberately. A read-through resource has no local row, so nothing ever queries
|
|
2721
|
+
* this table by unit — the confinement is a predicate pushed to the REMOTE, in the remote's own
|
|
2722
|
+
* partition key. An index here would cost a migration on every PostgreSQL-backed surface to
|
|
2723
|
+
* serve a query that cannot be issued.
|
|
2724
|
+
*/
|
|
2725
|
+
[READ_THROUGH_ORGANIZATION_UNIT_FIELD_NAME]: z.string()
|
|
2726
|
+
.optional()
|
|
2727
|
+
.excludeFromCreate()
|
|
2728
|
+
.excludeFromUpdate(),
|
|
2729
|
+
});
|
|
2730
|
+
}
|
|
2273
2731
|
if (isZodObject(effectiveMainSchema)) {
|
|
2274
2732
|
for (const [fieldName, fieldSchema] of Object.entries(getZodObjectShape(effectiveMainSchema))) {
|
|
2275
2733
|
const declared = getDataCategories(fieldSchema);
|
|
@@ -2415,6 +2873,8 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
2415
2873
|
const userNotifications = processUserNotifications(config.userNotifications || [], resourceIdentifier, operation, resourcePrimaryScope);
|
|
2416
2874
|
// Process m2mNotifications using helper function
|
|
2417
2875
|
const m2mNotifications = processM2MNotifications(config.m2mNotifications || [], resourceIdentifier, operation);
|
|
2876
|
+
// Parse once so partial authored policies keep defaults and every variant shares the same policy.
|
|
2877
|
+
const queueConfig = ResourceConfiguration_QueueConfigSchema.parse(config.queueConfig);
|
|
2418
2878
|
// Process each variant to create flattened operations
|
|
2419
2879
|
config.variants.forEach((variantParams, variantIndex) => {
|
|
2420
2880
|
// Note: Cascading delete is now handled via childOperations.lifecycle.onParentDelete on relationships
|
|
@@ -2498,6 +2958,7 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
2498
2958
|
operationIdentifier: operation,
|
|
2499
2959
|
isOperationDefault,
|
|
2500
2960
|
serviceRuntimeMode: config.serviceRuntimeMode || ResourceOperation_ServiceRuntimeMode.INLINE,
|
|
2961
|
+
queueConfig,
|
|
2501
2962
|
requestDto: derivedRequestDto, // Temporary - will be replaced by buildAllOperationDtos
|
|
2502
2963
|
responseDto: operationResponseDto, // Temporary - will be replaced by buildAllOperationDtos
|
|
2503
2964
|
// When the variant supplied an explicit `requestDto`, it is an author-owned
|
|
@@ -2514,6 +2975,10 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
2514
2975
|
// parts, unlike the notification families above, which the factory stamps with scope and
|
|
2515
2976
|
// identifier. `undefined` means the operation consumes no metered product.
|
|
2516
2977
|
recordsUsage: config.recordsUsage,
|
|
2978
|
+
// Same reasoning: one authored object, carried as-is. `undefined` means this operation
|
|
2979
|
+
// declares no purpose of its own beyond whatever `serviceConsentRequirement` already
|
|
2980
|
+
// requires application-wide (#1258 Step 3).
|
|
2981
|
+
consentGate: config.consentGate,
|
|
2517
2982
|
// Fields from ResourceConfiguration_OperationVariant_Base
|
|
2518
2983
|
variantType: variantParams.variantType,
|
|
2519
2984
|
resourceOperationLike: variantParams.resourceOperationLike,
|
|
@@ -2525,6 +2990,10 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
2525
2990
|
collectionExport: variantParams.collectionExport,
|
|
2526
2991
|
requiredFeatures: normalizeRequiredFeatures(variantParams.requiredFeatures),
|
|
2527
2992
|
riskLevel: variantParams.riskLevel || ResourceOperationRiskLevel.LOW,
|
|
2993
|
+
// Undeclared stays undefined on purpose: `resolveOperationReversibility` derives the
|
|
2994
|
+
// answer from `resourceOperationLike` when the field is absent, so defaulting it here
|
|
2995
|
+
// would freeze the derivation at config time and make a DELETE added later look reversible.
|
|
2996
|
+
reversibility: variantParams.reversibility,
|
|
2528
2997
|
// Forwarded for the same reason as the flags below: the frontend resources client reads it
|
|
2529
2998
|
// off the RUNTIME operation, so dropping it here would leave a declared long-run timeout
|
|
2530
2999
|
// silently unapplied and the 30s default cutting the request (issue #237).
|
|
@@ -2539,10 +3008,17 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
2539
3008
|
// an unforwarded flag would leave the authored requirement silently unenforced — the exact
|
|
2540
3009
|
// failure mode the flag exists to prevent.
|
|
2541
3010
|
requiresStepUpAuthentication: variantParams.requiresStepUpAuthentication,
|
|
3011
|
+
// Forwarded for the same reason: the controller, the service tier and the frontend client all read it off the
|
|
3012
|
+
// RUNTIME operation, so an unforwarded declaration would refuse every keyed request as undeclared.
|
|
3013
|
+
idempotencyKey: variantParams.idempotencyKey,
|
|
2542
3014
|
admitsCrossTenantPlatformAdministration: variantParams.admitsCrossTenantPlatformAdministration,
|
|
2543
3015
|
// Same forwarding obligation as its cross-tenant sibling: the authorizer reads this off the
|
|
2544
3016
|
// RUNTIME operation, so dropping it here would silently re-close the admin surface.
|
|
2545
3017
|
admitsCrossSubjectUserAdministration: variantParams.admitsCrossSubjectUserAdministration,
|
|
3018
|
+
// Third sibling, same forwarding obligation: the scope-root directory classification reads
|
|
3019
|
+
// this off the RUNTIME operation, so dropping it here would re-close a door whose declared
|
|
3020
|
+
// collection shape is the only thing that makes it safe (#1267).
|
|
3021
|
+
admitsSelfConfinedScopeRootWrite: variantParams.admitsSelfConfinedScopeRootWrite,
|
|
2546
3022
|
// Forwarded for the same reason again: the post-commit audit emission reads it off the
|
|
2547
3023
|
// RUNTIME operation. Dropping it would either lose an authored below-floor opt-in (a silent
|
|
2548
3024
|
// audit gap) or lose an authored suppression (a duplicate row next to a purpose-built event).
|
|
@@ -2574,6 +3050,20 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
2574
3050
|
if (haveBulkOperation && (operationToCheck === CoreResourceOperation.READ || operationToCheck === CoreResourceOperation.LIST)) {
|
|
2575
3051
|
throw createConfigurationError(`Operation '${operation}' cannot have bulk operations (read and list are not bulkable)`);
|
|
2576
3052
|
}
|
|
3053
|
+
/*
|
|
3054
|
+
* A bulk twin of CREATE has no coherent meaning, so it is refused rather than half-built (#1551).
|
|
3055
|
+
*
|
|
3056
|
+
* The twin keeps `operationIdentifier: 'create'`, so the controller, the service dispatcher and both
|
|
3057
|
+
* repositories route it to the SINGLE-row create; only the request DTO pretended otherwise, and this
|
|
3058
|
+
* factory and the DTO builder even disagreed on which pretence. Batch creation is CREATE_MANY, whose
|
|
3059
|
+
* request is the `{ data: row[] }` envelope its service reads. No authored resource declared a bulk
|
|
3060
|
+
* twin of CREATE when this refusal was added (22 `haveBulkOperation` declarations, all on DELETE or
|
|
3061
|
+
* UPDATE-like operations).
|
|
3062
|
+
*/
|
|
3063
|
+
if (haveBulkOperation && operationToCheck === CoreResourceOperation.CREATE) {
|
|
3064
|
+
throw createConfigurationError(`Operation '${operation}' cannot have a bulk twin: every tier would run it as a single-row create. `
|
|
3065
|
+
+ `Declare ${CoreResourceOperation.CREATE_MANY} for batch creation — its request is { data: row[] }.`);
|
|
3066
|
+
}
|
|
2577
3067
|
const tokenStateSideEffects = [
|
|
2578
3068
|
...(apiCallParams.tokenGeneration ? ['tokenGeneration'] : []),
|
|
2579
3069
|
...(apiCallParams.tokenRevocation ? ['tokenRevocation'] : []),
|
|
@@ -2610,6 +3100,9 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
2610
3100
|
if (apiCallParams.tokenRevocation) {
|
|
2611
3101
|
validateTokenRevocationConfig(apiCallParams.tokenRevocation, resourceIdentifier, operation);
|
|
2612
3102
|
}
|
|
3103
|
+
if (apiCallParams.tokenAuthentication) {
|
|
3104
|
+
validateTokenAuthenticationConfig(apiCallParams.tokenAuthentication, resourceIdentifier, operation);
|
|
3105
|
+
}
|
|
2613
3106
|
const apiCallOperationFields = {
|
|
2614
3107
|
...baseOperationFields,
|
|
2615
3108
|
httpVerb,
|
|
@@ -2647,7 +3140,7 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
2647
3140
|
const searchableOptions = variantParams.searchableOptions || { caseSensitive: false, fullMatchOnly: false };
|
|
2648
3141
|
const rawFilterFields = variantParams.filterFields || {};
|
|
2649
3142
|
const sortFields = variantParams.sortFields || [];
|
|
2650
|
-
const maxPaginatedResultPerPageLimit = variantParams.maxPaginatedResultPerPageLimit ||
|
|
3143
|
+
const maxPaginatedResultPerPageLimit = variantParams.maxPaginatedResultPerPageLimit || DEFAULT_SEARCH_PAGE_CEILING;
|
|
2651
3144
|
const filterFields = {};
|
|
2652
3145
|
Object.entries(rawFilterFields).forEach(([key, value]) => {
|
|
2653
3146
|
if (typeof value !== 'function') {
|
|
@@ -2688,7 +3181,7 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
2688
3181
|
// LIST has one pagination authority. Keep the effective ceiling on the resolved
|
|
2689
3182
|
// operation so request/response DTO construction, repositories, auto-generated
|
|
2690
3183
|
// SUMMARY/CONTEXT variants and API-reference projection all observe the same value.
|
|
2691
|
-
maxPaginatedResultPerPageLimit: variantParams.maxPaginatedResultPerPageLimit ??
|
|
3184
|
+
maxPaginatedResultPerPageLimit: variantParams.maxPaginatedResultPerPageLimit ?? DEFAULT_LIST_PAGE_CEILING,
|
|
2692
3185
|
};
|
|
2693
3186
|
if (variantParams.filterFields !== undefined) {
|
|
2694
3187
|
listEnrichment.filterFields = variantParams.filterFields;
|
|
@@ -2703,28 +3196,27 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
2703
3196
|
operations.push(apiCallOperationFields);
|
|
2704
3197
|
// Add bulk operation if enabled
|
|
2705
3198
|
if (haveBulkOperation) {
|
|
2706
|
-
|
|
2707
|
-
|
|
2708
|
-
|
|
2709
|
-
|
|
2710
|
-
|
|
2711
|
-
|
|
2712
|
-
|
|
2713
|
-
|
|
2714
|
-
|
|
2715
|
-
|
|
2716
|
-
|
|
2717
|
-
|
|
2718
|
-
}
|
|
2719
|
-
|
|
2720
|
-
|
|
2721
|
-
: Resources_BulkOperationBaseSchema;
|
|
2722
|
-
})();
|
|
3199
|
+
// The documented, enforced batch limit (`BULK_OPERATION_DEFAULT_MAX_SELECTION` unless the
|
|
3200
|
+
// variant declares `bulkOperationMaxSelection`). A bulk CREATE is bounded on its `data` rows
|
|
3201
|
+
// for the same reason a bulk UPDATE/DELETE is bounded on its `_ids`.
|
|
3202
|
+
const bulkMaxSelection = resolveBulkOperationMaxSelection(apiCallParams);
|
|
3203
|
+
const rowRequestDto = apiCallOperationFields.requestDto;
|
|
3204
|
+
// The DTO builder rebuilds this later from the same function; both must agree.
|
|
3205
|
+
const bulkDto = wrapRequestDtoAsBulk({
|
|
3206
|
+
rowRequestDto: rowRequestDto && !(rowRequestDto instanceof z.ZodObject && Object.keys(rowRequestDto.shape).length === 0)
|
|
3207
|
+
? rowRequestDto
|
|
3208
|
+
: undefined,
|
|
3209
|
+
maxSelection: bulkMaxSelection,
|
|
3210
|
+
// The DTO builder's predicate, verbatim, so the two constructions cannot disagree: a bulk twin
|
|
3211
|
+
// of CREATE is refused above, and only CREATE_MANY takes `{ data: [] }`.
|
|
3212
|
+
isCreate: operationToCheck === CoreResourceOperation.CREATE_MANY,
|
|
3213
|
+
});
|
|
2723
3214
|
const bulkOperationFields = {
|
|
2724
3215
|
...apiCallOperationFields,
|
|
2725
3216
|
isBulkOperation: true,
|
|
2726
3217
|
isOperationDefault: false, // Bulk operations are never default
|
|
2727
|
-
requestDto: bulkDto
|
|
3218
|
+
requestDto: bulkDto,
|
|
3219
|
+
bulkOperationMaxSelection: bulkMaxSelection,
|
|
2728
3220
|
};
|
|
2729
3221
|
operations.push(bulkOperationFields);
|
|
2730
3222
|
}
|
|
@@ -2734,7 +3226,10 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
2734
3226
|
const { variantType, ...specificFields } = variantParams; // Extract variantType and get rest
|
|
2735
3227
|
const nonApiCallOperation = {
|
|
2736
3228
|
...baseOperationFields,
|
|
2737
|
-
...specificFields
|
|
3229
|
+
...specificFields,
|
|
3230
|
+
...((variantParams.variantType === ResourceOperationVariantType.CRON_JOB || variantParams.variantType === ResourceOperationVariantType.BATCH_JOB)
|
|
3231
|
+
? { scheduledRecovery: normalizeScheduledRecoveryPolicy(variantParams.scheduledRecovery) }
|
|
3232
|
+
: {}),
|
|
2738
3233
|
};
|
|
2739
3234
|
operations.push(nonApiCallOperation);
|
|
2740
3235
|
}
|
|
@@ -2776,6 +3271,7 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
2776
3271
|
operationIdentifier: operation,
|
|
2777
3272
|
isOperationDefault: false, // Auto-variants are never operation default
|
|
2778
3273
|
serviceRuntimeMode: config.serviceRuntimeMode || ResourceOperation_ServiceRuntimeMode.INLINE,
|
|
3274
|
+
queueConfig,
|
|
2779
3275
|
requestDto: defaultApiCallVariant.requestDto || deriveRequestDto(operation, effectiveMainSchema, undefined), // Temporary - will be replaced by buildAllOperationDtos
|
|
2780
3276
|
// Forwarded for the same reason as `unimplementedAcknowledgement` below: an auto-variant
|
|
2781
3277
|
// is a projection of the default variant, so it inherits that variant's request contract
|
|
@@ -2783,6 +3279,15 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
2783
3279
|
// AUTHORED contract look auto-derived to the request-contract-breadth guard.
|
|
2784
3280
|
hasCustomRequestDto: defaultApiCallVariant.hasCustomRequestDto ?? !!defaultApiCallVariant.requestDto,
|
|
2785
3281
|
responseDto, // Temporary - will be replaced by buildAllOperationDtos
|
|
3282
|
+
// Stamped like every other factory-built operation, and it is what makes "temporary" true. An
|
|
3283
|
+
// auto-variant's `responseDto` is framework-derived, but without the flag the DTO rebuild
|
|
3284
|
+
// fell back to its structural heuristic, found the temporary schema "significantly
|
|
3285
|
+
// different" from the rebuilt one and PRESERVED it as custom. For a CONTEXT variant that
|
|
3286
|
+
// temporary schema is the context DTO of the empty-registry factory pass, so the full-
|
|
3287
|
+
// registry rebuild added the runtime relationship field BESIDE the fallback one:
|
|
3288
|
+
// `users/self/context` declared both `userSelfPreference` and `userSelfPreferences`, at
|
|
3289
|
+
// runtime and in the published API reference (#582).
|
|
3290
|
+
hasCustomResponseDto: false,
|
|
2786
3291
|
notificationBadgeOperations: config.notificationBadgeOperations || [],
|
|
2787
3292
|
userNotifications,
|
|
2788
3293
|
m2mNotifications,
|
|
@@ -2790,6 +3295,9 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
2790
3295
|
resourceOperationLike: defaultApiCallVariant.resourceOperationLike,
|
|
2791
3296
|
requiredFeatures: normalizeRequiredFeatures(defaultApiCallVariant.requiredFeatures),
|
|
2792
3297
|
riskLevel: defaultApiCallVariant.riskLevel || ResourceOperationRiskLevel.LOW,
|
|
3298
|
+
// Inherited like riskLevel: an auto-variant is a projection of the default variant, so a
|
|
3299
|
+
// SUMMARY or CONTEXT derivative of an irreversible operation is equally irreversible.
|
|
3300
|
+
reversibility: defaultApiCallVariant.reversibility,
|
|
2793
3301
|
// Inherited like riskLevel: an auto-variant is a projection of the default variant. The
|
|
2794
3302
|
// read-shaped projections are unlikely to need it, but inheriting keeps "projection of
|
|
2795
3303
|
// the default" a single consistent rule rather than a per-field accident.
|
|
@@ -2805,11 +3313,17 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
2805
3313
|
// anyway — inheriting keeps that a property of the exemption list rather than an accident
|
|
2806
3314
|
// of this projection.)
|
|
2807
3315
|
requiresStepUpAuthentication: defaultApiCallVariant.requiresStepUpAuthentication,
|
|
3316
|
+
// Inherited like step-up: an auto-variant projects the default variant's contract, header included.
|
|
3317
|
+
idempotencyKey: defaultApiCallVariant.idempotencyKey,
|
|
2808
3318
|
admitsCrossTenantPlatformAdministration: defaultApiCallVariant.admitsCrossTenantPlatformAdministration,
|
|
2809
3319
|
// Inherited for the same reason as the cross-tenant flag: an auto-variant is a PROJECTION of
|
|
2810
3320
|
// the default operation and must make the same addressing claim, or it would refuse the very
|
|
2811
3321
|
// subjects the operation it projects is admitted to administer.
|
|
2812
3322
|
admitsCrossSubjectUserAdministration: defaultApiCallVariant.admitsCrossSubjectUserAdministration,
|
|
3323
|
+
// Inherited for the same reason as both siblings: an auto-variant projects the default
|
|
3324
|
+
// variant's contract, and a projection that dropped this claim would be classified as an
|
|
3325
|
+
// unconfined directory write while the operation it projects is not.
|
|
3326
|
+
admitsSelfConfinedScopeRootWrite: defaultApiCallVariant.admitsSelfConfinedScopeRootWrite,
|
|
2813
3327
|
// Inherited for the same reason: an auto-variant is a projection of the default variant,
|
|
2814
3328
|
// so it must make the same audit claim. Inheriting a `suppressGenericEvent` matters most —
|
|
2815
3329
|
// the purpose-built event that supersedes the default covers its projections too, and a
|
|
@@ -2866,6 +3380,17 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
2866
3380
|
if (defaultApiCallVariant.tokenRevocation) {
|
|
2867
3381
|
validateTokenRevocationConfig(defaultApiCallVariant.tokenRevocation, resourceIdentifier, `${operation}.${variantKey}`);
|
|
2868
3382
|
}
|
|
3383
|
+
// `tokenAuthentication` is deliberately NOT re-validated here, and the absence is a decision
|
|
3384
|
+
// rather than an omission (issue #313). `defaultApiCallVariant` is SELECTED from `operations`
|
|
3385
|
+
// — variants that were built, and validated, by the authored path above — so its
|
|
3386
|
+
// `tokenAuthentication` cannot be a value that block has not already refused. A guard here
|
|
3387
|
+
// would be unreachable, and an unreachable guard is not defence in depth: it is an untested
|
|
3388
|
+
// claim that reads like coverage (`.claude/rules/invariant-call-site-enumeration.md` #25,
|
|
3389
|
+
// #19). Measured: neutering it left every pin in
|
|
3390
|
+
// `token-authentication-type-list.guard.test.ts` green.
|
|
3391
|
+
//
|
|
3392
|
+
// The same is true of the two blocks immediately above — they predate this note and are kept
|
|
3393
|
+
// as found, but do not add a fourth on their model.
|
|
2869
3394
|
return baseOperationFields;
|
|
2870
3395
|
};
|
|
2871
3396
|
// Generate READ.summary variant
|
|
@@ -3035,6 +3560,41 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
3035
3560
|
`its transport group — a lone variant marked \`isDefault: false\` leaves the group with NO default.`);
|
|
3036
3561
|
}
|
|
3037
3562
|
}
|
|
3563
|
+
// ── RESOLVABILITY half of the ANONYMIZABLE operation contract ───────────
|
|
3564
|
+
//
|
|
3565
|
+
// Same two-halves shape as retention above, for the other dynamic-loop capability. The presence
|
|
3566
|
+
// half proved that each requirement group has an alternative DECLARED; this proves one of them
|
|
3567
|
+
// is REACHABLE by `AnonymousSessionBackendService`, whose three primitives
|
|
3568
|
+
// (`listAnonymousRecords` / `updateManyAsSystem` / `deleteOwnedRecords`) all resolve through
|
|
3569
|
+
// `getServiceOperationPathDefault`.
|
|
3570
|
+
//
|
|
3571
|
+
// Runs HERE rather than with the presence half for the same reason retention's does:
|
|
3572
|
+
// `isOperationDefault` is computed by the operations loop above, and it is variant-type-LOCAL —
|
|
3573
|
+
// a lone variant marked `isDefault: false` leaves its transport group with NO default.
|
|
3574
|
+
//
|
|
3575
|
+
// Reads the SAME predicate the resolver applies (`isServiceResolvableDefaultOperation`), and the
|
|
3576
|
+
// same predicate `deleteOwnedRecords` probes with when it chooses between DELETE_MANY and
|
|
3577
|
+
// per-row DELETE — so the guard, the runtime chooser and the resolver cannot disagree.
|
|
3578
|
+
if (isAnonymizable) {
|
|
3579
|
+
for (const { operations: alternatives, primitive, why } of ANONYMIZABLE_REQUIRED_SERVICE_RESOLVABLE_OPERATIONS) {
|
|
3580
|
+
if (alternatives.some((alternative) => operations.some((candidate) => isServiceResolvableDefaultOperation(candidate, alternative)))) {
|
|
3581
|
+
continue;
|
|
3582
|
+
}
|
|
3583
|
+
const declaredVariants = operations
|
|
3584
|
+
.filter((candidate) => alternatives.includes(candidate.operationIdentifier))
|
|
3585
|
+
.map((candidate) => `${String(candidate.operationIdentifier)}/${candidate.variantType}` +
|
|
3586
|
+
`${candidate.variantKey ? `:${candidate.variantKey}` : ''}${candidate.isOperationDefault ? ' (default)' : ''}`);
|
|
3587
|
+
throw createConfigurationError(`[${resourceIdentifier}] isAnonymizable: true requires ${describeOperationAlternatives(alternatives)} ` +
|
|
3588
|
+
`to be SERVICE-RESOLVABLE, but no accepted DEFAULT variant is declared. Declared variants: ` +
|
|
3589
|
+
`[${declaredVariants.length > 0 ? declaredVariants.join(', ') : 'none'}]. The anonymous-session ` +
|
|
3590
|
+
`primitive ${primitive} (${why}) resolves through getServiceOperationPathDefault, which accepts ` +
|
|
3591
|
+
`only [${SERVICE_RESOLVABLE_OPERATION_VARIANT_TYPES.join(', ')}] and only the operation default. ` +
|
|
3592
|
+
`REPOSITORY_ONLY is route-less but is served by the SEPARATE getRepositoryOperationPathDefault ` +
|
|
3593
|
+
`transport, so it passes the "operation exists" check and then FAILS TO RESOLVE the moment an ` +
|
|
3594
|
+
`anonymous session converts or expires. Use ${ResourceOperationVariantType.INTERNAL_CALL} for a ` +
|
|
3595
|
+
`capability that must stay route-less, and make sure it is the default for its transport group.`);
|
|
3596
|
+
}
|
|
3597
|
+
}
|
|
3038
3598
|
const resourceConfig = {
|
|
3039
3599
|
isDisabled: params.isDisabled ?? false,
|
|
3040
3600
|
resourcePrimaryScope,
|
|
@@ -3053,6 +3613,7 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
3053
3613
|
isSystemResource,
|
|
3054
3614
|
primaryKeyIdentifiesInitiator,
|
|
3055
3615
|
systemAccessPolicy: effectiveSystemAccessPolicy,
|
|
3616
|
+
subjectErasureLane,
|
|
3056
3617
|
isAnonymizable,
|
|
3057
3618
|
transpositionPolicy: isAnonymizable
|
|
3058
3619
|
? (transpositionPolicy ?? ResourceTranspositionPolicy.ADD)
|
|
@@ -3094,6 +3655,7 @@ export function createResourceConfiguration_Initialization(params) {
|
|
|
3094
3655
|
isSystemResource,
|
|
3095
3656
|
primaryKeyIdentifiesInitiator,
|
|
3096
3657
|
systemAccessPolicy: effectiveSystemAccessPolicy,
|
|
3658
|
+
subjectErasureLane,
|
|
3097
3659
|
isAnonymizable,
|
|
3098
3660
|
transpositionPolicy: isAnonymizable
|
|
3099
3661
|
? (transpositionPolicy ?? ResourceTranspositionPolicy.ADD)
|