@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subject-erasure.shared.schemas.js","sourceRoot":"","sources":["../../../../../src/compliance/privacy/subject-erasure.shared.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n RelationshipLifecycleModel,\n type ResourceRelationship,\n} from '../../resources/resources.shared.schemas';\nimport { Resources_SharedUtils } from '../../resources/resources.shared.utils';\nimport {\n ChildLifecycleMode,\n ChildLifecycleStrategy,\n} from '../../resources/child-operations.shared.schemas';\nimport type { ResourceType } from '../../resources/resources.shared.core.definitions';\n\n/**\n * What a SUBJECT ERASURE does to one child-direction edge of the subject.\n *\n * ## Why this vocabulary exists at all\n *\n * \"Erase this subject\" (a `delete my account` request) is not \"delete this row\". The subject row\n * SURVIVES — scrubbed and marked `RETAINED` — so that foreign keys from legally-retained financial\n * rows keep resolving to an anonymized person. But the subject's OWN dependents must each be\n * disposed of, and the disposition differs per edge: a profile holding a name and an avatar has to\n * go, an invoice has to stay, an audit log was never the subject's to begin with.\n *\n * This enum is the closed set of answers, and it is deliberately WIDER than the two teardown\n * strategies of {@link ChildLifecycleStrategy}: the delete cascade only ever asks about edges that\n * opted IN (`onParentDelete.enabled === true`) and silently ignores the rest, whereas an erasure\n * must account for EVERY edge — including the ones nobody opted in — because an edge nobody thought\n * about is exactly where personal data survives an erasure unnoticed.\n *\n * Two members therefore have no runtime action and exist to make the erasure FAIL LOUD\n * ({@link UNCLASSIFIED}, {@link UNSUPPORTED_DEFERRED}), and two describe leaving a row alone for\n * two genuinely different reasons ({@link RETAINED_BY_DECLARATION} vs {@link NOT_OWNED}). Those two\n * are not merged despite sharing a no-op: a data-protection reviewer asking \"why is this row still\n * here?\" needs \"because the author declared it retained\" and \"because it was never the subject's\n * row\" to be different answers, and only the first one is a compliance claim someone made.\n */\nexport enum SubjectErasureDisposition {\n /**\n * Hard-delete the child rows. The author declared this dependent's data dies with the parent's\n * ownership (`onParentDelete.enabled`, `strategy: DELETE`) — on an erasure the ownership ends in\n * the only way that matters for personal data, so the rows go. This is the `USER_PROFILES` case:\n * there is no legal obligation to retain a name, a bio or an avatar.\n */\n DELETE = 'delete',\n\n /**\n * Scrub the child rows' personal fields in place and KEEP them, flipping `retentionStatus` to\n * `RETAINED` (`onParentDelete.strategy = IMPERSONALIZE_AND_RETAIN`). For a dependent that must\n * survive for a legal/audit obligation while holding personal data of its own.\n */\n IMPERSONALIZE_AND_RETAIN = 'impersonalize_and_retain',\n\n /**\n * LEAVE THE ROWS EXACTLY AS THEY ARE — a dependent whose cascade the author explicitly DISABLED\n * (`onParentDelete.enabled: false`). That declaration says \"this row survives its parent's\n * teardown\", which is a positive compliance claim, not an omission.\n *\n * This is how the retained billing rows are expressed: subscriptions, invoice refs, usage records\n * and credit pools each disable the cascade, keep their financial audit trail fully VISIBLE, and\n * rely on the erased subject row still resolving their foreign keys.\n */\n RETAINED_BY_DECLARATION = 'retained_by_declaration',\n\n /**\n * LEAVE THE ROWS ALONE — the edge is not an ownership edge at all\n * (`lifecycleModelMode` is `INDEPENDENT` or `LINK_ONLY`, or the relationship is disabled). The\n * related rows live independently of the subject, so their disposition is not the subject's\n * erasure to decide (audit logs, job executions, membership links).\n */\n NOT_OWNED = 'not_owned',\n\n /**\n * ⛔ NO ANSWER — a DEPENDENT child with NO `onParentDelete` declaration whatsoever. The author\n * owns this dependent's lifecycle but never said what happens to it, and an erasure must not\n * guess: deleting could destroy data a retention obligation required keeping, and leaving could\n * strand personal data that the erasure claimed to have removed. The orchestrator throws.\n */\n UNCLASSIFIED = 'unclassified',\n\n /**\n * ⛔ DECLARED BUT NOT EXECUTABLE AS PART OF AN ERASURE — the edge opted in with\n * `mode: LAZY` (queue the teardown for later). Deferring is a legitimate performance choice for a\n * parent delete, but it would let an erasure report success while the subject's personal data is\n * still live in a queue nobody is watching. The orchestrator throws.\n */\n UNSUPPORTED_DEFERRED = 'unsupported_deferred',\n}\n\n/** The classification of ONE child-direction edge of an erasure subject. */\nexport interface SubjectErasureEdgeClassification {\n /** The dependent resource on the far side of the edge. */\n childResourceType: ResourceType;\n /** What the erasure will do with that dependent's rows. */\n disposition: SubjectErasureDisposition;\n /**\n * Human-readable justification, quoting the configuration that produced it. Surfaced in the\n * erasure report and in the fail-loud error, so an operator never has to re-derive WHY a row was\n * deleted, retained, or refused.\n */\n reason: string;\n}\n\n/** Dispositions that ABORT the erasure rather than executing it. */\nconst BLOCKING_DISPOSITIONS: ReadonlySet<SubjectErasureDisposition> = new Set([\n SubjectErasureDisposition.UNCLASSIFIED,\n SubjectErasureDisposition.UNSUPPORTED_DEFERRED,\n]);\n\n/**\n * True when a disposition must stop the erasure before any write lands.\n *\n * Exported (rather than inlined at the one call site) so a future boot-time guard — the erasure\n * analogue of `validateCompositionCascadeDeletability` — reports exactly the edges the runtime\n * would refuse, instead of re-deriving the rule and drifting from it.\n */\nexport function isBlockingSubjectErasureDisposition(\n disposition: SubjectErasureDisposition,\n): boolean {\n return BLOCKING_DISPOSITIONS.has(disposition);\n}\n\n/**\n * Classify what a subject erasure must do with ONE child-direction edge — the delete-vs-retain\n * decision, DERIVED FROM CONFIGURATION rather than from a hardcoded list of resource types.\n *\n * ## Where the answer comes from\n *\n * Two declarations the author already makes, read through the SAME shared authority the runtime\n * delete cascade reads (`resolveRelationshipLifecycleOnParentDeleteConfig`), so the erasure and the\n * cascade can never disagree about what an edge says:\n *\n * 1. **`handling.lifecycleModelMode`** — does the subject own this dependent's lifecycle at all?\n * `INDEPENDENT` / `LINK_ONLY` answers \"no\", and the erasure leaves those rows alone.\n * 2. **`childOperations.lifecycle.onParentDelete`** — for an owned dependent, what did the author\n * declare happens when the parent stops owning it: hard-delete, scrub-and-retain, or nothing.\n *\n * ## The semantic caveat, stated plainly\n *\n * `onParentDelete` literally answers \"what happens when the parent row is DELETED\", and an erasure\n * does NOT delete the subject — it scrubs and keeps it. v1 deliberately treats the two questions as\n * one because they have the same answer for every edge in the shipped registry, and because an\n * author who declared \"this dependent dies with its parent\" has already said the thing that\n * matters: the dependent's data has no life of its own once the subject's does not.\n *\n * They are NOT the same question though, and the day a resource needs to answer them differently\n * (retain a dependent on erasure that it hard-deletes on parent-delete, or the reverse) the\n * expressible extension is a sibling `onSubjectErasure` axis on the same edge, defaulting to this\n * derivation. Adding that axis speculatively now would give app authors a second knob with no\n * consumer and two ways to say the same thing.\n *\n * Pure and side-effect free — no registry lookups, no I/O — so it is equally usable from a runtime\n * orchestrator and from a boot-time guard.\n */\nexport function classifySubjectErasureDisposition(\n relationship: ResourceRelationship,\n): SubjectErasureEdgeClassification {\n const childResourceType = relationship.resourceType2 as ResourceType;\n const classify = (\n disposition: SubjectErasureDisposition,\n reason: string,\n ): SubjectErasureEdgeClassification => ({ childResourceType, disposition, reason });\n\n // A disabled relationship is not part of the live graph — the runtime never traverses it, so an\n // erasure must not refuse to run because of it (the alternative would be a permanently blocked\n // erasure on a resource carrying a switched-off edge).\n if (relationship.isDisabled === true) {\n return classify(\n SubjectErasureDisposition.NOT_OWNED,\n 'the relationship is disabled (isDisabled: true), so it is not part of the live graph',\n );\n }\n\n const semantics = Resources_SharedUtils.requireResolvedRelationshipSemantics(relationship);\n const lifecycleModel = semantics.handling.lifecycleModelMode;\n\n if (lifecycleModel !== RelationshipLifecycleModel.DEPENDENT) {\n return classify(\n SubjectErasureDisposition.NOT_OWNED,\n `lifecycleModelMode is '${lifecycleModel}' (not DEPENDENT): the related rows live ` +\n `independently of the subject, so their disposition is not this erasure's decision`,\n );\n }\n\n // DEPENDENT from here on: the subject owns this dependent's lifecycle, so the erasure MUST have\n // an answer for it.\n const onParentDelete = Resources_SharedUtils.resolveRelationshipLifecycleOnParentDeleteConfig(\n relationship,\n );\n\n if (!onParentDelete) {\n return classify(\n SubjectErasureDisposition.UNCLASSIFIED,\n `the subject owns this dependent (lifecycleModelMode: DEPENDENT) but the edge declares no ` +\n `onParentDelete lifecycle, so nobody has said whether its rows survive an erasure. ` +\n `Declare onParentDelete on the edge: 'enabled: true' with strategy DELETE (the rows hold ` +\n `no retainable value) or IMPERSONALIZE_AND_RETAIN (they must survive scrubbed), or ` +\n `'enabled: false' to state explicitly that they survive intact`,\n );\n }\n\n if (onParentDelete.enabled !== true) {\n return classify(\n SubjectErasureDisposition.RETAINED_BY_DECLARATION,\n 'onParentDelete.enabled is false: the author declared these rows survive their parent\\'s ' +\n 'teardown, so the erasure leaves them intact',\n );\n }\n\n const mode = onParentDelete.mode ?? ChildLifecycleMode.IMMEDIATE;\n if (mode !== ChildLifecycleMode.IMMEDIATE) {\n return classify(\n SubjectErasureDisposition.UNSUPPORTED_DEFERRED,\n `onParentDelete.mode is '${mode}': deferring the teardown to a queue would let the erasure ` +\n `report success while the subject's personal data is still live. Set mode: IMMEDIATE on ` +\n `this edge for it to participate in a subject erasure`,\n );\n }\n\n const strategy = onParentDelete.strategy ?? ChildLifecycleStrategy.DELETE;\n switch (strategy) {\n case ChildLifecycleStrategy.DELETE:\n return classify(\n SubjectErasureDisposition.DELETE,\n 'onParentDelete declares strategy DELETE: the dependent\\'s data dies with the subject\\'s ' +\n 'ownership, so the erasure removes the rows',\n );\n\n case ChildLifecycleStrategy.IMPERSONALIZE_AND_RETAIN:\n return classify(\n SubjectErasureDisposition.IMPERSONALIZE_AND_RETAIN,\n 'onParentDelete declares strategy IMPERSONALIZE_AND_RETAIN: the rows survive the erasure ' +\n 'with their personal fields scrubbed and retentionStatus flipped to RETAINED',\n );\n\n default: {\n // Compile-time exhaustiveness: a new ChildLifecycleStrategy member without an erasure arm is\n // a TYPE error here, not a silent runtime discovery on someone's deletion request.\n const _exhaustiveStrategyCheck: never = strategy;\n return classify(\n SubjectErasureDisposition.UNCLASSIFIED,\n `onParentDelete declares an unknown teardown strategy ` +\n `'${String(_exhaustiveStrategyCheck)}' that subject erasure has no arm for`,\n );\n }\n }\n}\n\n/** Per-edge outcome of an executed erasure — the classification plus what actually happened. */\nexport interface SubjectErasureEdgeOutcome extends SubjectErasureEdgeClassification {\n /**\n * `true` when the erasure ran a teardown for this edge.\n *\n * Reports that the teardown RAN, not that rows existed — discovery finding no dependents is a\n * teardown that ran with nothing to do, and is `true`.\n *\n * **Read it together with `disposition`, because `false` has two very different meanings:**\n *\n * - a NON-executing disposition (`RETAINED_BY_DECLARATION`, `NOT_OWNED`) ⇒ the erasure deliberately\n * left the rows alone, and `false` is the expected, correct answer;\n * - an EXECUTING disposition (`DELETE`, `IMPERSONALIZE_AND_RETAIN`) ⇒ the cascade DECLINED the edge\n * (the child had no registered service or repository, or the depth budget was spent). The\n * subject's data is partly still live. This pairing should never appear in a healthy system; it is\n * logged at ERROR when it happens, with the missing registration named.\n *\n * ⚠️ This flag was set unconditionally until 2026-08-11 — it meant \"the dispatcher returned without\n * throwing\" and reported a skipped edge as torn down. Anything persisted before that date overstates\n * what was erased. Treat this field as evidence only for reports produced after the fix.\n */\n executed: boolean;\n}\n\n/**\n * Outcome of one EXTERNAL, non-transactional erasure effect (a third-party provider the subject's\n * personal data also reached — a billing provider customer, say).\n *\n * A separate vocabulary from {@link SubjectErasureDisposition} on purpose. An edge disposition\n * describes a decision derived from configuration BEFORE anything ran, and its teardown is part of\n * the database transaction. An external effect is the opposite on both counts: it is discovered by\n * calling out to a system Wildo does not own, and it CANNOT join the transaction. Collapsing the\n * two would let a caller read \"the erasure succeeded\" from a value that only ever described the\n * local rows.\n */\nexport enum SubjectErasureExternalEffectStatus {\n /** Every step of the effect completed against the external system. */\n COMPLETED = 'completed',\n /**\n * The subject had nothing at this external system — no provider customer, no linked record. A\n * legitimate success, kept DISTINCT from `COMPLETED` so \"there was nothing to erase\" can never be\n * mistaken for \"we erased it\", which is exactly the confusion a regulator would probe.\n */\n NOTHING_TO_ERASE = 'nothing-to-erase',\n /**\n * The effect ran and some steps succeeded while others failed — personal data may still be live\n * at the external system. The loudest state in this enum: it demands follow-up, and it is why the\n * status is not a boolean.\n */\n PARTIAL = 'partial',\n /** The effect could not run at all (provider unreachable, not configured). Nothing was changed. */\n FAILED = 'failed',\n /**\n * No handler was registered for this effect. Distinct from `NOTHING_TO_ERASE`: that means we\n * looked and found nothing, this means nobody looked.\n */\n NOT_REGISTERED = 'not-registered',\n\n /**\n * The external system's binding DECLARES its rows hold no personal/subject data\n * (`HttpApiErasureStance.NO_SUBJECT_DATA`, ETL D6 stance 6a) — nothing was erased because,\n * by declaration, there is nothing an erasure could apply to. Distinct from\n * {@link NOTHING_TO_ERASE}: that means we LOOKED and found no linked rows; this means the\n * declaration made looking unnecessary. A complete outcome — the declaration's coherence is\n * validated at boot (a 6a resource cannot participate in subject export).\n */\n DECLARED_NO_SUBJECT_DATA = 'declared-no-subject-data',\n\n /**\n * The rows live in an external system the platform cannot erase, and the CONTROLLER explicitly\n * acknowledged completing the erasure anyway (`HttpApiErasureStance.\n * CONTROLLER_ACKNOWLEDGED_NON_ERASURE`, ETL D6 stance 6c — the per-request\n * `acknowledgeHttpApiNonErasure` option). Deliberately INCOMPLETE in\n * {@link isIncompleteSubjectErasureExternalEffect}: the subject's data is still live at the\n * third party, and a compliance artifact must say so however deliberate the decision was. The\n * acknowledgement itself is additionally recorded as a CRITICAL audit event — the record is\n * the control (`administrative-continuity-floors.md`).\n */\n ACKNOWLEDGED_NON_ERASURE = 'acknowledged-non-erasure',\n}\n\n/** Whether an external-effect status leaves personal data potentially live at a third party. */\nexport function isIncompleteSubjectErasureExternalEffect(\n status: SubjectErasureExternalEffectStatus,\n): boolean {\n return status === SubjectErasureExternalEffectStatus.PARTIAL\n || status === SubjectErasureExternalEffectStatus.FAILED\n || status === SubjectErasureExternalEffectStatus.NOT_REGISTERED\n // An acknowledged non-erasure is a DELIBERATE hole, and still a hole: personal data remains\n // live at the third party, so \"is this erasure actually complete\" must answer no.\n || status === SubjectErasureExternalEffectStatus.ACKNOWLEDGED_NON_ERASURE;\n}\n\nexport interface SubjectErasureExternalEffectOutcome {\n /** Stable identifier of the effect, e.g. `'billing-provider'`. */\n effectRef: string;\n status: SubjectErasureExternalEffectStatus;\n /**\n * Human-readable account of what ran, for the compliance artifact. On `PARTIAL` / `FAILED` this\n * must name what did NOT happen — the report is the only place that survives the request.\n */\n detail: string;\n /**\n * Per-step results, so a partial outcome is actionable rather than merely alarming (which step\n * against which external id). Never carries personal data — ids and step names only.\n */\n steps?: Array<{ step: string; targetRef?: string; succeeded: boolean; error?: string }>;\n}\n\n/**\n * What one subject erasure did — the compliance artifact of a \"delete my account\" request.\n *\n * Returned to the caller (rather than only logged) so the flow that fronts the request can record\n * or surface it: every edge of the subject appears exactly once with the disposition applied and\n * the configuration that justified it, which is the evidence a data-protection response needs.\n */\nexport interface SubjectErasureReport {\n /** The erased subject's resource type. */\n subjectResourceType: ResourceType;\n /** The erased subject rows. */\n subjectIds: string[];\n /** Every child-direction edge of the subject, classified, in registry order. */\n edges: SubjectErasureEdgeOutcome[];\n /**\n * `true` once the subject rows themselves were scrubbed and flipped to `RETAINED`. Always `true`\n * on a successful erasure — an erasure that could not retain its subject throws rather than\n * returning a report.\n */\n subjectImpersonalized: boolean;\n /**\n * Outcomes of the external, non-transactional effects the erasure triggered — every SYSTEM WE\n * DO NOT OWN that the subject's personal data reached: registered effect handlers (a billing\n * provider), and each HTTP_API-bound resource linked to the subject (one entry per resource,\n * `effectRef: 'http-api:<resourceType>'`, carrying its declared D6 erasure stance's outcome).\n *\n * Empty when no effect was registered for the subject's resource type. These run AFTER the local\n * scrub has committed, so a failure here cannot roll the erasure back — the local data is\n * already gone and re-running the whole erasure would be wrong. That asymmetry is precisely why\n * the outcome is reported rather than thrown: the local part genuinely succeeded, and the caller\n * needs to know that a third party still holds something.\n *\n * Check {@link isIncompleteSubjectErasureExternalEffect} over these before treating a report as a\n * complete erasure.\n */\n /**\n * Whose sessions this erasure ended, and whether resolving them failed.\n *\n * A LOCAL fact, not an external effect: the revocation is a write to our own session fence, applied\n * at the scrub chokepoint so it covers every path that scrubs a person's row. It is recorded here\n * because \"the erased person can no longer be logged in\" is exactly what a data-protection response\n * has to be able to evidence.\n *\n * `lookupFailed` is kept distinct from an empty `principalUserIds`: no principals is a legitimate\n * outcome (the resource declared `NO_PRINCIPAL`), whereas a failed lookup means the person may\n * still hold a live session — and the two must never look alike in a compliance artifact.\n */\n sessionRevocation?: {\n principalUserIds: string[];\n lookupFailed: boolean;\n };\n externalEffects: SubjectErasureExternalEffectOutcome[];\n}\n"]}
|
|
1
|
+
{"version":3,"file":"subject-erasure.shared.schemas.js","sourceRoot":"","sources":["../../../../../src/compliance/privacy/subject-erasure.shared.schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n RelationshipLifecycleModel,\n type ResourceRelationship,\n} from '../../resources/resources.shared.schemas';\nimport { Resources_SharedUtils } from '../../resources/resources.shared.utils';\nimport {\n ChildLifecycleMode,\n ChildLifecycleStrategy,\n} from '../../resources/child-operations.shared.schemas';\nimport type { ResourceType } from '../../resources/resources.shared.core.definitions';\nimport { ErasureRetentionMode } from './impersonalization.shared.schemas';\n\n/**\n * What a SUBJECT ERASURE does to one child-direction edge of the subject.\n *\n * ## Why this vocabulary exists at all\n *\n * \"Erase this subject\" (a `delete my account` request) is not \"delete this row\". The subject row\n * SURVIVES — scrubbed and marked `RETAINED` — so that foreign keys from legally-retained financial\n * rows keep resolving to an anonymized person. But the subject's OWN dependents must each be\n * disposed of, and the disposition differs per edge: a profile holding a name and an avatar has to\n * go, an invoice has to stay, an audit log was never the subject's to begin with.\n *\n * This enum is the closed set of answers, and it is deliberately WIDER than the two teardown\n * strategies of {@link ChildLifecycleStrategy}: the delete cascade only ever asks about edges that\n * opted IN (`onParentDelete.enabled === true`) and silently ignores the rest, whereas an erasure\n * must account for EVERY edge — including the ones nobody opted in — because an edge nobody thought\n * about is exactly where personal data survives an erasure unnoticed.\n *\n * Two members therefore have no runtime action and exist to make the erasure FAIL LOUD\n * ({@link UNCLASSIFIED}, {@link UNSUPPORTED_DEFERRED}), and three describe leaving a row alone for\n * three genuinely different reasons ({@link RETAINED_BY_DECLARATION}, {@link RESTRICTED_BY_DECLARATION},\n * {@link NOT_OWNED}). They are not merged despite sharing a no-op: a data-protection reviewer asking\n * \"why is this row still here?\" needs \"because the author declared it retained\", \"because its parent\n * may not be deleted while it exists\" and \"because it was never the subject's row\" to be different\n * answers, and only the first one is a retention claim someone made.\n */\nexport enum SubjectErasureDisposition {\n /**\n * Hard-delete the child rows. The author declared this dependent's data dies with the parent's\n * ownership (`onParentDelete.enabled`, `strategy: DELETE`) — on an erasure the ownership ends in\n * the only way that matters for personal data, so the rows go. This is the `USER_PROFILES` case:\n * there is no legal obligation to retain a name, a bio or an avatar.\n */\n DELETE = 'delete',\n\n /**\n * Scrub the child rows' personal fields in place and KEEP them, flipping `retentionStatus` to\n * `RETAINED` (`onParentDelete.strategy = IMPERSONALIZE_AND_RETAIN`). For a dependent that must\n * survive for a legal/audit obligation while holding personal data of its own.\n */\n IMPERSONALIZE_AND_RETAIN = 'impersonalize_and_retain',\n\n /**\n * LEAVE THE ROWS EXACTLY AS THEY ARE — a dependent whose cascade the author explicitly DISABLED\n * (`onParentDelete.enabled: false`). That declaration says \"this row survives its parent's\n * teardown\", which is a positive compliance claim, not an omission.\n *\n * This is how the retained billing rows are expressed: subscriptions, invoice refs, usage records\n * and credit pools each disable the cascade, keep their financial audit trail fully VISIBLE, and\n * rely on the erased subject row still resolving their foreign keys.\n */\n RETAINED_BY_DECLARATION = 'retained_by_declaration',\n\n /**\n * LEAVE THE ROWS EXACTLY AS THEY ARE — a dependent whose edge declares the RESTRICT posture\n * (`onParentDelete.strategy: REFUSE_WHILE_CHILDREN_EXIST`): the parent's delete is refused while\n * these rows exist, and nothing about the parent's teardown removes them.\n *\n * An erasure scrubs its subject in place and never deletes it, so at the direct level the refusal is\n * never met and the rows keep resolving their foreign key, as a retained row does. Below a dependent\n * the erasure DELETES, the same edge holding rows refuses the erasure, as a delete cascade frame does,\n * because deleting that parent would strand them. Kept apart from\n * {@link RETAINED_BY_DECLARATION} because the claim differs: that one says \"these rows must outlive\n * their parent\", this one says \"their parent may not go while they exist\". The second is about\n * referential integrity (an org-unit subtree, the provider-customer mapping a billing account holds\n * for its financial records), not a retention obligation.\n *\n * Like the other leave-alone dispositions, the erasure does not walk below these rows.\n */\n RESTRICTED_BY_DECLARATION = 'restricted_by_declaration',\n\n /**\n * LEAVE THE ROWS ALONE — the edge is not an ownership edge at all\n * (`lifecycleModelMode` is `INDEPENDENT` or `LINK_ONLY`, or the relationship is disabled). The\n * related rows live independently of the subject, so their disposition is not the subject's\n * erasure to decide (audit logs, job executions, membership links).\n */\n NOT_OWNED = 'not_owned',\n\n /**\n * ⛔ NO ANSWER — a DEPENDENT child with NO `onParentDelete` declaration whatsoever. The author\n * owns this dependent's lifecycle but never said what happens to it, and an erasure must not\n * guess: deleting could destroy data a retention obligation required keeping, and leaving could\n * strand personal data that the erasure claimed to have removed. The orchestrator throws.\n */\n UNCLASSIFIED = 'unclassified',\n\n /**\n * ⛔ DECLARED BUT NOT EXECUTABLE AS PART OF AN ERASURE — the edge opted in with\n * `mode: LAZY` (queue the teardown for later). Deferring is a legitimate performance choice for a\n * parent delete, but it would let an erasure report success while the subject's personal data is\n * still live in a queue nobody is watching. The orchestrator throws.\n */\n UNSUPPORTED_DEFERRED = 'unsupported_deferred',\n}\n\n/** The classification of ONE child-direction edge of an erasure subject. */\nexport interface SubjectErasureEdgeClassification {\n /** The dependent resource on the far side of the edge. */\n childResourceType: ResourceType;\n /** What the erasure will do with that dependent's rows. */\n disposition: SubjectErasureDisposition;\n /**\n * Human-readable justification, quoting the configuration that produced it. Surfaced in the\n * erasure report and in the fail-loud error, so an operator never has to re-derive WHY a row was\n * deleted, retained, or refused.\n */\n reason: string;\n}\n\n/**\n * The only part of a child's `retentionPolicy` an erasure classification reads (#1279).\n *\n * Structural and minimal on purpose: the classifier needs the erasure TREATMENT and nothing else, and\n * narrowing the parameter to this keeps every caller — the runtime orchestrator, the registry sweep and\n * the boot-time guards, which each hold a differently-shaped configuration record — able to answer\n * without first building a full `ResourceRetentionPolicy` it does not otherwise need.\n *\n * `mode` is optional because a caller may legitimately hold a resource entry with no retention opt-in;\n * that is the same answer as passing `undefined` and means \"this child declares no erasure treatment\".\n */\nexport interface SubjectErasureChildRetentionDeclaration {\n readonly mode?: ErasureRetentionMode;\n}\n\n/** Dispositions that ABORT the erasure rather than executing it. */\nconst BLOCKING_DISPOSITIONS: ReadonlySet<SubjectErasureDisposition> = new Set([\n SubjectErasureDisposition.UNCLASSIFIED,\n SubjectErasureDisposition.UNSUPPORTED_DEFERRED,\n]);\n\n/**\n * True when a disposition must stop the erasure before any write lands.\n *\n * Exported (rather than inlined at the one call site) so a future boot-time guard — the erasure\n * analogue of `validateCompositionCascadeDeletability` — reports exactly the edges the runtime\n * would refuse, instead of re-deriving the rule and drifting from it.\n */\nexport function isBlockingSubjectErasureDisposition(\n disposition: SubjectErasureDisposition,\n): boolean {\n return BLOCKING_DISPOSITIONS.has(disposition);\n}\n\n/**\n * Classify what a subject erasure must do with ONE child-direction edge — the delete-vs-retain\n * decision, DERIVED FROM CONFIGURATION rather than from a hardcoded list of resource types.\n *\n * ## Where the answer comes from\n *\n * Two declarations the author already makes, read through the SAME shared authority the runtime\n * delete cascade reads (`resolveRelationshipLifecycleOnParentDeleteConfig`), so the erasure and the\n * cascade can never disagree about what an edge says:\n *\n * 1. **`handling.lifecycleModelMode`** — does the subject own this dependent's lifecycle at all?\n * `INDEPENDENT` / `LINK_ONLY` answers \"no\", and the erasure leaves those rows alone.\n * 2. **`childOperations.lifecycle.onParentDelete`** — for an owned dependent, what did the author\n * declare happens when the parent stops owning it: hard-delete, scrub-and-retain, or nothing.\n *\n * 3. **the child's own `retentionPolicy`** — the ONE declaration whose entire subject is this\n * question: *\"`retentionPolicy.mode` on a resource says WHAT erasure does to a row\"*\n * (`retention-schedule.shared.schemas.ts`). Supplied through `resolveChildRetentionPolicy` so this\n * function stays pure.\n *\n * ## The semantic caveat — CORRECTED 2026-09-17 (#1279), and the correction is the point\n *\n * `onParentDelete` literally answers \"what happens when the parent row is DELETED\", and an erasure\n * does NOT delete the subject — it scrubs and keeps it. This function used to treat the two questions\n * as one, on a stated premise: *\"they have the same answer for every edge in the shipped registry\"*.\n *\n * **That premise was false, and it had never been measured.** Measured across `engine/`, `platform/`\n * and `examples/`: 28 edges reached a `DELETE` erasure disposition while the child resource declared\n * `retentionPolicy` — i.e. an erasure deleting rows whose own resource says an erasure keeps them.\n *\n * What made it invisible was a SCHEMA DEFAULT. `strategy` carried\n * `.default(ChildLifecycleStrategy.DELETE)`, so every parsed edge presented `strategy: 'delete'` as an\n * own property whether or not a human had ever considered the question — and **28 of those 28 edges\n * reached DELETE through that default. Not one author had written `strategy: DELETE` for a\n * retain-declaring resource.** The default was removed (see `ChildLifecycleOnDeleteConfigSchema`), so\n * absence now arrives here intact and this function can tell a decision from a silence.\n *\n * ## The precedence, which decides no legal question\n *\n * | child `retentionPolicy` | this edge's `strategy` | disposition |\n * |---|---|---|\n * | declared (retain) | **absent** | the retain treatment — the author answered the ERASURE question and nobody answered the teardown one. A default may not overrule a declaration |\n * | declared (retain) | authored `DELETE` | `CONTRADICTED_BY_DECLARATIONS` — refused |\n * | declared (retain) | authored `IMPERSONALIZE_AND_RETAIN` | they agree; the edge's arm below runs |\n * | none | anything, including absent | unchanged — no erasure declaration exists to honour |\n *\n * Note what is deliberately NOT done: \"retain wins\" is not made a blanket default over an AUTHORED\n * `DELETE`. {@link findSubjectErasureRetainDeleteConflicts} rejects exactly that reasoning for the\n * edge-vs-edge case — *it decides a legal question on the author's behalf; neither default is safe, so\n * no default* — and that rejection stands here. Deleting data a retention obligation required keeping\n * and stranding data an erasure claimed to have removed are both unsafe, and nothing in the\n * configuration says which the author meant. The only thing that changed is that a SCHEMA DEFAULT may\n * no longer impersonate an author's decision.\n *\n * A sibling `onSubjectErasure` axis on the edge was reconsidered and stays rejected: `retentionPolicy`\n * already IS the erasure axis, and adding a second one would give app authors two ways to say the same\n * thing — the objection the previous version of this note raised against it, which survives its own\n * premise being wrong.\n *\n * Pure and side-effect free — no registry lookups, no I/O — so it is equally usable from a runtime\n * orchestrator and from a boot-time guard.\n */\nexport function classifySubjectErasureDisposition(\n relationship: ResourceRelationship,\n resolveChildRetentionPolicy: (\n resourceType: ResourceType,\n ) => SubjectErasureChildRetentionDeclaration | undefined,\n): SubjectErasureEdgeClassification {\n const childResourceType = relationship.resourceType2 as ResourceType;\n const classify = (\n disposition: SubjectErasureDisposition,\n reason: string,\n ): SubjectErasureEdgeClassification => ({ childResourceType, disposition, reason });\n\n // A disabled relationship is not part of the live graph — the runtime never traverses it, so an\n // erasure must not refuse to run because of it (the alternative would be a permanently blocked\n // erasure on a resource carrying a switched-off edge).\n if (relationship.isDisabled === true) {\n return classify(\n SubjectErasureDisposition.NOT_OWNED,\n 'the relationship is disabled (isDisabled: true), so it is not part of the live graph',\n );\n }\n\n const semantics = Resources_SharedUtils.requireResolvedRelationshipSemantics(relationship);\n const lifecycleModel = semantics.handling.lifecycleModelMode;\n\n if (lifecycleModel !== RelationshipLifecycleModel.DEPENDENT) {\n return classify(\n SubjectErasureDisposition.NOT_OWNED,\n `lifecycleModelMode is '${lifecycleModel}' (not DEPENDENT): the related rows live ` +\n `independently of the subject, so their disposition is not this erasure's decision`,\n );\n }\n\n // DEPENDENT from here on: the subject owns this dependent's lifecycle, so the erasure MUST have\n // an answer for it.\n const onParentDelete = Resources_SharedUtils.resolveRelationshipLifecycleOnParentDeleteConfig(\n relationship,\n );\n\n if (!onParentDelete) {\n return classify(\n SubjectErasureDisposition.UNCLASSIFIED,\n `the subject owns this dependent (lifecycleModelMode: DEPENDENT) but the edge declares no ` +\n `onParentDelete lifecycle, so nobody has said whether its rows survive an erasure. ` +\n `Declare onParentDelete on the edge: 'enabled: true' with strategy DELETE (the rows hold ` +\n `no retainable value) or IMPERSONALIZE_AND_RETAIN (they must survive scrubbed), or ` +\n `'enabled: false' to state explicitly that they survive intact`,\n );\n }\n\n /*\n * ## DECIDED 2026-09-17 (#1084): this is NOT reconciled against a DELETE path, and that is correct\n *\n * The question was whether a resource reached BOTH by this disposition and by a DELETE edge should\n * be refused the way #1017 refuses `IMPERSONALIZE_AND_RETAIN` against `DELETE`. It should not, and\n * the reason is that the two cases are not alike.\n *\n * #1017 refuses because TWO EXECUTED TREATMENTS disagree about the same row: one scrubs it and keeps\n * it, the other removes it, and nothing says which wins. `enabled: false` executes nothing. The\n * erasure never traverses this edge and never discovers these rows, so there is no competing\n * treatment to reconcile — only one edge that acts and one that says nothing. A row with two parents\n * that survives one teardown and dies with the other is also exactly what an ordinary parent delete\n * does, so refusing here would make an erasure stricter than the lifecycle it is built on.\n *\n * Refusing was the filed recommendation and is rejected for a further reason: the #1017 refusal's own\n * remedy tells an operator to \"disable one edge's teardown (onParentDelete.enabled: false)\". Treating\n * the result as a new conflict would make the documented remedy produce the next refusal.\n *\n * What this disposition means is therefore narrower than its name suggests, and worth saying plainly:\n * it records that THIS EDGE does not cascade, not that the rows are guaranteed to survive the\n * erasure. Another path may still delete them, and that path's declaration is the one that decides.\n */\n if (onParentDelete.enabled !== true) {\n return classify(\n SubjectErasureDisposition.RETAINED_BY_DECLARATION,\n 'onParentDelete.enabled is false: the author declared these rows survive their parent\\'s ' +\n 'teardown, so the erasure leaves them intact',\n );\n }\n\n // The RESTRICT posture is read BEFORE the mode: it tears nothing down, so there is no teardown to\n // defer, and a `mode: LAZY` written beside it must not turn a leave-alone edge into a blocking one.\n // After this return TypeScript narrows `strategy` below to the teardown members, so the switch's\n // exhaustiveness check still turns any FUTURE member into a type error.\n if (onParentDelete.strategy === ChildLifecycleStrategy.REFUSE_WHILE_CHILDREN_EXIST) {\n return classify(\n SubjectErasureDisposition.RESTRICTED_BY_DECLARATION,\n 'onParentDelete declares strategy REFUSE_WHILE_CHILDREN_EXIST: the parent\\'s delete is refused ' +\n 'while these rows exist, and an erasure scrubs the subject in place rather than deleting it, so ' +\n 'the erasure leaves the rows intact',\n );\n }\n\n const mode = onParentDelete.mode ?? ChildLifecycleMode.IMMEDIATE;\n if (mode !== ChildLifecycleMode.IMMEDIATE) {\n return classify(\n SubjectErasureDisposition.UNSUPPORTED_DEFERRED,\n `onParentDelete.mode is '${mode}': deferring the teardown to a queue would let the erasure ` +\n `report success while the subject's personal data is still live. Set mode: IMMEDIATE on ` +\n `this edge for it to participate in a subject erasure`,\n );\n }\n\n /*\n * #1279 — the child's OWN erasure declaration is consulted BEFORE the edge's teardown strategy.\n *\n * ## Why this sits AFTER the deferral check, deliberately\n *\n * `mode: LAZY` is read above and refuses first, so a deferred edge never reaches the retention\n * question. The alternative — letting a retain policy rescue a LAZY edge, the way the RESTRICT\n * posture is read before `mode` — was considered and REJECTED: RESTRICT tears nothing down, so\n * there is genuinely no teardown to defer, while `RETAIN_AND_IMPERSONALIZE` is an ACTION (the\n * in-place scrub), and an erasure that defers its own scrub reports success while personal data is\n * still live. Refusing is the fail-closed answer and the one an operator can act on.\n *\n * Measured 2026-09-17: the shipped registry declares ZERO `mode: LAZY` edges, so this ordering is\n * currently unobservable. It is written down rather than left to be re-derived by whoever declares\n * the first one.\n *\n * `strategy` is read RAW here, never through `resolveChildLifecycleTeardownStrategy`. That helper\n * resolves absence to DELETE for the CASCADE, where the premise \"the parent row is gone\" makes it\n * correct. An erasure keeps the parent row, so the premise is false and the resolution would be a\n * manufactured answer — which is precisely the defect this replaces.\n */\n const authoredStrategy = onParentDelete.strategy;\n const childRetentionPolicy = resolveChildRetentionPolicy(childResourceType);\n\n if (childRetentionPolicy?.mode !== undefined) {\n const retentionMode = childRetentionPolicy.mode;\n const retainDisposition =\n retentionMode === ErasureRetentionMode.RETAIN_AND_IMPERSONALIZE\n ? SubjectErasureDisposition.IMPERSONALIZE_AND_RETAIN\n : SubjectErasureDisposition.RETAINED_BY_DECLARATION;\n\n if (authoredStrategy === undefined) {\n return classify(\n retainDisposition,\n `the child resource declares retentionPolicy.mode '${retentionMode}' — the declaration that ` +\n `states what an erasure does to its rows — and this edge authors no onParentDelete.strategy, ` +\n `so nothing contradicts it. The erasure applies the declared retention treatment rather than ` +\n `the teardown the delete cascade would apply, because an erasure keeps the parent row`,\n );\n }\n\n /*\n * An AUTHORED strategy is left to the switch below, deliberately — including an authored DELETE,\n * which CONTRADICTS this retention policy.\n *\n * Refusing it here as a per-edge disposition was implemented first and REVERTED, because a\n * blocking disposition is refused by the orchestrator BEFORE the plan-level detectors run: it\n * shadowed {@link findSubjectErasureRetainDeleteConflicts} (#1017) and\n * {@link findSubjectErasureSubjectTypeDeleteEdges} (#1085), whose refusals name both offending\n * edges and the resource, with a generic \"no executable disposition\" message. Two purpose-built,\n * mutation-proven refusals became unreachable for their whole population — every shape they\n * detect requires the child to declare a `retentionPolicy`, so every one of them is also this\n * contradiction.\n *\n * A contradiction is a relation between TWO declarations, which is what a plan-level detector\n * models and what a single edge's disposition cannot. It therefore lives beside its siblings, as\n * {@link findSubjectErasureRetentionContradictedEdges}.\n */\n }\n\n /*\n * The residual, named rather than left to look like an inconsistency with everything above.\n *\n * A child that declares NO `retentionPolicy` and sits on a SILENT edge has had nothing said about it\n * in either field, and here absence still resolves to DELETE — the reading the engine has always\n * had, that a dependent's data has no life of its own once the subject's ownership does not. 33\n * children are in that position (measured 2026-09-17), and the alternative was to refuse all 33 as\n * UNCLASSIFIED until someone authored a declaration for each.\n *\n * That was rejected for the reason `application-creation-directive.md` gives: the remedy would be\n * \"an author decides something\", which makes an erasure impossible to run until a large authoring\n * backlog is cleared, and #1279 was about an erasure doing the WRONG thing, not about it being\n * under-declared. The narrow fix is the one that keeps the correction checkable.\n *\n * What changed is precise and worth stating: silence no longer overrules a DECLARATION. It still\n * carries the historical default where there is no declaration to overrule. If this project later\n * wants that last case explicit too, the place for it is a per-edge `onSubjectErasure` axis, and\n * the argument against adding one speculatively is in this function's header.\n */\n const strategy = authoredStrategy ?? ChildLifecycleStrategy.DELETE;\n switch (strategy) {\n case ChildLifecycleStrategy.DELETE:\n return classify(\n SubjectErasureDisposition.DELETE,\n 'onParentDelete declares strategy DELETE: the dependent\\'s data dies with the subject\\'s ' +\n 'ownership, so the erasure removes the rows',\n );\n\n case ChildLifecycleStrategy.IMPERSONALIZE_AND_RETAIN:\n return classify(\n SubjectErasureDisposition.IMPERSONALIZE_AND_RETAIN,\n 'onParentDelete declares strategy IMPERSONALIZE_AND_RETAIN: the rows survive the erasure ' +\n 'with their personal fields scrubbed and retentionStatus flipped to RETAINED',\n );\n\n default: {\n // Compile-time exhaustiveness: a new ChildLifecycleStrategy member without an erasure arm is\n // a TYPE error here, not a silent runtime discovery on someone's deletion request.\n const _exhaustiveStrategyCheck: never = strategy;\n return classify(\n SubjectErasureDisposition.UNCLASSIFIED,\n `onParentDelete declares an unknown teardown strategy ` +\n `'${String(_exhaustiveStrategyCheck)}' that subject erasure has no arm for`,\n );\n }\n }\n}\n\n/**\n * One DESCENDANT edge an erasure must account for — an edge below the subject's direct dependents,\n * planned from configuration before anything runs (#976).\n *\n * `parentResourceType` is the resource whose rows the erasure tears down and that owns this edge;\n * the classification is the same one a direct edge gets, from the same shared classifier, so a\n * descendant and a direct edge can never disagree about what an identical declaration means.\n */\nexport interface SubjectErasureDescendantEdgePlan {\n /** The edge itself, as the parent resource's configuration declares it. */\n relationship: ResourceRelationship;\n /** The resource that owns this edge — its rows are the ones being torn down above it. */\n parentResourceType: ResourceType;\n classification: SubjectErasureEdgeClassification;\n}\n\n/**\n * Plan every DESCENDANT edge a subject erasure walks below ONE direct dependent (#976).\n *\n * ## What an erasure walks, and why exactly that\n *\n * - **Below a `DELETE` edge — everything, at every depth, regardless of `maxDepth`.** The rows are\n * gone, so whatever depended on them has lost its owner; an erasure that stops at a depth budget\n * leaves the subject's data one level down with nothing left to reach it. `maxDepth` is a\n * parent-DELETE performance budget and keeps meaning exactly that on the delete cascade.\n * - **Below an `IMPERSONALIZE_AND_RETAIN` edge — nothing.** The retained row survives, scrubbed, so\n * its own dependents still have their owner and remain bound to THAT row's future lifecycle. The\n * retention obligation that keeps the row is the obligation that keeps what hangs off it; tearing\n * those down would destroy records a legal obligation required keeping, and scrubbing them would\n * need a declaration nobody made. This matches the cascade itself, whose retain arm never recurses.\n * - **Below `RETAINED_BY_DECLARATION` / `NOT_OWNED` — nothing.** The rows are not touched.\n *\n * Every child-direction edge of every walked resource is returned — including the ones that do\n * nothing — because the receipt is total over what the erasure walked, exactly as it is at the\n * direct level. A blocking classification anywhere in the plan must refuse the erasure BEFORE its\n * transaction opens; returning it (rather than throwing here) lets the caller name every one.\n *\n * ## Termination\n *\n * The walk is over RESOURCE TYPES, not rows, so each type's edges are planned once: a self-referential\n * edge (a folder of folders) or a cycle between types terminates here, while the row-level cascade\n * keeps its own visited-row guard.\n *\n * Pure: the caller supplies the lookup, so a boot-time guard can run the same planner the runtime\n * does rather than re-deriving it.\n *\n * @param directChildResourceType - the far side of the subject's direct `DELETE` edge.\n * @param resolveChildDirectionRelationships - the child-direction edges of a resource type, or\n * `undefined` when the type has no configuration in this process (nothing is planned below it; the\n * runtime cascade then declines that edge and reports it as not executed).\n * @param resolveChildRetentionPolicy - a resource type's declared `retentionPolicy`, or `undefined`\n * when it declares none. Injected for the same reason as the lookup above: it keeps this planner\n * pure, so a boot-time guard classifies a descendant edge exactly as the runtime will (#1279).\n */\nexport function planSubjectErasureDescendantEdges(\n directChildResourceType: ResourceType,\n resolveChildDirectionRelationships: (resourceType: ResourceType) => ResourceRelationship[] | undefined,\n resolveChildRetentionPolicy: (\n resourceType: ResourceType,\n ) => SubjectErasureChildRetentionDeclaration | undefined,\n): SubjectErasureDescendantEdgePlan[] {\n const planned: SubjectErasureDescendantEdgePlan[] = [];\n const walked = new Set<string>();\n const pending: ResourceType[] = [directChildResourceType];\n\n while (pending.length > 0) {\n const parentResourceType = pending.shift()!;\n if (walked.has(String(parentResourceType))) continue;\n walked.add(String(parentResourceType));\n\n for (const relationship of resolveChildDirectionRelationships(parentResourceType) ?? []) {\n const classification = classifySubjectErasureDisposition(relationship, resolveChildRetentionPolicy);\n planned.push({ relationship, parentResourceType, classification });\n if (classification.disposition === SubjectErasureDisposition.DELETE) {\n pending.push(classification.childResourceType);\n }\n }\n }\n\n return planned;\n}\n\n/**\n * One resource an erasure's plan reaches both to KEEP its rows and to DELETE them (#1017).\n *\n * `TEdge` is whatever the caller planned — a direct edge, a descendant edge, or its own record of either —\n * so the orchestrator can name the edges the way its refusal already names unresolved ones.\n */\nexport interface SubjectErasureRetainDeleteConflict<TEdge> {\n /** The resource on the far side of every edge below. */\n resourceType: ResourceType;\n /** Edges that scrub these rows and keep them (`IMPERSONALIZE_AND_RETAIN`), in plan order. */\n retainingEdges: TEdge[];\n /** Edges that hard-delete these rows (`DELETE`), in plan order. */\n deletingEdges: TEdge[];\n}\n\n/**\n * Find every resource a subject erasure's WHOLE plan reaches through both a retaining edge and a deleting\n * edge (#1017). The erasure REFUSES before its transaction opens when this returns anything.\n *\n * ## The shape\n *\n * Each edge applies its own declared treatment to the rows it reaches: `DELETE` hard-deletes them,\n * `IMPERSONALIZE_AND_RETAIN` scrubs them and keeps them. Two DIFFERENT paths can reach the same resource — a\n * `people → records` retain edge beside `people → profiles → notes → records` delete, or two edges on one\n * resource through two foreign keys — and nothing in either declaration says what happens to a row BOTH\n * reach. Before this, the answer was the walk order: a row kept by the retain edge could still be deleted\n * when the delete edge's cascade got there, and #976 could only make the receipt admit it (`executed: false`).\n *\n * ## Why REFUSE, and why at the level of resource types\n *\n * The two declarations contradict each other for the rows they share, and neither outranks the other in\n * configuration. Refusing is the one answer that needs no new meaning: it surfaces the contradiction to the\n * author, who owns both declarations and can make them agree — declare the delete edge\n * `IMPERSONALIZE_AND_RETAIN` too, declare the retain edge `DELETE`, or disable one edge's teardown\n * (`onParentDelete.enabled: false`) — on the ground the legal obligation actually gives.\n *\n * The check is over resource TYPES, not rows, on purpose. Whether two edges share a row is only knowable by\n * reading rows, which the pre-flight must not do (every refusal here lands before the first read and write),\n * and it changes as rows are written, so a row-level \"no overlap today\" would be a guess about the future.\n * An edge pair that can never share a row in practice is still refused; the remedy is the same one-edge edit.\n *\n * ## Rejected: a precedence where retain wins\n *\n * \"Keep a row whenever any edge retains it\" was considered and rejected, for three reasons:\n *\n * - **It decides a legal question on the author's behalf.** A `DELETE` edge is a declaration too — that the\n * rows hold nothing worth keeping once their owner is gone. GDPR Art. 17(3) lists the grounds on which the\n * right to erasure does not apply (a legal obligation, the defence of legal claims, archiving, …), and\n * Art. 5(2) makes the controller \"responsible for, and be able to demonstrate compliance with\" the\n * principles. Keeping personal data an explicit declaration said to remove therefore needs a ground the\n * controller can name, and a framework default names none. \"Delete wins\" fails the other way, destroying\n * records a retention obligation required keeping. Neither default is safe, so no default.\n * spec-cite: Regulation (EU) 2016/679, Art. 5(2) (accountability) and Art. 17(3)(a)–(e) (exceptions to the right to erasure).\n * - **Only its row-level form is faithful, and that form cannot be decided before the transaction.** A\n * TYPE-level \"retain wins\" could be decided pre-flight, but it would keep every row of the resource,\n * including rows only the delete edge reaches and the retain edge never touches — rows no retention\n * declaration covers. The faithful rule is ROW-level: the delete walk skips each row a retain edge kept and\n * prunes everything it planned below that row (a kept row still anchors its own dependents), per row,\n * mid-transaction. The pre-flight plan is over types and cannot express that, so the\n * refusal-before-any-write guarantee the rest of the erasure keeps would be lost.\n * - **It adds a meaning with no vocabulary for its opposite.** Once precedence exists, an author who needs\n * the delete to win has no way to say so.\n *\n * ## What is NOT a conflict\n *\n * Only `DELETE` against `IMPERSONALIZE_AND_RETAIN` — the two treatments the erasure EXECUTES. Two deleting or\n * two retaining edges agree. `NOT_OWNED` rows are not the subject's, and the erasure never discovers them.\n * Two cases are deliberately NOT refused here. Each is an open decision, not an answer this rule gives:\n *\n * - **(a) A `RETAINED_BY_DECLARATION` dependent beside a `DELETE` path to the same resource (#1084).** The\n * erasure never discovers `enabled: false` rows, and a row with two parents that survives one teardown and\n * dies with the other is also what an ordinary parent delete does. **DECIDED 2026-09-17: this stays out.**\n * `enabled: false` executes nothing, so there are not two treatments to reconcile — and the refusal below\n * names `onParentDelete.enabled: false` as its own remedy, so counting it as a conflict would make that\n * remedy produce the next refusal. The full argument is at the classification site.\n * - **(b) A delete closure that cycles back to the SUBJECT's own resource type while the subject row is\n * retained (#1085).** The subject's retention is the erasure's own final step (the scrub), not an edge, so\n * this detector — which reads only edges — cannot see it. **CLOSED 2026-09-17 by\n * {@link findSubjectErasureSubjectTypeDeleteEdges}**, a sibling that takes the subject's own type as an\n * argument precisely because it is not derivable from the edges.\n *\n * Pure, so a boot-time guard can run it over the same plan the runtime refuses on.\n *\n * @param plannedEdges - every edge of ONE erasure: the subject's direct edges AND every descendant edge\n * planned below its deleted dependents, each carrying its classification.\n * @returns one entry per conflicting resource, in the order the resource is first reached.\n */\nexport function findSubjectErasureRetainDeleteConflicts<TEdge extends { classification: SubjectErasureEdgeClassification }>(\n plannedEdges: readonly TEdge[],\n): Array<SubjectErasureRetainDeleteConflict<TEdge>> {\n const byResourceType = new Map<string, SubjectErasureRetainDeleteConflict<TEdge>>();\n for (const edge of plannedEdges) {\n const { disposition, childResourceType } = edge.classification;\n if (disposition !== SubjectErasureDisposition.DELETE && disposition !== SubjectErasureDisposition.IMPERSONALIZE_AND_RETAIN) {\n continue;\n }\n const key = String(childResourceType);\n const entry = byResourceType.get(key) ?? { resourceType: childResourceType, retainingEdges: [], deletingEdges: [] };\n byResourceType.set(key, entry);\n if (disposition === SubjectErasureDisposition.DELETE) entry.deletingEdges.push(edge);\n else entry.retainingEdges.push(edge);\n }\n return [...byResourceType.values()].filter((entry) => entry.retainingEdges.length > 0 && entry.deletingEdges.length > 0);\n}\n\n/**\n * What happened on ONE descendant edge of an executed erasure (#976) — reported exactly like a direct\n * edge: its disposition, the configuration that justified it, and whether its teardown ran.\n */\nexport interface SubjectErasureDescendantEdgeOutcome extends SubjectErasureEdgeClassification {\n /** The resource that owns this edge. */\n parentResourceType: ResourceType;\n /**\n * `true` when every teardown the erasure reached on this edge ran, `false` when any was declined, when\n * this DELETE edge reached rows an earlier retain edge of the same walk scrubbed and KEPT (they are not\n * gone, whatever this edge declares — unreachable since #1017, which refuses a plan that retains and deletes\n * one resource before it runs, and kept as defence in depth), or when an edge ABOVE it was declined (its rows were then never\n * walked, so nothing can be said about what they still hold). `false` on a non-executing disposition\n * is expected, as on a direct edge.\n *\n * An executing edge the walk never had to dispatch — its parent resource had no rows of the subject's\n * left to tear down — is `true`: that is a teardown with nothing to do, not a decline.\n */\n executed: boolean;\n}\n\n/** Per-edge outcome of an executed erasure — the classification plus what actually happened. */\nexport interface SubjectErasureEdgeOutcome extends SubjectErasureEdgeClassification {\n /**\n * Every edge below this one that the erasure walked, flat and in plan order (#976). Empty for a\n * non-executing disposition and for `IMPERSONALIZE_AND_RETAIN`, which retains its rows and therefore\n * does not walk below them — see {@link planSubjectErasureDescendantEdges}.\n */\n descendantEdges: SubjectErasureDescendantEdgeOutcome[];\n /**\n * `true` when the erasure ran a teardown for this edge AND for every descendant edge below it whose\n * disposition executes (#976). A declined descendant therefore makes its direct edge `false`: a\n * reader who only counts direct edges must not read a subtree that still holds live data as erased.\n * {@link descendantEdges} says which descendant it was.\n *\n * Reports that the teardown RAN, not that rows existed — discovery finding no dependents is a\n * teardown that ran with nothing to do, and is `true`.\n *\n * **Read it together with `disposition`, because `false` has two very different meanings:**\n *\n * - a NON-executing disposition (`RETAINED_BY_DECLARATION`, `NOT_OWNED`) ⇒ the erasure deliberately\n * left the rows alone, and `false` is the expected, correct answer;\n * - an EXECUTING disposition (`DELETE`, `IMPERSONALIZE_AND_RETAIN`) ⇒ the cascade DECLINED the edge\n * (the child had no registered service or repository), or an edge BELOW it did not tear its rows\n * down (see `descendantEdges`) — declined the same way, or a DELETE edge that reached rows an\n * earlier retain edge of the walk kept. An erasure never spends a depth budget — it walks every\n * descendant. The subject's data is partly still live. This pairing should never appear in a\n * healthy system; it is logged at ERROR when it happens, naming the missing registration or the\n * descendant edges concerned.\n *\n * ⚠️ This flag was set unconditionally until 2026-08-11 — it meant \"the dispatcher returned without\n * throwing\" and reported a skipped edge as torn down. Anything persisted before that date overstates\n * what was erased. Treat this field as evidence only for reports produced after the fix.\n */\n executed: boolean;\n}\n\n/**\n * Outcome of one EXTERNAL, non-transactional erasure effect (a third-party provider the subject's\n * personal data also reached — a billing provider customer, say).\n *\n * A separate vocabulary from {@link SubjectErasureDisposition} on purpose. An edge disposition\n * describes a decision derived from configuration BEFORE anything ran, and its teardown is part of\n * the database transaction. An external effect is the opposite on both counts: it is discovered by\n * calling out to a system Wildo does not own, and it CANNOT join the transaction. Collapsing the\n * two would let a caller read \"the erasure succeeded\" from a value that only ever described the\n * local rows.\n */\nexport enum SubjectErasureExternalEffectStatus {\n /** Every step of the effect completed against the external system. */\n COMPLETED = 'completed',\n /**\n * The subject had nothing at this external system — no provider customer, no linked record. A\n * legitimate success, kept DISTINCT from `COMPLETED` so \"there was nothing to erase\" can never be\n * mistaken for \"we erased it\", which is exactly the confusion a regulator would probe.\n */\n NOTHING_TO_ERASE = 'nothing-to-erase',\n /**\n * The effect ran and some steps succeeded while others failed — personal data may still be live\n * at the external system. The loudest state in this enum: it demands follow-up, and it is why the\n * status is not a boolean.\n */\n PARTIAL = 'partial',\n /** The effect could not run at all (provider unreachable, not configured). Nothing was changed. */\n FAILED = 'failed',\n /**\n * No handler was registered for this effect. Distinct from `NOTHING_TO_ERASE`: that means we\n * looked and found nothing, this means nobody looked.\n */\n NOT_REGISTERED = 'not-registered',\n\n /**\n * A bound external-effects port returned no usable report. The local erasure committed, but\n * external outcomes are UNKNOWN: neither no work nor no change can be inferred. Incomplete;\n * reconcile provider state before retrying work that may already have succeeded.\n */\n UNMEASURED = 'unmeasured',\n\n /**\n * The external system's binding DECLARES its rows hold no personal/subject data\n * (`HttpApiErasureStance.NO_SUBJECT_DATA`, ETL D6 stance 6a) — nothing was erased because,\n * by declaration, there is nothing an erasure could apply to. Distinct from\n * {@link NOTHING_TO_ERASE}: that means we LOOKED and found no linked rows; this means the\n * declaration made looking unnecessary. A complete outcome — the declaration's coherence is\n * validated at boot (a 6a resource cannot participate in subject export).\n */\n DECLARED_NO_SUBJECT_DATA = 'declared-no-subject-data',\n\n /**\n * The rows live in an external system the platform cannot erase, and the CONTROLLER explicitly\n * acknowledged completing the erasure anyway (`HttpApiErasureStance.\n * CONTROLLER_ACKNOWLEDGED_NON_ERASURE`, ETL D6 stance 6c — the per-request\n * `acknowledgeHttpApiNonErasure` option). Deliberately INCOMPLETE in\n * {@link isIncompleteSubjectErasureExternalEffect}: the subject's data is still live at the\n * third party, and a compliance artifact must say so however deliberate the decision was. The\n * acknowledgement itself is additionally recorded as a CRITICAL audit event — the record is\n * the control (`administrative-continuity-floors.md`).\n */\n ACKNOWLEDGED_NON_ERASURE = 'acknowledged-non-erasure',\n}\n\n/** Whether an external-effect status leaves personal data potentially live at a third party. */\nexport function isIncompleteSubjectErasureExternalEffect(\n status: SubjectErasureExternalEffectStatus,\n): boolean {\n return status === SubjectErasureExternalEffectStatus.PARTIAL\n || status === SubjectErasureExternalEffectStatus.FAILED\n || status === SubjectErasureExternalEffectStatus.NOT_REGISTERED\n || status === SubjectErasureExternalEffectStatus.UNMEASURED\n // An acknowledged non-erasure is a DELIBERATE hole, and still a hole: personal data remains\n // live at the third party, so \"is this erasure actually complete\" must answer no.\n || status === SubjectErasureExternalEffectStatus.ACKNOWLEDGED_NON_ERASURE;\n}\n\nexport interface SubjectErasureExternalEffectOutcome {\n /** Stable identifier of the effect, e.g. `'billing-provider'`. */\n effectRef: string;\n status: SubjectErasureExternalEffectStatus;\n /**\n * Human-readable account of what ran, for the compliance artifact. On `PARTIAL` / `FAILED` this\n * must name what did NOT happen — the report is the only place that survives the request.\n */\n detail: string;\n /**\n * Per-step results, so a partial outcome is actionable rather than merely alarming (which step\n * against which external id). Never carries personal data — ids and step names only.\n */\n steps?: Array<{ step: string; targetRef?: string; succeeded: boolean; error?: string }>;\n}\n\n/**\n * What one subject erasure did — the compliance artifact of a \"delete my account\" request.\n *\n * Returned to the caller (rather than only logged) so the flow that fronts the request can record\n * or surface it: every edge of the subject appears exactly once with the disposition applied and\n * the configuration that justified it, which is the evidence a data-protection response needs.\n *\n * assurance-control: WILDO.PRIVACY.ERASURE_PROPAGATION — an erasure accounts per store instead of\n * one verdict: each direct dependent edge with whether its teardown ran, each descendant edge the\n * erasure walked below it (nested in `descendantEdges`, folded into the direct edge's `executed`),\n * each registered external effect with its own outcome. The engine returns this and persists none of\n * it; retaining it is the calling application's job.\n */\nexport interface SubjectErasureReport {\n /** The erased subject's resource type. */\n subjectResourceType: ResourceType;\n /** The erased subject rows. */\n subjectIds: string[];\n /** Every child-direction edge of the subject, classified, in registry order. */\n edges: SubjectErasureEdgeOutcome[];\n /**\n * `true` once the subject rows themselves were scrubbed and flipped to `RETAINED`. Always `true`\n * on a successful erasure — an erasure that could not retain its subject throws rather than\n * returning a report.\n */\n subjectImpersonalized: boolean;\n /**\n * Whose sessions this erasure ended, and whether resolving them failed.\n *\n * A LOCAL fact, not an external effect: the revocation is a write to our own session fence, applied\n * at the scrub chokepoint so it covers every path that scrubs a person's row. It is recorded here\n * because \"the erased person can no longer be logged in\" is exactly what a data-protection response\n * has to be able to evidence.\n *\n * `lookupFailed` is kept distinct from an empty `principalUserIds`: no principals is a legitimate\n * outcome (the resource declared `NO_PRINCIPAL`), whereas a failed lookup means the person may\n * still hold a live session — and the two must never look alike in a compliance artifact.\n */\n sessionRevocation?: {\n principalUserIds: string[];\n lookupFailed: boolean;\n };\n /**\n * Outcomes of the external, non-transactional effects the erasure triggered — every SYSTEM WE\n * DO NOT OWN that the subject's personal data reached: registered effect handlers (a billing\n * provider), and each HTTP_API-bound resource linked to the subject (one entry per resource,\n * `effectRef: 'http-api:<resourceType>'`, carrying its declared D6 erasure stance's outcome).\n *\n * A malformed response from a bound registry produces one aggregate UNMEASURED entry,\n * identifying that boundary rather than inventing individual provider outcomes.\n *\n * Empty when no effect was registered for the subject's resource type. These run AFTER the local\n * scrub has committed, so a failure here cannot roll the erasure back — the local data is\n * already gone and re-running the whole erasure would be wrong. That asymmetry is precisely why\n * the outcome is reported rather than thrown: the local part genuinely succeeded, and the caller\n * needs to know that a third party still holds something.\n *\n * Check {@link isIncompleteSubjectErasureExternalEffect} over these before treating a report as a\n * complete erasure.\n */\n externalEffects: SubjectErasureExternalEffectOutcome[];\n}\n\n\n/**\n * Edges whose DELETE would reach the SUBJECT'S OWN resource type (#1085).\n *\n * ## The hazard\n *\n * A subject erasure SCRUBS the subject row and keeps it — that is the erasure's contract with the data\n * subject, and it is unconditional: `eraseSubjectInPlace` refuses outright when the subject resource\n * declares no `retentionPolicy`. Since #976 the walk also descends below every dependent it deletes, so\n * a DELETE closure that comes back round to the subject's own type would delete the very row the\n * erasure promised to retain — and the receipt would still report it retained.\n *\n * That last part is why this refuses rather than skips. `SubjectErasureDescendantWalk`'s accounting is\n * written so a receipt can never OVERSTATE an erasure; deleting the scrubbed subject would overstate in\n * the one way nothing downstream can detect, because every edge reports exactly what it did.\n *\n * ## Why the sibling detector cannot do this\n *\n * {@link findSubjectErasureRetainDeleteConflicts} compares two EDGE dispositions. The subject's retention\n * is not an edge — no relationship declares it — so the subject's type is passed in here rather than\n * inferred. It is the whole reason this is a second function and not a case in the first.\n *\n * ## Measured 2026-09-17: the population is EMPTY, and that is the point\n *\n * In the engine's core graph `USERS` is never the CHILD of a composition. The one relationship naming it\n * second — `ORGANIZATIONS → USERS` — is a `RelationshipNature.ASSOCIATION` through\n * `ORGANIZATION_MEMBERS`, and an association carries no `onParentDelete` teardown, so no closure can\n * reach it. A guard over an empty population costs nothing at runtime and is exactly the shape worth\n * having: it cannot regress silently, and an application that later declares such an edge meets a\n * refusal before any read or write instead of an erasure that quietly contradicts itself.\n *\n * Pure, so a boot-time guard can run it over the same plan the runtime refuses on.\n *\n * @param plannedEdges - every edge of ONE erasure, each carrying its classification.\n * @param subjectResourceType - the resource being erased, whose row is retained.\n * @returns the offending edges, in plan order. Empty is the healthy answer.\n */\n/**\n * Edges that DELETE a resource whose OWN `retentionPolicy` says an erasure keeps its rows (#1279).\n *\n * ## The contradiction\n *\n * A resource's `retentionPolicy` is the declaration whose entire subject is what an erasure does to\n * its rows, and the config factory refuses it unless it is paired with a `dataSubjectPolicy` — so it\n * is among the most deliberate statements an author makes. An edge that nevertheless AUTHORS\n * `onParentDelete.strategy: DELETE` says the opposite about the same rows. Nothing in the\n * configuration ranks the two, so an erasure must refuse rather than pick: deleting could destroy\n * data a retention obligation required keeping, and retaining could strand personal data the erasure\n * claimed to have removed. That is the same reasoning {@link findSubjectErasureRetainDeleteConflicts}\n * gives for refusing rather than defaulting, applied one level down — there between two EDGES, here\n * between an edge and the RESOURCE it points at.\n *\n * ## Why a DELETE disposition here is necessarily AUTHORED\n *\n * Since #1279 `classifySubjectErasureDisposition` applies the child's retention treatment whenever the\n * edge is SILENT, so a `DELETE` disposition toward a retain-declaring child can only have come from an\n * author writing `strategy: DELETE`. This filter therefore needs no second look at the declaration:\n * the invariant is expressed once, in the classifier, and read here. Do NOT re-derive \"was it\n * authored?\" from the relationship — that would be a second copy of the rule, free to drift.\n *\n * ## Measured population: ZERO, and that is the point\n *\n * Across `engine/`, `platform/` and `examples/` on 2026-09-17, 28 edges deleted a retain-declaring\n * resource and **not one of them authored `DELETE`** — every one reached that outcome through the\n * schema default this fix removed. So the shipped registry trips this detector nowhere, which is the\n * shape worth having: it cannot regress silently, and an application that later authors the\n * contradiction meets a refusal before any read or write rather than an erasure that quietly\n * contradicts its own declarations.\n *\n * Pure, so a boot-time guard can run it over the same plan the runtime refuses on.\n *\n * @param plannedEdges - every edge of ONE erasure, each carrying its classification.\n * @param resolveChildRetentionPolicy - a resource type's declared `retentionPolicy`, or `undefined`.\n * @returns the offending edges, in plan order. Empty is the healthy answer.\n */\nexport function findSubjectErasureRetentionContradictedEdges<TEdge extends { classification: SubjectErasureEdgeClassification }>(\n plannedEdges: readonly TEdge[],\n resolveChildRetentionPolicy: (\n resourceType: ResourceType,\n ) => SubjectErasureChildRetentionDeclaration | undefined,\n): TEdge[] {\n return plannedEdges.filter((edge) =>\n edge.classification.disposition === SubjectErasureDisposition.DELETE\n && resolveChildRetentionPolicy(edge.classification.childResourceType)?.mode !== undefined);\n}\n\nexport function findSubjectErasureSubjectTypeDeleteEdges<TEdge extends { classification: SubjectErasureEdgeClassification }>(\n plannedEdges: readonly TEdge[],\n subjectResourceType: string,\n): TEdge[] {\n return plannedEdges.filter((edge) =>\n edge.classification.disposition === SubjectErasureDisposition.DELETE\n && String(edge.classification.childResourceType) === String(subjectResourceType));\n}\n"]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How often something is re-reviewed, and the date that cadence schedules.
|
|
3
|
+
*
|
|
4
|
+
* ## Why it lives HERE
|
|
5
|
+
*
|
|
6
|
+
* Moved from `@wildo-ai/saas-specifications` `_core/market/market-authored-metadata.schemas` on
|
|
7
|
+
* 2026-09-11, and re-exported from there so its six existing importers are untouched. It had to move
|
|
8
|
+
* because it gained a consumer on the other side of a package boundary: an application declares
|
|
9
|
+
* `assuranceReviewCadence` in `wildo.saas.config.ts`, which is validated by
|
|
10
|
+
* `@wildo-ai/platform-config-lib` — a contracts-only package that does not depend on
|
|
11
|
+
* `saas-specifications` and should not start depending on it for one enum. `saas-models` is where the
|
|
12
|
+
* application-declared compliance vocabularies already live (`DataRetentionClass`, `LawfulBasis`,
|
|
13
|
+
* `PersonalDataCategory`, `OperatorProcessingRole`), and both packages already depend on it.
|
|
14
|
+
*
|
|
15
|
+
* The alternative — a second, purpose-named cadence enum beside this one — was rejected. It would
|
|
16
|
+
* have carried four identical members and differed only by excluding `AS_NEEDED`, which is a
|
|
17
|
+
* CONSUMER's constraint rather than a different vocabulary. CLAUDE.md: a closed vocabulary has one
|
|
18
|
+
* named runtime source.
|
|
19
|
+
*/
|
|
20
|
+
export declare enum ReviewCadence {
|
|
21
|
+
WEEKLY = "WEEKLY",
|
|
22
|
+
MONTHLY = "MONTHLY",
|
|
23
|
+
QUARTERLY = "QUARTERLY",
|
|
24
|
+
YEARLY = "YEARLY",
|
|
25
|
+
/** A real answer meaning "no schedule" — never a default, and never a date. See {@link deriveNextReviewOn}. */
|
|
26
|
+
AS_NEEDED = "AS_NEEDED"
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* How many days one {@link ReviewCadence} member means.
|
|
30
|
+
*
|
|
31
|
+
* ONE home, promoted 2026-09-11 from two byte-identical module-local copies —
|
|
32
|
+
* `roadmap-snapshot-validation.ts` and `brand-snapshot-validation.ts`, the second of which said so in
|
|
33
|
+
* its own comment: *"module-local there too — a shared promotion is part of the deferred
|
|
34
|
+
* authored-metadata generalization"*. A third consumer is what made the deferral stop paying.
|
|
35
|
+
*
|
|
36
|
+
* `Record<ReviewCadence, number>` and not a partial: a member added to the enum is a compile error
|
|
37
|
+
* here rather than a silent `undefined` that reads as "no cadence" at every call site.
|
|
38
|
+
*
|
|
39
|
+
* `AS_NEEDED` is `POSITIVE_INFINITY` deliberately, so every consumer must decide what "no schedule"
|
|
40
|
+
* means for it rather than receiving a number that quietly schedules something. `Number.isFinite` is
|
|
41
|
+
* the guard each one uses.
|
|
42
|
+
*/
|
|
43
|
+
export declare const REVIEW_CADENCE_TO_DAYS: Record<ReviewCadence, number>;
|
|
44
|
+
/**
|
|
45
|
+
* The next review date a cadence schedules from a given instant, or `undefined` when it schedules none.
|
|
46
|
+
*
|
|
47
|
+
* `undefined` for `AS_NEEDED` is the whole contract. A caller that needs a DATE must treat the absence
|
|
48
|
+
* as the answer — "this application has not committed to a review schedule" — and say so, rather than
|
|
49
|
+
* inventing one. Returning a far-future date instead would turn "no commitment" into a commitment
|
|
50
|
+
* nobody made, which is exactly the shape `.claude/rules/derive-before-you-ask.md` describes when a
|
|
51
|
+
* date stands in for a decision.
|
|
52
|
+
*
|
|
53
|
+
* Returns a plain ISO date (`YYYY-MM-DD`): a review is scheduled on a day, not at an instant.
|
|
54
|
+
*/
|
|
55
|
+
export declare function deriveNextReviewOn(fromInstant: string, cadence: ReviewCadence): string | undefined;
|
|
56
|
+
//# sourceMappingURL=review-cadence.shared.schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-cadence.shared.schemas.d.ts","sourceRoot":"","sources":["../../../../src/compliance/review-cadence.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,oBAAY,aAAa;IACvB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,+GAA+G;IAC/G,SAAS,cAAc;CACxB;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAMhE,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAMlG"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How often something is re-reviewed, and the date that cadence schedules.
|
|
3
|
+
*
|
|
4
|
+
* ## Why it lives HERE
|
|
5
|
+
*
|
|
6
|
+
* Moved from `@wildo-ai/saas-specifications` `_core/market/market-authored-metadata.schemas` on
|
|
7
|
+
* 2026-09-11, and re-exported from there so its six existing importers are untouched. It had to move
|
|
8
|
+
* because it gained a consumer on the other side of a package boundary: an application declares
|
|
9
|
+
* `assuranceReviewCadence` in `wildo.saas.config.ts`, which is validated by
|
|
10
|
+
* `@wildo-ai/platform-config-lib` — a contracts-only package that does not depend on
|
|
11
|
+
* `saas-specifications` and should not start depending on it for one enum. `saas-models` is where the
|
|
12
|
+
* application-declared compliance vocabularies already live (`DataRetentionClass`, `LawfulBasis`,
|
|
13
|
+
* `PersonalDataCategory`, `OperatorProcessingRole`), and both packages already depend on it.
|
|
14
|
+
*
|
|
15
|
+
* The alternative — a second, purpose-named cadence enum beside this one — was rejected. It would
|
|
16
|
+
* have carried four identical members and differed only by excluding `AS_NEEDED`, which is a
|
|
17
|
+
* CONSUMER's constraint rather than a different vocabulary. CLAUDE.md: a closed vocabulary has one
|
|
18
|
+
* named runtime source.
|
|
19
|
+
*/
|
|
20
|
+
export var ReviewCadence;
|
|
21
|
+
(function (ReviewCadence) {
|
|
22
|
+
ReviewCadence["WEEKLY"] = "WEEKLY";
|
|
23
|
+
ReviewCadence["MONTHLY"] = "MONTHLY";
|
|
24
|
+
ReviewCadence["QUARTERLY"] = "QUARTERLY";
|
|
25
|
+
ReviewCadence["YEARLY"] = "YEARLY";
|
|
26
|
+
/** A real answer meaning "no schedule" — never a default, and never a date. See {@link deriveNextReviewOn}. */
|
|
27
|
+
ReviewCadence["AS_NEEDED"] = "AS_NEEDED";
|
|
28
|
+
})(ReviewCadence || (ReviewCadence = {}));
|
|
29
|
+
/**
|
|
30
|
+
* How many days one {@link ReviewCadence} member means.
|
|
31
|
+
*
|
|
32
|
+
* ONE home, promoted 2026-09-11 from two byte-identical module-local copies —
|
|
33
|
+
* `roadmap-snapshot-validation.ts` and `brand-snapshot-validation.ts`, the second of which said so in
|
|
34
|
+
* its own comment: *"module-local there too — a shared promotion is part of the deferred
|
|
35
|
+
* authored-metadata generalization"*. A third consumer is what made the deferral stop paying.
|
|
36
|
+
*
|
|
37
|
+
* `Record<ReviewCadence, number>` and not a partial: a member added to the enum is a compile error
|
|
38
|
+
* here rather than a silent `undefined` that reads as "no cadence" at every call site.
|
|
39
|
+
*
|
|
40
|
+
* `AS_NEEDED` is `POSITIVE_INFINITY` deliberately, so every consumer must decide what "no schedule"
|
|
41
|
+
* means for it rather than receiving a number that quietly schedules something. `Number.isFinite` is
|
|
42
|
+
* the guard each one uses.
|
|
43
|
+
*/
|
|
44
|
+
export const REVIEW_CADENCE_TO_DAYS = {
|
|
45
|
+
[ReviewCadence.WEEKLY]: 7,
|
|
46
|
+
[ReviewCadence.MONTHLY]: 31,
|
|
47
|
+
[ReviewCadence.QUARTERLY]: 92,
|
|
48
|
+
[ReviewCadence.YEARLY]: 366,
|
|
49
|
+
[ReviewCadence.AS_NEEDED]: Number.POSITIVE_INFINITY,
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* The next review date a cadence schedules from a given instant, or `undefined` when it schedules none.
|
|
53
|
+
*
|
|
54
|
+
* `undefined` for `AS_NEEDED` is the whole contract. A caller that needs a DATE must treat the absence
|
|
55
|
+
* as the answer — "this application has not committed to a review schedule" — and say so, rather than
|
|
56
|
+
* inventing one. Returning a far-future date instead would turn "no commitment" into a commitment
|
|
57
|
+
* nobody made, which is exactly the shape `.claude/rules/derive-before-you-ask.md` describes when a
|
|
58
|
+
* date stands in for a decision.
|
|
59
|
+
*
|
|
60
|
+
* Returns a plain ISO date (`YYYY-MM-DD`): a review is scheduled on a day, not at an instant.
|
|
61
|
+
*/
|
|
62
|
+
export function deriveNextReviewOn(fromInstant, cadence) {
|
|
63
|
+
const days = REVIEW_CADENCE_TO_DAYS[cadence];
|
|
64
|
+
if (!Number.isFinite(days))
|
|
65
|
+
return undefined;
|
|
66
|
+
const from = new Date(fromInstant);
|
|
67
|
+
if (Number.isNaN(from.getTime()))
|
|
68
|
+
return undefined;
|
|
69
|
+
return new Date(from.getTime() + days * 24 * 60 * 60 * 1000).toISOString().slice(0, 10);
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=review-cadence.shared.schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-cadence.shared.schemas.js","sourceRoot":"","sources":["../../../../src/compliance/review-cadence.shared.schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAN,IAAY,aAOX;AAPD,WAAY,aAAa;IACvB,kCAAiB,CAAA;IACjB,oCAAmB,CAAA;IACnB,wCAAuB,CAAA;IACvB,kCAAiB,CAAA;IACjB,+GAA+G;IAC/G,wCAAuB,CAAA;AACzB,CAAC,EAPW,aAAa,KAAb,aAAa,QAOxB;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAkC;IACnE,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;IACzB,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE;IAC3B,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE;IAC7B,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,GAAG;IAC3B,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,iBAAiB;CACpD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,OAAsB;IAC5E,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;IACnC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO,SAAS,CAAC;IACnD,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1F,CAAC","sourcesContent":["/**\n * How often something is re-reviewed, and the date that cadence schedules.\n *\n * ## Why it lives HERE\n *\n * Moved from `@wildo-ai/saas-specifications` `_core/market/market-authored-metadata.schemas` on\n * 2026-09-11, and re-exported from there so its six existing importers are untouched. It had to move\n * because it gained a consumer on the other side of a package boundary: an application declares\n * `assuranceReviewCadence` in `wildo.saas.config.ts`, which is validated by\n * `@wildo-ai/platform-config-lib` — a contracts-only package that does not depend on\n * `saas-specifications` and should not start depending on it for one enum. `saas-models` is where the\n * application-declared compliance vocabularies already live (`DataRetentionClass`, `LawfulBasis`,\n * `PersonalDataCategory`, `OperatorProcessingRole`), and both packages already depend on it.\n *\n * The alternative — a second, purpose-named cadence enum beside this one — was rejected. It would\n * have carried four identical members and differed only by excluding `AS_NEEDED`, which is a\n * CONSUMER's constraint rather than a different vocabulary. CLAUDE.md: a closed vocabulary has one\n * named runtime source.\n */\nexport enum ReviewCadence {\n WEEKLY = 'WEEKLY',\n MONTHLY = 'MONTHLY',\n QUARTERLY = 'QUARTERLY',\n YEARLY = 'YEARLY',\n /** A real answer meaning \"no schedule\" — never a default, and never a date. See {@link deriveNextReviewOn}. */\n AS_NEEDED = 'AS_NEEDED',\n}\n\n/**\n * How many days one {@link ReviewCadence} member means.\n *\n * ONE home, promoted 2026-09-11 from two byte-identical module-local copies —\n * `roadmap-snapshot-validation.ts` and `brand-snapshot-validation.ts`, the second of which said so in\n * its own comment: *\"module-local there too — a shared promotion is part of the deferred\n * authored-metadata generalization\"*. A third consumer is what made the deferral stop paying.\n *\n * `Record<ReviewCadence, number>` and not a partial: a member added to the enum is a compile error\n * here rather than a silent `undefined` that reads as \"no cadence\" at every call site.\n *\n * `AS_NEEDED` is `POSITIVE_INFINITY` deliberately, so every consumer must decide what \"no schedule\"\n * means for it rather than receiving a number that quietly schedules something. `Number.isFinite` is\n * the guard each one uses.\n */\nexport const REVIEW_CADENCE_TO_DAYS: Record<ReviewCadence, number> = {\n [ReviewCadence.WEEKLY]: 7,\n [ReviewCadence.MONTHLY]: 31,\n [ReviewCadence.QUARTERLY]: 92,\n [ReviewCadence.YEARLY]: 366,\n [ReviewCadence.AS_NEEDED]: Number.POSITIVE_INFINITY,\n};\n\n/**\n * The next review date a cadence schedules from a given instant, or `undefined` when it schedules none.\n *\n * `undefined` for `AS_NEEDED` is the whole contract. A caller that needs a DATE must treat the absence\n * as the answer — \"this application has not committed to a review schedule\" — and say so, rather than\n * inventing one. Returning a far-future date instead would turn \"no commitment\" into a commitment\n * nobody made, which is exactly the shape `.claude/rules/derive-before-you-ask.md` describes when a\n * date stands in for a decision.\n *\n * Returns a plain ISO date (`YYYY-MM-DD`): a review is scheduled on a day, not at an instant.\n */\nexport function deriveNextReviewOn(fromInstant: string, cadence: ReviewCadence): string | undefined {\n const days = REVIEW_CADENCE_TO_DAYS[cadence];\n if (!Number.isFinite(days)) return undefined;\n const from = new Date(fromInstant);\n if (Number.isNaN(from.getTime())) return undefined;\n return new Date(from.getTime() + days * 24 * 60 * 60 * 1000).toISOString().slice(0, 10);\n}\n"]}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* The risk signals an APPLICATION may take a posture on (#300 Layer 2).
|
|
4
|
+
*
|
|
5
|
+
* ## Why only the application-evaluation signals
|
|
6
|
+
*
|
|
7
|
+
* `report-risk-signals.mjs` derives signals in two homes, and the split is load-bearing rather than
|
|
8
|
+
* organisational. FRAMEWORK_BUILD_TIME signals — marker density across the objective catalogue,
|
|
9
|
+
* objectives with no marker, objectives marked only outside production — are facts about the ENGINE
|
|
10
|
+
* and are identical for every application. An application cannot change them and does not choose
|
|
11
|
+
* them, so a declared posture about one would be an operator accepting somebody else's exposure.
|
|
12
|
+
* They inform; they are not accepted.
|
|
13
|
+
*
|
|
14
|
+
* APPLICATION_EVALUATION_TIME signals are facts about one application's own declarations, and every
|
|
15
|
+
* one of them is downstream of a choice its operator made. Those are the ones a posture is about.
|
|
16
|
+
*
|
|
17
|
+
* ## This enum is the SOURCE, and the derivation is held to it
|
|
18
|
+
*
|
|
19
|
+
* The refs were string literals inside the report. A second list here, free to drift from the one the
|
|
20
|
+
* script emits, is exactly the transcription defect the assurance anchoring rule exists to stop — so
|
|
21
|
+
* the report now parses this enum and refuses when the set it emits and the set declared here
|
|
22
|
+
* disagree, in EITHER direction. A signal added to the report with no member here fails; a member
|
|
23
|
+
* here that no signal emits fails too, because an application could otherwise declare a posture
|
|
24
|
+
* about an exposure nothing measures.
|
|
25
|
+
*/
|
|
26
|
+
export declare enum ApplicationRiskSignalRef {
|
|
27
|
+
/** Which engine capabilities are enabled, and therefore which exposures are structurally absent. */
|
|
28
|
+
CAPABILITY_SURFACE = "application:capability-surface",
|
|
29
|
+
/** Whether every retention class the vocabulary carries has a declared period. */
|
|
30
|
+
RETENTION_DECLARATION = "application:retention-declaration",
|
|
31
|
+
/** How many configured providers are vendor-hosted, each a third-party processor. */
|
|
32
|
+
PROVIDER_HOSTING = "application:provider-hosting",
|
|
33
|
+
/** Which personal-data categories this application's own resources declare, and whether any is special category. */
|
|
34
|
+
PERSONAL_DATA_INVENTORY = "application:personal-data-inventory",
|
|
35
|
+
/** Resources that have not answered the personal-data question at all. */
|
|
36
|
+
PERSONAL_DATA_DECLARATION_GAP = "application:personal-data-declaration-gap",
|
|
37
|
+
/** Operations reachable by an external agent over MCP. */
|
|
38
|
+
EXTERNAL_EXPOSURE_MCP = "application:external-exposure-mcp"
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* What an operator has DECIDED to do about an exposure.
|
|
42
|
+
*
|
|
43
|
+
* NIST SP 800-39 names the risk responses as accepting, avoiding, mitigating, sharing or
|
|
44
|
+
* transferring risk, and that set is what this enum takes — the options, not the spelling.
|
|
45
|
+
* spec-cite: NIST SP 800-39 / CSRC glossary, "risk response" — paraphrased from the published
|
|
46
|
+
* definition, not quoted.
|
|
47
|
+
*
|
|
48
|
+
* ## Only NIST is NAMED here, and that is a licensing line rather than a preference
|
|
49
|
+
*
|
|
50
|
+
* Other risk-management standards describe the same options and are LICENSED documents. Naming one
|
|
51
|
+
* in engine source would put a paid standard's identity into shipped code, which is why this
|
|
52
|
+
* repository's boundary rule keeps external framework names to rights-classified mapping and report
|
|
53
|
+
* surfaces. NIST publications are US government works, so citing one here costs nothing — and the
|
|
54
|
+
* practice is already settled: NIST is named in 34 engine and platform files.
|
|
55
|
+
*
|
|
56
|
+
* The options are borrowed either way. Being INSPIRED by a standard and NAMING it are different
|
|
57
|
+
* acts, and only the second carries a licence.
|
|
58
|
+
*
|
|
59
|
+
* ## No band, no score, no number — and that is inherited rather than chosen here
|
|
60
|
+
*
|
|
61
|
+
* Layer 1 emits signals carrying NO score, weight, level or severity, and asserts that prohibition
|
|
62
|
+
* structurally. A posture that arrived as a 1–5 appetite rating would put a number underneath a layer
|
|
63
|
+
* that refuses to produce one, and the number is what a reader trusts without checking. What an
|
|
64
|
+
* operator can honestly say about an exposure is which of these four they chose and why, so that is
|
|
65
|
+
* what the declaration carries.
|
|
66
|
+
*
|
|
67
|
+
* assurance-control: WILDO.RISK.TREATMENT_DECLARED — an operator's chosen treatment per exposure,
|
|
68
|
+
* with the reasoning, in a form a measurement can contradict.
|
|
69
|
+
*
|
|
70
|
+
* ## `AVOIDED` is the member that makes this layer worth having
|
|
71
|
+
*
|
|
72
|
+
* The other three are consistent with any measurement: an application that REDUCED, SHARED or
|
|
73
|
+
* ACCEPTED an exposure still has it, so the signal and the posture agree whatever the signal says.
|
|
74
|
+
* `AVOIDED` claims the exposure is not taken at all, which a Layer 1 signal can CONTRADICT — declare
|
|
75
|
+
* that vendor-hosted processing is avoided while two of three configured providers are vendor-hosted,
|
|
76
|
+
* and the two statements cannot both be true.
|
|
77
|
+
*
|
|
78
|
+
* That is the difference between this and a questionnaire answer. A free-text "describe your risk
|
|
79
|
+
* appetite" is unfalsifiable by construction; a typed posture beside a derived signal is a claim the
|
|
80
|
+
* product itself can disagree with.
|
|
81
|
+
*/
|
|
82
|
+
export declare enum RiskTreatmentPosture {
|
|
83
|
+
/**
|
|
84
|
+
* The application does not take this exposure at all.
|
|
85
|
+
*
|
|
86
|
+
* The only FALSIFIABLE posture — a signal reporting the exposure present contradicts it directly.
|
|
87
|
+
*/
|
|
88
|
+
AVOIDED = "AVOIDED",
|
|
89
|
+
/** Taken, with controls that lower its likelihood or its consequence. */
|
|
90
|
+
REDUCED = "REDUCED",
|
|
91
|
+
/**
|
|
92
|
+
* Taken, with the consequence placed on another party by CONTRACT — an Art. 28 processor agreement
|
|
93
|
+
* being the case this framework can actually evidence.
|
|
94
|
+
*
|
|
95
|
+
* Narrower than "share or transfer" on purpose. Insurance-style transfer is a legitimate treatment
|
|
96
|
+
* and nothing in the product can attest it, so modelling it here would add a member no derivation
|
|
97
|
+
* could ever check. Naming the contractual case precisely is a smaller claim and a true one.
|
|
98
|
+
*/
|
|
99
|
+
SHARED_BY_CONTRACT = "SHARED_BY_CONTRACT",
|
|
100
|
+
/** Taken, and the exposure retained knowingly. */
|
|
101
|
+
ACCEPTED = "ACCEPTED"
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* One signal's posture, and why.
|
|
105
|
+
*
|
|
106
|
+
* `rationale` is REQUIRED, for the same reason `dataRetention` requires one: a posture with no reason
|
|
107
|
+
* is a token, and the thing a reviewer needs is the sentence, not the enum member. "We accept it" is
|
|
108
|
+
* what the member already says.
|
|
109
|
+
*
|
|
110
|
+
* ## What is deliberately NOT here
|
|
111
|
+
*
|
|
112
|
+
* **No `decidedBy` and no `decidedAt`.** Acceptance is a COMMIT — `one-source-of-truth.md` rule 7 and
|
|
113
|
+
* D5 — so the author and the instant are already recorded, mergeably and by a history everyone
|
|
114
|
+
* audits. Fields restating them would be a second authority that can disagree with git, and they are
|
|
115
|
+
* exactly the shape that made an earlier compliance record unproducible without forging an identity.
|
|
116
|
+
*
|
|
117
|
+
* **No review date.** `derive-before-you-ask.md` settles this: a date is a PROXY for "an input may
|
|
118
|
+
* have changed", every input is in git and enumerable, so the trigger is computable and the date is
|
|
119
|
+
* an output rather than something to type.
|
|
120
|
+
*/
|
|
121
|
+
export declare const ApplicationRiskPostureEntrySchema: z.ZodObject<{
|
|
122
|
+
posture: z.ZodEnum<typeof RiskTreatmentPosture>;
|
|
123
|
+
rationale: z.ZodString;
|
|
124
|
+
}, z.core.$strict>;
|
|
125
|
+
export type ApplicationRiskPostureEntry = z.infer<typeof ApplicationRiskPostureEntrySchema>;
|
|
126
|
+
/**
|
|
127
|
+
* An application's declared posture per risk signal — PARTIAL by construction.
|
|
128
|
+
*
|
|
129
|
+
* Every entry is optional and the whole declaration may be omitted. That is not laxity: a compliance
|
|
130
|
+
* workflow may never stand in front of the mechanism (`application-creation-directive.md`), and a
|
|
131
|
+
* required posture would make an application UNBUILDABLE until somebody decided something about
|
|
132
|
+
* every signal the framework happens to derive. The undeclared set is REPORTED instead, by
|
|
133
|
+
* {@link undeclaredRiskSignals}, which is the "mark it, do not block" shape that rule asks for.
|
|
134
|
+
*
|
|
135
|
+
* So absence is representable and means one thing — nobody has decided yet — and it is
|
|
136
|
+
* distinguishable from `ACCEPTED`, which means somebody decided to live with it. Collapsing those two
|
|
137
|
+
* is the failure this layer exists to avoid: silence is not acceptance.
|
|
138
|
+
*/
|
|
139
|
+
export declare const ApplicationRiskPostureSchema: z.ZodRecord<z.ZodEnum<typeof ApplicationRiskSignalRef>, z.ZodObject<{
|
|
140
|
+
posture: z.ZodEnum<typeof RiskTreatmentPosture>;
|
|
141
|
+
rationale: z.ZodString;
|
|
142
|
+
}, z.core.$strict>>;
|
|
143
|
+
export type ApplicationRiskPosture = z.infer<typeof ApplicationRiskPostureSchema>;
|
|
144
|
+
/**
|
|
145
|
+
* The signals an application has declared NO posture for — what a register must mark as owed.
|
|
146
|
+
*
|
|
147
|
+
* Derived rather than stored, and total over the enum, so a signal added to the vocabulary tomorrow
|
|
148
|
+
* is reported as undeclared by every existing application rather than silently omitted from the
|
|
149
|
+
* answer. Deliberately the same shape as `undeclaredRetentionClasses`, because it is the same
|
|
150
|
+
* question one layer over.
|
|
151
|
+
*/
|
|
152
|
+
export declare function undeclaredRiskSignals(posture: ApplicationRiskPosture | undefined): readonly ApplicationRiskSignalRef[];
|
|
153
|
+
/**
|
|
154
|
+
* Postures that CLAIM AN EXPOSURE IS NOT TAKEN — the ones a measurement can contradict.
|
|
155
|
+
*
|
|
156
|
+
* Exported rather than inlined at the one call site, so the report and any later consumer ask the
|
|
157
|
+
* same question. Today it is `AVOIDED` alone; if a future member is also falsifiable it joins here
|
|
158
|
+
* and every consumer follows, which is the whole reason this is a function and not a comparison.
|
|
159
|
+
*/
|
|
160
|
+
export declare function riskPostureClaimsExposureAbsent(entry: ApplicationRiskPostureEntry | undefined): boolean;
|
|
161
|
+
//# sourceMappingURL=risk-posture.shared.schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"risk-posture.shared.schemas.d.ts","sourceRoot":"","sources":["../../../../src/compliance/risk-posture.shared.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,oBAAY,wBAAwB;IAClC,oGAAoG;IACpG,kBAAkB,mCAAmC;IACrD,kFAAkF;IAClF,qBAAqB,sCAAsC;IAC3D,qFAAqF;IACrF,gBAAgB,iCAAiC;IACjD,oHAAoH;IACpH,uBAAuB,wCAAwC;IAC/D,0EAA0E;IAC1E,6BAA6B,8CAA8C;IAC3E,0DAA0D;IAC1D,qBAAqB,sCAAsC;CAC5D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,oBAAY,oBAAoB;IAC9B;;;;OAIG;IACH,OAAO,YAAY;IACnB,yEAAyE;IACzE,OAAO,YAAY;IACnB;;;;;;;OAOG;IACH,kBAAkB,uBAAuB;IACzC,kDAAkD;IAClD,QAAQ,aAAa;CACtB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,iCAAiC;;;kBAO5C,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE5F;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,4BAA4B;;;mBAGxC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,sBAAsB,GAAG,SAAS,GAC1C,SAAS,wBAAwB,EAAE,CAErC;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,2BAA2B,GAAG,SAAS,GAAG,OAAO,CAEvG"}
|