@wildo-ai/saas-backend-lib 1.1.0 → 1.1.2
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/base-classes/services/controllers/controller-resource.backend.service.d.ts +14 -3
- 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 +115 -22
- 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 +3 -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 +8 -3
- package/dist/esm/base-classes/services/controllers/controllers-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.d.ts +11 -0
- package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.js +11 -2
- package/dist/esm/base-classes/services/repositories/field-clearing-partition.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/http-api-resource-repository.backend.service.d.ts +1 -0
- 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 +6 -1
- 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/odata-query-compiler.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.js +16 -0
- package/dist/esm/base-classes/services/repositories/http-api/odata-query-compiler.backend.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/infrastructure-tier-contract.backend.d.ts +20 -6
- 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 +88 -32
- 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 +3 -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-repository.backend.service.js +32 -7
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-repository.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/introspection/introspection-resource-source.backend.port.d.ts +8 -5
- 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/introspection/introspection-resource-source.backend.port.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/postgresql-resource-repository.backend.service.d.ts +31 -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 +127 -5
- 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 +71 -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 +62 -2
- package/dist/esm/base-classes/services/repositories/repositories-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.d.ts +21 -0
- 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 +126 -4
- package/dist/esm/base-classes/services/repositories/repository-resource.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.d.ts +3 -26
- 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-implementation-coverage.backend.utils.js +3 -68
- package/dist/esm/base-classes/services/services/resource-operation-implementation-coverage.backend.utils.js.map +1 -1
- 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 +4 -2
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js +6 -6
- package/dist/esm/billing/services/custom-impl/billing-account.mutations.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/audit-event-dispatcher.backend.service.d.ts +38 -0
- 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 +40 -0
- 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 +20 -0
- 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 +28 -0
- package/dist/esm/compliance/audit-trails/services/audit-logs.backend.service.js.map +1 -1
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts +12 -0
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.d.ts.map +1 -0
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js +118 -0
- package/dist/esm/compliance/audit-trails/services/siem-export-config-cache-invalidation.custom-impl.backend.service.js.map +1 -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 +8 -5
- package/dist/esm/compliance/audit-trails/services/siem-webhook-delivery.backend.service.js.map +1 -1
- 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 +14 -0
- package/dist/esm/compliance/audit-trails/services/utils/ocsf-activity-mapping.backend.utils.js.map +1 -1
- package/dist/esm/config/custom/application-config-controller.backend.service.d.ts.map +1 -1
- package/dist/esm/config/custom/application-config-controller.backend.service.js +7 -1
- package/dist/esm/config/custom/application-config-controller.backend.service.js.map +1 -1
- package/dist/esm/config/models/app-config.backend.schemas.d.ts +4 -0
- package/dist/esm/config/models/app-config.backend.schemas.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.utils.d.ts +10 -1
- package/dist/esm/config/services/app-configuration.backend.utils.d.ts.map +1 -1
- package/dist/esm/config/services/app-configuration.backend.utils.js +13 -2
- package/dist/esm/config/services/app-configuration.backend.utils.js.map +1 -1
- package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.d.ts +2 -2
- package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.js +2 -2
- package/dist/esm/data-seeding/services/shared/data-seed-scope-iteration.shared.utils.js.map +1 -1
- package/dist/esm/databases/models/filter.backend.schemas.js +2 -2
- package/dist/esm/databases/models/filter.backend.schemas.js.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-authorization.backend.service.js +20 -1
- package/dist/esm/databases/services/aggregation/aggregation-authorization.backend.service.js.map +1 -1
- package/dist/esm/databases/services/redis.service.d.ts +27 -0
- package/dist/esm/databases/services/redis.service.d.ts.map +1 -1
- package/dist/esm/databases/services/redis.service.js +29 -0
- package/dist/esm/databases/services/redis.service.js.map +1 -1
- package/dist/esm/errors/services/error-handler.backend.service.d.ts.map +1 -1
- package/dist/esm/errors/services/error-handler.backend.service.js +5 -0
- package/dist/esm/errors/services/error-handler.backend.service.js.map +1 -1
- package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.d.ts +41 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.d.ts.map +1 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.js +40 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.contracts.js.map +1 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.controller.d.ts +64 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.controller.d.ts.map +1 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.controller.js +193 -0
- package/dist/esm/external-data/controllers/external-data-admin.backend.controller.js.map +1 -0
- package/dist/esm/external-data/external-data-pipeline-run.backend.service.d.ts +13 -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 +8 -2
- 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/external-data-transform.backend.js +7 -1
- package/dist/esm/external-data/external-data-transform.backend.js.map +1 -1
- package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.d.ts +2 -0
- package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.d.ts.map +1 -1
- package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.js +13 -0
- package/dist/esm/external-data/models/external-data-pipeline-state.backend.schemas.js.map +1 -1
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts +14 -0
- 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 +6 -0
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.js.map +1 -1
- package/dist/esm/files/controllers/file.controller.d.ts +24 -1
- package/dist/esm/files/controllers/file.controller.d.ts.map +1 -1
- package/dist/esm/files/controllers/file.controller.js +66 -2
- package/dist/esm/files/controllers/file.controller.js.map +1 -1
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.d.ts +17 -0
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.d.ts.map +1 -0
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.js +1 -0
- package/dist/esm/files/handlers/file-upload-route-locals.backend.types.js.map +1 -0
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.d.ts +5 -1
- 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 +42 -3
- package/dist/esm/files/handlers/resource-file-upload-handler.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-operation-handler.backend.service.d.ts +18 -0
- 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 +36 -28
- package/dist/esm/files/services/file-operation-handler.backend.service.js.map +1 -1
- package/dist/esm/files/services/file-upload-grant.backend.service.d.ts +163 -0
- package/dist/esm/files/services/file-upload-grant.backend.service.d.ts.map +1 -0
- package/dist/esm/files/services/file-upload-grant.backend.service.js +442 -0
- package/dist/esm/files/services/file-upload-grant.backend.service.js.map +1 -0
- package/dist/esm/files/services/files.backend.service.d.ts +19 -0
- package/dist/esm/files/services/files.backend.service.d.ts.map +1 -1
- package/dist/esm/files/services/files.backend.service.js +78 -15
- package/dist/esm/files/services/files.backend.service.js.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 +12 -0
- package/dist/esm/files/utils/file-uploader.utils.js.map +1 -1
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js +5 -5
- package/dist/esm/flows-actors/a2a/services/a2a-task-cancellation.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/agents.backend.service.d.ts +79 -0
- package/dist/esm/flows-actors/services/agents.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/agents.backend.service.js +319 -42
- package/dist/esm/flows-actors/services/agents.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts +151 -41
- 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 +300 -139
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js.map +1 -1
- package/dist/esm/index.d.ts +4 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +14 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/inject/models/container.d.ts.map +1 -1
- package/dist/esm/inject/models/container.js +4 -0
- package/dist/esm/inject/models/container.js.map +1 -1
- package/dist/esm/inject/models/service-types.d.ts +3 -0
- package/dist/esm/inject/models/service-types.d.ts.map +1 -1
- package/dist/esm/inject/models/service-types.js +2 -0
- 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 +12 -4
- package/dist/esm/mcp/controllers/mcp.controller.js.map +1 -1
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.d.ts +34 -0
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.d.ts.map +1 -1
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.js +42 -0
- package/dist/esm/mcp/models/mcp-tool.backend.schemas.js.map +1 -1
- package/dist/esm/mcp/services/mcp-server.backend.service.d.ts +29 -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 +131 -3
- 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 +64 -2
- 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 +130 -6
- package/dist/esm/mcp/services/mcp-tool-adapter.backend.service.js.map +1 -1
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts +9 -0
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.d.ts.map +1 -1
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js +11 -36
- package/dist/esm/notifications/services/notifications-dispatcher.backend.service.js.map +1 -1
- 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 +9 -7
- 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 +5 -5
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.d.ts.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.js +14 -13
- package/dist/esm/notifications/webhooks/outbound/batches/m2m-webhook-delivery.batch.utils.js.map +1 -1
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.d.ts +2 -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 +2 -2
- package/dist/esm/notifications/webhooks/outbound/m2m-webhook-signed-request.backend.utils.js.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 +9 -7
- package/dist/esm/notifications/webhooks/outbound/services/webhook-config-test-endpoint.custom-impl.backend.service.js.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-custom-implementation.backend.service.js +4 -1
- package/dist/esm/organizations/services/organization-unit-custom-implementation.backend.service.js.map +1 -1
- package/dist/esm/requests/service/websocket.service.d.ts.map +1 -1
- package/dist/esm/requests/service/websocket.service.js +56 -7
- package/dist/esm/requests/service/websocket.service.js.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 +2 -0
- package/dist/esm/resources/models/custom-service-implementations.backend.definition.js.map +1 -1
- package/dist/esm/resources/services/resource-id.backend.service.js +3 -3
- package/dist/esm/resources/services/resource-id.backend.service.js.map +1 -1
- package/dist/esm/resources/services/resources-registry.backend.service.js +1 -1
- package/dist/esm/resources/services/resources-registry.backend.service.js.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 +13 -7
- package/dist/esm/runtime/services/execution-context-creator.backend.service.js.map +1 -1
- package/dist/esm/runtime/services/start-application.backend.service.d.ts +28 -0
- package/dist/esm/runtime/services/start-application.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/start-application.backend.service.js +82 -0
- package/dist/esm/runtime/services/start-application.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/models/jwt.backend.schemas.d.ts +3 -23
- package/dist/esm/security/authentications/models/jwt.backend.schemas.d.ts.map +1 -1
- package/dist/esm/security/authentications/models/jwt.backend.schemas.js +20 -45
- package/dist/esm/security/authentications/models/jwt.backend.schemas.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-method-management.backend.service.d.ts +9 -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 +9 -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-mfa.backend.service.js +5 -3
- package/dist/esm/security/authentications/services/auth-methods/auth-mfa.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.d.ts +25 -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 +55 -4
- package/dist/esm/security/authentications/services/auth-token-issuer.backend.service.js.map +1 -1
- package/dist/esm/security/authorizations/initiator-organization-confinement.backend.d.ts.map +1 -1
- package/dist/esm/security/authorizations/initiator-organization-confinement.backend.js +24 -1
- package/dist/esm/security/authorizations/initiator-organization-confinement.backend.js.map +1 -1
- package/dist/esm/security/authorizations/privileged-access-review.backend.utils.d.ts +117 -0
- package/dist/esm/security/authorizations/privileged-access-review.backend.utils.d.ts.map +1 -0
- package/dist/esm/security/authorizations/privileged-access-review.backend.utils.js +104 -0
- package/dist/esm/security/authorizations/privileged-access-review.backend.utils.js.map +1 -0
- package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts +101 -6
- package/dist/esm/security/authorizations/services/authorizations.backend.service.d.ts.map +1 -1
- package/dist/esm/security/authorizations/services/authorizations.backend.service.js +210 -30
- package/dist/esm/security/authorizations/services/authorizations.backend.service.js.map +1 -1
- package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.d.ts +18 -1
- package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.js +110 -74
- package/dist/esm/security/consumable-tokens/batches/consumable-tokens-cleanup.batch.backend.service.js.map +1 -1
- package/dist/esm/security/consumable-tokens/consumable-token-models.exports.d.ts +22 -0
- package/dist/esm/security/consumable-tokens/consumable-token-models.exports.d.ts.map +1 -0
- package/dist/esm/security/consumable-tokens/consumable-token-models.exports.js +22 -0
- package/dist/esm/security/consumable-tokens/consumable-token-models.exports.js.map +1 -0
- package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.d.ts +17 -3
- 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.backend.resources-config.schemas.js +12 -0
- package/dist/esm/security/consumable-tokens/models/consumable-tokens.backend.resources-config.schemas.js.map +1 -1
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.d.ts +20 -0
- 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 +58 -5
- package/dist/esm/security/consumable-tokens/services/consumable-token.backend.service.js.map +1 -1
- package/dist/esm/security/jwt/services/jwt.backend.service.d.ts.map +1 -1
- package/dist/esm/security/jwt/services/jwt.backend.service.js +1 -18
- package/dist/esm/security/jwt/services/jwt.backend.service.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +15 -9
- package/dist/esm/.builder.pid +0 -9
|
@@ -14,6 +14,7 @@ import { AuthorizationsBackendService } from '../../../security/authorizations/s
|
|
|
14
14
|
import { ExecutionContextCreatorBackendService } from '../../../runtime/services/execution-context-creator.backend.service';
|
|
15
15
|
import { ResourceFileUploadHandlerBackendService } from '../../../files/handlers/resource-file-upload-handler.backend.service';
|
|
16
16
|
import { FileFieldDetectionBackendService } from '../../../files/services/file-field-detection.backend.service';
|
|
17
|
+
import { FileUploadGrantBackendService } from '../../../files/services/file-upload-grant.backend.service';
|
|
17
18
|
import { ResourcesRegistryBackendService } from '../../../resources/services/resources-registry.backend.service';
|
|
18
19
|
import { ExecutionContextHandlerBackendService } from '../../../runtime/services/execution-context-handler.backend.service';
|
|
19
20
|
import { ResourceOperationHelperBackendService } from '../../../base-classes/services/resource-operations-helper.backend.service';
|
|
@@ -90,7 +91,7 @@ export declare function extractCollectionFilters(rawData: Record<string, unknown
|
|
|
90
91
|
* `{ startDate, endDate }` object the SEARCH request DTO expects.
|
|
91
92
|
*
|
|
92
93
|
* WHY THIS EXISTS — a date-range filter is authored as an OBJECT
|
|
93
|
-
* (`
|
|
94
|
+
* (`Resources_Filter_DateRangeSchema` → `{ startDate?: Date, endDate?: Date }`), and
|
|
94
95
|
* the frontend HTTP client / any generated SDK serialise it with bracket notation
|
|
95
96
|
* (OpenAPI `style: deepObject`). Express 5 defaults its query parser to `simple`
|
|
96
97
|
* (`querystring.parse`), under which `createdAt[startDate]=x` arrives as the LITERAL
|
|
@@ -137,11 +138,12 @@ export declare class ControllerResourceBackendService<TCustomOperationEnum exten
|
|
|
137
138
|
private readonly anonymousSessionService;
|
|
138
139
|
private readonly appConfigService;
|
|
139
140
|
private readonly rateLimitService;
|
|
141
|
+
private readonly fileUploadGrantService;
|
|
140
142
|
private readonly resourceConfiguration;
|
|
141
143
|
private readonly operationsMap;
|
|
142
144
|
private readonly router;
|
|
143
145
|
protected logDebug: (message: string, context?: Record<string, unknown>) => void;
|
|
144
|
-
constructor(resourceType: ResourceType, logger: LoggerService, errorBuilder: ErrorBuilderBackendService, errorHandler: ErrorHandlerService, jwtService: JwtBackendService, authorizationsService: AuthorizationsBackendService, resourcesRegistry: ResourcesRegistryBackendService, executionContextCreator: ExecutionContextCreatorBackendService, executionContextHandler: ExecutionContextHandlerBackendService, repositoriesRegistry: RepositoriesRegistryHandlerBackendService, resourceOperationHelper: ResourceOperationHelperBackendService, servicesRegistry: ServicesRegistryHandlerBackendService, fileFieldDetection: FileFieldDetectionBackendService, fileUploadHandler: ResourceFileUploadHandlerBackendService, auditLogsService: AuditLogsBackendService, anonymousSessionService: AnonymousSessionBackendService, appConfigService: AppConfigurationService, rateLimitService: RateLimitBackendService);
|
|
146
|
+
constructor(resourceType: ResourceType, logger: LoggerService, errorBuilder: ErrorBuilderBackendService, errorHandler: ErrorHandlerService, jwtService: JwtBackendService, authorizationsService: AuthorizationsBackendService, resourcesRegistry: ResourcesRegistryBackendService, executionContextCreator: ExecutionContextCreatorBackendService, executionContextHandler: ExecutionContextHandlerBackendService, repositoriesRegistry: RepositoriesRegistryHandlerBackendService, resourceOperationHelper: ResourceOperationHelperBackendService, servicesRegistry: ServicesRegistryHandlerBackendService, fileFieldDetection: FileFieldDetectionBackendService, fileUploadHandler: ResourceFileUploadHandlerBackendService, auditLogsService: AuditLogsBackendService, anonymousSessionService: AnonymousSessionBackendService, appConfigService: AppConfigurationService, rateLimitService: RateLimitBackendService, fileUploadGrantService: FileUploadGrantBackendService);
|
|
145
147
|
getRouter(): Router;
|
|
146
148
|
private resolveContextAddressedSingletonOperationAuthorizationId;
|
|
147
149
|
/**
|
|
@@ -165,7 +167,7 @@ export declare class ControllerResourceBackendService<TCustomOperationEnum exten
|
|
|
165
167
|
private resolveAssociationParentContextResourceId;
|
|
166
168
|
private stringifyPersistedValue;
|
|
167
169
|
private ensureFileUploadTargetMatchesRouteContext;
|
|
168
|
-
static createInstance<TCustomOperationEnum extends EnumLikeType | undefined = undefined, TCoreOperationEnum extends Partial<CoreResourceOperation> | undefined = undefined, TMainSchema extends z.ZodTypeAny = z.ZodTypeAny>(resourceType: ResourceType, logger: LoggerService, errorBuilder: ErrorBuilderBackendService, errorHandler: ErrorHandlerService, jwtService: JwtBackendService, authorizationsService: AuthorizationsBackendService, resourcesRegistry: ResourcesRegistryBackendService, executionContextCreator: ExecutionContextCreatorBackendService, executionContextHandler: ExecutionContextHandlerBackendService, repositoriesRegistry: RepositoriesRegistryHandlerBackendService, resourceOperationHelper: ResourceOperationHelperBackendService, servicesRegistry: ServicesRegistryHandlerBackendService, fileFieldDetection: FileFieldDetectionBackendService, fileUploadHandler: ResourceFileUploadHandlerBackendService, auditLogsService: AuditLogsBackendService, anonymousSessionService: AnonymousSessionBackendService, appConfigService: AppConfigurationService, rateLimitService: RateLimitBackendService): ControllerResourceBackendService<TCustomOperationEnum, TCoreOperationEnum, TMainSchema>;
|
|
170
|
+
static createInstance<TCustomOperationEnum extends EnumLikeType | undefined = undefined, TCoreOperationEnum extends Partial<CoreResourceOperation> | undefined = undefined, TMainSchema extends z.ZodTypeAny = z.ZodTypeAny>(resourceType: ResourceType, logger: LoggerService, errorBuilder: ErrorBuilderBackendService, errorHandler: ErrorHandlerService, jwtService: JwtBackendService, authorizationsService: AuthorizationsBackendService, resourcesRegistry: ResourcesRegistryBackendService, executionContextCreator: ExecutionContextCreatorBackendService, executionContextHandler: ExecutionContextHandlerBackendService, repositoriesRegistry: RepositoriesRegistryHandlerBackendService, resourceOperationHelper: ResourceOperationHelperBackendService, servicesRegistry: ServicesRegistryHandlerBackendService, fileFieldDetection: FileFieldDetectionBackendService, fileUploadHandler: ResourceFileUploadHandlerBackendService, auditLogsService: AuditLogsBackendService, anonymousSessionService: AnonymousSessionBackendService, appConfigService: AppConfigurationService, rateLimitService: RateLimitBackendService, fileUploadGrantService: FileUploadGrantBackendService): ControllerResourceBackendService<TCustomOperationEnum, TCoreOperationEnum, TMainSchema>;
|
|
169
171
|
private initializeOperationsMap;
|
|
170
172
|
private initializeRoutes;
|
|
171
173
|
/**
|
|
@@ -231,6 +233,15 @@ export declare class ControllerResourceBackendService<TCustomOperationEnum exten
|
|
|
231
233
|
* first avoids unauthenticated callers forcing temp-disk writes through Multer
|
|
232
234
|
* while still reusing the exact same execution context for the later upload.
|
|
233
235
|
*/
|
|
236
|
+
/**
|
|
237
|
+
* The handler behind `POST …/files/<field>/grant` (issue #312, D3). Runs AFTER the upload route's
|
|
238
|
+
* own authorization middleware, so by the time it executes the caller has been authorized on the
|
|
239
|
+
* target write exactly as an upload would be. It computes the two absolute URLs the grant needs from
|
|
240
|
+
* the request itself — the upload URL is this request's URL minus `/grant`, so it cannot drift from
|
|
241
|
+
* the route that was just authorized — and delegates the mint to the ONE function the MCP door also
|
|
242
|
+
* calls. Answers 201 with the grant; the token appears in it because it is the credential.
|
|
243
|
+
*/
|
|
244
|
+
private buildFileUploadGrantMintHandler;
|
|
234
245
|
private createFileUploadAuthorizationMiddleware;
|
|
235
246
|
/**
|
|
236
247
|
* Initialize validate-field routes for resources with unique fields.
|
package/dist/esm/base-classes/services/controllers/controller-resource.backend.service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller-resource.backend.service.d.ts","sourceRoot":"","sources":["../../../../../../src/base-classes/services/controllers/controller-resource.backend.service.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,MAAM,EAAmC,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EACV,2BAA2B,EAE3B,+BAA+B,EAE/B,YAAY,EAEZ,gDAAgD,EAKjD,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAwD,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"controller-resource.backend.service.d.ts","sourceRoot":"","sources":["../../../../../../src/base-classes/services/controllers/controller-resource.backend.service.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,MAAM,EAAmC,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EACV,2BAA2B,EAE3B,+BAA+B,EAE/B,YAAY,EAEZ,gDAAgD,EAKjD,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAwD,MAAM,0BAA0B,CAAC;AAuB9G,OAAO,EAAE,qBAAqB,EAAyF,MAAM,uBAAuB,CAAC;AAGrJ,OAAO,EAAE,aAAa,EAAE,MAAM,8DAA8D,CAAC;AAC7F,OAAO,EAAE,qCAAqC,EAAE,MAAM,6FAA6F,CAAC;AACpJ,OAAO,EAAE,yCAAyC,EAAE,MAAM,qGAAqG,CAAC;AAChK,OAAO,EAAE,0BAA0B,EAAE,MAAM,kEAAkE,CAAC;AAC9G,OAAO,EAAE,mBAAmB,EAAE,MAAM,kEAAkE,CAAC;AAEvG,OAAO,EAAE,iBAAiB,EAAE,MAAM,8DAA8D,CAAC;AACjG,OAAO,EAAE,4BAA4B,EAAE,MAAM,oFAAoF,CAAC;AAClI,OAAO,EAAE,qCAAqC,EAAE,MAAM,+EAA+E,CAAC;AACtI,OAAO,EAAE,uCAAuC,EAAE,MAAM,gFAAgF,CAAC;AACzI,OAAO,EAAE,gCAAgC,EAAE,MAAM,wEAAwE,CAAC;AAE1H,OAAO,EAAE,6BAA6B,EAAE,MAAM,qEAAqE,CAAC;AAGpH,OAAO,EAAE,+BAA+B,EAAE,MAAM,0EAA0E,CAAC;AAG3H,OAAO,EAAE,qCAAqC,EAAE,MAAM,+EAA+E,CAAC;AACtI,OAAO,EAAE,qCAAqC,EAAE,MAAM,qFAAqF,CAAC;AAE5I,OAAO,EAAE,uBAAuB,EAAE,MAAM,gFAAgF,CAAC;AACzH,OAAO,EAAE,8BAA8B,EAAE,MAAM,wFAAwF,CAAC;AACxI,OAAO,EAAE,uBAAuB,EAAE,MAAM,sEAAsE,CAAC;AAC/G,OAAO,EAAE,uBAAuB,EAAE,MAAM,+DAA+D,CAAC;AAsBxG,wBAAgB,mCAAmC,CACjD,kBAAkB,EAAE,MAAM,EAC1B,qBAAqB,EAAE,OAAO,GAC7B,OAAO,CAET;AAcD,KAAK,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAElD,KAAK,0BAA0B,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,mBAAmB,CAAC;CAC5B,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,KAAK,gCAAgC,GAAG;IACtC,YAAY,CAAC,EAAE,2BAA2B,CAAC,cAAc,CAAC,CAAC;CAC5D,CAAC;AA+KF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,kCAAkC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAmB/E;AAqGD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,YAAY,EAAE,gCAAgC,CAAC,cAAc,CAAC,GAC7D,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgBzB;AAmED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,YAAY,EAAE,gCAAgC,CAAC,cAAc,CAAC,GAC7D,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8BzB;AAED,wBAAgB,kCAAkC,CAChD,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAET;AAED,wBAAgB,+BAA+B,CAC7C,kBAAkB,EAAE,MAAM,EAC1B,uBAAuB,EAAE,MAAM,EAC/B,aAAa,EAAE,IAAI,CAAC,gDAAgD,EAAE,YAAY,CAAC,EACnF,gCAAgC,CAAC,EAAE,MAAM,EAAE,GAC1C,OAAO,CAyBT;AAWD,qBAAa,gCAAgC,CAC3C,oBAAoB,SAAS,YAAY,GAAG,SAAS,GAAG,SAAS,EACjE,kBAAkB,SAAS,OAAO,CAAC,qBAAqB,CAAC,GAAG,SAAS,GAAG,SAAS,EACjF,WAAW,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;IAU7C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAzBzC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA+E;IACrH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsG;IACpI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;gBAG/E,YAAY,EAAE,YAAY,EACT,MAAM,EAAE,aAAa,EACrB,YAAY,EAAE,0BAA0B,EACxC,YAAY,EAAE,mBAAmB,EACjC,UAAU,EAAE,iBAAiB,EAC7B,qBAAqB,EAAE,4BAA4B,EACnD,iBAAiB,EAAE,+BAA+B,EAClD,uBAAuB,EAAE,qCAAqC,EAC9D,uBAAuB,EAAE,qCAAqC,EAC9D,oBAAoB,EAAE,yCAAyC,EAC/D,uBAAuB,EAAE,qCAAqC,EAC9D,gBAAgB,EAAE,qCAAqC,EACvD,kBAAkB,EAAE,gCAAgC,EACpD,iBAAiB,EAAE,uCAAuC,EAC1D,gBAAgB,EAAE,uBAAuB,EACzC,uBAAuB,EAAE,8BAA8B,EACvD,gBAAgB,EAAE,uBAAuB,EACzC,gBAAgB,EAAE,uBAAuB,EACzC,sBAAsB,EAAE,6BAA6B;IAkBjE,SAAS,IAAI,MAAM;YAGZ,wDAAwD;IAqKtE;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,uCAAuC;YAgBjC,0DAA0D;IA0MxE,OAAO,CAAC,uDAAuD;IAc/D,OAAO,CAAC,yDAAyD;IAcjE,OAAO,CAAC,+BAA+B;IAoBvC,OAAO,CAAC,8BAA8B;IAsBtC,OAAO,CAAC,yCAAyC;IA+BjD,OAAO,CAAC,uBAAuB;YAoBjB,yCAAyC;IA4JvD,MAAM,CAAC,cAAc,CACnB,oBAAoB,SAAS,YAAY,GAAG,SAAS,GAAG,SAAS,EACjE,kBAAkB,SAAS,OAAO,CAAC,qBAAqB,CAAC,GAAG,SAAS,GAAG,SAAS,EACjF,WAAW,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,EAE/C,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,aAAa,EACrB,YAAY,EAAE,0BAA0B,EACxC,YAAY,EAAE,mBAAmB,EACjC,UAAU,EAAE,iBAAiB,EAC7B,qBAAqB,EAAE,4BAA4B,EACnD,iBAAiB,EAAE,+BAA+B,EAClD,uBAAuB,EAAE,qCAAqC,EAC9D,uBAAuB,EAAE,qCAAqC,EAC9D,oBAAoB,EAAE,yCAAyC,EAC/D,uBAAuB,EAAE,qCAAqC,EAC9D,gBAAgB,EAAE,qCAAqC,EACvD,kBAAkB,EAAE,gCAAgC,EACpD,iBAAiB,EAAE,uCAAuC,EAC1D,gBAAgB,EAAE,uBAAuB,EACzC,uBAAuB,EAAE,8BAA8B,EACvD,gBAAgB,EAAE,uBAAuB,EACzC,gBAAgB,EAAE,uBAAuB,EACzC,sBAAsB,EAAE,6BAA6B,GACpD,gCAAgC,CAAC,oBAAoB,EAAE,kBAAkB,EAAE,WAAW,CAAC;IAU1F,OAAO,CAAC,uBAAuB;IAoB/B,OAAO,CAAC,gBAAgB;IAqCxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,OAAO,CAAC,yBAAyB;IAuGjC;;;;;OAKG;IACH;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,0BAA0B;IAsRlC;;;;;;;OAOG;IACH;;;;;;;OAOG;IACH,OAAO,CAAC,+BAA+B;IAyDvC,OAAO,CAAC,uCAAuC;IAgG/C;;;;;;OAMG;IACH,OAAO,CAAC,6BAA6B;IAerC;;;OAGG;IACH,OAAO,CAAC,YAAY;IAOpB;;;;;;OAMG;IACH,OAAO,CAAC,mCAAmC;IA8C3C,OAAO,CAAC,uBAAuB;IAyB/B,OAAO,CAAC,8BAA8B;YAiBxB,WAAW;IA+VzB;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;YACW,sBAAsB;IAmMpC;;;;;;OAMG;YACW,8BAA8B;YAkC9B,0BAA0B;YAuC1B,2BAA2B;IAoEzC,OAAO,CAAC,mCAAmC;IAkD3C,OAAO,CAAC,qCAAqC;IAgD7C,OAAO,CAAC,mCAAmC;IAc3C,OAAO,CAAC,mCAAmC;IA4B3C,OAAO,CAAC,mBAAmB;IAgI3B;;;;;;;;OAQG;IACH,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,uCAAuC;IA2B/C,OAAO,CAAC,wCAAwC;IAuBhD;;;;;;;;OAQG;IACH,OAAO,CAAC,iBAAiB;YAOX,YAAY;IAkH1B,OAAO,CAAC,yBAAyB;CAiBlC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,mCAAmC,CACjD,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,SAAS,EAAE,+BAA+B,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACzD,kBAAkB,EAAE,MAAM,EAC1B,kBAAkB,EAAE,SAAS,+BAA+B,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAC5E,0BAA0B,CA4E5B"}
|
|
@@ -2,13 +2,15 @@ import 'reflect-metadata';
|
|
|
2
2
|
import { Router } from 'express';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { getZodObjectShape, isExcludedFromUpdate, isZodObject } from '@wildo-ai/zod-decorators';
|
|
5
|
-
import { HttpMethod, DataMode, OPERATION_VARIANT_KEY, ResourcesConfigOperationsDtosBuilderUtils, ResourceOperationsUtils, ResourcesConfigOperationsUrlsBuilderUtils, extractCrdtFieldNames } from '@wildo-ai/saas-models';
|
|
5
|
+
import { HttpMethod, DataMode, OPERATION_VARIANT_KEY, ResourcesConfigOperationsDtosBuilderUtils, ResourceOperationsUtils, ResourcesConfigOperationsUrlsBuilderUtils, extractCrdtFieldNames, COLLECTION_QUERY_PARAMETERS, BackendApiType, FileUploadGrantMintRequestSchema, MAIN_API_BASE_PATH, } from '@wildo-ai/saas-models';
|
|
6
6
|
import { summarizeZodIssues } from '@wildo-ai/saas-models';
|
|
7
7
|
import { buildCollectionExportFilename, COLLECTION_EXPORT_CONTENT_TYPES, COLLECTION_EXPORT_FORMAT_QUERY_PARAM, COLLECTION_EXPORT_ROW_COUNT_HEADER, COLLECTION_EXPORT_ROW_SCOPE_QUERY_PARAM, ResourceCollectionExportFormat, ResourceCollectionExportRowScope, ResourceGeneratedOperationKind, resolveCollectionExportCsvColumns, resolveRequestedCollectionExportFormat, resolveRequestedCollectionExportRowScope, toCsvHeaderRow, toCsvRow, } from '@wildo-ai/saas-models';
|
|
8
8
|
import { CoreResourceOperation, ALL_COLLECTION_OPERATIONS, OPERATIONS_WITHOUT_REQUEST_BODY } from '@wildo-ai/saas-models';
|
|
9
9
|
import { ResourceOperationVariantType, ResourcesConfig_OperationPathUtils, ErrorType, ErrorCustomMessageReference, WildoHeaderKeys, getContextAddressedCompositionSingletonRelationshipCandidates, isWildoBackendError, RelationshipNature, ResourceRelationshipCardinality } from '@wildo-ai/saas-models';
|
|
10
10
|
import { projectWildoBackendErrorLogFields, projectCaughtErrorLogFields, describeCaughtError } from '../../../errors/utils/error-log-level-classification.backend.utils.js';
|
|
11
11
|
import { createMulterUploadConfig } from '../../../files/utils/file-upload.utils.js';
|
|
12
|
+
import { FileUploadGrantBackendService } from '../../../files/services/file-upload-grant.backend.service.js';
|
|
13
|
+
import { getClientIpFromRequest } from '../../../runtime/utils/request-client-ip.utils.js';
|
|
12
14
|
import { resolveConfiguredMaxFileSize } from '../../../files/utils/file-validation.utils.js';
|
|
13
15
|
import { initializeValidateFieldRoutes } from './validate-field-handler.backend.service.js';
|
|
14
16
|
import { serializeOperationResultForResponse } from './utils/operation-response-serializer.backend.utils.js';
|
|
@@ -324,7 +326,7 @@ export function extractCollectionFilters(rawData, filterFields) {
|
|
|
324
326
|
* - a scalar (`string` / `number` / `boolean` / `null` / `Date`), or
|
|
325
327
|
* - an array of scalars, or
|
|
326
328
|
* - a range object whose keys are exactly {@link RANGE_FILTER_SUBKEYS}, the framework's OWN named
|
|
327
|
-
* date-range vocabulary (`
|
|
329
|
+
* date-range vocabulary (`Resources_Filter_DateRangeSchema`), with scalar bounds.
|
|
328
330
|
*
|
|
329
331
|
* Anything else is refused, whatever engine's syntax it happens to be written in. Adding a genuinely
|
|
330
332
|
* new structured filter shape is then a deliberate edit to this predicate and its named vocabulary,
|
|
@@ -354,9 +356,9 @@ function isPermittedFilterValue(value) {
|
|
|
354
356
|
return entries.length > 0
|
|
355
357
|
&& entries.every(([key, bound]) => RANGE_FILTER_SUBKEYS.has(key) && isPermittedFilterScalar(bound));
|
|
356
358
|
}
|
|
357
|
-
/** Date-range filters accepted on every collection op (mirrors `
|
|
359
|
+
/** Date-range filters accepted on every collection op (mirrors `Resources_Filter_BaseSchema`). */
|
|
358
360
|
const UNIVERSAL_RANGE_FILTER_FIELDS = ['createdAt', 'updatedAt'];
|
|
359
|
-
/** The two sub-keys of a `
|
|
361
|
+
/** The two sub-keys of a `Resources_Filter_DateRangeSchema` range object. */
|
|
360
362
|
const RANGE_FILTER_SUBKEYS = new Set(['startDate', 'endDate']);
|
|
361
363
|
/**
|
|
362
364
|
* Reconstruct date-range filters sent as BRACKETED query keys
|
|
@@ -364,7 +366,7 @@ const RANGE_FILTER_SUBKEYS = new Set(['startDate', 'endDate']);
|
|
|
364
366
|
* `{ startDate, endDate }` object the SEARCH request DTO expects.
|
|
365
367
|
*
|
|
366
368
|
* WHY THIS EXISTS — a date-range filter is authored as an OBJECT
|
|
367
|
-
* (`
|
|
369
|
+
* (`Resources_Filter_DateRangeSchema` → `{ startDate?: Date, endDate?: Date }`), and
|
|
368
370
|
* the frontend HTTP client / any generated SDK serialise it with bracket notation
|
|
369
371
|
* (OpenAPI `style: deepObject`). Express 5 defaults its query parser to `simple`
|
|
370
372
|
* (`querystring.parse`), under which `createdAt[startDate]=x` arrives as the LITERAL
|
|
@@ -465,11 +467,12 @@ export class ControllerResourceBackendService {
|
|
|
465
467
|
anonymousSessionService;
|
|
466
468
|
appConfigService;
|
|
467
469
|
rateLimitService;
|
|
470
|
+
fileUploadGrantService;
|
|
468
471
|
resourceConfiguration;
|
|
469
472
|
operationsMap;
|
|
470
473
|
router;
|
|
471
474
|
logDebug;
|
|
472
|
-
constructor(resourceType, logger, errorBuilder, errorHandler, jwtService, authorizationsService, resourcesRegistry, executionContextCreator, executionContextHandler, repositoriesRegistry, resourceOperationHelper, servicesRegistry, fileFieldDetection, fileUploadHandler, auditLogsService, anonymousSessionService, appConfigService, rateLimitService) {
|
|
475
|
+
constructor(resourceType, logger, errorBuilder, errorHandler, jwtService, authorizationsService, resourcesRegistry, executionContextCreator, executionContextHandler, repositoriesRegistry, resourceOperationHelper, servicesRegistry, fileFieldDetection, fileUploadHandler, auditLogsService, anonymousSessionService, appConfigService, rateLimitService, fileUploadGrantService) {
|
|
473
476
|
this.logger = logger;
|
|
474
477
|
this.errorBuilder = errorBuilder;
|
|
475
478
|
this.errorHandler = errorHandler;
|
|
@@ -487,6 +490,7 @@ export class ControllerResourceBackendService {
|
|
|
487
490
|
this.anonymousSessionService = anonymousSessionService;
|
|
488
491
|
this.appConfigService = appConfigService;
|
|
489
492
|
this.rateLimitService = rateLimitService;
|
|
493
|
+
this.fileUploadGrantService = fileUploadGrantService;
|
|
490
494
|
this.resourceConfiguration = this.resourcesRegistry.getResourceConfiguration(resourceType);
|
|
491
495
|
this.router = Router();
|
|
492
496
|
this.operationsMap = new Map();
|
|
@@ -951,8 +955,8 @@ export class ControllerResourceBackendService {
|
|
|
951
955
|
// ================================
|
|
952
956
|
// Initialization
|
|
953
957
|
// ================================
|
|
954
|
-
static createInstance(resourceType, logger, errorBuilder, errorHandler, jwtService, authorizationsService, resourcesRegistry, executionContextCreator, executionContextHandler, repositoriesRegistry, resourceOperationHelper, servicesRegistry, fileFieldDetection, fileUploadHandler, auditLogsService, anonymousSessionService, appConfigService, rateLimitService) {
|
|
955
|
-
return new ControllerResourceBackendService(resourceType, logger, errorBuilder, errorHandler, jwtService, authorizationsService, resourcesRegistry, executionContextCreator, executionContextHandler, repositoriesRegistry, resourceOperationHelper, servicesRegistry, fileFieldDetection, fileUploadHandler, auditLogsService, anonymousSessionService, appConfigService, rateLimitService);
|
|
958
|
+
static createInstance(resourceType, logger, errorBuilder, errorHandler, jwtService, authorizationsService, resourcesRegistry, executionContextCreator, executionContextHandler, repositoriesRegistry, resourceOperationHelper, servicesRegistry, fileFieldDetection, fileUploadHandler, auditLogsService, anonymousSessionService, appConfigService, rateLimitService, fileUploadGrantService) {
|
|
959
|
+
return new ControllerResourceBackendService(resourceType, logger, errorBuilder, errorHandler, jwtService, authorizationsService, resourcesRegistry, executionContextCreator, executionContextHandler, repositoriesRegistry, resourceOperationHelper, servicesRegistry, fileFieldDetection, fileUploadHandler, auditLogsService, anonymousSessionService, appConfigService, rateLimitService, fileUploadGrantService);
|
|
956
960
|
}
|
|
957
961
|
initializeOperationsMap() {
|
|
958
962
|
if (!this.resourceConfiguration.operations) {
|
|
@@ -1190,12 +1194,13 @@ export class ControllerResourceBackendService {
|
|
|
1190
1194
|
requiresTargetResourceId: false,
|
|
1191
1195
|
resourceType,
|
|
1192
1196
|
fieldName,
|
|
1197
|
+
grantOperation: CoreResourceOperation.CREATE,
|
|
1193
1198
|
});
|
|
1194
1199
|
this.router.post(createPath, authorizeCreateUpload, upload.single('file'), // Multer middleware - expects 'file' field name
|
|
1195
1200
|
this.asyncHandler(async (req, res, next) => {
|
|
1196
1201
|
try {
|
|
1197
1202
|
const executionContext = res.locals.fileUploadExecutionContext
|
|
1198
|
-
?? await this.executionContextCreator.createExecutionContextFromRequest(req, createOperation, {
|
|
1203
|
+
?? await this.executionContextCreator.createExecutionContextFromRequest(req, FileUploadGrantBackendService.withUploadGrantAcceptance(createOperation), {
|
|
1199
1204
|
url: fileUploadInitiatorInfo.url,
|
|
1200
1205
|
parameters: fileUploadInitiatorInfo.parameters,
|
|
1201
1206
|
});
|
|
@@ -1212,6 +1217,9 @@ export class ControllerResourceBackendService {
|
|
|
1212
1217
|
path: createPath,
|
|
1213
1218
|
parentParams: fileUploadInitiatorInfo.parameters.map(p => `${p.fieldIdentifier}:${p.resourceType}`).join(', ') || 'none',
|
|
1214
1219
|
});
|
|
1220
|
+
// Mint door (issue #312, D3): a SIBLING of the upload route, behind the SAME authorization
|
|
1221
|
+
// middleware, so mint-authority ≡ upload-authority by construction.
|
|
1222
|
+
this.router.post(`${createPath}/grant`, authorizeCreateUpload, this.asyncHandler(this.buildFileUploadGrantMintHandler({ resourceType, fieldName, operation: CoreResourceOperation.CREATE })));
|
|
1215
1223
|
}
|
|
1216
1224
|
// UPDATE routes (one per parent combination)
|
|
1217
1225
|
// Register more specific routes first (with parent paths) for correct Express matching
|
|
@@ -1227,6 +1235,7 @@ export class ControllerResourceBackendService {
|
|
|
1227
1235
|
allowContextAddressedTarget: options.allowContextAddressedTarget,
|
|
1228
1236
|
resourceType,
|
|
1229
1237
|
fieldName,
|
|
1238
|
+
grantOperation: CoreResourceOperation.UPDATE,
|
|
1230
1239
|
});
|
|
1231
1240
|
this.router.post(updatePath, authorizeUpdateUpload, upload.single('file'), // Multer middleware
|
|
1232
1241
|
this.asyncHandler(async (req, res, next) => {
|
|
@@ -1245,7 +1254,7 @@ export class ControllerResourceBackendService {
|
|
|
1245
1254
|
});
|
|
1246
1255
|
}
|
|
1247
1256
|
const executionContext = locals.fileUploadExecutionContext
|
|
1248
|
-
?? await this.executionContextCreator.createExecutionContextFromRequest(req, updateOperation, {
|
|
1257
|
+
?? await this.executionContextCreator.createExecutionContextFromRequest(req, FileUploadGrantBackendService.withUploadGrantAcceptance(updateOperation), {
|
|
1249
1258
|
url: fileUploadInitiatorInfo.url,
|
|
1250
1259
|
parameters: fileUploadInitiatorInfo.parameters,
|
|
1251
1260
|
});
|
|
@@ -1255,6 +1264,7 @@ export class ControllerResourceBackendService {
|
|
|
1255
1264
|
next(error);
|
|
1256
1265
|
}
|
|
1257
1266
|
}));
|
|
1267
|
+
this.router.post(`${updatePath}/grant`, authorizeUpdateUpload, this.asyncHandler(this.buildFileUploadGrantMintHandler({ resourceType, fieldName, operation: CoreResourceOperation.UPDATE })));
|
|
1258
1268
|
this.logDebug('File upload UPDATE route registered', {
|
|
1259
1269
|
resourceType,
|
|
1260
1270
|
fieldName,
|
|
@@ -1311,10 +1321,75 @@ export class ControllerResourceBackendService {
|
|
|
1311
1321
|
* first avoids unauthenticated callers forcing temp-disk writes through Multer
|
|
1312
1322
|
* while still reusing the exact same execution context for the later upload.
|
|
1313
1323
|
*/
|
|
1324
|
+
/**
|
|
1325
|
+
* The handler behind `POST …/files/<field>/grant` (issue #312, D3). Runs AFTER the upload route's
|
|
1326
|
+
* own authorization middleware, so by the time it executes the caller has been authorized on the
|
|
1327
|
+
* target write exactly as an upload would be. It computes the two absolute URLs the grant needs from
|
|
1328
|
+
* the request itself — the upload URL is this request's URL minus `/grant`, so it cannot drift from
|
|
1329
|
+
* the route that was just authorized — and delegates the mint to the ONE function the MCP door also
|
|
1330
|
+
* calls. Answers 201 with the grant; the token appears in it because it is the credential.
|
|
1331
|
+
*/
|
|
1332
|
+
buildFileUploadGrantMintHandler(target) {
|
|
1333
|
+
return async (req, res, next) => {
|
|
1334
|
+
try {
|
|
1335
|
+
const locals = res.locals;
|
|
1336
|
+
const executionContext = locals.fileUploadExecutionContext;
|
|
1337
|
+
if (!executionContext) {
|
|
1338
|
+
throw this.errorBuilder.buildError(ErrorType.INTERNAL, {}, {
|
|
1339
|
+
customMessageReference: ErrorCustomMessageReference.INTERNAL,
|
|
1340
|
+
context: { message: 'Upload grant mint reached without an authorized context' },
|
|
1341
|
+
});
|
|
1342
|
+
}
|
|
1343
|
+
const resourceId = target.operation === CoreResourceOperation.UPDATE
|
|
1344
|
+
? (locals.fileUploadResolvedResourceId ?? req.params[this.resourceConfiguration.resourceFieldIdentifier])
|
|
1345
|
+
: undefined;
|
|
1346
|
+
const parsedBody = FileUploadGrantMintRequestSchema.safeParse(req.body ?? {});
|
|
1347
|
+
if (!parsedBody.success) {
|
|
1348
|
+
throw this.errorBuilder.buildError(ErrorType.VALIDATION, executionContext, {
|
|
1349
|
+
customMessageReference: ErrorCustomMessageReference.VALIDATION,
|
|
1350
|
+
context: { errors: parsedBody.error.issues.map((issue) => ({ path: issue.path.join('.'), message: issue.message })) },
|
|
1351
|
+
});
|
|
1352
|
+
}
|
|
1353
|
+
// The API's own public origin comes from configuration, never from request headers — a
|
|
1354
|
+
// Host header is client-controlled and a grant URL built from it would point wherever the
|
|
1355
|
+
// caller said.
|
|
1356
|
+
const apiPublicUrl = this.appConfigService.config.runtime?.endPoints?.[BackendApiType.MAIN_BACKEND_API]?.publicUrl;
|
|
1357
|
+
if (!apiPublicUrl) {
|
|
1358
|
+
throw this.errorBuilder.buildError(ErrorType.CONFIGURATION, executionContext, {
|
|
1359
|
+
customMessageReference: ErrorCustomMessageReference.CONFIGURATION,
|
|
1360
|
+
context: { message: `runtime.endPoints.${BackendApiType.MAIN_BACKEND_API}.publicUrl is required to mint a file upload grant` },
|
|
1361
|
+
});
|
|
1362
|
+
}
|
|
1363
|
+
const origin = apiPublicUrl.replace(/\/+$/, '');
|
|
1364
|
+
const requestPath = (req.originalUrl.split('?')[0] ?? '').replace(/\/grant\/?$/, '');
|
|
1365
|
+
const uploadUrl = `${origin}${requestPath}`;
|
|
1366
|
+
const apiBaseUrl = `${origin}${req.baseUrl || MAIN_API_BASE_PATH}`;
|
|
1367
|
+
const grant = await this.fileUploadGrantService.mint({
|
|
1368
|
+
executionContext,
|
|
1369
|
+
target: { ...target, resourceId },
|
|
1370
|
+
expiresInMinutes: parsedBody.data.expiresInMinutes,
|
|
1371
|
+
uploadUrl,
|
|
1372
|
+
apiBaseUrl,
|
|
1373
|
+
requestProvenance: {
|
|
1374
|
+
ipAddress: getClientIpFromRequest(req),
|
|
1375
|
+
userAgent: typeof req.headers['user-agent'] === 'string' ? req.headers['user-agent'] : undefined,
|
|
1376
|
+
},
|
|
1377
|
+
});
|
|
1378
|
+
res.status(201).json(grant);
|
|
1379
|
+
}
|
|
1380
|
+
catch (error) {
|
|
1381
|
+
next(error);
|
|
1382
|
+
}
|
|
1383
|
+
};
|
|
1384
|
+
}
|
|
1314
1385
|
createFileUploadAuthorizationMiddleware(operation, fileUploadInitiatorInfo, options) {
|
|
1386
|
+
// The upload routes — and ONLY the upload routes — accept a file upload GRANT as an ALTERNATIVE
|
|
1387
|
+
// credential (issue #312, D4). The authored operation is left untouched, so the JSON CREATE/UPDATE
|
|
1388
|
+
// routes refuse the same token (GATE 1, `CONSUMABLE_TOKEN_NOT_ACCEPTED_FOR_OPERATION`).
|
|
1389
|
+
const acceptingOperation = FileUploadGrantBackendService.withUploadGrantAcceptance(operation);
|
|
1315
1390
|
return this.asyncHandler(async (req, res, next) => {
|
|
1316
1391
|
try {
|
|
1317
|
-
let executionContext = await this.executionContextCreator.createExecutionContextFromRequest(req,
|
|
1392
|
+
let executionContext = await this.executionContextCreator.createExecutionContextFromRequest(req, acceptingOperation, {
|
|
1318
1393
|
url: fileUploadInitiatorInfo.url,
|
|
1319
1394
|
parameters: fileUploadInitiatorInfo.parameters,
|
|
1320
1395
|
});
|
|
@@ -1343,6 +1418,18 @@ export class ControllerResourceBackendService {
|
|
|
1343
1418
|
},
|
|
1344
1419
|
});
|
|
1345
1420
|
}
|
|
1421
|
+
// A grant is bound to ONE (resource, field, operation kind, row). Checked BEFORE the authorizer so
|
|
1422
|
+
// a grant minted for another field never even reaches a role check on this one; a non-grant
|
|
1423
|
+
// context passes through untouched. Mirrors `validateFileToken` on the download twin.
|
|
1424
|
+
const grant = await this.fileUploadGrantService.assertGrantMatchesRoute(executionContext, {
|
|
1425
|
+
resourceType: options.resourceType,
|
|
1426
|
+
fieldName: options.fieldName,
|
|
1427
|
+
operation: options.grantOperation,
|
|
1428
|
+
resourceId,
|
|
1429
|
+
});
|
|
1430
|
+
if (grant) {
|
|
1431
|
+
locals.fileUploadGrant = grant;
|
|
1432
|
+
}
|
|
1346
1433
|
await this.authorizationsService.authorizeInController(resourceId, executionContext);
|
|
1347
1434
|
if (resourceId) {
|
|
1348
1435
|
await this.ensureFileUploadTargetMatchesRouteContext(operation, resourceId, executionContext, { requireRouteContext: options.allowContextAddressedTarget });
|
|
@@ -1571,9 +1658,10 @@ export class ControllerResourceBackendService {
|
|
|
1571
1658
|
* encodes a remote entity's key and an `INTROSPECTION`-backed resource's id is whatever
|
|
1572
1659
|
* its projection calls the row — neither can be an ObjectId or a UUID, and
|
|
1573
1660
|
* `ResourceIdBackendService.getFormatForResource` exists precisely to say so. Measured on
|
|
1574
|
-
* the introspection lane
|
|
1575
|
-
*
|
|
1576
|
-
*
|
|
1661
|
+
* the introspection lane, against the workbench's module projection (a resource since
|
|
1662
|
+
* superseded by `workbench-domain-resources`): the LIST answered 200 with 8 rows while the
|
|
1663
|
+
* addressed READ of the row keyed `engine` answered 400 `invalid_format`, because the
|
|
1664
|
+
* branch that would have admitted `engine` was never entered.
|
|
1577
1665
|
*
|
|
1578
1666
|
* Passing the resource type does not loosen anything for platform-backed rows: the helper
|
|
1579
1667
|
* resolves their format to the application's declared ObjectId or UUID and validates
|
|
@@ -2422,19 +2510,24 @@ export function normalizeCollectionQueryRequestData(rawRequestData, operation, e
|
|
|
2422
2510
|
...extractCollectionFilters(reconstructedRawRequestData, effectiveFilterFields),
|
|
2423
2511
|
...extractCollectionFilters(nestedFilters, effectiveFilterFields),
|
|
2424
2512
|
};
|
|
2425
|
-
|
|
2513
|
+
// The flat wire names are the published collection vocabulary
|
|
2514
|
+
// (`COLLECTION_QUERY_PARAMETERS`); the nested `pagination` / `sorting` forms
|
|
2515
|
+
// are the structured-body aliases the frontend client sends.
|
|
2516
|
+
const page = parseOptionalPositiveInt(rawRequestData[COLLECTION_QUERY_PARAMETERS.page])
|
|
2426
2517
|
?? parseOptionalPositiveInt(rawRequestData.pagination?.page);
|
|
2427
|
-
const limit = parseOptionalPositiveInt(rawRequestData.limit)
|
|
2518
|
+
const limit = parseOptionalPositiveInt(rawRequestData[COLLECTION_QUERY_PARAMETERS.limit])
|
|
2428
2519
|
?? parseOptionalPositiveInt(rawRequestData.pagination?.limit);
|
|
2429
2520
|
if (effectiveOperation === CoreResourceOperation.SEARCH) {
|
|
2430
|
-
const
|
|
2431
|
-
|
|
2432
|
-
|
|
2433
|
-
|
|
2521
|
+
const rawSearch = rawRequestData[COLLECTION_QUERY_PARAMETERS.search];
|
|
2522
|
+
const rawSearchAlias = rawRequestData[COLLECTION_QUERY_PARAMETERS.searchAlias];
|
|
2523
|
+
const searchQuery = (typeof rawSearch === 'string' && rawSearch.trim() !== ''
|
|
2524
|
+
? rawSearch
|
|
2525
|
+
: typeof rawSearchAlias === 'string' && rawSearchAlias.trim() !== ''
|
|
2526
|
+
? rawSearchAlias
|
|
2434
2527
|
: typeof nestedFilters.searchRequest === 'string' && nestedFilters.searchRequest.trim() !== ''
|
|
2435
2528
|
? nestedFilters.searchRequest
|
|
2436
2529
|
: undefined);
|
|
2437
|
-
const sort = parseCollectionQuerySort(rawRequestData.sort)
|
|
2530
|
+
const sort = parseCollectionQuerySort(rawRequestData[COLLECTION_QUERY_PARAMETERS.sort])
|
|
2438
2531
|
?? normalizeCollectionSorting(rawRequestData.sorting);
|
|
2439
2532
|
return { filter, page, limit, searchQuery, sort };
|
|
2440
2533
|
}
|
|
@@ -2447,7 +2540,7 @@ export function normalizeCollectionQueryRequestData(rawRequestData, operation, e
|
|
|
2447
2540
|
// absent `sort` falls back to the operation's sortFields default, or
|
|
2448
2541
|
// createdAt-desc when none are configured — i.e. no behaviour change for
|
|
2449
2542
|
// callers that don't pass `sort`.
|
|
2450
|
-
const sort = parseCollectionQuerySort(rawRequestData.sort);
|
|
2543
|
+
const sort = parseCollectionQuerySort(rawRequestData[COLLECTION_QUERY_PARAMETERS.sort]);
|
|
2451
2544
|
return { filter, page, limit, sort };
|
|
2452
2545
|
}
|
|
2453
2546
|
return { filter };
|