Protected ReadonlydbStaticinstanceThe process default: built from each dependency's own instance().
Insert a new escrow row in status PENDING. Sets expiresAt to
createdAt + 10d (matches legacy behavior).
Look up a single escrow transfer by id across all customers. Returns
null when no row matches — per the repo "get returns T | null" rule, a
missing row is not a ServiceError. Delegates to search so the
projection and row mapper live in exactly one place.
Admin search across all customers. Mirrors the customer-scoped
EscrowTransferService.search shape with a plural customerIds filter.
OptionalcreatedAt?: DbTimestampCriteriaOptionalcustomerIds?: string[]OptionalexpiresAt?: DbTimestampCriteriaOptionalidempotencyKeys?: string[]Caller dedupe tokens a create recorded.
Optionalids?: string[]OptionalorderBy?: DbOrderByCriterion<Optionalpage?: numberDefaults to 1
OptionalpageSize?: numberDefaults to 50
OptionalrecipientId?: stringOptionalrecipientPhone?: stringOptionalsenderId?: stringOptionalstatuses?: StoredEscrowTransferStatus[]OptionalupdatedAt?: DbTimestampCriteriaOptionalv1Statuses?: (/v1 values, each matched in both stored forms (API_V2.md §4.5).
Update an escrow row by external id. If data.status is set, append a
dedup-aware history entry alongside the column write — workflows rely
on this to keep the audit trail in sync with the row's status.
No transition validation: workflows enforce ordering via the on-chain idempotency check. Service-level dedup drops consecutive identical entries.
Publishes only when the status actually changed, after the commit, so a rolled-back write never announces a transition that did not land.
Mutating admin operations, used by the Temporal activities. Every status transition out of update is published as
escrow.escrowTransfer.statusUpdated.