@wildo-ai/saas-backend-lib 1.1.2 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/__tests__/fixture-deep-partial.d.ts.map +1 -1
- package/dist/esm/__tests__/integration/redis-integration-gate.d.ts.map +1 -1
- package/dist/esm/__tests__/setup.d.ts.map +1 -1
- package/dist/esm/__tests__/test-container.d.ts.map +1 -1
- package/dist/esm/applications/models/applications.backend.schemas.d.ts.map +1 -1
- package/dist/esm/applications/seeds/application-metadata-defaults.seeds.d.ts.map +1 -1
- package/dist/esm/applications/services/worker-remote-client-factory.backend.service.d.ts.map +1 -1
- package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js +19 -1
- package/dist/esm/applications/services/worker-remote-client-factory.backend.service.js.map +1 -1
- package/dist/esm/base-classes/models/manual-controllers.backend.definition.d.ts.map +1 -1
- package/dist/esm/base-classes/models/manual-controllers.backend.definition.js +4 -0
- package/dist/esm/base-classes/models/manual-controllers.backend.definition.js.map +1 -1
- package/dist/esm/base-classes/models/repositories.backend.schemas.d.ts.map +1 -1
- package/dist/esm/base-classes/services/__tests__/mock-resource-operation-helper.service.d.ts +1 -1
- package/dist/esm/base-classes/services/__tests__/mock-resource-operation-helper.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/batches-cronjobs-custom-execution.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/batches-cronjobs-executor.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/batches-cronjobs-resource-execution.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts +35 -0
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js +111 -0
- package/dist/esm/base-classes/services/batches/child-lifecycle-teardown.batch.backend.service.js.map +1 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts +50 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js +210 -0
- package/dist/esm/base-classes/services/batches/credential-expiry-sweep.batch.backend.service.js.map +1 -0
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.d.ts +111 -0
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.js +140 -0
- package/dist/esm/base-classes/services/batches/engine-custom-batch-manifests.js.map +1 -1
- package/dist/esm/base-classes/services/batches/resource-retention-sweep.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/batches/suspension-reactivation-sweep.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/abstract-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js +27 -6
- package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/controllers/utils/audit-access-fields.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/utils/operation-response-serializer.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/controllers/validate-field-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/__tests__/method-span-scan.guard-helpers.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/__tests__/mock-repositories-registry-handler.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-filter-translation.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts +124 -13
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js +220 -25
- package/dist/esm/base-classes/services/repositories/http-api/http-api-provider-access.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-query.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts +60 -8
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js +191 -26
- package/dist/esm/base-classes/services/repositories/http-api/http-api-read-client.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts +47 -4
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js +96 -29
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts +55 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.d.ts.map +1 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js +114 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-rest-operation-reference.backend.js.map +1 -0
- package/dist/esm/base-classes/services/repositories/http-api/http-api-row-projection.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-subject-erasure-effect.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts +89 -14
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js +84 -11
- package/dist/esm/base-classes/services/repositories/http-api/http-api-transport.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/odoo-jsonrpc-compiler.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/rest-json-query-compiler.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js +9 -1
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts +106 -0
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js +266 -20
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js +23 -3
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-guarded-mutation.backend.types.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts +5 -2
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js +34 -3
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-version-metadata.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/resource-write-integrity.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/seed-row-default-materialization.backend.d.ts +72 -0
- package/dist/esm/base-classes/services/repositories/seed-row-default-materialization.backend.d.ts.map +1 -0
- package/dist/esm/base-classes/services/repositories/seed-row-default-materialization.backend.js +88 -0
- package/dist/esm/base-classes/services/repositories/seed-row-default-materialization.backend.js.map +1 -0
- package/dist/esm/base-classes/services/repositories/unique-constraint-conflict-reference.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/resource-operations-helper.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/__tests__/mock-services-registry-handler.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/__tests__/mock-system-access.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/read-only-field-change.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-audit-emission.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts +22 -0
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-base.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation.factory.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-server-injected-fields.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-transaction-persistence.backend.utils.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js +4 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts +11 -0
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js +39 -5
- package/dist/esm/base-classes/services/services/resource-status-transition.definitions.backend.js.map +1 -1
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts +181 -2
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js +571 -45
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts +36 -3
- package/dist/esm/base-classes/services/services/system-access.backend.service.d.ts.map +1 -1
- package/dist/esm/base-classes/services/services/system-access.backend.service.js +70 -8
- package/dist/esm/base-classes/services/services/system-access.backend.service.js.map +1 -1
- package/dist/esm/base-classes/utils/backend-type-utils.d.ts.map +1 -1
- package/dist/esm/base-classes/utils/single-subject-addressing.backend.utils.d.ts.map +1 -1
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts +28 -0
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js +90 -0
- package/dist/esm/billing/batches/billing-reconciliation.batch.backend.service.js.map +1 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts +44 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.d.ts.map +1 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.js +99 -0
- package/dist/esm/billing/batches/usage-flush.batch.backend.service.js.map +1 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts +91 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.d.ts.map +1 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js +152 -0
- package/dist/esm/billing/models/billing-provider-event-settlement.backend.schemas.js.map +1 -0
- package/dist/esm/billing/services/back-office/abstract-billing.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/billing-feature-sync.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts +186 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.d.ts.map +1 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js +475 -0
- package/dist/esm/billing/services/back-office/billing-reconciliation.backend.service.js.map +1 -0
- package/dist/esm/billing/services/back-office/billing-state.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/billing-state.backend.service.js +11 -1
- package/dist/esm/billing/services/back-office/billing-state.backend.service.js.map +1 -1
- package/dist/esm/billing/services/back-office/billing-subject-erasure-effect.backend.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts +100 -0
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js +209 -6
- package/dist/esm/billing/services/back-office/product-catalog-sync.backend.service.js.map +1 -1
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts +200 -4
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.js +593 -64
- package/dist/esm/billing/services/back-office/usage-metering.backend.service.js.map +1 -1
- package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts +36 -0
- package/dist/esm/billing/services/billing-adapter-registry.backend.d.ts.map +1 -0
- package/dist/esm/billing/services/billing-adapter-registry.backend.js +83 -0
- package/dist/esm/billing/services/billing-adapter-registry.backend.js.map +1 -0
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts +9 -0
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.d.ts.map +1 -1
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js +11 -1
- package/dist/esm/billing/services/billing-checkout-metadata.backend.utils.js.map +1 -1
- package/dist/esm/billing/services/billing.utils.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js +48 -7
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts +70 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js +98 -2
- package/dist/esm/billing/services/custom-impl/billing-custom-impl-utils.backend.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts +30 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js +43 -1
- package/dist/esm/billing/services/custom-impl/billing-custom-implementations.backend.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/credit-pool.custom-ops.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts +11 -3
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js +30 -16
- package/dist/esm/billing/services/custom-impl/promotion.custom-ops.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js +104 -25
- package/dist/esm/billing/services/custom-impl/subscription.mutations.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts +21 -1
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js +109 -2
- package/dist/esm/billing/services/stripe-standard-billing-provider.backend.service.js.map +1 -1
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts +52 -0
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.d.ts.map +1 -0
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js +74 -0
- package/dist/esm/billing/services/webhooks/__tests__/settlement-ledger.test-double.js.map +1 -0
- package/dist/esm/billing/services/webhooks/billing-webhook-adapter.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/webhooks/billing-webhook-capability-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts +104 -11
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.d.ts.map +1 -1
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js +310 -29
- package/dist/esm/billing/services/webhooks/billing-webhook-event-router.backend.service.js.map +1 -1
- package/dist/esm/billing/testing/billing-test-fixtures.d.ts.map +1 -1
- package/dist/esm/billing/testing/mock-billing-provider.d.ts +30 -1
- package/dist/esm/billing/testing/mock-billing-provider.d.ts.map +1 -1
- package/dist/esm/billing/testing/mock-billing-provider.js +25 -0
- package/dist/esm/billing/testing/mock-billing-provider.js.map +1 -1
- package/dist/esm/charts/controllers/chart.backend.controller.d.ts.map +1 -1
- package/dist/esm/charts/services/chart-registry.backend.service.d.ts +80 -7
- package/dist/esm/charts/services/chart-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/charts/services/chart-registry.backend.service.js +115 -8
- package/dist/esm/charts/services/chart-registry.backend.service.js.map +1 -1
- package/dist/esm/companion-exports.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/audit-logs.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js +11 -4
- package/dist/esm/compliance/audit-trails/batches/audit-logs-archive.batch.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/batches/immudb-audit-reconcile.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/batches/siem-webhook-delivery.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/__tests__/mock-audit-logs.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts +225 -13
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js +340 -62
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts +350 -10
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js +562 -10
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js +7 -1
- package/dist/esm/compliance/audit-trails/services/composite-audit-log-sink.backend.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts +6 -2
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js +31 -9
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts +42 -0
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js +57 -1
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts +110 -0
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.d.ts.map +1 -0
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js +192 -0
- package/dist/esm/compliance/audit-trails/services/utils/leased-value-cache.backend.utils.js.map +1 -0
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js +52 -0
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-class-mapping.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/siem-dictionary.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/siem-ocsf-projection.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/services/utils/siem-projection-contract.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/utils/audit-actor.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/audit-trails/utils/layer2-audit-provider-boot-diagnostic.backend.utils.d.ts.map +1 -1
- package/dist/esm/compliance/index.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/retention-hide-predicate.backend.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/services/subject-erasure-external-effects.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/privacy/services/subject-session-revocation.backend.service.d.ts.map +1 -1
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts +5 -0
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.d.ts.map +1 -1
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.js +6 -0
- package/dist/esm/config/bootstrap/application-runtime-profile.backend.js.map +1 -1
- package/dist/esm/config/bootstrap/minion-initialization-projection.backend.d.ts.map +1 -1
- package/dist/esm/config/bootstrap/runtime-principal-attestation.backend.service.d.ts.map +1 -1
- package/dist/esm/config/bootstrap/runtime-principal-attestation.backend.service.js +3 -0
- package/dist/esm/config/bootstrap/runtime-principal-attestation.backend.service.js.map +1 -1
- package/dist/esm/config/bootstrap/runtime-principal.backend.service.d.ts.map +1 -1
- package/dist/esm/config/custom/application-config-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/config/models/app-config-secrets.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/app-config.backend-authored.definitions.d.ts.map +1 -1
- package/dist/esm/config/models/app-config.backend.schemas.d.ts +145 -49
- package/dist/esm/config/models/app-config.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/app-config.backend.schemas.js +121 -12
- package/dist/esm/config/models/app-config.backend.schemas.js.map +1 -1
- package/dist/esm/config/models/app-env-config.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/apps-manager-transport.backend.definitions.d.ts +36 -0
- package/dist/esm/config/models/apps-manager-transport.backend.definitions.d.ts.map +1 -0
- package/dist/esm/config/models/apps-manager-transport.backend.definitions.js +36 -0
- package/dist/esm/config/models/apps-manager-transport.backend.definitions.js.map +1 -0
- package/dist/esm/config/models/config-mutation-boundary.utils.d.ts.map +1 -1
- package/dist/esm/config/models/postgresql-env-config.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts +38 -15
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js +17 -2
- package/dist/esm/config/models/provider-runtime-artifact.backend.schemas.js.map +1 -1
- package/dist/esm/config/models/runtime-topology.backend.contracts.d.ts.map +1 -1
- package/dist/esm/config/services/__tests__/mock-app-configuration.service.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts +0 -1
- package/dist/esm/config/services/app-configuration-loader.backend.service.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration-loader.backend.service.js +71 -76
- package/dist/esm/config/services/app-configuration-loader.backend.service.js.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.service.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.service.js +23 -1
- package/dist/esm/config/services/app-configuration.backend.service.js.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.utils.d.ts +33 -0
- package/dist/esm/config/services/app-configuration.backend.utils.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.utils.js +39 -1
- package/dist/esm/config/services/app-configuration.backend.utils.js.map +1 -1
- package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts +37 -0
- package/dist/esm/config/services/application-startup-config-validator.backend.service.d.ts.map +1 -1
- package/dist/esm/config/services/application-startup-config-validator.backend.service.js +69 -1
- package/dist/esm/config/services/application-startup-config-validator.backend.service.js.map +1 -1
- package/dist/esm/data-seeding/batches/data-seeding-run-cleanup.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/batches/data-seeding-scheduled-rerun.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/controllers/data-seeding-admin.backend.contracts.d.ts.map +1 -1
- package/dist/esm/data-seeding/controllers/data-seeding-admin.backend.controller.d.ts.map +1 -1
- package/dist/esm/data-seeding/data-seeding-models.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/business-key-resolver.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-execution-context.shared.types.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-migrator-runner.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-reconciler.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-row-metadata.shared.schemas.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-row-metadata.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-run.shared.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-run.shared.schemas.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed-trigger-mode-matrix.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/models/data-seed.shared.schemas.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/data-seed-application-bootstrap.backend.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/data-seed-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/data-seed-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/data-seed-scope-resolver-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/engines/additive-seed-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/engines/lazy-seed-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/engines/manual-seed-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/engines/sync-seed-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/engines/upgrade-seed-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-business-key.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-error.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-run-counters.shared.types.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-run-ledger.backend.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-scope-anchor.shared.types.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.d.ts.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-scope-resolution.backend.d.ts.map +1 -1
- package/dist/esm/databases/models/aggregation.backend.schemas.d.ts.map +1 -1
- package/dist/esm/databases/models/databases.backend.schemas.d.ts.map +1 -1
- package/dist/esm/databases/models/filter.backend.schemas.d.ts.map +1 -1
- package/dist/esm/databases/models/resolve-persistence-adapter.backend.utils.d.ts.map +1 -1
- package/dist/esm/databases/models/sql.backend.schemas.d.ts.map +1 -1
- package/dist/esm/databases/models/transaction.shared.schemas.d.ts.map +1 -1
- package/dist/esm/databases/services/__tests__/mock-mongo-transaction-registry.service.d.ts.map +1 -1
- package/dist/esm/databases/services/__tests__/mock-mongodb.service.d.ts.map +1 -1
- package/dist/esm/databases/services/__tests__/mock-mongoose-model.service.d.ts.map +1 -1
- package/dist/esm/databases/services/__tests__/mock-redis.service.d.ts.map +1 -1
- package/dist/esm/databases/services/__tests__/mock-zod-mongoose-schema-convertor.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/aggregation-query.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/computed-measure-evaluator.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/field-access-validator.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/time-series-densifier.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/topn-processor.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/aggregation/window-function-processor.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/db-utils.d.ts.map +1 -1
- package/dist/esm/databases/services/mongo-aggregation.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/mongodb.service.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-aggregation.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-database.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-development-provisioning.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-filter.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-migration-runner.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-ddl.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-migration-sql.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js +48 -0
- package/dist/esm/databases/services/postgresql-schema-plan-diff.backend.js.map +1 -1
- package/dist/esm/databases/services/postgresql-schema-plan-lockfile.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/redis.service.d.ts.map +1 -1
- package/dist/esm/databases/services/resource-persistence-unit-of-work.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/schema-planning-standalone.backend.d.ts.map +1 -1
- package/dist/esm/databases/services/zod-to-mongoose-schema-convertor.backend.service.d.ts.map +1 -1
- package/dist/esm/databases/services/zod-to-sql-hybrid-schema.planner.d.ts.map +1 -1
- package/dist/esm/databases/utils/postgresql-identifier.backend.utils.d.ts.map +1 -1
- package/dist/esm/errors/services/__tests__/mock-error-builder.service.d.ts.map +1 -1
- package/dist/esm/errors/services/error-builder.backend.service.d.ts +13 -1
- package/dist/esm/errors/services/error-builder.backend.service.d.ts.map +1 -1
- package/dist/esm/errors/services/error-builder.backend.service.js +13 -1
- package/dist/esm/errors/services/error-builder.backend.service.js.map +1 -1
- package/dist/esm/errors/services/error-handler.backend.service.d.ts +70 -7
- package/dist/esm/errors/services/error-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/errors/services/error-handler.backend.service.js +129 -8
- package/dist/esm/errors/services/error-handler.backend.service.js.map +1 -1
- package/dist/esm/errors/services/rate-limit.backend.service.d.ts +66 -0
- package/dist/esm/errors/services/rate-limit.backend.service.d.ts.map +1 -1
- package/dist/esm/errors/services/rate-limit.backend.service.js +102 -25
- package/dist/esm/errors/services/rate-limit.backend.service.js.map +1 -1
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts +5 -0
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.d.ts.map +1 -1
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js +25 -0
- package/dist/esm/errors/utils/error-log-level-classification.backend.utils.js.map +1 -1
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts +33 -0
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.d.ts.map +1 -1
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js +40 -0
- package/dist/esm/errors/utils/rate-limit-environment-relaxation.backend.utils.js.map +1 -1
- package/dist/esm/external-data/batches/external-data-pipeline-scheduled-run.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.d.ts.map +1 -1
- package/dist/esm/external-data/controllers/external-data-admin.backend.controller.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-extraction-source.backend.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-models.exports.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts +59 -2
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts.map +1 -1
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.js +52 -17
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.js.map +1 -1
- package/dist/esm/external-data/external-data-transform.backend.d.ts.map +1 -1
- package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/models/external-providers.backend.schemas.d.ts.map +1 -1
- package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts +4 -2
- package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.d.ts.map +1 -1
- package/dist/esm/external-providers/models/provider-selection-resolution-evidence.backend.definitions.js.map +1 -1
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts +306 -0
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js +379 -0
- package/dist/esm/external-providers/operations/provider-operation-executor.backend.service.js.map +1 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts +56 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.js +211 -0
- package/dist/esm/external-providers/operations/provider-operation-request.backend.js.map +1 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts +45 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.js +235 -0
- package/dist/esm/external-providers/operations/provider-request-signing.backend.js.map +1 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts +56 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.d.ts.map +1 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js +78 -0
- package/dist/esm/external-providers/operations/provider-rest-call-client.backend.js.map +1 -0
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts +1 -1
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js +2 -2
- package/dist/esm/external-providers/services/__tests__/mock-external-providers-registry.service.js.map +1 -1
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts +89 -0
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.d.ts.map +1 -0
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js +164 -0
- package/dist/esm/external-providers/services/backend-provider-loader.backend.service.js.map +1 -0
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts +26 -27
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js +50 -64
- package/dist/esm/external-providers/services/backend-provider-registry.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/document-extraction.backend.service.d.ts +81 -34
- package/dist/esm/external-providers/services/document-extraction.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/document-extraction.backend.service.js +181 -100
- package/dist/esm/external-providers/services/document-extraction.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/embeddings.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/embeddings.backend.service.js +4 -4
- package/dist/esm/external-providers/services/embeddings.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/external-api-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts +413 -7
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.js +684 -45
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.d.ts +15 -1
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js +84 -5
- package/dist/esm/external-providers/services/frontend-bootstrap.backend.service.js.map +1 -1
- package/dist/esm/features/controllers/features.backend.controller.d.ts.map +1 -1
- package/dist/esm/features/services/__tests__/mock-feature-definition-registry.service.d.ts.map +1 -1
- package/dist/esm/features/services/__tests__/mock-feature-resolution.service.d.ts.map +1 -1
- package/dist/esm/features/services/application-features-admin-write-path.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/features/services/feature-definition-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/features/services/feature-gate.backend.service.d.ts.map +1 -1
- package/dist/esm/features/services/feature-resolution.backend.service.d.ts.map +1 -1
- package/dist/esm/features/services/organization-features-admin-write-path.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/features/services/scope-feature-ledger-relationship.backend.utils.d.ts.map +1 -1
- package/dist/esm/features/services/scope-features-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/features/testing/feature-test-utils.d.ts.map +1 -1
- package/dist/esm/files/batches/files-cleanup.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/files/constraints/file-analyzers.types.d.ts.map +1 -1
- package/dist/esm/files/constraints/file-constraint-resolver-chain.backend.service.d.ts.map +1 -1
- package/dist/esm/files/constraints/file-constraint.types.d.ts.map +1 -1
- package/dist/esm/files/constraints/file-validation.backend.service.d.ts.map +1 -1
- package/dist/esm/files/constraints/resource-field-constraint-resolver.backend.service.d.ts.map +1 -1
- package/dist/esm/files/controllers/file.controller.d.ts.map +1 -1
- package/dist/esm/files/controllers/file.controller.js +21 -13
- package/dist/esm/files/controllers/file.controller.js.map +1 -1
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.d.ts.map +1 -1
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.js.map +1 -1
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts +37 -0
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js +260 -36
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js.map +1 -1
- package/dist/esm/files/scanning/clamav-scanner.backend.service.d.ts.map +1 -1
- package/dist/esm/files/scanning/file-scan.types.d.ts.map +1 -1
- package/dist/esm/files/scanning/yara-scanner.backend.service.d.ts.map +1 -1
- package/dist/esm/files/scanning/yara-scanner.backend.service.js +20 -2
- package/dist/esm/files/scanning/yara-scanner.backend.service.js.map +1 -1
- package/dist/esm/files/services/__tests__/mock-file-field-detection.service.d.ts.map +1 -1
- package/dist/esm/files/services/__tests__/mock-file-operation-handler.service.d.ts.map +1 -1
- package/dist/esm/files/services/__tests__/mock-file-repository.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-field-detection.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-operation-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-operation-handler.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-population.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-scanning.backend.service.d.ts +94 -9
- package/dist/esm/files/services/file-scanning.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-scanning.backend.service.js +202 -17
- package/dist/esm/files/services/file-scanning.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-text-extraction.backend.service.d.ts +60 -1
- package/dist/esm/files/services/file-text-extraction.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-text-extraction.backend.service.js +175 -13
- package/dist/esm/files/services/file-text-extraction.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-upload-grant.backend.service.d.ts +53 -2
- package/dist/esm/files/services/file-upload-grant.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/file-upload-grant.backend.service.js +127 -3
- package/dist/esm/files/services/file-upload-grant.backend.service.js.map +1 -1
- package/dist/esm/files/services/files.backend.service.d.ts +68 -0
- package/dist/esm/files/services/files.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/files.backend.service.js +177 -5
- package/dist/esm/files/services/files.backend.service.js.map +1 -1
- package/dist/esm/files/services/rag-source-field-detection.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts +109 -0
- package/dist/esm/files/storage/application-storage-key.backend.utils.d.ts.map +1 -0
- package/dist/esm/files/storage/application-storage-key.backend.utils.js +123 -0
- package/dist/esm/files/storage/application-storage-key.backend.utils.js.map +1 -0
- package/dist/esm/files/storage/file-storage-path-resolver.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/file-storage-provider.types.d.ts +52 -11
- package/dist/esm/files/storage/file-storage-provider.types.d.ts.map +1 -1
- package/dist/esm/files/storage/file-storage-provider.types.js.map +1 -1
- package/dist/esm/files/storage/file-storage-router.backend.service.d.ts +21 -3
- package/dist/esm/files/storage/file-storage-router.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/file-storage-router.backend.service.js +38 -5
- package/dist/esm/files/storage/file-storage-router.backend.service.js.map +1 -1
- package/dist/esm/files/storage/google-drive-storage-provider.backend.service.d.ts +87 -0
- package/dist/esm/files/storage/google-drive-storage-provider.backend.service.d.ts.map +1 -0
- package/dist/esm/files/storage/google-drive-storage-provider.backend.service.js +340 -0
- package/dist/esm/files/storage/google-drive-storage-provider.backend.service.js.map +1 -0
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts +67 -8
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js +101 -28
- package/dist/esm/files/storage/local-directory-storage-provider.backend.service.js.map +1 -1
- package/dist/esm/files/storage/storage-credential-provider.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/storage/storage-platform-sts-credential-resolver.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/storage/storage-sts-credential-resolver.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/storage/storage-sts-credential-resolver.backend.utils.js +10 -3
- package/dist/esm/files/storage/storage-sts-credential-resolver.backend.utils.js.map +1 -1
- package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.d.ts.map +1 -1
- package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js +8 -55
- package/dist/esm/files/storage/wildo-managed-storage-provider.backend.service.js.map +1 -1
- package/dist/esm/files/utils/file-field-schema-path.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/file-field-schema-path.backend.utils.js +20 -0
- package/dist/esm/files/utils/file-field-schema-path.backend.utils.js.map +1 -1
- package/dist/esm/files/utils/file-upload.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/file-uploader.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/file-uploader.utils.js.map +1 -1
- package/dist/esm/files/utils/file-validation.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/image-derivation.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/image-thumbnail.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts +86 -0
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.d.ts.map +1 -0
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js +288 -0
- package/dist/esm/files/utils/office-document-text-extraction.backend.utils.js.map +1 -0
- package/dist/esm/files/utils/rag-source-field-schema-path.backend.utils.d.ts.map +1 -1
- package/dist/esm/files/utils/storage-application-identity.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts +15 -0
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js +76 -5
- package/dist/esm/flows-actors/a2a/batches/a2a-abandoned-task-sweep.batch.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/batches/a2a-push-delivery.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/controllers/a2a.controller.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js +6 -1
- package/dist/esm/flows-actors/a2a/controllers/a2a.controller.js.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a-dialect.backend.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a-push-notification-delivery.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a-push-notification.backend.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts +60 -0
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js +63 -0
- package/dist/esm/flows-actors/a2a/models/a2a.backend.schemas.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-push-delivery-log.repository.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-push-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts +74 -0
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js +196 -40
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts +7 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js +53 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts +18 -0
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js +18 -0
- package/dist/esm/flows-actors/a2a/services/a2a-token-budget.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts +12 -7
- package/dist/esm/flows-actors/a2a/services/a2a.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/controllers/flows-actors.controller.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts +0 -13
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js +14 -22
- package/dist/esm/flows-actors/models/agent-catalogs.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/agent-facets.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/agents.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts +8 -3
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.js +25 -15
- package/dist/esm/flows-actors/models/core-facets.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts +13 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.schemas.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/flows-actors.backend.schemas.js.map +1 -1
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts +179 -8
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.js +436 -34
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.d.ts.map +1 -1
- package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js +4 -2
- package/dist/esm/flows-actors/models/market-generation.actors-system.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts +113 -0
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.d.ts.map +1 -0
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js +62 -0
- package/dist/esm/flows-actors/models/mcp-client.backend.definitions.js.map +1 -0
- package/dist/esm/flows-actors/services/__tests__/fixtures/meta-workflow-evaluation-treatment.test-fixture.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/actors-system.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/actors-system.backend.service.js +0 -2
- package/dist/esm/flows-actors/services/actors-system.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/agent-call-trace-sink.backend.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/agent-facets.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/agents.backend.service.d.ts +132 -6
- package/dist/esm/flows-actors/services/agents.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/agents.backend.service.js +467 -49
- package/dist/esm/flows-actors/services/agents.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/context-curation.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts +50 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.js +270 -20
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts +34 -5
- package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/flows-actors-registry.service.js +154 -20
- package/dist/esm/flows-actors/services/flows-actors-registry.service.js.map +1 -1
- package/dist/esm/flows-actors/services/flows.backend.services.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/flows.backend.services.js +27 -23
- package/dist/esm/flows-actors/services/flows.backend.services.js.map +1 -1
- package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js +7 -1
- package/dist/esm/flows-actors/services/llm-observability-agent-call-trace-sink.backend.js.map +1 -1
- package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts +90 -0
- package/dist/esm/flows-actors/services/mcp-client.backend.service.d.ts.map +1 -0
- package/dist/esm/flows-actors/services/mcp-client.backend.service.js +371 -0
- package/dist/esm/flows-actors/services/mcp-client.backend.service.js.map +1 -0
- package/dist/esm/flows-actors/services/mcp-credential-resolver.backend.service.d.ts +99 -0
- package/dist/esm/flows-actors/services/mcp-credential-resolver.backend.service.d.ts.map +1 -0
- package/dist/esm/flows-actors/services/mcp-credential-resolver.backend.service.js +155 -0
- package/dist/esm/flows-actors/services/mcp-credential-resolver.backend.service.js.map +1 -0
- package/dist/esm/flows-actors/services/meta-workflow-evaluation-treatment-compiler.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/meta-workflow-standard-action-contracts.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/meta-workflow-standard-evaluation-contracts.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/meta-workflow-structured-artifact-action-compiler.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts +9 -5
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js +12 -17
- package/dist/esm/flows-actors/services/prompt-compiler.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js +17 -4
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js.map +1 -1
- package/dist/esm/flows-actors/utils/bounded-subprocess.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/flows-actors-frontend-extractor.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts +0 -207
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js +8 -243
- package/dist/esm/flows-actors/utils/meta-workflow-canonical-json.backend.utils.js.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/meta-workflow-structured-generation-plan.backend.utils.js.map +1 -1
- package/dist/esm/flows-actors/utils/prompt-ir-adapters.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/utils/tool-approval-modification.backend.utils.d.ts +77 -0
- package/dist/esm/flows-actors/utils/tool-approval-modification.backend.utils.d.ts.map +1 -0
- package/dist/esm/flows-actors/utils/tool-approval-modification.backend.utils.js +164 -0
- package/dist/esm/flows-actors/utils/tool-approval-modification.backend.utils.js.map +1 -0
- package/dist/esm/flows-actors/utils/tool-approval-signing.backend.utils.d.ts +48 -0
- package/dist/esm/flows-actors/utils/tool-approval-signing.backend.utils.d.ts.map +1 -0
- package/dist/esm/flows-actors/utils/tool-approval-signing.backend.utils.js +101 -0
- package/dist/esm/flows-actors/utils/tool-approval-signing.backend.utils.js.map +1 -0
- package/dist/esm/guidance/batches/dormancy-detection.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/guidance-trigger-evaluator.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/lifecycle-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/guidance/services/lifecycle-evaluator.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/lifecycle-scope-id.backend.utils.d.ts.map +1 -1
- package/dist/esm/guidance/services/milestone-condition-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/milestone-definition-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts +9 -14
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.d.ts.map +1 -1
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.js +18 -89
- package/dist/esm/guidance/services/milestone-evaluator.backend.service.js.map +1 -1
- package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts +86 -0
- package/dist/esm/guidance/services/progression-state-store.backend.service.d.ts.map +1 -0
- package/dist/esm/guidance/services/progression-state-store.backend.service.js +155 -0
- package/dist/esm/guidance/services/progression-state-store.backend.service.js.map +1 -0
- package/dist/esm/guidance/services/scoped-state-read-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts +10 -0
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.js +55 -5
- package/dist/esm/i18n/controllers/i18n-controller.backend.service.js.map +1 -1
- package/dist/esm/i18n/services/i18n.backend.service.d.ts.map +1 -1
- package/dist/esm/index.d.ts +11 -5
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +31 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/inject/models/container.d.ts +10 -0
- package/dist/esm/inject/models/container.d.ts.map +1 -1
- package/dist/esm/inject/models/container.js +126 -10
- package/dist/esm/inject/models/container.js.map +1 -1
- package/dist/esm/inject/models/service-types.d.ts +20 -3
- package/dist/esm/inject/models/service-types.d.ts.map +1 -1
- package/dist/esm/inject/models/service-types.js +22 -3
- package/dist/esm/inject/models/service-types.js.map +1 -1
- package/dist/esm/mcp/controllers/mcp.controller.d.ts.map +1 -1
- package/dist/esm/mcp/controllers/mcp.controller.js +70 -3
- package/dist/esm/mcp/controllers/mcp.controller.js.map +1 -1
- package/dist/esm/mcp/models/mcp-protocol.backend.schemas.d.ts.map +1 -1
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.d.ts.map +1 -1
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.js.map +1 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.d.ts +56 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.d.ts.map +1 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.js +107 -11
- package/dist/esm/mcp/services/mcp-server.backend.service.js.map +1 -1
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.d.ts.map +1 -1
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js +22 -0
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js.map +1 -1
- package/dist/esm/mcp/services/resource-server-instances-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/mcp/utils/zod-to-mcp-json-schema.backend.utils.d.ts.map +1 -1
- package/dist/esm/meta-workflow-runtime.exports.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js +49 -4
- package/dist/esm/monitoring/analytics/controllers/analytics.backend.controller.js.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts +66 -0
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.d.ts.map +1 -0
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js +199 -0
- package/dist/esm/monitoring/analytics/services/value-moment-definition-registry.backend.service.js.map +1 -0
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts +149 -13
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js +411 -19
- package/dist/esm/monitoring/analytics/services/value-moment-engine.backend.service.js.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts +11 -2
- package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/monitoring/analytics/services/value-moment-handler-registry.backend.service.js.map +1 -1
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts +28 -9
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.d.ts.map +1 -1
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.js +30 -10
- package/dist/esm/monitoring/logger/models/logger.backend.schemas.js.map +1 -1
- package/dist/esm/monitoring/logger/services/__tests__/mock-logger.service.d.ts.map +1 -1
- package/dist/esm/monitoring/logger/services/logger.service.d.ts +24 -0
- package/dist/esm/monitoring/logger/services/logger.service.d.ts.map +1 -1
- package/dist/esm/monitoring/logger/services/logger.service.js +52 -11
- package/dist/esm/monitoring/logger/services/logger.service.js.map +1 -1
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts +62 -0
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.d.ts.map +1 -0
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js +78 -0
- package/dist/esm/monitoring/logger/utils/log-severity-floor.backend.utils.js.map +1 -0
- package/dist/esm/monitoring/logger/utils/log-value-normalization.backend.utils.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts +313 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.d.ts.map +1 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.js +389 -0
- package/dist/esm/monitoring/observability/audit-observation-emission.backend.js.map +1 -0
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts +1 -0
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.js.map +1 -1
- package/dist/esm/monitoring/observability/otel-preload.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/otel-sdk-global-handle.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/services/__tests__/mock-metrics.service.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/services/metrics.service.d.ts +21 -0
- package/dist/esm/monitoring/observability/services/metrics.service.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/services/metrics.service.js +38 -0
- package/dist/esm/monitoring/observability/services/metrics.service.js.map +1 -1
- package/dist/esm/monitoring/observability/services/observability.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/components/email-components.d.ts.map +1 -1
- package/dist/esm/notifications/email/models/email-template-definition.d.ts.map +1 -1
- package/dist/esm/notifications/email/models/email-transport.backend.definitions.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email-batch-send.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts +66 -1
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.js +105 -10
- package/dist/esm/notifications/email/services/email-template-registry.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/services/email-template-validator.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email-template-validator.backend.service.js +10 -1
- package/dist/esm/notifications/email/services/email-template-validator.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/services/email.backend.service.d.ts +102 -5
- package/dist/esm/notifications/email/services/email.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/email/services/email.backend.service.js +222 -70
- package/dist/esm/notifications/email/services/email.backend.service.js.map +1 -1
- package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts +0 -1
- package/dist/esm/notifications/email/utils/color-conversion.utils.d.ts.map +1 -1
- package/dist/esm/notifications/email/utils/color-conversion.utils.js.map +1 -1
- package/dist/esm/notifications/email/utils/interpolate-email-label.utils.d.ts.map +1 -1
- package/dist/esm/notifications/email/utils/zod-to-typescript.utils.d.ts.map +1 -1
- package/dist/esm/notifications/services/notification-badge.backend.service.d.ts +142 -21
- package/dist/esm/notifications/services/notification-badge.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/services/notification-badge.backend.service.js +283 -58
- package/dist/esm/notifications/services/notification-badge.backend.service.js.map +1 -1
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts +99 -13
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js +422 -66
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js.map +1 -1
- package/dist/esm/notifications/sms/models/sms-transport.backend.definitions.d.ts +32 -0
- package/dist/esm/notifications/sms/models/sms-transport.backend.definitions.d.ts.map +1 -0
- package/dist/esm/notifications/sms/models/sms-transport.backend.definitions.js +32 -0
- package/dist/esm/notifications/sms/models/sms-transport.backend.definitions.js.map +1 -0
- package/dist/esm/notifications/sms/services/sms.backend.service.d.ts +64 -10
- package/dist/esm/notifications/sms/services/sms.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/sms/services/sms.backend.service.js +277 -82
- package/dist/esm/notifications/sms/services/sms.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts +117 -5
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js +164 -6
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts +0 -6
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js +46 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js +16 -6
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/m2m-webhook-delivery-log.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/m2m-webhook-delivery-log.repository.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/m2m-webhook-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-public-key.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js +12 -12
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/services/polymorphic-lookup.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts +16 -0
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js +18 -0
- package/dist/esm/notifications/webhooks/services/webhook-handler.backend.service.js.map +1 -1
- package/dist/esm/organizations/batches/organization-member-invitation-sweep.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.d.ts +2 -2
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js +2 -2
- package/dist/esm/organizations/batches/organization-purge.batch.backend.service.js.map +1 -1
- package/dist/esm/organizations/services/authority-change-audit.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/invitation-acceptance.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/org-creation-on-registration.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/org-member-roles-validation.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js +63 -2
- package/dist/esm/organizations/services/organization-custom-implementation.backend.service.js.map +1 -1
- package/dist/esm/organizations/services/organization-deletion-audit.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-member-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-onboarding-operation.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/organization-unit-member-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/organizations/services/scim-provisioning-gate.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/user-org-type-grant.backend.utils.d.ts.map +1 -1
- package/dist/esm/organizations/services/user-type-revocation-on-org-leave.backend.utils.d.ts.map +1 -1
- package/dist/esm/pdf-templates/__tests__/fixtures/tiny-pdf-template.fixture.d.ts.map +1 -1
- package/dist/esm/pdf-templates/models/pdf-template-binding.d.ts.map +1 -1
- package/dist/esm/pdf-templates/models/pdf-template-definition.d.ts.map +1 -1
- package/dist/esm/pdf-templates/services/pdf-generated-file-writer.backend.service.d.ts.map +1 -1
- package/dist/esm/pdf-templates/services/pdf-generation-orchestrator.backend.service.d.ts.map +1 -1
- package/dist/esm/pdf-templates/services/pdf-renderer.backend.service.d.ts.map +1 -1
- package/dist/esm/pdf-templates/services/pdf-template-binding.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts +66 -0
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.d.ts.map +1 -0
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js +257 -0
- package/dist/esm/queue/adapters/in-memory-queue-adapter.backend.service.js.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts +12 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.d.ts.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.js +47 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.binding.js.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts +87 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.d.ts.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.js +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.interface.js.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts +31 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.d.ts.map +1 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.js +13 -0
- package/dist/esm/queue/adapters/queue-adapter.backend.options.js.map +1 -0
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts +19 -25
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js +33 -0
- package/dist/esm/queue/adapters/rabbitmq-adapter.backend.service.js.map +1 -1
- package/dist/esm/queue/apps-crontabs-manager.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/cron-job-sync.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts +2 -2
- package/dist/esm/queue/domain-queue-consumer.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/domain-queue-consumer.backend.service.js +1 -4
- package/dist/esm/queue/domain-queue-consumer.backend.service.js.map +1 -1
- package/dist/esm/queue/job-completion-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/job-consumer.backend.service.d.ts +2 -2
- package/dist/esm/queue/job-consumer.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/job-consumer.backend.service.js +1 -4
- package/dist/esm/queue/job-consumer.backend.service.js.map +1 -1
- package/dist/esm/queue/job-executor.backend.service.d.ts +2 -2
- package/dist/esm/queue/job-executor.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/job-executor.backend.service.js +1 -4
- package/dist/esm/queue/job-executor.backend.service.js.map +1 -1
- package/dist/esm/queue/job-payload-storage.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/job-status-tracking.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue-monitoring.backend.service.d.ts +8 -4
- package/dist/esm/queue/queue-monitoring.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue-monitoring.backend.service.js +25 -17
- package/dist/esm/queue/queue-monitoring.backend.service.js.map +1 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts +16 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.js +16 -1
- package/dist/esm/queue/queue-worker-initializer.backend.service.js.map +1 -1
- package/dist/esm/queue/queue.backend.service.d.ts +3 -3
- package/dist/esm/queue/queue.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/queue.backend.service.js +26 -4
- package/dist/esm/queue/queue.backend.service.js.map +1 -1
- package/dist/esm/queue/scheduled-message-verifier.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts +2 -2
- package/dist/esm/queue/worker-shutdown-manager.backend.service.d.ts.map +1 -1
- package/dist/esm/queue/worker-shutdown-manager.backend.service.js +18 -3
- package/dist/esm/queue/worker-shutdown-manager.backend.service.js.map +1 -1
- package/dist/esm/rag/batches/rag-embedding-drain.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/batches/rag-reconciliation-sweep.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/models/rag-chunk-store.backend.types.d.ts.map +1 -1
- package/dist/esm/rag/models/rag-retrieval.backend.types.d.ts.map +1 -1
- package/dist/esm/rag/services/mongodb-rag-chunk-store.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/services/postgresql-rag-chunk-store.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-chunk-collection.mongodb-ddl.backend.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-chunk-retrieval.mongodb-query.backend.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-chunk-retrieval.postgresql-query.backend.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-chunk-store.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-chunk-table.postgresql-ddl.backend.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-ingestion.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/services/rag-retrieval.backend.service.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-chunk-fusion.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-chunk-removal.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-chunk-row-shaping.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts +50 -25
- package/dist/esm/rag/utils/rag-chunking.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-chunking.backend.utils.js +147 -39
- package/dist/esm/rag/utils/rag-chunking.backend.utils.js.map +1 -1
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts +12 -3
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js +12 -3
- package/dist/esm/rag/utils/rag-context-assembly.backend.utils.js.map +1 -1
- package/dist/esm/rag/utils/rag-ingestion-trigger.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-retrieval-scope.backend.utils.d.ts.map +1 -1
- package/dist/esm/rag/utils/rag-source-field-value.backend.utils.d.ts.map +1 -1
- package/dist/esm/requests/models/api-routes.backend.defintions.d.ts.map +1 -1
- package/dist/esm/requests/models/requests.backend.schemas.d.ts.map +1 -1
- package/dist/esm/requests/service/platform-mutualized-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/requests/service/platform-requests.backend.utils.d.ts.map +1 -1
- package/dist/esm/requests/service/remote-client-base.backend.service.d.ts.map +1 -1
- package/dist/esm/requests/service/serverless-services-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/requests/service/websocket.service.d.ts +9 -0
- package/dist/esm/requests/service/websocket.service.d.ts.map +1 -1
- package/dist/esm/requests/service/websocket.service.js +81 -9
- package/dist/esm/requests/service/websocket.service.js.map +1 -1
- package/dist/esm/resources/backend-resource-registry.exports.d.ts.map +1 -1
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.d.ts.map +1 -1
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.js +16 -2
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.js.map +1 -1
- package/dist/esm/resources/models/index.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-operations.backend.definitions.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-operations.backend.definitions.js +2 -0
- package/dist/esm/resources/models/resources-operations.backend.definitions.js.map +1 -1
- package/dist/esm/resources/models/resources-relationships.backend.definitions.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-relationships.backend.definitions.js +14 -0
- package/dist/esm/resources/models/resources-relationships.backend.definitions.js.map +1 -1
- package/dist/esm/resources/models/resources-types.backend.schemas.d.ts +2 -1
- package/dist/esm/resources/models/resources-types.backend.schemas.d.ts.map +1 -1
- package/dist/esm/resources/models/resources-types.backend.schemas.js +8 -0
- package/dist/esm/resources/models/resources-types.backend.schemas.js.map +1 -1
- package/dist/esm/resources/models/resources.backend.schemas.d.ts.map +1 -1
- package/dist/esm/resources/models/virtual-fields.backend.types.d.ts.map +1 -1
- package/dist/esm/resources/services/__tests__/mock-resources-registry.service.d.ts.map +1 -1
- package/dist/esm/resources/services/resource-context.backend.service.d.ts.map +1 -1
- package/dist/esm/resources/services/resource-id.backend.service.d.ts.map +1 -1
- package/dist/esm/resources/services/resource-population.backend.service.d.ts +17 -2
- package/dist/esm/resources/services/resource-population.backend.service.d.ts.map +1 -1
- package/dist/esm/resources/services/resource-population.backend.service.js +74 -18
- package/dist/esm/resources/services/resource-population.backend.service.js.map +1 -1
- package/dist/esm/resources/services/resources-registry.backend.service.d.ts +83 -5
- package/dist/esm/resources/services/resources-registry.backend.service.d.ts.map +1 -1
- package/dist/esm/resources/services/resources-registry.backend.service.js +121 -6
- package/dist/esm/resources/services/resources-registry.backend.service.js.map +1 -1
- package/dist/esm/resources/services/virtual-fields.backend.service.d.ts.map +1 -1
- package/dist/esm/resources/utils/resource-retention.backend.utils.d.ts.map +1 -1
- package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts +36 -3
- package/dist/esm/runtime/controllers/health-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/controllers/health-controller.backend.service.js +32 -10
- package/dist/esm/runtime/controllers/health-controller.backend.service.js.map +1 -1
- package/dist/esm/runtime/domain-module.backend.definitions.d.ts +24 -0
- package/dist/esm/runtime/domain-module.backend.definitions.d.ts.map +1 -1
- package/dist/esm/runtime/domain-module.backend.definitions.js +24 -0
- package/dist/esm/runtime/domain-module.backend.definitions.js.map +1 -1
- package/dist/esm/runtime/models/execution-context.backend.schemas.d.ts.map +1 -1
- package/dist/esm/runtime/models/request-context.als.backend.d.ts.map +1 -1
- package/dist/esm/runtime/models/runtime.backend.schemas.d.ts.map +1 -1
- package/dist/esm/runtime/services/execution-context-creator.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/execution-context-creator.backend.service.js.map +1 -1
- package/dist/esm/runtime/services/execution-context-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts +51 -0
- package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.d.ts.map +1 -1
- package/dist/esm/runtime/services/health-readiness-contributor.backend.interface.js.map +1 -1
- package/dist/esm/runtime/services/http-server.backend.service.d.ts +26 -0
- package/dist/esm/runtime/services/http-server.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/http-server.backend.service.js +191 -1
- package/dist/esm/runtime/services/http-server.backend.service.js.map +1 -1
- package/dist/esm/runtime/services/start-application.backend.service.d.ts +19 -1
- package/dist/esm/runtime/services/start-application.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/start-application.backend.service.js +287 -89
- package/dist/esm/runtime/services/start-application.backend.service.js.map +1 -1
- package/dist/esm/runtime/services/utils/oauth-body-cap.backend.utils.d.ts.map +1 -1
- package/dist/esm/runtime/testing/execution-context-test-fixtures.d.ts.map +1 -1
- package/dist/esm/runtime/testing/mock-execution-context-creator.service.d.ts.map +1 -1
- package/dist/esm/runtime/utils/application-startup-config-access.backend.utils.d.ts.map +1 -1
- package/dist/esm/runtime/utils/feature-gated-core-resource-exclusions.backend.utils.d.ts.map +1 -1
- package/dist/esm/runtime/utils/request-client-ip.utils.d.ts.map +1 -1
- package/dist/esm/runtime/utils/scan-default-exports.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-key-generation.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts +15 -0
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js +28 -0
- package/dist/esm/security/api-keys/api-keys.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts +5 -1
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js +24 -4
- package/dist/esm/security/authentications/batches/anonymous-session-cleanup.batch.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/controllers/auth-method-management-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.d.ts +22 -0
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js +113 -4
- package/dist/esm/security/authentications/controllers/authentication-controller.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts +114 -0
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js +354 -3
- package/dist/esm/security/authentications/controllers/oauth-provider-controller.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/models/auth-constants.backend.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/authentications.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/authorization-client.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts +1 -0
- package/dist/esm/security/authentications/models/cimd.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/cimd.backend.schemas.js +22 -0
- package/dist/esm/security/authentications/models/cimd.backend.schemas.js.map +1 -1
- package/dist/esm/security/authentications/models/federated-auth-transport.backend.definitions.d.ts +37 -0
- package/dist/esm/security/authentications/models/federated-auth-transport.backend.definitions.d.ts.map +1 -0
- package/dist/esm/security/authentications/models/federated-auth-transport.backend.definitions.js +37 -0
- package/dist/esm/security/authentications/models/federated-auth-transport.backend.definitions.js.map +1 -0
- package/dist/esm/security/authentications/models/identity-persistence-boundaries.backend.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/jwt.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts +30 -0
- package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/oauth2-connection.backend.schemas.js.map +1 -1
- package/dist/esm/security/authentications/models/saml-authentication.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/sso-connection.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/user-authorization-version.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/seeds/enterprise-config-defaults.seeds.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/__tests__/mock-auth-execution-context-factory.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/__tests__/mock-auth-token-issuer.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/__tests__/oauth-provider-audit-spies.mock.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/__tests__/mock-domain-to-org-lookup.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/__tests__/mock-enterprise-user-provisioning.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts +0 -2
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js +23 -14
- package/dist/esm/security/authentications/services/admin-config/auth-organization-configuration.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts +0 -1
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js +15 -12
- package/dist/esm/security/authentications/services/admin-config/domain-to-org-lookup.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts +113 -3
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js +207 -30
- package/dist/esm/security/authentications/services/admin-config/domain-verification.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts +95 -2
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js +153 -9
- package/dist/esm/security/authentications/services/admin-config/enterprise-user-provisioning.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/oidc-discovery.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/admin-config/oidc-discovery.backend.service.js +2 -1
- package/dist/esm/security/authentications/services/admin-config/oidc-discovery.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts +197 -0
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.js +384 -53
- package/dist/esm/security/authentications/services/anonymous-session.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-credential-verifier.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-execution-context-factory.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js +68 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-password-reset.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-phone-verification.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts +41 -0
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js +202 -23
- package/dist/esm/security/authentications/services/auth-methods/auth-registration.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.d.ts +97 -0
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js +260 -27
- package/dist/esm/security/authentications/services/auth-methods/oauth2-authentication.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.d.ts +14 -0
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js +70 -4
- package/dist/esm/security/authentications/services/auth-methods/oauth2-connection-resolver.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/saml-assertion-validator.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/saml-authentication.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/saml-metadata.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/saml-replay-guard.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts +29 -5
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js +77 -5
- package/dist/esm/security/authentications/services/auth-methods/webauthn.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-session-store.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts +17 -1
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js +49 -17
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts +43 -1
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js +277 -97
- package/dist/esm/security/authentications/services/authentication-orchestrator.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts +28 -5
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js +72 -12
- package/dist/esm/security/authentications/services/cimd-client-metadata.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js +3 -0
- package/dist/esm/security/authentications/services/custom-impls/auth-custom-implementations.backend.js.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/scim-tokens.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/siem-delivery-dlq.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts +28 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js +339 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts +4 -3
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js +4 -3
- package/dist/esm/security/authentications/services/custom-impls/sso-config.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-connection.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-connection.custom-impl.backend.service.js +11 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-connection.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/email-verification-initiator.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/machine-token-issuer.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts +35 -0
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js +111 -21
- package/dist/esm/security/authentications/services/oauth-provider-token.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts +14 -1
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js +49 -8
- package/dist/esm/security/authentications/services/oidc-authorization-code.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/oidc-user-claims.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/resolve-active-member-orgs.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/__tests__/mock-auth-user-lookup.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-controller.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-credential-ops.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js +4 -0
- package/dist/esm/security/authentications/services/utils/auth-policy-resolution.backend.utils.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-response-helper.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js +6 -0
- package/dist/esm/security/authentications/services/utils/auth-user-lookup.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/concurrent-session-eviction.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/ensure-user-profile.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts +37 -1
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js +51 -0
- package/dist/esm/security/authentications/services/utils/external-turn-rate-limit.backend.utils.js.map +1 -1
- package/dist/esm/security/authentications/services/utils/machine-auth-rate-limit.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/pkce.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/services/utils/saml-java-availability.d.ts.map +1 -1
- package/dist/esm/security/authentications/utils/application-auth-policy-audit.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts +41 -0
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js +45 -0
- package/dist/esm/security/authentications/utils/enterprise-sso-enforcement.backend.utils.js.map +1 -1
- package/dist/esm/security/authentications/utils/one-off-session-lifetime.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authentications/utils/social-oauth2-purpose.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/access-grant-decision.factory.backend.d.ts +59 -0
- package/dist/esm/security/authorizations/access-grant-decision.factory.backend.d.ts.map +1 -0
- package/dist/esm/security/authorizations/access-grant-decision.factory.backend.js +111 -0
- package/dist/esm/security/authorizations/access-grant-decision.factory.backend.js.map +1 -0
- package/dist/esm/security/authorizations/access-grant-lifecycle-audit.backend.d.ts +57 -0
- package/dist/esm/security/authorizations/access-grant-lifecycle-audit.backend.d.ts.map +1 -0
- package/dist/esm/security/authorizations/access-grant-lifecycle-audit.backend.js +133 -0
- package/dist/esm/security/authorizations/access-grant-lifecycle-audit.backend.js.map +1 -0
- package/dist/esm/security/authorizations/application-access-grant-custom-implementation.backend.service.d.ts +41 -0
- package/dist/esm/security/authorizations/application-access-grant-custom-implementation.backend.service.d.ts.map +1 -0
- package/dist/esm/security/authorizations/application-access-grant-custom-implementation.backend.service.js +157 -0
- package/dist/esm/security/authorizations/application-access-grant-custom-implementation.backend.service.js.map +1 -0
- package/dist/esm/security/authorizations/application-wide-read-admission.backend.d.ts +84 -0
- package/dist/esm/security/authorizations/application-wide-read-admission.backend.d.ts.map +1 -0
- package/dist/esm/security/authorizations/application-wide-read-admission.backend.js +99 -0
- package/dist/esm/security/authorizations/application-wide-read-admission.backend.js.map +1 -0
- package/dist/esm/security/authorizations/authorization-denial-audit.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts +116 -0
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.d.ts.map +1 -0
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js +162 -0
- package/dist/esm/security/authorizations/cross-tenant-read-observation.backend.js.map +1 -0
- package/dist/esm/security/authorizations/initiator-organization-confinement.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/junction-scope-resolution.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts +20 -20
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js +27 -28
- package/dist/esm/security/authorizations/organization-owner-floor.backend.utils.js.map +1 -1
- package/dist/esm/security/authorizations/organization-unit-narrowing-enforcement.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js +37 -124
- package/dist/esm/security/authorizations/platform-access-grant-custom-implementation.backend.service.js.map +1 -1
- package/dist/esm/security/authorizations/privileged-access-review.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/relationship-foreign-key-filter.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts +4 -0
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.js +4 -0
- package/dist/esm/security/authorizations/role-ceiling.backend.utils.js.map +1 -1
- package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts +133 -0
- package/dist/esm/security/authorizations/role-conferral.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/authorizations/role-conferral.backend.utils.js +137 -0
- package/dist/esm/security/authorizations/role-conferral.backend.utils.js.map +1 -0
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts +134 -1
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js +152 -5
- package/dist/esm/security/authorizations/scope-root-collection-confinement.backend.js.map +1 -1
- package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts +146 -8
- package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authorizations/services/authorizations.backend.service.js +328 -29
- package/dist/esm/security/authorizations/services/authorizations.backend.service.js.map +1 -1
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts +6 -14
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js +13 -22
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js.map +1 -1
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts +60 -0
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js +79 -0
- package/dist/esm/security/connected-accounts/connection-target-authorization.backend.js.map +1 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts +299 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js +953 -0
- package/dist/esm/security/connected-accounts/controllers/provider-connection.controller.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts +99 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js +22 -0
- package/dist/esm/security/connected-accounts/organization-provider-credential-resolver.port.js.map +1 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts +44 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js +20 -0
- package/dist/esm/security/connected-accounts/provider-oauth2-refresher.port.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts +210 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js +423 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credential-store.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts +41 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js +358 -0
- package/dist/esm/security/connected-accounts/services/organization-provider-credentials.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts +160 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js +282 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-exchange.backend.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts +125 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js +123 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-pending-authorization.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts +54 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js +153 -0
- package/dist/esm/security/connected-accounts/services/provider-oauth2-refresher.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts +214 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js +430 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credential-store.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts +45 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js +291 -0
- package/dist/esm/security/connected-accounts/services/user-provider-credentials.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts +98 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js +29 -0
- package/dist/esm/security/connected-accounts/user-provider-credential-resolver.port.js.map +1 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts +127 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js +277 -0
- package/dist/esm/security/connected-accounts/utils/provider-credential-envelope.backend.utils.js.map +1 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts +66 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js +75 -0
- package/dist/esm/security/connected-accounts/utils/stored-credential-value.backend.utils.js.map +1 -0
- package/dist/esm/security/connected-accounts/utils/user-delegated-access-token-slot.backend.utils.d.ts +34 -0
- package/dist/esm/security/connected-accounts/utils/user-delegated-access-token-slot.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/connected-accounts/utils/user-delegated-access-token-slot.backend.utils.js +39 -0
- package/dist/esm/security/connected-accounts/utils/user-delegated-access-token-slot.backend.utils.js.map +1 -0
- package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/consumable-token-models.exports.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/models/consumable-tokens.shared.schemas.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/models/index.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/services/__tests__/mock-consumable-token.service.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts +21 -3
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js +26 -16
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js.map +1 -1
- package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts +9 -4
- package/dist/esm/security/credential-rotation-grace.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/credential-rotation-grace.backend.utils.js +9 -4
- package/dist/esm/security/credential-rotation-grace.backend.utils.js.map +1 -1
- package/dist/esm/security/jwt/services/auth-jwt-guard.backend.service.d.ts.map +1 -1
- package/dist/esm/security/jwt/services/jwt.backend.service.d.ts.map +1 -1
- package/dist/esm/security/jwt/services/wildo-worker-bootstrap-client.backend.service.d.ts +13 -0
- package/dist/esm/security/jwt/services/wildo-worker-bootstrap-client.backend.service.d.ts.map +1 -1
- package/dist/esm/security/jwt/services/wildo-worker-bootstrap-client.backend.service.js +14 -0
- package/dist/esm/security/jwt/services/wildo-worker-bootstrap-client.backend.service.js.map +1 -1
- package/dist/esm/security/jwt/utils/jwt-verification-error-classification.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts +26 -0
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js +43 -0
- package/dist/esm/security/oauth-clients/oauth-client-generation.backend.utils.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts +8 -1
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js +49 -0
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/outbound/outbound-request-deadline.backend.utils.d.ts +39 -0
- package/dist/esm/security/outbound/outbound-request-deadline.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/outbound/outbound-request-deadline.backend.utils.js +60 -0
- package/dist/esm/security/outbound/outbound-request-deadline.backend.utils.js.map +1 -0
- package/dist/esm/security/outbound/outbound-request-headers.backend.utils.d.ts +66 -0
- package/dist/esm/security/outbound/outbound-request-headers.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/outbound/outbound-request-headers.backend.utils.js +75 -0
- package/dist/esm/security/outbound/outbound-request-headers.backend.utils.js.map +1 -0
- package/dist/esm/security/scim/controllers/scim.backend.controller.d.ts.map +1 -1
- package/dist/esm/security/scim/controllers/scim.backend.controller.js +17 -5
- package/dist/esm/security/scim/controllers/scim.backend.controller.js.map +1 -1
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts +67 -29
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js +47 -25
- package/dist/esm/security/scim/models/scim-protocol.backend.schemas.js.map +1 -1
- package/dist/esm/security/scim/utils/scim-attribute-path-resolver.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/scim/utils/scim-filter-parser.d.ts.map +1 -1
- package/dist/esm/security/scim/utils/scim-response-formatter.d.ts.map +1 -1
- package/dist/esm/security/session-invalidation-fence.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts +10 -2
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.d.ts.map +1 -1
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js +10 -2
- package/dist/esm/security/ssrf/outbound-target-guard.backend.utils.js.map +1 -1
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts +143 -0
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js +258 -0
- package/dist/esm/security/ssrf/pinned-outbound-fetch.backend.utils.js.map +1 -0
- package/dist/esm/security/token-invalidation-fence.backend.utils.d.ts.map +1 -1
- package/dist/esm/testing.d.ts.map +1 -1
- package/dist/esm/users/services/inbound-contact-custom-implementation.backend.service.d.ts.map +1 -1
- package/dist/esm/users/services/user-deletion-audit.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/users/services/user-force-password-reset.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts +39 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js +159 -0
- package/dist/esm/users/services/user-read-retained.custom-impl.backend.service.js.map +1 -0
- package/dist/esm/users/services/user-role-administration.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/users/services/user-self-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/users/services/user-super-admin-floor.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +11 -9
- package/dist/esm/external-providers/services/flow-actor-design.backend.service.d.ts +0 -45
- package/dist/esm/external-providers/services/flow-actor-design.backend.service.d.ts.map +0 -1
- package/dist/esm/external-providers/services/flow-actor-design.backend.service.js +0 -22
- package/dist/esm/external-providers/services/flow-actor-design.backend.service.js.map +0 -1
- package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts +0 -80
- package/dist/esm/notifications/email/models/email-context-provider.interface.d.ts.map +0 -1
- package/dist/esm/notifications/email/models/email-context-provider.interface.js +0 -25
- package/dist/esm/notifications/email/models/email-context-provider.interface.js.map +0 -1
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts +0 -49
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.d.ts.map +0 -1
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js +0 -141
- package/dist/esm/notifications/email/services/email-context-provider-registry.backend.service.js.map +0 -1
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts +0 -37
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.d.ts.map +0 -1
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js +0 -121
- package/dist/esm/notifications/email/services/email-template-compiler.backend.service.js.map +0 -1
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts +0 -58
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.d.ts.map +0 -1
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js +0 -223
- package/dist/esm/notifications/email/services/email-template-sandbox.backend.service.js.map +0 -1
|
@@ -2,9 +2,23 @@
|
|
|
2
2
|
* Local Directory Storage Provider
|
|
3
3
|
*
|
|
4
4
|
* IFileStorageProvider implementation backed by the local filesystem.
|
|
5
|
-
* Files are stored under a configurable base directory,
|
|
6
|
-
*
|
|
7
|
-
* by
|
|
5
|
+
* Files are stored under a configurable base directory, at the SAME relative key the
|
|
6
|
+
* Wildo-managed provider would use — `applications/<appId>/files/<storageName>/<scope>/<scopeId>/…`,
|
|
7
|
+
* composed by `application-storage-key.backend.utils`. Path traversal attacks are guarded against
|
|
8
|
+
* by refusing a `.`/`..` segment in the composed key AND by resolving every path and verifying it
|
|
9
|
+
* stays inside the base dir.
|
|
10
|
+
*
|
|
11
|
+
* ## Why the key shape is shared rather than provider-local
|
|
12
|
+
*
|
|
13
|
+
* Until 2026-09-09 this provider composed `[applicationId]/[folderPath]/<leaf>` from the field's
|
|
14
|
+
* declarative binding alone, and included the application id only when the binding asked
|
|
15
|
+
* (`includeApplicationId`, defaulting to `false` here). It therefore emitted NONE of the
|
|
16
|
+
* `<scope>/<scopeId>` segments the managed provider's shape carries, so a deployment routing a
|
|
17
|
+
* `z_file()` field to local storage had no per-tenant prefix to sweep, list or confine against —
|
|
18
|
+
* and nothing failed, because an absent prefix produces no error, only an absent capability.
|
|
19
|
+
*
|
|
20
|
+
* Both providers now call one composer. See `application-storage-key.backend.utils.ts` for the
|
|
21
|
+
* argument and for what deliberately stays provider-local.
|
|
8
22
|
*
|
|
9
23
|
* Configured through `storage.localDirectory.baseDir` in resolved application
|
|
10
24
|
* configuration, which the configuration loader seeds from the
|
|
@@ -39,14 +53,18 @@ export declare class LocalDirectoryStorageProvider implements IFileStorageProvid
|
|
|
39
53
|
healthCheck(): Promise<StorageProviderHealthResult>;
|
|
40
54
|
private getBaseDir;
|
|
41
55
|
/**
|
|
42
|
-
* Compose the
|
|
56
|
+
* Compose the relative storage key for an upload.
|
|
43
57
|
*
|
|
44
|
-
* Layout
|
|
45
|
-
*
|
|
58
|
+
* Layout — identical to the managed provider's, minus that provider's bucket prefix:
|
|
59
|
+
* `applications/<applicationId>/files/<storageName>/<scope>/<scopeId>/[folderPath/]<fileName|fileId>`
|
|
46
60
|
*
|
|
47
|
-
* `includeApplicationId` defaults to `
|
|
61
|
+
* `includeApplicationId` defaults to `true` here, as it does on the managed provider. It used to
|
|
62
|
+
* default to `false` ("the volume is typically per-app"), which is exactly what left this provider
|
|
63
|
+
* with no tenant structure: a per-app VOLUME separates applications from each other and separates
|
|
64
|
+
* nothing inside one. Set explicitly to `false` the key collapses to the bare leaf path on BOTH
|
|
65
|
+
* providers — one authored value, one meaning, and the same loss of every prefix operation.
|
|
48
66
|
*/
|
|
49
|
-
private
|
|
67
|
+
private composeStorageKey;
|
|
50
68
|
/**
|
|
51
69
|
* Resolve a safe absolute path from a relative storage ref.
|
|
52
70
|
* Throws if the resolved path escapes the base directory (path traversal guard).
|
|
@@ -60,6 +78,47 @@ export declare class LocalDirectoryStorageProvider implements IFileStorageProvid
|
|
|
60
78
|
/**
|
|
61
79
|
* Resolve the absolute filesystem path from a persisted storageRef.
|
|
62
80
|
* The ref IS the relative path from baseDir — just validate traversal.
|
|
81
|
+
*
|
|
82
|
+
* ## Already-stored files are NOT moved by the key-shape change, and nothing has to be migrated
|
|
83
|
+
*
|
|
84
|
+
* Every read verb (`download` / `delete` / `getMetadata`) reaches a blob through this method, and
|
|
85
|
+
* with a ref present it uses that ref VERBATIM. A blob written under the old
|
|
86
|
+
* `[applicationId]/[folderPath]/<leaf>` layout therefore stays addressable at exactly the path it
|
|
87
|
+
* was written to: the shape change governs where NEW uploads land, never how an existing row is
|
|
88
|
+
* resolved. No migration, and no compatibility branch, because there is nothing to be compatible
|
|
89
|
+
* with — the persisted ref is the address.
|
|
90
|
+
*
|
|
91
|
+
* ## The no-ref branch is LIVE, and it must track `upload` rather than freeze
|
|
92
|
+
*
|
|
93
|
+
* It looks like a legacy fallback for rows whose `storageRef` never committed. Its real caller is
|
|
94
|
+
* the audit-log archive batch: `archiveArtifactExists` probes `getMetadata` with
|
|
95
|
+
* `fileId: '<folderPath>/<fileName>'` and NO ref, deliberately, so that each provider re-derives
|
|
96
|
+
* the key its own `upload` produced and the batch never re-implements provider path logic. Pin
|
|
97
|
+
* the old composition here and that probe would address a blob the upload no longer writes, so
|
|
98
|
+
* `archiveArtifactExists` would answer `false` forever and every past day would be re-archived on
|
|
99
|
+
* every tick — a silent, unbounded regression with no failing test anywhere.
|
|
100
|
+
*
|
|
101
|
+
* So it composes through the SAME composer, with no resource type and no scope, mirroring the
|
|
102
|
+
* managed provider's `resolveApplicationObjectKey(file.fileId, ctx, undefined)` argument for
|
|
103
|
+
* argument. The parity is pinned in this provider's test suite (`upload` then `getMetadata` with
|
|
104
|
+
* no ref); the batch's own suite uses a fake provider and cannot see it.
|
|
105
|
+
*
|
|
106
|
+
* ## Residual, recorded rather than fixed: a `.`/`..` segment inside a PRESENT ref
|
|
107
|
+
*
|
|
108
|
+
* `composeStorageKey` refuses one on the composition path; this branch does not, and the managed
|
|
109
|
+
* provider's `assertNoTraversalSegments(normalizedStorageRef, …)` does. Two reasons it is left
|
|
110
|
+
* asymmetric, and neither is "nobody thought about it":
|
|
111
|
+
*
|
|
112
|
+
* - the containment check below is a real `path.resolve`, not managed's textual `startsWith`, so
|
|
113
|
+
* the class of attack that motivated managed's stored-ref check (a ref that satisfies a textual
|
|
114
|
+
* prefix while pointing elsewhere) is already caught here for anything leaving the base;
|
|
115
|
+
* - a `.` ref legitimately addresses the base directory and is pinned as NOT an authorization
|
|
116
|
+
* refusal (`ADMITS the base directory itself`), which a whole-segment textual check would break.
|
|
117
|
+
*
|
|
118
|
+
* What survives is a ref whose text climbs out of one tenant prefix into another WITHIN the base.
|
|
119
|
+
* Reaching it needs write access to the `storageRef` column — the composition path can no longer
|
|
120
|
+
* produce one — so it is a smaller surface than the one closed above, not the same one. Closing it
|
|
121
|
+
* means deciding what `.` should mean first, which is a separate change.
|
|
63
122
|
*/
|
|
64
123
|
private resolvePathFromStorageRef;
|
|
65
124
|
private readLocalMetadata;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-directory-storage-provider.backend.service.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"local-directory-storage-provider.backend.service.d.ts","sourceRoot":"","sources":["../../../../src/files/storage/local-directory-storage-provider.backend.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAKlC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAClG,OAAO,EAAE,0BAA0B,EAAE,MAAM,kEAAkE,CAAC;AAE9G,OAAO,EAAE,uBAAuB,EAAE,MAAM,sEAAsE,CAAC;AAC/G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qEAAqE,CAAC;AAQ5G,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,2BAA2B,EAC3B,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AAUvC,qBACa,6BAA8B,YAAW,oBAAoB;IAMtE,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IATnC,QAAQ,CAAC,UAAU,uCAAuC;IAC1D,OAAO,CAAC,OAAO,CAAuB;gBAInB,MAAM,EAAE,aAAa,EAErB,YAAY,EAAE,0BAA0B,EAExC,gBAAgB,EAAE,uBAAuB;IAG5D;;;;;OAKG;IACH,YAAY,IAAI,OAAO;IAIvB,yFAAyF;IACzF,OAAO,KAAK,iBAAiB,GAE5B;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB3B,WAAW,IAAI,OAAO,CAAC,2BAA2B,CAAC;IAmBzD,OAAO,CAAC,UAAU;IAkBlB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,iBAAiB;IAqDzB;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAkBnC,OAAO,CAAC,gBAAgB;IAMlB,MAAM,CACV,UAAU,EAAE,QAAQ,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,gBAAgB,CAAC,GAAG,CAAC,EACvC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC;IAqCzB,QAAQ,CACZ,IAAI,EAAE,uBAAuB,EAC7B,gBAAgB,EAAE,gBAAgB,CAAC,GAAG,CAAC,GACtC,OAAO,CAAC,qBAAqB,CAAC;IAgC3B,MAAM,CACV,IAAI,EAAE,uBAAuB,EAC7B,gBAAgB,EAAE,gBAAgB,CAAC,GAAG,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC;IAoBV,WAAW,CACf,IAAI,EAAE,uBAAuB,EAC7B,gBAAgB,EAAE,gBAAgB,CAAC,GAAG,CAAC,GACtC,OAAO,CAAC,mBAAmB,CAAC;IA8B/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4CG;IACH,OAAO,CAAC,yBAAyB;YAWnB,iBAAiB;IAkB/B,OAAO,CAAC,mBAAmB;CAuD5B"}
|
|
@@ -2,9 +2,23 @@
|
|
|
2
2
|
* Local Directory Storage Provider
|
|
3
3
|
*
|
|
4
4
|
* IFileStorageProvider implementation backed by the local filesystem.
|
|
5
|
-
* Files are stored under a configurable base directory,
|
|
6
|
-
*
|
|
7
|
-
* by
|
|
5
|
+
* Files are stored under a configurable base directory, at the SAME relative key the
|
|
6
|
+
* Wildo-managed provider would use — `applications/<appId>/files/<storageName>/<scope>/<scopeId>/…`,
|
|
7
|
+
* composed by `application-storage-key.backend.utils`. Path traversal attacks are guarded against
|
|
8
|
+
* by refusing a `.`/`..` segment in the composed key AND by resolving every path and verifying it
|
|
9
|
+
* stays inside the base dir.
|
|
10
|
+
*
|
|
11
|
+
* ## Why the key shape is shared rather than provider-local
|
|
12
|
+
*
|
|
13
|
+
* Until 2026-09-09 this provider composed `[applicationId]/[folderPath]/<leaf>` from the field's
|
|
14
|
+
* declarative binding alone, and included the application id only when the binding asked
|
|
15
|
+
* (`includeApplicationId`, defaulting to `false` here). It therefore emitted NONE of the
|
|
16
|
+
* `<scope>/<scopeId>` segments the managed provider's shape carries, so a deployment routing a
|
|
17
|
+
* `z_file()` field to local storage had no per-tenant prefix to sweep, list or confine against —
|
|
18
|
+
* and nothing failed, because an absent prefix produces no error, only an absent capability.
|
|
19
|
+
*
|
|
20
|
+
* Both providers now call one composer. See `application-storage-key.backend.utils.ts` for the
|
|
21
|
+
* argument and for what deliberately stays provider-local.
|
|
8
22
|
*
|
|
9
23
|
* Configured through `storage.localDirectory.baseDir` in resolved application
|
|
10
24
|
* configuration, which the configuration loader seeds from the
|
|
@@ -36,6 +50,7 @@ import { describeCaughtError } from '../../errors/utils/error-log-level-classifi
|
|
|
36
50
|
import { AppConfigurationService } from '../../config/services/app-configuration.backend.service.js';
|
|
37
51
|
import { validateAppId, validateContentType, validateFileId, validateSize, validateStream, resolveConfiguredMaxFileSize } from '../../files/utils/file-validation.utils.js';
|
|
38
52
|
import { resolveStorageApplicationIdentity } from '../../files/utils/storage-application-identity.backend.utils.js';
|
|
53
|
+
import { composeApplicationStorageKey, composeStorageLeafPath, storageKeyHasTraversalSegment, } from './application-storage-key.backend.utils.js';
|
|
39
54
|
const METADATA_SUFFIX = '.meta.json';
|
|
40
55
|
let LocalDirectoryStorageProvider = class LocalDirectoryStorageProvider {
|
|
41
56
|
logger;
|
|
@@ -106,34 +121,53 @@ let LocalDirectoryStorageProvider = class LocalDirectoryStorageProvider {
|
|
|
106
121
|
return this.baseDir;
|
|
107
122
|
}
|
|
108
123
|
/**
|
|
109
|
-
* Compose the
|
|
124
|
+
* Compose the relative storage key for an upload.
|
|
110
125
|
*
|
|
111
|
-
* Layout
|
|
112
|
-
*
|
|
126
|
+
* Layout — identical to the managed provider's, minus that provider's bucket prefix:
|
|
127
|
+
* `applications/<applicationId>/files/<storageName>/<scope>/<scopeId>/[folderPath/]<fileName|fileId>`
|
|
113
128
|
*
|
|
114
|
-
* `includeApplicationId` defaults to `
|
|
129
|
+
* `includeApplicationId` defaults to `true` here, as it does on the managed provider. It used to
|
|
130
|
+
* default to `false` ("the volume is typically per-app"), which is exactly what left this provider
|
|
131
|
+
* with no tenant structure: a per-app VOLUME separates applications from each other and separates
|
|
132
|
+
* nothing inside one. Set explicitly to `false` the key collapses to the bare leaf path on BOTH
|
|
133
|
+
* providers — one authored value, one meaning, and the same loss of every prefix operation.
|
|
115
134
|
*/
|
|
116
|
-
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
if (includeAppId) {
|
|
120
|
-
const applicationId = this.getApplicationId(executionContext);
|
|
121
|
-
segments.push(applicationId);
|
|
122
|
-
}
|
|
123
|
-
if (options?.folderPath) {
|
|
124
|
-
const trimmed = options.folderPath.trim();
|
|
125
|
-
if (trimmed) {
|
|
126
|
-
segments.push(trimmed);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
const leaf = options?.fileName?.trim() || fileId;
|
|
130
|
-
if (!leaf) {
|
|
135
|
+
composeStorageKey(fileId, executionContext, options) {
|
|
136
|
+
const leafPath = composeStorageLeafPath(fileId, options);
|
|
137
|
+
if (!leafPath) {
|
|
131
138
|
throw this.errorBuilder.buildError(ErrorType.VALIDATION, executionContext, {
|
|
132
139
|
customMessageReference: ErrorCustomMessageReference.FILE_STORAGE_KEY_COMPOSITION_FAILED,
|
|
133
140
|
});
|
|
134
141
|
}
|
|
135
|
-
|
|
136
|
-
|
|
142
|
+
// Refused on the LEAF, textually, before any prefix is prepended — and this is load-bearing
|
|
143
|
+
// rather than belt-and-braces. `resolveSafePathFromRelative` below asks "does the resolved path
|
|
144
|
+
// escape the base directory", which was the whole guard while a key was one or two segments
|
|
145
|
+
// deep. Under the six-segment tenant prefix a `folderPath: '../../outside'` no longer escapes:
|
|
146
|
+
// it resolves to `applications/<app>/files/_unlinked/outside/…`, still inside the base, so the
|
|
147
|
+
// containment check ADMITS what it used to refuse. What the `..` now buys an attacker is not an
|
|
148
|
+
// escape from the store but an escape from the TENANT prefix — the exact property this key
|
|
149
|
+
// shape exists to provide.
|
|
150
|
+
//
|
|
151
|
+
// The managed provider refuses the same input for the mirror-image reason (its stored-ref prefix
|
|
152
|
+
// check is textual), so one authored value cannot mean two things depending on which provider a
|
|
153
|
+
// deployment binds. `assertNoTraversalSegments` there and this share `storageKeyHasTraversalSegment`.
|
|
154
|
+
if (storageKeyHasTraversalSegment(leafPath)) {
|
|
155
|
+
throw this.errorBuilder.buildError(ErrorType.AUTHORIZATION, undefined, {
|
|
156
|
+
customMessageReference: ErrorCustomMessageReference.FILE_PATH_TRAVERSAL_DETECTED,
|
|
157
|
+
context: {
|
|
158
|
+
relativePath: leafPath, // diagnostic (log-only)
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
if (options?.includeApplicationId === false) {
|
|
163
|
+
return leafPath;
|
|
164
|
+
}
|
|
165
|
+
return composeApplicationStorageKey({
|
|
166
|
+
applicationId: this.getApplicationId(executionContext),
|
|
167
|
+
leafPath,
|
|
168
|
+
linkedResourceType: options?.linkedResourceType,
|
|
169
|
+
scope: options?.scope,
|
|
170
|
+
});
|
|
137
171
|
}
|
|
138
172
|
/**
|
|
139
173
|
* Resolve a safe absolute path from a relative storage ref.
|
|
@@ -162,8 +196,7 @@ let LocalDirectoryStorageProvider = class LocalDirectoryStorageProvider {
|
|
|
162
196
|
validateContentType(mimeType, this.errorBuilder, executionContext, 'mimeType');
|
|
163
197
|
validateSize(size, resolveConfiguredMaxFileSize(this.appConfigService.config.storage?.maxFileSize), this.errorBuilder, executionContext, 'size');
|
|
164
198
|
validateStream(fileStream, this.errorBuilder, executionContext, 'fileStream');
|
|
165
|
-
const
|
|
166
|
-
const relativePath = segments.join('/');
|
|
199
|
+
const relativePath = this.composeStorageKey(fileId, executionContext, options);
|
|
167
200
|
const filePath = this.resolveSafePathFromRelative(relativePath);
|
|
168
201
|
await fs.promises.mkdir(path.dirname(filePath), { recursive: true });
|
|
169
202
|
try {
|
|
@@ -255,12 +288,52 @@ let LocalDirectoryStorageProvider = class LocalDirectoryStorageProvider {
|
|
|
255
288
|
/**
|
|
256
289
|
* Resolve the absolute filesystem path from a persisted storageRef.
|
|
257
290
|
* The ref IS the relative path from baseDir — just validate traversal.
|
|
291
|
+
*
|
|
292
|
+
* ## Already-stored files are NOT moved by the key-shape change, and nothing has to be migrated
|
|
293
|
+
*
|
|
294
|
+
* Every read verb (`download` / `delete` / `getMetadata`) reaches a blob through this method, and
|
|
295
|
+
* with a ref present it uses that ref VERBATIM. A blob written under the old
|
|
296
|
+
* `[applicationId]/[folderPath]/<leaf>` layout therefore stays addressable at exactly the path it
|
|
297
|
+
* was written to: the shape change governs where NEW uploads land, never how an existing row is
|
|
298
|
+
* resolved. No migration, and no compatibility branch, because there is nothing to be compatible
|
|
299
|
+
* with — the persisted ref is the address.
|
|
300
|
+
*
|
|
301
|
+
* ## The no-ref branch is LIVE, and it must track `upload` rather than freeze
|
|
302
|
+
*
|
|
303
|
+
* It looks like a legacy fallback for rows whose `storageRef` never committed. Its real caller is
|
|
304
|
+
* the audit-log archive batch: `archiveArtifactExists` probes `getMetadata` with
|
|
305
|
+
* `fileId: '<folderPath>/<fileName>'` and NO ref, deliberately, so that each provider re-derives
|
|
306
|
+
* the key its own `upload` produced and the batch never re-implements provider path logic. Pin
|
|
307
|
+
* the old composition here and that probe would address a blob the upload no longer writes, so
|
|
308
|
+
* `archiveArtifactExists` would answer `false` forever and every past day would be re-archived on
|
|
309
|
+
* every tick — a silent, unbounded regression with no failing test anywhere.
|
|
310
|
+
*
|
|
311
|
+
* So it composes through the SAME composer, with no resource type and no scope, mirroring the
|
|
312
|
+
* managed provider's `resolveApplicationObjectKey(file.fileId, ctx, undefined)` argument for
|
|
313
|
+
* argument. The parity is pinned in this provider's test suite (`upload` then `getMetadata` with
|
|
314
|
+
* no ref); the batch's own suite uses a fake provider and cannot see it.
|
|
315
|
+
*
|
|
316
|
+
* ## Residual, recorded rather than fixed: a `.`/`..` segment inside a PRESENT ref
|
|
317
|
+
*
|
|
318
|
+
* `composeStorageKey` refuses one on the composition path; this branch does not, and the managed
|
|
319
|
+
* provider's `assertNoTraversalSegments(normalizedStorageRef, …)` does. Two reasons it is left
|
|
320
|
+
* asymmetric, and neither is "nobody thought about it":
|
|
321
|
+
*
|
|
322
|
+
* - the containment check below is a real `path.resolve`, not managed's textual `startsWith`, so
|
|
323
|
+
* the class of attack that motivated managed's stored-ref check (a ref that satisfies a textual
|
|
324
|
+
* prefix while pointing elsewhere) is already caught here for anything leaving the base;
|
|
325
|
+
* - a `.` ref legitimately addresses the base directory and is pinned as NOT an authorization
|
|
326
|
+
* refusal (`ADMITS the base directory itself`), which a whole-segment textual check would break.
|
|
327
|
+
*
|
|
328
|
+
* What survives is a ref whose text climbs out of one tenant prefix into another WITHIN the base.
|
|
329
|
+
* Reaching it needs write access to the `storageRef` column — the composition path can no longer
|
|
330
|
+
* produce one — so it is a smaller surface than the one closed above, not the same one. Closing it
|
|
331
|
+
* means deciding what `.` should mean first, which is a separate change.
|
|
258
332
|
*/
|
|
259
333
|
resolvePathFromStorageRef(file, executionContext) {
|
|
260
334
|
const ref = file.storageRef;
|
|
261
335
|
if (!ref) {
|
|
262
|
-
|
|
263
|
-
return this.resolveSafePathFromRelative(`${appId}/${file.fileId}`);
|
|
336
|
+
return this.resolveSafePathFromRelative(this.composeStorageKey(file.fileId, executionContext));
|
|
264
337
|
}
|
|
265
338
|
return this.resolveSafePathFromRelative(ref);
|
|
266
339
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-directory-storage-provider.backend.service.js","sourceRoot":"","sources":["../../../../../src/files/storage/local-directory-storage-provider.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Local Directory Storage Provider\n *\n * IFileStorageProvider implementation backed by the local filesystem.\n * Files are stored under a configurable base directory, organized by\n * application and file ID. Path traversal attacks are guarded against\n * by resolving all paths and verifying they stay inside the base dir.\n *\n * Configured through `storage.localDirectory.baseDir` in resolved application\n * configuration, which the configuration loader seeds from the\n * `STORAGE_LOCAL_BASE_DIR` environment variable. The provider itself reads\n * configuration, never the environment — see\n * `.claude/plans/application-runtime-topology-delivery.md`.\n */\n\nimport { injectable, inject } from 'inversify';\nimport { Readable } from 'stream';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { pipeline } from 'stream/promises';\nimport { ErrorType, ErrorCustomMessageReference, isWildoBackendError } from '@wildo-ai/saas-models';\nimport { FileStorageAccepted } from '@wildo-ai/zod-decorators';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport type { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport { describeCaughtError } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport type { ExecutionContext } from '~wildo-backend-lib/runtime/models/execution-context.backend.schemas';\nimport { validateAppId, validateContentType, validateFileId, validateSize, validateStream, resolveConfiguredMaxFileSize } from '~wildo-backend-lib/files/utils/file-validation.utils';\nimport { resolveStorageApplicationIdentity } from '~wildo-backend-lib/files/utils/storage-application-identity.backend.utils';\nimport type {\n IFileStorageProvider,\n StorageUploadResult,\n StorageUploadOptions,\n StorageDownloadResult,\n StorageFileMetadata,\n StorageProviderHealthResult,\n StoredFileStorageTarget,\n} from './file-storage-provider.types';\n\nconst METADATA_SUFFIX = '.meta.json';\n\ninterface LocalFileMetadataRecord {\n contentType: string;\n size: number;\n createdAt: string;\n}\n\n@injectable()\nexport class LocalDirectoryStorageProvider implements IFileStorageProvider {\n readonly providerId = FileStorageAccepted.LOCAL_DIRECTORY;\n private baseDir: string | null = null;\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger)\n private readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService)\n private readonly errorBuilder: ErrorBuilderBackendService,\n @inject(SAAS_SERVICE_TYPES.AppConfigService)\n private readonly appConfigService: AppConfigurationService,\n ) {}\n\n /**\n * Reading configuration here can throw `app_configuration_not_initialized`,\n * and that is left unsoftened on purpose: answering `false` for \"configuration\n * is not loaded yet\" is indistinguishable from \"this application has no local\n * storage\", and the router would SKIP the provider in silence.\n */\n isConfigured(): boolean {\n return !!this.configuredBaseDir;\n }\n\n /** The authored filesystem root, or `undefined` when local storage is not configured. */\n private get configuredBaseDir(): string | undefined {\n return this.appConfigService.config.storage?.localDirectory?.baseDir;\n }\n\n async initialize(): Promise<void> {\n const rawDir = this.configuredBaseDir;\n if (!rawDir) {\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.CONFIGURATION,\n context: {\n message: 'storage.localDirectory.baseDir (from STORAGE_LOCAL_BASE_DIR) is required for local directory storage',\n },\n }\n );\n }\n\n const resolved = path.resolve(rawDir);\n await fs.promises.mkdir(resolved, { recursive: true });\n this.baseDir = resolved;\n }\n\n async healthCheck(): Promise<StorageProviderHealthResult> {\n const startTime = Date.now();\n\n if (!this.baseDir) {\n return { healthy: false, latency: Date.now() - startTime, error: 'Local storage not initialized' };\n }\n\n try {\n await fs.promises.access(this.baseDir, fs.constants.R_OK | fs.constants.W_OK);\n return { healthy: true, latency: Date.now() - startTime };\n } catch (error) {\n return {\n healthy: false,\n latency: Date.now() - startTime,\n error: describeCaughtError(error),\n };\n }\n }\n\n private getBaseDir(): string {\n if (!this.baseDir) {\n const raw = this.configuredBaseDir;\n if (!raw) {\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.CONFIGURATION,\n context: { message: 'storage.localDirectory.baseDir (from STORAGE_LOCAL_BASE_DIR) is not configured' },\n }\n );\n }\n this.baseDir = path.resolve(raw);\n }\n return this.baseDir;\n }\n\n /**\n * Compose the ordered path segments for an upload.\n *\n * Layout (all optional segments omitted when absent):\n * [applicationId] / [folderPath] / <fileName|fileId>\n *\n * `includeApplicationId` defaults to `false` for local storage.\n */\n private composePathSegments(\n fileId: string,\n executionContext: ExecutionContext<any>,\n options?: StorageUploadOptions,\n ): string[] {\n const segments: string[] = [];\n\n const includeAppId = options?.includeApplicationId ?? false;\n if (includeAppId) {\n const applicationId = this.getApplicationId(executionContext);\n segments.push(applicationId);\n }\n\n if (options?.folderPath) {\n const trimmed = options.folderPath.trim();\n if (trimmed) {\n segments.push(trimmed);\n }\n }\n\n const leaf = options?.fileName?.trim() || fileId;\n if (!leaf) {\n throw this.errorBuilder.buildError(\n ErrorType.VALIDATION,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_STORAGE_KEY_COMPOSITION_FAILED,\n }\n );\n }\n segments.push(leaf);\n\n return segments;\n }\n\n /**\n * Resolve a safe absolute path from a relative storage ref.\n * Throws if the resolved path escapes the base directory (path traversal guard).\n */\n private resolveSafePathFromRelative(relativePath: string): string {\n const base = this.getBaseDir();\n const filePath = path.resolve(base, relativePath);\n if (!filePath.startsWith(base + path.sep) && filePath !== base) {\n throw this.errorBuilder.buildError(\n ErrorType.AUTHORIZATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_PATH_TRAVERSAL_DETECTED,\n context: {\n relativePath, // diagnostic (log-only)\n },\n }\n );\n }\n return filePath;\n }\n\n private getApplicationId(executionContext: ExecutionContext<any>): string {\n const applicationId = resolveStorageApplicationIdentity(this.appConfigService);\n validateAppId(applicationId, this.errorBuilder, executionContext, 'applicationId');\n return applicationId;\n }\n\n async upload(\n fileStream: Readable,\n fileId: string,\n mimeType: string,\n size: number,\n executionContext: ExecutionContext<any>,\n options?: StorageUploadOptions,\n ): Promise<StorageUploadResult> {\n validateFileId(fileId, this.errorBuilder, executionContext, 'fileId');\n validateContentType(mimeType, this.errorBuilder, executionContext, 'mimeType');\n validateSize(\n size,\n resolveConfiguredMaxFileSize(this.appConfigService.config.storage?.maxFileSize),\n this.errorBuilder,\n executionContext,\n 'size',\n );\n validateStream(fileStream, this.errorBuilder, executionContext, 'fileStream');\n\n const segments = this.composePathSegments(fileId, executionContext, options);\n const relativePath = segments.join('/');\n const filePath = this.resolveSafePathFromRelative(relativePath);\n\n await fs.promises.mkdir(path.dirname(filePath), { recursive: true });\n\n try {\n const writeStream = fs.createWriteStream(filePath);\n await pipeline(fileStream, writeStream);\n } catch (error) {\n this.convertStorageError(error, 'upload', executionContext, {\n fileId,\n provider: this.providerId,\n });\n }\n\n const metadataRecord: LocalFileMetadataRecord = {\n contentType: mimeType,\n size,\n createdAt: new Date().toISOString(),\n };\n await fs.promises.writeFile(filePath + METADATA_SUFFIX, JSON.stringify(metadataRecord), 'utf-8');\n\n return { storageRef: relativePath, provider: this.providerId };\n }\n\n async download(\n file: StoredFileStorageTarget,\n executionContext: ExecutionContext<any>,\n ): Promise<StorageDownloadResult> {\n const filePath = this.resolvePathFromStorageRef(file, executionContext);\n\n try {\n await fs.promises.access(filePath, fs.constants.R_OK);\n } catch {\n throw this.errorBuilder.buildError(\n ErrorType.NOT_FOUND,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_NOT_FOUND_IN_STORAGE,\n context: {\n // diagnostic (log-only)\n fileId: file.fileId,\n provider: this.providerId,\n },\n }\n );\n }\n\n const metadata = await this.readLocalMetadata(filePath, file.fileId, executionContext);\n const stat = await fs.promises.stat(filePath);\n const stream = fs.createReadStream(filePath);\n\n return {\n stream,\n contentType: metadata.contentType,\n size: stat.size,\n lastModified: stat.mtime,\n };\n }\n\n async delete(\n file: StoredFileStorageTarget,\n executionContext: ExecutionContext<any>,\n ): Promise<void> {\n const filePath = this.resolvePathFromStorageRef(file, executionContext);\n\n try {\n await fs.promises.unlink(filePath);\n } catch (error: any) {\n if (error.code === 'ENOENT') return;\n this.convertStorageError(error, 'delete', executionContext, {\n fileId: file.fileId,\n provider: this.providerId,\n });\n }\n\n try {\n await fs.promises.unlink(filePath + METADATA_SUFFIX);\n } catch {\n // metadata file already gone — fine\n }\n }\n\n async getMetadata(\n file: StoredFileStorageTarget,\n executionContext: ExecutionContext<any>,\n ): Promise<StorageFileMetadata> {\n const filePath = this.resolvePathFromStorageRef(file, executionContext);\n\n try {\n await fs.promises.access(filePath, fs.constants.R_OK);\n } catch {\n throw this.errorBuilder.buildError(\n ErrorType.NOT_FOUND,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_NOT_FOUND_IN_STORAGE,\n context: {\n // diagnostic (log-only)\n fileId: file.fileId,\n provider: this.providerId,\n },\n }\n );\n }\n\n const metadata = await this.readLocalMetadata(filePath, file.fileId, executionContext);\n const stat = await fs.promises.stat(filePath);\n\n return {\n contentType: metadata.contentType,\n size: stat.size,\n lastModified: stat.mtime,\n };\n }\n\n /**\n * Resolve the absolute filesystem path from a persisted storageRef.\n * The ref IS the relative path from baseDir — just validate traversal.\n */\n private resolvePathFromStorageRef(\n file: StoredFileStorageTarget,\n executionContext: ExecutionContext<any>,\n ): string {\n const ref = file.storageRef;\n if (!ref) {\n const appId = this.getApplicationId(executionContext);\n return this.resolveSafePathFromRelative(`${appId}/${file.fileId}`);\n }\n return this.resolveSafePathFromRelative(ref);\n }\n\n private async readLocalMetadata(\n filePath: string,\n fileId: string,\n executionContext: ExecutionContext<any>,\n ): Promise<LocalFileMetadataRecord> {\n const metaPath = filePath + METADATA_SUFFIX;\n try {\n const raw = await fs.promises.readFile(metaPath, 'utf-8');\n return JSON.parse(raw) as LocalFileMetadataRecord;\n } catch {\n return {\n contentType: 'application/octet-stream',\n size: 0,\n createdAt: new Date().toISOString(),\n };\n }\n }\n\n private convertStorageError(\n error: unknown,\n operation: 'upload' | 'download' | 'delete' | 'metadata',\n executionContext: ExecutionContext<any> | undefined,\n context: Record<string, unknown>,\n ): never {\n if (isWildoBackendError(error)) {\n throw error;\n }\n\n const errorMessage = describeCaughtError(error);\n const errorCode = (error as any)?.code;\n\n if (errorCode === 'ENOENT') {\n throw this.errorBuilder.buildError(\n ErrorType.NOT_FOUND,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_NOT_FOUND_IN_STORAGE,\n context: { operation, ...context }, // diagnostic (log-only)\n }\n );\n }\n\n if (errorCode === 'EACCES' || errorCode === 'EPERM') {\n throw this.errorBuilder.buildError(\n ErrorType.AUTHORIZATION,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_STORAGE_ACCESS_DENIED,\n context: { operation, ...context, originalError: errorMessage }, // diagnostic (log-only)\n }\n );\n }\n\n if (errorCode === 'ENOSPC') {\n throw this.errorBuilder.buildError(\n ErrorType.EXTERNAL_SERVICE,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.EXTERNAL_SERVICE,\n context: { message: 'Local storage disk full', operation, ...context, originalError: errorMessage },\n }\n );\n }\n\n throw this.errorBuilder.buildError(\n ErrorType.EXTERNAL_SERVICE,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.EXTERNAL_SERVICE,\n context: { message: `Local storage operation failed: ${operation}`, operation, ...context, originalError: errorMessage },\n }\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"local-directory-storage-provider.backend.service.js","sourceRoot":"","sources":["../../../../src/files/storage/local-directory-storage-provider.backend.service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Local Directory Storage Provider\n *\n * IFileStorageProvider implementation backed by the local filesystem.\n * Files are stored under a configurable base directory, at the SAME relative key the\n * Wildo-managed provider would use — `applications/<appId>/files/<storageName>/<scope>/<scopeId>/…`,\n * composed by `application-storage-key.backend.utils`. Path traversal attacks are guarded against\n * by refusing a `.`/`..` segment in the composed key AND by resolving every path and verifying it\n * stays inside the base dir.\n *\n * ## Why the key shape is shared rather than provider-local\n *\n * Until 2026-09-09 this provider composed `[applicationId]/[folderPath]/<leaf>` from the field's\n * declarative binding alone, and included the application id only when the binding asked\n * (`includeApplicationId`, defaulting to `false` here). It therefore emitted NONE of the\n * `<scope>/<scopeId>` segments the managed provider's shape carries, so a deployment routing a\n * `z_file()` field to local storage had no per-tenant prefix to sweep, list or confine against —\n * and nothing failed, because an absent prefix produces no error, only an absent capability.\n *\n * Both providers now call one composer. See `application-storage-key.backend.utils.ts` for the\n * argument and for what deliberately stays provider-local.\n *\n * Configured through `storage.localDirectory.baseDir` in resolved application\n * configuration, which the configuration loader seeds from the\n * `STORAGE_LOCAL_BASE_DIR` environment variable. The provider itself reads\n * configuration, never the environment — see\n * `.claude/plans/application-runtime-topology-delivery.md`.\n */\n\nimport { injectable, inject } from 'inversify';\nimport { Readable } from 'stream';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { pipeline } from 'stream/promises';\nimport { ErrorType, ErrorCustomMessageReference, isWildoBackendError } from '@wildo-ai/saas-models';\nimport { FileStorageAccepted } from '@wildo-ai/zod-decorators';\nimport { SAAS_SERVICE_TYPES } from '~wildo-backend-lib/inject/models/service-types';\nimport type { LoggerService } from '~wildo-backend-lib/monitoring/logger/services/logger.service';\nimport { ErrorBuilderBackendService } from '~wildo-backend-lib/errors/services/error-builder.backend.service';\nimport { describeCaughtError } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport { AppConfigurationService } from '~wildo-backend-lib/config/services/app-configuration.backend.service';\nimport type { ExecutionContext } from '~wildo-backend-lib/runtime/models/execution-context.backend.schemas';\nimport { validateAppId, validateContentType, validateFileId, validateSize, validateStream, resolveConfiguredMaxFileSize } from '~wildo-backend-lib/files/utils/file-validation.utils';\nimport { resolveStorageApplicationIdentity } from '~wildo-backend-lib/files/utils/storage-application-identity.backend.utils';\nimport {\n composeApplicationStorageKey,\n composeStorageLeafPath,\n storageKeyHasTraversalSegment,\n} from './application-storage-key.backend.utils';\nimport type {\n IFileStorageProvider,\n StorageUploadResult,\n StorageUploadOptions,\n StorageDownloadResult,\n StorageFileMetadata,\n StorageProviderHealthResult,\n StoredFileStorageTarget,\n} from './file-storage-provider.types';\n\nconst METADATA_SUFFIX = '.meta.json';\n\ninterface LocalFileMetadataRecord {\n contentType: string;\n size: number;\n createdAt: string;\n}\n\n@injectable()\nexport class LocalDirectoryStorageProvider implements IFileStorageProvider {\n readonly providerId = FileStorageAccepted.LOCAL_DIRECTORY;\n private baseDir: string | null = null;\n\n constructor(\n @inject(SAAS_SERVICE_TYPES.Logger)\n private readonly logger: LoggerService,\n @inject(SAAS_SERVICE_TYPES.ErrorBuilderService)\n private readonly errorBuilder: ErrorBuilderBackendService,\n @inject(SAAS_SERVICE_TYPES.AppConfigService)\n private readonly appConfigService: AppConfigurationService,\n ) {}\n\n /**\n * Reading configuration here can throw `app_configuration_not_initialized`,\n * and that is left unsoftened on purpose: answering `false` for \"configuration\n * is not loaded yet\" is indistinguishable from \"this application has no local\n * storage\", and the router would SKIP the provider in silence.\n */\n isConfigured(): boolean {\n return !!this.configuredBaseDir;\n }\n\n /** The authored filesystem root, or `undefined` when local storage is not configured. */\n private get configuredBaseDir(): string | undefined {\n return this.appConfigService.config.storage?.localDirectory?.baseDir;\n }\n\n async initialize(): Promise<void> {\n const rawDir = this.configuredBaseDir;\n if (!rawDir) {\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.CONFIGURATION,\n context: {\n message: 'storage.localDirectory.baseDir (from STORAGE_LOCAL_BASE_DIR) is required for local directory storage',\n },\n }\n );\n }\n\n const resolved = path.resolve(rawDir);\n await fs.promises.mkdir(resolved, { recursive: true });\n this.baseDir = resolved;\n }\n\n async healthCheck(): Promise<StorageProviderHealthResult> {\n const startTime = Date.now();\n\n if (!this.baseDir) {\n return { healthy: false, latency: Date.now() - startTime, error: 'Local storage not initialized' };\n }\n\n try {\n await fs.promises.access(this.baseDir, fs.constants.R_OK | fs.constants.W_OK);\n return { healthy: true, latency: Date.now() - startTime };\n } catch (error) {\n return {\n healthy: false,\n latency: Date.now() - startTime,\n error: describeCaughtError(error),\n };\n }\n }\n\n private getBaseDir(): string {\n if (!this.baseDir) {\n const raw = this.configuredBaseDir;\n if (!raw) {\n throw this.errorBuilder.buildError(\n ErrorType.CONFIGURATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.CONFIGURATION,\n context: { message: 'storage.localDirectory.baseDir (from STORAGE_LOCAL_BASE_DIR) is not configured' },\n }\n );\n }\n this.baseDir = path.resolve(raw);\n }\n return this.baseDir;\n }\n\n /**\n * Compose the relative storage key for an upload.\n *\n * Layout — identical to the managed provider's, minus that provider's bucket prefix:\n * `applications/<applicationId>/files/<storageName>/<scope>/<scopeId>/[folderPath/]<fileName|fileId>`\n *\n * `includeApplicationId` defaults to `true` here, as it does on the managed provider. It used to\n * default to `false` (\"the volume is typically per-app\"), which is exactly what left this provider\n * with no tenant structure: a per-app VOLUME separates applications from each other and separates\n * nothing inside one. Set explicitly to `false` the key collapses to the bare leaf path on BOTH\n * providers — one authored value, one meaning, and the same loss of every prefix operation.\n */\n private composeStorageKey(\n fileId: string,\n executionContext: ExecutionContext<any>,\n options?: StorageUploadOptions,\n ): string {\n const leafPath = composeStorageLeafPath(fileId, options);\n if (!leafPath) {\n throw this.errorBuilder.buildError(\n ErrorType.VALIDATION,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_STORAGE_KEY_COMPOSITION_FAILED,\n }\n );\n }\n\n // Refused on the LEAF, textually, before any prefix is prepended — and this is load-bearing\n // rather than belt-and-braces. `resolveSafePathFromRelative` below asks \"does the resolved path\n // escape the base directory\", which was the whole guard while a key was one or two segments\n // deep. Under the six-segment tenant prefix a `folderPath: '../../outside'` no longer escapes:\n // it resolves to `applications/<app>/files/_unlinked/outside/…`, still inside the base, so the\n // containment check ADMITS what it used to refuse. What the `..` now buys an attacker is not an\n // escape from the store but an escape from the TENANT prefix — the exact property this key\n // shape exists to provide.\n //\n // The managed provider refuses the same input for the mirror-image reason (its stored-ref prefix\n // check is textual), so one authored value cannot mean two things depending on which provider a\n // deployment binds. `assertNoTraversalSegments` there and this share `storageKeyHasTraversalSegment`.\n if (storageKeyHasTraversalSegment(leafPath)) {\n throw this.errorBuilder.buildError(\n ErrorType.AUTHORIZATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_PATH_TRAVERSAL_DETECTED,\n context: {\n relativePath: leafPath, // diagnostic (log-only)\n },\n }\n );\n }\n\n if (options?.includeApplicationId === false) {\n return leafPath;\n }\n\n return composeApplicationStorageKey({\n applicationId: this.getApplicationId(executionContext),\n leafPath,\n linkedResourceType: options?.linkedResourceType,\n scope: options?.scope,\n });\n }\n\n /**\n * Resolve a safe absolute path from a relative storage ref.\n * Throws if the resolved path escapes the base directory (path traversal guard).\n */\n private resolveSafePathFromRelative(relativePath: string): string {\n const base = this.getBaseDir();\n const filePath = path.resolve(base, relativePath);\n if (!filePath.startsWith(base + path.sep) && filePath !== base) {\n throw this.errorBuilder.buildError(\n ErrorType.AUTHORIZATION,\n undefined,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_PATH_TRAVERSAL_DETECTED,\n context: {\n relativePath, // diagnostic (log-only)\n },\n }\n );\n }\n return filePath;\n }\n\n private getApplicationId(executionContext: ExecutionContext<any>): string {\n const applicationId = resolveStorageApplicationIdentity(this.appConfigService);\n validateAppId(applicationId, this.errorBuilder, executionContext, 'applicationId');\n return applicationId;\n }\n\n async upload(\n fileStream: Readable,\n fileId: string,\n mimeType: string,\n size: number,\n executionContext: ExecutionContext<any>,\n options?: StorageUploadOptions,\n ): Promise<StorageUploadResult> {\n validateFileId(fileId, this.errorBuilder, executionContext, 'fileId');\n validateContentType(mimeType, this.errorBuilder, executionContext, 'mimeType');\n validateSize(\n size,\n resolveConfiguredMaxFileSize(this.appConfigService.config.storage?.maxFileSize),\n this.errorBuilder,\n executionContext,\n 'size',\n );\n validateStream(fileStream, this.errorBuilder, executionContext, 'fileStream');\n\n const relativePath = this.composeStorageKey(fileId, executionContext, options);\n const filePath = this.resolveSafePathFromRelative(relativePath);\n\n await fs.promises.mkdir(path.dirname(filePath), { recursive: true });\n\n try {\n const writeStream = fs.createWriteStream(filePath);\n await pipeline(fileStream, writeStream);\n } catch (error) {\n this.convertStorageError(error, 'upload', executionContext, {\n fileId,\n provider: this.providerId,\n });\n }\n\n const metadataRecord: LocalFileMetadataRecord = {\n contentType: mimeType,\n size,\n createdAt: new Date().toISOString(),\n };\n await fs.promises.writeFile(filePath + METADATA_SUFFIX, JSON.stringify(metadataRecord), 'utf-8');\n\n return { storageRef: relativePath, provider: this.providerId };\n }\n\n async download(\n file: StoredFileStorageTarget,\n executionContext: ExecutionContext<any>,\n ): Promise<StorageDownloadResult> {\n const filePath = this.resolvePathFromStorageRef(file, executionContext);\n\n try {\n await fs.promises.access(filePath, fs.constants.R_OK);\n } catch {\n throw this.errorBuilder.buildError(\n ErrorType.NOT_FOUND,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_NOT_FOUND_IN_STORAGE,\n context: {\n // diagnostic (log-only)\n fileId: file.fileId,\n provider: this.providerId,\n },\n }\n );\n }\n\n const metadata = await this.readLocalMetadata(filePath, file.fileId, executionContext);\n const stat = await fs.promises.stat(filePath);\n const stream = fs.createReadStream(filePath);\n\n return {\n stream,\n contentType: metadata.contentType,\n size: stat.size,\n lastModified: stat.mtime,\n };\n }\n\n async delete(\n file: StoredFileStorageTarget,\n executionContext: ExecutionContext<any>,\n ): Promise<void> {\n const filePath = this.resolvePathFromStorageRef(file, executionContext);\n\n try {\n await fs.promises.unlink(filePath);\n } catch (error: any) {\n if (error.code === 'ENOENT') return;\n this.convertStorageError(error, 'delete', executionContext, {\n fileId: file.fileId,\n provider: this.providerId,\n });\n }\n\n try {\n await fs.promises.unlink(filePath + METADATA_SUFFIX);\n } catch {\n // metadata file already gone — fine\n }\n }\n\n async getMetadata(\n file: StoredFileStorageTarget,\n executionContext: ExecutionContext<any>,\n ): Promise<StorageFileMetadata> {\n const filePath = this.resolvePathFromStorageRef(file, executionContext);\n\n try {\n await fs.promises.access(filePath, fs.constants.R_OK);\n } catch {\n throw this.errorBuilder.buildError(\n ErrorType.NOT_FOUND,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_NOT_FOUND_IN_STORAGE,\n context: {\n // diagnostic (log-only)\n fileId: file.fileId,\n provider: this.providerId,\n },\n }\n );\n }\n\n const metadata = await this.readLocalMetadata(filePath, file.fileId, executionContext);\n const stat = await fs.promises.stat(filePath);\n\n return {\n contentType: metadata.contentType,\n size: stat.size,\n lastModified: stat.mtime,\n };\n }\n\n /**\n * Resolve the absolute filesystem path from a persisted storageRef.\n * The ref IS the relative path from baseDir — just validate traversal.\n *\n * ## Already-stored files are NOT moved by the key-shape change, and nothing has to be migrated\n *\n * Every read verb (`download` / `delete` / `getMetadata`) reaches a blob through this method, and\n * with a ref present it uses that ref VERBATIM. A blob written under the old\n * `[applicationId]/[folderPath]/<leaf>` layout therefore stays addressable at exactly the path it\n * was written to: the shape change governs where NEW uploads land, never how an existing row is\n * resolved. No migration, and no compatibility branch, because there is nothing to be compatible\n * with — the persisted ref is the address.\n *\n * ## The no-ref branch is LIVE, and it must track `upload` rather than freeze\n *\n * It looks like a legacy fallback for rows whose `storageRef` never committed. Its real caller is\n * the audit-log archive batch: `archiveArtifactExists` probes `getMetadata` with\n * `fileId: '<folderPath>/<fileName>'` and NO ref, deliberately, so that each provider re-derives\n * the key its own `upload` produced and the batch never re-implements provider path logic. Pin\n * the old composition here and that probe would address a blob the upload no longer writes, so\n * `archiveArtifactExists` would answer `false` forever and every past day would be re-archived on\n * every tick — a silent, unbounded regression with no failing test anywhere.\n *\n * So it composes through the SAME composer, with no resource type and no scope, mirroring the\n * managed provider's `resolveApplicationObjectKey(file.fileId, ctx, undefined)` argument for\n * argument. The parity is pinned in this provider's test suite (`upload` then `getMetadata` with\n * no ref); the batch's own suite uses a fake provider and cannot see it.\n *\n * ## Residual, recorded rather than fixed: a `.`/`..` segment inside a PRESENT ref\n *\n * `composeStorageKey` refuses one on the composition path; this branch does not, and the managed\n * provider's `assertNoTraversalSegments(normalizedStorageRef, …)` does. Two reasons it is left\n * asymmetric, and neither is \"nobody thought about it\":\n *\n * - the containment check below is a real `path.resolve`, not managed's textual `startsWith`, so\n * the class of attack that motivated managed's stored-ref check (a ref that satisfies a textual\n * prefix while pointing elsewhere) is already caught here for anything leaving the base;\n * - a `.` ref legitimately addresses the base directory and is pinned as NOT an authorization\n * refusal (`ADMITS the base directory itself`), which a whole-segment textual check would break.\n *\n * What survives is a ref whose text climbs out of one tenant prefix into another WITHIN the base.\n * Reaching it needs write access to the `storageRef` column — the composition path can no longer\n * produce one — so it is a smaller surface than the one closed above, not the same one. Closing it\n * means deciding what `.` should mean first, which is a separate change.\n */\n private resolvePathFromStorageRef(\n file: StoredFileStorageTarget,\n executionContext: ExecutionContext<any>,\n ): string {\n const ref = file.storageRef;\n if (!ref) {\n return this.resolveSafePathFromRelative(this.composeStorageKey(file.fileId, executionContext));\n }\n return this.resolveSafePathFromRelative(ref);\n }\n\n private async readLocalMetadata(\n filePath: string,\n fileId: string,\n executionContext: ExecutionContext<any>,\n ): Promise<LocalFileMetadataRecord> {\n const metaPath = filePath + METADATA_SUFFIX;\n try {\n const raw = await fs.promises.readFile(metaPath, 'utf-8');\n return JSON.parse(raw) as LocalFileMetadataRecord;\n } catch {\n return {\n contentType: 'application/octet-stream',\n size: 0,\n createdAt: new Date().toISOString(),\n };\n }\n }\n\n private convertStorageError(\n error: unknown,\n operation: 'upload' | 'download' | 'delete' | 'metadata',\n executionContext: ExecutionContext<any> | undefined,\n context: Record<string, unknown>,\n ): never {\n if (isWildoBackendError(error)) {\n throw error;\n }\n\n const errorMessage = describeCaughtError(error);\n const errorCode = (error as any)?.code;\n\n if (errorCode === 'ENOENT') {\n throw this.errorBuilder.buildError(\n ErrorType.NOT_FOUND,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_NOT_FOUND_IN_STORAGE,\n context: { operation, ...context }, // diagnostic (log-only)\n }\n );\n }\n\n if (errorCode === 'EACCES' || errorCode === 'EPERM') {\n throw this.errorBuilder.buildError(\n ErrorType.AUTHORIZATION,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.FILE_STORAGE_ACCESS_DENIED,\n context: { operation, ...context, originalError: errorMessage }, // diagnostic (log-only)\n }\n );\n }\n\n if (errorCode === 'ENOSPC') {\n throw this.errorBuilder.buildError(\n ErrorType.EXTERNAL_SERVICE,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.EXTERNAL_SERVICE,\n context: { message: 'Local storage disk full', operation, ...context, originalError: errorMessage },\n }\n );\n }\n\n throw this.errorBuilder.buildError(\n ErrorType.EXTERNAL_SERVICE,\n executionContext,\n {\n customMessageReference: ErrorCustomMessageReference.EXTERNAL_SERVICE,\n context: { message: `Local storage operation failed: ${operation}`, operation, ...context, originalError: errorMessage },\n }\n );\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-credential-provider.backend.utils.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"storage-credential-provider.backend.utils.d.ts","sourceRoot":"","sources":["../../../../src/files/storage/storage-credential-provider.backend.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,yBAAyB,GAAG,MAAM,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAUlF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAAa,yBAAyB;IAKlC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,mEAAmE;IACnE,OAAO,CAAC,QAAQ,CAAC,GAAG;IANtB,OAAO,CAAC,MAAM,CAA2C;IACzD,OAAO,CAAC,QAAQ,CAAoD;gBAGjD,OAAO,EAAE,yBAAyB;IACnD,mEAAmE;IAClD,GAAG,GAAE,MAAM,MAAyB;IAGvD;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,0BAA0B,CAAC;IAyBlE;;;;;OAKG;IACI,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO;IAI3E,sFAAsF;IAC/E,UAAU,IAAI,IAAI;IAIzB,OAAO,CAAC,eAAe;CAYxB"}
|
package/dist/esm/files/storage/storage-platform-sts-credential-resolver.backend.utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-platform-sts-credential-resolver.backend.utils.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"storage-platform-sts-credential-resolver.backend.utils.d.ts","sourceRoot":"","sources":["../../../../src/files/storage/storage-platform-sts-credential-resolver.backend.utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAA8B,yBAAyB,EAAE,MAAM,4EAA4E,CAAC;AAExJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,iDAAiD,IAAI,yBAAyB,CA2B7F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-sts-credential-resolver.backend.utils.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"storage-sts-credential-resolver.backend.utils.d.ts","sourceRoot":"","sources":["../../../../src/files/storage/storage-sts-credential-resolver.backend.utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,4EAA4E,CAAC;AAsGxJ;;;;;;;;;;;;GAYG;AACH,wBAAgB,kCAAkC,CAChD,oBAAoB,EAAE,MAAM,MAAM,GACjC,yBAAyB,CAiE3B;AAYD;;;;;;;;;GASG;AACH,wBAAsB,2BAA2B,CAAC,KAAK,EAAE;IACvD,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,GAAG,OAAO,CAAC,OAAO,CAAC,CA6CnB;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,0BAA0B,CAkCtF"}
|
|
@@ -170,6 +170,15 @@ export function createStsStorageCredentialResolver(resolveApplicationId) {
|
|
|
170
170
|
return parseStsCredentialPayload(payload);
|
|
171
171
|
};
|
|
172
172
|
}
|
|
173
|
+
/**
|
|
174
|
+
* Hard deadline for one STS credential fetch from apps-manager.
|
|
175
|
+
*
|
|
176
|
+
* This sits in front of every FIRST storage operation after a renewal, so the cost of an unbounded
|
|
177
|
+
* wait is not a slow credential — it is an upload that stalls instead of failing, on a fail-closed
|
|
178
|
+
* path with no fallback. 15s: the payload is a small JSON credential from a service on our own
|
|
179
|
+
* network, and the operation behind it is a user waiting for a file to move.
|
|
180
|
+
*/
|
|
181
|
+
const STS_CREDENTIAL_REQUEST_TIMEOUT_MS = 15_000;
|
|
173
182
|
/**
|
|
174
183
|
* Perform the credential fetch and unwrap the response envelope.
|
|
175
184
|
*
|
|
@@ -197,9 +206,7 @@ export async function requestStsCredentialPayload(input) {
|
|
|
197
206
|
const response = await fetch(input.url, {
|
|
198
207
|
method: 'GET',
|
|
199
208
|
headers: input.headers,
|
|
200
|
-
|
|
201
|
-
// renewal, so an unbounded wait would stall uploads rather than fail them.
|
|
202
|
-
signal: AbortSignal.timeout(15_000),
|
|
209
|
+
signal: AbortSignal.timeout(STS_CREDENTIAL_REQUEST_TIMEOUT_MS),
|
|
203
210
|
});
|
|
204
211
|
if (!response.ok) {
|
|
205
212
|
// `fetch` resolves on non-2xx rather than rejecting, so this has to be an
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-sts-credential-resolver.backend.utils.js","sourceRoot":"","sources":["../../../../../src/files/storage/storage-sts-credential-resolver.backend.utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { WildoHeaderKeys } from '@wildo-ai/saas-models';\nimport { PlatformApplicationType } from '@wildo-ai/platform-core-shared';\nimport { API_ROUTES_BACKEND_DEFINITIONS } from '~wildo-backend-lib/requests/models/api-routes.backend.defintions';\nimport { describeCaughtError } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport type { ResolvedStorageCredentials, StorageCredentialResolver } from '~wildo-backend-lib/files/storage/storage-credential-provider.backend.utils';\n\n/**\n * Resolver that obtains SHORT-LIVED, prefix-confined object-storage credentials\n * from apps-manager instead of reading a long-lived key out of process env.\n *\n * ## Why this replaces the env read outright\n *\n * `STORAGE_ACCESS_KEY` / `STORAGE_SECRET_KEY` are the object store's ROOT\n * credential, handed to every application, minion and worker through\n * `{appSlug}-secret`. See\n * `.claude/plans/object-storage-root-credential-distribution.md`.\n *\n * There is deliberately **no fallback** to those env vars. A fallback beside this\n * path is precisely how the root credential would quietly remain in use: the\n * fallback would fire on any transient apps-manager hiccup, succeed, and leave no\n * signal that the confinement had been bypassed. Failing closed is the whole\n * point — an application with no storage credential cannot leak one.\n *\n * ## Identity\n *\n * The request carries the caller's own bootstrap identity — the platform secret\n * plus its `APPLICATION_ID` — and apps-manager confines the returned credential to\n * the application that identity authenticates as. There is no parameter by which a\n * caller could ask for ANOTHER application's credential, and none should ever be\n * added.\n *\n * (Corrected 2026-08-12: this previously said the request \"names no application\",\n * which is not what the code does — `X-Application-Id` is sent below. The\n * guarantee is real but it comes from the header being the caller's OWN id and\n * being verified against the presented secret, not from the id being absent. A\n * description that does not match the request is the kind of premise a later\n * reader reasons from without re-checking.)\n *\n * ## This route is on the APPLICATION plane only\n *\n * It resolves a `wildoApplicationId` through the `apps-to-manager` controller,\n * which authenticates against `WildoApplication` records. Platform services carry\n * their own identity on a SEPARATE plane (`platform-services-to-manager`,\n * `Platform_Application_Config` / `_Secrets`, keyed by `platformApplicationId`) and\n * therefore cannot obtain a session here — which is why every platform service\n * currently reports storage UNCONFIGURED. See F-G in\n * `.claude/plans/object-storage-root-credential-distribution.md`.\n */\n/**\n * Render an STS-fetch failure into something a reader can act on.\n *\n * Deliberately assembles from several fields rather than trusting any single\n * one. An HTTP client failure can arrive as a transport error (`code`\n * `ECONNREFUSED`/`ETIMEDOUT`, no response), a non-2xx (`response.status` plus a\n * body explaining why), or a plain programming error — and each of those leaves\n * a DIFFERENT field populated, with the others absent. Reading only `message`\n * is what produced an empty diagnostic here once already.\n *\n * Falls back to the error's constructor name when everything else is empty, so\n * the output is never a bare string: \"something threw, and here is its type\" is\n * a far better starting point than silence.\n *\n * Never includes request headers — they carry the platform secret.\n */\nfunction describeStsFetchFailure(error: unknown): string {\n const parts: string[] = [];\n\n const message = describeCaughtError(error);\n // `\"[object Object]\"` is what `String(x)` yields for a plain object, and it is\n // NON-EMPTY while carrying exactly as much information as empty. Accepting it\n // would satisfy a \"message is present\" check and still tell the reader nothing,\n // so it is treated as absent and the type-name fallback below takes over.\n if (message && message !== '[object Object]') parts.push(message);\n\n const transportCode = (error as { code?: unknown })?.code;\n if (typeof transportCode === 'string' && transportCode) parts.push(`code=${transportCode}`);\n\n // `fetch` reports transport faults through `cause` (e.g. `ECONNREFUSED` on a\n // refused connection) while `message` stays a generic \"fetch failed\" — so\n // without this, the single most common real failure renders as no information\n // at all. `AbortError` from the timeout arrives as `name` instead.\n const causeMessage = (error as { cause?: { message?: unknown; code?: unknown } })?.cause;\n if (causeMessage) {\n const code = typeof causeMessage.code === 'string' ? causeMessage.code : undefined;\n const msg = typeof causeMessage.message === 'string' ? causeMessage.message : undefined;\n if (code) parts.push(`cause=${code}`);\n else if (msg) parts.push(`cause=${msg}`);\n }\n\n const name = (error as { name?: unknown })?.name;\n if (typeof name === 'string' && (name === 'AbortError' || name === 'TimeoutError')) {\n parts.push(`aborted=${name}`);\n }\n\n // Status/body arrive already formatted from the `!response.ok` branch above,\n // which reads them off the Response rather than off the error — `fetch` puts\n // nothing HTTP-shaped on the thrown value.\n\n if (parts.length === 0) {\n const typeName = (error as { constructor?: { name?: string } })?.constructor?.name;\n return typeName ? `unrenderable ${typeName}` : 'unrenderable error with no message, code, status or body';\n }\n\n return parts.join(' | ');\n}\n\n/**\n * @param resolveApplicationId - the caller's own application identity, taken from\n * RESOLVED CONFIGURATION rather than read from `process.env` here.\n *\n * The two are the same value for an application — the loader seeds\n * `config.applicationId` from `APPLICATION_ID` — but they are NOT the same for a\n * platform service, which resolves its identity locally and has no\n * `APPLICATION_ID` in env at all. Reading env here while the object-key builder\n * read configuration was a genuine dual-source split: the predicate that decides\n * whether storage is usable and the value the operation addresses could disagree,\n * and for every platform service they did. Passing it in makes the identity\n * single-sourced and defers \"which identity\" to the one place that knows.\n */\nexport function createStsStorageCredentialResolver(\n resolveApplicationId: () => string,\n): StorageCredentialResolver {\n return async (): Promise<ResolvedStorageCredentials> => {\n // ── The ISSUER may never be a CLIENT of itself ───────────────────────────\n //\n // apps-manager mints these credentials. If it ever takes this path it calls\n // its own HTTP endpoint during `initializeConfig()` — before its own listener\n // exists — which is a guaranteed `ECONNREFUSED` on every boot, not a race that\n // occasionally loses. That happened on 2026-08-12 and held `/health/ready` at\n // 503 for the process lifetime.\n //\n // It was PREVENTED before that only by accident: platform env files carry no\n // `APPLICATION_ID`, so the provider's `isConfigured()` happened to be false.\n // An accident is not a guard — it silently stops guarding the moment someone\n // supplies the variable, which is exactly what a future platform-plane STS\n // door will do. This is the explicit form, and it fails with a message naming\n // the real reason instead of a transport error that reads as a network fault.\n //\n // apps-manager does its own storage work with ADMIN rights through\n // `PlatformInfrastructureManagerService`; it does not need, and must not take,\n // the app-tier session path.\n if (process.env.SERVICE_NAME === PlatformApplicationType.PLATFORM_APPS_MANAGER) {\n throw new Error(\n 'Refusing to fetch object storage session credentials: this runtime IS the issuer '\n + `(${PlatformApplicationType.PLATFORM_APPS_MANAGER}). apps-manager brokers these `\n + 'credentials and must never request them from itself — it would call its own HTTP '\n + 'endpoint before that listener exists. Use the administrative object-storage '\n + 'configuration instead.',\n );\n }\n\n const appsManagerUrl = process.env.PLATFORM_APPS_MANAGER_URL;\n const primarySecret = process.env.PLATFORM_APPLICATION_PRIMARY_SECRET;\n // Never `process.env.APPLICATION_ID` — see the parameter's JSDoc.\n let applicationId: string | undefined;\n try {\n applicationId = resolveApplicationId();\n } catch {\n // The configuration getter throws when configuration is not initialized.\n // Treated as \"no identity yet\" so the message below names the whole\n // incomplete contract rather than escaping as an unrelated config error.\n applicationId = undefined;\n }\n\n if (!appsManagerUrl || !primarySecret || !applicationId) {\n throw new Error(\n 'Cannot obtain object storage credentials: the bootstrap contract is incomplete '\n + `(PLATFORM_APPS_MANAGER_URL: ${Boolean(appsManagerUrl)}, `\n + `PLATFORM_APPLICATION_PRIMARY_SECRET: ${Boolean(primarySecret)}, `\n + `applicationId: ${Boolean(applicationId)}).`,\n );\n }\n\n const payload = await requestStsCredentialPayload({\n url: `${appsManagerUrl.replace(/\\/+$/, '')}`\n + API_ROUTES_BACKEND_DEFINITIONS.APPS_MANAGER.GET_APPLICATION_STORAGE_SESSION_CREDENTIALS(),\n headers: {\n [WildoHeaderKeys.CONTENT_TYPE]: 'application/json',\n [WildoHeaderKeys.PLATFORM_SECRET]: primarySecret,\n [WildoHeaderKeys.APPLICATION_ID]: applicationId,\n ...(process.env.SERVICE_NAME ? { [WildoHeaderKeys.SERVICE_ID]: process.env.SERVICE_NAME } : {}),\n },\n });\n\n return parseStsCredentialPayload(payload);\n };\n}\n\n/**\n * Perform the credential fetch and unwrap the response envelope.\n *\n * Shared by the APPLICATION-plane and PLATFORM-plane resolvers, deliberately: the\n * transport, the timeout, the non-2xx branch and the diagnostic are properties of\n * \"fetching a credential from apps-manager\", not of which door was used. This repo\n * has twice paid for a duplicated path where a guard added to one copy was a silent\n * gap in the other (`buildContextualFilter`, the Mongo/PostgreSQL repositories), and\n * a fail-closed credential path is the worst place to repeat that.\n */\nexport async function requestStsCredentialPayload(input: {\n url: string;\n headers: Record<string, string>;\n}): Promise<unknown> {\n try {\n // Global `fetch`, NOT an HTTP client library — deliberately.\n //\n // `axios` is a `peerDependency: \"*\"` of this package, not a dependency, so\n // reaching for it here would have added a runtime dependency to the storage\n // path that previously had none: it resolves today only because pnpm happens\n // to place axios in a reachable tree, and `backend-api` does not declare it at\n // all. A consumer that did not provide axios would fail at storage\n // initialisation — on a fail-closed path with no fallback, for a reason having\n // nothing to do with storage.\n //\n // `fetch` is a Node built-in on every runtime this framework supports, so the\n // storage path depends on nothing it is not guaranteed to have.\n const response = await fetch(input.url, {\n method: 'GET',\n headers: input.headers,\n // Bounded: this sits in front of every first storage operation after a\n // renewal, so an unbounded wait would stall uploads rather than fail them.\n signal: AbortSignal.timeout(15_000),\n });\n\n if (!response.ok) {\n // `fetch` resolves on non-2xx rather than rejecting, so this has to be an\n // explicit branch — the classic footgun when porting from a client that\n // throws. Read the body BEFORE giving up on it: apps-manager explains the\n // refusal there, and that explanation is the whole diagnostic.\n const body = await response.text().catch(() => '');\n throw new Error(`status=${response.status}${body ? ` | body=${body.slice(0, 300)}` : ''}`);\n }\n\n const parsed = await response.json() as { data?: unknown } | null;\n return parsed?.data ?? parsed;\n } catch (error) {\n // Describe the failure from the HTTP error's OWN fields, not from\n // `describeCaughtError` alone.\n //\n // This wrapper previously read `describeCaughtError(error)` and nothing else,\n // and on 2026-08-10 it produced a message ending in a bare colon — the cause\n // was empty, so the one thing the wrapper exists to surface was the one thing\n // it discarded. Storage is a fail-closed path with no fallback by design, which\n // makes this the ONLY diagnostic a reader gets; an empty one sends them looking\n // at credentials when the fault may be transport, routing, or a non-2xx body.\n throw new Error(\n `Failed to obtain object storage session credentials from apps-manager: ${describeStsFetchFailure(error)}`,\n );\n }\n}\n\n/**\n * Validate the credential payload rather than trusting it.\n *\n * A malformed payload that reached the minio client would surface as an opaque\n * signature error on the first upload, a long way from the response that caused it;\n * a credential with no usable expiry would be cached forever by the provider and\n * then start failing mid-request once the server expired it.\n */\nexport function parseStsCredentialPayload(payload: unknown): ResolvedStorageCredentials {\n const credentials = payload as {\n accessKey?: unknown;\n secretKey?: unknown;\n sessionToken?: unknown;\n expiresAt?: unknown;\n applicationId?: unknown;\n } | null;\n\n if (\n typeof credentials?.accessKey !== 'string'\n || typeof credentials?.secretKey !== 'string'\n || typeof credentials?.sessionToken !== 'string'\n ) {\n throw new Error('apps-manager returned a malformed object storage session credential.');\n }\n\n const expiresAt = typeof credentials.expiresAt === 'string' ? new Date(credentials.expiresAt) : undefined;\n if (!expiresAt || Number.isNaN(expiresAt.getTime())) {\n throw new Error('apps-manager returned an object storage session credential without a usable expiry.');\n }\n\n return {\n accessKey: credentials.accessKey,\n secretKey: credentials.secretKey,\n sessionToken: credentials.sessionToken,\n expiresAt,\n // Carried through verbatim — the identity the ISSUER confined this credential\n // to. Passed on only when the issuer supplied a usable string; a consumer that\n // needs it must fail closed on absence rather than substitute its own.\n ...(typeof credentials.applicationId === 'string' && credentials.applicationId\n ? { applicationId: credentials.applicationId }\n : {}),\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"storage-sts-credential-resolver.backend.utils.js","sourceRoot":"","sources":["../../../../src/files/storage/storage-sts-credential-resolver.backend.utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { WildoHeaderKeys } from '@wildo-ai/saas-models';\nimport { PlatformApplicationType } from '@wildo-ai/platform-core-shared';\nimport { API_ROUTES_BACKEND_DEFINITIONS } from '~wildo-backend-lib/requests/models/api-routes.backend.defintions';\nimport { describeCaughtError } from '~wildo-backend-lib/errors/utils/error-log-level-classification.backend.utils';\nimport type { ResolvedStorageCredentials, StorageCredentialResolver } from '~wildo-backend-lib/files/storage/storage-credential-provider.backend.utils';\n\n/**\n * Resolver that obtains SHORT-LIVED, prefix-confined object-storage credentials\n * from apps-manager instead of reading a long-lived key out of process env.\n *\n * ## Why this replaces the env read outright\n *\n * `STORAGE_ACCESS_KEY` / `STORAGE_SECRET_KEY` are the object store's ROOT\n * credential, handed to every application, minion and worker through\n * `{appSlug}-secret`. See\n * `.claude/plans/object-storage-root-credential-distribution.md`.\n *\n * There is deliberately **no fallback** to those env vars. A fallback beside this\n * path is precisely how the root credential would quietly remain in use: the\n * fallback would fire on any transient apps-manager hiccup, succeed, and leave no\n * signal that the confinement had been bypassed. Failing closed is the whole\n * point — an application with no storage credential cannot leak one.\n *\n * ## Identity\n *\n * The request carries the caller's own bootstrap identity — the platform secret\n * plus its `APPLICATION_ID` — and apps-manager confines the returned credential to\n * the application that identity authenticates as. There is no parameter by which a\n * caller could ask for ANOTHER application's credential, and none should ever be\n * added.\n *\n * (Corrected 2026-08-12: this previously said the request \"names no application\",\n * which is not what the code does — `X-Application-Id` is sent below. The\n * guarantee is real but it comes from the header being the caller's OWN id and\n * being verified against the presented secret, not from the id being absent. A\n * description that does not match the request is the kind of premise a later\n * reader reasons from without re-checking.)\n *\n * ## This route is on the APPLICATION plane only\n *\n * It resolves a `wildoApplicationId` through the `apps-to-manager` controller,\n * which authenticates against `WildoApplication` records. Platform services carry\n * their own identity on a SEPARATE plane (`platform-services-to-manager`,\n * `Platform_Application_Config` / `_Secrets`, keyed by `platformApplicationId`) and\n * therefore cannot obtain a session here — which is why every platform service\n * currently reports storage UNCONFIGURED. See F-G in\n * `.claude/plans/object-storage-root-credential-distribution.md`.\n */\n/**\n * Render an STS-fetch failure into something a reader can act on.\n *\n * Deliberately assembles from several fields rather than trusting any single\n * one. An HTTP client failure can arrive as a transport error (`code`\n * `ECONNREFUSED`/`ETIMEDOUT`, no response), a non-2xx (`response.status` plus a\n * body explaining why), or a plain programming error — and each of those leaves\n * a DIFFERENT field populated, with the others absent. Reading only `message`\n * is what produced an empty diagnostic here once already.\n *\n * Falls back to the error's constructor name when everything else is empty, so\n * the output is never a bare string: \"something threw, and here is its type\" is\n * a far better starting point than silence.\n *\n * Never includes request headers — they carry the platform secret.\n */\nfunction describeStsFetchFailure(error: unknown): string {\n const parts: string[] = [];\n\n const message = describeCaughtError(error);\n // `\"[object Object]\"` is what `String(x)` yields for a plain object, and it is\n // NON-EMPTY while carrying exactly as much information as empty. Accepting it\n // would satisfy a \"message is present\" check and still tell the reader nothing,\n // so it is treated as absent and the type-name fallback below takes over.\n if (message && message !== '[object Object]') parts.push(message);\n\n const transportCode = (error as { code?: unknown })?.code;\n if (typeof transportCode === 'string' && transportCode) parts.push(`code=${transportCode}`);\n\n // `fetch` reports transport faults through `cause` (e.g. `ECONNREFUSED` on a\n // refused connection) while `message` stays a generic \"fetch failed\" — so\n // without this, the single most common real failure renders as no information\n // at all. `AbortError` from the timeout arrives as `name` instead.\n const causeMessage = (error as { cause?: { message?: unknown; code?: unknown } })?.cause;\n if (causeMessage) {\n const code = typeof causeMessage.code === 'string' ? causeMessage.code : undefined;\n const msg = typeof causeMessage.message === 'string' ? causeMessage.message : undefined;\n if (code) parts.push(`cause=${code}`);\n else if (msg) parts.push(`cause=${msg}`);\n }\n\n const name = (error as { name?: unknown })?.name;\n if (typeof name === 'string' && (name === 'AbortError' || name === 'TimeoutError')) {\n parts.push(`aborted=${name}`);\n }\n\n // Status/body arrive already formatted from the `!response.ok` branch above,\n // which reads them off the Response rather than off the error — `fetch` puts\n // nothing HTTP-shaped on the thrown value.\n\n if (parts.length === 0) {\n const typeName = (error as { constructor?: { name?: string } })?.constructor?.name;\n return typeName ? `unrenderable ${typeName}` : 'unrenderable error with no message, code, status or body';\n }\n\n return parts.join(' | ');\n}\n\n/**\n * @param resolveApplicationId - the caller's own application identity, taken from\n * RESOLVED CONFIGURATION rather than read from `process.env` here.\n *\n * The two are the same value for an application — the loader seeds\n * `config.applicationId` from `APPLICATION_ID` — but they are NOT the same for a\n * platform service, which resolves its identity locally and has no\n * `APPLICATION_ID` in env at all. Reading env here while the object-key builder\n * read configuration was a genuine dual-source split: the predicate that decides\n * whether storage is usable and the value the operation addresses could disagree,\n * and for every platform service they did. Passing it in makes the identity\n * single-sourced and defers \"which identity\" to the one place that knows.\n */\nexport function createStsStorageCredentialResolver(\n resolveApplicationId: () => string,\n): StorageCredentialResolver {\n return async (): Promise<ResolvedStorageCredentials> => {\n // ── The ISSUER may never be a CLIENT of itself ───────────────────────────\n //\n // apps-manager mints these credentials. If it ever takes this path it calls\n // its own HTTP endpoint during `initializeConfig()` — before its own listener\n // exists — which is a guaranteed `ECONNREFUSED` on every boot, not a race that\n // occasionally loses. That happened on 2026-08-12 and held `/health/ready` at\n // 503 for the process lifetime.\n //\n // It was PREVENTED before that only by accident: platform env files carry no\n // `APPLICATION_ID`, so the provider's `isConfigured()` happened to be false.\n // An accident is not a guard — it silently stops guarding the moment someone\n // supplies the variable, which is exactly what a future platform-plane STS\n // door will do. This is the explicit form, and it fails with a message naming\n // the real reason instead of a transport error that reads as a network fault.\n //\n // apps-manager does its own storage work with ADMIN rights through\n // `PlatformInfrastructureManagerService`; it does not need, and must not take,\n // the app-tier session path.\n if (process.env.SERVICE_NAME === PlatformApplicationType.PLATFORM_APPS_MANAGER) {\n throw new Error(\n 'Refusing to fetch object storage session credentials: this runtime IS the issuer '\n + `(${PlatformApplicationType.PLATFORM_APPS_MANAGER}). apps-manager brokers these `\n + 'credentials and must never request them from itself — it would call its own HTTP '\n + 'endpoint before that listener exists. Use the administrative object-storage '\n + 'configuration instead.',\n );\n }\n\n const appsManagerUrl = process.env.PLATFORM_APPS_MANAGER_URL;\n const primarySecret = process.env.PLATFORM_APPLICATION_PRIMARY_SECRET;\n // Never `process.env.APPLICATION_ID` — see the parameter's JSDoc.\n let applicationId: string | undefined;\n try {\n applicationId = resolveApplicationId();\n } catch {\n // The configuration getter throws when configuration is not initialized.\n // Treated as \"no identity yet\" so the message below names the whole\n // incomplete contract rather than escaping as an unrelated config error.\n applicationId = undefined;\n }\n\n if (!appsManagerUrl || !primarySecret || !applicationId) {\n throw new Error(\n 'Cannot obtain object storage credentials: the bootstrap contract is incomplete '\n + `(PLATFORM_APPS_MANAGER_URL: ${Boolean(appsManagerUrl)}, `\n + `PLATFORM_APPLICATION_PRIMARY_SECRET: ${Boolean(primarySecret)}, `\n + `applicationId: ${Boolean(applicationId)}).`,\n );\n }\n\n const payload = await requestStsCredentialPayload({\n url: `${appsManagerUrl.replace(/\\/+$/, '')}`\n + API_ROUTES_BACKEND_DEFINITIONS.APPS_MANAGER.GET_APPLICATION_STORAGE_SESSION_CREDENTIALS(),\n headers: {\n [WildoHeaderKeys.CONTENT_TYPE]: 'application/json',\n [WildoHeaderKeys.PLATFORM_SECRET]: primarySecret,\n [WildoHeaderKeys.APPLICATION_ID]: applicationId,\n ...(process.env.SERVICE_NAME ? { [WildoHeaderKeys.SERVICE_ID]: process.env.SERVICE_NAME } : {}),\n },\n });\n\n return parseStsCredentialPayload(payload);\n };\n}\n/**\n * Hard deadline for one STS credential fetch from apps-manager.\n *\n * This sits in front of every FIRST storage operation after a renewal, so the cost of an unbounded\n * wait is not a slow credential — it is an upload that stalls instead of failing, on a fail-closed\n * path with no fallback. 15s: the payload is a small JSON credential from a service on our own\n * network, and the operation behind it is a user waiting for a file to move.\n */\nconst STS_CREDENTIAL_REQUEST_TIMEOUT_MS = 15_000;\n\n\n/**\n * Perform the credential fetch and unwrap the response envelope.\n *\n * Shared by the APPLICATION-plane and PLATFORM-plane resolvers, deliberately: the\n * transport, the timeout, the non-2xx branch and the diagnostic are properties of\n * \"fetching a credential from apps-manager\", not of which door was used. This repo\n * has twice paid for a duplicated path where a guard added to one copy was a silent\n * gap in the other (`buildContextualFilter`, the Mongo/PostgreSQL repositories), and\n * a fail-closed credential path is the worst place to repeat that.\n */\nexport async function requestStsCredentialPayload(input: {\n url: string;\n headers: Record<string, string>;\n}): Promise<unknown> {\n try {\n // Global `fetch`, NOT an HTTP client library — deliberately.\n //\n // `axios` is a `peerDependency: \"*\"` of this package, not a dependency, so\n // reaching for it here would have added a runtime dependency to the storage\n // path that previously had none: it resolves today only because pnpm happens\n // to place axios in a reachable tree, and `backend-api` does not declare it at\n // all. A consumer that did not provide axios would fail at storage\n // initialisation — on a fail-closed path with no fallback, for a reason having\n // nothing to do with storage.\n //\n // `fetch` is a Node built-in on every runtime this framework supports, so the\n // storage path depends on nothing it is not guaranteed to have.\n const response = await fetch(input.url, {\n method: 'GET',\n headers: input.headers,\n signal: AbortSignal.timeout(STS_CREDENTIAL_REQUEST_TIMEOUT_MS),\n });\n\n if (!response.ok) {\n // `fetch` resolves on non-2xx rather than rejecting, so this has to be an\n // explicit branch — the classic footgun when porting from a client that\n // throws. Read the body BEFORE giving up on it: apps-manager explains the\n // refusal there, and that explanation is the whole diagnostic.\n const body = await response.text().catch(() => '');\n throw new Error(`status=${response.status}${body ? ` | body=${body.slice(0, 300)}` : ''}`);\n }\n\n const parsed = await response.json() as { data?: unknown } | null;\n return parsed?.data ?? parsed;\n } catch (error) {\n // Describe the failure from the HTTP error's OWN fields, not from\n // `describeCaughtError` alone.\n //\n // This wrapper previously read `describeCaughtError(error)` and nothing else,\n // and on 2026-08-10 it produced a message ending in a bare colon — the cause\n // was empty, so the one thing the wrapper exists to surface was the one thing\n // it discarded. Storage is a fail-closed path with no fallback by design, which\n // makes this the ONLY diagnostic a reader gets; an empty one sends them looking\n // at credentials when the fault may be transport, routing, or a non-2xx body.\n throw new Error(\n `Failed to obtain object storage session credentials from apps-manager: ${describeStsFetchFailure(error)}`,\n );\n }\n}\n\n/**\n * Validate the credential payload rather than trusting it.\n *\n * A malformed payload that reached the minio client would surface as an opaque\n * signature error on the first upload, a long way from the response that caused it;\n * a credential with no usable expiry would be cached forever by the provider and\n * then start failing mid-request once the server expired it.\n */\nexport function parseStsCredentialPayload(payload: unknown): ResolvedStorageCredentials {\n const credentials = payload as {\n accessKey?: unknown;\n secretKey?: unknown;\n sessionToken?: unknown;\n expiresAt?: unknown;\n applicationId?: unknown;\n } | null;\n\n if (\n typeof credentials?.accessKey !== 'string'\n || typeof credentials?.secretKey !== 'string'\n || typeof credentials?.sessionToken !== 'string'\n ) {\n throw new Error('apps-manager returned a malformed object storage session credential.');\n }\n\n const expiresAt = typeof credentials.expiresAt === 'string' ? new Date(credentials.expiresAt) : undefined;\n if (!expiresAt || Number.isNaN(expiresAt.getTime())) {\n throw new Error('apps-manager returned an object storage session credential without a usable expiry.');\n }\n\n return {\n accessKey: credentials.accessKey,\n secretKey: credentials.secretKey,\n sessionToken: credentials.sessionToken,\n expiresAt,\n // Carried through verbatim — the identity the ISSUER confined this credential\n // to. Passed on only when the issuer supplied a usable string; a consumer that\n // needs it must fail closed on absence rather than substitute its own.\n ...(typeof credentials.applicationId === 'string' && credentials.applicationId\n ? { applicationId: credentials.applicationId }\n : {}),\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wildo-managed-storage-provider.backend.service.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"wildo-managed-storage-provider.backend.service.d.ts","sourceRoot":"","sources":["../../../../src/files/storage/wildo-managed-storage-provider.backend.service.ts"],"names":[],"mappings":"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"}
|