Protected ReadonlydbStaticinstanceThe process default: the worker queue from the temporal namespace.
Optionalguard?: RecurringChargeGuardNot run on a replay of an existing key: nothing new is written.
OptionalidempotencyKey?: stringDedupe token: a repeated key returns the existing live transfer, starting a PROCESSING one's workflow if no run holds its id. Absent, every call inserts a row.
Unlike ledger-account transfers this key does NOT touch the on-chain
Mintfx idempotency key — the fee transfer PDA is seeded by the external
id (see feeTransferTransaction and
ledgerAccountFeeTransferWorkflowActivities).
OptionalnotMonthlyFee?: trueThe operator's confirmation that a manual PLATFORM fee is not the monthly fee, required when the customer has a recurring fee configured.
OptionalrecurringFee?: { periodKey: string }Set by the monthly platform-fee sweep (ENG-3083) to mark this charge as one of its own and record the period it settles.
Stored on data rather than left implicit in idempotencyKey: the key
encodes the period as a suffix, which answers "was this customer billed
for August" but cannot answer "every recurring fee taken in August"
without a scan no index can serve.
Solana transaction to execute a transfer from a ledger account to another, with the account it debits and the amount, which signing needs
Get a fee transfer by ID. Admin function does not lock down to a customer.
create's replay of a recurring charge and nothing else: null when no live
transfer holds the key, so it never inserts a row or runs a guard.
Update the transfer details in DB and publish an event if required
Source of the master fee ledger account id, resolved per
createcall rather than taken by value. Taking the id by value forced every composition root toawaita DB round trip before it could construct this service — at module scope in the Temporal workers, which on Lambda put a database call on the cold-start init path where a failure is anInit Errorthat Sentry cannot see.