@wildo-ai/saas-backend-lib 1.1.12 → 1.1.13
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/models/manual-controllers.backend.definition.d.ts.map +1 -1
- package/dist/esm/base-classes/models/manual-controllers.backend.definition.js +2 -0
- package/dist/esm/base-classes/models/manual-controllers.backend.definition.js.map +1 -1
- package/dist/esm/base-classes/services/repositories/stored-field-omission.backend.d.ts +4 -0
- package/dist/esm/base-classes/services/repositories/stored-field-omission.backend.d.ts.map +1 -1
- package/dist/esm/base-classes/services/repositories/stored-field-omission.backend.js +20 -5
- package/dist/esm/base-classes/services/repositories/stored-field-omission.backend.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-registry.backend.service.d.ts +3 -0
- 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-registry.backend.service.js +10 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation-registry.backend.service.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation.factory.backend.d.ts +22 -0
- 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-custom-implementation.factory.backend.js +25 -1
- package/dist/esm/base-classes/services/services/resource-operation-custom-implementation.factory.backend.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-operation-transaction-persistence.backend.utils.d.ts +38 -3
- 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-operation-transaction-persistence.backend.utils.js +68 -5
- package/dist/esm/base-classes/services/services/resource-operation-transaction-persistence.backend.utils.js.map +1 -1
- package/dist/esm/base-classes/services/services/resource-status-transition.custom-impl.backend.service.d.ts +2 -2
- 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 +6 -3
- 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/services-registry-handler.backend.service.d.ts +83 -0
- 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 +217 -14
- package/dist/esm/base-classes/services/services/services-registry-handler.backend.service.js.map +1 -1
- package/dist/esm/compliance/approval-seals/approval-seal-currency.backend.d.ts +32 -0
- package/dist/esm/compliance/approval-seals/approval-seal-currency.backend.d.ts.map +1 -0
- package/dist/esm/compliance/approval-seals/approval-seal-currency.backend.js +36 -0
- package/dist/esm/compliance/approval-seals/approval-seal-currency.backend.js.map +1 -0
- package/dist/esm/compliance/approval-seals/approval-seal-on-record.backend.d.ts +38 -0
- package/dist/esm/compliance/approval-seals/approval-seal-on-record.backend.d.ts.map +1 -0
- package/dist/esm/compliance/approval-seals/approval-seal-on-record.backend.js +83 -0
- package/dist/esm/compliance/approval-seals/approval-seal-on-record.backend.js.map +1 -0
- package/dist/esm/compliance/approval-seals/approval-seal-presentation-read.backend.d.ts +36 -0
- package/dist/esm/compliance/approval-seals/approval-seal-presentation-read.backend.d.ts.map +1 -0
- package/dist/esm/compliance/approval-seals/approval-seal-presentation-read.backend.js +51 -0
- package/dist/esm/compliance/approval-seals/approval-seal-presentation-read.backend.js.map +1 -0
- package/dist/esm/compliance/approval-seals/approval-seal-relay-store.backend.d.ts +46 -0
- package/dist/esm/compliance/approval-seals/approval-seal-relay-store.backend.d.ts.map +1 -1
- package/dist/esm/compliance/approval-seals/approval-seal-relay-store.backend.js +68 -0
- package/dist/esm/compliance/approval-seals/approval-seal-relay-store.backend.js.map +1 -1
- package/dist/esm/compliance/approval-seals/approval-seal-store.backend.d.ts +27 -0
- package/dist/esm/compliance/approval-seals/approval-seal-store.backend.d.ts.map +1 -1
- package/dist/esm/compliance/approval-seals/approval-seal-store.backend.js +42 -3
- package/dist/esm/compliance/approval-seals/approval-seal-store.backend.js.map +1 -1
- package/dist/esm/compliance/approval-seals/approval-seals-admin.backend.contracts.d.ts +26 -1
- package/dist/esm/compliance/approval-seals/approval-seals-admin.backend.contracts.d.ts.map +1 -1
- package/dist/esm/compliance/approval-seals/approval-seals-admin.backend.contracts.js +10 -0
- package/dist/esm/compliance/approval-seals/approval-seals-admin.backend.contracts.js.map +1 -1
- package/dist/esm/compliance/approval-seals/approval-seals-admin.backend.controller.d.ts +10 -1
- package/dist/esm/compliance/approval-seals/approval-seals-admin.backend.controller.d.ts.map +1 -1
- package/dist/esm/compliance/approval-seals/approval-seals-admin.backend.controller.js +60 -28
- package/dist/esm/compliance/approval-seals/approval-seals-admin.backend.controller.js.map +1 -1
- package/dist/esm/compliance/approval-seals/approval-seals-on-record.backend.controller.d.ts +90 -0
- package/dist/esm/compliance/approval-seals/approval-seals-on-record.backend.controller.d.ts.map +1 -0
- package/dist/esm/compliance/approval-seals/approval-seals-on-record.backend.controller.js +373 -0
- package/dist/esm/compliance/approval-seals/approval-seals-on-record.backend.controller.js.map +1 -0
- package/dist/esm/compliance/approval-seals/decision-presentation.backend.d.ts +29 -2
- package/dist/esm/compliance/approval-seals/decision-presentation.backend.d.ts.map +1 -1
- package/dist/esm/compliance/approval-seals/decision-presentation.backend.js +40 -3
- package/dist/esm/compliance/approval-seals/decision-presentation.backend.js.map +1 -1
- package/dist/esm/compliance/electronic-signatures/pdf-signature-structure.backend.d.ts.map +1 -1
- package/dist/esm/compliance/electronic-signatures/pdf-signature-structure.backend.js +34 -6
- package/dist/esm/compliance/electronic-signatures/pdf-signature-structure.backend.js.map +1 -1
- package/dist/esm/compliance/electronic-signatures/signature-request-evidence-files.backend.d.ts +30 -6
- package/dist/esm/compliance/electronic-signatures/signature-request-evidence-files.backend.d.ts.map +1 -1
- package/dist/esm/compliance/electronic-signatures/signature-request-evidence-files.backend.js +67 -22
- package/dist/esm/compliance/electronic-signatures/signature-request-evidence-files.backend.js.map +1 -1
- package/dist/esm/compliance/electronic-signatures/signature-request-poll.batch.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/electronic-signatures/signature-request-poll.batch.backend.service.js +18 -1
- package/dist/esm/compliance/electronic-signatures/signature-request-poll.batch.backend.service.js.map +1 -1
- package/dist/esm/compliance/electronic-signatures/signature-requests.backend.service.d.ts +66 -1
- package/dist/esm/compliance/electronic-signatures/signature-requests.backend.service.d.ts.map +1 -1
- package/dist/esm/compliance/electronic-signatures/signature-requests.backend.service.js +161 -14
- package/dist/esm/compliance/electronic-signatures/signature-requests.backend.service.js.map +1 -1
- package/dist/esm/compliance/electronic-signatures/signed-document-validation.backend.d.ts +47 -0
- package/dist/esm/compliance/electronic-signatures/signed-document-validation.backend.d.ts.map +1 -1
- package/dist/esm/compliance/electronic-signatures/signed-document-validation.backend.js.map +1 -1
- package/dist/esm/external-providers/services/content-safety.backend.service.d.ts +27 -2
- package/dist/esm/external-providers/services/content-safety.backend.service.d.ts.map +1 -1
- package/dist/esm/external-providers/services/content-safety.backend.service.js +46 -1
- package/dist/esm/external-providers/services/content-safety.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 +2 -0
- package/dist/esm/external-providers/services/embeddings.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.d.ts +11 -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 +23 -0
- package/dist/esm/external-providers/services/external-providers-registry.backend.service.js.map +1 -1
- package/dist/esm/external-providers/services/provider-service-account-token.backend.d.ts +19 -1
- package/dist/esm/external-providers/services/provider-service-account-token.backend.d.ts.map +1 -1
- package/dist/esm/external-providers/services/provider-service-account-token.backend.js +41 -1
- package/dist/esm/external-providers/services/provider-service-account-token.backend.js.map +1 -1
- package/dist/esm/files/utils/file-parent-read-context.backend.d.ts +27 -2
- package/dist/esm/files/utils/file-parent-read-context.backend.d.ts.map +1 -1
- package/dist/esm/files/utils/file-parent-read-context.backend.js +23 -4
- package/dist/esm/files/utils/file-parent-read-context.backend.js.map +1 -1
- package/dist/esm/flows-actors/content-guardrails/classifier-availability.backend.utils.d.ts +26 -0
- package/dist/esm/flows-actors/content-guardrails/classifier-availability.backend.utils.d.ts.map +1 -1
- package/dist/esm/flows-actors/content-guardrails/classifier-availability.backend.utils.js +100 -8
- package/dist/esm/flows-actors/content-guardrails/classifier-availability.backend.utils.js.map +1 -1
- package/dist/esm/flows-actors/content-guardrails/record-owner-policy.backend.d.ts +3 -1
- package/dist/esm/flows-actors/content-guardrails/record-owner-policy.backend.d.ts.map +1 -1
- package/dist/esm/flows-actors/content-guardrails/record-owner-policy.backend.js +8 -2
- package/dist/esm/flows-actors/content-guardrails/record-owner-policy.backend.js.map +1 -1
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.d.ts +43 -0
- 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 +37 -0
- package/dist/esm/flows-actors/models/function-tools.backend.definitions.js.map +1 -1
- package/dist/esm/flows-actors/services/agent-work-decisions.backend.service.d.ts +7 -0
- package/dist/esm/flows-actors/services/agent-work-decisions.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/agent-work-decisions.backend.service.js +8 -3
- package/dist/esm/flows-actors/services/agent-work-decisions.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/agents.backend.service.d.ts +31 -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 +78 -30
- package/dist/esm/flows-actors/services/agents.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/autonomous-agent-turn.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/autonomous-agent-turn.backend.service.js +4 -0
- package/dist/esm/flows-actors/services/autonomous-agent-turn.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.d.ts +28 -2
- 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 +132 -22
- package/dist/esm/flows-actors/services/conversational-execution.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/flow-actor-executions.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/flows-actors/services/flow-actor-executions.custom-impl.backend.service.js +12 -8
- package/dist/esm/flows-actors/services/flow-actor-executions.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/flows-actors/services/flows-actors-registry.service.d.ts +5 -0
- 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 +18 -2
- package/dist/esm/flows-actors/services/flows-actors-registry.service.js.map +1 -1
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.d.ts +33 -0
- 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 +58 -0
- package/dist/esm/flows-actors/utils/acp-session-runner.backend.utils.js.map +1 -1
- package/dist/esm/inbound/services/inbound-delivery-dispatch.backend.service.d.ts +12 -1
- package/dist/esm/inbound/services/inbound-delivery-dispatch.backend.service.d.ts.map +1 -1
- package/dist/esm/inbound/services/inbound-delivery-dispatch.backend.service.js +23 -4
- package/dist/esm/inbound/services/inbound-delivery-dispatch.backend.service.js.map +1 -1
- package/dist/esm/inbound/services/inbound-delivery-receiver.backend.service.d.ts +12 -1
- package/dist/esm/inbound/services/inbound-delivery-receiver.backend.service.d.ts.map +1 -1
- package/dist/esm/inbound/services/inbound-delivery-receiver.backend.service.js +55 -17
- package/dist/esm/inbound/services/inbound-delivery-receiver.backend.service.js.map +1 -1
- package/dist/esm/inbound/services/inbound-delivery-store.backend.service.d.ts +22 -1
- package/dist/esm/inbound/services/inbound-delivery-store.backend.service.d.ts.map +1 -1
- package/dist/esm/inbound/services/inbound-delivery-store.backend.service.js +52 -9
- package/dist/esm/inbound/services/inbound-delivery-store.backend.service.js.map +1 -1
- package/dist/esm/inbound/services/inbound-delivery-stored-body.backend.service.d.ts +79 -0
- package/dist/esm/inbound/services/inbound-delivery-stored-body.backend.service.d.ts.map +1 -0
- package/dist/esm/inbound/services/inbound-delivery-stored-body.backend.service.js +211 -0
- package/dist/esm/inbound/services/inbound-delivery-stored-body.backend.service.js.map +1 -0
- package/dist/esm/inbound/services/inbound-delivery-subject-erasure-severance.backend.d.ts +2 -2
- package/dist/esm/inbound/services/inbound-delivery-subject-erasure-severance.backend.d.ts.map +1 -1
- package/dist/esm/inbound/services/inbound-delivery-subject-erasure-severance.backend.js +9 -1
- package/dist/esm/inbound/services/inbound-delivery-subject-erasure-severance.backend.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- 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 +6 -0
- package/dist/esm/inject/models/container.js.map +1 -1
- package/dist/esm/inject/models/service-types.d.ts +5 -0
- package/dist/esm/inject/models/service-types.d.ts.map +1 -1
- package/dist/esm/inject/models/service-types.js +3 -0
- package/dist/esm/inject/models/service-types.js.map +1 -1
- package/dist/esm/monitoring/observability/models/observability.backend.schemas.d.ts +5 -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/services/metrics.service.d.ts +34 -1
- package/dist/esm/monitoring/observability/services/metrics.service.d.ts.map +1 -1
- package/dist/esm/monitoring/observability/services/metrics.service.js +49 -0
- package/dist/esm/monitoring/observability/services/metrics.service.js.map +1 -1
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.d.ts +6 -1
- 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 +15 -4
- package/dist/esm/notifications/webhooks/controllers/webhook-auto-controller.backend.service.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.custom-impl.backend.service.js +3 -1
- package/dist/esm/notifications/webhooks/outbound/services/m2m-webhook-delivery-log.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/runtime/services/http-server.backend.service.d.ts +3 -1
- package/dist/esm/runtime/services/http-server.backend.service.d.ts.map +1 -1
- package/dist/esm/runtime/services/http-server.backend.service.js +11 -3
- package/dist/esm/runtime/services/http-server.backend.service.js.map +1 -1
- package/dist/esm/runtime/services/utils/inbound-endpoint-raw-body.backend.utils.d.ts +22 -0
- package/dist/esm/runtime/services/utils/inbound-endpoint-raw-body.backend.utils.d.ts.map +1 -1
- package/dist/esm/runtime/services/utils/inbound-endpoint-raw-body.backend.utils.js +54 -0
- package/dist/esm/runtime/services/utils/inbound-endpoint-raw-body.backend.utils.js.map +1 -1
- package/dist/esm/security/authentications/services/auth-methods/auth-password-reset.backend.service.d.ts +51 -0
- 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-password-reset.backend.service.js +87 -15
- package/dist/esm/security/authentications/services/auth-methods/auth-password-reset.backend.service.js.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/siem-delivery-dlq.custom-impl.backend.service.js +5 -2
- package/dist/esm/security/authentications/services/custom-impls/siem-delivery-dlq.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.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.js +65 -24
- package/dist/esm/security/authentications/services/custom-impls/sso-config-domain-verification.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.d.ts +64 -1
- 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 +84 -2
- package/dist/esm/security/authorizations/super-admin-floor.backend.utils.js.map +1 -1
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.d.ts +14 -0
- 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 +13 -5
- package/dist/esm/security/oauth-clients/oauth-clients.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/users/services/anonymous-consent.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/users/services/anonymous-consent.custom-impl.backend.service.js +6 -2
- package/dist/esm/users/services/anonymous-consent.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/users/services/user-force-password-reset.custom-impl.backend.service.d.ts +7 -0
- package/dist/esm/users/services/user-force-password-reset.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/users/services/user-force-password-reset.custom-impl.backend.service.js +65 -20
- package/dist/esm/users/services/user-force-password-reset.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/users/services/user-role-administration.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/users/services/user-role-administration.custom-impl.backend.service.js +11 -4
- package/dist/esm/users/services/user-role-administration.custom-impl.backend.service.js.map +1 -1
- package/dist/esm/users/services/user-self-custom-implementations.backend.d.ts.map +1 -1
- package/dist/esm/users/services/user-self-custom-implementations.backend.js +4 -2
- package/dist/esm/users/services/user-self-custom-implementations.backend.js.map +1 -1
- package/dist/esm/users/services/user-super-admin-floor.custom-impl.backend.service.d.ts.map +1 -1
- package/dist/esm/users/services/user-super-admin-floor.custom-impl.backend.service.js +16 -0
- package/dist/esm/users/services/user-super-admin-floor.custom-impl.backend.service.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +10 -10
|
@@ -41,7 +41,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
41
41
|
* unique slot is owed when a caller can race (the send trigger, #2925).
|
|
42
42
|
*/
|
|
43
43
|
import { createHash, randomBytes } from 'node:crypto';
|
|
44
|
-
import { injectable, inject, optional } from 'inversify';
|
|
44
|
+
import { injectable, inject, optional, unmanaged } from 'inversify';
|
|
45
45
|
import { ApprovalSealStatus, CoreAuditableEventType, CoreResourceType, ErrorCustomMessageReference, ErrorType, HumanDecision_Outcome, SignatureRequest_CancellationReason, SignatureRequest_Event, SignatureRequest_RereadCause, SignatureRequest_State, SignatureRequest_TransitionOutcome, SIGNATURE_REQUEST_TERMINAL_STATES, SortOrder, UserStatus, advanceSignatureRequestState, } from '@wildo-ai/saas-models';
|
|
46
46
|
import { ElectronicSignature_CancellationOutcome, ElectronicSignature_VendorRequestStatus, } from '@wildo-ai/external-connectors-models';
|
|
47
47
|
import { SAAS_SERVICE_TYPES } from '../../inject/models/service-types.js';
|
|
@@ -49,7 +49,7 @@ import { ElectronicSignatureSendOutcome } from '../../external-providers/service
|
|
|
49
49
|
import { describeCaughtError } from '../../errors/utils/error-log-level-classification.backend.utils.js';
|
|
50
50
|
import { isUniqueConstraintConflict } from '../../errors/utils/unique-conflict-classification.backend.utils.js';
|
|
51
51
|
import { SignedDocumentVerdict } from './signed-document-validation.backend.js';
|
|
52
|
-
import { SignatureRequestEvidenceField } from './signature-request-evidence-files.backend.js';
|
|
52
|
+
import { SIGNATURE_EVIDENCE_LINK_RETRIED, SignatureRequestEvidenceField, SignatureRequestEvidenceLinkOutcome, } from './signature-request-evidence-files.backend.js';
|
|
53
53
|
/** Why a deliverable was not sent. */
|
|
54
54
|
export var SignatureRequestSendRefusal;
|
|
55
55
|
(function (SignatureRequestSendRefusal) {
|
|
@@ -72,6 +72,36 @@ export var SignatureRequestSendRefusal;
|
|
|
72
72
|
/** The vendor accepted the request and the record could not be written; the request was cancelled at the vendor. */
|
|
73
73
|
SignatureRequestSendRefusal["RECORD_NOT_WRITTEN"] = "record_not_written";
|
|
74
74
|
})(SignatureRequestSendRefusal || (SignatureRequestSendRefusal = {}));
|
|
75
|
+
/**
|
|
76
|
+
* Why a request the vendor reported complete was not made SIGNED by its evidence: the label of
|
|
77
|
+
* `signature_request_evidence_refused_total`, and what the re-read's reason explains in words.
|
|
78
|
+
*/
|
|
79
|
+
export var SignatureRequestEvidenceFailure;
|
|
80
|
+
(function (SignatureRequestEvidenceFailure) {
|
|
81
|
+
/** No signed-document validator is bound in this runtime. */
|
|
82
|
+
SignatureRequestEvidenceFailure["NO_VALIDATOR"] = "no_validator";
|
|
83
|
+
/** The vendor split the request into several documents; one signed document per request is kept. */
|
|
84
|
+
SignatureRequestEvidenceFailure["SPLIT_REQUEST"] = "split_request";
|
|
85
|
+
/** The provider declares no evidence policy (trust anchors). */
|
|
86
|
+
SignatureRequestEvidenceFailure["NO_EVIDENCE_POLICY"] = "no_evidence_policy";
|
|
87
|
+
/** The signed document could not be downloaded. */
|
|
88
|
+
SignatureRequestEvidenceFailure["DOWNLOAD_FAILED"] = "download_failed";
|
|
89
|
+
/** The document did not validate (tampered, updated after signing, untrusted chain, refused algorithm, revocation). */
|
|
90
|
+
SignatureRequestEvidenceFailure["REJECTED"] = "rejected";
|
|
91
|
+
/** The document validated and proves another signer or a lower level than required: the request FAILS. */
|
|
92
|
+
SignatureRequestEvidenceFailure["MISMATCHED"] = "mismatched";
|
|
93
|
+
/** The document validated and its evidence could not be written: the request stays open and is read again. */
|
|
94
|
+
SignatureRequestEvidenceFailure["NOT_KEPT"] = "not_kept";
|
|
95
|
+
})(SignatureRequestEvidenceFailure || (SignatureRequestEvidenceFailure = {}));
|
|
96
|
+
/**
|
|
97
|
+
* How long after a request became SIGNED the poll keeps linking its evidence files (#2293). Longer than the files
|
|
98
|
+
* cleanup waits before it removes an unlinked file (a day after its scan ended, its default `unlinkedThresholdMs`), so a
|
|
99
|
+
* scan that ends late is still linked; a file the cleanup removed first is reported lost.
|
|
100
|
+
*/
|
|
101
|
+
export const SIGNATURE_EVIDENCE_LINK_WINDOW_MS = 48 * 3_600_000;
|
|
102
|
+
/** The SIGNED requests one poll reads, a page at a time, to link their evidence. */
|
|
103
|
+
const SIGNATURE_EVIDENCE_LINK_SCAN_LIMIT = 2_000;
|
|
104
|
+
const SIGNATURE_EVIDENCE_LINK_SCAN_PAGE = 100;
|
|
75
105
|
/** Why a re-read did not reach the transition function, or did and could not write. */
|
|
76
106
|
export var SignatureRequestRefreshStop;
|
|
77
107
|
(function (SignatureRequestRefreshStop) {
|
|
@@ -97,7 +127,8 @@ let SignatureRequestsBackendService = class SignatureRequestsBackendService {
|
|
|
97
127
|
errorBuilder;
|
|
98
128
|
evidenceFiles;
|
|
99
129
|
auditLogs;
|
|
100
|
-
|
|
130
|
+
metrics;
|
|
131
|
+
constructor(logger, repositories, executionContextCreator, transport, files, validator, errorBuilder, evidenceFiles, auditLogs, metrics, clock) {
|
|
101
132
|
this.logger = logger;
|
|
102
133
|
this.repositories = repositories;
|
|
103
134
|
this.executionContextCreator = executionContextCreator;
|
|
@@ -107,7 +138,12 @@ let SignatureRequestsBackendService = class SignatureRequestsBackendService {
|
|
|
107
138
|
this.errorBuilder = errorBuilder;
|
|
108
139
|
this.evidenceFiles = evidenceFiles;
|
|
109
140
|
this.auditLogs = auditLogs;
|
|
141
|
+
this.metrics = metrics;
|
|
142
|
+
this.clock = clock ?? (() => new Date());
|
|
110
143
|
}
|
|
144
|
+
clock;
|
|
145
|
+
/** Evidence files already reported lost by this process, so a lost file is logged once rather than every poll. */
|
|
146
|
+
reportedLostEvidence = new Set();
|
|
111
147
|
/**
|
|
112
148
|
* The removal effect of `signatureRequests` (#2293), registered at startup with the evidence teardown: before the rows of
|
|
113
149
|
* requests whose record goes are destroyed, every OPEN one is cancelled at its vendor, and deleted there where its
|
|
@@ -157,6 +193,11 @@ let SignatureRequestsBackendService = class SignatureRequestsBackendService {
|
|
|
157
193
|
* for the seal's bind check, so the sealed-deliverable gate is marked as that check is.)
|
|
158
194
|
*/
|
|
159
195
|
async sendForSignature(input) {
|
|
196
|
+
const result = await this.sendOnce(input);
|
|
197
|
+
this.metrics?.recordSignatureRequestSent({ outcome: 'refusal' in result ? result.refusal : ElectronicSignatureSendOutcome.SENT, requiredLevel: input.requiredLevel });
|
|
198
|
+
return result;
|
|
199
|
+
}
|
|
200
|
+
async sendOnce(input) {
|
|
160
201
|
const refuse = (refusal, reason, retryable = false, signatureRequestId) => ({ sent: false, refusal, reason, retryable, ...(signatureRequestId ? { signatureRequestId } : {}) });
|
|
161
202
|
const context = await this.executionContextCreator.createForInternalSystemOperation();
|
|
162
203
|
// 1. The sealed approval, and the file it binds.
|
|
@@ -369,8 +410,10 @@ let SignatureRequestsBackendService = class SignatureRequestsBackendService {
|
|
|
369
410
|
const statuses = [];
|
|
370
411
|
for (const reference of references) {
|
|
371
412
|
const read = await this.transport.read(providerRef, reference);
|
|
372
|
-
if (read.read === false)
|
|
413
|
+
if (read.read === false) {
|
|
414
|
+
this.metrics?.recordSignatureRequestVendorNotRead({ providerRef });
|
|
373
415
|
return { signatureRequestId, outcome: SignatureRequestRefreshStop.NOT_READ, reason: read.reason };
|
|
416
|
+
}
|
|
374
417
|
statuses.push(read.reading.status);
|
|
375
418
|
}
|
|
376
419
|
let event = eventOfVendorStatuses(statuses);
|
|
@@ -381,6 +424,8 @@ let SignatureRequestsBackendService = class SignatureRequestsBackendService {
|
|
|
381
424
|
event = evidence.event;
|
|
382
425
|
reason = evidence.reason;
|
|
383
426
|
validated = evidence.validated;
|
|
427
|
+
if (evidence.failure)
|
|
428
|
+
this.metrics?.recordSignatureRequestEvidenceRefused({ providerRef, failure: evidence.failure });
|
|
384
429
|
}
|
|
385
430
|
if (event === undefined)
|
|
386
431
|
return { signatureRequestId, outcome: SignatureRequest_TransitionOutcome.UNCHANGED, state: current, reason };
|
|
@@ -391,8 +436,10 @@ let SignatureRequestsBackendService = class SignatureRequestsBackendService {
|
|
|
391
436
|
let kept;
|
|
392
437
|
if (transition.state === SignatureRequest_State.SIGNED) {
|
|
393
438
|
const keeping = await this.keepEvidence(row, validated);
|
|
394
|
-
if ('reason' in keeping)
|
|
439
|
+
if ('reason' in keeping) {
|
|
440
|
+
this.metrics?.recordSignatureRequestEvidenceRefused({ providerRef, failure: SignatureRequestEvidenceFailure.NOT_KEPT });
|
|
395
441
|
return { signatureRequestId, outcome: SignatureRequest_TransitionOutcome.UNCHANGED, state: current, event, reason: keeping.reason };
|
|
442
|
+
}
|
|
396
443
|
kept = keeping;
|
|
397
444
|
}
|
|
398
445
|
const now = new Date();
|
|
@@ -414,10 +461,12 @@ let SignatureRequestsBackendService = class SignatureRequestsBackendService {
|
|
|
414
461
|
return { signatureRequestId, outcome: SignatureRequestRefreshStop.LOST_RACE, reason: 'Another re-read moved the request first.' };
|
|
415
462
|
}
|
|
416
463
|
if (kept) {
|
|
417
|
-
|
|
418
|
-
await this.
|
|
464
|
+
// A file not linkable yet (its scan is in flight) is linked by a later poll (`linkPendingEvidence`), never dropped.
|
|
465
|
+
await this.linkEvidenceFile(kept.signedDocumentFileId, row, SignatureRequestEvidenceField.SIGNED_DOCUMENT);
|
|
466
|
+
await this.linkEvidenceFile(kept.validationEvidenceFileId, row, SignatureRequestEvidenceField.VALIDATION_EVIDENCE);
|
|
419
467
|
}
|
|
420
468
|
this.logger.info('[signature-requests] A signature request moved', { signatureRequestId, from: current, to: transition.state, event });
|
|
469
|
+
this.metrics?.recordSignatureRequestMoved({ providerRef, to: transition.state });
|
|
421
470
|
await this.record({
|
|
422
471
|
eventType: CoreAuditableEventType.SIGNATURE_REQUEST_MOVED, ...signatureRequestEventFieldsOf(row), from: current, to: transition.state, event,
|
|
423
472
|
...(reason ? { reason } : {}),
|
|
@@ -440,17 +489,18 @@ let SignatureRequestsBackendService = class SignatureRequestsBackendService {
|
|
|
440
489
|
* several references cannot keep its evidence in the request's own fields and is left open (stated, never guessed).
|
|
441
490
|
*/
|
|
442
491
|
async validateEvidence(row, context) {
|
|
492
|
+
const F = SignatureRequestEvidenceFailure;
|
|
443
493
|
if (!this.validator) {
|
|
444
|
-
return { event: SignatureRequest_Event.EVIDENCE_REJECTED, reason: 'The vendor reports the request complete and no signed-document validator is bound: it stays open.' };
|
|
494
|
+
return { event: SignatureRequest_Event.EVIDENCE_REJECTED, failure: F.NO_VALIDATOR, reason: 'The vendor reports the request complete and no signed-document validator is bound: it stays open.' };
|
|
445
495
|
}
|
|
446
496
|
const providerRef = String(row.providerRef);
|
|
447
497
|
const references = row.vendorReferences;
|
|
448
498
|
if (references.length !== 1) {
|
|
449
|
-
return { event: SignatureRequest_Event.EVIDENCE_REJECTED, reason: `The vendor split the request into ${references.length} documents; one signed document per request is kept, so it stays open.` };
|
|
499
|
+
return { event: SignatureRequest_Event.EVIDENCE_REJECTED, failure: F.SPLIT_REQUEST, reason: `The vendor split the request into ${references.length} documents; one signed document per request is kept, so it stays open.` };
|
|
450
500
|
}
|
|
451
501
|
const evidencePolicy = this.transport.evidencePolicyOf?.(providerRef);
|
|
452
502
|
if (!evidencePolicy)
|
|
453
|
-
return { event: SignatureRequest_Event.EVIDENCE_REJECTED, reason: `Provider "${providerRef}" declares no evidence policy (trust anchors): it stays open.` };
|
|
503
|
+
return { event: SignatureRequest_Event.EVIDENCE_REJECTED, failure: F.NO_EVIDENCE_POLICY, reason: `Provider "${providerRef}" declares no evidence policy (trust anchors): it stays open.` };
|
|
454
504
|
const signers = await this.repositories.findManyForInfrastructure(CoreResourceType.SIGNATURE_REQUEST_SIGNERS, { signatureRequestId: row._id }, context);
|
|
455
505
|
const expectedSigners = [];
|
|
456
506
|
for (const signer of signers) {
|
|
@@ -465,7 +515,7 @@ let SignatureRequestsBackendService = class SignatureRequestsBackendService {
|
|
|
465
515
|
}
|
|
466
516
|
const download = await this.transport.downloadSignedDocument(providerRef, references[0]);
|
|
467
517
|
if (download.downloaded === false)
|
|
468
|
-
return { event: SignatureRequest_Event.EVIDENCE_REJECTED, reason: download.reason };
|
|
518
|
+
return { event: SignatureRequest_Event.EVIDENCE_REJECTED, failure: F.DOWNLOAD_FAILED, reason: download.reason };
|
|
469
519
|
const verdict = await this.validator.validate({
|
|
470
520
|
signedDocument: download.bytes, originalContentSha256: String(row.originalContentSha256), requiredLevel: row.requiredLevel,
|
|
471
521
|
providerRef, vendorEnvironment: this.transport.vendorEnvironmentOf?.(providerRef), evidencePolicy,
|
|
@@ -473,9 +523,9 @@ let SignatureRequestsBackendService = class SignatureRequestsBackendService {
|
|
|
473
523
|
expectedSigners,
|
|
474
524
|
});
|
|
475
525
|
if (verdict.verdict === SignedDocumentVerdict.MISMATCHED)
|
|
476
|
-
return { event: SignatureRequest_Event.EVIDENCE_MISMATCHED, reason: verdict.reason };
|
|
526
|
+
return { event: SignatureRequest_Event.EVIDENCE_MISMATCHED, failure: F.MISMATCHED, reason: verdict.reason };
|
|
477
527
|
if (verdict.verdict !== SignedDocumentVerdict.VALID)
|
|
478
|
-
return { event: SignatureRequest_Event.EVIDENCE_REJECTED, reason: verdict.reason };
|
|
528
|
+
return { event: SignatureRequest_Event.EVIDENCE_REJECTED, failure: F.REJECTED, reason: verdict.reason };
|
|
479
529
|
// The signers the evidence PROVED: those a validated certificate names. At SIMPLE a vendor's own seal names nobody.
|
|
480
530
|
const provedEmails = new Set(verdict.evidence.signatures.flatMap((signature) => (signature.signerEmail ? [signature.signerEmail] : [])));
|
|
481
531
|
return {
|
|
@@ -486,6 +536,100 @@ let SignatureRequestsBackendService = class SignatureRequestsBackendService {
|
|
|
486
536
|
},
|
|
487
537
|
};
|
|
488
538
|
}
|
|
539
|
+
/**
|
|
540
|
+
* Link the evidence files of the requests that became SIGNED in the last {@link SIGNATURE_EVIDENCE_LINK_WINDOW_MS} and
|
|
541
|
+
* are not linked yet (#2293). Run by the poll. A file whose scan has not ended is linked by a later run; one that can
|
|
542
|
+
* never be linked is reported lost, once. Without this, a signed document scanned on write was never linked (its link
|
|
543
|
+
* is refused while it is SCANNING) and the files cleanup removed it a day later. Never throws for one request.
|
|
544
|
+
*
|
|
545
|
+
* Read cost, stated: each run reads every SIGNED request of the window and each of its two files once, a primary-key read
|
|
546
|
+
* per file, up to {@link SIGNATURE_EVIDENCE_LINK_SCAN_LIMIT} requests.
|
|
547
|
+
*/
|
|
548
|
+
async linkPendingEvidence() {
|
|
549
|
+
const report = { examined: 0, linked: 0, pending: 0, lost: 0 };
|
|
550
|
+
if (!this.evidenceFiles)
|
|
551
|
+
return report;
|
|
552
|
+
const context = await this.executionContextCreator.createForInternalSystemOperation();
|
|
553
|
+
for await (const row of this.signedInLinkWindow(context)) {
|
|
554
|
+
report.examined += 1;
|
|
555
|
+
for (const field of [SignatureRequestEvidenceField.SIGNED_DOCUMENT, SignatureRequestEvidenceField.VALIDATION_EVIDENCE]) {
|
|
556
|
+
const fileId = row[field]?.fileId;
|
|
557
|
+
if (typeof fileId !== 'string')
|
|
558
|
+
continue;
|
|
559
|
+
let outcome;
|
|
560
|
+
try {
|
|
561
|
+
outcome = await this.linkEvidenceFile(fileId, row, field);
|
|
562
|
+
}
|
|
563
|
+
catch (error) {
|
|
564
|
+
this.logger.warn('[signature-requests] An evidence file could not be linked; the next poll tries again', { signatureRequestId: String(row._id), fileId, error: describeCaughtError(error) });
|
|
565
|
+
report.pending += 1;
|
|
566
|
+
continue;
|
|
567
|
+
}
|
|
568
|
+
if (outcome === SignatureRequestEvidenceLinkOutcome.LINKED)
|
|
569
|
+
report.linked += 1;
|
|
570
|
+
else if (SIGNATURE_EVIDENCE_LINK_RETRIED.has(outcome))
|
|
571
|
+
report.pending += 1;
|
|
572
|
+
else if (outcome === SignatureRequestEvidenceLinkOutcome.LOST)
|
|
573
|
+
report.lost += 1;
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
return report;
|
|
577
|
+
}
|
|
578
|
+
/**
|
|
579
|
+
* Link one evidence file and say what happened: a lost file at error (once per process, with its metric), a link left
|
|
580
|
+
* for a later poll at info. Never throws; the port never does.
|
|
581
|
+
*/
|
|
582
|
+
async linkEvidenceFile(fileId, row, field) {
|
|
583
|
+
if (!this.evidenceFiles)
|
|
584
|
+
return SignatureRequestEvidenceLinkOutcome.FAILED;
|
|
585
|
+
const outcome = await this.evidenceFiles.link(fileId, row, field);
|
|
586
|
+
if (outcome === SignatureRequestEvidenceLinkOutcome.ALREADY_LINKED)
|
|
587
|
+
return outcome;
|
|
588
|
+
if (outcome === SignatureRequestEvidenceLinkOutcome.LOST) {
|
|
589
|
+
if (this.reportedLostEvidence.has(fileId))
|
|
590
|
+
return outcome;
|
|
591
|
+
if (this.reportedLostEvidence.size < 10_000)
|
|
592
|
+
this.reportedLostEvidence.add(fileId);
|
|
593
|
+
this.logger.error('[signature-requests] A SIGNED request names an evidence file that can never be linked to it (gone, infected, quarantined, failed, or linked elsewhere); its evidence is not kept', {
|
|
594
|
+
signatureRequestId: String(row._id), fileId, field,
|
|
595
|
+
});
|
|
596
|
+
}
|
|
597
|
+
else if (SIGNATURE_EVIDENCE_LINK_RETRIED.has(outcome)) {
|
|
598
|
+
this.logger.info('[signature-requests] An evidence file is not linkable yet (its scan has not ended, or the store did not answer); the poll links it later', {
|
|
599
|
+
signatureRequestId: String(row._id), fileId, field, outcome,
|
|
600
|
+
});
|
|
601
|
+
}
|
|
602
|
+
this.metrics?.recordSignatureRequestEvidenceLink({ outcome });
|
|
603
|
+
return outcome;
|
|
604
|
+
}
|
|
605
|
+
/**
|
|
606
|
+
* The SIGNED requests validated in the link window, oldest first, a page at a time. Pages advance on `validatedAt`, ids
|
|
607
|
+
* already seen skipped, so requests validated in the same instant are not lost between pages (the trigger's paging).
|
|
608
|
+
*/
|
|
609
|
+
async *signedInLinkWindow(context) {
|
|
610
|
+
let from = new Date(this.clock().getTime() - SIGNATURE_EVIDENCE_LINK_WINDOW_MS);
|
|
611
|
+
const seen = new Set();
|
|
612
|
+
let pageSize = SIGNATURE_EVIDENCE_LINK_SCAN_PAGE;
|
|
613
|
+
for (let scanned = 0; scanned < SIGNATURE_EVIDENCE_LINK_SCAN_LIMIT;) {
|
|
614
|
+
const page = await this.repositories.findManyForInfrastructure(CoreResourceType.SIGNATURE_REQUESTS, { state: SignatureRequest_State.SIGNED, validatedAt: { $gte: from } }, context, undefined, { sort: [{ field: 'validatedAt', order: SortOrder.ASC }, { field: '_id', order: SortOrder.ASC }], limit: pageSize });
|
|
615
|
+
const fresh = page.filter((row) => !seen.has(String(row._id)));
|
|
616
|
+
if (fresh.length === 0) {
|
|
617
|
+
if (page.length < pageSize || pageSize >= SIGNATURE_EVIDENCE_LINK_SCAN_LIMIT)
|
|
618
|
+
return;
|
|
619
|
+
pageSize = Math.min(pageSize * 2, SIGNATURE_EVIDENCE_LINK_SCAN_LIMIT);
|
|
620
|
+
continue;
|
|
621
|
+
}
|
|
622
|
+
for (const row of fresh) {
|
|
623
|
+
seen.add(String(row._id));
|
|
624
|
+
scanned += 1;
|
|
625
|
+
yield row;
|
|
626
|
+
}
|
|
627
|
+
if (page.length < pageSize)
|
|
628
|
+
return;
|
|
629
|
+
const last = page[page.length - 1].validatedAt;
|
|
630
|
+
from = last instanceof Date ? last : new Date(String(last));
|
|
631
|
+
}
|
|
632
|
+
}
|
|
489
633
|
/** Write the request's two evidence files, unlinked. A reason when they cannot be kept: the request then stays open. */
|
|
490
634
|
async keepEvidence(row, validated) {
|
|
491
635
|
if (!validated)
|
|
@@ -538,7 +682,10 @@ SignatureRequestsBackendService = __decorate([
|
|
|
538
682
|
__param(7, optional()),
|
|
539
683
|
__param(8, inject(SAAS_SERVICE_TYPES.AuditLogsService)),
|
|
540
684
|
__param(8, optional()),
|
|
541
|
-
|
|
685
|
+
__param(9, inject(SAAS_SERVICE_TYPES.MetricsService)),
|
|
686
|
+
__param(9, optional()),
|
|
687
|
+
__param(10, unmanaged()),
|
|
688
|
+
__metadata("design:paramtypes", [Function, Object, Object, Object, Object, Object, Object, Object, Object, Object, Function])
|
|
542
689
|
], SignatureRequestsBackendService);
|
|
543
690
|
export { SignatureRequestsBackendService };
|
|
544
691
|
/** The fields every signature request event names, read from the request row. */
|