@wildo-ai/saas-models 1.0.1 → 1.1.1
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/LICENSE +34 -0
- package/dist/esm/.builder.pid +9 -0
- package/dist/esm/__tests__/setup.d.ts.map +1 -1
- package/dist/esm/__tests__/setup.js +18 -3
- package/dist/esm/__tests__/setup.js.map +1 -1
- package/dist/esm/_inspect.d.ts +2 -0
- package/dist/esm/_inspect.d.ts.map +1 -0
- package/dist/esm/_inspect.js +3 -0
- package/dist/esm/_inspect.js.map +1 -0
- package/dist/esm/applications/application-metadata.shared.resources-config.schemas.d.ts +6 -6
- package/dist/esm/applications/application-metadata.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/applications/application-metadata.shared.resources-config.schemas.js +5 -1
- package/dist/esm/applications/application-metadata.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/applications/application-subject.shared.schemas.d.ts +51 -0
- package/dist/esm/applications/application-subject.shared.schemas.d.ts.map +1 -0
- package/dist/esm/applications/application-subject.shared.schemas.js +56 -0
- package/dist/esm/applications/application-subject.shared.schemas.js.map +1 -0
- package/dist/esm/applications/application-versions.shared.resources-config.schemas.d.ts +9 -11
- package/dist/esm/applications/application-versions.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/applications/application-versions.shared.resources-config.schemas.js +42 -74
- package/dist/esm/applications/application-versions.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/applications/applications-context.schemas.d.ts +228 -200
- package/dist/esm/applications/applications-context.schemas.d.ts.map +1 -1
- package/dist/esm/applications/applications-context.schemas.js +1 -1
- package/dist/esm/applications/applications-context.schemas.js.map +1 -1
- package/dist/esm/applications/applications.shared.resources-config.schemas.d.ts +4 -9
- package/dist/esm/applications/applications.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/applications/applications.shared.resources-config.schemas.js +103 -87
- package/dist/esm/applications/applications.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/applications/applications.shared.schemas.d.ts +59 -5
- package/dist/esm/applications/applications.shared.schemas.d.ts.map +1 -1
- package/dist/esm/applications/applications.shared.schemas.js +80 -3
- package/dist/esm/applications/applications.shared.schemas.js.map +1 -1
- package/dist/esm/billing/billing-account.shared.resources-config.schemas.d.ts +4 -4
- 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 +98 -25
- package/dist/esm/billing/billing-account.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/billing-account.shared.schemas.d.ts +32 -8
- package/dist/esm/billing/billing-account.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-account.shared.schemas.js +67 -2
- package/dist/esm/billing/billing-account.shared.schemas.js.map +1 -1
- package/dist/esm/billing/billing-configuration.shared.schemas.d.ts +8 -8
- package/dist/esm/billing/billing-configuration.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-configuration.shared.schemas.js +2 -3
- package/dist/esm/billing/billing-configuration.shared.schemas.js.map +1 -1
- package/dist/esm/billing/billing-enums.shared.schemas.d.ts +75 -0
- package/dist/esm/billing/billing-enums.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-enums.shared.schemas.js +78 -1
- package/dist/esm/billing/billing-enums.shared.schemas.js.map +1 -1
- package/dist/esm/billing/billing-types.shared.schemas.d.ts +204 -42
- package/dist/esm/billing/billing-types.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/billing-types.shared.schemas.js +76 -1
- package/dist/esm/billing/billing-types.shared.schemas.js.map +1 -1
- package/dist/esm/billing/credit-pool.shared.resources-config.schemas.d.ts +8 -6
- package/dist/esm/billing/credit-pool.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/credit-pool.shared.resources-config.schemas.js +48 -16
- package/dist/esm/billing/credit-pool.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/credit-pool.shared.schemas.d.ts +9 -9
- package/dist/esm/billing/credit-pool.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/credit-pool.shared.schemas.js +13 -6
- package/dist/esm/billing/credit-pool.shared.schemas.js.map +1 -1
- package/dist/esm/billing/invoice-ref.shared.resources-config.schemas.d.ts +2 -2
- package/dist/esm/billing/invoice-ref.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/invoice-ref.shared.resources-config.schemas.js +26 -17
- package/dist/esm/billing/invoice-ref.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/invoice-ref.shared.schemas.d.ts +10 -10
- package/dist/esm/billing/invoice-ref.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/invoice-ref.shared.schemas.js +32 -7
- package/dist/esm/billing/invoice-ref.shared.schemas.js.map +1 -1
- package/dist/esm/billing/price.shared.resources-config.schemas.d.ts +7 -7
- package/dist/esm/billing/price.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/price.shared.resources-config.schemas.js +23 -5
- package/dist/esm/billing/price.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/price.shared.schemas.d.ts +4 -4
- package/dist/esm/billing/price.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/price.shared.schemas.js +1 -1
- package/dist/esm/billing/price.shared.schemas.js.map +1 -1
- package/dist/esm/billing/product-behavior-policy.shared.schemas.d.ts +9 -9
- package/dist/esm/billing/product-behavior-policy.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/product-behavior-policy.shared.schemas.js +10 -2
- package/dist/esm/billing/product-behavior-policy.shared.schemas.js.map +1 -1
- package/dist/esm/billing/product-definition.shared.schemas.d.ts +27 -27
- package/dist/esm/billing/product-definition.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/product-definition.shared.schemas.js +39 -9
- package/dist/esm/billing/product-definition.shared.schemas.js.map +1 -1
- package/dist/esm/billing/product.shared.resources-config.schemas.d.ts +22 -22
- package/dist/esm/billing/product.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/product.shared.resources-config.schemas.js +6 -6
- package/dist/esm/billing/product.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/product.shared.schemas.d.ts +19 -19
- package/dist/esm/billing/product.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/product.shared.schemas.js +1 -1
- package/dist/esm/billing/product.shared.schemas.js.map +1 -1
- package/dist/esm/billing/promotions.shared.resources-config.schemas.d.ts +7 -7
- package/dist/esm/billing/promotions.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/promotions.shared.resources-config.schemas.js +34 -6
- package/dist/esm/billing/promotions.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/promotions.shared.schemas.d.ts +2 -2
- package/dist/esm/billing/promotions.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/promotions.shared.schemas.js +1 -1
- package/dist/esm/billing/promotions.shared.schemas.js.map +1 -1
- package/dist/esm/billing/referral.shared.resources-config.schemas.d.ts +12 -12
- package/dist/esm/billing/referral.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/referral.shared.resources-config.schemas.js +5 -5
- package/dist/esm/billing/referral.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/referral.shared.schemas.d.ts +7 -7
- package/dist/esm/billing/referral.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/referral.shared.schemas.js +36 -8
- package/dist/esm/billing/referral.shared.schemas.js.map +1 -1
- package/dist/esm/billing/subscription.shared.resources-config.schemas.d.ts +6 -6
- package/dist/esm/billing/subscription.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/subscription.shared.resources-config.schemas.js +51 -24
- package/dist/esm/billing/subscription.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/subscription.shared.schemas.d.ts +13 -13
- package/dist/esm/billing/subscription.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/subscription.shared.schemas.js +37 -5
- package/dist/esm/billing/subscription.shared.schemas.js.map +1 -1
- package/dist/esm/billing/usage-record.shared.resources-config.schemas.d.ts +2 -2
- package/dist/esm/billing/usage-record.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/billing/usage-record.shared.resources-config.schemas.js +23 -14
- package/dist/esm/billing/usage-record.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/billing/usage-record.shared.schemas.d.ts +15 -12
- package/dist/esm/billing/usage-record.shared.schemas.d.ts.map +1 -1
- package/dist/esm/billing/usage-record.shared.schemas.js +34 -7
- package/dist/esm/billing/usage-record.shared.schemas.js.map +1 -1
- package/dist/esm/charts/aggregation-query.shared.schemas.d.ts +36 -36
- package/dist/esm/charts/aggregation-query.shared.schemas.d.ts.map +1 -1
- package/dist/esm/charts/aggregation-query.shared.schemas.js +6 -6
- package/dist/esm/charts/aggregation-query.shared.schemas.js.map +1 -1
- package/dist/esm/charts/aggregation.shared.definitions.d.ts.map +1 -1
- package/dist/esm/charts/aggregation.shared.definitions.js +1 -1
- package/dist/esm/charts/aggregation.shared.definitions.js.map +1 -1
- package/dist/esm/charts/chart-definition-builder.shared.d.ts +5 -3
- package/dist/esm/charts/chart-definition-builder.shared.d.ts.map +1 -1
- package/dist/esm/charts/chart-definition-builder.shared.js +4 -2
- package/dist/esm/charts/chart-definition-builder.shared.js.map +1 -1
- package/dist/esm/{runtime/companion-artifact-placement.shared.definitions.d.ts → companion/artifact-placement.shared.definitions.d.ts} +2 -3
- package/dist/esm/companion/artifact-placement.shared.definitions.d.ts.map +1 -0
- package/dist/esm/{runtime/companion-artifact-placement.shared.definitions.js → companion/artifact-placement.shared.definitions.js} +1 -2
- package/dist/esm/companion/artifact-placement.shared.definitions.js.map +1 -0
- package/dist/esm/companion/provider-discovery.shared.schemas.d.ts +131 -0
- package/dist/esm/companion/provider-discovery.shared.schemas.d.ts.map +1 -0
- package/dist/esm/companion/provider-discovery.shared.schemas.js +122 -0
- package/dist/esm/companion/provider-discovery.shared.schemas.js.map +1 -0
- package/dist/esm/companion/shared-library-companion.shared.definitions.d.ts +6 -0
- package/dist/esm/companion/shared-library-companion.shared.definitions.d.ts.map +1 -0
- package/dist/esm/companion/shared-library-companion.shared.definitions.js +1 -0
- package/dist/esm/companion/shared-library-companion.shared.definitions.js.map +1 -0
- package/dist/esm/companion-exports.d.ts +4 -0
- package/dist/esm/companion-exports.d.ts.map +1 -0
- package/dist/esm/companion-exports.js +4 -0
- package/dist/esm/companion-exports.js.map +1 -0
- package/dist/esm/compliance/audit-trails/audit-actor.shared.schemas.d.ts +65 -0
- package/dist/esm/compliance/audit-trails/audit-actor.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/audit-trails/audit-actor.shared.schemas.js +68 -0
- package/dist/esm/compliance/audit-trails/audit-actor.shared.schemas.js.map +1 -0
- package/dist/esm/compliance/audit-trails/audit-log-sink.shared.schemas.d.ts +147 -0
- package/dist/esm/compliance/audit-trails/audit-log-sink.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/audit-trails/audit-log-sink.shared.schemas.js +20 -0
- package/dist/esm/compliance/audit-trails/audit-log-sink.shared.schemas.js.map +1 -0
- package/dist/esm/compliance/audit-trails/audit-logs.shared.resources-config.schemas.d.ts +60 -16
- package/dist/esm/compliance/audit-trails/audit-logs.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-logs.shared.resources-config.schemas.js +77 -10
- package/dist/esm/compliance/audit-trails/audit-logs.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-trail-config.shared.schemas.d.ts +58 -0
- package/dist/esm/compliance/audit-trails/audit-trail-config.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/audit-trails/audit-trail-config.shared.schemas.js +74 -0
- package/dist/esm/compliance/audit-trails/audit-trail-config.shared.schemas.js.map +1 -0
- package/dist/esm/compliance/audit-trails/auditable-events.shared.schema.d.ts +1949 -115
- 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 +2229 -11
- 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 +25 -10
- 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 +226 -3
- package/dist/esm/compliance/audit-trails/security-audit-event-envelope.shared.schema.js.map +1 -1
- package/dist/esm/compliance/data-classification/data-classification.shared.schemas.d.ts +8 -0
- package/dist/esm/compliance/data-classification/data-classification.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/data-classification/data-classification.shared.schemas.js +9 -0
- package/dist/esm/compliance/data-classification/data-classification.shared.schemas.js.map +1 -0
- package/dist/esm/compliance/documents/governed-documents.shared.schemas.d.ts +524 -0
- package/dist/esm/compliance/documents/governed-documents.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/documents/governed-documents.shared.schemas.js +482 -0
- package/dist/esm/compliance/documents/governed-documents.shared.schemas.js.map +1 -0
- package/dist/esm/compliance/privacy/ai-use-posture.shared.schemas.d.ts +112 -0
- package/dist/esm/compliance/privacy/ai-use-posture.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/privacy/ai-use-posture.shared.schemas.js +120 -0
- package/dist/esm/compliance/privacy/ai-use-posture.shared.schemas.js.map +1 -0
- package/dist/esm/compliance/privacy/client-storage.shared.schemas.d.ts +134 -0
- package/dist/esm/compliance/privacy/client-storage.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/privacy/client-storage.shared.schemas.js +129 -0
- package/dist/esm/compliance/privacy/client-storage.shared.schemas.js.map +1 -0
- package/dist/esm/compliance/privacy/data-retention.shared.schemas.d.ts +1 -1
- package/dist/esm/compliance/privacy/data-retention.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/data-retention.shared.schemas.js +1 -1
- package/dist/esm/compliance/privacy/data-retention.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/impersonalization-scrub.shared.utils.d.ts +50 -0
- package/dist/esm/compliance/privacy/impersonalization-scrub.shared.utils.d.ts.map +1 -0
- package/dist/esm/compliance/privacy/impersonalization-scrub.shared.utils.js +98 -0
- package/dist/esm/compliance/privacy/impersonalization-scrub.shared.utils.js.map +1 -0
- package/dist/esm/compliance/privacy/impersonalization.shared.schemas.d.ts +181 -0
- package/dist/esm/compliance/privacy/impersonalization.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/privacy/impersonalization.shared.schemas.js +184 -0
- package/dist/esm/compliance/privacy/impersonalization.shared.schemas.js.map +1 -0
- package/dist/esm/compliance/privacy/operator-compliance-identity.shared.schemas.d.ts +230 -0
- package/dist/esm/compliance/privacy/operator-compliance-identity.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/privacy/operator-compliance-identity.shared.schemas.js +232 -0
- package/dist/esm/compliance/privacy/operator-compliance-identity.shared.schemas.js.map +1 -0
- package/dist/esm/compliance/privacy/personal-data-category.shared.schemas.d.ts +220 -0
- package/dist/esm/compliance/privacy/personal-data-category.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/privacy/personal-data-category.shared.schemas.js +252 -0
- package/dist/esm/compliance/privacy/personal-data-category.shared.schemas.js.map +1 -0
- package/dist/esm/compliance/privacy/personal-data-declaration.shared.utils.d.ts +75 -0
- package/dist/esm/compliance/privacy/personal-data-declaration.shared.utils.d.ts.map +1 -0
- package/dist/esm/compliance/privacy/personal-data-declaration.shared.utils.js +43 -0
- package/dist/esm/compliance/privacy/personal-data-declaration.shared.utils.js.map +1 -0
- package/dist/esm/compliance/privacy/privacy.shared.schemas.d.ts +56 -43
- package/dist/esm/compliance/privacy/privacy.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/privacy.shared.schemas.js +72 -18
- package/dist/esm/compliance/privacy/privacy.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/redaction.shared.schemas.d.ts +21 -3
- package/dist/esm/compliance/privacy/redaction.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/redaction.shared.schemas.js +19 -1
- package/dist/esm/compliance/privacy/redaction.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/retention-schedule.shared.schemas.d.ts +124 -0
- package/dist/esm/compliance/privacy/retention-schedule.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/privacy/retention-schedule.shared.schemas.js +107 -0
- package/dist/esm/compliance/privacy/retention-schedule.shared.schemas.js.map +1 -0
- package/dist/esm/compliance/privacy/sharing.shared.schemas.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/sharing.shared.schemas.js +1 -1
- package/dist/esm/compliance/privacy/sharing.shared.schemas.js.map +1 -1
- package/dist/esm/compliance/privacy/subject-erasure.shared.schemas.d.ts +279 -0
- package/dist/esm/compliance/privacy/subject-erasure.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/privacy/subject-erasure.shared.schemas.js +238 -0
- package/dist/esm/compliance/privacy/subject-erasure.shared.schemas.js.map +1 -0
- package/dist/esm/compliance/privacy/subject-export-render.shared.utils.d.ts +74 -0
- package/dist/esm/compliance/privacy/subject-export-render.shared.utils.d.ts.map +1 -0
- package/dist/esm/compliance/privacy/subject-export-render.shared.utils.js +137 -0
- package/dist/esm/compliance/privacy/subject-export-render.shared.utils.js.map +1 -0
- package/dist/esm/compliance/privacy/subject-export.shared.schemas.d.ts +457 -0
- package/dist/esm/compliance/privacy/subject-export.shared.schemas.d.ts.map +1 -0
- package/dist/esm/compliance/privacy/subject-export.shared.schemas.js +549 -0
- package/dist/esm/compliance/privacy/subject-export.shared.schemas.js.map +1 -0
- package/dist/esm/config/analytics-value-moments.shared.schemas.d.ts +13 -13
- package/dist/esm/config/analytics-value-moments.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/analytics-value-moments.shared.schemas.js +1 -1
- package/dist/esm/config/analytics-value-moments.shared.schemas.js.map +1 -1
- package/dist/esm/config/app-configuration-shared.shared.schemas.d.ts +135 -125
- package/dist/esm/config/app-configuration-shared.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/app-configuration-shared.shared.schemas.js +74 -10
- package/dist/esm/config/app-configuration-shared.shared.schemas.js.map +1 -1
- package/dist/esm/config/app-frontend-type.shared.schemas.d.ts +94 -0
- package/dist/esm/config/app-frontend-type.shared.schemas.d.ts.map +1 -0
- package/dist/esm/config/app-frontend-type.shared.schemas.js +95 -0
- package/dist/esm/config/app-frontend-type.shared.schemas.js.map +1 -0
- package/dist/esm/config/auth-config-resolution.shared.utils.d.ts +35 -5
- package/dist/esm/config/auth-config-resolution.shared.utils.d.ts.map +1 -1
- package/dist/esm/config/auth-config-resolution.shared.utils.js +44 -2
- package/dist/esm/config/auth-config-resolution.shared.utils.js.map +1 -1
- package/dist/esm/config/brand-assets.shared.schemas.d.ts +89 -0
- package/dist/esm/config/brand-assets.shared.schemas.d.ts.map +1 -0
- package/dist/esm/config/brand-assets.shared.schemas.js +99 -0
- package/dist/esm/config/brand-assets.shared.schemas.js.map +1 -0
- package/dist/esm/config/configuration-validation.shared.schemas.d.ts +12 -1
- package/dist/esm/config/configuration-validation.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/configuration-validation.shared.schemas.js +12 -1
- package/dist/esm/config/configuration-validation.shared.schemas.js.map +1 -1
- package/dist/esm/config/entity-identity-config.shared.schemas.d.ts +170 -91
- package/dist/esm/config/entity-identity-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/entity-identity-config.shared.schemas.js +130 -19
- package/dist/esm/config/entity-identity-config.shared.schemas.js.map +1 -1
- package/dist/esm/config/frontend/chart-definition.shared.schemas.d.ts +167 -166
- package/dist/esm/config/frontend/chart-definition.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/frontend/chart-definition.shared.schemas.js +93 -9
- package/dist/esm/config/frontend/chart-definition.shared.schemas.js.map +1 -1
- package/dist/esm/config/frontend/chart-registration-alignment.shared.d.ts +69 -0
- package/dist/esm/config/frontend/chart-registration-alignment.shared.d.ts.map +1 -0
- package/dist/esm/config/frontend/chart-registration-alignment.shared.js +61 -0
- package/dist/esm/config/frontend/chart-registration-alignment.shared.js.map +1 -0
- package/dist/esm/config/frontend/navigation.shared.schemas.d.ts +110 -39
- package/dist/esm/config/frontend/navigation.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/frontend/navigation.shared.schemas.js +93 -9
- package/dist/esm/config/frontend/navigation.shared.schemas.js.map +1 -1
- package/dist/esm/config/frontend/onboarding.shared.schemas.d.ts +70 -134
- package/dist/esm/config/frontend/onboarding.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/frontend/onboarding.shared.schemas.js +27 -25
- package/dist/esm/config/frontend/onboarding.shared.schemas.js.map +1 -1
- package/dist/esm/config/postgresql.shared.schemas.d.ts.map +1 -1
- package/dist/esm/config/postgresql.shared.schemas.js +1 -1
- package/dist/esm/config/postgresql.shared.schemas.js.map +1 -1
- package/dist/esm/config/registration-acquisition-policy.shared.utils.d.ts +24 -0
- package/dist/esm/config/registration-acquisition-policy.shared.utils.d.ts.map +1 -0
- package/dist/esm/config/registration-acquisition-policy.shared.utils.js +62 -0
- package/dist/esm/config/registration-acquisition-policy.shared.utils.js.map +1 -0
- package/dist/esm/config-authoring.entry.d.ts +5 -0
- package/dist/esm/config-authoring.entry.d.ts.map +1 -0
- package/dist/esm/config-authoring.entry.js +7 -0
- package/dist/esm/config-authoring.entry.js.map +1 -0
- package/dist/esm/crdt/crdt-merge.shared.utils.d.ts +1 -1
- package/dist/esm/crdt/crdt-merge.shared.utils.d.ts.map +1 -1
- package/dist/esm/crdt/crdt-merge.shared.utils.js +1 -1
- package/dist/esm/crdt/crdt-merge.shared.utils.js.map +1 -1
- package/dist/esm/data-seeding/data-seeding-config.shared.schemas.d.ts +66 -0
- package/dist/esm/data-seeding/data-seeding-config.shared.schemas.d.ts.map +1 -0
- package/dist/esm/data-seeding/data-seeding-config.shared.schemas.js +118 -0
- package/dist/esm/data-seeding/data-seeding-config.shared.schemas.js.map +1 -0
- package/dist/esm/errors/errors.custom-message-ref.shared.definitions.d.ts +348 -1
- 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 +357 -1
- package/dist/esm/errors/errors.custom-message-ref.shared.definitions.js.map +1 -1
- package/dist/esm/errors/errors.shared.definitions.d.ts +2 -2
- package/dist/esm/errors/errors.shared.definitions.d.ts.map +1 -1
- package/dist/esm/errors/errors.shared.definitions.js +12 -1
- package/dist/esm/errors/errors.shared.definitions.js.map +1 -1
- package/dist/esm/errors/errors.shared.schemas.d.ts +82 -36
- package/dist/esm/errors/errors.shared.schemas.d.ts.map +1 -1
- package/dist/esm/errors/errors.shared.schemas.js +100 -3
- package/dist/esm/errors/errors.shared.schemas.js.map +1 -1
- package/dist/esm/errors/errors.shared.utils.d.ts +1 -1
- package/dist/esm/errors/errors.shared.utils.d.ts.map +1 -1
- package/dist/esm/errors/errors.shared.utils.js +1 -1
- package/dist/esm/errors/errors.shared.utils.js.map +1 -1
- package/dist/esm/errors/resource-access-forbidden.shared.error.d.ts +16 -0
- package/dist/esm/errors/resource-access-forbidden.shared.error.d.ts.map +1 -0
- package/dist/esm/errors/resource-access-forbidden.shared.error.js +18 -0
- package/dist/esm/errors/resource-access-forbidden.shared.error.js.map +1 -0
- package/dist/esm/errors/zod-issue-formatting.shared.utils.d.ts +113 -0
- package/dist/esm/errors/zod-issue-formatting.shared.utils.d.ts.map +1 -0
- package/dist/esm/errors/zod-issue-formatting.shared.utils.js +102 -0
- package/dist/esm/errors/zod-issue-formatting.shared.utils.js.map +1 -0
- package/dist/esm/exports/tabular-csv.shared.utils.d.ts +42 -0
- package/dist/esm/exports/tabular-csv.shared.utils.d.ts.map +1 -0
- package/dist/esm/exports/tabular-csv.shared.utils.js +63 -0
- package/dist/esm/exports/tabular-csv.shared.utils.js.map +1 -0
- package/dist/esm/external-data/external-data-pipeline.shared.schemas.d.ts +347 -0
- package/dist/esm/external-data/external-data-pipeline.shared.schemas.d.ts.map +1 -0
- package/dist/esm/external-data/external-data-pipeline.shared.schemas.js +206 -0
- package/dist/esm/external-data/external-data-pipeline.shared.schemas.js.map +1 -0
- package/dist/esm/external-data.exports.d.ts +30 -0
- package/dist/esm/external-data.exports.d.ts.map +1 -0
- package/dist/esm/external-data.exports.js +30 -0
- package/dist/esm/external-data.exports.js.map +1 -0
- package/dist/esm/external-providers/compose-provider-registry.shared.d.ts +63 -0
- package/dist/esm/external-providers/compose-provider-registry.shared.d.ts.map +1 -0
- package/dist/esm/external-providers/compose-provider-registry.shared.js +102 -0
- package/dist/esm/external-providers/compose-provider-registry.shared.js.map +1 -0
- package/dist/esm/external-providers/engine-capabilities.shared.schemas.d.ts +164 -0
- package/dist/esm/external-providers/engine-capabilities.shared.schemas.d.ts.map +1 -0
- package/dist/esm/external-providers/engine-capabilities.shared.schemas.js +194 -0
- package/dist/esm/external-providers/engine-capabilities.shared.schemas.js.map +1 -0
- package/dist/esm/external-providers/engine-capability-resolution-mode.shared.d.ts +39 -0
- package/dist/esm/external-providers/engine-capability-resolution-mode.shared.d.ts.map +1 -0
- package/dist/esm/external-providers/engine-capability-resolution-mode.shared.js +85 -0
- package/dist/esm/external-providers/engine-capability-resolution-mode.shared.js.map +1 -0
- package/dist/esm/external-providers/external-providers.shared.schemas.d.ts +22 -22
- package/dist/esm/external-providers/external-providers.shared.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/external-providers.shared.schemas.js +5 -5
- package/dist/esm/external-providers/external-providers.shared.schemas.js.map +1 -1
- package/dist/esm/external-providers/frontend-bootstrap.shared.schemas.d.ts +319 -0
- package/dist/esm/external-providers/frontend-bootstrap.shared.schemas.d.ts.map +1 -0
- package/dist/esm/external-providers/frontend-bootstrap.shared.schemas.js +17 -0
- package/dist/esm/external-providers/frontend-bootstrap.shared.schemas.js.map +1 -0
- package/dist/esm/external-providers/frontend-provider-entry.shared.schemas.d.ts +35 -0
- package/dist/esm/external-providers/frontend-provider-entry.shared.schemas.d.ts.map +1 -0
- package/dist/esm/external-providers/frontend-provider-entry.shared.schemas.js +19 -0
- package/dist/esm/external-providers/frontend-provider-entry.shared.schemas.js.map +1 -0
- package/dist/esm/external-providers/provider-capability.shared.schemas.d.ts +135 -0
- package/dist/esm/external-providers/provider-capability.shared.schemas.d.ts.map +1 -0
- package/dist/esm/external-providers/provider-capability.shared.schemas.js +102 -0
- package/dist/esm/external-providers/provider-capability.shared.schemas.js.map +1 -0
- package/dist/esm/external-providers/provider-compliance-profile.shared.schemas.d.ts +175 -0
- package/dist/esm/external-providers/provider-compliance-profile.shared.schemas.d.ts.map +1 -0
- package/dist/esm/external-providers/provider-compliance-profile.shared.schemas.js +211 -0
- package/dist/esm/external-providers/provider-compliance-profile.shared.schemas.js.map +1 -0
- package/dist/esm/external-providers/provider-metadata.shared.schemas.d.ts +37 -0
- package/dist/esm/external-providers/provider-metadata.shared.schemas.d.ts.map +1 -0
- package/dist/esm/external-providers/provider-metadata.shared.schemas.js +58 -0
- package/dist/esm/external-providers/provider-metadata.shared.schemas.js.map +1 -0
- package/dist/esm/external-providers/provider-protocol.shared.schemas.d.ts +65 -0
- package/dist/esm/external-providers/provider-protocol.shared.schemas.d.ts.map +1 -0
- package/dist/esm/external-providers/provider-protocol.shared.schemas.js +63 -0
- package/dist/esm/external-providers/provider-protocol.shared.schemas.js.map +1 -0
- package/dist/esm/external-providers/provider-usage-pricing.shared.schemas.d.ts +99 -0
- package/dist/esm/external-providers/provider-usage-pricing.shared.schemas.d.ts.map +1 -0
- package/dist/esm/external-providers/provider-usage-pricing.shared.schemas.js +137 -0
- package/dist/esm/external-providers/provider-usage-pricing.shared.schemas.js.map +1 -0
- package/dist/esm/features/application-features.shared.resources-config.schemas.d.ts +39 -0
- package/dist/esm/features/application-features.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/features/application-features.shared.resources-config.schemas.js +147 -0
- package/dist/esm/features/application-features.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/features/core-feature-definitions.shared.d.ts +17 -2
- package/dist/esm/features/core-feature-definitions.shared.d.ts.map +1 -1
- package/dist/esm/features/core-feature-definitions.shared.js +91 -3
- package/dist/esm/features/core-feature-definitions.shared.js.map +1 -1
- package/dist/esm/features/feature-builders.shared.d.ts +13 -2
- package/dist/esm/features/feature-builders.shared.d.ts.map +1 -1
- package/dist/esm/features/feature-builders.shared.js +3 -1
- package/dist/esm/features/feature-builders.shared.js.map +1 -1
- package/dist/esm/features/feature-definition.shared.schemas.d.ts +70 -24
- package/dist/esm/features/feature-definition.shared.schemas.d.ts.map +1 -1
- package/dist/esm/features/feature-definition.shared.schemas.js +84 -1
- package/dist/esm/features/feature-definition.shared.schemas.js.map +1 -1
- package/dist/esm/features/feature-registry.shared.d.ts +8 -9
- package/dist/esm/features/feature-registry.shared.d.ts.map +1 -1
- package/dist/esm/features/feature-registry.shared.js +5 -8
- package/dist/esm/features/feature-registry.shared.js.map +1 -1
- package/dist/esm/features/feature-resolution.shared.schemas.d.ts +1 -1
- package/dist/esm/features/feature-resolution.shared.schemas.d.ts.map +1 -1
- package/dist/esm/features/feature-resolution.shared.schemas.js +1 -1
- package/dist/esm/features/feature-resolution.shared.schemas.js.map +1 -1
- package/dist/esm/features/scope-features.shared.schemas.d.ts +9 -10
- package/dist/esm/features/scope-features.shared.schemas.d.ts.map +1 -1
- package/dist/esm/features/scope-features.shared.schemas.js +20 -6
- package/dist/esm/features/scope-features.shared.schemas.js.map +1 -1
- package/dist/esm/features/user-features.shared.resources-config.schemas.d.ts +9 -9
- 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 +35 -1
- package/dist/esm/features/user-features.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/files/files.shared.resources-config.schemas.d.ts +35 -9
- package/dist/esm/files/files.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/files/files.shared.resources-config.schemas.js +27 -5
- package/dist/esm/files/files.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/files/files.shared.schemas.d.ts +71 -13
- package/dist/esm/files/files.shared.schemas.d.ts.map +1 -1
- package/dist/esm/files/files.shared.schemas.js +110 -35
- package/dist/esm/files/files.shared.schemas.js.map +1 -1
- package/dist/esm/files/files.shared.utils.d.ts +9 -5
- package/dist/esm/files/files.shared.utils.d.ts.map +1 -1
- package/dist/esm/files/files.shared.utils.js +10 -6
- package/dist/esm/files/files.shared.utils.js.map +1 -1
- package/dist/esm/flows-actors/a2a-push-delivery-log.shared.resources-config.schemas.d.ts +40 -0
- package/dist/esm/flows-actors/a2a-push-delivery-log.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/a2a-push-delivery-log.shared.resources-config.schemas.js +204 -0
- package/dist/esm/flows-actors/a2a-push-delivery-log.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/flows-actors/a2a-push-delivery-log.shared.schemas.d.ts +113 -0
- package/dist/esm/flows-actors/a2a-push-delivery-log.shared.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/a2a-push-delivery-log.shared.schemas.js +153 -0
- package/dist/esm/flows-actors/a2a-push-delivery-log.shared.schemas.js.map +1 -0
- package/dist/esm/flows-actors/a2a-token-budget-state.shared.resources-config.schemas.d.ts +61 -0
- package/dist/esm/flows-actors/a2a-token-budget-state.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/a2a-token-budget-state.shared.resources-config.schemas.js +143 -0
- package/dist/esm/flows-actors/a2a-token-budget-state.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/flows-actors/a2a-token-budget-state.shared.schemas.d.ts +77 -0
- package/dist/esm/flows-actors/a2a-token-budget-state.shared.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/a2a-token-budget-state.shared.schemas.js +103 -0
- package/dist/esm/flows-actors/a2a-token-budget-state.shared.schemas.js.map +1 -0
- package/dist/esm/flows-actors/actors.shared.schemas.d.ts +339 -326
- package/dist/esm/flows-actors/actors.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/actors.shared.schemas.js +29 -6
- package/dist/esm/flows-actors/actors.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/agent-traceability.shared.schemas.d.ts +237 -0
- package/dist/esm/flows-actors/agent-traceability.shared.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/agent-traceability.shared.schemas.js +152 -0
- package/dist/esm/flows-actors/agent-traceability.shared.schemas.js.map +1 -0
- package/dist/esm/flows-actors/agents.shared.schemas.d.ts +180 -23
- package/dist/esm/flows-actors/agents.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/agents.shared.schemas.js +69 -2
- package/dist/esm/flows-actors/agents.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/apps-blueprint/apps-blueprint-agent-personas.shared.enums.d.ts +19 -0
- package/dist/esm/flows-actors/apps-blueprint/apps-blueprint-agent-personas.shared.enums.d.ts.map +1 -0
- package/dist/esm/flows-actors/apps-blueprint/apps-blueprint-agent-personas.shared.enums.js +35 -0
- package/dist/esm/flows-actors/apps-blueprint/apps-blueprint-agent-personas.shared.enums.js.map +1 -0
- package/dist/esm/flows-actors/apps-blueprint/apps-blueprint.shared.schemas.d.ts +29 -45
- package/dist/esm/flows-actors/apps-blueprint/apps-blueprint.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/apps-blueprint/apps-blueprint.shared.schemas.js +2 -34
- package/dist/esm/flows-actors/apps-blueprint/apps-blueprint.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/apps-blueprint/artifacts.apps-blueprint.shared.schemas.d.ts +2 -2
- package/dist/esm/flows-actors/apps-blueprint/artifacts.apps-blueprint.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/apps-blueprint/artifacts.apps-blueprint.shared.schemas.js +1 -1
- package/dist/esm/flows-actors/apps-blueprint/artifacts.apps-blueprint.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/deliberation.shared.schemas.d.ts +642 -0
- package/dist/esm/flows-actors/deliberation.shared.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/deliberation.shared.schemas.js +604 -0
- package/dist/esm/flows-actors/deliberation.shared.schemas.js.map +1 -0
- package/dist/esm/flows-actors/flows-actors-execution.shared.resources-config.schemas.d.ts +48 -0
- package/dist/esm/flows-actors/flows-actors-execution.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/flows-actors-execution.shared.resources-config.schemas.js +179 -0
- package/dist/esm/flows-actors/flows-actors-execution.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/flows-actors/flows-actors-execution.shared.schemas.d.ts +200 -0
- package/dist/esm/flows-actors/flows-actors-execution.shared.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/flows-actors-execution.shared.schemas.js +337 -0
- package/dist/esm/flows-actors/flows-actors-execution.shared.schemas.js.map +1 -0
- package/dist/esm/flows-actors/flows-actors-task.shared.resources-config.schemas.d.ts +59 -0
- package/dist/esm/flows-actors/flows-actors-task.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/flows-actors-task.shared.resources-config.schemas.js +223 -0
- package/dist/esm/flows-actors/flows-actors-task.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/flows-actors/flows-actors-task.shared.schemas.d.ts +426 -0
- package/dist/esm/flows-actors/flows-actors-task.shared.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/flows-actors-task.shared.schemas.js +317 -0
- package/dist/esm/flows-actors/flows-actors-task.shared.schemas.js.map +1 -0
- package/dist/esm/flows-actors/flows-actors.commons.shared.schemas.d.ts +109 -58
- 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 +48 -1
- 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 +62 -62
- 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 +2 -2
- 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 +112 -11
- 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 +63 -1
- package/dist/esm/flows-actors/flows-actors.frontend.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors.io.shared.schemas.d.ts +60 -20
- package/dist/esm/flows-actors/flows-actors.io.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows-actors.io.shared.schemas.js +36 -3
- package/dist/esm/flows-actors/flows-actors.io.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows-actors.system.shared.definitions.d.ts +35 -0
- package/dist/esm/flows-actors/flows-actors.system.shared.definitions.d.ts.map +1 -0
- package/dist/esm/flows-actors/flows-actors.system.shared.definitions.js +1 -0
- package/dist/esm/flows-actors/flows-actors.system.shared.definitions.js.map +1 -0
- package/dist/esm/flows-actors/flows-actors.system.shared.schemas.d.ts +88 -63
- 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 +32 -5
- package/dist/esm/flows-actors/flows-actors.system.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/flows.shared.schemas.d.ts +63 -49
- package/dist/esm/flows-actors/flows.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/flows.shared.schemas.js +1 -1
- package/dist/esm/flows-actors/flows.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/meta-workflows/actions.meta-workflows.shared.schemas.d.ts +73 -0
- package/dist/esm/flows-actors/meta-workflows/actions.meta-workflows.shared.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/meta-workflows/actions.meta-workflows.shared.schemas.js +149 -0
- package/dist/esm/flows-actors/meta-workflows/actions.meta-workflows.shared.schemas.js.map +1 -0
- package/dist/esm/flows-actors/meta-workflows/budget-authority.meta-workflows.shared.schemas.d.ts +20 -0
- package/dist/esm/flows-actors/meta-workflows/budget-authority.meta-workflows.shared.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/meta-workflows/budget-authority.meta-workflows.shared.schemas.js +34 -0
- package/dist/esm/flows-actors/meta-workflows/budget-authority.meta-workflows.shared.schemas.js.map +1 -0
- package/dist/esm/flows-actors/meta-workflows/catalog.meta-workflows.shared.schemas.d.ts +125 -0
- package/dist/esm/flows-actors/meta-workflows/catalog.meta-workflows.shared.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/meta-workflows/catalog.meta-workflows.shared.schemas.js +136 -0
- package/dist/esm/flows-actors/meta-workflows/catalog.meta-workflows.shared.schemas.js.map +1 -0
- package/dist/esm/flows-actors/meta-workflows/context-selection.meta-workflows.shared.schemas.d.ts +180 -0
- package/dist/esm/flows-actors/meta-workflows/context-selection.meta-workflows.shared.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/meta-workflows/context-selection.meta-workflows.shared.schemas.js +187 -0
- package/dist/esm/flows-actors/meta-workflows/context-selection.meta-workflows.shared.schemas.js.map +1 -0
- package/dist/esm/flows-actors/meta-workflows/continuity-identifiers.meta-workflows.shared.schemas.d.ts +28 -0
- package/dist/esm/flows-actors/meta-workflows/continuity-identifiers.meta-workflows.shared.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/meta-workflows/continuity-identifiers.meta-workflows.shared.schemas.js +28 -0
- package/dist/esm/flows-actors/meta-workflows/continuity-identifiers.meta-workflows.shared.schemas.js.map +1 -0
- package/dist/esm/flows-actors/meta-workflows/decisions.meta-workflows.shared.schemas.d.ts +446 -0
- package/dist/esm/flows-actors/meta-workflows/decisions.meta-workflows.shared.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/meta-workflows/decisions.meta-workflows.shared.schemas.js +678 -0
- package/dist/esm/flows-actors/meta-workflows/decisions.meta-workflows.shared.schemas.js.map +1 -0
- package/dist/esm/flows-actors/meta-workflows/execution-binding-common.meta-workflows.shared.schemas.d.ts +106 -0
- package/dist/esm/flows-actors/meta-workflows/execution-binding-common.meta-workflows.shared.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/meta-workflows/execution-binding-common.meta-workflows.shared.schemas.js +243 -0
- package/dist/esm/flows-actors/meta-workflows/execution-binding-common.meta-workflows.shared.schemas.js.map +1 -0
- package/dist/esm/flows-actors/meta-workflows/execution-binding-vocabularies.meta-workflows.shared.schemas.d.ts +29 -0
- package/dist/esm/flows-actors/meta-workflows/execution-binding-vocabularies.meta-workflows.shared.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/meta-workflows/execution-binding-vocabularies.meta-workflows.shared.schemas.js +58 -0
- package/dist/esm/flows-actors/meta-workflows/execution-binding-vocabularies.meta-workflows.shared.schemas.js.map +1 -0
- package/dist/esm/flows-actors/meta-workflows/portable-primitives.meta-workflows.shared.schemas.d.ts +61 -0
- package/dist/esm/flows-actors/meta-workflows/portable-primitives.meta-workflows.shared.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/meta-workflows/portable-primitives.meta-workflows.shared.schemas.js +93 -0
- package/dist/esm/flows-actors/meta-workflows/portable-primitives.meta-workflows.shared.schemas.js.map +1 -0
- package/dist/esm/flows-actors/prompt-ir.shared.schemas.d.ts +5 -5
- package/dist/esm/flows-actors/prompt-ir.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/prompt-ir.shared.schemas.js +2 -2
- package/dist/esm/flows-actors/prompt-ir.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/task-continuity-binding.actors.shared.schemas.d.ts +81 -0
- package/dist/esm/flows-actors/task-continuity-binding.actors.shared.schemas.d.ts.map +1 -0
- package/dist/esm/flows-actors/task-continuity-binding.actors.shared.schemas.js +82 -0
- package/dist/esm/flows-actors/task-continuity-binding.actors.shared.schemas.js.map +1 -0
- package/dist/esm/flows-actors/tasks.actors.shared.schemas.d.ts +257 -194
- package/dist/esm/flows-actors/tasks.actors.shared.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/tasks.actors.shared.schemas.js +28 -2
- package/dist/esm/flows-actors/tasks.actors.shared.schemas.js.map +1 -1
- package/dist/esm/flows-actors/utils/flow-actors.context-builder.apps-context.shared.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/flow-actors.context-builder.apps-context.shared.utils.js +1 -1
- package/dist/esm/flows-actors/utils/flow-actors.context-builder.apps-context.shared.utils.js.map +1 -1
- package/dist/esm/frontend-definitions/frontend-notification-custom-message-ref.definitions.d.ts.map +1 -1
- package/dist/esm/frontend-definitions/frontend-notification-custom-message-ref.definitions.js +1 -1
- package/dist/esm/frontend-definitions/frontend-notification-custom-message-ref.definitions.js.map +1 -1
- package/dist/esm/guidance/guidance-flow.shared.schemas.d.ts +51 -89
- package/dist/esm/guidance/guidance-flow.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/guidance-flow.shared.schemas.js +1 -1
- package/dist/esm/guidance/guidance-flow.shared.schemas.js.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.resources-config.schemas.d.ts +22 -19
- package/dist/esm/guidance/guidance-state.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.resources-config.schemas.js +61 -5
- package/dist/esm/guidance/guidance-state.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.schemas.d.ts +46 -10
- package/dist/esm/guidance/guidance-state.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.schemas.js +15 -4
- package/dist/esm/guidance/guidance-state.shared.schemas.js.map +1 -1
- package/dist/esm/guidance/guidance-state.shared.utils.d.ts +25 -0
- package/dist/esm/guidance/guidance-state.shared.utils.d.ts.map +1 -0
- package/dist/esm/guidance/guidance-state.shared.utils.js +72 -0
- package/dist/esm/guidance/guidance-state.shared.utils.js.map +1 -0
- package/dist/esm/guidance/lifecycle-config.shared.schemas.d.ts +11 -11
- package/dist/esm/guidance/lifecycle-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/lifecycle-config.shared.schemas.js +1 -1
- package/dist/esm/guidance/lifecycle-config.shared.schemas.js.map +1 -1
- package/dist/esm/guidance/lifecycle-state.shared.resources-config.schemas.d.ts +28 -25
- package/dist/esm/guidance/lifecycle-state.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/lifecycle-state.shared.resources-config.schemas.js +71 -7
- package/dist/esm/guidance/lifecycle-state.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/guidance/lifecycle-state.shared.schemas.d.ts +53 -14
- package/dist/esm/guidance/lifecycle-state.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/lifecycle-state.shared.schemas.js +26 -25
- package/dist/esm/guidance/lifecycle-state.shared.schemas.js.map +1 -1
- package/dist/esm/guidance/milestone-builders.shared.d.ts +2 -2
- package/dist/esm/guidance/milestone-builders.shared.d.ts.map +1 -1
- package/dist/esm/guidance/milestone-builders.shared.js +1 -1
- package/dist/esm/guidance/milestone-builders.shared.js.map +1 -1
- package/dist/esm/guidance/milestone-definition.shared.schemas.d.ts +2 -2
- package/dist/esm/guidance/milestone-definition.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/milestone-definition.shared.schemas.js +1 -1
- package/dist/esm/guidance/milestone-definition.shared.schemas.js.map +1 -1
- package/dist/esm/guidance/progression-state.shared.resources-config.schemas.d.ts +22 -19
- package/dist/esm/guidance/progression-state.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/progression-state.shared.resources-config.schemas.js +72 -7
- package/dist/esm/guidance/progression-state.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/guidance/progression-state.shared.schemas.d.ts +40 -10
- package/dist/esm/guidance/progression-state.shared.schemas.d.ts.map +1 -1
- package/dist/esm/guidance/progression-state.shared.schemas.js +16 -6
- 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 +69 -0
- package/dist/esm/http-api-binding/http-api-binding-id.shared.utils.d.ts.map +1 -0
- package/dist/esm/http-api-binding/http-api-binding-id.shared.utils.js +232 -0
- package/dist/esm/http-api-binding/http-api-binding-id.shared.utils.js.map +1 -0
- package/dist/esm/http-api-binding/http-api-binding.shared.schemas.d.ts +566 -0
- package/dist/esm/http-api-binding/http-api-binding.shared.schemas.d.ts.map +1 -0
- package/dist/esm/http-api-binding/http-api-binding.shared.schemas.js +513 -0
- package/dist/esm/http-api-binding/http-api-binding.shared.schemas.js.map +1 -0
- package/dist/esm/i18n/interpolate-label-params.shared.utils.d.ts +52 -0
- package/dist/esm/i18n/interpolate-label-params.shared.utils.d.ts.map +1 -0
- package/dist/esm/i18n/interpolate-label-params.shared.utils.js +63 -0
- package/dist/esm/i18n/interpolate-label-params.shared.utils.js.map +1 -0
- package/dist/esm/i18n/labelling.dto.shared.schemas.d.ts +3 -3
- package/dist/esm/i18n/labelling.dto.shared.schemas.d.ts.map +1 -1
- package/dist/esm/i18n/labelling.dto.shared.schemas.js +1 -1
- package/dist/esm/i18n/labelling.dto.shared.schemas.js.map +1 -1
- package/dist/esm/index.d.ts +277 -200
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +122 -15
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/meta-workflows.exports.d.ts +51 -0
- package/dist/esm/meta-workflows.exports.d.ts.map +1 -0
- package/dist/esm/meta-workflows.exports.js +51 -0
- package/dist/esm/meta-workflows.exports.js.map +1 -0
- package/dist/esm/monitoring/monitoring.shared.schemas.d.ts +16 -16
- package/dist/esm/monitoring/monitoring.shared.schemas.d.ts.map +1 -1
- package/dist/esm/monitoring/monitoring.shared.schemas.js +1 -1
- package/dist/esm/monitoring/monitoring.shared.schemas.js.map +1 -1
- package/dist/esm/notifications/email/email-context.shared.schemas.d.ts +9 -9
- package/dist/esm/notifications/email/email-context.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/email/email-context.shared.schemas.js +8 -3
- package/dist/esm/notifications/email/email-context.shared.schemas.js.map +1 -1
- package/dist/esm/notifications/email/email-template-registry.shared.schemas.d.ts +33 -46
- 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 +20 -140
- package/dist/esm/notifications/email/email-template-registry.shared.schemas.js.map +1 -1
- package/dist/esm/notifications/email/email-template.shared.enums.d.ts +145 -0
- package/dist/esm/notifications/email/email-template.shared.enums.d.ts.map +1 -0
- package/dist/esm/notifications/email/email-template.shared.enums.js +164 -0
- package/dist/esm/notifications/email/email-template.shared.enums.js.map +1 -0
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.resources-config.schemas.d.ts +43 -0
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.resources-config.schemas.js +231 -0
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.schemas.d.ts +159 -0
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.schemas.d.ts.map +1 -0
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.schemas.js +191 -0
- package/dist/esm/notifications/m2m/m2m-webhook-delivery-log.shared.schemas.js.map +1 -0
- package/dist/esm/notifications/m2m/webhook-config.shared.resources-config.schemas.d.ts +62 -0
- package/dist/esm/notifications/m2m/webhook-config.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/notifications/m2m/webhook-config.shared.resources-config.schemas.js +183 -0
- package/dist/esm/notifications/m2m/webhook-config.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/notifications/m2m/webhook-config.shared.schemas.d.ts +134 -0
- package/dist/esm/notifications/m2m/webhook-config.shared.schemas.d.ts.map +1 -0
- package/dist/esm/notifications/m2m/webhook-config.shared.schemas.js +159 -0
- package/dist/esm/notifications/m2m/webhook-config.shared.schemas.js.map +1 -0
- package/dist/esm/notifications/notification-badges.core.definitions.d.ts +10 -1
- package/dist/esm/notifications/notification-badges.core.definitions.d.ts.map +1 -1
- package/dist/esm/notifications/notification-badges.core.definitions.js +11 -13
- package/dist/esm/notifications/notification-badges.core.definitions.js.map +1 -1
- package/dist/esm/notifications/notification-badges.schemas.d.ts +147 -43
- package/dist/esm/notifications/notification-badges.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/notification-badges.schemas.js +130 -23
- package/dist/esm/notifications/notification-badges.schemas.js.map +1 -1
- package/dist/esm/notifications/notification-badges.shared.resources-config.schemas.d.ts +40 -15
- 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 +149 -23
- package/dist/esm/notifications/notification-badges.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/notifications/notifications.shared.schemas.d.ts +352 -25
- package/dist/esm/notifications/notifications.shared.schemas.d.ts.map +1 -1
- package/dist/esm/notifications/notifications.shared.schemas.js +47 -2
- package/dist/esm/notifications/notifications.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-features.shared.resources-config.schemas.d.ts +21 -10
- 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 +54 -47
- package/dist/esm/organizations/organization-features.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-features.shared.schemas.d.ts +10 -2
- package/dist/esm/organizations/organization-features.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-features.shared.schemas.js +10 -2
- package/dist/esm/organizations/organization-features.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-members.shared.resources-config.schemas.d.ts +31 -17
- 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 +294 -54
- package/dist/esm/organizations/organization-members.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-members.shared.schemas.d.ts +31 -41
- package/dist/esm/organizations/organization-members.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-members.shared.schemas.js +181 -37
- package/dist/esm/organizations/organization-members.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-notifications.shared.resources-config.schemas.d.ts +8 -8
- package/dist/esm/organizations/organization-notifications.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-notifications.shared.resources-config.schemas.js +43 -2
- package/dist/esm/organizations/organization-notifications.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-notifications.shared.schemas.d.ts +25 -4
- package/dist/esm/organizations/organization-notifications.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-notifications.shared.schemas.js +35 -15
- package/dist/esm/organizations/organization-notifications.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-preferences.shared.resources-config.schemas.d.ts +7 -7
- package/dist/esm/organizations/organization-preferences.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-preferences.shared.resources-config.schemas.js +42 -3
- package/dist/esm/organizations/organization-preferences.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-preferences.shared.schemas.d.ts +4 -4
- package/dist/esm/organizations/organization-preferences.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-preferences.shared.schemas.js +17 -4
- package/dist/esm/organizations/organization-preferences.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-profile.shared.resources-config.schemas.d.ts +10 -10
- package/dist/esm/organizations/organization-profile.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-profile.shared.resources-config.schemas.js +32 -2
- package/dist/esm/organizations/organization-profile.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-profile.shared.schemas.d.ts +6 -6
- package/dist/esm/organizations/organization-profile.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-profile.shared.schemas.js +28 -2
- package/dist/esm/organizations/organization-profile.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-unit-inheritance.shared.d.ts +94 -0
- package/dist/esm/organizations/organization-unit-inheritance.shared.d.ts.map +1 -0
- package/dist/esm/organizations/organization-unit-inheritance.shared.js +96 -0
- package/dist/esm/organizations/organization-unit-inheritance.shared.js.map +1 -0
- package/dist/esm/organizations/organization-unit-members.shared.resources-config.schemas.d.ts +30 -0
- package/dist/esm/organizations/organization-unit-members.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/organizations/organization-unit-members.shared.resources-config.schemas.js +97 -0
- package/dist/esm/organizations/organization-unit-members.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/organizations/organization-unit-members.shared.schemas.d.ts +56 -0
- package/dist/esm/organizations/organization-unit-members.shared.schemas.d.ts.map +1 -0
- package/dist/esm/organizations/organization-unit-members.shared.schemas.js +92 -0
- package/dist/esm/organizations/organization-unit-members.shared.schemas.js.map +1 -0
- package/dist/esm/organizations/organization-unit-narrowing-decision.shared.d.ts +130 -0
- package/dist/esm/organizations/organization-unit-narrowing-decision.shared.d.ts.map +1 -0
- package/dist/esm/organizations/organization-unit-narrowing-decision.shared.js +139 -0
- package/dist/esm/organizations/organization-unit-narrowing-decision.shared.js.map +1 -0
- package/dist/esm/organizations/organization-unit-narrowing.example.d.ts +27 -0
- package/dist/esm/organizations/organization-unit-narrowing.example.d.ts.map +1 -0
- package/dist/esm/organizations/organization-unit-narrowing.example.js +29 -0
- package/dist/esm/organizations/organization-unit-narrowing.example.js.map +1 -0
- package/dist/esm/organizations/organization-unit-narrowing.shared.d.ts +137 -0
- package/dist/esm/organizations/organization-unit-narrowing.shared.d.ts.map +1 -0
- package/dist/esm/organizations/organization-unit-narrowing.shared.js +133 -0
- package/dist/esm/organizations/organization-unit-narrowing.shared.js.map +1 -0
- package/dist/esm/organizations/organization-units.shared.path.d.ts +103 -0
- package/dist/esm/organizations/organization-units.shared.path.d.ts.map +1 -0
- package/dist/esm/organizations/organization-units.shared.path.js +120 -0
- package/dist/esm/organizations/organization-units.shared.path.js.map +1 -0
- package/dist/esm/organizations/organization-units.shared.resources-config.schemas.d.ts +8 -8
- 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 +1 -1
- package/dist/esm/organizations/organization-units.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organization-units.shared.schemas.d.ts +69 -8
- package/dist/esm/organizations/organization-units.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organization-units.shared.schemas.js +89 -5
- package/dist/esm/organizations/organization-units.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/organizations.shared.resources-config.schemas.d.ts +46 -11
- package/dist/esm/organizations/organizations.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organizations.shared.resources-config.schemas.js +505 -34
- package/dist/esm/organizations/organizations.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/organizations/organizations.shared.schemas.d.ts +95 -39
- package/dist/esm/organizations/organizations.shared.schemas.d.ts.map +1 -1
- package/dist/esm/organizations/organizations.shared.schemas.js +228 -6
- package/dist/esm/organizations/organizations.shared.schemas.js.map +1 -1
- package/dist/esm/organizations/tenant-teardown-config.shared.schemas.d.ts +36 -0
- package/dist/esm/organizations/tenant-teardown-config.shared.schemas.d.ts.map +1 -0
- package/dist/esm/organizations/tenant-teardown-config.shared.schemas.js +66 -0
- package/dist/esm/organizations/tenant-teardown-config.shared.schemas.js.map +1 -0
- package/dist/esm/provider-registration-runtime.exports.d.ts +4 -0
- package/dist/esm/provider-registration-runtime.exports.d.ts.map +1 -0
- package/dist/esm/provider-registration-runtime.exports.js +4 -0
- package/dist/esm/provider-registration-runtime.exports.js.map +1 -0
- package/dist/esm/public-runtime/index.d.ts +164 -0
- package/dist/esm/public-runtime/index.d.ts.map +1 -0
- package/dist/esm/public-runtime/index.js +164 -0
- package/dist/esm/public-runtime/index.js.map +1 -0
- package/dist/esm/queue/jobs.shared.resources-config.schemas.d.ts +4 -4
- package/dist/esm/queue/jobs.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/queue/jobs.shared.resources-config.schemas.js +12 -1
- package/dist/esm/queue/jobs.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/queue/jobs.shared.schemas.d.ts +114 -42
- package/dist/esm/queue/jobs.shared.schemas.d.ts.map +1 -1
- package/dist/esm/queue/jobs.shared.schemas.js +114 -12
- package/dist/esm/queue/jobs.shared.schemas.js.map +1 -1
- package/dist/esm/queue/jobs.shared.utils.d.ts +3 -3
- package/dist/esm/queue/jobs.shared.utils.d.ts.map +1 -1
- package/dist/esm/queue/jobs.shared.utils.js +2 -2
- package/dist/esm/queue/jobs.shared.utils.js.map +1 -1
- package/dist/esm/queue/queues.shared.schemas.d.ts +17 -15
- package/dist/esm/queue/queues.shared.schemas.d.ts.map +1 -1
- package/dist/esm/queue/queues.shared.schemas.js +14 -5
- package/dist/esm/queue/queues.shared.schemas.js.map +1 -1
- package/dist/esm/queue/queues.shared.utils.d.ts +137 -6
- package/dist/esm/queue/queues.shared.utils.d.ts.map +1 -1
- package/dist/esm/queue/queues.shared.utils.js +161 -9
- package/dist/esm/queue/queues.shared.utils.js.map +1 -1
- package/dist/esm/queue/rabbitmq-queue-args.shared.d.ts.map +1 -1
- package/dist/esm/queue/rabbitmq-queue-args.shared.js +1 -1
- package/dist/esm/queue/rabbitmq-queue-args.shared.js.map +1 -1
- package/dist/esm/requests/header-keys.shared.d.ts +23 -1
- package/dist/esm/requests/header-keys.shared.d.ts.map +1 -1
- package/dist/esm/requests/header-keys.shared.js +45 -2
- package/dist/esm/requests/header-keys.shared.js.map +1 -1
- package/dist/esm/requests/http-requests.shared.d.ts +1 -0
- package/dist/esm/requests/http-requests.shared.d.ts.map +1 -1
- package/dist/esm/requests/http-requests.shared.js +2 -1
- package/dist/esm/requests/http-requests.shared.js.map +1 -1
- package/dist/esm/requests/manual-controllers-routes-urls.d.ts +189 -5
- package/dist/esm/requests/manual-controllers-routes-urls.d.ts.map +1 -1
- package/dist/esm/requests/manual-controllers-routes-urls.js +255 -6
- package/dist/esm/requests/manual-controllers-routes-urls.js.map +1 -1
- package/dist/esm/requests/rate-limits.shared.schemas.d.ts +75 -24
- package/dist/esm/requests/rate-limits.shared.schemas.d.ts.map +1 -1
- package/dist/esm/requests/rate-limits.shared.schemas.js +80 -18
- package/dist/esm/requests/rate-limits.shared.schemas.js.map +1 -1
- package/dist/esm/requests/websocket.shared.schemas.d.ts +248 -120
- package/dist/esm/requests/websocket.shared.schemas.d.ts.map +1 -1
- package/dist/esm/requests/websocket.shared.schemas.js +92 -2
- package/dist/esm/requests/websocket.shared.schemas.js.map +1 -1
- package/dist/esm/resources/child-operations.shared.schemas.d.ts +128 -23
- package/dist/esm/resources/child-operations.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/child-operations.shared.schemas.js +147 -11
- package/dist/esm/resources/child-operations.shared.schemas.js.map +1 -1
- package/dist/esm/resources/context-policy.shared.schemas.d.ts +4 -4
- package/dist/esm/resources/context-policy.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/context-policy.shared.schemas.js +1 -1
- package/dist/esm/resources/context-policy.shared.schemas.js.map +1 -1
- package/dist/esm/resources/relationship-display.shared.schemas.d.ts +31 -1352
- package/dist/esm/resources/relationship-display.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/relationship-display.shared.schemas.js +13 -161
- package/dist/esm/resources/relationship-display.shared.schemas.js.map +1 -1
- package/dist/esm/resources/resources-config.shared.factory.d.ts +60 -5
- package/dist/esm/resources/resources-config.shared.factory.d.ts.map +1 -1
- package/dist/esm/resources/resources-config.shared.factory.js +1507 -87
- package/dist/esm/resources/resources-config.shared.factory.js.map +1 -1
- package/dist/esm/resources/resources-config.shared.schemas.d.ts +1638 -43
- package/dist/esm/resources/resources-config.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/resources-config.shared.schemas.js +478 -13
- package/dist/esm/resources/resources-config.shared.schemas.js.map +1 -1
- package/dist/esm/resources/resources-registry.shared.core.definitions.d.ts +3 -3
- package/dist/esm/resources/resources-registry.shared.core.definitions.d.ts.map +1 -1
- package/dist/esm/resources/resources-registry.shared.core.definitions.js +782 -96
- package/dist/esm/resources/resources-registry.shared.core.definitions.js.map +1 -1
- package/dist/esm/resources/resources-relationships.shared.factory.d.ts +37 -7
- package/dist/esm/resources/resources-relationships.shared.factory.d.ts.map +1 -1
- package/dist/esm/resources/resources-relationships.shared.factory.js +76 -24
- package/dist/esm/resources/resources-relationships.shared.factory.js.map +1 -1
- package/dist/esm/resources/resources-serialization.shared.schemas.d.ts +19 -19
- package/dist/esm/resources/resources-serialization.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/resources-serialization.shared.schemas.js +1 -1
- package/dist/esm/resources/resources-serialization.shared.schemas.js.map +1 -1
- package/dist/esm/resources/resources.shared.core.definitions.d.ts +84 -8
- package/dist/esm/resources/resources.shared.core.definitions.d.ts.map +1 -1
- package/dist/esm/resources/resources.shared.core.definitions.js +165 -19
- package/dist/esm/resources/resources.shared.core.definitions.js.map +1 -1
- package/dist/esm/resources/resources.shared.schemas.d.ts +582 -602
- package/dist/esm/resources/resources.shared.schemas.d.ts.map +1 -1
- package/dist/esm/resources/resources.shared.schemas.js +581 -5
- package/dist/esm/resources/resources.shared.schemas.js.map +1 -1
- package/dist/esm/resources/resources.shared.utils.d.ts +363 -15
- package/dist/esm/resources/resources.shared.utils.d.ts.map +1 -1
- package/dist/esm/resources/resources.shared.utils.js +569 -16
- package/dist/esm/resources/resources.shared.utils.js.map +1 -1
- package/dist/esm/resources/utils/collection-export.shared.utils.d.ts +65 -0
- package/dist/esm/resources/utils/collection-export.shared.utils.d.ts.map +1 -0
- package/dist/esm/resources/utils/collection-export.shared.utils.js +150 -0
- package/dist/esm/resources/utils/collection-export.shared.utils.js.map +1 -0
- package/dist/esm/resources/utils/composition-cascade-deletability.validation.d.ts +134 -0
- package/dist/esm/resources/utils/composition-cascade-deletability.validation.d.ts.map +1 -0
- package/dist/esm/resources/utils/composition-cascade-deletability.validation.js +167 -0
- package/dist/esm/resources/utils/composition-cascade-deletability.validation.js.map +1 -0
- package/dist/esm/resources/utils/composition-seedability.validation.d.ts +63 -0
- package/dist/esm/resources/utils/composition-seedability.validation.d.ts.map +1 -0
- package/dist/esm/resources/utils/composition-seedability.validation.js +75 -0
- package/dist/esm/resources/utils/composition-seedability.validation.js.map +1 -0
- package/dist/esm/resources/utils/context-addressed-composition-singleton.shared.utils.d.ts +10 -0
- package/dist/esm/resources/utils/context-addressed-composition-singleton.shared.utils.d.ts.map +1 -0
- package/dist/esm/resources/utils/context-addressed-composition-singleton.shared.utils.js +25 -0
- package/dist/esm/resources/utils/context-addressed-composition-singleton.shared.utils.js.map +1 -0
- package/dist/esm/resources/utils/duplicate-relationship-registration.validation.d.ts +111 -0
- package/dist/esm/resources/utils/duplicate-relationship-registration.validation.d.ts.map +1 -0
- package/dist/esm/resources/utils/duplicate-relationship-registration.validation.js +109 -0
- package/dist/esm/resources/utils/duplicate-relationship-registration.validation.js.map +1 -0
- package/dist/esm/resources/utils/persistence-adapter-discrimination.shared.utils.d.ts +52 -0
- package/dist/esm/resources/utils/persistence-adapter-discrimination.shared.utils.d.ts.map +1 -0
- package/dist/esm/resources/utils/persistence-adapter-discrimination.shared.utils.js +57 -0
- package/dist/esm/resources/utils/persistence-adapter-discrimination.shared.utils.js.map +1 -0
- package/dist/esm/resources/utils/repository-dto-builder.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/repository-dto-builder.utils.js +1 -1
- package/dist/esm/resources/utils/repository-dto-builder.utils.js.map +1 -1
- package/dist/esm/resources/utils/required-fk-fillability.validation.d.ts +108 -0
- package/dist/esm/resources/utils/required-fk-fillability.validation.d.ts.map +1 -0
- package/dist/esm/resources/utils/required-fk-fillability.validation.js +186 -0
- package/dist/esm/resources/utils/required-fk-fillability.validation.js.map +1 -0
- package/dist/esm/resources/utils/resource-operation-type-guards.utils.d.ts +107 -3
- package/dist/esm/resources/utils/resource-operation-type-guards.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-operation-type-guards.utils.js +133 -2
- package/dist/esm/resources/utils/resource-operation-type-guards.utils.js.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.factory.d.ts +39 -31
- package/dist/esm/resources/utils/resource-polymorphism.factory.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.factory.js +9 -9
- package/dist/esm/resources/utils/resource-polymorphism.factory.js.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.relationships.d.ts +7 -7
- package/dist/esm/resources/utils/resource-polymorphism.relationships.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.relationships.js +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.relationships.js.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.schemas.d.ts +139 -5
- package/dist/esm/resources/utils/resource-polymorphism.schemas.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.schemas.js +301 -3
- package/dist/esm/resources/utils/resource-polymorphism.schemas.js.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.utils.d.ts +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.utils.js +1 -1
- package/dist/esm/resources/utils/resource-polymorphism.utils.js.map +1 -1
- package/dist/esm/resources/utils/resource-subtree.utils.d.ts +1 -1
- package/dist/esm/resources/utils/resource-subtree.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-subtree.utils.js +1 -1
- package/dist/esm/resources/utils/resource-subtree.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-config-context-needs.utils.d.ts +1 -1
- package/dist/esm/resources/utils/resources-config-context-needs.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-context-needs.utils.js +1 -1
- package/dist/esm/resources/utils/resources-config-context-needs.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-config-naming.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-naming.utils.js +1 -1
- 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 +256 -39
- 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 +898 -233
- package/dist/esm/resources/utils/resources-config-operations.dtos-builder.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.path.utils.d.ts +16 -6
- package/dist/esm/resources/utils/resources-config-operations.path.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.path.utils.js +35 -10
- package/dist/esm/resources/utils/resources-config-operations.path.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.urls-builder.utils.d.ts +120 -20
- 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 +394 -81
- package/dist/esm/resources/utils/resources-config-operations.urls-builder.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.utils.d.ts +2 -2
- package/dist/esm/resources/utils/resources-config-operations.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-config-operations.utils.js +1 -1
- package/dist/esm/resources/utils/resources-config-operations.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-serialization.utils.d.ts +77 -2
- package/dist/esm/resources/utils/resources-serialization.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-serialization.utils.js +80 -1
- package/dist/esm/resources/utils/resources-serialization.utils.js.map +1 -1
- package/dist/esm/resources/utils/resources-summary.utils.d.ts +1 -1
- package/dist/esm/resources/utils/resources-summary.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/resources-summary.utils.js +1 -1
- package/dist/esm/resources/utils/resources-summary.utils.js.map +1 -1
- package/dist/esm/resources/utils/schema-family-builder.utils.d.ts +21 -3
- package/dist/esm/resources/utils/schema-family-builder.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/schema-family-builder.utils.js +7 -1
- package/dist/esm/resources/utils/schema-family-builder.utils.js.map +1 -1
- package/dist/esm/resources/utils/schema-type-inference.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/schema-type-inference.utils.js +1 -1
- package/dist/esm/resources/utils/schema-type-inference.utils.js.map +1 -1
- package/dist/esm/resources/utils/schema-type-utils.d.ts +1 -1
- package/dist/esm/resources/utils/schema-type-utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/schema-type-utils.js +1 -1
- package/dist/esm/resources/utils/schema-type-utils.js.map +1 -1
- package/dist/esm/resources/utils/schema-variant-resolver.utils.d.ts +1 -1
- package/dist/esm/resources/utils/schema-variant-resolver.utils.d.ts.map +1 -1
- package/dist/esm/resources/utils/schema-variant-resolver.utils.js +1 -1
- package/dist/esm/resources/utils/schema-variant-resolver.utils.js.map +1 -1
- package/dist/esm/resources/utils/shared-persistence-collection.utils.d.ts +203 -0
- package/dist/esm/resources/utils/shared-persistence-collection.utils.d.ts.map +1 -0
- package/dist/esm/resources/utils/shared-persistence-collection.utils.js +284 -0
- package/dist/esm/resources/utils/shared-persistence-collection.utils.js.map +1 -0
- package/dist/esm/resources/utils/templatable-file-fields.shared.utils.d.ts +25 -0
- package/dist/esm/resources/utils/templatable-file-fields.shared.utils.d.ts.map +1 -0
- package/dist/esm/resources/utils/templatable-file-fields.shared.utils.js +322 -0
- package/dist/esm/resources/utils/templatable-file-fields.shared.utils.js.map +1 -0
- package/dist/esm/runtime/domain-module.shared.definitions.d.ts +32 -10
- package/dist/esm/runtime/domain-module.shared.definitions.d.ts.map +1 -1
- package/dist/esm/runtime/domain-module.shared.definitions.js +3 -2
- package/dist/esm/runtime/domain-module.shared.definitions.js.map +1 -1
- package/dist/esm/runtime/execution-context.shared.schemas.d.ts +93 -9
- package/dist/esm/runtime/execution-context.shared.schemas.d.ts.map +1 -1
- package/dist/esm/runtime/execution-context.shared.schemas.js +122 -7
- package/dist/esm/runtime/execution-context.shared.schemas.js.map +1 -1
- package/dist/esm/runtime/runtime.shared.schemas.d.ts.map +1 -1
- package/dist/esm/runtime/runtime.shared.schemas.js +1 -1
- package/dist/esm/runtime/runtime.shared.schemas.js.map +1 -1
- package/dist/esm/security/api-keys/api-keys-application.shared.resources-config.schemas.d.ts +14 -11
- 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 +65 -2
- 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 +14 -11
- 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 +162 -1
- package/dist/esm/security/api-keys/api-keys-organization.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/api-keys/api-keys.shared.schemas.d.ts +79 -29
- package/dist/esm/security/api-keys/api-keys.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-keys.shared.schemas.js +87 -6
- package/dist/esm/security/api-keys/api-keys.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/anonymous-session/anonymous-session.shared.contract.d.ts +185 -0
- package/dist/esm/security/authentications/anonymous-session/anonymous-session.shared.contract.d.ts.map +1 -0
- package/dist/esm/security/authentications/anonymous-session/anonymous-session.shared.contract.js +198 -0
- package/dist/esm/security/authentications/anonymous-session/anonymous-session.shared.contract.js.map +1 -0
- package/dist/esm/security/authentications/authentication.shared.dto.schemas.d.ts +307 -149
- package/dist/esm/security/authentications/authentication.shared.dto.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.dto.schemas.js +177 -27
- package/dist/esm/security/authentications/authentication.shared.dto.schemas.js.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.schemas.d.ts +64 -8
- package/dist/esm/security/authentications/authentication.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.schemas.js +56 -9
- package/dist/esm/security/authentications/authentication.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.utils.d.ts +3 -3
- package/dist/esm/security/authentications/authentication.shared.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/authentication.shared.utils.js +1 -1
- package/dist/esm/security/authentications/authentication.shared.utils.js.map +1 -1
- package/dist/esm/security/authentications/consumable-token.shared.schemas.d.ts +103 -5
- package/dist/esm/security/authentications/consumable-token.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/consumable-token.shared.schemas.js +31 -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 +278 -0
- package/dist/esm/security/authentications/cross-frontend-handoff.shared.dto.schemas.d.ts.map +1 -0
- package/dist/esm/security/authentications/cross-frontend-handoff.shared.dto.schemas.js +335 -0
- package/dist/esm/security/authentications/cross-frontend-handoff.shared.dto.schemas.js.map +1 -0
- package/dist/esm/security/authentications/password-reset.shared.dto.schemas.d.ts +6 -6
- package/dist/esm/security/authentications/password-reset.shared.dto.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/password-reset.shared.dto.schemas.js +11 -4
- package/dist/esm/security/authentications/password-reset.shared.dto.schemas.js.map +1 -1
- package/dist/esm/security/authentications/registration.shared.dto.schemas.d.ts +51 -18
- package/dist/esm/security/authentications/registration.shared.dto.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/registration.shared.dto.schemas.js +70 -13
- package/dist/esm/security/authentications/registration.shared.dto.schemas.js.map +1 -1
- package/dist/esm/security/authentications/same-origin-redirect-path.shared.d.ts +69 -0
- package/dist/esm/security/authentications/same-origin-redirect-path.shared.d.ts.map +1 -0
- package/dist/esm/security/authentications/same-origin-redirect-path.shared.js +93 -0
- package/dist/esm/security/authentications/same-origin-redirect-path.shared.js.map +1 -0
- package/dist/esm/security/authentications/scim/scim-organization-unit-mapping.shared.d.ts +91 -0
- package/dist/esm/security/authentications/scim/scim-organization-unit-mapping.shared.d.ts.map +1 -0
- package/dist/esm/security/authentications/scim/scim-organization-unit-mapping.shared.js +91 -0
- package/dist/esm/security/authentications/scim/scim-organization-unit-mapping.shared.js.map +1 -0
- package/dist/esm/security/authentications/scim/scim-provisioning-config.shared.resources-config.schemas.d.ts +2 -9
- 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 +49 -33
- 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 +41 -14
- 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 +158 -5
- 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 +21 -9
- 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 +92 -18
- package/dist/esm/security/authentications/scim/scim-tokens.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/scim/scim-tokens.shared.schemas.d.ts +11 -10
- package/dist/esm/security/authentications/scim/scim-tokens.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/scim/scim-tokens.shared.schemas.js +29 -7
- package/dist/esm/security/authentications/scim/scim-tokens.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.resources-config.schemas.d.ts +12 -5
- 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 +81 -5
- 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-dlq.shared.schemas.d.ts +17 -5
- package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.schemas.js +29 -5
- package/dist/esm/security/authentications/siem/siem-delivery-dlq.shared.schemas.js.map +1 -1
- package/dist/esm/security/authentications/siem/siem-export-config.shared.resources-config.schemas.d.ts +2 -9
- 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 +46 -33
- 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 +34 -9
- 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 +47 -3
- 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 +2 -17
- 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 +55 -53
- package/dist/esm/security/authentications/sso/sso-config.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/authentications/sso/sso-config.shared.schemas.d.ts +37 -37
- 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 +53 -13
- 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 +79 -7
- 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 +157 -14
- 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 +113 -118
- 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 +111 -49
- 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 +57 -0
- package/dist/esm/security/authorizations/administrative-continuity.shared.schemas.d.ts.map +1 -0
- package/dist/esm/security/authorizations/administrative-continuity.shared.schemas.js +58 -0
- package/dist/esm/security/authorizations/administrative-continuity.shared.schemas.js.map +1 -0
- package/dist/esm/security/authorizations/platform-access-grants.shared.resources-config.schemas.d.ts +35 -0
- package/dist/esm/security/authorizations/platform-access-grants.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/security/authorizations/platform-access-grants.shared.resources-config.schemas.js +252 -0
- package/dist/esm/security/authorizations/platform-access-grants.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/security/authorizations/platform-access-grants.shared.schemas.d.ts +171 -0
- package/dist/esm/security/authorizations/platform-access-grants.shared.schemas.d.ts.map +1 -0
- package/dist/esm/security/authorizations/platform-access-grants.shared.schemas.js +239 -0
- package/dist/esm/security/authorizations/platform-access-grants.shared.schemas.js.map +1 -0
- package/dist/esm/security/authorizations/roles.shared.defaults.d.ts +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 -1
- package/dist/esm/security/authorizations/roles.shared.defaults.js.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.schemas.d.ts +12 -3
- package/dist/esm/security/authorizations/roles.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.schemas.js +15 -1
- package/dist/esm/security/authorizations/roles.shared.schemas.js.map +1 -1
- package/dist/esm/security/authorizations/roles.shared.utils.d.ts +133 -0
- package/dist/esm/security/authorizations/roles.shared.utils.d.ts.map +1 -0
- package/dist/esm/security/authorizations/roles.shared.utils.js +218 -0
- package/dist/esm/security/authorizations/roles.shared.utils.js.map +1 -0
- package/dist/esm/security/crypto-keys/crypto-keys.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/crypto-keys/crypto-keys.shared.schemas.js +1 -1
- package/dist/esm/security/crypto-keys/crypto-keys.shared.schemas.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients-application.shared.resources-config.schemas.d.ts +47 -0
- package/dist/esm/security/oauth-clients/oauth-clients-application.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/security/oauth-clients/oauth-clients-application.shared.resources-config.schemas.js +228 -0
- package/dist/esm/security/oauth-clients/oauth-clients-application.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/security/oauth-clients/oauth-clients-organization.shared.resources-config.schemas.d.ts +46 -0
- package/dist/esm/security/oauth-clients/oauth-clients-organization.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/security/oauth-clients/oauth-clients-organization.shared.resources-config.schemas.js +365 -0
- package/dist/esm/security/oauth-clients/oauth-clients-organization.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/security/oauth-clients/oauth-clients.shared.schemas.d.ts +192 -0
- package/dist/esm/security/oauth-clients/oauth-clients.shared.schemas.d.ts.map +1 -0
- package/dist/esm/security/oauth-clients/oauth-clients.shared.schemas.js +401 -0
- package/dist/esm/security/oauth-clients/oauth-clients.shared.schemas.js.map +1 -0
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.resources-config.schemas.d.ts +30 -0
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.resources-config.schemas.js +83 -0
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.schemas.d.ts +29 -0
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.schemas.d.ts.map +1 -0
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.schemas.js +53 -0
- package/dist/esm/security/oauth-clients/oauth-consent-grants.shared.schemas.js.map +1 -0
- package/dist/esm/security/oauth-clients/oauth-resource-server.shared.schemas.d.ts +117 -0
- package/dist/esm/security/oauth-clients/oauth-resource-server.shared.schemas.d.ts.map +1 -0
- package/dist/esm/security/oauth-clients/oauth-resource-server.shared.schemas.js +180 -0
- package/dist/esm/security/oauth-clients/oauth-resource-server.shared.schemas.js.map +1 -0
- package/dist/esm/testing/resource-config-builders.d.ts +4 -4
- package/dist/esm/testing/resource-config-builders.d.ts.map +1 -1
- package/dist/esm/testing/resource-config-builders.js +9 -2
- package/dist/esm/testing/resource-config-builders.js.map +1 -1
- package/dist/esm/testing.d.ts +1 -1
- package/dist/esm/testing.d.ts.map +1 -1
- package/dist/esm/testing.js +1 -1
- package/dist/esm/testing.js.map +1 -1
- package/dist/esm/users/anonymous-user-marketing-metadata.shared.schemas.d.ts +76 -0
- package/dist/esm/users/anonymous-user-marketing-metadata.shared.schemas.d.ts.map +1 -0
- package/dist/esm/users/anonymous-user-marketing-metadata.shared.schemas.js +72 -0
- package/dist/esm/users/anonymous-user-marketing-metadata.shared.schemas.js.map +1 -0
- package/dist/esm/users/anonymous-users.shared.resources-config.schemas.d.ts +28 -17
- 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 +43 -4
- package/dist/esm/users/anonymous-users.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/anonymous-users.shared.schema.d.ts +19 -12
- package/dist/esm/users/anonymous-users.shared.schema.d.ts.map +1 -1
- package/dist/esm/users/anonymous-users.shared.schema.js +68 -4
- package/dist/esm/users/anonymous-users.shared.schema.js.map +1 -1
- package/dist/esm/users/inbound-contacts.shared.resources-config.schemas.d.ts +52 -0
- package/dist/esm/users/inbound-contacts.shared.resources-config.schemas.d.ts.map +1 -0
- package/dist/esm/users/inbound-contacts.shared.resources-config.schemas.js +153 -0
- package/dist/esm/users/inbound-contacts.shared.resources-config.schemas.js.map +1 -0
- package/dist/esm/users/inbound-contacts.shared.schemas.d.ts +47 -17
- package/dist/esm/users/inbound-contacts.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/inbound-contacts.shared.schemas.js +123 -9
- package/dist/esm/users/inbound-contacts.shared.schemas.js.map +1 -1
- package/dist/esm/users/user-credentials.shared.resources-config.schemas.d.ts +12 -12
- package/dist/esm/users/user-credentials.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-credentials.shared.resources-config.schemas.js +11 -1
- package/dist/esm/users/user-credentials.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/user-credentials.shared.schemas.d.ts +15 -10
- package/dist/esm/users/user-credentials.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-credentials.shared.schemas.js +53 -9
- package/dist/esm/users/user-credentials.shared.schemas.js.map +1 -1
- package/dist/esm/users/user-identity-links.shared.resources-config.schemas.d.ts +13 -11
- package/dist/esm/users/user-identity-links.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-identity-links.shared.resources-config.schemas.js +24 -1
- package/dist/esm/users/user-identity-links.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/user-identity-links.shared.schemas.d.ts +22 -19
- package/dist/esm/users/user-identity-links.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-identity-links.shared.schemas.js +107 -23
- package/dist/esm/users/user-identity-links.shared.schemas.js.map +1 -1
- package/dist/esm/users/user-preferences-reset.shared.utils.d.ts +78 -0
- package/dist/esm/users/user-preferences-reset.shared.utils.d.ts.map +1 -0
- package/dist/esm/users/user-preferences-reset.shared.utils.js +98 -0
- package/dist/esm/users/user-preferences-reset.shared.utils.js.map +1 -0
- package/dist/esm/users/user-preferences.shared.resources-config.schemas.d.ts +31 -61
- 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 +34 -203
- 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 +13 -14
- 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 +66 -31
- 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 +33 -60
- 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 +49 -175
- package/dist/esm/users/user-self-preferences.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/user-self-profiles.shared.resources-config.schemas.d.ts +13 -21
- package/dist/esm/users/user-self-profiles.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/user-self-profiles.shared.resources-config.schemas.js +12 -119
- package/dist/esm/users/user-self-profiles.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/user-self.shared.resources-config.schemas.d.ts +12 -16
- 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 +263 -115
- 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 +13 -16
- package/dist/esm/users/users.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/users/users.shared.resources-config.schemas.js +376 -141
- package/dist/esm/users/users.shared.resources-config.schemas.js.map +1 -1
- package/dist/esm/users/users.shared.schemas.d.ts +110 -108
- package/dist/esm/users/users.shared.schemas.d.ts.map +1 -1
- package/dist/esm/users/users.shared.schemas.js +215 -19
- package/dist/esm/users/users.shared.schemas.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +54 -27
- package/dist/esm/compliance/compliance-framework/compliance-frameworks.shared.schemas.d.ts +0 -37
- package/dist/esm/compliance/compliance-framework/compliance-frameworks.shared.schemas.d.ts.map +0 -1
- package/dist/esm/compliance/compliance-framework/compliance-frameworks.shared.schemas.js +0 -38
- package/dist/esm/compliance/compliance-framework/compliance-frameworks.shared.schemas.js.map +0 -1
- package/dist/esm/external-providers/feature-bindings-policy.shared.schemas.d.ts +0 -27
- package/dist/esm/external-providers/feature-bindings-policy.shared.schemas.d.ts.map +0 -1
- package/dist/esm/external-providers/feature-bindings-policy.shared.schemas.js +0 -35
- package/dist/esm/external-providers/feature-bindings-policy.shared.schemas.js.map +0 -1
- package/dist/esm/external-providers/feature-mapping.shared.schemas.d.ts +0 -80
- package/dist/esm/external-providers/feature-mapping.shared.schemas.d.ts.map +0 -1
- package/dist/esm/external-providers/feature-mapping.shared.schemas.js +0 -159
- package/dist/esm/external-providers/feature-mapping.shared.schemas.js.map +0 -1
- package/dist/esm/external-providers/wildo-features.shared.schemas.d.ts +0 -102
- package/dist/esm/external-providers/wildo-features.shared.schemas.d.ts.map +0 -1
- package/dist/esm/external-providers/wildo-features.shared.schemas.js +0 -124
- package/dist/esm/external-providers/wildo-features.shared.schemas.js.map +0 -1
- package/dist/esm/features/platform-capability-definitions.shared.d.ts +0 -50
- package/dist/esm/features/platform-capability-definitions.shared.d.ts.map +0 -1
- package/dist/esm/features/platform-capability-definitions.shared.js +0 -30
- package/dist/esm/features/platform-capability-definitions.shared.js.map +0 -1
- package/dist/esm/flows-actors/agents-context.shared.schemas.d.ts +0 -181
- package/dist/esm/flows-actors/agents-context.shared.schemas.d.ts.map +0 -1
- package/dist/esm/flows-actors/agents-context.shared.schemas.js +0 -116
- package/dist/esm/flows-actors/agents-context.shared.schemas.js.map +0 -1
- package/dist/esm/notifications/email/email-header-footer-template.shared.resources-config.schemas.d.ts +0 -39
- package/dist/esm/notifications/email/email-header-footer-template.shared.resources-config.schemas.d.ts.map +0 -1
- package/dist/esm/notifications/email/email-header-footer-template.shared.resources-config.schemas.js +0 -113
- package/dist/esm/notifications/email/email-header-footer-template.shared.resources-config.schemas.js.map +0 -1
- package/dist/esm/notifications/email/email-header-footer-template.shared.schemas.d.ts +0 -63
- package/dist/esm/notifications/email/email-header-footer-template.shared.schemas.d.ts.map +0 -1
- package/dist/esm/notifications/email/email-header-footer-template.shared.schemas.js +0 -110
- package/dist/esm/notifications/email/email-header-footer-template.shared.schemas.js.map +0 -1
- package/dist/esm/notifications/email/email-template.shared.resources-config.schemas.d.ts +0 -62
- package/dist/esm/notifications/email/email-template.shared.resources-config.schemas.d.ts.map +0 -1
- package/dist/esm/notifications/email/email-template.shared.resources-config.schemas.js +0 -112
- package/dist/esm/notifications/email/email-template.shared.resources-config.schemas.js.map +0 -1
- package/dist/esm/notifications/email/email-template.shared.schemas.d.ts +0 -162
- package/dist/esm/notifications/email/email-template.shared.schemas.d.ts.map +0 -1
- package/dist/esm/notifications/email/email-template.shared.schemas.js +0 -189
- package/dist/esm/notifications/email/email-template.shared.schemas.js.map +0 -1
- package/dist/esm/organizations/organization-member-invitations.shared.resources-config.schemas.d.ts +0 -37
- package/dist/esm/organizations/organization-member-invitations.shared.resources-config.schemas.d.ts.map +0 -1
- package/dist/esm/organizations/organization-member-invitations.shared.resources-config.schemas.js +0 -207
- package/dist/esm/organizations/organization-member-invitations.shared.resources-config.schemas.js.map +0 -1
- package/dist/esm/resources/testing/SchemaDecoratorTestUtils.d.ts +0 -91
- package/dist/esm/resources/testing/SchemaDecoratorTestUtils.d.ts.map +0 -1
- package/dist/esm/resources/testing/SchemaDecoratorTestUtils.js +0 -325
- package/dist/esm/resources/testing/SchemaDecoratorTestUtils.js.map +0 -1
- package/dist/esm/runtime/companion-artifact-placement.shared.definitions.d.ts.map +0 -1
- package/dist/esm/runtime/companion-artifact-placement.shared.definitions.js.map +0 -1
- package/dist/esm/security/authentications/policy/auth-policy.shared.resources-config.schemas.d.ts +0 -10
- package/dist/esm/security/authentications/policy/auth-policy.shared.resources-config.schemas.d.ts.map +0 -1
- package/dist/esm/security/authentications/policy/auth-policy.shared.resources-config.schemas.js +0 -52
- package/dist/esm/security/authentications/policy/auth-policy.shared.resources-config.schemas.js.map +0 -1
- package/dist/esm/security/authentications/policy/auth-policy.shared.schemas.d.ts +0 -52
- package/dist/esm/security/authentications/policy/auth-policy.shared.schemas.d.ts.map +0 -1
- package/dist/esm/security/authentications/policy/auth-policy.shared.schemas.js +0 -40
- package/dist/esm/security/authentications/policy/auth-policy.shared.schemas.js.map +0 -1
- package/dist/esm/testing/schema-decorator-utils.d.ts +0 -91
- package/dist/esm/testing/schema-decorator-utils.d.ts.map +0 -1
- package/dist/esm/testing/schema-decorator-utils.js +0 -325
- package/dist/esm/testing/schema-decorator-utils.js.map +0 -1
|
@@ -5,26 +5,69 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { z } from 'zod';
|
|
7
7
|
import { EnumLikeType, EnumValues, PrimitiveZodType } from '@wildo-ai/zod-decorators';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
8
|
+
import { ErasureRetentionMode, ResourceDataSubjectKind } from '../compliance/privacy/impersonalization.shared.schemas';
|
|
9
|
+
import type { DataPortabilityProvenance } from '../compliance/privacy/subject-export.shared.schemas';
|
|
10
|
+
import type { HttpApiResourceBinding } from '../http-api-binding/http-api-binding.shared.schemas';
|
|
11
|
+
import type { ExternalDataPipelineDeclaration } from '../external-data/external-data-pipeline.shared.schemas';
|
|
12
|
+
import { HttpMethod } from '../requests/http-requests.shared';
|
|
13
|
+
import { Roles } from '../security/authorizations/roles.shared.schemas';
|
|
14
|
+
import { TokenAuthenticationConfig, TokenGenerationConfig, TokenRevocationConfig } from '../security/authentications/consumable-token.shared.schemas';
|
|
15
|
+
import { ResourceOperation_ServiceRuntimeMode, ResourceOperationVariantType, ResourceOperationRiskLevel, ResourceOperationFrontendSurface, ResourcePrimaryScope, ResourceTranspositionPolicy, ResourceOperation_CustomServiceImplementationMode, ResourceRelationship, ResourceRelationshipAccessScopeStrategy, ManyToManyScopeJunctionMap, type ReferenceConstraints } from './resources.shared.schemas';
|
|
16
|
+
import { NotificationBadgeIdentifier, NotificationBadgeOperation } from '../notifications/notification-badges.schemas';
|
|
17
|
+
import { M2MNotificationDefinition, UserNotificationDefinition } from '../notifications/notifications.shared.schemas';
|
|
18
|
+
import { NotificationBadgeDefinition } from '../notifications/notification-badges.schemas';
|
|
19
|
+
import { CoreResourceOperation, ResourceFieldIdentifier, ResourceType } from './resources.shared.core.definitions';
|
|
20
|
+
import type { OrganizationUnitNarrowingDeclaration } from '../organizations/organization-unit-narrowing.shared';
|
|
21
|
+
import { LimitCountingConfig } from '../features/feature-definition.shared.schemas';
|
|
22
|
+
import { MainSchemaInfer, SchemaArrayInfer } from './utils/schema-type-inference.utils';
|
|
23
|
+
import type { RateLimitConfiguration } from '../requests/rate-limits.shared.schemas';
|
|
24
|
+
/**
|
|
25
|
+
* The pagination block a collection RESPONSE echoes back, bounded by the operation's ceiling.
|
|
26
|
+
*
|
|
27
|
+
* `limit` here reports the page size that was actually SERVED, so its bound has to be at least as
|
|
28
|
+
* permissive as the one the repository is allowed to serve. It was a hard-coded `.max(100)`, which
|
|
29
|
+
* made it the LAST of five separate pagination ceilings to ignore the operation's declaration — and
|
|
30
|
+
* the one that turned a legitimately-served 120-row page into a 500 (`too_big` at
|
|
31
|
+
* `pagination.limit`) after the request and data-array bounds had already been fixed.
|
|
32
|
+
*
|
|
33
|
+
* The five, for anyone changing one of them: the REQUEST bound
|
|
34
|
+
* ({@link createPaginationRequestSchema}), the repository's `_doList` and `_doSearch` maxima, the
|
|
35
|
+
* response DATA array bound, and this. They are one invariant — "the operation's declared ceiling
|
|
36
|
+
* governs" — and a fix applied to fewer than all of them just moves which layer says no.
|
|
37
|
+
*/
|
|
38
|
+
export declare function createPaginationResponseMetadataSchema(maxLimit?: number): z.ZodObject<{
|
|
39
|
+
page: z.ZodDefault<z.ZodNumber>;
|
|
40
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
41
|
+
total: z.ZodNumber;
|
|
42
|
+
totalPages: z.ZodNumber;
|
|
43
|
+
}>;
|
|
44
|
+
/** The default-bounded response metadata. Prefer {@link createPaginationResponseMetadataSchema} where the ceiling is known. */
|
|
18
45
|
export declare const Resouces_PaginationResponseMetadataSchema: z.ZodObject<{
|
|
19
46
|
page: z.ZodDefault<z.ZodNumber>;
|
|
20
47
|
limit: z.ZodDefault<z.ZodNumber>;
|
|
21
48
|
total: z.ZodNumber;
|
|
22
49
|
totalPages: z.ZodNumber;
|
|
23
|
-
}, z.core.$strip
|
|
50
|
+
}, z.core.$strip>;
|
|
51
|
+
/**
|
|
52
|
+
* The pagination block a collection request may carry, bounded by the operation's declared ceiling.
|
|
53
|
+
*
|
|
54
|
+
* The bound used to be a hard-coded `.max(100)` on a single shared constant, which made it the
|
|
55
|
+
* STRICTEST of the three pagination ceilings in the framework — the repository serves up to the
|
|
56
|
+
* operation's declared limit and the response DTO accepts up to the same, but a request asking for
|
|
57
|
+
* more than 100 was rejected before either ran. An operation declaring 200 therefore advertised a
|
|
58
|
+
* limit it answered 400 to.
|
|
59
|
+
*
|
|
60
|
+
* `maxLimit` defaults to 100 so every existing caller keeps its current contract.
|
|
61
|
+
*/
|
|
62
|
+
export declare function createPaginationRequestSchema(maxLimit?: number): z.ZodObject<{
|
|
63
|
+
page: z.ZodDefault<z.ZodNumber>;
|
|
64
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
65
|
+
}>;
|
|
66
|
+
/** The default-bounded pagination block. Prefer {@link createPaginationRequestSchema} where the operation's ceiling is known. */
|
|
24
67
|
export declare const Resouces_PaginationRequestSchema: z.ZodObject<{
|
|
25
68
|
page: z.ZodDefault<z.ZodNumber>;
|
|
26
69
|
limit: z.ZodDefault<z.ZodNumber>;
|
|
27
|
-
}, z.core.$strip
|
|
70
|
+
}, z.core.$strip>;
|
|
28
71
|
export type ResourcePaginatedResponseResultSchema<T extends z.ZodTypeAny> = {
|
|
29
72
|
data: SchemaArrayInfer<T>;
|
|
30
73
|
pagination: z.infer<typeof Resouces_PaginationResponseMetadataSchema>;
|
|
@@ -36,12 +79,16 @@ export type Resources_PaginatedResult<T> = {
|
|
|
36
79
|
pagination: Resources_PaginationMetadata;
|
|
37
80
|
};
|
|
38
81
|
/**
|
|
82
|
+
* @wildo_source:part:start saas.models.data-mode-read-list facet:layer:shared facet:family:resource-config
|
|
83
|
+
*
|
|
39
84
|
* Data mode for read/list operations — controls API data shape.
|
|
40
85
|
* SUMMARY = backend returns only `isSummaryField()` fields and populates `isSummaryField({ populate: true })` FKs.
|
|
41
86
|
*
|
|
42
87
|
* Note: "summary" here is about *data shape*, not FK rendering (see ForeignKeyDisplayMode.SUMMARY)
|
|
43
88
|
* or operation bar density (see ResourceOperationDisplayMode.SUMMARY).
|
|
44
89
|
* Values are lowercase strings matching URL/serialization format directly.
|
|
90
|
+
*
|
|
91
|
+
* @remarks Import from `@wildo-ai/saas-models`. Used by read/list/search configs and DTO shaping.
|
|
45
92
|
*/
|
|
46
93
|
export declare enum DataMode {
|
|
47
94
|
/** All stored fields, no population */
|
|
@@ -52,20 +99,277 @@ export declare enum DataMode {
|
|
|
52
99
|
CONTEXT = "context"
|
|
53
100
|
}
|
|
54
101
|
/**
|
|
55
|
-
*
|
|
102
|
+
* Canonical persistence adapters supported by the resource system.
|
|
56
103
|
*
|
|
57
|
-
* Determines which
|
|
58
|
-
* - `mongodb`: MongoDB with Mongoose ORM
|
|
59
|
-
* - `postgresql`: PostgreSQL
|
|
104
|
+
* Determines which backing store serves a resource's rows:
|
|
105
|
+
* - `mongodb`: MongoDB with Mongoose ORM (platform-provisioned)
|
|
106
|
+
* - `postgresql`: PostgreSQL SQL adapter (platform-provisioned)
|
|
107
|
+
* - `http-api`: a system reached over an authenticated HTTP API (OData or REST/JSON dialect) —
|
|
108
|
+
* the platform provisions NOTHING for it; rows are queried on demand
|
|
60
109
|
*
|
|
61
110
|
* If not specified at resource level, uses `appConfig.database.defaultAdapter`.
|
|
111
|
+
*/
|
|
112
|
+
/**
|
|
113
|
+
* What an INTROSPECTION-backed resource projects.
|
|
114
|
+
*
|
|
115
|
+
* Declared BY THE AUTHOR beside the resource, exactly as `httpApiBinding` is, and for the same
|
|
116
|
+
* reason: the adapter answers "how rows are reached", and everything specific to THIS resource's
|
|
117
|
+
* reach is a typed declaration rather than runtime inference.
|
|
118
|
+
*
|
|
119
|
+
* Keeping it here rather than in a companion-side lookup table matters. A table keyed by resource
|
|
120
|
+
* type would be a second enumeration of a population the resource configs already define — the
|
|
121
|
+
* shape that silently drifts when one side gains an entry.
|
|
122
|
+
*/
|
|
123
|
+
export declare enum IntrospectionTenancyStance {
|
|
124
|
+
/**
|
|
125
|
+
* The rows describe the APPLICATION'S OWN STRUCTURE — its modules, resource specifications,
|
|
126
|
+
* design system, compliance declarations — and carry no tenant dimension, so there is nothing for
|
|
127
|
+
* a contextual scope predicate to filter on.
|
|
128
|
+
*
|
|
129
|
+
* This is the only stance implemented, and it is declared rather than inferred for the reason
|
|
130
|
+
* `HttpApiTenancyStance` gives for its own: an unstated stance is indistinguishable from an
|
|
131
|
+
* overlooked one. Every other repository enforces scoping ITSELF — Mongo and PostgreSQL through
|
|
132
|
+
* `buildContextualFilter`, HTTP_API through its tenancy stance — so a read-through adapter that
|
|
133
|
+
* simply returned whatever its source produced would be the one backing kind with no scoping
|
|
134
|
+
* story, and nobody would be asked to notice.
|
|
135
|
+
*/
|
|
136
|
+
APPLICATION_STRUCTURE = "application-structure",
|
|
137
|
+
/**
|
|
138
|
+
* The rows carry a tenant dimension and a scope predicate must be pushed into the source.
|
|
139
|
+
*
|
|
140
|
+
* REFUSED AT REGISTRATION today: no introspection behavior takes a scope argument, so the engine
|
|
141
|
+
* has nothing to push down. Declared as a member rather than omitted so the refusal is explicit
|
|
142
|
+
* and a future scoped behavior is a deliberate design step — the alternative is that the first
|
|
143
|
+
* author needing it discovers the gap by shipping unscoped rows.
|
|
144
|
+
*/
|
|
145
|
+
SCOPE_FILTER_PUSHDOWN = "scope-filter-pushdown"
|
|
146
|
+
}
|
|
147
|
+
export interface IntrospectionResourceBinding {
|
|
148
|
+
/**
|
|
149
|
+
* The companion introspection behavior whose output becomes this resource's rows.
|
|
150
|
+
*
|
|
151
|
+
* A plain string on purpose: the behavior catalog lives in the companion (23 behaviors as of
|
|
152
|
+
* 2026-08-29) and the engine must not depend on it. An unknown id is refused by the companion at
|
|
153
|
+
* read time, naming the id and the supported set.
|
|
154
|
+
*/
|
|
155
|
+
readonly behavior: string;
|
|
156
|
+
/**
|
|
157
|
+
* Path into the behavior's result that holds the rows, dot-separated. Omitted means the result
|
|
158
|
+
* itself is the row collection.
|
|
159
|
+
*
|
|
160
|
+
* Behaviors answer their own natural shape — `{ frontendChartRegistrationRefs: [...] }` — and
|
|
161
|
+
* teaching each one to answer a uniform envelope would change 23 working behaviors to suit a
|
|
162
|
+
* consumer that arrived later.
|
|
163
|
+
*/
|
|
164
|
+
readonly rowsPath?: string;
|
|
165
|
+
/**
|
|
166
|
+
* REQUIRED. Why these rows need no contextual scope predicate, or that they do.
|
|
167
|
+
*
|
|
168
|
+
* Not optional and not defaulted: a default would make "nobody thought about tenancy" and
|
|
169
|
+
* "tenancy does not apply here" the same declaration.
|
|
170
|
+
*/
|
|
171
|
+
readonly tenancy: IntrospectionTenancyStance;
|
|
172
|
+
/**
|
|
173
|
+
* Fields whose values COMPOSE each row's primary key, in order, when the behavior's rows carry no
|
|
174
|
+
* identifier of their own.
|
|
175
|
+
*
|
|
176
|
+
* Most introspection behaviors answer structural projections rather than records: a module row
|
|
177
|
+
* carries `moduleId` and needs nothing here, while a relationship row carries only the two
|
|
178
|
+
* resource types it joins. Without a key such a resource can be LISTed and never READ, because
|
|
179
|
+
* there is no value to address a row by.
|
|
180
|
+
*
|
|
181
|
+
* Composition is DECLARED rather than derived because only the author knows which fields are
|
|
182
|
+
* jointly unique for a given behavior — and being wrong is not hypothetical. `resourceType1` +
|
|
183
|
+
* `resourceType2` is unique across all 16 relationships in the dogfood application and is still
|
|
184
|
+
* unsafe in general, since the framework permits several edges between the same pair (a junction
|
|
185
|
+
* with two roles, a self-relationship). So the source FAILS LOUDLY when two rows compose the same
|
|
186
|
+
* key rather than serving both under one id, which would make READ return an arbitrary one of
|
|
187
|
+
* them and give no sign anything was wrong.
|
|
188
|
+
*
|
|
189
|
+
* The composed value is written to the resource's own `resourceFieldIdentifier`, which is the one
|
|
190
|
+
* key name resolvable from the registry without introspecting the schema's decorators. A resource
|
|
191
|
+
* declaring `identityFields` must therefore name that field as its primary key.
|
|
192
|
+
*
|
|
193
|
+
* The values are joined verbatim, so the key stays READABLE — `workspace__users__createdByUserId`
|
|
194
|
+
* rather than an opaque hash. That is possible because an INTROSPECTION-backed resource resolves
|
|
195
|
+
* to `ResourceIdFormat.INTROSPECTION_SYNTHESIZED`, which admits a URL-safe charset instead of the
|
|
196
|
+
* ObjectId-or-UUID rule platform rows follow.
|
|
197
|
+
*
|
|
198
|
+
* It was briefly a deterministic UUIDv5, before that format existed. Hashing worked and was the
|
|
199
|
+
* wrong trade: it made every id opaque, and it disguised the real property — a DERIVED id is only
|
|
200
|
+
* as stable as the fields it is derived from, and hiding that behind a hash removes the reader's
|
|
201
|
+
* ability to notice when a row's identity moves.
|
|
202
|
+
*
|
|
203
|
+
* Each value must be URL-safe (`[a-zA-Z0-9_-]`) and the whole key at most 255 characters; the
|
|
204
|
+
* source refuses per row rather than emitting a key that lists and cannot be read.
|
|
205
|
+
*
|
|
206
|
+
* Omit when the behavior's rows already carry an identifier of their own.
|
|
207
|
+
*/
|
|
208
|
+
readonly identityFields?: readonly string[];
|
|
209
|
+
}
|
|
210
|
+
export declare enum PersistenceAdapter {
|
|
211
|
+
MONGODB = "mongodb",
|
|
212
|
+
POSTGRESQL = "postgresql",
|
|
213
|
+
/**
|
|
214
|
+
* Rows are DERIVED on demand by asking the running dev companion to introspect the application —
|
|
215
|
+
* its resource registry, specifications, design system, compliance facts, assertions, market and
|
|
216
|
+
* persona context. Nothing is stored: every read recomputes.
|
|
217
|
+
*
|
|
218
|
+
* ## Why this is an adapter and not a service call
|
|
219
|
+
*
|
|
220
|
+
* The companion already computes all of it — 23 named introspection behaviors — and today each is
|
|
221
|
+
* reachable only through a bespoke route. Making it an adapter is what turns those behaviors into
|
|
222
|
+
* ordinary RESOURCES: list, read, filter, search, labels, navigation, all generated, with no
|
|
223
|
+
* per-behavior UI. That is the same argument `HTTP_API` settled on 2026-08-26 — the adapter answers
|
|
224
|
+
* "how rows are reached", and the mechanism behind it is a binding an author declares.
|
|
225
|
+
*
|
|
226
|
+
* Distinct from `HTTP_API`, deliberately, and not merely because the transport differs. Retrieval
|
|
227
|
+
* is a SUBPROCESS that imports the target application's built modules; it costs seconds rather than
|
|
228
|
+
* milliseconds, it requires that application's `dist` to exist, and its failure mode is a behavior
|
|
229
|
+
* throwing rather than a row being absent. Collapsing the two would give one declaration whose
|
|
230
|
+
* discriminator chooses between an HTTP call and a subprocess — two adapters wearing one name.
|
|
231
|
+
*
|
|
232
|
+
* ## What every adapter decision site must honor
|
|
233
|
+
*
|
|
234
|
+
* - **READ-ONLY, absolutely.** There is no writable target: a row is a projection of the
|
|
235
|
+
* application's own source. Every write method refuses, as `HTTP_API`'s twelve do.
|
|
236
|
+
* - **No provisioning, migration or schema surface.** Nothing is stored, so there is nothing to
|
|
237
|
+
* create, migrate or verify — the platform must never believe it owns a store here.
|
|
238
|
+
* - **Never a legal application-wide DEFAULT adapter.** It is a per-resource declaration only;
|
|
239
|
+
* an application whose default was introspection could persist nothing at all.
|
|
240
|
+
* - **It must DEGRADE, never fail closed at boot.** The companion is the only thing that can run
|
|
241
|
+
* an introspection behavior, so a boot path that refuses on an introspection failure would need
|
|
242
|
+
* the companion to fix the companion — see `continuity-drift-and-cas-basis.md` Rule 3.
|
|
243
|
+
*/
|
|
244
|
+
INTROSPECTION = "introspection",
|
|
245
|
+
/**
|
|
246
|
+
* Rows live in a system reached over an authenticated HTTP API and are queried on demand
|
|
247
|
+
* (read-through). Decided 2026-08-26 (ETL workstream, D1): this IS a persistence-adapter answer
|
|
248
|
+
* — "how rows are reached" — not a separate axis; the dialect (OData vs REST/JSON-RPC) and every
|
|
249
|
+
* other binding property live in the REQUIRED companion declaration
|
|
250
|
+
* (`HttpApiResourceBindingSchema`, published by `@wildo-ai/saas-models/external-data`).
|
|
251
|
+
*
|
|
252
|
+
* ## Why that companion lives in a SHARED package at all (asked 2026-08-29, measured not argued)
|
|
253
|
+
*
|
|
254
|
+
* Only the backend has a runtime for it — 19 references there, none in any frontend package — so
|
|
255
|
+
* "surely this is backend-only" is the natural reading. It is wrong, for one decisive reason: an
|
|
256
|
+
* application author writes the binding in `*.resources-config.ts`, which lives in the app's
|
|
257
|
+
* `shared-lib`, and that package depends on `@wildo-ai/saas-models` and deliberately NOT on
|
|
258
|
+
* `@wildo-ai/saas-backend-lib` (the frontend imports `shared-lib`, so a backend dependency there
|
|
259
|
+
* would pull the backend graph browser-ward — the opposite of the isolation wanted). Moving the
|
|
260
|
+
* declaration to the backend would leave an author unable to type their own declaration.
|
|
261
|
+
*
|
|
262
|
+
* Nothing in that companion is runtime: dialects, tenancy, erasure, key fields, remote-call
|
|
263
|
+
* semantics are all typed by a human. The runtime that consumes them — read client, extraction
|
|
264
|
+
* source, transform, run service, batch — is already backend-only. So the tiers are already
|
|
265
|
+
* split where they should be; what was owed was SURFACE hygiene, which is why the companion is
|
|
266
|
+
* published by a subpath instead of the root barrel rather than moved.
|
|
267
|
+
*
|
|
268
|
+
* This asymmetry with MONGODB / POSTGRESQL is therefore principled, not accidental: those need
|
|
269
|
+
* no AUTHORED companion at all (their detail is infra config plus a runtime planner), while
|
|
270
|
+
* HTTP_API is the one adapter whose detail an app developer writes.
|
|
271
|
+
*
|
|
272
|
+
* Consequences every adapter decision site must honor explicitly (compile-forced via
|
|
273
|
+
* `PersistenceAdapterCases`):
|
|
274
|
+
* - provisioning/migration/schema surfaces have NOTHING to do — the platform does not own the
|
|
275
|
+
* store and must never mutate its schema;
|
|
276
|
+
* - it is never a legal application-wide DEFAULT adapter — only a per-resource declaration
|
|
277
|
+
* accompanied by its binding;
|
|
278
|
+
* - until the external repository ships, `createRepository()` refuses it loudly.
|
|
279
|
+
*/
|
|
280
|
+
HTTP_API = "http-api"
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* String-value form accepted by authored resource configuration.
|
|
62
284
|
*
|
|
285
|
+
* This remains a string union so declarative configuration may use either the
|
|
286
|
+
* enum members or their serialized values, while deriving the vocabulary from
|
|
287
|
+
* the single canonical enum above.
|
|
63
288
|
*/
|
|
64
|
-
export type PersistenceAdapterType =
|
|
289
|
+
export type PersistenceAdapterType = `${PersistenceAdapter}`;
|
|
65
290
|
/**
|
|
66
|
-
*
|
|
291
|
+
* Runtime guard for persistence-adapter values entering through erased,
|
|
292
|
+
* serialized, or otherwise untyped configuration boundaries.
|
|
293
|
+
*
|
|
294
|
+
* Keeping this beside the canonical enum ensures future adapter additions are
|
|
295
|
+
* recognized by validation without duplicating a second vocabulary.
|
|
67
296
|
*/
|
|
68
|
-
export declare
|
|
297
|
+
export declare function isPersistenceAdapter(value: unknown): value is PersistenceAdapterType;
|
|
298
|
+
/**
|
|
299
|
+
* Default persistence adapter when not specified.
|
|
300
|
+
*
|
|
301
|
+
* Typed as the ENUM member (not the string-union `PersistenceAdapterType`) so it satisfies
|
|
302
|
+
* enum-typed configuration fields directly; enum member types are assignable to the string
|
|
303
|
+
* union, so every union-typed consumer is unaffected.
|
|
304
|
+
*/
|
|
305
|
+
export declare const DEFAULT_PERSISTENCE_ADAPTER: PersistenceAdapter;
|
|
306
|
+
/**
|
|
307
|
+
* A resource's declared relationship to CROSS-ADAPTER ATOMIC WRITE BOUNDARIES.
|
|
308
|
+
*
|
|
309
|
+
* **Why this exists.** An application is wholly one persistence adapter by default, and the
|
|
310
|
+
* resources registry REFUSES a per-resource `persistenceAdapter` that disagrees with
|
|
311
|
+
* `database.defaultAdapter`. That refusal protects exactly one property: a mixed application
|
|
312
|
+
* cannot commit two resources in one native transaction, so every cross-resource boundary
|
|
313
|
+
* silently degrades from atomic to at-least-once.
|
|
314
|
+
*
|
|
315
|
+
* The refusal is right as a DEFAULT and wrong as an absolute — some resources provably never
|
|
316
|
+
* participate in such a boundary, and for those the blanket refusal forbids a legitimate,
|
|
317
|
+
* safe deployment (a retrieval corpus whose vector tier only PostgreSQL can serve, say) with
|
|
318
|
+
* no way past it. Per `.claude/rules/design-philosophy.md`, a construct that refuses must ship
|
|
319
|
+
* the door in the same change: this enum IS that door. Declaring a member is a positive claim
|
|
320
|
+
* about the resource's write topology, made by its author, recorded in the config, and logged
|
|
321
|
+
* at registration — never an ambient tolerance and never a flag that merely silences an error.
|
|
322
|
+
*
|
|
323
|
+
* **This declaration is a claim, not an exemption.** It does not weaken any runtime guarantee:
|
|
324
|
+
* `ResourcePersistenceUnitOfWorkBackendService.assessCompatibility` still classifies any real
|
|
325
|
+
* boundary whose ATOMIC participants resolve to more than one adapter as
|
|
326
|
+
* `MIXED_PERSISTENCE_ADAPTERS`, and `executeInUnitOfWork` still THROWS on it. So a resource
|
|
327
|
+
* that declares a member here and then IS reached by a cross-adapter atomic boundary fails
|
|
328
|
+
* loudly at that boundary, exactly as it would have without the declaration. What the
|
|
329
|
+
* declaration buys is the right to boot; what it can never buy is a silent degradation.
|
|
330
|
+
*
|
|
331
|
+
* assurance-control: WILDO.DATA.TRANSACTIONAL_INTEGRITY — the declaration a resource must make
|
|
332
|
+
* before it may sit on a non-default persistence adapter.
|
|
333
|
+
*/
|
|
334
|
+
export declare enum ResourcePersistenceAdapterIsolation {
|
|
335
|
+
/**
|
|
336
|
+
* This resource participates in NO cross-adapter atomic write boundary.
|
|
337
|
+
*
|
|
338
|
+
* The author asserts that no operation commits this resource and a resource on another
|
|
339
|
+
* adapter inside one native transaction — neither as the subject of a
|
|
340
|
+
* `ResourcePersistenceUnitOfWork` boundary nor as a participant in someone else's.
|
|
341
|
+
*
|
|
342
|
+
* Legitimate when the resource is a self-contained store whose writes stand alone: a
|
|
343
|
+
* retrieval corpus, an append-only analytical sink, a projection rebuilt from its source
|
|
344
|
+
* rather than written beside it. It is NOT legitimate merely because no such boundary
|
|
345
|
+
* exists *today* — the claim is about the resource's design, and a later operation that
|
|
346
|
+
* makes it false must change the declaration rather than discover the refusal at runtime.
|
|
347
|
+
*/
|
|
348
|
+
NO_CROSS_ADAPTER_TRANSACTION = "NO_CROSS_ADAPTER_TRANSACTION"
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* String-value form accepted by authored resource configuration, mirroring the
|
|
352
|
+
* {@link PersistenceAdapterType} convention so declarative config may use either the enum
|
|
353
|
+
* member or its serialized value.
|
|
354
|
+
*
|
|
355
|
+
* **Deliberately one member.** A second — "participates only as a COMPENSATABLE participant",
|
|
356
|
+
* mirroring the persistence unit of work's own
|
|
357
|
+
* `ResourcePersistenceParticipantCoupling.COMPENSATABLE` — is describable, but no resource is
|
|
358
|
+
* asking for it, and an admission path with no caller is an admission path with no coverage.
|
|
359
|
+
* Add it when a real resource needs it, with the compensating path named at its call site.
|
|
360
|
+
*/
|
|
361
|
+
export type ResourcePersistenceAdapterIsolationType = `${ResourcePersistenceAdapterIsolation}`;
|
|
362
|
+
/**
|
|
363
|
+
* Runtime guard for isolation declarations entering through erased, serialized, or otherwise
|
|
364
|
+
* untyped configuration boundaries — which is exactly how the resources registry sees them, since
|
|
365
|
+
* it reads heterogeneous resource configurations through an erased index.
|
|
366
|
+
*
|
|
367
|
+
* Deliberately a MEMBERSHIP test rather than a presence test: the registry admits a non-default
|
|
368
|
+
* adapter only on a recognised member, so a typo, a stale value from an older vocabulary, or a
|
|
369
|
+
* truthy non-string cannot open the door. Fail-closed is the point — an unrecognised declaration
|
|
370
|
+
* is treated as no declaration at all, and the application is refused with the standard message.
|
|
371
|
+
*/
|
|
372
|
+
export declare function isResourcePersistenceAdapterIsolation(value: unknown): value is ResourcePersistenceAdapterIsolationType;
|
|
69
373
|
/**
|
|
70
374
|
* Variant key constants for operation variants.
|
|
71
375
|
* Values are identical to DataMode.SUMMARY and DataMode.CONTEXT.
|
|
@@ -111,6 +415,7 @@ export interface ListOperationOptions {
|
|
|
111
415
|
*/
|
|
112
416
|
pagination?: Resources_PaginationRequest;
|
|
113
417
|
}
|
|
418
|
+
/** @wildo_source:part:end saas.models.data-mode-read-list */
|
|
114
419
|
/**
|
|
115
420
|
* Configuration for auto-generated operation variants.
|
|
116
421
|
* Controls which READ/LIST variants (summary, context) are auto-generated.
|
|
@@ -136,61 +441,61 @@ export declare enum SortOrder {
|
|
|
136
441
|
export declare const Resouces_Filter_DateRangeSchema: z.ZodObject<{
|
|
137
442
|
startDate: z.ZodOptional<z.ZodDate>;
|
|
138
443
|
endDate: z.ZodOptional<z.ZodDate>;
|
|
139
|
-
}, z.core.$strip
|
|
444
|
+
}, z.core.$strip>;
|
|
140
445
|
export declare const Resouces_Filter_BaseSchema: z.ZodObject<{
|
|
141
446
|
searchRequest: z.ZodOptional<z.ZodString>;
|
|
142
447
|
createdAt: z.ZodOptional<z.ZodObject<{
|
|
143
448
|
startDate: z.ZodOptional<z.ZodDate>;
|
|
144
449
|
endDate: z.ZodOptional<z.ZodDate>;
|
|
145
|
-
}, z.core.$strip
|
|
450
|
+
}, z.core.$strip>>;
|
|
146
451
|
updatedAt: z.ZodOptional<z.ZodObject<{
|
|
147
452
|
startDate: z.ZodOptional<z.ZodDate>;
|
|
148
453
|
endDate: z.ZodOptional<z.ZodDate>;
|
|
149
|
-
}, z.core.$strip
|
|
150
|
-
}, z.core.$strip
|
|
454
|
+
}, z.core.$strip>>;
|
|
455
|
+
}, z.core.$strip>;
|
|
151
456
|
export declare const Resouces_FilterRequestSchema: z.ZodObject<{
|
|
152
457
|
searchRequest: z.ZodOptional<z.ZodString>;
|
|
153
458
|
createdAt: z.ZodOptional<z.ZodObject<{
|
|
154
459
|
startDate: z.ZodOptional<z.ZodDate>;
|
|
155
460
|
endDate: z.ZodOptional<z.ZodDate>;
|
|
156
|
-
}, z.core.$strip
|
|
461
|
+
}, z.core.$strip>>;
|
|
157
462
|
updatedAt: z.ZodOptional<z.ZodObject<{
|
|
158
463
|
startDate: z.ZodOptional<z.ZodDate>;
|
|
159
464
|
endDate: z.ZodOptional<z.ZodDate>;
|
|
160
|
-
}, z.core.$strip
|
|
161
|
-
}, z.core.$catchall<z.ZodOptional<z.ZodAny
|
|
465
|
+
}, z.core.$strip>>;
|
|
466
|
+
}, z.core.$catchall<z.ZodOptional<z.ZodAny>>>;
|
|
162
467
|
export declare const Resouces_SortingFieldSchema: z.ZodObject<{
|
|
163
468
|
field: z.ZodString;
|
|
164
469
|
order: z.ZodDefault<z.ZodEnum<typeof SortOrder>>;
|
|
165
470
|
priority: z.ZodDefault<z.ZodNumber>;
|
|
166
|
-
}, z.core.$strip
|
|
471
|
+
}, z.core.$strip>;
|
|
167
472
|
export declare const Resouces_SortingRequestSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodOptional<z.ZodObject<{
|
|
168
473
|
field: z.ZodString;
|
|
169
474
|
order: z.ZodDefault<z.ZodEnum<typeof SortOrder>>;
|
|
170
475
|
priority: z.ZodDefault<z.ZodNumber>;
|
|
171
|
-
}, z.core.$strip
|
|
476
|
+
}, z.core.$strip>>>>;
|
|
172
477
|
export declare const Resouces_SearchQueryRequestSchema: z.ZodObject<{
|
|
173
478
|
pagination: z.ZodOptional<z.ZodObject<{
|
|
174
479
|
page: z.ZodDefault<z.ZodNumber>;
|
|
175
480
|
limit: z.ZodDefault<z.ZodNumber>;
|
|
176
|
-
}, z.core.$strip
|
|
481
|
+
}, z.core.$strip>>;
|
|
177
482
|
sorting: z.ZodOptional<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodOptional<z.ZodObject<{
|
|
178
483
|
field: z.ZodString;
|
|
179
484
|
order: z.ZodDefault<z.ZodEnum<typeof SortOrder>>;
|
|
180
485
|
priority: z.ZodDefault<z.ZodNumber>;
|
|
181
|
-
}, z.core.$strip
|
|
486
|
+
}, z.core.$strip>>>>>;
|
|
182
487
|
filters: z.ZodOptional<z.ZodObject<{
|
|
183
488
|
searchRequest: z.ZodOptional<z.ZodString>;
|
|
184
489
|
createdAt: z.ZodOptional<z.ZodObject<{
|
|
185
490
|
startDate: z.ZodOptional<z.ZodDate>;
|
|
186
491
|
endDate: z.ZodOptional<z.ZodDate>;
|
|
187
|
-
}, z.core.$strip
|
|
492
|
+
}, z.core.$strip>>;
|
|
188
493
|
updatedAt: z.ZodOptional<z.ZodObject<{
|
|
189
494
|
startDate: z.ZodOptional<z.ZodDate>;
|
|
190
495
|
endDate: z.ZodOptional<z.ZodDate>;
|
|
191
|
-
}, z.core.$strip
|
|
192
|
-
}, z.core.$catchall<z.ZodOptional<z.ZodAny
|
|
193
|
-
}, z.core.$strip
|
|
496
|
+
}, z.core.$strip>>;
|
|
497
|
+
}, z.core.$catchall<z.ZodOptional<z.ZodAny>>>>;
|
|
498
|
+
}, z.core.$strip>;
|
|
194
499
|
export type ResourceSearchQueryRequestResult<TFilterFields extends Record<string, PrimitiveZodType | ((filterRef: PrimitiveZodType) => string)> | undefined, TSortFields extends readonly string[] | undefined> = z.ZodObject<{
|
|
195
500
|
pagination: z.ZodOptional<typeof Resouces_PaginationRequestSchema>;
|
|
196
501
|
sorting: z.ZodOptional<typeof Resouces_SortingRequestSchema>;
|
|
@@ -199,7 +504,16 @@ export type ResourceSearchQueryRequestResult<TFilterFields extends Record<string
|
|
|
199
504
|
export type Ressources_RequestSortPriority<T extends EnumLikeType> = {
|
|
200
505
|
[K in keyof T as T[K]]: number;
|
|
201
506
|
};
|
|
202
|
-
|
|
507
|
+
/**
|
|
508
|
+
* Distributive omit. `UserNotificationDefinition` is a discriminated union (by
|
|
509
|
+
* `channel`); a bare `Omit<Union, K>` collapses to only the COMMON keys and silently
|
|
510
|
+
* drops every channel-specific field (the EMAIL variant's `recipientEmailField`, the
|
|
511
|
+
* FRONT_END_SUCCESS variant's `celebration`/`nextStep`). Routing through a naked type
|
|
512
|
+
* parameter distributes the omit over each union member so those per-channel fields
|
|
513
|
+
* survive in the config-authoring type.
|
|
514
|
+
*/
|
|
515
|
+
type DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;
|
|
516
|
+
type UserNotificationDefinitionWithoutPrimaryScopeAndIdentifier = DistributiveOmit<UserNotificationDefinition, 'primaryScope' | 'identifier'>;
|
|
203
517
|
type M2MNotificationDefinitionWithoutIdentifier = Omit<M2MNotificationDefinition, 'identifier'>;
|
|
204
518
|
export type CollectionView_SearchOptions = {
|
|
205
519
|
caseSensitive?: boolean;
|
|
@@ -209,31 +523,332 @@ export type CollectionView_SearchOptions = {
|
|
|
209
523
|
* Shared collection-view fields for operations that render a collection of items (LIST, SEARCH).
|
|
210
524
|
* These fields are integrated directly into the variant builder type — not nested.
|
|
211
525
|
* The factory flattens them onto the final operation object.
|
|
526
|
+
*
|
|
527
|
+
* NOTE: cards-vs-table presentation (`displayMode` / `userSwitchableDisplayMode`)
|
|
528
|
+
* is intentionally NOT here. It is a pure FRONTEND concern with no backend meaning,
|
|
529
|
+
* so it is authored on the operation's `operationFrontendConfig.collectionDisplayConfig`
|
|
530
|
+
* in the resource UI behavior layer (`CollectionDisplayMode` in
|
|
531
|
+
* `@wildo-ai/saas-frontend-lib`). The fields that remain here are the ones the
|
|
532
|
+
* BACKEND also reads: `pageSize` (pagination), `filterFields` (filtering), and
|
|
533
|
+
* `sortFields` (sort validation).
|
|
534
|
+
*/
|
|
535
|
+
/**
|
|
536
|
+
* The wire format a collection export is rendered into.
|
|
537
|
+
*
|
|
538
|
+
* ## Why this is NOT `SubjectExportFormat`
|
|
539
|
+
*
|
|
540
|
+
* That enum has the same two members and answers a different question. Its `JSON` member is
|
|
541
|
+
* documented as "the format an Art. 20 request should receive by default", and its `CSV` member as
|
|
542
|
+
* "Never the default for portability" — statements about a data subject's PORTABILITY RIGHT. A
|
|
543
|
+
* listing export owes no such duty: it is an operator exporting rows they can already read, and CSV
|
|
544
|
+
* is a perfectly good default for it.
|
|
545
|
+
*
|
|
546
|
+
* In this codebase an enum member is where the per-member "why" lives (that is the whole reason an
|
|
547
|
+
* anonymous string union is refused), so sharing the enum would attach Art. 20 reasoning to a
|
|
548
|
+
* toolbar button, where every word of it is false. It breaks the other way too: adding `XLSX` for
|
|
549
|
+
* listings would land it in the subject-export vocabulary, where someone then has to reason about
|
|
550
|
+
* whether a spreadsheet satisfies Art. 20.
|
|
551
|
+
*
|
|
552
|
+
* What IS shared is the MECHANISM — RFC 4180 cell escaping and column resolution — which is format
|
|
553
|
+
* mechanics with no legal content. See `renderCollectionExportCsv`.
|
|
212
554
|
*/
|
|
555
|
+
export declare enum ResourceCollectionExportFormat {
|
|
556
|
+
/**
|
|
557
|
+
* Tabular, one file. Nested values are JSON-encoded into their cell and type information is lost,
|
|
558
|
+
* which is the accepted trade for a file every spreadsheet opens. The usual default for a listing.
|
|
559
|
+
*/
|
|
560
|
+
CSV = "csv",
|
|
561
|
+
/**
|
|
562
|
+
* The rows exactly as the listing's response DTO carries them — nested objects, arrays, nulls and
|
|
563
|
+
* types intact. Choose this when the export feeds another system rather than a human.
|
|
564
|
+
*/
|
|
565
|
+
JSON = "json"
|
|
566
|
+
}
|
|
567
|
+
/**
|
|
568
|
+
* WHICH rows a collection export contains.
|
|
569
|
+
*
|
|
570
|
+
* The axis is ROWS, deliberately — not columns. An export carries the same fields the listing's read
|
|
571
|
+
* DTO carries, which is already the caller's permitted projection; there is no separate
|
|
572
|
+
* "visible columns" notion to select from.
|
|
573
|
+
*/
|
|
574
|
+
export declare enum ResourceCollectionExportRowScope {
|
|
575
|
+
/**
|
|
576
|
+
* Exactly the rows the caller's request would have returned — same page, same filters, same sort.
|
|
577
|
+
* One service call, and what the user sees is what they get.
|
|
578
|
+
*/
|
|
579
|
+
VISIBLE_PAGE = "visible_page",
|
|
580
|
+
/**
|
|
581
|
+
* Every row the caller's filters match, with the page bound removed.
|
|
582
|
+
*
|
|
583
|
+
* Implemented by ITERATING pages at the operation's own declared ceiling, never by asking for one
|
|
584
|
+
* huge page: the page bound is enforced at eight independent sites (see `maxPageSize` below) and
|
|
585
|
+
* raising it for an export would move the effective ceiling for the whole operation.
|
|
586
|
+
*/
|
|
587
|
+
FULL_RESULT_SET = "full_result_set"
|
|
588
|
+
}
|
|
589
|
+
/**
|
|
590
|
+
* Opt a LIST/SEARCH operation into CSV/JSON export of its own result set.
|
|
591
|
+
*
|
|
592
|
+
* ## What declaring this does
|
|
593
|
+
*
|
|
594
|
+
* The factory derives a companion operation — one `GENERATED_COLLECTION_EXPORT` per exporting
|
|
595
|
+
* LIST/SEARCH operation — that runs **the same service call as the listing** and renders the result.
|
|
596
|
+
* That is the load-bearing property: tenant isolation, role ACL, contextual filters, retention
|
|
597
|
+
* row-hide, backend-only/secret field stripping, relationship population and sort validation all hold
|
|
598
|
+
* by construction rather than through a second implementation kept in step by hand. (`_doList` and
|
|
599
|
+
* `buildContextualFilter` each exist twice — once per persistence adapter — and have diverged before;
|
|
600
|
+
* an export with its own query would be a third place to get the tenant boundary right.)
|
|
601
|
+
*
|
|
602
|
+
* The derived operation copies the source operation's `roles` and CANNOT widen them: an export is
|
|
603
|
+
* exactly as reachable as the listing it exports, never more.
|
|
604
|
+
*
|
|
605
|
+
* ## What it deliberately does NOT inherit
|
|
606
|
+
*
|
|
607
|
+
* `mcp` / agent exposure. A LIST curated onto an MCP server is a PAGINATED read tool; an export tool
|
|
608
|
+
* returns the whole table in one call, which is a different risk. Inheriting the flag would widen an
|
|
609
|
+
* existing application's agent surface the moment it declared an export, so the derived operation is
|
|
610
|
+
* never agent-exposed and an app that wants one declares it deliberately.
|
|
611
|
+
*
|
|
612
|
+
* ## Ceilings
|
|
613
|
+
*
|
|
614
|
+
* `maximumExportedRows` is OPTIONAL and has NO default — an operation that declares none exports
|
|
615
|
+
* whatever its filters match. When declared and exceeded, the export FAILS with an error naming the
|
|
616
|
+
* matched count and the ceiling; it never truncates. A short file is indistinguishable from a
|
|
617
|
+
* complete one once it is open in a spreadsheet, and a silent partial export is the worse outcome.
|
|
618
|
+
*/
|
|
619
|
+
/**
|
|
620
|
+
* What a collection-export route answers with, described for specs and OpenAPI.
|
|
621
|
+
*
|
|
622
|
+
* ⚠️ The BODY is the exported FILE — a CSV or JSON byte stream, not this object. The controller owns
|
|
623
|
+
* the response for this operation family and streams it, so nothing ever serialises this schema.
|
|
624
|
+
* What it documents is the METADATA CONTRACT, which rides in response headers beside the bytes:
|
|
625
|
+
* `Content-Type`, `Content-Disposition` (carrying the filename) and `X-Wildo-Export-Row-Count`.
|
|
626
|
+
*
|
|
627
|
+
* Modelling the response as "a JSON envelope containing the file" was rejected: a large CSV inside a
|
|
628
|
+
* JSON string doubles the payload, defeats streaming, and gives the browser nothing to download.
|
|
629
|
+
*/
|
|
630
|
+
export declare const ResourceCollectionExportResponseSchema: z.ZodObject<{
|
|
631
|
+
filename: z.ZodString;
|
|
632
|
+
contentType: z.ZodString;
|
|
633
|
+
rowCount: z.ZodNumber;
|
|
634
|
+
}, z.core.$strip>;
|
|
635
|
+
export type ResourceCollectionExportConfig = {
|
|
636
|
+
/** Offered formats. Non-empty — an empty array is a startup error, never a silent "all". */
|
|
637
|
+
formats: readonly ResourceCollectionExportFormat[];
|
|
638
|
+
/** Offered row scopes. Non-empty, same rule. */
|
|
639
|
+
rowScopes: readonly ResourceCollectionExportRowScope[];
|
|
640
|
+
/**
|
|
641
|
+
* Refuse (do not truncate) a `FULL_RESULT_SET` export whose match count exceeds this.
|
|
642
|
+
* Omit for no ceiling.
|
|
643
|
+
*/
|
|
644
|
+
maximumExportedRows?: number;
|
|
645
|
+
};
|
|
213
646
|
export type CollectionViewFields_Shared = {
|
|
214
647
|
pageSize?: number;
|
|
215
|
-
displayMode?: 'list' | 'table' | 'cards';
|
|
216
648
|
filterFields?: Record<string, PrimitiveZodType | ((filterRef: PrimitiveZodType) => string)>;
|
|
217
649
|
sortFields?: readonly string[];
|
|
650
|
+
/**
|
|
651
|
+
* Opt this LIST/SEARCH operation into CSV/JSON export — see {@link ResourceCollectionExportConfig}.
|
|
652
|
+
* It belongs in this bucket because it is read by the BACKEND, like its three neighbours.
|
|
653
|
+
*/
|
|
654
|
+
collectionExport?: ResourceCollectionExportConfig;
|
|
218
655
|
};
|
|
219
656
|
/** LIST-specific collection-view fields (LIST and custom ops with resourceOperationLike: LIST) */
|
|
220
657
|
export type CollectionViewFields_List = CollectionViewFields_Shared & {
|
|
221
658
|
searchEnabled?: boolean;
|
|
222
659
|
filtersEnabled?: boolean;
|
|
660
|
+
/**
|
|
661
|
+
* Maximum page size this operation will accept, serve and return.
|
|
662
|
+
*
|
|
663
|
+
* ## Read this before changing any pagination bound
|
|
664
|
+
*
|
|
665
|
+
* ONE declaration, enforced at EIGHT independent sites. That is not an accident of style — each
|
|
666
|
+
* layer validates the page from its own side, and a bound tightened at any one of them silently
|
|
667
|
+
* becomes the effective ceiling for the whole operation. Getting fewer than all eight to agree
|
|
668
|
+
* does not fail loudly; it just moves which layer says no:
|
|
669
|
+
*
|
|
670
|
+
* | # | Where | What it bounds |
|
|
671
|
+
* |---|---|---|
|
|
672
|
+
* | 1 | `createPaginationRequestSchema` | the `pagination.limit` a caller may ASK for (400 if exceeded) |
|
|
673
|
+
* | 2 | Mongo `_doList` | the rows the query is allowed to fetch |
|
|
674
|
+
* | 3 | PostgreSQL `_doList` | same, and it must MATCH #2 — the adapters diverged here once |
|
|
675
|
+
* | 4 | Mongo/PostgreSQL `_doSearch` | same for the SEARCH verb |
|
|
676
|
+
* | 5 | response DTO `data` array `.max()` | the rows the response schema will serialise (500 if exceeded) |
|
|
677
|
+
* | 6 | `createPaginationResponseMetadataSchema` | the `limit` VALUE echoed in the envelope (500 if exceeded) |
|
|
678
|
+
* | 7 | `internalDto` pagination wrappers (default + SUMMARY + CONTEXT variants) | SERVICE-layer validation, *after* the page is built |
|
|
679
|
+
* | 8 | `wrapInPaginationStructure` (dataMode SUMMARY/CONTEXT) | the dataMode-selected response shape |
|
|
680
|
+
*
|
|
681
|
+
* ⚠️ Sites 7 and 8 are the ones that hide. They validate the SERVICE result, so they only speak
|
|
682
|
+
* once the request has been accepted and the repository has already produced the page — a bound
|
|
683
|
+
* left stale there surfaces as `service_resource_transformation_failed`, not as a validation
|
|
684
|
+
* error, and only for collections large enough to reach it.
|
|
685
|
+
*
|
|
686
|
+
* ## The default is 100, and it is load-bearing
|
|
687
|
+
*
|
|
688
|
+
* An operation that declares nothing gets **100**, because that is the value the Mongo `_doList`
|
|
689
|
+
* hard-coded before these sites were unified. Defaulting to 50 (SEARCH's own default) was tried
|
|
690
|
+
* and reverted: it silently HALVED every caller asking for more — billing usage-metering
|
|
691
|
+
* (`limit: 10000`), the sidebar resource browser, the flows-actors controller and the audit
|
|
692
|
+
* export, none of which declare a ceiling and none of which would have errored. Symmetry with
|
|
693
|
+
* SEARCH is not worth a silent truncation.
|
|
694
|
+
*
|
|
695
|
+
* DECLARE a value when a caller depends on it, even if it equals the default — `auditLogs | LIST`
|
|
696
|
+
* does exactly that, because its export path breaks quietly if the default ever moves.
|
|
697
|
+
*
|
|
698
|
+
* The operation declaration is the sole pagination authority. The resolved default operation and
|
|
699
|
+
* every auto-generated LIST representation inherit the same effective ceiling, so request,
|
|
700
|
+
* repository, response and API-reference contracts cannot diverge by data mode.
|
|
701
|
+
*/
|
|
702
|
+
maxPaginatedResultPerPageLimit?: number;
|
|
703
|
+
};
|
|
704
|
+
/**
|
|
705
|
+
* @wildo_source:part:start saas.models.resource-config.searchable-relation facet:layer:shared facet:family:resource-config
|
|
706
|
+
*
|
|
707
|
+
* Relational search descriptor — lets a SEARCH operation match rows of THIS
|
|
708
|
+
* resource by searching a RELATED ("juncted") resource's own searchable fields,
|
|
709
|
+
* WITHOUT denormalizing those fields onto this resource. Author it inline inside
|
|
710
|
+
* a SEARCH operation's `searchableFields` array, alongside plain own-field names.
|
|
711
|
+
*
|
|
712
|
+
* WHY IT EXISTS — some human-meaningful search keys live on a related resource
|
|
713
|
+
* and are MUTABLE there (e.g. a user's first/last name on a user-profile
|
|
714
|
+
* resource). Copying such a field onto this row would go stale and demand a
|
|
715
|
+
* change-propagation sync on every mutation path of the owning resource. This
|
|
716
|
+
* descriptor reuses the related resource's OWN searchable surface at query time
|
|
717
|
+
* instead — single source of truth, never stale, no sync hooks to maintain.
|
|
718
|
+
*
|
|
719
|
+
* HOW IT WORKS (tenant-safe by construction) — at search time the framework runs
|
|
720
|
+
* a secondary, system-level match on {@link relatedResource} using {@link fields}
|
|
721
|
+
* (defaulting to that resource's own string `searchableFields`), collects the
|
|
722
|
+
* matching rows' {@link relatedJoinField} values, and adds "this resource's
|
|
723
|
+
* {@link localField} is one of those values" as an extra match branch, OR-ed
|
|
724
|
+
* with the own-field matches. The primary query stays scoped (e.g. by
|
|
725
|
+
* organization) via the normal contextual filter, so the secondary match's own
|
|
726
|
+
* (often global) scope is irrelevant to safety: a row outside the caller's scope
|
|
727
|
+
* can never enter the already-scoped primary result set. Because the join
|
|
728
|
+
* collapses to a single-collection lookup, pagination and totals are unchanged.
|
|
729
|
+
*
|
|
730
|
+
* FAIL-SAFE — a relational entry only ever ADDS matches within the already-scoped
|
|
731
|
+
* set, so if the related resource cannot be resolved the entry contributes
|
|
732
|
+
* nothing (the search under-matches; it can never widen visibility).
|
|
733
|
+
*
|
|
734
|
+
* @remarks Import from `@wildo-ai/saas-models`. Supported on MongoDB-backed
|
|
735
|
+
* resources today; on a PostgreSQL-backed resource the relational entries are
|
|
736
|
+
* skipped and only the own-field entries apply (own-field search is unaffected).
|
|
737
|
+
*
|
|
738
|
+
* @example
|
|
739
|
+
* // Search org members by the linked user's name. The user's firstName/lastName
|
|
740
|
+
* // live on a separate USER_PROFILES resource (mutable) and are deliberately NOT
|
|
741
|
+
* // copied onto the member row; both members and profiles carry the same `userId`,
|
|
742
|
+
* // so we join on it and reuse the profile's own searchableFields.
|
|
743
|
+
* searchableFields: [
|
|
744
|
+
* 'userEmail',
|
|
745
|
+
* { localField: 'userId', relatedResource: CoreResourceType.USER_PROFILES,
|
|
746
|
+
* relatedJoinField: 'userId', fields: ['firstName', 'lastName'] },
|
|
747
|
+
* ]
|
|
748
|
+
*/
|
|
749
|
+
export type SearchableRelationDescriptor = {
|
|
750
|
+
/** Field on THIS resource matched against the resolved related ids (e.g. `userId`). */
|
|
751
|
+
localField: string;
|
|
752
|
+
/** The related resource whose own searchable surface is reused (e.g. `USER_PROFILES`). */
|
|
753
|
+
relatedResource: ResourceType;
|
|
754
|
+
/**
|
|
755
|
+
* Field on the related resource whose values are matched against
|
|
756
|
+
* {@link localField}'s values. Defaults to the related primary key (`_id`) —
|
|
757
|
+
* set it explicitly when joining on a shared key other than the primary key
|
|
758
|
+
* (e.g. members and profiles both carry `userId`).
|
|
759
|
+
*/
|
|
760
|
+
relatedJoinField?: string;
|
|
761
|
+
/**
|
|
762
|
+
* Which related fields to match the search term against. Defaults to the
|
|
763
|
+
* related resource's OWN (string) `searchableFields` — i.e. literally "use the
|
|
764
|
+
* juncted element's own search". Provide an explicit list only to narrow it.
|
|
765
|
+
*/
|
|
766
|
+
fields?: string[];
|
|
223
767
|
};
|
|
768
|
+
/**
|
|
769
|
+
* A SEARCH `searchableFields` entry: either an OWN-resource field name (string),
|
|
770
|
+
* matched on this collection, or a {@link SearchableRelationDescriptor} that
|
|
771
|
+
* matches via a related resource. The two forms coexist in one array and are
|
|
772
|
+
* OR-ed together at query time.
|
|
773
|
+
*/
|
|
774
|
+
export type SearchableFieldDescriptor = string | SearchableRelationDescriptor;
|
|
775
|
+
/** Runtime guard distinguishing a relational descriptor from an own-field name. */
|
|
776
|
+
export declare function isSearchableRelationDescriptor(field: SearchableFieldDescriptor): field is SearchableRelationDescriptor;
|
|
777
|
+
/** @wildo_source:part:end saas.models.resource-config.searchable-relation */
|
|
224
778
|
/** SEARCH-specific collection-view fields (SEARCH and custom ops with resourceOperationLike: SEARCH) */
|
|
225
779
|
export type CollectionViewFields_Search = CollectionViewFields_Shared & {
|
|
226
780
|
isSearchable?: boolean;
|
|
227
|
-
|
|
781
|
+
/**
|
|
782
|
+
* Fields this SEARCH matches against. Each entry is either an own-collection
|
|
783
|
+
* field name or a {@link SearchableRelationDescriptor} that reaches into a
|
|
784
|
+
* related resource (see that type for the tenant-safety contract). Own-field
|
|
785
|
+
* and relational entries OR together.
|
|
786
|
+
*/
|
|
787
|
+
searchableFields?: SearchableFieldDescriptor[];
|
|
228
788
|
searchableOptions?: CollectionView_SearchOptions;
|
|
789
|
+
/** SEARCH's page ceiling. Same eight-site contract as the LIST field — see its JSDoc above. */
|
|
229
790
|
maxPaginatedResultPerPageLimit?: number;
|
|
230
791
|
};
|
|
792
|
+
/**
|
|
793
|
+
* The wire selector every bulk operation carries.
|
|
794
|
+
*
|
|
795
|
+
* The DTO builder wraps EVERY `isBulkOperation` request DTO in this shape
|
|
796
|
+
* (`buildEnhancedRequestDto`), so `_ids` is the ONE field name a client may use to name the rows a
|
|
797
|
+
* bulk operation targets. It is a SELECTOR, not data: it never reaches persistence.
|
|
798
|
+
*
|
|
799
|
+
* The leading underscore is deliberate and load-bearing — it keeps the selector out of the resource's
|
|
800
|
+
* own field namespace, so a resource that legitimately owns a field called `ids` cannot collide with
|
|
801
|
+
* it. Read it through {@link BULK_OPERATION_SELECTOR_FIELD} rather than spelling the string, and
|
|
802
|
+
* resolve it through {@link readBulkOperationSelectorIds}: a producer that spells it `ids` type-checks,
|
|
803
|
+
* validates away to nothing, and then fails as "`_ids` is required" — which is exactly what every
|
|
804
|
+
* frontend bulk surface did until 2026-08-29.
|
|
805
|
+
*/
|
|
231
806
|
export declare const Resouces_BulkOperationBaseSchema: z.ZodObject<{
|
|
232
807
|
_ids: z.ZodArray<z.ZodString>;
|
|
233
|
-
}, z.core.$strip
|
|
808
|
+
}, z.core.$strip>;
|
|
809
|
+
/**
|
|
810
|
+
* The single named source for the bulk selector's field name.
|
|
811
|
+
*
|
|
812
|
+
* Every producer (frontend request builders) and every consumer (the service-tier target resolution,
|
|
813
|
+
* the generated relationship-bulk selector) reads the name from here, so the two halves of the wire
|
|
814
|
+
* contract cannot drift apart silently.
|
|
815
|
+
*/
|
|
816
|
+
export declare const BULK_OPERATION_SELECTOR_FIELD: "_ids";
|
|
817
|
+
/**
|
|
818
|
+
* Read the bulk selector out of a request payload, or `undefined` when it carries none.
|
|
819
|
+
*
|
|
820
|
+
* Deliberately tolerant of an unparsed body: this runs at the service tier, which is reached both by
|
|
821
|
+
* the HTTP controller (where the request DTO has already validated the shape) and by MCP / batch /
|
|
822
|
+
* programmatic callers (where it has not). Anything that is not a non-empty array of non-empty
|
|
823
|
+
* strings yields `undefined`, so the caller's own missing-target refusal reports the failure rather
|
|
824
|
+
* than a half-resolved selector reaching persistence.
|
|
825
|
+
*/
|
|
826
|
+
export declare function readBulkOperationSelectorIds(payload: unknown): string[] | undefined;
|
|
827
|
+
/**
|
|
828
|
+
* Strip the bulk selector from a request payload.
|
|
829
|
+
*
|
|
830
|
+
* `_ids` is NOT in `createOrUpdateMandatoryDiscardFields`, so without this it rides the payload all
|
|
831
|
+
* the way to the repository and is silently dropped there by the strict re-parse against the main
|
|
832
|
+
* schema. Removing it at the point the target is resolved keeps "who targets" and "what is written"
|
|
833
|
+
* separate, which is what lets the read-only-field guard reason about the payload honestly.
|
|
834
|
+
*/
|
|
835
|
+
export declare function stripBulkOperationSelector<T>(payload: T): T;
|
|
234
836
|
export type ResourceConfiguration_OperationVariant_CustomImplementation_FunctionParameters<TMainSchema extends z.ZodTypeAny = z.ZodAny> = {
|
|
235
837
|
inputDto: MainSchemaInfer<TMainSchema>;
|
|
236
838
|
currentObject: MainSchemaInfer<TMainSchema>;
|
|
839
|
+
/**
|
|
840
|
+
* The row as it stood BEFORE the write (the pre-image), when the framework captured one.
|
|
841
|
+
*
|
|
842
|
+
* Present only for a SINGLE-row UPDATE/DELETE (the framework fetches a pre-image only when
|
|
843
|
+
* exactly one id is selected); `undefined` for CREATE (nothing existed) and for bulk writes.
|
|
844
|
+
* It lets a consumer reason about what CHANGED rather than only the final state. Its wired
|
|
845
|
+
* consumer today is the derived-badge recompute, which re-counts the scope a mutation moved a
|
|
846
|
+
* row OUT of (not just the one it moved it into) — see `dispatchDerivedBadgeRecomputes`. Other
|
|
847
|
+
* consumers (e.g. a `userIdsSelector` notifying the PRIOR assignee a task was taken from them)
|
|
848
|
+
* would need the notification dispatcher to forward it into the selector call first; it is not
|
|
849
|
+
* plumbed there yet. Never assume it is populated; branch on its presence.
|
|
850
|
+
*/
|
|
851
|
+
previousObject?: MainSchemaInfer<TMainSchema>;
|
|
237
852
|
objectContext: any;
|
|
238
853
|
initiatorUserContext?: any;
|
|
239
854
|
initiatorIds?: {
|
|
@@ -297,9 +912,120 @@ export type RequiredFeaturesNormalized = RequiredFeaturesFullConfig;
|
|
|
297
912
|
* Stores both the function and metadata about its context needs.
|
|
298
913
|
*/
|
|
299
914
|
export type ResourceConfiguration_FunctionWithContextNeeds<TFunction extends (...args: any[]) => any> = TFunction & ResourceConfiguration_FunctionContextNeeds;
|
|
915
|
+
export declare enum ResourceGeneratedOperationKind {
|
|
916
|
+
GENERATED_FILE_REGENERATE = "generated_file_regenerate",
|
|
917
|
+
/** The CSV/JSON export companion of a LIST/SEARCH operation — see {@link ResourceCollectionExportConfig}. */
|
|
918
|
+
GENERATED_COLLECTION_EXPORT = "generated_collection_export"
|
|
919
|
+
}
|
|
920
|
+
export type ResourceConfiguration_GeneratedFileRegenerateOperationMetadata = {
|
|
921
|
+
kind: ResourceGeneratedOperationKind.GENERATED_FILE_REGENERATE;
|
|
922
|
+
fieldName: string;
|
|
923
|
+
};
|
|
924
|
+
/**
|
|
925
|
+
* Identifies an operation as the export companion of one LIST/SEARCH operation, and carries the
|
|
926
|
+
* export contract the handler and the frontend both read.
|
|
927
|
+
*
|
|
928
|
+
* `sourceOperationIdentifier` is what makes the export re-runnable AS the listing: the handler
|
|
929
|
+
* resolves that operation and dispatches it, rather than re-deriving a query.
|
|
930
|
+
*/
|
|
931
|
+
export type ResourceConfiguration_GeneratedCollectionExportOperationMetadata = {
|
|
932
|
+
kind: ResourceGeneratedOperationKind.GENERATED_COLLECTION_EXPORT;
|
|
933
|
+
/** The LIST/SEARCH operation whose result set this exports. */
|
|
934
|
+
sourceOperationIdentifier: string;
|
|
935
|
+
/** Which core verb the source is, so the handler knows which service call to make. */
|
|
936
|
+
sourceCoreOperation: CoreResourceOperation.LIST | CoreResourceOperation.SEARCH;
|
|
937
|
+
export: ResourceCollectionExportConfig;
|
|
938
|
+
};
|
|
939
|
+
export type ResourceConfiguration_GeneratedOperationMetadata = ResourceConfiguration_GeneratedFileRegenerateOperationMetadata | ResourceConfiguration_GeneratedCollectionExportOperationMetadata;
|
|
940
|
+
/**
|
|
941
|
+
* Authored acknowledgement that an operation variant is DECLARED but knowingly NOT IMPLEMENTED.
|
|
942
|
+
*
|
|
943
|
+
* ## Why this exists
|
|
944
|
+
*
|
|
945
|
+
* A custom operation whose `requestDto` no implementation consumes does not fail — it falls
|
|
946
|
+
* through to the generic core path, which persists only fields the resource schema declares.
|
|
947
|
+
* A DTO such as `{ newRole, reason }` names none, so the framework validates the body, writes
|
|
948
|
+
* nothing, and answers **HTTP 200**. On 2026-08-01 a hostile e2e probe caught
|
|
949
|
+
* `organizationMembers | promote` doing exactly that, and a catalogue sweep found the shape in
|
|
950
|
+
* 41 routed operations — 8 CRITICAL, 11 HIGH, including `users | impersonate`,
|
|
951
|
+
* `organizations | suspend` and `applications | transfer`. A "successful" demotion that never
|
|
952
|
+
* happened is an operational-safety and audit-integrity defect: every runbook, script, and UI
|
|
953
|
+
* that trusts the 2xx is wrong.
|
|
954
|
+
*
|
|
955
|
+
* ## What it does
|
|
956
|
+
*
|
|
957
|
+
* Presence is a fail-closed declaration with TWO effects, never one without the other:
|
|
958
|
+
*
|
|
959
|
+
* 1. **Startup is allowed to proceed.** Without it, an unserviceable operation is a startup
|
|
960
|
+
* ERROR (`ApplicationStartupConfigValidatorService`), so a new one cannot ship silently.
|
|
961
|
+
* 2. **The request fails closed.** The dispatcher refuses the operation before any persistence
|
|
962
|
+
* with `ErrorType.CONFIGURATION` /
|
|
963
|
+
* `ErrorCustomMessageReference.RESOURCE_OPERATION_CUSTOM_IMPLEMENTATION_NOT_IMPLEMENTED`.
|
|
964
|
+
* Acknowledging a gap must never preserve the 2xx — that would document the defect instead
|
|
965
|
+
* of closing it.
|
|
966
|
+
*
|
|
967
|
+
* The guard is BIDIRECTIONAL: an acknowledgement on an operation that IS serviceable is also a
|
|
968
|
+
* startup error, so a stale marker can never brick an operation someone has since implemented.
|
|
969
|
+
*
|
|
970
|
+
* ## This is a stop-gap, not a resting place
|
|
971
|
+
*
|
|
972
|
+
* The right end states are to implement the operation (see the organization-units
|
|
973
|
+
* MOVE/ARCHIVE pattern — a `prefixCoreOperations` hook returning the field patch the core
|
|
974
|
+
* write persists) or to remove the declaration. Reach for this only to keep a known gap
|
|
975
|
+
* honest while it is scheduled.
|
|
976
|
+
*
|
|
977
|
+
* assurance-control: WILDO.OPERATIONS.EXECUTION_INTEGRITY — an interface must not report success for an
|
|
978
|
+
* action it did not perform; monitoring and incident response depend on the response being
|
|
979
|
+
* truthful.
|
|
980
|
+
*/
|
|
981
|
+
export type ResourceOperation_UnimplementedAcknowledgement = {
|
|
982
|
+
/** Why the operation is declared without an implementation, in the author's own words. */
|
|
983
|
+
reason: string;
|
|
984
|
+
/** Where the gap is tracked — a plan path, issue id, or equivalent durable reference. */
|
|
985
|
+
trackingRef: string;
|
|
986
|
+
};
|
|
987
|
+
/**
|
|
988
|
+
* Where the engine's own inherited implementation gaps are tracked — the 2026-08-01 catalogue
|
|
989
|
+
* sweep that found 41 routed operations answering a success status having performed nothing.
|
|
990
|
+
* One authority so the backlog cannot fragment across 37 hand-typed strings.
|
|
991
|
+
*/
|
|
992
|
+
export declare const UNIMPLEMENTED_ENGINE_OPERATION_BACKLOG_REF = ".claude/plans/routed-unimplemented-operations-fail-closed.md";
|
|
993
|
+
/**
|
|
994
|
+
* Acknowledge an engine operation as a known, fail-closed implementation gap.
|
|
995
|
+
*
|
|
996
|
+
* Requires a SPECIFIC reason: "not implemented" is what the marker already says, so a reason
|
|
997
|
+
* that adds nothing is a reason not worth reading during triage. State what the operation was
|
|
998
|
+
* meant to do, so whoever picks it up knows the target behaviour without re-deriving it.
|
|
999
|
+
*
|
|
1000
|
+
* @see ResourceOperation_UnimplementedAcknowledgement for the two effects this has.
|
|
1001
|
+
*/
|
|
1002
|
+
export declare const acknowledgeUnimplementedEngineOperation: (reason: string) => ResourceOperation_UnimplementedAcknowledgement;
|
|
1003
|
+
/**
|
|
1004
|
+
* Declarative control over this variant's audit emission.
|
|
1005
|
+
*
|
|
1006
|
+
* **The baseline needs no declaration.** Every `HIGH` / `CRITICAL` variant emits
|
|
1007
|
+
* `RESOURCE_OPERATION_PERFORMED` automatically — `riskLevel` is already the framework's canonical
|
|
1008
|
+
* danger axis (it drives MCP destructive hints, frontend danger-zone placement and CRITICAL typed
|
|
1009
|
+
* confirmation), and a risk-driven floor is fail-closed by omission. A declarative-ONLY mechanism
|
|
1010
|
+
* was rejected for exactly that reason: it fails OPEN when an author forgets, which is how 20 event
|
|
1011
|
+
* types came to be declared in `CoreAuditableEventType` and wired to nothing.
|
|
1012
|
+
*
|
|
1013
|
+
* This declaration exists for the two cases the floor cannot express on its own.
|
|
1014
|
+
*/
|
|
1015
|
+
export type ResourceOperation_AuditableEvent = {
|
|
1016
|
+
/**
|
|
1017
|
+
* Emit for this variant even though its `riskLevel` is below the automatic floor.
|
|
1018
|
+
*
|
|
1019
|
+
* For a `MEDIUM` / `LOW` verb whose danger is not proportional to its blast radius — the risk
|
|
1020
|
+
* level answers "how alarming is the UI affordance", which is a related but not identical
|
|
1021
|
+
* question to "is this evidence an auditor needs".
|
|
1022
|
+
*/
|
|
1023
|
+
auditBelowRiskFloor?: boolean;
|
|
1024
|
+
};
|
|
300
1025
|
type ResourceConfiguration_OperationVariant_Base<TMainSchema extends z.ZodTypeAny = z.ZodAny> = {
|
|
301
1026
|
variantType: ResourceOperationVariantType;
|
|
302
1027
|
resourceOperationLike?: CoreResourceOperation;
|
|
1028
|
+
generatedOperation?: ResourceConfiguration_GeneratedOperationMetadata;
|
|
303
1029
|
/**
|
|
304
1030
|
* Feature gating for this operation variant.
|
|
305
1031
|
* Shorthand: `string[]` auto-normalized by factory to `{ features: [...], mode: 'OR' }`.
|
|
@@ -310,6 +1036,226 @@ type ResourceConfiguration_OperationVariant_Base<TMainSchema extends z.ZodTypeAn
|
|
|
310
1036
|
variantKey?: string;
|
|
311
1037
|
riskLevel: ResourceOperationRiskLevel;
|
|
312
1038
|
roles: Roles[];
|
|
1039
|
+
/**
|
|
1040
|
+
* Per-foreign-key policy for REFERENCE fields this variant writes — the TARGET-side counterpart of
|
|
1041
|
+
* `roles` above (which gates the CALLER).
|
|
1042
|
+
*
|
|
1043
|
+
* A relationship that declares `scopeMembership` already guarantees the baseline: the referenced row
|
|
1044
|
+
* must be linked to the writing row's scope through a junction (that is tenant isolation, and it
|
|
1045
|
+
* applies to every variant). This map TIGHTENS that baseline for THIS variant, keyed by foreign-key
|
|
1046
|
+
* field — require an `ACTIVE` membership, an `ORG_ADMIN` assignee, a typed partnership — or `false`
|
|
1047
|
+
* to disable it for one foreign key on one variant.
|
|
1048
|
+
*
|
|
1049
|
+
* Omit entirely (the common case): the relationship's baseline membership applies unchanged.
|
|
1050
|
+
*
|
|
1051
|
+
* @example an "assign reviewer" variant whose assignee must be an ACTIVE org admin
|
|
1052
|
+
* referenceConstraints: {
|
|
1053
|
+
* assignedToUserId: {
|
|
1054
|
+
* qualifyingStatuses: ['ACTIVE'],
|
|
1055
|
+
* requiredRoles: { scope: ResourcePrimaryScope.ORGANIZATIONS, roles: [CORE_ORG_ROLES.ORG_ADMIN] },
|
|
1056
|
+
* },
|
|
1057
|
+
* }
|
|
1058
|
+
*/
|
|
1059
|
+
referenceConstraints?: ReferenceConstraints;
|
|
1060
|
+
/**
|
|
1061
|
+
* Declares this variant a KNOWN, fail-closed implementation gap.
|
|
1062
|
+
* See {@link ResourceOperation_UnimplementedAcknowledgement} — presence both unblocks
|
|
1063
|
+
* startup and makes the request refuse, so an acknowledged operation never answers 2xx.
|
|
1064
|
+
*/
|
|
1065
|
+
unimplementedAcknowledgement?: ResourceOperation_UnimplementedAcknowledgement;
|
|
1066
|
+
/**
|
|
1067
|
+
* Declarative control over this variant's audit emission — see
|
|
1068
|
+
* {@link ResourceOperation_AuditableEvent}. Omit it: `HIGH` / `CRITICAL` variants are audited
|
|
1069
|
+
* automatically, and everything else is deliberately not.
|
|
1070
|
+
*/
|
|
1071
|
+
auditableEvent?: ResourceOperation_AuditableEvent;
|
|
1072
|
+
/**
|
|
1073
|
+
* Demand a FRESH proof of identity for this specific operation, regardless of how recently the
|
|
1074
|
+
* caller authenticated.
|
|
1075
|
+
*
|
|
1076
|
+
* The framework's baseline step-up is a per-USER-TYPE policy (`UserTypeAuthPolicy.stepUpAuth`):
|
|
1077
|
+
* opt-in, defaulting to `enabled: false`, and *freshness*-based — it challenges only once the
|
|
1078
|
+
* session's `lastAuthenticatedAt` is older than `maxAgeSeconds` (default 300). That is the right
|
|
1079
|
+
* shape for "this tenant wants periodic re-proof across the board", and the wrong shape for a
|
|
1080
|
+
* single irreversible action: a caller who signed in two minutes ago destroys the resource with
|
|
1081
|
+
* no credential proof at all, and an application that never configures `stepUpAuth` is never
|
|
1082
|
+
* challenged for anything.
|
|
1083
|
+
*
|
|
1084
|
+
* Setting this to `true` makes the challenge UNCONDITIONAL for this operation. The caller must
|
|
1085
|
+
* present a valid single-use `REAUTH` consumable token (minted by `POST /auth/reauth`, carried in
|
|
1086
|
+
* `X-Reauth-Token`); otherwise the request is refused with `STEP_UP_REQUIRED` (HTTP 403). The
|
|
1087
|
+
* frontend HTTP client already completes this loop — it catches the 403, runs the registered
|
|
1088
|
+
* step-up handler to obtain a token, and replays the request — so declaring the flag is the whole
|
|
1089
|
+
* integration.
|
|
1090
|
+
*
|
|
1091
|
+
* FAIL-CLOSED by design: an operation that declares this is challenged even when the user type
|
|
1092
|
+
* has NO `stepUpAuth` policy at all. Deriving the requirement from `riskLevel` was rejected —
|
|
1093
|
+
* `riskLevel` is a UI/observability signal (danger-zone placement, typed confirmation, MCP
|
|
1094
|
+
* destructive hints), read today by no authorization code, and silently promoting it to a security
|
|
1095
|
+
* control would change the behaviour of every existing `CRITICAL` operation at once.
|
|
1096
|
+
*
|
|
1097
|
+
* Applies only to principals whose identity can be re-proved: user requests that are not
|
|
1098
|
+
* sub-calls. Machine principals, internal calls and worker executions are exempt exactly as they
|
|
1099
|
+
* are for the baseline policy — there is no interactive credential to re-present.
|
|
1100
|
+
*
|
|
1101
|
+
* ⚠️ **Check who can actually satisfy it before declaring it.**
|
|
1102
|
+
* `AuthMethodManagementBackendService.reAuthenticate` proves identity by PASSWORD only today
|
|
1103
|
+
* (`AuthMethod.PASSKEY` is declared and explicitly refused as not yet supported), and it requires
|
|
1104
|
+
* a real `passwordHash` on the principal's credential row — a user-type policy that merely enables
|
|
1105
|
+
* `PASSWORD` is necessary but NOT sufficient.
|
|
1106
|
+
*
|
|
1107
|
+
* Two populations therefore cannot satisfy this gate:
|
|
1108
|
+
*
|
|
1109
|
+
* - a user type whose `authMethodsEnabled` excludes `PASSWORD` (SSO-only, passkey-only) — note
|
|
1110
|
+
* this is also reachable through a per-ORGANIZATION `authMethodsEnabled` override, so an
|
|
1111
|
+
* app-level policy is not the whole answer;
|
|
1112
|
+
* - **directory-managed (SCIM) users**, whose `passwordHash` AND passkeys the framework
|
|
1113
|
+
* DELIBERATELY DESTROYS as a compliance control
|
|
1114
|
+
* (`_reconcileLocalCredentialsForDirectoryManaged` — a local first factor would survive IdP
|
|
1115
|
+
* deprovisioning). Their TOTP is intentionally preserved, but re-auth cannot use it yet.
|
|
1116
|
+
*
|
|
1117
|
+
* For those principals the operation is permanently refused. That is fail-closed rather than
|
|
1118
|
+
* unsafe, and the refusal is diagnosable (the step-up round-trip ends in an explicit "No password
|
|
1119
|
+
* set for this account") — but it is a product decision, not a detail. Do not declare this flag on
|
|
1120
|
+
* an operation those populations are expected to perform until re-authentication covers a factor
|
|
1121
|
+
* they hold.
|
|
1122
|
+
*
|
|
1123
|
+
* This is also why the requirement is a per-operation flag rather than a hardcoded `password`
|
|
1124
|
+
* field in a request DTO: the proof is negotiated by the auth policy, not frozen into the resource
|
|
1125
|
+
* contract. A `{ password }` field cannot adapt to any of the above.
|
|
1126
|
+
*
|
|
1127
|
+
* assurance-control: WILDO.IDENTITY.STEP_UP_AUTHENTICATION — re-authentication before a high-impact action.
|
|
1128
|
+
*/
|
|
1129
|
+
/**
|
|
1130
|
+
* Admits an APPLICATION-scope platform super-administrator to a resource whose primary scope is a
|
|
1131
|
+
* PER-INSTANCE tenant scope (today: `ORGANIZATIONS`) without requiring membership of that tenant.
|
|
1132
|
+
*
|
|
1133
|
+
* ## Why this exists, and why it is per-variant rather than global
|
|
1134
|
+
*
|
|
1135
|
+
* `validateParentScopeAccess` authorizes an organization-scoped operation by finding an
|
|
1136
|
+
* organization-WIDE `initiatorRoles` entry whose `relatedResourceId` is the target organization. A
|
|
1137
|
+
* platform super-administrator holds an APPLICATION-scope entry and therefore matches nothing — so
|
|
1138
|
+
* they are denied on every org-scoped resource, INCLUDING the organization row itself. That is
|
|
1139
|
+
* normally exactly right: it is what makes tenant isolation hold against the most privileged
|
|
1140
|
+
* principal in the system, and it is pinned by
|
|
1141
|
+
* `cross-tenant-super-admin-reach.mongo.integration.test.ts`.
|
|
1142
|
+
*
|
|
1143
|
+
* It also means a tenant that loses its last owner cannot be repaired by anyone, which is the other
|
|
1144
|
+
* half of the administrative-continuity pattern: protect the tenant tier and
|
|
1145
|
+
* repair it only from a higher authorized tier. This flag is that higher-tier
|
|
1146
|
+
* exception and nothing else.
|
|
1147
|
+
*
|
|
1148
|
+
* **It is deliberately NOT a global super-admin bypass.** Adding one to the authorization layer
|
|
1149
|
+
* would grant cross-tenant reach to EVERY org-scoped operation whose gate a super-admin's role
|
|
1150
|
+
* chain satisfies — an enormous, silent widening of tenant isolation. Instead each variant opts in
|
|
1151
|
+
* explicitly, so the admitted surface is enumerable by grep and empty by default.
|
|
1152
|
+
*
|
|
1153
|
+
* ## Conditions, all required
|
|
1154
|
+
*
|
|
1155
|
+
* - The caller must hold `APP_ADMIN_SUPER_ADMIN` at **APPLICATION** scope. An organization-scoped
|
|
1156
|
+
* role string that merely spells the same name confers nothing: `getRoleHierarchy` partitions the
|
|
1157
|
+
* two role tables, and membership `roles` is free-form (`OrgRolesSchema` admits any string), so
|
|
1158
|
+
* without the scope qualifier a tenant admin could type their way into cross-tenant reach.
|
|
1159
|
+
* - The variant must declare this flag. Absent, behaviour is unchanged and the caller is denied.
|
|
1160
|
+
*
|
|
1161
|
+
* Declare it only on operations whose PURPOSE is cross-tenant administration, and expect each one
|
|
1162
|
+
* to justify itself: this is the seam a reviewer should look at first.
|
|
1163
|
+
*
|
|
1164
|
+
* assurance-control: WILDO.ACCESS.CROSS_TENANT_ADMINISTRATION — an explicitly enumerated,
|
|
1165
|
+
* platform-tier admission across a tenant boundary that is otherwise absolute.
|
|
1166
|
+
*/
|
|
1167
|
+
admitsCrossTenantPlatformAdministration?: boolean;
|
|
1168
|
+
/**
|
|
1169
|
+
* Admits this variant to address a USER other than the caller — the USER_SELF-scope sibling of
|
|
1170
|
+
* {@link admitsCrossTenantPlatformAdministration}, and it follows that flag's doctrine exactly:
|
|
1171
|
+
* per-variant, empty by default, enumerable by grep.
|
|
1172
|
+
*
|
|
1173
|
+
* ## Why it is needed
|
|
1174
|
+
*
|
|
1175
|
+
* `authorizeUserSelf` authorizes a USER_SELF-scoped operation by requiring the addressed row to BE
|
|
1176
|
+
* the caller. On `USERS` — whose `resourcePrimaryScope` IS `USER_SELF`, because the resource is a
|
|
1177
|
+
* self-anchor scope root — that made the entire administrative surface self-only: `assign_roles`,
|
|
1178
|
+
* `revoke_roles`, `suspend_user`, `unsuspend_user`, `force_password_reset`, the admin READ and the
|
|
1179
|
+
* core UPDATE/DELETE all refused `authorizations_access_denied` against another user, while the
|
|
1180
|
+
* specification documents every one of them as acting on "another user's record" and the admin UI
|
|
1181
|
+
* surfaces them as per-row actions.
|
|
1182
|
+
*
|
|
1183
|
+
* ## Why it is PER-VARIANT and not per-resource
|
|
1184
|
+
*
|
|
1185
|
+
* This is the whole reason a resource-level declaration cannot serve. Within `USERS` the two READ
|
|
1186
|
+
* variants need OPPOSITE answers:
|
|
1187
|
+
*
|
|
1188
|
+
* - the DEFAULT read is gated `APP_USER`. Admitting cross-subject addressing there would let ANY
|
|
1189
|
+
* authenticated user read ANY other user's row — `email`, `appRoles`, `status` — a privacy and
|
|
1190
|
+
* enumeration regression far worse than the bug being fixed.
|
|
1191
|
+
* - the `admin` read is gated `APP_ADMIN_VIEWER` and is precisely the surface that SHOULD address
|
|
1192
|
+
* others.
|
|
1193
|
+
*
|
|
1194
|
+
* One resource, one field identifier, two required answers. Only the variant can carry it.
|
|
1195
|
+
*
|
|
1196
|
+
* ## What still protects the surface
|
|
1197
|
+
*
|
|
1198
|
+
* This flag relaxes WHOSE row may be addressed. It does not touch WHO may call: the operation's
|
|
1199
|
+
* `roles` gate runs independently and unchanged, so an admitted variant is still reachable only by
|
|
1200
|
+
* the roles it declares. Role decides who; this decides whose. Declare it only where the
|
|
1201
|
+
* operation's PURPOSE is administering another person, and expect each one to justify itself.
|
|
1202
|
+
*
|
|
1203
|
+
* assurance-control: WILDO.ACCESS.LEAST_PRIVILEGE — an administrative action on another principal
|
|
1204
|
+
* is authorized by the caller's ROLE, never by caller and subject being the same person.
|
|
1205
|
+
*/
|
|
1206
|
+
admitsCrossSubjectUserAdministration?: boolean;
|
|
1207
|
+
requiresStepUpAuthentication?: boolean;
|
|
1208
|
+
/**
|
|
1209
|
+
* Default **frontend surface** for this operation when no app preset declares
|
|
1210
|
+
* one (see {@link ResourceOperationFrontendSurface}). Lets the framework mark
|
|
1211
|
+
* an operation headless-by-default (`API_ONLY`) — e.g. system/workflow/signup
|
|
1212
|
+
* -driven creates — so apps don't re-author `apiOnly()` per app. An app preset
|
|
1213
|
+
* that surfaces the operation (`addressable()`/`notAddressable()`/`apiOnly()`)
|
|
1214
|
+
* always wins; this is only the fallback. When unset, an unsurfaced operation
|
|
1215
|
+
* resolves to `API_ONLY` (the safe default — callable, no UI). Display-only:
|
|
1216
|
+
* never affects authorization.
|
|
1217
|
+
*/
|
|
1218
|
+
defaultFrontendPosture?: ResourceOperationFrontendSurface;
|
|
1219
|
+
/**
|
|
1220
|
+
* @wildo_source:part:start saas.models.resource-config.operation-mcp-exposure facet:layer:shared facet:family:resource-config
|
|
1221
|
+
*
|
|
1222
|
+
* MCP (Model Context Protocol) exposure for this operation. Set `exposed: true` to
|
|
1223
|
+
* surface the operation as an MCP tool that authenticated machine / agent callers can
|
|
1224
|
+
* discover (`tools/list`) and invoke (`tools/call`). Import path: `@wildo-ai/saas-models`
|
|
1225
|
+
* — this is a field on an operation variant inside a resource's `operations` config.
|
|
1226
|
+
*
|
|
1227
|
+
* Opt-in + FAIL-CLOSED: absent or `false` ⇒ the operation is NOT a tool. Only DEFAULT,
|
|
1228
|
+
* non-bulk, URL-bearing operations (the standard `API_CALL` create / read / list / search /
|
|
1229
|
+
* count / update / delete and URL-bearing custom ops) of ORGANIZATION- or APPLICATION-scoped
|
|
1230
|
+
* resources are eligible. A machine principal cannot reach USER_SELF resources, so setting
|
|
1231
|
+
* `exposed` on a USER_SELF operation has no machine-callable effect.
|
|
1232
|
+
*
|
|
1233
|
+
* `description` is the agent-facing tool description — the prose the calling agent reads to
|
|
1234
|
+
* decide when to use the tool. When omitted, the tool description falls back to the resource
|
|
1235
|
+
* specification's `purpose` / `whenToUse`, then to a synthesized default; keep an authored
|
|
1236
|
+
* `description` reconciled with the spec.
|
|
1237
|
+
*
|
|
1238
|
+
* Exposure is a DISCOVERY gate ONLY. Every `tools/call` still re-runs the operation's own
|
|
1239
|
+
* role authorization against the CALLER's roles before dispatch, so exposing an operation can
|
|
1240
|
+
* never widen who is allowed to perform it.
|
|
1241
|
+
*
|
|
1242
|
+
* `servers` selects WHICH named MCP server(s) carry this tool when the app declares more than one
|
|
1243
|
+
* (each server is a separate endpoint + audience, so a token for one is rejected at another). OMIT it
|
|
1244
|
+
* for the DEFAULT server — the plain `/mcp` endpoint every app has. When PRESENT it must name at least
|
|
1245
|
+
* one declared server: an EMPTY array is a startup error, not a silent fallback, so the field always
|
|
1246
|
+
* reads as "exactly these" (the same omitted-vs-present rule an A2A agent's `actorSystemRefs` follows).
|
|
1247
|
+
* Naming a server the app does not declare is likewise a startup error (fail-closed), so a typo can
|
|
1248
|
+
* never conjure a phantom surface.
|
|
1249
|
+
*
|
|
1250
|
+
* Membership is EXCLUSIVE: an operation naming a server LEAVES the default `/mcp` catalog rather than
|
|
1251
|
+
* appearing on both, so curation is always a deliberate move and never an accidental duplication.
|
|
1252
|
+
*/
|
|
1253
|
+
mcp?: {
|
|
1254
|
+
exposed?: boolean;
|
|
1255
|
+
description?: string;
|
|
1256
|
+
servers?: string[];
|
|
1257
|
+
};
|
|
1258
|
+
/** @wildo_source:part:end saas.models.resource-config.operation-mcp-exposure */
|
|
313
1259
|
requestDto?: z.ZodSchema<any>;
|
|
314
1260
|
/**
|
|
315
1261
|
* RepositoryDto for repository projection.
|
|
@@ -323,8 +1269,45 @@ type ResourceConfiguration_OperationVariant_Base<TMainSchema extends z.ZodTypeAn
|
|
|
323
1269
|
* Can optionally specify needsObjectContext/needsUserContext flags:
|
|
324
1270
|
* basicPrefixOperation.needsObjectContext = true
|
|
325
1271
|
* basicPrefixOperation.needsUserContext = true
|
|
1272
|
+
*
|
|
1273
|
+
* Returns a PATCH, not a replacement: the service MERGES the result onto the payload
|
|
1274
|
+
* (`coreInput = { ...coreInput, ...result }`) and whitelists the keys the hook ADDED into
|
|
1275
|
+
* `preserveServerInjectedFields`, so they survive the repository's strict re-parse. Naming
|
|
1276
|
+
* only the fields the verb changes is therefore both sufficient and safer than spreading the
|
|
1277
|
+
* current object — a spread makes every field a server-injected key, which re-writes
|
|
1278
|
+
* `.excludeFromUpdate()` fields such as an owning foreign key on every call.
|
|
326
1279
|
*/
|
|
327
|
-
basicPrefixOperation?: ResourceConfiguration_FunctionWithContextNeeds<(params: ResourceConfiguration_OperationVariant_CustomImplementation_FunctionParameters<TMainSchema>) => MainSchemaInfer<TMainSchema
|
|
1280
|
+
basicPrefixOperation?: ResourceConfiguration_FunctionWithContextNeeds<(params: ResourceConfiguration_OperationVariant_CustomImplementation_FunctionParameters<TMainSchema>) => Partial<MainSchemaInfer<TMainSchema>>>;
|
|
1281
|
+
/**
|
|
1282
|
+
* Fields whose value this operation's {@link basicPrefixOperation} OWNS.
|
|
1283
|
+
*
|
|
1284
|
+
* Declare a field here when the hook must set it EVEN IF the caller also supplied it. The
|
|
1285
|
+
* "keys the hook ADDED" inference described above is derived from a snapshot of the payload
|
|
1286
|
+
* taken at the SERVICE tier, after a LOOSE parse (`z.looseObject`) that passes unknown keys
|
|
1287
|
+
* through. A caller that reaches that tier with the field already present — MCP `callTool`
|
|
1288
|
+
* forwards its arguments with no strict parse — puts the key into the snapshot, so the hook's
|
|
1289
|
+
* own value stops being treated as injected, the repository's strict re-parse drops it, and the
|
|
1290
|
+
* operation answers success having written nothing.
|
|
1291
|
+
*
|
|
1292
|
+
* Declaring the field makes the ownership explicit: it is always preserved, always with the
|
|
1293
|
+
* POST-hook value, so a caller-supplied value is overwritten rather than honored. This does NOT
|
|
1294
|
+
* make the field client-writable — reachability stays governed by {@link requestDto} and the
|
|
1295
|
+
* schema decorators.
|
|
1296
|
+
*
|
|
1297
|
+
* Any hook that forces a server-owned lifecycle value (a `status` transition, an ownership
|
|
1298
|
+
* stamp) should declare it. A hook that only derives a value from other authored input does not
|
|
1299
|
+
* need to, because a caller could not have supplied it under a strict contract anyway.
|
|
1300
|
+
*
|
|
1301
|
+
* Typed `readonly string[]` rather than `keyof MainSchemaInfer<TMainSchema>`: this type is shared
|
|
1302
|
+
* by the authoring parameters AND the built operation, and the built side is assembled behind a
|
|
1303
|
+
* type-erased generic where `keyof` collapses to `never`. The stronger check lives at BOOT
|
|
1304
|
+
* instead — `collectResourceOperationAuthoritativeFieldIssues` refuses startup when a declared
|
|
1305
|
+
* name is not a persisted field of the resource. That guard is strictly better than the
|
|
1306
|
+
* compile-time one would have been, because it also covers custom-implementation registrations,
|
|
1307
|
+
* whose declarations are plain strings with no schema generic to check against. A typo must fail
|
|
1308
|
+
* loudly: silently declaring nothing would restore the exact no-op this contract prevents.
|
|
1309
|
+
*/
|
|
1310
|
+
authoritativeFields?: readonly string[];
|
|
328
1311
|
};
|
|
329
1312
|
type ResourceConfiguration_OperationVariant_ApiCall_BuilderParameters<TMainSchema extends z.ZodTypeAny = z.ZodAny> = ResourceConfiguration_OperationVariant_Base<TMainSchema> & {
|
|
330
1313
|
variantType: ResourceOperationVariantType.API_CALL;
|
|
@@ -338,6 +1321,30 @@ type ResourceConfiguration_OperationVariant_ApiCall_BuilderParameters<TMainSchem
|
|
|
338
1321
|
/** Declarative token revocation config — revokes tokens before the core operation (e.g., on DELETE) */
|
|
339
1322
|
tokenRevocation?: TokenRevocationConfig;
|
|
340
1323
|
customResponseDto?: z.ZodSchema<any>;
|
|
1324
|
+
/**
|
|
1325
|
+
* Per-endpoint rate-limit policy.
|
|
1326
|
+
*
|
|
1327
|
+
* When present, the resource controller's pre-flight check enforces this
|
|
1328
|
+
* policy BEFORE execution-context creation, request validation, and
|
|
1329
|
+
* authorization (via `RateLimitBackendService.checkPolicyForVariant`). At
|
|
1330
|
+
* that seam the authenticated identity is not yet known, so the client
|
|
1331
|
+
* identifier is the IP address (`getClientIpFromRequest`).
|
|
1332
|
+
*
|
|
1333
|
+
* When absent, only the global HTTP rate-limit
|
|
1334
|
+
* (`RuntimeConfig.httpServerConfiguration.rateLimiting`) gates this route
|
|
1335
|
+
* — that limiter is the safety net for endpoints with no per-endpoint
|
|
1336
|
+
* policy.
|
|
1337
|
+
*
|
|
1338
|
+
* Multiple windows AND together (most restrictive wins). On 429 the
|
|
1339
|
+
* `X-RateLimit-*` headers report the **tightest active window** (fewest
|
|
1340
|
+
* remaining slots), while `Retry-After` / `retryAfterSeconds` reports
|
|
1341
|
+
* the **latest tripped window** because declared windows are AND-ed.
|
|
1342
|
+
* These can be different windows when multiple trip simultaneously.
|
|
1343
|
+
*
|
|
1344
|
+
* The declared policy is surfaced through standard rate-limit response
|
|
1345
|
+
* headers and retry guidance, so callers see the same request budget.
|
|
1346
|
+
*/
|
|
1347
|
+
rateLimit?: RateLimitConfiguration;
|
|
341
1348
|
/**
|
|
342
1349
|
* Function to determine if operation variant is enabled.
|
|
343
1350
|
* Available in both frontend and backend.
|
|
@@ -359,6 +1366,15 @@ type ResourceConfiguration_OperationVariant_ApiCallWithCallback_BuilderParameter
|
|
|
359
1366
|
/** Declarative token revocation config — revokes tokens before the core operation (e.g., on DELETE) */
|
|
360
1367
|
tokenRevocation?: TokenRevocationConfig;
|
|
361
1368
|
customResponseDto?: z.ZodSchema<any>;
|
|
1369
|
+
/**
|
|
1370
|
+
* Per-endpoint rate-limit policy. Same semantics as on the API_CALL
|
|
1371
|
+
* variant — enforced pre-flight by the resource controller before EC
|
|
1372
|
+
* creation, validation, and authorization.
|
|
1373
|
+
*
|
|
1374
|
+
* The declared policy is surfaced through standard rate-limit response
|
|
1375
|
+
* headers and retry guidance, so callers see the same request budget.
|
|
1376
|
+
*/
|
|
1377
|
+
rateLimit?: RateLimitConfiguration;
|
|
362
1378
|
/**
|
|
363
1379
|
* Function to determine if operation variant is enabled.
|
|
364
1380
|
* Available in both frontend and backend.
|
|
@@ -374,6 +1390,18 @@ type ResourceConfiguration_OperationVariant_ApiCallWithCallback_BuilderParameter
|
|
|
374
1390
|
type ResourceConfiguration_OperationVariant_CronJob_BuilderParameters = ResourceConfiguration_OperationVariant_Base & {
|
|
375
1391
|
variantType: ResourceOperationVariantType.CRON_JOB;
|
|
376
1392
|
cronExpression: string;
|
|
1393
|
+
/**
|
|
1394
|
+
* Explicit response contract for a CRON_JOB custom operation whose return shape
|
|
1395
|
+
* is NOT the resource row implied by `resourceOperationLike`. A scheduled
|
|
1396
|
+
* generator/sweeper (e.g. a recurring-occurrence generator) borrows a core verb
|
|
1397
|
+
* (UPDATE/CREATE) for its repo/DTO semantics but returns a RUN SUMMARY, not an
|
|
1398
|
+
* occurrence. The factory already reads `customResponseDto` off any variant
|
|
1399
|
+
* params (`resources-config.shared.factory.ts`) and warns when a borrowed-verb
|
|
1400
|
+
* custom op omits it — this exposes it on the CRON_JOB params so the cron op can
|
|
1401
|
+
* declare its true return shape instead of inheriting the verb's occurrence
|
|
1402
|
+
* -shaped envelope (which the executor would reject the summary against).
|
|
1403
|
+
*/
|
|
1404
|
+
customResponseDto?: z.ZodSchema<any>;
|
|
377
1405
|
};
|
|
378
1406
|
type ResourceConfiguration_OperationVariant_BatchJob_BuilderParameters = ResourceConfiguration_OperationVariant_Base & {
|
|
379
1407
|
variantType: ResourceOperationVariantType.BATCH_JOB;
|
|
@@ -385,9 +1413,13 @@ type ResourceConfiguration_OperationVariant_RepositoryOnly_BuilderParameters = R
|
|
|
385
1413
|
variantType: ResourceOperationVariantType.REPOSITORY_ONLY;
|
|
386
1414
|
};
|
|
387
1415
|
/**
|
|
1416
|
+
* @wildo_source:part:start saas.models.resource-config.operation-base facet:layer:shared facet:family:resource-config
|
|
1417
|
+
*
|
|
388
1418
|
* Base operation configuration type.
|
|
389
1419
|
* NOTE: TDatabaseSchema has been removed. Backend-only fields are now marked with
|
|
390
1420
|
* the isBackendOnly decorator in mainSchema and are stripped at the service layer.
|
|
1421
|
+
*
|
|
1422
|
+
* @remarks Import from `@wildo-ai/saas-models`. App `resources-config` fills these per operation variant.
|
|
391
1423
|
*/
|
|
392
1424
|
export type ResourceConfiguration_Operation_Base<TCustomOperationEnum extends EnumLikeType | undefined, TCoreOperationEnum extends Partial<CoreResourceOperation> | undefined, TMainSchema extends z.ZodTypeAny = z.ZodAny> = ResourceConfiguration_OperationVariant_Base<TMainSchema> & {
|
|
393
1425
|
isDisabled: boolean;
|
|
@@ -400,8 +1432,16 @@ export type ResourceConfiguration_Operation_Base<TCustomOperationEnum extends En
|
|
|
400
1432
|
operationIdentifier: TCustomOperationEnum | TCoreOperationEnum;
|
|
401
1433
|
isOperationDefault: boolean;
|
|
402
1434
|
serviceRuntimeMode: ResourceOperation_ServiceRuntimeMode;
|
|
1435
|
+
generatedOperation?: ResourceConfiguration_GeneratedOperationMetadata;
|
|
403
1436
|
requestDto?: z.ZodSchema<any>;
|
|
404
1437
|
responseDto?: z.ZodSchema<any>;
|
|
1438
|
+
/** Set by factory when an explicit `requestDto` was provided in variant params.
|
|
1439
|
+
* Allows the DTO builder to skip heuristic comparison and trust the flag:
|
|
1440
|
+
* `true` ⇒ preserve the supplied schema verbatim; `false` ⇒ the requestDto is
|
|
1441
|
+
* the factory's auto-derived temporary placeholder, so always use the
|
|
1442
|
+
* inheritance-rebuilt DTO (a discriminated union for inheritance resources).
|
|
1443
|
+
* Absent only on legacy/hand-authored operations that predate the flag. */
|
|
1444
|
+
hasCustomRequestDto?: boolean;
|
|
405
1445
|
/** Set by factory when `customResponseDto` was explicitly provided in variant params.
|
|
406
1446
|
* Allows the DTO builder to skip heuristic comparison and always preserve the custom schema. */
|
|
407
1447
|
hasCustomResponseDto?: boolean;
|
|
@@ -436,6 +1476,7 @@ export type ResourceConfiguration_Operation_Base<TCustomOperationEnum extends En
|
|
|
436
1476
|
userNotifications: UserNotificationDefinition[];
|
|
437
1477
|
m2mNotifications: M2MNotificationDefinitionWithoutIdentifier[];
|
|
438
1478
|
};
|
|
1479
|
+
/** @wildo_source:part:end saas.models.resource-config.operation-base */
|
|
439
1480
|
/**
|
|
440
1481
|
* Base operation type - explicitly extracted for better type checking performance.
|
|
441
1482
|
* TypeScript can cache this more efficiently when it's a named type alias.
|
|
@@ -455,6 +1496,14 @@ export type ResourceConfiguration_Operation_InternalCall<TCustomOperationEnum ex
|
|
|
455
1496
|
export type ResourceConfiguration_Operation_RepositoryOnly<TCustomOperationEnum extends EnumLikeType | undefined, TCoreOperationEnum extends Partial<CoreResourceOperation> | undefined, TMainSchema extends z.ZodTypeAny = z.ZodAny> = ResourceConfiguration_Operation_Base<TCustomOperationEnum, TCoreOperationEnum, TMainSchema> & {
|
|
456
1497
|
variantType: ResourceOperationVariantType.REPOSITORY_ONLY;
|
|
457
1498
|
};
|
|
1499
|
+
/**
|
|
1500
|
+
* @wildo_source:part:start saas.models.resource-config.operation-api-call facet:layer:shared facet:family:resource-config
|
|
1501
|
+
*
|
|
1502
|
+
* HTTP API surface for an operation: URL templates, method, tokens,
|
|
1503
|
+
* enabledCondition, and per-endpoint rate-limit policy (`rateLimit?`).
|
|
1504
|
+
*
|
|
1505
|
+
* @remarks Import from `@wildo-ai/saas-models`.
|
|
1506
|
+
*/
|
|
458
1507
|
export type ResourceConfiguration_Operation_UrlParameterInfo = {
|
|
459
1508
|
fieldIdentifier: string;
|
|
460
1509
|
resourceType: ResourceType;
|
|
@@ -464,6 +1513,17 @@ export type ResourceConfiguration_Operation_UrlParameterInfo = {
|
|
|
464
1513
|
* undefined for default parent relationships.
|
|
465
1514
|
*/
|
|
466
1515
|
relationshipField?: string;
|
|
1516
|
+
/**
|
|
1517
|
+
* Scope-via-junction tag, propagated from the synthetic scope-anchored parent
|
|
1518
|
+
* edge (`ResourceRelationship.scopeViaJunction`). When set, this param scopes
|
|
1519
|
+
* the (target) resource's SEARCH/LIST through the named junction `J` rather
|
|
1520
|
+
* than via a direct column the resource owns — e.g. on
|
|
1521
|
+
* `/organizations/{organizationId}/users/search`, `organizationId` carries
|
|
1522
|
+
* `scopeViaJunction: 'organizationMembers'`. The backend contextual filter +
|
|
1523
|
+
* authorization read this off the runtime relationship context. Absent on
|
|
1524
|
+
* normal parent params.
|
|
1525
|
+
*/
|
|
1526
|
+
scopeViaJunction?: ResourceType;
|
|
467
1527
|
};
|
|
468
1528
|
export type ResourceConfiguration_Operation_UrlInitiatorInfo = {
|
|
469
1529
|
url: string;
|
|
@@ -479,6 +1539,22 @@ export type ResourceConfiguration_Operation_ApiCall<TCustomOperationEnum extends
|
|
|
479
1539
|
tokenAuthentication?: TokenAuthenticationConfig;
|
|
480
1540
|
tokenGeneration?: TokenGenerationConfig;
|
|
481
1541
|
tokenRevocation?: TokenRevocationConfig;
|
|
1542
|
+
/**
|
|
1543
|
+
* Resolved per-endpoint rate-limit policy (forwarded by the resource
|
|
1544
|
+
* configuration factory from the variant builder parameters). Read at
|
|
1545
|
+
* runtime by `RateLimitBackendService.checkPolicyForVariant` at the
|
|
1546
|
+
* controller pre-flight seam (`controller-resource.backend.service.ts`
|
|
1547
|
+
* → `doOperation`).
|
|
1548
|
+
*
|
|
1549
|
+
* Auto-variants (`SUMMARY` / `CONTEXT` for READ/LIST) inherit this
|
|
1550
|
+
* field from their default URL-bearing variant (`API_CALL` or
|
|
1551
|
+
* `API_CALL_WITH_CALLBACK`) — a single declaration on the default variant
|
|
1552
|
+
* covers all derived auto-variants by design.
|
|
1553
|
+
*
|
|
1554
|
+
* The declaration is inherited by derived variants so every route for this
|
|
1555
|
+
* operation presents one consistent request budget.
|
|
1556
|
+
*/
|
|
1557
|
+
rateLimit?: RateLimitConfiguration;
|
|
482
1558
|
/**
|
|
483
1559
|
* Function to determine if operation variant is enabled.
|
|
484
1560
|
* Available in both frontend and backend.
|
|
@@ -488,6 +1564,7 @@ export type ResourceConfiguration_Operation_ApiCall<TCustomOperationEnum extends
|
|
|
488
1564
|
*/
|
|
489
1565
|
enabledCondition?: ResourceConfiguration_FunctionWithContextNeeds<(params: ResourceConfiguration_OperationVariant_CustomImplementation_FunctionParameters<TMainSchema>) => boolean>;
|
|
490
1566
|
};
|
|
1567
|
+
/** @wildo_source:part:end saas.models.resource-config.operation-api-call */
|
|
491
1568
|
export type ResourceConfiguration_Operation_ApiCallWithCallback<TCustomOperationEnum extends EnumLikeType | undefined, TCoreOperationEnum extends Partial<CoreResourceOperation> | undefined, TMainSchema extends z.ZodTypeAny = z.ZodAny> = ResourceConfiguration_Operation_Base<TCustomOperationEnum, TCoreOperationEnum, TMainSchema> & {
|
|
492
1569
|
variantType: ResourceOperationVariantType.API_CALL_WITH_CALLBACK;
|
|
493
1570
|
httpVerb: HttpMethod;
|
|
@@ -497,6 +1574,14 @@ export type ResourceConfiguration_Operation_ApiCallWithCallback<TCustomOperation
|
|
|
497
1574
|
tokenAuthentication?: TokenAuthenticationConfig;
|
|
498
1575
|
tokenGeneration?: TokenGenerationConfig;
|
|
499
1576
|
tokenRevocation?: TokenRevocationConfig;
|
|
1577
|
+
/**
|
|
1578
|
+
* Resolved per-endpoint rate-limit policy. Same semantics as on the
|
|
1579
|
+
* API_CALL variant.
|
|
1580
|
+
*
|
|
1581
|
+
* The declaration is inherited by derived variants so every route for this
|
|
1582
|
+
* operation presents one consistent request budget.
|
|
1583
|
+
*/
|
|
1584
|
+
rateLimit?: RateLimitConfiguration;
|
|
500
1585
|
/**
|
|
501
1586
|
* Function to determine if operation variant is enabled.
|
|
502
1587
|
* Available in both frontend and backend.
|
|
@@ -511,6 +1596,8 @@ export type ResourceConfiguration_Operation_ApiCallWithCallback<TCustomOperation
|
|
|
511
1596
|
};
|
|
512
1597
|
export type ResourceConfiguration_OperationVariant_BuilderParameters<TMainSchema extends z.ZodTypeAny = z.ZodAny> = ResourceConfiguration_OperationVariant_ApiCall_BuilderParameters<TMainSchema> | ResourceConfiguration_OperationVariant_ApiCallWithCallback_BuilderParameters<TMainSchema> | ResourceConfiguration_OperationVariant_CronJob_BuilderParameters | ResourceConfiguration_OperationVariant_BatchJob_BuilderParameters | ResourceConfiguration_OperationVariant_InternalCall_BuilderParameters | ResourceConfiguration_OperationVariant_RepositoryOnly_BuilderParameters;
|
|
513
1598
|
/**
|
|
1599
|
+
* @wildo_source:part:start saas.models.resource-config.operation-variant-for-key facet:layer:shared facet:family:resource-config
|
|
1600
|
+
*
|
|
514
1601
|
* Variant builder type that distributes operation-specific fields based on the operation key.
|
|
515
1602
|
*
|
|
516
1603
|
* Collection-view fields are intersected with the **full** variant union — not restricted to
|
|
@@ -523,7 +1610,11 @@ export type ResourceConfiguration_OperationVariant_BuilderParameters<TMainSchema
|
|
|
523
1610
|
* explicitly through custom operation identifiers plus variant/runtime config,
|
|
524
1611
|
* not through a special core operation.
|
|
525
1612
|
*/
|
|
526
|
-
export type OperationVariant_ForKey<K, TMainSchema extends z.ZodTypeAny = z.ZodAny> = K extends CoreResourceOperation.LIST ? ResourceConfiguration_OperationVariant_BuilderParameters<TMainSchema> & CollectionViewFields_List : K extends CoreResourceOperation.SEARCH ? ResourceConfiguration_OperationVariant_BuilderParameters<TMainSchema> & CollectionViewFields_Search : ResourceConfiguration_OperationVariant_BuilderParameters<TMainSchema
|
|
1613
|
+
export type OperationVariant_ForKey<K, TMainSchema extends z.ZodTypeAny = z.ZodAny> = K extends CoreResourceOperation.LIST ? ResourceConfiguration_OperationVariant_BuilderParameters<TMainSchema> & CollectionViewFields_List : K extends CoreResourceOperation.SEARCH ? ResourceConfiguration_OperationVariant_BuilderParameters<TMainSchema> & CollectionViewFields_Search : K extends CoreResourceOperation ? ResourceConfiguration_OperationVariant_BuilderParameters<TMainSchema> : ResourceConfiguration_OperationVariant_BuilderParameters<TMainSchema> | (ResourceConfiguration_OperationVariant_BuilderParameters<TMainSchema> & {
|
|
1614
|
+
resourceOperationLike: CoreResourceOperation.LIST;
|
|
1615
|
+
} & CollectionViewFields_List) | (ResourceConfiguration_OperationVariant_BuilderParameters<TMainSchema> & {
|
|
1616
|
+
resourceOperationLike: CoreResourceOperation.SEARCH;
|
|
1617
|
+
} & CollectionViewFields_Search);
|
|
527
1618
|
/**
|
|
528
1619
|
* Operation config with variant type narrowed by operation key.
|
|
529
1620
|
* Distributes at the operation-config level; collection-view fields live on the variant.
|
|
@@ -542,7 +1633,19 @@ export type OperationConfig_ForKey<K, TMainSchema extends z.ZodTypeAny = z.ZodAn
|
|
|
542
1633
|
}[];
|
|
543
1634
|
m2mNotifications?: M2MNotificationDefinitionWithoutIdentifier[];
|
|
544
1635
|
};
|
|
1636
|
+
/** @wildo_source:part:end saas.models.resource-config.operation-variant-for-key */
|
|
1637
|
+
/**
|
|
1638
|
+
* @wildo_source:part:start saas.models.resource-config.operation-union facet:layer:shared facet:family:resource-config
|
|
1639
|
+
*
|
|
1640
|
+
* Discriminated union of resolved operation configuration shapes (variant discriminant).
|
|
1641
|
+
*/
|
|
545
1642
|
export type ResourceConfiguration_Operation<TCustomOperationEnum extends EnumLikeType | undefined, TCoreOperationEnum extends Partial<CoreResourceOperation> | undefined, TMainSchema extends z.ZodTypeAny = z.ZodAny> = ResourceConfiguration_Operation_ApiCall<TCustomOperationEnum, TCoreOperationEnum, TMainSchema> | ResourceConfiguration_Operation_ApiCallWithCallback<TCustomOperationEnum, TCoreOperationEnum, TMainSchema> | ResourceConfiguration_Operation_CronJob<TCustomOperationEnum, TCoreOperationEnum, TMainSchema> | ResourceConfiguration_Operation_BatchJob<TCustomOperationEnum, TCoreOperationEnum, TMainSchema> | ResourceConfiguration_Operation_InternalCall<TCustomOperationEnum, TCoreOperationEnum, TMainSchema> | ResourceConfiguration_Operation_RepositoryOnly<TCustomOperationEnum, TCoreOperationEnum, TMainSchema>;
|
|
1643
|
+
/** @wildo_source:part:end saas.models.resource-config.operation-union */
|
|
1644
|
+
/**
|
|
1645
|
+
* @wildo_source:part:start saas.models.resource-config.operation-path facet:layer:shared facet:family:resource-config
|
|
1646
|
+
*
|
|
1647
|
+
* Path key for routing: resource, operation, variant, optional variantKey / bulk.
|
|
1648
|
+
*/
|
|
546
1649
|
export type ResourceConfiguration_OperationPath<TCustomOperationEnum extends EnumLikeType | undefined, TCoreOperationEnum extends Partial<CoreResourceOperation> | undefined> = {
|
|
547
1650
|
resourceIdentifier: ResourceType;
|
|
548
1651
|
operationIdentifier: TCustomOperationEnum | TCoreOperationEnum;
|
|
@@ -551,6 +1654,7 @@ export type ResourceConfiguration_OperationPath<TCustomOperationEnum extends Enu
|
|
|
551
1654
|
isBulkOperation?: boolean;
|
|
552
1655
|
variantKey?: string;
|
|
553
1656
|
};
|
|
1657
|
+
/** @wildo_source:part:end saas.models.resource-config.operation-path */
|
|
554
1658
|
export type ResourceConfiguration_OperationRepositoryPath = {
|
|
555
1659
|
resourceIdentifier: ResourceType;
|
|
556
1660
|
operationIdentifier: CoreResourceOperation;
|
|
@@ -593,7 +1697,232 @@ export type ResourceConfiguration_Operation_BuilderParameters<TMainSchema extend
|
|
|
593
1697
|
}[];
|
|
594
1698
|
m2mNotifications?: M2MNotificationDefinitionWithoutIdentifier[];
|
|
595
1699
|
};
|
|
1700
|
+
/**
|
|
1701
|
+
* @wildo_source:part:start saas.models.resource-config.builder-parameters facet:layer:shared facet:family:resource-config
|
|
1702
|
+
*
|
|
1703
|
+
* Valid operation keys from core + custom enums, and builder params for `createResourceConfiguration`.
|
|
1704
|
+
*/
|
|
596
1705
|
export type ValidOperationKeys<TCustomOperationEnum extends EnumLikeType | undefined, TCoreOperationEnum extends Partial<CoreResourceOperation> | undefined> = (TCustomOperationEnum extends EnumLikeType ? EnumValues<TCustomOperationEnum> : never) | (TCoreOperationEnum extends Partial<CoreResourceOperation> ? TCoreOperationEnum : never);
|
|
1706
|
+
/**
|
|
1707
|
+
* @wildo_source:part:start saas.models.resource-config.system-access-policy facet:layer:shared facet:family:resource-config
|
|
1708
|
+
*
|
|
1709
|
+
* Access mode for the ACL-bypassing system-context reads
|
|
1710
|
+
* (`SystemAccessBackendService.readAsSystem` / `listAsSystem`, from
|
|
1711
|
+
* `@wildo-ai/saas-backend-lib`).
|
|
1712
|
+
*
|
|
1713
|
+
* Those primitives run with a synthesised super-admin execution context and
|
|
1714
|
+
* therefore SKIP the caller's scope and role checks entirely. A resource is
|
|
1715
|
+
* readable that way ONLY if its resource configuration opts the verb in. Any
|
|
1716
|
+
* verb left undeclared defaults to `FORBIDDEN`: a system read of a resource
|
|
1717
|
+
* that has not opted in throws `ErrorType.CONFIGURATION` — the framework is
|
|
1718
|
+
* fail-closed here by construction.
|
|
1719
|
+
*/
|
|
1720
|
+
export declare enum ResourceSystemAccessMode {
|
|
1721
|
+
/** The verb's system-context primitive is rejected for this resource (default). */
|
|
1722
|
+
FORBIDDEN = "FORBIDDEN",
|
|
1723
|
+
/** The verb's system-context primitive is permitted for this resource. */
|
|
1724
|
+
ALLOWED = "ALLOWED"
|
|
1725
|
+
}
|
|
1726
|
+
/**
|
|
1727
|
+
* Per-resource opt-in policy for the ACL-bypassing system-context primitives
|
|
1728
|
+
* on `SystemAccessBackendService`: the reads (`readAsSystem` / `listAsSystem`)
|
|
1729
|
+
* and the trusted writes (`createAsSystem` / `updateAsSystem` /
|
|
1730
|
+
* `updateManyAsSystem`).
|
|
1731
|
+
*
|
|
1732
|
+
* A system-context call does not REMOVE the authorization decision — it
|
|
1733
|
+
* RELOCATES it from the resource ACL onto the calling service, which MUST
|
|
1734
|
+
* enforce an explicit alternative check (e.g. consumable-token or
|
|
1735
|
+
* email-ownership matching). Declaring this policy is the data owner's
|
|
1736
|
+
* statement that such a bypass is permissible at all, and for which verb. An
|
|
1737
|
+
* absent policy — or a verb set to (or left defaulting to) `FORBIDDEN` — makes
|
|
1738
|
+
* the primitive throw.
|
|
1739
|
+
*
|
|
1740
|
+
* The WRITE verbs additionally let a trusted in-process caller persist the
|
|
1741
|
+
* fields the client-shaped request DTO strips — `.isBackendOnly()` material
|
|
1742
|
+
* (e.g. a credential `passwordHash`) and the context-auto-populated FKs (e.g.
|
|
1743
|
+
* `userId` on a system resource that has no HTTP surface to seed it) — by
|
|
1744
|
+
* re-attaching exactly those fields after the strict parse. They are the
|
|
1745
|
+
* sanctioned path for engine flows like registration that must write system
|
|
1746
|
+
* resources directly; opting a verb in is the data owner's acknowledgement that
|
|
1747
|
+
* a super-admin-context mutation of this resource is legitimate.
|
|
1748
|
+
*
|
|
1749
|
+
* Caveats a system-context call inherits (it runs as super-admin), to weigh
|
|
1750
|
+
* before opting in:
|
|
1751
|
+
* - a READ returns the FULL record — every field, including ones a normal
|
|
1752
|
+
* caller's role / field-visibility would hide — so never forward the result
|
|
1753
|
+
* verbatim to an under-privileged caller; project only what is safe.
|
|
1754
|
+
* - a WRITE bypasses the caller's scope + role ACL, so the calling service
|
|
1755
|
+
* owns the authorization decision (only trusted engine code can reach the
|
|
1756
|
+
* primitive — it is never exposed to an HTTP payload).
|
|
1757
|
+
* - feature flags do not gate it (it is an internal request).
|
|
1758
|
+
* - the policy is RESOURCE-LEVEL: for a polymorphic resource it is shared by
|
|
1759
|
+
* every scope variant (declare it once on the shared config).
|
|
1760
|
+
*
|
|
1761
|
+
* Intentionally DISTINCT from `isSystemResource`: marking a resource as
|
|
1762
|
+
* framework infrastructure does NOT imply that an ACL bypass is acceptable
|
|
1763
|
+
* for its data. Keep the two concepts separate.
|
|
1764
|
+
*/
|
|
1765
|
+
export type ResourceSystemAccessPolicy = {
|
|
1766
|
+
/** Governs `readAsSystem`. Omitted ⇒ FORBIDDEN. */
|
|
1767
|
+
read?: ResourceSystemAccessMode;
|
|
1768
|
+
/** Governs `listAsSystem`. Omitted ⇒ FORBIDDEN. */
|
|
1769
|
+
list?: ResourceSystemAccessMode;
|
|
1770
|
+
/** Governs `createAsSystem`. Omitted ⇒ FORBIDDEN. */
|
|
1771
|
+
create?: ResourceSystemAccessMode;
|
|
1772
|
+
/** Governs `updateAsSystem`. Omitted ⇒ FORBIDDEN. */
|
|
1773
|
+
update?: ResourceSystemAccessMode;
|
|
1774
|
+
/** Governs `updateManyAsSystem`. Omitted ⇒ FORBIDDEN. */
|
|
1775
|
+
updateMany?: ResourceSystemAccessMode;
|
|
1776
|
+
/**
|
|
1777
|
+
* Governs the impersonalization see-through reads (`readRetainedAsSystem` /
|
|
1778
|
+
* `listRetainedAsSystem`) — the privileged, audited path that reveals
|
|
1779
|
+
* `retentionStatus = RETAINED` rows hidden-by-default. Omitted ⇒ FORBIDDEN.
|
|
1780
|
+
* Auto-derived to `ALLOWED` by the factory when a resource opts into
|
|
1781
|
+
* `retentionPolicy`; never authored by hand in the common case.
|
|
1782
|
+
*
|
|
1783
|
+
* **LIVE.** `readRetainedAsSystem` / `listRetainedAsSystem` exist and are enforced: the verb is
|
|
1784
|
+
* asserted fail-closed, a privileged human role is required, and every reveal emits a
|
|
1785
|
+
* human-attributed `RETAINED_DATA_ACCESS` audit event. (This block previously said the primitives
|
|
1786
|
+
* were "wired in a later phase" — false since the M5b work landed.)
|
|
1787
|
+
*/
|
|
1788
|
+
seeRetained?: ResourceSystemAccessMode;
|
|
1789
|
+
/**
|
|
1790
|
+
* May this resource's rows be swept into a SUBJECT EXPORT bundle (GDPR Art. 15 / Art. 20)?
|
|
1791
|
+
*
|
|
1792
|
+
* Fail-closed by omission, like every other verb here. A subject export reads across the whole
|
|
1793
|
+
* child-direction graph of its subject, so without an explicit opt-in a resource could be
|
|
1794
|
+
* disclosed to a data subject because it merely sits on an edge — nobody having decided that its
|
|
1795
|
+
* contents are appropriate to hand over.
|
|
1796
|
+
*
|
|
1797
|
+
* **The refusal is LOUD, not a silent skip.** When an edge the classifier marked for inclusion
|
|
1798
|
+
* belongs to a resource that has not opted in, the export REFUSES and names it. Silently dropping
|
|
1799
|
+
* it would produce an access bundle that is incomplete without saying so — a disclosure failure
|
|
1800
|
+
* wearing the appearance of a successful response, which is the same class of lie as the routed
|
|
1801
|
+
* export operations this capability replaced. Refusing is a one-line fix per resource; a silent
|
|
1802
|
+
* omission is undetectable.
|
|
1803
|
+
*
|
|
1804
|
+
* NOT derived from `portabilityPolicy`: declaring where fields came from (Art. 20 scoping) and
|
|
1805
|
+
* consenting to be disclosed at all are different decisions, and a resource may legitimately want
|
|
1806
|
+
* the first without the second.
|
|
1807
|
+
*/
|
|
1808
|
+
exportSubject?: ResourceSystemAccessMode;
|
|
1809
|
+
};
|
|
1810
|
+
/** @wildo_source:part:end saas.models.resource-config.system-access-policy */
|
|
1811
|
+
/**
|
|
1812
|
+
* Resource-level opt-in to the **impersonalization-on-erasure** capability: on erasure the
|
|
1813
|
+
* resource is impersonalized-and-retained (personal fields scrubbed, row kept for a legal/audit
|
|
1814
|
+
* obligation) instead of hard-deleted. When set, the factory injects a `retentionStatus` marker
|
|
1815
|
+
* and derives the `updateMany` + `seeRetained` system-access grants.
|
|
1816
|
+
*
|
|
1817
|
+
* RESOURCE-level (intrinsic, trigger-agnostic). The per-EDGE trigger is
|
|
1818
|
+
* `onParentDelete.strategy = IMPERSONALIZE_AND_RETAIN`; the per-FIELD scrub is `.impersonalizeWith()`.
|
|
1819
|
+
*
|
|
1820
|
+
* **LIVE — opting in has real effect today.** The marker + derived grants, the in-place scrub writer,
|
|
1821
|
+
* the `IMPERSONALIZE_AND_RETAIN` cascade mode and the hidden-by-default read filter all exist and are
|
|
1822
|
+
* enforced. A RETAINED row is invisible to reads, lists, counts and CHART aggregates, and immutable
|
|
1823
|
+
* to ordinary writes, on BOTH persistence adapters; the only door is the audited see-through path.
|
|
1824
|
+
*
|
|
1825
|
+
* Runtime-proven, not asserted — and scoped precisely, because an earlier revision of this block
|
|
1826
|
+
* over-claimed it. Against a real MongoDB, the erasure orchestrator reaches its terminal path and its
|
|
1827
|
+
* receipt is truthful over a registered subset of resources
|
|
1828
|
+
* (`subject-erasure-completion.mongo.integration.test.ts`); the retention OUTCOME and a SECOND erasure
|
|
1829
|
+
* are observed (`subject-impersonalization-retention-outcome.mongo.integration.test.ts`); and a
|
|
1830
|
+
* retained row is absent from a real application chart over real HTTP
|
|
1831
|
+
* (Wonder Todos `e2e/chart-retention-hide.e2e.ts`).
|
|
1832
|
+
*
|
|
1833
|
+
* What is NOT proven: that an erasure completes over the FULL `onParentDelete` closure, and that
|
|
1834
|
+
* external (provider-side) effects run. The completion lane deliberately requires
|
|
1835
|
+
* `declinedEdges.length > 0`, so it asserts a state in which some edges were NOT executed, and
|
|
1836
|
+
* `externalEffects` is stubbed empty. Do not read "runtime-proven" here as end-to-end completeness.
|
|
1837
|
+
*
|
|
1838
|
+
* (This block previously read "Contract only in this phase … No record is impersonalized-and-retained
|
|
1839
|
+
* yet." That was true when written and became false without being revisited — it is the public
|
|
1840
|
+
* authoring contract an app developer reads before declaring this policy, so it is corrected here
|
|
1841
|
+
* rather than left to mislead.)
|
|
1842
|
+
*
|
|
1843
|
+
* ⚠️ NOT the anonymous-user concept (`isAnonymizable` is pre-auth ownership transposition — the
|
|
1844
|
+
* opposite direction). Reuse of that mechanism, never its name.
|
|
1845
|
+
*/
|
|
1846
|
+
/**
|
|
1847
|
+
* WHO a row of this resource is with respect to an erasure, and where that person's session lives.
|
|
1848
|
+
* The companion of {@link ResourceRetentionPolicy}: retention says what happens to the ROW and whether
|
|
1849
|
+
* the row holds personal data at all; this says **whose SESSION an erasure of it must end**.
|
|
1850
|
+
*
|
|
1851
|
+
* The two are independent, and reading this one as "is the row about a person" is the mistake that
|
|
1852
|
+
* cost `NO_PRINCIPAL` its previous name — see {@link ResourceDataSubjectKind}. A CRM contact holds
|
|
1853
|
+
* personal data (`RETAIN_AND_IMPERSONALIZE`) and has no session (`NO_PRINCIPAL`); an invoice holds
|
|
1854
|
+
* none (`RETAIN_ONLY`) and also has no session. Same value here, opposite compliance meaning, and the
|
|
1855
|
+
* retention mode is what tells them apart.
|
|
1856
|
+
*
|
|
1857
|
+
* Required on every resource declaring a {@link ResourceRetentionPolicy}, because those are exactly
|
|
1858
|
+
* the resources that can be passed to `eraseSubjectAsSystem` as a subject (the orchestrator refuses a
|
|
1859
|
+
* subject with no retention policy). Undeclared fails at config build rather than defaulting: the safe
|
|
1860
|
+
* default is unknowable — guessing `NO_PRINCIPAL` silently drops a real person's revocation, and
|
|
1861
|
+
* guessing a linked principal revokes the wrong people. See {@link ResourceDataSubjectKind} for why
|
|
1862
|
+
* the linkage can never be inferred from the presence of a user foreign key.
|
|
1863
|
+
*/
|
|
1864
|
+
export interface ResourceDataSubjectPolicy {
|
|
1865
|
+
/** Whose login session an erasure of this row must end — never whether the row is about a person. */
|
|
1866
|
+
kind: ResourceDataSubjectKind;
|
|
1867
|
+
/**
|
|
1868
|
+
* The field naming the `USERS` row whose session an erasure of this row must end.
|
|
1869
|
+
*
|
|
1870
|
+
* REQUIRED when {@link kind} is `LINKED_PRINCIPAL`, and FORBIDDEN otherwise — under
|
|
1871
|
+
* `SELF_PRINCIPAL` the row's own id is the principal, and under `NO_PRINCIPAL` there is no
|
|
1872
|
+
* principal at all, so a field there would be a contradiction rather than redundancy. Both
|
|
1873
|
+
* directions are enforced at config build.
|
|
1874
|
+
*/
|
|
1875
|
+
sessionPrincipalField?: string;
|
|
1876
|
+
}
|
|
1877
|
+
export interface ResourceRetentionPolicy {
|
|
1878
|
+
/**
|
|
1879
|
+
* WHAT happens to a row of this resource when its subject is erased.
|
|
1880
|
+
*
|
|
1881
|
+
* Both modes retain the row (kept, marked `RETAINED`, hidden from normal reads and immutable,
|
|
1882
|
+
* readable only through the audited see-through path). They differ on whether the row's own FIELDS
|
|
1883
|
+
* additionally need scrubbing — which is a genuinely separate question, because a record can be
|
|
1884
|
+
* legally retainable while holding no personal data of its own (a financial row that merely POINTS
|
|
1885
|
+
* at a person). Fusing the two forced such a resource to either invent a fake scrub or forgo
|
|
1886
|
+
* retention entirely; keeping them distinct is what makes "retain, nothing to scrub" expressible.
|
|
1887
|
+
*/
|
|
1888
|
+
mode: ErasureRetentionMode;
|
|
1889
|
+
}
|
|
1890
|
+
/**
|
|
1891
|
+
* Resource-level DEFAULT for where this resource's field values came from — the axis that decides
|
|
1892
|
+
* GDPR Art. 20 (portability) scope. Per-field overrides are `.portabilityProvenance()`.
|
|
1893
|
+
*
|
|
1894
|
+
* ## Why a resource-level default exists at all
|
|
1895
|
+
*
|
|
1896
|
+
* Art. 20 is intrinsically a per-FIELD question: one row routinely mixes data the subject supplied
|
|
1897
|
+
* (`firstName`) with data the controller produced about them (a computed score, a server-assigned
|
|
1898
|
+
* status). But requiring a decorator on EVERY field of every resource would make the capability
|
|
1899
|
+
* unadoptable, and an unadopted disclosure capability is worse than a coarse one — it means
|
|
1900
|
+
* portability requests cannot be answered at all.
|
|
1901
|
+
*
|
|
1902
|
+
* So the declaration is two-level: this default carries the resource's common case in one line, and
|
|
1903
|
+
* only fields that DIFFER from it need a decorator. A `USER_PROFILES` resource is
|
|
1904
|
+
* `SUBJECT_PROVIDED` by default with a handful of derived exceptions; an `AUDIT_LOGS` resource is
|
|
1905
|
+
* `DERIVED` throughout with none.
|
|
1906
|
+
*
|
|
1907
|
+
* ## Why it is optional, and what happens without it
|
|
1908
|
+
*
|
|
1909
|
+
* Omitting it entirely is legitimate: **Art. 15 (access) never consults provenance**, so an
|
|
1910
|
+
* application can answer access requests in full before annotating anything. Only an Art. 20
|
|
1911
|
+
* portability export needs the axis, and for a resource where neither the field nor this default
|
|
1912
|
+
* declares one, that export REFUSES rather than guessing — see
|
|
1913
|
+
* `SubjectExportFieldScope.UNDECLARED` for why neither guess is the safe one.
|
|
1914
|
+
*
|
|
1915
|
+
* ⚠️ NOT `retentionPolicy`. That says what happens to a value on ERASURE (destroy vs retain-and-
|
|
1916
|
+
* scrub); this says where the value ORIGINATED, for a DISCLOSURE decision. A field is commonly
|
|
1917
|
+
* `SUBJECT_PROVIDED` here and masked on erasure there — orthogonal axes on the same value.
|
|
1918
|
+
*/
|
|
1919
|
+
export interface ResourcePortabilityPolicy {
|
|
1920
|
+
/**
|
|
1921
|
+
* The provenance every field of this resource is assumed to carry unless its own
|
|
1922
|
+
* `.portabilityProvenance()` says otherwise.
|
|
1923
|
+
*/
|
|
1924
|
+
defaultProvenance: DataPortabilityProvenance;
|
|
1925
|
+
}
|
|
597
1926
|
/**
|
|
598
1927
|
* Builder parameters for creating a resource configuration.
|
|
599
1928
|
* NOTE: databaseSchema has been removed. Backend-only fields are now marked with
|
|
@@ -608,15 +1937,101 @@ export type ResourceConfiguration_BuilderParameters<TCustomOperationEnum extends
|
|
|
608
1937
|
inheritenceSchemaDefinition?: ResourceConfiguration_InheritanceSchemaDefinition<EnumLikeType, TMainSchema>;
|
|
609
1938
|
/**
|
|
610
1939
|
* Persistence adapter (database type) for this resource.
|
|
611
|
-
* - `mongodb`: MongoDB with Mongoose ORM
|
|
1940
|
+
* - `mongodb`: MongoDB with Mongoose ORM
|
|
612
1941
|
* - `postgresql`: PostgreSQL (SQL adapter)
|
|
613
1942
|
*
|
|
614
|
-
* If not specified, uses `appConfig.database.defaultAdapter
|
|
1943
|
+
* If not specified, uses `appConfig.database.defaultAdapter` — which is the normal case and
|
|
1944
|
+
* should stay the normal case.
|
|
615
1945
|
*
|
|
616
|
-
*
|
|
1946
|
+
* **Declaring a value that DISAGREES with the application default is refused at registration
|
|
1947
|
+
* unless {@link ResourceConfiguration_BuilderParameters.persistenceAdapterIsolation} is also
|
|
1948
|
+
* declared.** An application is wholly one adapter by default because two adapters cannot
|
|
1949
|
+
* share a native transaction; the isolation declaration is the only way past that refusal,
|
|
1950
|
+
* and it is a claim about this resource's write topology rather than a way to silence the
|
|
1951
|
+
* error. Declaring an adapter that AGREES with the default is always fine and needs nothing.
|
|
617
1952
|
*/
|
|
618
1953
|
persistenceAdapter?: PersistenceAdapterType;
|
|
1954
|
+
/**
|
|
1955
|
+
* This resource's declared relationship to cross-adapter atomic write boundaries.
|
|
1956
|
+
*
|
|
1957
|
+
* Required — and only meaningful — when {@link
|
|
1958
|
+
* ResourceConfiguration_BuilderParameters.persistenceAdapter} disagrees with
|
|
1959
|
+
* `appConfig.database.defaultAdapter`. Without it, the resources registry refuses the
|
|
1960
|
+
* application at startup; with it, the registry admits the resource and LOGS the admitted
|
|
1961
|
+
* set, so a mixed configuration is always named and never ambient.
|
|
1962
|
+
*
|
|
1963
|
+
* Read {@link ResourcePersistenceAdapterIsolation} before declaring one: the member is an
|
|
1964
|
+
* assertion about the resource's design that the persistence unit of work will still enforce
|
|
1965
|
+
* at every real boundary.
|
|
1966
|
+
*/
|
|
1967
|
+
persistenceAdapterIsolation?: ResourcePersistenceAdapterIsolationType;
|
|
1968
|
+
/**
|
|
1969
|
+
* REQUIRED companion declaration when `persistenceAdapter` is `HTTP_API`; forbidden otherwise.
|
|
1970
|
+
*
|
|
1971
|
+
* Carries everything the external repository needs that the platform does not own: provider
|
|
1972
|
+
* reference (credentials resolve through `ExternalProvidersRegistryBackendService`), transport
|
|
1973
|
+
* dialect, remote entity, ordered key declaration (id synthesis), identity mode, tenancy
|
|
1974
|
+
* stance, erasure stance, and remote-call semantics. The factory enforces presence/absence
|
|
1975
|
+
* coherence and content-validates the declaration.
|
|
1976
|
+
*/
|
|
1977
|
+
httpApiBinding?: HttpApiResourceBinding;
|
|
1978
|
+
/** REQUIRED when `persistenceAdapter` is INTROSPECTION; meaningless otherwise. */
|
|
1979
|
+
introspectionBinding?: IntrospectionResourceBinding;
|
|
1980
|
+
/**
|
|
1981
|
+
* OPTIONAL inbound ETL pipeline on an ordinary LOCAL resource — "some resources local, some
|
|
1982
|
+
* remote, ETL between them" (partial-resource coverage, model v3; PR-3). FORBIDDEN on an
|
|
1983
|
+
* HTTP_API-adapter resource: a virtual resource IS the remote side. The factory
|
|
1984
|
+
* content-validates the declaration and every mainSchema-dependent coherence rule (the
|
|
1985
|
+
* remote-key field is a declared `.isBusinessKey()` + excludeFromCreate/Update STRING; mapped
|
|
1986
|
+
* targets exist, accept null unless `required`, and are excludeFromCreate/Update; CLOSED
|
|
1987
|
+
* population refuses caller CREATE operations).
|
|
1988
|
+
*/
|
|
1989
|
+
externalDataPipeline?: ExternalDataPipelineDeclaration;
|
|
619
1990
|
isSystemResource?: boolean;
|
|
1991
|
+
/**
|
|
1992
|
+
* Does this resource's OWN primary-key URL segment name the CALLER, or the SUBJECT?
|
|
1993
|
+
*
|
|
1994
|
+
* Default `true` (the segment names the caller) — deliberately the SAFE default, so a resource
|
|
1995
|
+
* whose author has not considered the question keeps the identity-coherence guard rather than
|
|
1996
|
+
* silently losing it.
|
|
1997
|
+
*
|
|
1998
|
+
* ## Why this cannot be inferred
|
|
1999
|
+
*
|
|
2000
|
+
* The W3.6 identity-coherence guard (`handleUserJwtAuthentication` →
|
|
2001
|
+
* `AUTHORIZATION_USER_ID_MISMATCH`) refuses a request whose URL `userId` differs from the JWT
|
|
2002
|
+
* subject. That is exactly right for `USER_SELF` (`/user-self/{userId}` — the segment IS the
|
|
2003
|
+
* caller, pinned by the horizontal-IDOR probes) and for child routes under a user
|
|
2004
|
+
* (`/users/{userId}/draft-notes` — a PARENT segment naming whose rows these are).
|
|
2005
|
+
*
|
|
2006
|
+
* It is exactly WRONG for `USERS`, whose own `resourceFieldIdentifier` is also `userId` but whose
|
|
2007
|
+
* segment names the TARGET of an administrative action. Both resources are keyed on the same
|
|
2008
|
+
* field name, so no structural rule can tell them apart — the framework already had to add
|
|
2009
|
+
* `coreResourceShared_FieldIdentifierPriority` to disambiguate the very same collision for FK
|
|
2010
|
+
* resolution. This declaration is that disambiguation for IDENTITY.
|
|
2011
|
+
*
|
|
2012
|
+
* ## What it does and does not change
|
|
2013
|
+
*
|
|
2014
|
+
* Setting `false` relaxes ONLY the coherence refusal. It does not touch:
|
|
2015
|
+
* - `initiatorIds.userId`, which is taken from the JWT and spread LAST precisely so a URL can
|
|
2016
|
+
* never spoof the caller (see the `W3.6` comment at that assignment) — so permitting the
|
|
2017
|
+
* mismatch cannot produce impersonation;
|
|
2018
|
+
* - the contextual-field map, which legitimately carries the ADDRESSED resource's id;
|
|
2019
|
+
* - authorization, which still decides whether this caller may run this operation at all.
|
|
2020
|
+
*
|
|
2021
|
+
* Set `false` only for an administrative resource whose primary key is a person/tenant identifier
|
|
2022
|
+
* that a privileged caller is MEANT to address on someone else's behalf.
|
|
2023
|
+
*/
|
|
2024
|
+
primaryKeyIdentifiesInitiator?: boolean;
|
|
2025
|
+
/**
|
|
2026
|
+
* Opt-in policy for the ACL-bypassing system-context primitives
|
|
2027
|
+
* (`readAsSystem` / `listAsSystem` and the trusted writes `createAsSystem` /
|
|
2028
|
+
* `updateAsSystem` / `updateManyAsSystem`). Omitted ⇒ EVERY verb FORBIDDEN
|
|
2029
|
+
* (fail-closed): a system-context call on this resource throws unless the
|
|
2030
|
+
* matching verb is explicitly set to ALLOWED. Declare ONLY the verb(s) that
|
|
2031
|
+
* genuinely need a system bypass, and ensure the calling service enforces an
|
|
2032
|
+
* explicit alternative authorization.
|
|
2033
|
+
*/
|
|
2034
|
+
systemAccessPolicy?: ResourceSystemAccessPolicy;
|
|
620
2035
|
coreOperations: TCoreOperationEnum[];
|
|
621
2036
|
customOperation?: TCustomOperationEnum;
|
|
622
2037
|
operationsConfiguration: {
|
|
@@ -641,8 +2056,42 @@ export type ResourceConfiguration_BuilderParameters<TCustomOperationEnum extends
|
|
|
641
2056
|
* Defaults to ADD (simple ownership reassignment).
|
|
642
2057
|
*/
|
|
643
2058
|
transpositionPolicy?: ResourceTranspositionPolicy;
|
|
2059
|
+
/**
|
|
2060
|
+
* Opt in to impersonalization-on-erasure (retain + scrub instead of hard-delete). When set, the
|
|
2061
|
+
* factory injects a `retentionStatus` marker and derives the `updateMany` / `seeRetained`
|
|
2062
|
+
* system-access grants. Per-field scrub is `.impersonalizeWith()`; the per-edge trigger is the
|
|
2063
|
+
* `IMPERSONALIZE_AND_RETAIN` cascade mode.
|
|
2064
|
+
*
|
|
2065
|
+
* **LIVE.** Marker injection, grant derivation, the scrub writer, the cascade mode and the
|
|
2066
|
+
* hidden-by-default read filter are all enforced today — see `ResourceRetentionPolicy` for the
|
|
2067
|
+
* runtime evidence. Declaring this changes behaviour; it is not a forward declaration.
|
|
2068
|
+
*
|
|
2069
|
+
* Declaring this also REQUIRES {@link dataSubjectPolicy}: a retention-governed resource is exactly
|
|
2070
|
+
* one that can be handed to `eraseSubjectAsSystem` as a subject, so it must say whether its rows are
|
|
2071
|
+
* a person — and if so, whose session an erasure ends.
|
|
2072
|
+
*/
|
|
2073
|
+
retentionPolicy?: ResourceRetentionPolicy;
|
|
2074
|
+
/**
|
|
2075
|
+
* WHO a row of this resource is with respect to an erasure — and, when it is a person, which field
|
|
2076
|
+
* names the `USERS` row whose session that erasure must end.
|
|
2077
|
+
*
|
|
2078
|
+
* Mandatory for any resource declaring a {@link retentionPolicy}; meaningless (and rejected) without
|
|
2079
|
+
* one, since a resource with no retention policy can never be an erasure subject. See
|
|
2080
|
+
* {@link ResourceDataSubjectPolicy}.
|
|
2081
|
+
*/
|
|
2082
|
+
dataSubjectPolicy?: ResourceDataSubjectPolicy;
|
|
2083
|
+
/**
|
|
2084
|
+
* Resource-level DEFAULT provenance for GDPR Art. 20 (portability) scoping; per-field overrides
|
|
2085
|
+
* are `.portabilityProvenance()`. Optional — Art. 15 (access) never consults provenance, so an
|
|
2086
|
+
* application can answer access requests without declaring this. See
|
|
2087
|
+
* {@link ResourcePortabilityPolicy}.
|
|
2088
|
+
*/
|
|
2089
|
+
portabilityPolicy?: ResourcePortabilityPolicy;
|
|
644
2090
|
};
|
|
2091
|
+
/** @wildo_source:part:end saas.models.resource-config.builder-parameters */
|
|
645
2092
|
/**
|
|
2093
|
+
* @wildo_source:part:start saas.models.resource-config.resource-relationships-buckets facet:layer:shared facet:family:resource-config
|
|
2094
|
+
*
|
|
646
2095
|
* Categorized resource relationships produced by `transformResourceRelationships()`.
|
|
647
2096
|
*
|
|
648
2097
|
* All relationships — including conditional ones (those with `discriminator` or `condition`) —
|
|
@@ -668,6 +2117,7 @@ export type ResourceConfiguration_ResourceRelationships = {
|
|
|
668
2117
|
childRelationships: ResourceRelationship[];
|
|
669
2118
|
selfRelationships: ResourceRelationship[];
|
|
670
2119
|
};
|
|
2120
|
+
/** @wildo_source:part:end saas.models.resource-config.resource-relationships-buckets */
|
|
671
2121
|
/**
|
|
672
2122
|
* Returns all relationships where this resource acts as a child (has a parent).
|
|
673
2123
|
* Merges `childRelationships` with `selfRelationships` — self-refs are both
|
|
@@ -682,6 +2132,8 @@ export declare function getChildDirectionRelationships(rels: ResourceConfigurati
|
|
|
682
2132
|
*/
|
|
683
2133
|
export declare function getParentDirectionRelationships(rels: ResourceConfiguration_ResourceRelationships): ResourceRelationship[];
|
|
684
2134
|
/**
|
|
2135
|
+
* @wildo_source:part:start saas.models.resource-config.resource-configuration facet:layer:shared facet:family:resource-config
|
|
2136
|
+
*
|
|
685
2137
|
* Full resource configuration type.
|
|
686
2138
|
* NOTE: databaseSchema has been removed. Backend-only fields are now marked with
|
|
687
2139
|
* the isBackendOnly decorator in mainSchema and are stripped at the service layer.
|
|
@@ -704,9 +2156,52 @@ export type ResourceConfiguration<TCustomOperationEnum extends EnumLikeType | un
|
|
|
704
2156
|
* Resolved at runtime from:
|
|
705
2157
|
* 1. This field (if specified)
|
|
706
2158
|
* 2. `appConfig.database.defaultAdapter` (fallback)
|
|
2159
|
+
*
|
|
2160
|
+
* A value disagreeing with the application default is admitted at registration ONLY when
|
|
2161
|
+
* {@link ResourceConfiguration.persistenceAdapterIsolation} is declared beside it.
|
|
707
2162
|
*/
|
|
708
2163
|
persistenceAdapter?: PersistenceAdapterType;
|
|
2164
|
+
/**
|
|
2165
|
+
* This resource's declared relationship to cross-adapter atomic write boundaries; see the
|
|
2166
|
+
* authoring-side declaration and {@link ResourcePersistenceAdapterIsolation} for the full
|
|
2167
|
+
* rationale.
|
|
2168
|
+
*
|
|
2169
|
+
* Carried through to the resolved config UNMATERIALISED (no default is substituted) because
|
|
2170
|
+
* absence is semantically load-bearing here: the registry's admission asks whether the author
|
|
2171
|
+
* MADE the claim, and a materialised default would answer that question for them.
|
|
2172
|
+
*/
|
|
2173
|
+
persistenceAdapterIsolation?: ResourcePersistenceAdapterIsolationType;
|
|
2174
|
+
/**
|
|
2175
|
+
* The external HTTP-API binding — present exactly when `persistenceAdapter` is `HTTP_API`
|
|
2176
|
+
* (factory-enforced both ways). See the authoring-side declaration for the full contract.
|
|
2177
|
+
*/
|
|
2178
|
+
httpApiBinding?: HttpApiResourceBinding;
|
|
2179
|
+
/** REQUIRED when `persistenceAdapter` is INTROSPECTION; meaningless otherwise. */
|
|
2180
|
+
introspectionBinding?: IntrospectionResourceBinding;
|
|
2181
|
+
/**
|
|
2182
|
+
* The inbound ETL pipeline, when this LOCAL resource declared one — parsed + coherence-checked
|
|
2183
|
+
* by the factory (see the authoring-side declaration for the full contract).
|
|
2184
|
+
*/
|
|
2185
|
+
externalDataPipeline?: ExternalDataPipelineDeclaration;
|
|
709
2186
|
isSystemResource: boolean;
|
|
2187
|
+
/**
|
|
2188
|
+
* Whether this resource's own primary-key URL segment names the CALLER (see the authoring-side
|
|
2189
|
+
* declaration for the full rationale).
|
|
2190
|
+
*
|
|
2191
|
+
* Materialised by the factory to a concrete boolean, defaulting to `true`, so the consuming guard
|
|
2192
|
+
* never has to distinguish "declared true" from "not declared" — an un-migrated or hand-built
|
|
2193
|
+
* config keeps the identity-coherence refusal.
|
|
2194
|
+
*/
|
|
2195
|
+
primaryKeyIdentifiesInitiator: boolean;
|
|
2196
|
+
/**
|
|
2197
|
+
* Opt-in policy gating the ACL-bypassing `readAsSystem` / `listAsSystem`
|
|
2198
|
+
* primitives for this resource. Optional on the resolved config so that
|
|
2199
|
+
* non-factory-built configs (mocks/tests) need not declare it; the factory
|
|
2200
|
+
* always materialises a concrete value (defaulting both verbs to FORBIDDEN
|
|
2201
|
+
* when unauthored). The system-read primitives treat an absent policy — or
|
|
2202
|
+
* any verb not explicitly ALLOWED — as forbidden and throw.
|
|
2203
|
+
*/
|
|
2204
|
+
systemAccessPolicy?: ResourceSystemAccessPolicy;
|
|
710
2205
|
/**
|
|
711
2206
|
* W7.3a: Marks this resource as accessible to anonymous sessions.
|
|
712
2207
|
* When true, the engine generates dual URL paths and a STANDALONE relationship to ANONYMOUS_USERS.
|
|
@@ -717,17 +2212,80 @@ export type ResourceConfiguration<TCustomOperationEnum extends EnumLikeType | un
|
|
|
717
2212
|
* Only meaningful when isAnonymizable is true. Defaults to ADD.
|
|
718
2213
|
*/
|
|
719
2214
|
transpositionPolicy: ResourceTranspositionPolicy;
|
|
2215
|
+
/** Resolved impersonalization opt-in (undefined when the resource did not opt into `retentionPolicy`). */
|
|
2216
|
+
retentionPolicy?: ResourceRetentionPolicy;
|
|
2217
|
+
/**
|
|
2218
|
+
* Resolved data-subject declaration. Present exactly when `retentionPolicy` is (the factory refuses
|
|
2219
|
+
* a retention-governed resource that declares no `dataSubjectPolicy`, and refuses a
|
|
2220
|
+
* `dataSubjectPolicy` on a resource with no `retentionPolicy`), so a consumer that has one may read
|
|
2221
|
+
* the other without a second existence check.
|
|
2222
|
+
*/
|
|
2223
|
+
dataSubjectPolicy?: ResourceDataSubjectPolicy;
|
|
2224
|
+
/** Resolved portability default (undefined when the resource declared no `portabilityPolicy` — an
|
|
2225
|
+
* Art. 15 export is unaffected, an Art. 20 export refuses on any field that also lacks its own
|
|
2226
|
+
* `.portabilityProvenance()`). */
|
|
2227
|
+
portabilityPolicy?: ResourcePortabilityPolicy;
|
|
720
2228
|
operations: ResourceConfiguration_Operation<TCustomOperationEnum, TCoreOperationEnum, TMainSchema>[];
|
|
721
2229
|
};
|
|
2230
|
+
/** @wildo_source:part:end saas.models.resource-config.resource-configuration */
|
|
722
2231
|
export type ResourceConfiguration_InitializationFactory<TCustomOperationEnum extends EnumLikeType | undefined, TCoreOperationEnum extends Partial<CoreResourceOperation> | undefined, TMainSchema extends z.ZodTypeAny> = (resourcesRelationships: ResourceRelationship[]) => ResourceConfiguration<TCustomOperationEnum, TCoreOperationEnum, TMainSchema>;
|
|
2232
|
+
/**
|
|
2233
|
+
* The factory map accepted by the RUNTIME REGISTRY initializers
|
|
2234
|
+
* (`ResourcesRegistryBackendService.initialize`, `ResourceRegistry_InitializerParameters`).
|
|
2235
|
+
*
|
|
2236
|
+
* ⚠️ The leading `TResourceType extends undefined` conditional is DISTRIBUTIVE, and it must stay
|
|
2237
|
+
* that way. A registry initializer takes this map at a position whose type argument is INFERRED
|
|
2238
|
+
* from the argument, and inference only reaches the mapped-type branch through that distributive
|
|
2239
|
+
* chain. Prefixing the chain with a non-distributive guard (`[TResourceType] extends [never] ? …`)
|
|
2240
|
+
* stops the inference dead: every such parameter falls back to its `= undefined` default, so a
|
|
2241
|
+
* perfectly good map is reported as `not assignable to parameter of type 'undefined'`. That
|
|
2242
|
+
* shipped on 2026-08-26 and failed the compile of BOTH `platform-apps-manager` and
|
|
2243
|
+
* `platform-crontabs-batches-manager` — the only two runtimes that pass a typed custom map
|
|
2244
|
+
* positionally — while every other consumer stayed green because it passes `undefined` or a value
|
|
2245
|
+
* already widened by a cast.
|
|
2246
|
+
*
|
|
2247
|
+
* The consequence of the distribution is that a union `TResourceType` yields a UNION of
|
|
2248
|
+
* single-key maps rather than one complete map. That is weaker than it looks, and it is why a
|
|
2249
|
+
* module's OWN map uses {@link ResourceConfiguration_ModuleInitializationFactoryMap} instead —
|
|
2250
|
+
* including for the empty-module case (`never`), which this type deliberately does not model:
|
|
2251
|
+
* distributing over `never` yields `never`, and no ordering of distributive branches can change
|
|
2252
|
+
* that.
|
|
2253
|
+
*/
|
|
723
2254
|
export type ResourceConfiguration_InitializationFactoryMap<TResourceType extends ResourceType | undefined = undefined> = TResourceType extends undefined ? undefined : [TResourceType] extends [undefined] ? undefined : TResourceType extends ResourceType ? {
|
|
724
2255
|
[key in TResourceType]: ResourceConfiguration_InitializationFactory<any, any, any>;
|
|
725
2256
|
} : {
|
|
726
2257
|
[key: string]: ResourceConfiguration_InitializationFactory<any, any, any>;
|
|
727
2258
|
};
|
|
2259
|
+
/**
|
|
2260
|
+
* The factory map a MODULE declares for its OWN resources: exactly one entry per member of that
|
|
2261
|
+
* module's resource-type enum — no missing entry, no key the enum does not declare.
|
|
2262
|
+
*
|
|
2263
|
+
* This is a plain mapped type, with no conditional in front of it, and both of its properties
|
|
2264
|
+
* follow from that:
|
|
2265
|
+
*
|
|
2266
|
+
* - a union of enum members produces ONE complete map (not the union of single-key maps that
|
|
2267
|
+
* {@link ResourceConfiguration_InitializationFactoryMap} produces), which is the truthful
|
|
2268
|
+
* contract for a module: it owns all of its resources;
|
|
2269
|
+
* - a FRESHLY SCAFFOLDED module, whose resource enum has no members yet, produces the empty map
|
|
2270
|
+
* `{}`. A memberless enum is numeric by default, so the scaffold writes
|
|
2271
|
+
* `<Module>_ResourceType & string`, which is `never` until the first string member arrives —
|
|
2272
|
+
* and a mapped type over `never` is `{}`, so the empty declaration type-checks without any
|
|
2273
|
+
* `never` special case.
|
|
2274
|
+
*
|
|
2275
|
+
* The value is assignable to every consumer that takes the registry-facing map, so a module can be
|
|
2276
|
+
* merged into an application registry unchanged.
|
|
2277
|
+
*/
|
|
2278
|
+
export type ResourceConfiguration_ModuleInitializationFactoryMap<TResourceType extends ResourceType> = {
|
|
2279
|
+
[key in TResourceType]: ResourceConfiguration_InitializationFactory<any, any, any>;
|
|
2280
|
+
};
|
|
728
2281
|
export type AnyResourceConfiguration = ResourceConfiguration<any, // TCustomOperationEnum - allow any custom operations
|
|
729
2282
|
any, // TCoreOperationEnum - allow any subset of core operations
|
|
730
2283
|
any>;
|
|
2284
|
+
/**
|
|
2285
|
+
* @wildo_source:part:start saas.models.resource-config.resources-registry facet:layer:shared facet:family:resource-config
|
|
2286
|
+
*
|
|
2287
|
+
* Aggregated registry passed to app bootstrap (relationships + per-resource configs + FK maps).
|
|
2288
|
+
*/
|
|
731
2289
|
export type ResourcesRegistry = {
|
|
732
2290
|
notificationBadgeDefinitions: NotificationBadgeDefinition[];
|
|
733
2291
|
additionalUserNotificationDefinitions: UserNotificationDefinition[];
|
|
@@ -735,6 +2293,20 @@ export type ResourcesRegistry = {
|
|
|
735
2293
|
resourceConfigurations: {
|
|
736
2294
|
[key: ResourceType]: AnyResourceConfiguration;
|
|
737
2295
|
};
|
|
2296
|
+
/**
|
|
2297
|
+
* The resource types the APPLICATION registered — its own, never the engine's.
|
|
2298
|
+
*
|
|
2299
|
+
* The registry composes app and core factory maps into one `resourceConfigurations`, which is what
|
|
2300
|
+
* every runtime consumer wants. This is the one place the two are still distinguishable, so the
|
|
2301
|
+
* split is recorded HERE rather than re-derived by each consumer from a core key set — which would
|
|
2302
|
+
* be a second enumeration of a population this file already knows.
|
|
2303
|
+
*
|
|
2304
|
+
* Its consumer today is the personal-data declaration report, which asks a question only an
|
|
2305
|
+
* application author can act on: the engine declares its own posture on ~85 resources, and putting
|
|
2306
|
+
* those in front of a reader of a report about THEIR application is how a diagnostic channel stops
|
|
2307
|
+
* being read.
|
|
2308
|
+
*/
|
|
2309
|
+
applicationResourceTypes: ResourceType[];
|
|
738
2310
|
/**
|
|
739
2311
|
* Map of ResourceType to its standard field identifier (e.g., USERS -> userId).
|
|
740
2312
|
* Used for FK field resolution without string manipulation.
|
|
@@ -745,7 +2317,30 @@ export type ResourcesRegistry = {
|
|
|
745
2317
|
* Used for quick lookup of resource type from a FK field name.
|
|
746
2318
|
*/
|
|
747
2319
|
fieldIdentifierToResourceType: Record<string, ResourceType>;
|
|
2320
|
+
/**
|
|
2321
|
+
* Scope-required reference-search junctions, keyed by `${target}|${scope}`.
|
|
2322
|
+
* When a foreign key targets `T` from a resource whose primary scope is `S`,
|
|
2323
|
+
* and `T ↔ S` is a MANY-to-MANY relationship via junction `J`, a reference
|
|
2324
|
+
* people-picker searches `T` scoped to the caller's current `S` through `J`
|
|
2325
|
+
* (rather than enumerating every `T`). Derived from the registered M:N
|
|
2326
|
+
* relationships at registry init.
|
|
2327
|
+
*/
|
|
2328
|
+
manyToManyScopeJunctions: ManyToManyScopeJunctionMap;
|
|
2329
|
+
/**
|
|
2330
|
+
* Resources narrowed by ORGANIZATION UNIT, keyed by resource type — the engine's opt-ins merged
|
|
2331
|
+
* with the application's, validated at boot against the authorization-plane containment rule.
|
|
2332
|
+
*
|
|
2333
|
+
* Opting a resource in means: a principal whose authority for it comes ONLY from a unit grant is
|
|
2334
|
+
* admitted by the operation gate and then confined to the rows of those units. Narrowing is
|
|
2335
|
+
* ADDITIVE — an organization-wide grant that already satisfies the operation is never narrowed —
|
|
2336
|
+
* so opting in can only widen who can reach the resource, never shrink an existing result set.
|
|
2337
|
+
*
|
|
2338
|
+
* Empty for an application that declares none, which is the default: narrowing is never inferred
|
|
2339
|
+
* from the presence of a unit field. See `OrganizationUnitNarrowingDeclaration`.
|
|
2340
|
+
*/
|
|
2341
|
+
organizationUnitNarrowing: Readonly<Partial<Record<ResourceType, OrganizationUnitNarrowingDeclaration>>>;
|
|
748
2342
|
};
|
|
2343
|
+
/** @wildo_source:part:end saas.models.resource-config.resources-registry */
|
|
749
2344
|
export type ResourceRegistry_InitializerParameters<TResourceType extends ResourceType | undefined = undefined> = [
|
|
750
2345
|
TResourceType
|
|
751
2346
|
] extends [undefined] ? {
|