@relayprotocol/relay-sdk 5.2.2 → 5.2.3

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.
@@ -1,30 +1,58 @@
1
+ /**
2
+ * Returns true when the step sequence can be collapsed into a single atomic
3
+ * batch transaction.
4
+ *
5
+ * Supported shapes:
6
+ * [approve, swap | deposit] // standard 2-step flow
7
+ * [approve, approve, swap | deposit] // zero-reset flow (e.g. USDT on Ethereum)
8
+ * [approve, ..., approve, swap | deposit] // N leading approvals + terminal
9
+ *
10
+ * Every item in every step must be incomplete — any already-executed item
11
+ * means we're in the middle of a partial run and should not re-batch.
12
+ */
1
13
  export function canBatchTransactions(steps) {
2
- const firstStep = steps[0];
3
- const secondStep = steps[1];
4
- const hasIncompleteApproval = firstStep?.items?.some((item) => item.status === 'incomplete');
5
- const hasIncompleteDeposit = secondStep?.items?.some((item) => item.status === 'incomplete');
6
- return (firstStep?.id === 'approve' &&
7
- (secondStep?.id === 'deposit' || secondStep?.id === 'swap') &&
8
- hasIncompleteApproval &&
9
- hasIncompleteDeposit);
14
+ if (!steps || steps.length < 2)
15
+ return false;
16
+ const terminalStep = steps[steps.length - 1];
17
+ const prefixSteps = steps.slice(0, -1);
18
+ const terminalIsSwapOrDeposit = terminalStep?.id === 'swap' || terminalStep?.id === 'deposit';
19
+ if (!terminalIsSwapOrDeposit)
20
+ return false;
21
+ const prefixAllApprovals = prefixSteps.every((step) => step?.id === 'approve');
22
+ if (!prefixAllApprovals)
23
+ return false;
24
+ const allStepsHaveIncomplete = steps.every((step) => step?.items?.some((item) => item.status === 'incomplete'));
25
+ return allStepsHaveIncomplete;
10
26
  }
27
+ /**
28
+ * Flattens N approval steps + terminal (swap|deposit) step into a single
29
+ * batched step whose items will be submitted together via EIP-5792
30
+ * `wallet_sendCalls`.
31
+ *
32
+ * The first item stays `incomplete` so the executeSteps iterator picks it as
33
+ * the active step item; all subsequent items are pre-marked `complete` so the
34
+ * iterator doesn't try to execute them again as separate transactions after
35
+ * the batch lands.
36
+ */
11
37
  export function prepareBatchTransaction(steps) {
12
- const secondStepId = steps[1]?.id; // deposit or swap
38
+ const terminalStep = steps[steps.length - 1];
39
+ const terminalId = terminalStep?.id; // deposit or swap
40
+ const allItems = steps.flatMap((step) => step.items || []);
41
+ const batchedItems = allItems.map((item, index) => {
42
+ if (index === 0)
43
+ return item;
44
+ // mark non-leading items as complete so we only fire the batch once
45
+ item.status = 'complete';
46
+ item.progressState = 'complete';
47
+ return item;
48
+ });
13
49
  const batchedStep = {
14
- id: `approve-and-${secondStepId}`,
50
+ id: `approve-and-${terminalId}`,
15
51
  action: 'Confirm transaction in your wallet',
16
- description: `Batching approval and ${secondStepId} transactions`,
52
+ description: `Batching approval and ${terminalId} transactions`,
17
53
  kind: 'transaction',
18
- items: [
19
- ...(steps[0].items || []),
20
- ...(steps[1].items || []).map((item) => {
21
- // mark the second step as complete
22
- item.status = 'complete';
23
- item.progressState = 'complete';
24
- return item;
25
- })
26
- ],
27
- requestId: steps[1].requestId ?? steps[0].requestId
54
+ items: batchedItems,
55
+ requestId: terminalStep?.requestId ?? steps[0]?.requestId
28
56
  };
29
57
  return batchedStep;
30
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prepareBatchTransaction.js","sourceRoot":"","sources":["../../../src/utils/prepareBatchTransaction.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAAC,KAAuB;IAC1D,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IAC1B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IAE3B,MAAM,qBAAqB,GAAG,SAAS,EAAE,KAAK,EAAE,IAAI,CAClD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,YAAY,CACvC,CAAA;IACD,MAAM,oBAAoB,GAAG,UAAU,EAAE,KAAK,EAAE,IAAI,CAClD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,YAAY,CACvC,CAAA;IAED,OAAO,CACL,SAAS,EAAE,EAAE,KAAK,SAAS;QAC3B,CAAC,UAAU,EAAE,EAAE,KAAK,SAAS,IAAI,UAAU,EAAE,EAAE,KAAK,MAAM,CAAC;QAC3D,qBAAqB;QACrB,oBAAoB,CACrB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAuB;IAC7D,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA,CAAC,kBAAkB;IAEpD,MAAM,WAAW,GAAG;QAClB,EAAE,EAAE,eAAe,YAAY,EAAS;QACxC,MAAM,EAAE,oCAAoC;QAC5C,WAAW,EAAE,yBAAyB,YAAY,eAAe;QACjE,IAAI,EAAE,aAAsB;QAC5B,KAAK,EAAE;YACL,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACzB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACrC,mCAAmC;gBACnC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAA;gBACxB,IAAI,CAAC,aAAa,GAAG,UAAU,CAAA;gBAC/B,OAAO,IAAI,CAAA;YACb,CAAC,CAAC;SACH;QACD,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;KACpD,CAAA;IAED,OAAO,WAAW,CAAA;AACpB,CAAC"}
1
+ {"version":3,"file":"prepareBatchTransaction.js","sourceRoot":"","sources":["../../../src/utils/prepareBatchTransaction.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAuB;IAC1D,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IAE5C,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAEtC,MAAM,uBAAuB,GAC3B,YAAY,EAAE,EAAE,KAAK,MAAM,IAAI,YAAY,EAAE,EAAE,KAAK,SAAS,CAAA;IAC/D,IAAI,CAAC,uBAAuB;QAAE,OAAO,KAAK,CAAA;IAE1C,MAAM,kBAAkB,GAAG,WAAW,CAAC,KAAK,CAC1C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,SAAS,CACjC,CAAA;IACD,IAAI,CAAC,kBAAkB;QAAE,OAAO,KAAK,CAAA;IAErC,MAAM,sBAAsB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAClD,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,CAC1D,CAAA;IACD,OAAO,sBAAsB,CAAA;AAC/B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAuB;IAC7D,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC5C,MAAM,UAAU,GAAG,YAAY,EAAE,EAAE,CAAA,CAAC,kBAAkB;IAEtD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;IAE1D,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAChD,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QAC5B,oEAAoE;QACpE,IAAI,CAAC,MAAM,GAAG,UAAU,CAAA;QACxB,IAAI,CAAC,aAAa,GAAG,UAAU,CAAA;QAC/B,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG;QAClB,EAAE,EAAE,eAAe,UAAU,EAAS;QACtC,MAAM,EAAE,oCAAoC;QAC5C,WAAW,EAAE,yBAAyB,UAAU,eAAe;QAC/D,IAAI,EAAE,aAAsB;QAC5B,KAAK,EAAE,YAAY;QACnB,SAAS,EAAE,YAAY,EAAE,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS;KAC1D,CAAA;IAED,OAAO,WAAW,CAAA;AACpB,CAAC"}
@@ -1,2 +1,2 @@
1
- export const SDK_VERSION = '5.2.2';
1
+ export const SDK_VERSION = '5.2.3';
2
2
  //# sourceMappingURL=version.js.map