feat(workflows): Switch Temporal transfer workflow to intent-first writes #2429
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Refactors the transfer workflow to use an intent-first write pattern where the workflow owns intent state, replacing the previous approach that relied on
public.activity/temporal-trigger side effects.Changes
Workflow (
packages/workflows/src/transfer-workflow/)workflow.ts: Creates/updates
transfer_intentsthroughout the transfer lifecycle:pending- Intent created at workflow startsubmitted- Updated before sending userOp to chainconfirmed- Updated with tx_hash, block_num, event detailsfailed- Updated with error_message on failureactivities.ts: Added intent-based activities:
getChainIdActivity- Get chain ID for intent trackingupsertTransferIntentActivity- Create/update transfer intentupdateTransferIntentActivity- Update intent status/dataupsertTransferReconciliationActivity- Link intent to on-chain eventsupabase.ts: Added types and database functions:
TransferIntent,TransferIntentInsert,TransferIntentUpdateTransferReconciliation,TransferReconciliationInsertUtilities (
packages/workflows/src/utils/)workflowIdOverrideparameterAPI Layer (
packages/api/src/routers/)lookupInitializedWorkflowfunction:transfer_intentstable (intent-first approach)activitytable for backwards compatibility (legacy)'submitted'to consider workflow startedDeterministic On-Chain Identifiers
The reconciliation uses collision-invariant identifiers:
chain_id- Chain ID for multi-chain supporttx_hash- Transaction hashlog_idx- Log index within transactionThis ensures each on-chain event can only be linked to one intent via UNIQUE constraint.
Testing
This PR was generated with Warp.