@metamask/transaction-pay-controller 22.6.3 → 22.8.0

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.
Files changed (140) hide show
  1. package/CHANGELOG.md +27 -1
  2. package/dist/TransactionPayController-method-action-types.cjs.map +1 -1
  3. package/dist/TransactionPayController-method-action-types.d.cts +15 -1
  4. package/dist/TransactionPayController-method-action-types.d.cts.map +1 -1
  5. package/dist/TransactionPayController-method-action-types.d.mts +15 -1
  6. package/dist/TransactionPayController-method-action-types.d.mts.map +1 -1
  7. package/dist/TransactionPayController-method-action-types.mjs.map +1 -1
  8. package/dist/TransactionPayController.cjs +21 -3
  9. package/dist/TransactionPayController.cjs.map +1 -1
  10. package/dist/TransactionPayController.d.cts +13 -2
  11. package/dist/TransactionPayController.d.cts.map +1 -1
  12. package/dist/TransactionPayController.d.mts +13 -2
  13. package/dist/TransactionPayController.d.mts.map +1 -1
  14. package/dist/TransactionPayController.mjs +21 -3
  15. package/dist/TransactionPayController.mjs.map +1 -1
  16. package/dist/constants.cjs +8 -1
  17. package/dist/constants.cjs.map +1 -1
  18. package/dist/constants.d.cts +6 -0
  19. package/dist/constants.d.cts.map +1 -1
  20. package/dist/constants.d.mts +6 -0
  21. package/dist/constants.d.mts.map +1 -1
  22. package/dist/constants.mjs +7 -0
  23. package/dist/constants.mjs.map +1 -1
  24. package/dist/index.cjs +2 -1
  25. package/dist/index.cjs.map +1 -1
  26. package/dist/index.d.cts +2 -2
  27. package/dist/index.d.cts.map +1 -1
  28. package/dist/index.d.mts +2 -2
  29. package/dist/index.d.mts.map +1 -1
  30. package/dist/index.mjs +1 -1
  31. package/dist/index.mjs.map +1 -1
  32. package/dist/strategy/relay/relay-quotes.cjs +20 -3
  33. package/dist/strategy/relay/relay-quotes.cjs.map +1 -1
  34. package/dist/strategy/relay/relay-quotes.d.cts.map +1 -1
  35. package/dist/strategy/relay/relay-quotes.d.mts.map +1 -1
  36. package/dist/strategy/relay/relay-quotes.mjs +20 -3
  37. package/dist/strategy/relay/relay-quotes.mjs.map +1 -1
  38. package/dist/strategy/relay/relay-submit.cjs +24 -11
  39. package/dist/strategy/relay/relay-submit.cjs.map +1 -1
  40. package/dist/strategy/relay/relay-submit.mjs +24 -11
  41. package/dist/strategy/relay/relay-submit.mjs.map +1 -1
  42. package/dist/strategy/server/ServerStrategy.cjs +35 -0
  43. package/dist/strategy/server/ServerStrategy.cjs.map +1 -0
  44. package/dist/strategy/server/ServerStrategy.d.cts +15 -0
  45. package/dist/strategy/server/ServerStrategy.d.cts.map +1 -0
  46. package/dist/strategy/server/ServerStrategy.d.mts +15 -0
  47. package/dist/strategy/server/ServerStrategy.d.mts.map +1 -0
  48. package/dist/strategy/server/ServerStrategy.mjs +31 -0
  49. package/dist/strategy/server/ServerStrategy.mjs.map +1 -0
  50. package/dist/strategy/server/constants.cjs +11 -0
  51. package/dist/strategy/server/constants.cjs.map +1 -0
  52. package/dist/strategy/server/constants.d.cts +8 -0
  53. package/dist/strategy/server/constants.d.cts.map +1 -0
  54. package/dist/strategy/server/constants.d.mts +8 -0
  55. package/dist/strategy/server/constants.d.mts.map +1 -0
  56. package/dist/strategy/server/constants.mjs +8 -0
  57. package/dist/strategy/server/constants.mjs.map +1 -0
  58. package/dist/strategy/server/perps.cjs +71 -0
  59. package/dist/strategy/server/perps.cjs.map +1 -0
  60. package/dist/strategy/server/perps.d.cts +36 -0
  61. package/dist/strategy/server/perps.d.cts.map +1 -0
  62. package/dist/strategy/server/perps.d.mts +36 -0
  63. package/dist/strategy/server/perps.d.mts.map +1 -0
  64. package/dist/strategy/server/perps.mjs +66 -0
  65. package/dist/strategy/server/perps.mjs.map +1 -0
  66. package/dist/strategy/server/server-api.cjs +98 -0
  67. package/dist/strategy/server/server-api.cjs.map +1 -0
  68. package/dist/strategy/server/server-api.d.cts +35 -0
  69. package/dist/strategy/server/server-api.d.cts.map +1 -0
  70. package/dist/strategy/server/server-api.d.mts +35 -0
  71. package/dist/strategy/server/server-api.d.mts.map +1 -0
  72. package/dist/strategy/server/server-api.mjs +92 -0
  73. package/dist/strategy/server/server-api.mjs.map +1 -0
  74. package/dist/strategy/server/server-quotes.cjs +315 -0
  75. package/dist/strategy/server/server-quotes.cjs.map +1 -0
  76. package/dist/strategy/server/server-quotes.d.cts +10 -0
  77. package/dist/strategy/server/server-quotes.d.cts.map +1 -0
  78. package/dist/strategy/server/server-quotes.d.mts +10 -0
  79. package/dist/strategy/server/server-quotes.d.mts.map +1 -0
  80. package/dist/strategy/server/server-quotes.mjs +311 -0
  81. package/dist/strategy/server/server-quotes.mjs.map +1 -0
  82. package/dist/strategy/server/server-submit.cjs +296 -0
  83. package/dist/strategy/server/server-submit.cjs.map +1 -0
  84. package/dist/strategy/server/server-submit.d.cts +13 -0
  85. package/dist/strategy/server/server-submit.d.cts.map +1 -0
  86. package/dist/strategy/server/server-submit.d.mts +13 -0
  87. package/dist/strategy/server/server-submit.d.mts.map +1 -0
  88. package/dist/strategy/server/server-submit.mjs +292 -0
  89. package/dist/strategy/server/server-submit.mjs.map +1 -0
  90. package/dist/strategy/server/types.cjs +26 -0
  91. package/dist/strategy/server/types.cjs.map +1 -0
  92. package/dist/strategy/server/types.d.cts +153 -0
  93. package/dist/strategy/server/types.d.cts.map +1 -0
  94. package/dist/strategy/server/types.d.mts +153 -0
  95. package/dist/strategy/server/types.d.mts.map +1 -0
  96. package/dist/strategy/server/types.mjs +23 -0
  97. package/dist/strategy/server/types.mjs.map +1 -0
  98. package/dist/tests/messenger-mock.cjs +3 -0
  99. package/dist/tests/messenger-mock.cjs.map +1 -1
  100. package/dist/tests/messenger-mock.d.cts +255 -3
  101. package/dist/tests/messenger-mock.d.cts.map +1 -1
  102. package/dist/tests/messenger-mock.d.mts +255 -3
  103. package/dist/tests/messenger-mock.d.mts.map +1 -1
  104. package/dist/tests/messenger-mock.mjs +3 -0
  105. package/dist/tests/messenger-mock.mjs.map +1 -1
  106. package/dist/types.cjs.map +1 -1
  107. package/dist/types.d.cts +44 -14
  108. package/dist/types.d.cts.map +1 -1
  109. package/dist/types.d.mts +44 -14
  110. package/dist/types.d.mts.map +1 -1
  111. package/dist/types.mjs.map +1 -1
  112. package/dist/utils/feature-flags.cjs +43 -3
  113. package/dist/utils/feature-flags.cjs.map +1 -1
  114. package/dist/utils/feature-flags.d.cts +21 -0
  115. package/dist/utils/feature-flags.d.cts.map +1 -1
  116. package/dist/utils/feature-flags.d.mts +21 -0
  117. package/dist/utils/feature-flags.d.mts.map +1 -1
  118. package/dist/utils/feature-flags.mjs +40 -2
  119. package/dist/utils/feature-flags.mjs.map +1 -1
  120. package/dist/utils/gas.cjs +11 -10
  121. package/dist/utils/gas.cjs.map +1 -1
  122. package/dist/utils/gas.d.cts +12 -0
  123. package/dist/utils/gas.d.cts.map +1 -1
  124. package/dist/utils/gas.d.mts +12 -0
  125. package/dist/utils/gas.d.mts.map +1 -1
  126. package/dist/utils/gas.mjs +10 -10
  127. package/dist/utils/gas.mjs.map +1 -1
  128. package/dist/utils/quotes.cjs +9 -3
  129. package/dist/utils/quotes.cjs.map +1 -1
  130. package/dist/utils/quotes.d.cts.map +1 -1
  131. package/dist/utils/quotes.d.mts.map +1 -1
  132. package/dist/utils/quotes.mjs +10 -4
  133. package/dist/utils/quotes.mjs.map +1 -1
  134. package/dist/utils/strategy.cjs +3 -0
  135. package/dist/utils/strategy.cjs.map +1 -1
  136. package/dist/utils/strategy.d.cts.map +1 -1
  137. package/dist/utils/strategy.d.mts.map +1 -1
  138. package/dist/utils/strategy.mjs +3 -0
  139. package/dist/utils/strategy.mjs.map +1 -1
  140. package/package.json +5 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-submit.cjs","sourceRoot":"","sources":["../../../src/strategy/server/server-submit.ts"],"names":[],"mappings":"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","sourcesContent":["import { ORIGIN_METAMASK, toHex } from '@metamask/controller-utils';\nimport type {\n TransactionMeta,\n TransactionParams,\n} from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { projectLogger } from '../../logger';\nimport type {\n PayStrategyExecuteRequest,\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n} from '../../types';\nimport {\n getServerPollingInterval,\n getServerPollingTimeout,\n} from '../../utils/feature-flags';\nimport {\n collectTransactionIds,\n getTransaction,\n updateTransaction,\n waitForTransactionConfirmed,\n} from '../../utils/transaction';\nimport { getServerStatus, submitServerIntent } from './server-api';\nimport type {\n ServerQuote,\n ServerQuoteStep,\n ServerStatusResponse,\n ServerSubmitRequest,\n} from './types';\nimport { ServerStatus } from './types';\n\nconst log = createModuleLogger(projectLogger, 'server-strategy');\n\n/**\n * Submits server intent quotes.\n *\n * @param request - Request object.\n * @returns An object containing the transaction hash if available.\n */\nexport async function submitServerQuotes(\n request: PayStrategyExecuteRequest<ServerQuote>,\n): Promise<{ transactionHash?: Hex }> {\n log('Executing server quotes', request);\n\n const { quotes, messenger, transaction } = request;\n\n let transactionHash: Hex | undefined;\n\n for (const quote of quotes) {\n ({ transactionHash } = await executeSingleServerQuote(\n quote,\n messenger,\n transaction,\n ));\n }\n\n return { transactionHash };\n}\n\nasync function executeSingleServerQuote(\n quote: TransactionPayQuote<ServerQuote>,\n messenger: TransactionPayControllerMessenger,\n transaction: TransactionMeta,\n): Promise<{ transactionHash?: Hex }> {\n log('Executing single server quote', quote);\n\n updateTransaction(\n {\n transactionId: transaction.id,\n messenger,\n note: 'Remove nonce from skipped transaction',\n },\n (tx) => {\n tx.txParams.nonce = undefined;\n },\n );\n\n if (quote.original.gasless) {\n await submitViaServerExecute(quote, messenger, transaction);\n } else {\n await submitViaTransactionController(quote, messenger, transaction);\n }\n\n const targetHash = await waitForServerCompletion(\n quote.original,\n messenger,\n transaction.id,\n );\n\n log('Server request completed', targetHash);\n\n updateTransaction(\n {\n transactionId: transaction.id,\n messenger,\n note: 'Intent complete after Server completion',\n },\n (tx) => {\n tx.isIntentComplete = true;\n },\n );\n\n return { transactionHash: targetHash };\n}\n\nasync function submitViaServerExecute(\n quote: TransactionPayQuote<ServerQuote>,\n messenger: TransactionPayControllerMessenger,\n transaction: TransactionMeta,\n): Promise<void> {\n const { from, sourceChainId } = quote.request;\n const networkClientId = messenger.call(\n 'NetworkController:findNetworkClientIdByChainId',\n sourceChainId,\n );\n\n const nestedTransactions = quote.original.steps.map((step) => ({\n data: step.data,\n to: step.to,\n value: step.value as Hex,\n }));\n\n const sourceCallTransaction = {\n ...transaction,\n chainId: sourceChainId,\n networkClientId,\n nestedTransactions,\n txParams: {\n ...transaction.txParams,\n from,\n },\n } as TransactionMeta;\n\n const delegation = await messenger.call(\n 'TransactionPayController:getDelegationTransaction',\n { transaction: sourceCallTransaction },\n );\n\n log('Delegation result for server source calls', delegation);\n\n const submitBody: ServerSubmitRequest = {\n provider: quote.original.provider,\n id: quote.original.id,\n chainId: Number(sourceChainId),\n to: delegation.to,\n data: delegation.data,\n value: new BigNumber(delegation.value).toFixed(),\n ...(delegation.authorizationList?.length\n ? {\n authorizationList: delegation.authorizationList.map((auth) => ({\n chainId: Number(auth.chainId),\n address: auth.address,\n nonce: Number(auth.nonce),\n yParity: Number(auth.yParity),\n r: auth.r as Hex,\n s: auth.s as Hex,\n })),\n }\n : {}),\n };\n\n const submitResponse = await submitServerIntent(messenger, submitBody);\n\n if (!submitResponse.success) {\n throw new Error(\n `Server submit failed: ${submitResponse.error ?? 'unknown'}`,\n );\n }\n}\n\nasync function submitViaTransactionController(\n quote: TransactionPayQuote<ServerQuote>,\n messenger: TransactionPayControllerMessenger,\n transaction: TransactionMeta,\n): Promise<void> {\n const { from, sourceChainId, sourceTokenAddress } = quote.request;\n const { steps } = quote.original;\n\n if (steps.length === 0) {\n throw new Error('Server quote has no steps to submit');\n }\n\n const networkClientId = messenger.call(\n 'NetworkController:findNetworkClientIdByChainId',\n sourceChainId,\n );\n\n const { gasLimits, is7702, maxFeePerGas, maxPriorityFeePerGas } =\n quote.original.client;\n const transactionParams = steps.map((step, i) =>\n stepToParams(step, from, gasLimits[i], maxFeePerGas, maxPriorityFeePerGas),\n );\n const gasFeeToken = quote.fees.isSourceGasFeeToken\n ? sourceTokenAddress\n : undefined;\n\n log('Submitting via TransactionController', {\n from,\n gasFeeToken,\n is7702,\n networkClientId,\n sourceChainId,\n stepCount: steps.length,\n });\n\n const transactionIds: string[] = [];\n const { end } = collectTransactionIds(\n sourceChainId,\n from,\n messenger,\n (transactionId) => {\n transactionIds.push(transactionId);\n updateTransaction(\n {\n transactionId: transaction.id,\n messenger,\n note: 'Add required transaction ID from server submission',\n },\n (tx) => {\n tx.requiredTransactionIds ??= [];\n tx.requiredTransactionIds.push(transactionId);\n },\n );\n },\n );\n\n try {\n if (transactionParams.length === 1) {\n const addTransactionOptions = {\n gasFeeToken,\n isInternal: true,\n networkClientId,\n origin: ORIGIN_METAMASK,\n requireApproval: false,\n };\n\n log('Calling addTransaction', {\n params: transactionParams[0],\n options: addTransactionOptions,\n });\n\n await messenger.call(\n 'TransactionController:addTransaction',\n transactionParams[0],\n addTransactionOptions,\n );\n } else {\n const gasLimit7702 = is7702 ? toHex(gasLimits[0]) : undefined;\n\n const batchTransactions = transactionParams.map((params, i) => {\n const gas = (gasLimit7702 ??\n (gasLimits[i] === undefined ? undefined : params.gas)) as\n | Hex\n | undefined;\n\n return {\n params: {\n data: params.data as Hex,\n gas,\n maxFeePerGas: params.maxFeePerGas as Hex,\n maxPriorityFeePerGas: params.maxPriorityFeePerGas as Hex,\n to: params.to as Hex,\n value: params.value as Hex,\n },\n };\n });\n\n const addTransactionBatchOptions = {\n from,\n ...(gasLimit7702 === undefined\n ? { disable7702: true }\n : {\n disable7702: false,\n disableHook: true,\n disableSequential: true,\n gasLimit7702,\n }),\n gasFeeToken,\n isInternal: true,\n networkClientId,\n origin: ORIGIN_METAMASK,\n overwriteUpgrade: true,\n requireApproval: false,\n transactions: batchTransactions,\n };\n\n log('Calling addTransactionBatch', addTransactionBatchOptions);\n\n await messenger.call(\n 'TransactionController:addTransactionBatch',\n addTransactionBatchOptions,\n );\n }\n } finally {\n end();\n }\n\n log('Server transactions added', transactionIds);\n\n await Promise.all(\n transactionIds.map((txId) => waitForTransactionConfirmed(txId, messenger)),\n );\n\n log('Server transactions confirmed', transactionIds);\n\n const lastId = transactionIds.at(-1);\n const sourceHash = lastId\n ? getTransaction(lastId, messenger)?.hash\n : undefined;\n\n if (sourceHash) {\n updateTransaction(\n {\n transactionId: transaction.id,\n messenger,\n note: 'Add source hash from server transaction submission',\n },\n (tx) => {\n tx.metamaskPay ??= {};\n tx.metamaskPay.sourceHash = sourceHash as Hex;\n },\n );\n }\n}\n\nfunction stepToParams(\n step: ServerQuoteStep,\n from: Hex,\n gasLimit?: number,\n clientMaxFeePerGas?: string,\n clientMaxPriorityFeePerGas?: string,\n): TransactionParams {\n let gas: Hex | undefined;\n if (gasLimit) {\n gas = toHex(gasLimit);\n } else if (step.gasLimit) {\n gas = toHex(step.gasLimit);\n }\n\n const resolvedMaxFeePerGas = step.maxFeePerGas ?? clientMaxFeePerGas;\n const resolvedMaxPriorityFeePerGas =\n step.maxPriorityFeePerGas ?? clientMaxPriorityFeePerGas;\n\n const params = {\n data: step.data,\n from,\n gas,\n maxFeePerGas: resolvedMaxFeePerGas\n ? toHex(resolvedMaxFeePerGas)\n : undefined,\n maxPriorityFeePerGas: resolvedMaxPriorityFeePerGas\n ? toHex(resolvedMaxPriorityFeePerGas)\n : undefined,\n to: step.to,\n value: toHex(step.value),\n };\n\n log('Step to params', {\n step: {\n gasLimit: step.gasLimit,\n maxFeePerGas: step.maxFeePerGas,\n maxPriorityFeePerGas: step.maxPriorityFeePerGas,\n value: step.value,\n },\n params: {\n gas: params.gas,\n maxFeePerGas: params.maxFeePerGas,\n maxPriorityFeePerGas: params.maxPriorityFeePerGas,\n value: params.value,\n },\n });\n\n return params;\n}\n\nasync function waitForServerCompletion(\n quote: ServerQuote,\n messenger: TransactionPayControllerMessenger,\n transactionId: string,\n): Promise<Hex | undefined> {\n const pollingInterval = getServerPollingInterval(messenger);\n const pollingTimeout = getServerPollingTimeout(messenger);\n const hasTimeout = pollingTimeout !== undefined && pollingTimeout > 0;\n\n log('Server polling config', { pollingInterval, pollingTimeout });\n\n const startTime = Date.now();\n\n let lastStatus: string | undefined;\n let sourceHashEmitted = false;\n\n while (true) {\n let statusResponse: ServerStatusResponse | undefined;\n\n try {\n const tx = getTransaction(transactionId, messenger);\n\n statusResponse = await getServerStatus(messenger, {\n provider: quote.provider,\n id: quote.id,\n hash: tx?.metamaskPay?.sourceHash ?? tx?.hash,\n });\n } catch (error) {\n log('Polling network error', error);\n }\n\n if (statusResponse) {\n lastStatus = statusResponse.status;\n log('Polled status', statusResponse.status, statusResponse);\n\n if (!sourceHashEmitted && statusResponse.sourceHash) {\n sourceHashEmitted = true;\n const { sourceHash } = statusResponse;\n\n updateTransaction(\n {\n transactionId,\n messenger,\n note: 'Add source hash from server status',\n },\n (tx) => {\n tx.metamaskPay ??= {};\n tx.metamaskPay.sourceHash = sourceHash;\n },\n );\n }\n\n if (statusResponse.status === ServerStatus.Confirmed) {\n return statusResponse.targetHash ?? '0x';\n }\n\n if (\n statusResponse.status === ServerStatus.Failed ||\n statusResponse.status === ServerStatus.Refunded\n ) {\n throw new Error(`Server intent ${statusResponse.status.toLowerCase()}`);\n }\n }\n\n if (hasTimeout && Date.now() - startTime >= pollingTimeout) {\n const statusDetail = lastStatus ? ` (last status: ${lastStatus})` : '';\n throw new Error(`Server polling timed out${statusDetail}`);\n }\n\n await new Promise((resolve) => setTimeout(resolve, pollingInterval));\n }\n}\n"]}
@@ -0,0 +1,13 @@
1
+ import type { Hex } from "@metamask/utils";
2
+ import type { PayStrategyExecuteRequest } from "../../types.cjs";
3
+ import type { ServerQuote } from "./types.cjs";
4
+ /**
5
+ * Submits server intent quotes.
6
+ *
7
+ * @param request - Request object.
8
+ * @returns An object containing the transaction hash if available.
9
+ */
10
+ export declare function submitServerQuotes(request: PayStrategyExecuteRequest<ServerQuote>): Promise<{
11
+ transactionHash?: Hex;
12
+ }>;
13
+ //# sourceMappingURL=server-submit.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-submit.d.cts","sourceRoot":"","sources":["../../../src/strategy/server/server-submit.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAK3C,OAAO,KAAK,EACV,yBAAyB,EAG1B,wBAAoB;AAYrB,OAAO,KAAK,EACV,WAAW,EAIZ,oBAAgB;AAKjB;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,CAAC,WAAW,CAAC,GAC9C,OAAO,CAAC;IAAE,eAAe,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC,CAgBpC"}
@@ -0,0 +1,13 @@
1
+ import type { Hex } from "@metamask/utils";
2
+ import type { PayStrategyExecuteRequest } from "../../types.mjs";
3
+ import type { ServerQuote } from "./types.mjs";
4
+ /**
5
+ * Submits server intent quotes.
6
+ *
7
+ * @param request - Request object.
8
+ * @returns An object containing the transaction hash if available.
9
+ */
10
+ export declare function submitServerQuotes(request: PayStrategyExecuteRequest<ServerQuote>): Promise<{
11
+ transactionHash?: Hex;
12
+ }>;
13
+ //# sourceMappingURL=server-submit.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-submit.d.mts","sourceRoot":"","sources":["../../../src/strategy/server/server-submit.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAK3C,OAAO,KAAK,EACV,yBAAyB,EAG1B,wBAAoB;AAYrB,OAAO,KAAK,EACV,WAAW,EAIZ,oBAAgB;AAKjB;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,CAAC,WAAW,CAAC,GAC9C,OAAO,CAAC;IAAE,eAAe,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC,CAgBpC"}
@@ -0,0 +1,292 @@
1
+ import { ORIGIN_METAMASK, toHex } from "@metamask/controller-utils";
2
+ import { createModuleLogger } from "@metamask/utils";
3
+ import { BigNumber } from "bignumber.js";
4
+ import { projectLogger } from "../../logger.mjs";
5
+ import { getServerPollingInterval, getServerPollingTimeout } from "../../utils/feature-flags.mjs";
6
+ import { collectTransactionIds, getTransaction, updateTransaction, waitForTransactionConfirmed } from "../../utils/transaction.mjs";
7
+ import { getServerStatus, submitServerIntent } from "./server-api.mjs";
8
+ import { ServerStatus } from "./types.mjs";
9
+ const log = createModuleLogger(projectLogger, 'server-strategy');
10
+ /**
11
+ * Submits server intent quotes.
12
+ *
13
+ * @param request - Request object.
14
+ * @returns An object containing the transaction hash if available.
15
+ */
16
+ export async function submitServerQuotes(request) {
17
+ log('Executing server quotes', request);
18
+ const { quotes, messenger, transaction } = request;
19
+ let transactionHash;
20
+ for (const quote of quotes) {
21
+ ({ transactionHash } = await executeSingleServerQuote(quote, messenger, transaction));
22
+ }
23
+ return { transactionHash };
24
+ }
25
+ async function executeSingleServerQuote(quote, messenger, transaction) {
26
+ log('Executing single server quote', quote);
27
+ updateTransaction({
28
+ transactionId: transaction.id,
29
+ messenger,
30
+ note: 'Remove nonce from skipped transaction',
31
+ }, (tx) => {
32
+ tx.txParams.nonce = undefined;
33
+ });
34
+ if (quote.original.gasless) {
35
+ await submitViaServerExecute(quote, messenger, transaction);
36
+ }
37
+ else {
38
+ await submitViaTransactionController(quote, messenger, transaction);
39
+ }
40
+ const targetHash = await waitForServerCompletion(quote.original, messenger, transaction.id);
41
+ log('Server request completed', targetHash);
42
+ updateTransaction({
43
+ transactionId: transaction.id,
44
+ messenger,
45
+ note: 'Intent complete after Server completion',
46
+ }, (tx) => {
47
+ tx.isIntentComplete = true;
48
+ });
49
+ return { transactionHash: targetHash };
50
+ }
51
+ async function submitViaServerExecute(quote, messenger, transaction) {
52
+ const { from, sourceChainId } = quote.request;
53
+ const networkClientId = messenger.call('NetworkController:findNetworkClientIdByChainId', sourceChainId);
54
+ const nestedTransactions = quote.original.steps.map((step) => ({
55
+ data: step.data,
56
+ to: step.to,
57
+ value: step.value,
58
+ }));
59
+ const sourceCallTransaction = {
60
+ ...transaction,
61
+ chainId: sourceChainId,
62
+ networkClientId,
63
+ nestedTransactions,
64
+ txParams: {
65
+ ...transaction.txParams,
66
+ from,
67
+ },
68
+ };
69
+ const delegation = await messenger.call('TransactionPayController:getDelegationTransaction', { transaction: sourceCallTransaction });
70
+ log('Delegation result for server source calls', delegation);
71
+ const submitBody = {
72
+ provider: quote.original.provider,
73
+ id: quote.original.id,
74
+ chainId: Number(sourceChainId),
75
+ to: delegation.to,
76
+ data: delegation.data,
77
+ value: new BigNumber(delegation.value).toFixed(),
78
+ ...(delegation.authorizationList?.length
79
+ ? {
80
+ authorizationList: delegation.authorizationList.map((auth) => ({
81
+ chainId: Number(auth.chainId),
82
+ address: auth.address,
83
+ nonce: Number(auth.nonce),
84
+ yParity: Number(auth.yParity),
85
+ r: auth.r,
86
+ s: auth.s,
87
+ })),
88
+ }
89
+ : {}),
90
+ };
91
+ const submitResponse = await submitServerIntent(messenger, submitBody);
92
+ if (!submitResponse.success) {
93
+ throw new Error(`Server submit failed: ${submitResponse.error ?? 'unknown'}`);
94
+ }
95
+ }
96
+ async function submitViaTransactionController(quote, messenger, transaction) {
97
+ const { from, sourceChainId, sourceTokenAddress } = quote.request;
98
+ const { steps } = quote.original;
99
+ if (steps.length === 0) {
100
+ throw new Error('Server quote has no steps to submit');
101
+ }
102
+ const networkClientId = messenger.call('NetworkController:findNetworkClientIdByChainId', sourceChainId);
103
+ const { gasLimits, is7702, maxFeePerGas, maxPriorityFeePerGas } = quote.original.client;
104
+ const transactionParams = steps.map((step, i) => stepToParams(step, from, gasLimits[i], maxFeePerGas, maxPriorityFeePerGas));
105
+ const gasFeeToken = quote.fees.isSourceGasFeeToken
106
+ ? sourceTokenAddress
107
+ : undefined;
108
+ log('Submitting via TransactionController', {
109
+ from,
110
+ gasFeeToken,
111
+ is7702,
112
+ networkClientId,
113
+ sourceChainId,
114
+ stepCount: steps.length,
115
+ });
116
+ const transactionIds = [];
117
+ const { end } = collectTransactionIds(sourceChainId, from, messenger, (transactionId) => {
118
+ transactionIds.push(transactionId);
119
+ updateTransaction({
120
+ transactionId: transaction.id,
121
+ messenger,
122
+ note: 'Add required transaction ID from server submission',
123
+ }, (tx) => {
124
+ tx.requiredTransactionIds ?? (tx.requiredTransactionIds = []);
125
+ tx.requiredTransactionIds.push(transactionId);
126
+ });
127
+ });
128
+ try {
129
+ if (transactionParams.length === 1) {
130
+ const addTransactionOptions = {
131
+ gasFeeToken,
132
+ isInternal: true,
133
+ networkClientId,
134
+ origin: ORIGIN_METAMASK,
135
+ requireApproval: false,
136
+ };
137
+ log('Calling addTransaction', {
138
+ params: transactionParams[0],
139
+ options: addTransactionOptions,
140
+ });
141
+ await messenger.call('TransactionController:addTransaction', transactionParams[0], addTransactionOptions);
142
+ }
143
+ else {
144
+ const gasLimit7702 = is7702 ? toHex(gasLimits[0]) : undefined;
145
+ const batchTransactions = transactionParams.map((params, i) => {
146
+ const gas = (gasLimit7702 ??
147
+ (gasLimits[i] === undefined ? undefined : params.gas));
148
+ return {
149
+ params: {
150
+ data: params.data,
151
+ gas,
152
+ maxFeePerGas: params.maxFeePerGas,
153
+ maxPriorityFeePerGas: params.maxPriorityFeePerGas,
154
+ to: params.to,
155
+ value: params.value,
156
+ },
157
+ };
158
+ });
159
+ const addTransactionBatchOptions = {
160
+ from,
161
+ ...(gasLimit7702 === undefined
162
+ ? { disable7702: true }
163
+ : {
164
+ disable7702: false,
165
+ disableHook: true,
166
+ disableSequential: true,
167
+ gasLimit7702,
168
+ }),
169
+ gasFeeToken,
170
+ isInternal: true,
171
+ networkClientId,
172
+ origin: ORIGIN_METAMASK,
173
+ overwriteUpgrade: true,
174
+ requireApproval: false,
175
+ transactions: batchTransactions,
176
+ };
177
+ log('Calling addTransactionBatch', addTransactionBatchOptions);
178
+ await messenger.call('TransactionController:addTransactionBatch', addTransactionBatchOptions);
179
+ }
180
+ }
181
+ finally {
182
+ end();
183
+ }
184
+ log('Server transactions added', transactionIds);
185
+ await Promise.all(transactionIds.map((txId) => waitForTransactionConfirmed(txId, messenger)));
186
+ log('Server transactions confirmed', transactionIds);
187
+ const lastId = transactionIds.at(-1);
188
+ const sourceHash = lastId
189
+ ? getTransaction(lastId, messenger)?.hash
190
+ : undefined;
191
+ if (sourceHash) {
192
+ updateTransaction({
193
+ transactionId: transaction.id,
194
+ messenger,
195
+ note: 'Add source hash from server transaction submission',
196
+ }, (tx) => {
197
+ tx.metamaskPay ?? (tx.metamaskPay = {});
198
+ tx.metamaskPay.sourceHash = sourceHash;
199
+ });
200
+ }
201
+ }
202
+ function stepToParams(step, from, gasLimit, clientMaxFeePerGas, clientMaxPriorityFeePerGas) {
203
+ let gas;
204
+ if (gasLimit) {
205
+ gas = toHex(gasLimit);
206
+ }
207
+ else if (step.gasLimit) {
208
+ gas = toHex(step.gasLimit);
209
+ }
210
+ const resolvedMaxFeePerGas = step.maxFeePerGas ?? clientMaxFeePerGas;
211
+ const resolvedMaxPriorityFeePerGas = step.maxPriorityFeePerGas ?? clientMaxPriorityFeePerGas;
212
+ const params = {
213
+ data: step.data,
214
+ from,
215
+ gas,
216
+ maxFeePerGas: resolvedMaxFeePerGas
217
+ ? toHex(resolvedMaxFeePerGas)
218
+ : undefined,
219
+ maxPriorityFeePerGas: resolvedMaxPriorityFeePerGas
220
+ ? toHex(resolvedMaxPriorityFeePerGas)
221
+ : undefined,
222
+ to: step.to,
223
+ value: toHex(step.value),
224
+ };
225
+ log('Step to params', {
226
+ step: {
227
+ gasLimit: step.gasLimit,
228
+ maxFeePerGas: step.maxFeePerGas,
229
+ maxPriorityFeePerGas: step.maxPriorityFeePerGas,
230
+ value: step.value,
231
+ },
232
+ params: {
233
+ gas: params.gas,
234
+ maxFeePerGas: params.maxFeePerGas,
235
+ maxPriorityFeePerGas: params.maxPriorityFeePerGas,
236
+ value: params.value,
237
+ },
238
+ });
239
+ return params;
240
+ }
241
+ async function waitForServerCompletion(quote, messenger, transactionId) {
242
+ const pollingInterval = getServerPollingInterval(messenger);
243
+ const pollingTimeout = getServerPollingTimeout(messenger);
244
+ const hasTimeout = pollingTimeout !== undefined && pollingTimeout > 0;
245
+ log('Server polling config', { pollingInterval, pollingTimeout });
246
+ const startTime = Date.now();
247
+ let lastStatus;
248
+ let sourceHashEmitted = false;
249
+ while (true) {
250
+ let statusResponse;
251
+ try {
252
+ const tx = getTransaction(transactionId, messenger);
253
+ statusResponse = await getServerStatus(messenger, {
254
+ provider: quote.provider,
255
+ id: quote.id,
256
+ hash: tx?.metamaskPay?.sourceHash ?? tx?.hash,
257
+ });
258
+ }
259
+ catch (error) {
260
+ log('Polling network error', error);
261
+ }
262
+ if (statusResponse) {
263
+ lastStatus = statusResponse.status;
264
+ log('Polled status', statusResponse.status, statusResponse);
265
+ if (!sourceHashEmitted && statusResponse.sourceHash) {
266
+ sourceHashEmitted = true;
267
+ const { sourceHash } = statusResponse;
268
+ updateTransaction({
269
+ transactionId,
270
+ messenger,
271
+ note: 'Add source hash from server status',
272
+ }, (tx) => {
273
+ tx.metamaskPay ?? (tx.metamaskPay = {});
274
+ tx.metamaskPay.sourceHash = sourceHash;
275
+ });
276
+ }
277
+ if (statusResponse.status === ServerStatus.Confirmed) {
278
+ return statusResponse.targetHash ?? '0x';
279
+ }
280
+ if (statusResponse.status === ServerStatus.Failed ||
281
+ statusResponse.status === ServerStatus.Refunded) {
282
+ throw new Error(`Server intent ${statusResponse.status.toLowerCase()}`);
283
+ }
284
+ }
285
+ if (hasTimeout && Date.now() - startTime >= pollingTimeout) {
286
+ const statusDetail = lastStatus ? ` (last status: ${lastStatus})` : '';
287
+ throw new Error(`Server polling timed out${statusDetail}`);
288
+ }
289
+ await new Promise((resolve) => setTimeout(resolve, pollingInterval));
290
+ }
291
+ }
292
+ //# sourceMappingURL=server-submit.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-submit.mjs","sourceRoot":"","sources":["../../../src/strategy/server/server-submit.ts"],"names":[],"mappings":"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","sourcesContent":["import { ORIGIN_METAMASK, toHex } from '@metamask/controller-utils';\nimport type {\n TransactionMeta,\n TransactionParams,\n} from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { projectLogger } from '../../logger';\nimport type {\n PayStrategyExecuteRequest,\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n} from '../../types';\nimport {\n getServerPollingInterval,\n getServerPollingTimeout,\n} from '../../utils/feature-flags';\nimport {\n collectTransactionIds,\n getTransaction,\n updateTransaction,\n waitForTransactionConfirmed,\n} from '../../utils/transaction';\nimport { getServerStatus, submitServerIntent } from './server-api';\nimport type {\n ServerQuote,\n ServerQuoteStep,\n ServerStatusResponse,\n ServerSubmitRequest,\n} from './types';\nimport { ServerStatus } from './types';\n\nconst log = createModuleLogger(projectLogger, 'server-strategy');\n\n/**\n * Submits server intent quotes.\n *\n * @param request - Request object.\n * @returns An object containing the transaction hash if available.\n */\nexport async function submitServerQuotes(\n request: PayStrategyExecuteRequest<ServerQuote>,\n): Promise<{ transactionHash?: Hex }> {\n log('Executing server quotes', request);\n\n const { quotes, messenger, transaction } = request;\n\n let transactionHash: Hex | undefined;\n\n for (const quote of quotes) {\n ({ transactionHash } = await executeSingleServerQuote(\n quote,\n messenger,\n transaction,\n ));\n }\n\n return { transactionHash };\n}\n\nasync function executeSingleServerQuote(\n quote: TransactionPayQuote<ServerQuote>,\n messenger: TransactionPayControllerMessenger,\n transaction: TransactionMeta,\n): Promise<{ transactionHash?: Hex }> {\n log('Executing single server quote', quote);\n\n updateTransaction(\n {\n transactionId: transaction.id,\n messenger,\n note: 'Remove nonce from skipped transaction',\n },\n (tx) => {\n tx.txParams.nonce = undefined;\n },\n );\n\n if (quote.original.gasless) {\n await submitViaServerExecute(quote, messenger, transaction);\n } else {\n await submitViaTransactionController(quote, messenger, transaction);\n }\n\n const targetHash = await waitForServerCompletion(\n quote.original,\n messenger,\n transaction.id,\n );\n\n log('Server request completed', targetHash);\n\n updateTransaction(\n {\n transactionId: transaction.id,\n messenger,\n note: 'Intent complete after Server completion',\n },\n (tx) => {\n tx.isIntentComplete = true;\n },\n );\n\n return { transactionHash: targetHash };\n}\n\nasync function submitViaServerExecute(\n quote: TransactionPayQuote<ServerQuote>,\n messenger: TransactionPayControllerMessenger,\n transaction: TransactionMeta,\n): Promise<void> {\n const { from, sourceChainId } = quote.request;\n const networkClientId = messenger.call(\n 'NetworkController:findNetworkClientIdByChainId',\n sourceChainId,\n );\n\n const nestedTransactions = quote.original.steps.map((step) => ({\n data: step.data,\n to: step.to,\n value: step.value as Hex,\n }));\n\n const sourceCallTransaction = {\n ...transaction,\n chainId: sourceChainId,\n networkClientId,\n nestedTransactions,\n txParams: {\n ...transaction.txParams,\n from,\n },\n } as TransactionMeta;\n\n const delegation = await messenger.call(\n 'TransactionPayController:getDelegationTransaction',\n { transaction: sourceCallTransaction },\n );\n\n log('Delegation result for server source calls', delegation);\n\n const submitBody: ServerSubmitRequest = {\n provider: quote.original.provider,\n id: quote.original.id,\n chainId: Number(sourceChainId),\n to: delegation.to,\n data: delegation.data,\n value: new BigNumber(delegation.value).toFixed(),\n ...(delegation.authorizationList?.length\n ? {\n authorizationList: delegation.authorizationList.map((auth) => ({\n chainId: Number(auth.chainId),\n address: auth.address,\n nonce: Number(auth.nonce),\n yParity: Number(auth.yParity),\n r: auth.r as Hex,\n s: auth.s as Hex,\n })),\n }\n : {}),\n };\n\n const submitResponse = await submitServerIntent(messenger, submitBody);\n\n if (!submitResponse.success) {\n throw new Error(\n `Server submit failed: ${submitResponse.error ?? 'unknown'}`,\n );\n }\n}\n\nasync function submitViaTransactionController(\n quote: TransactionPayQuote<ServerQuote>,\n messenger: TransactionPayControllerMessenger,\n transaction: TransactionMeta,\n): Promise<void> {\n const { from, sourceChainId, sourceTokenAddress } = quote.request;\n const { steps } = quote.original;\n\n if (steps.length === 0) {\n throw new Error('Server quote has no steps to submit');\n }\n\n const networkClientId = messenger.call(\n 'NetworkController:findNetworkClientIdByChainId',\n sourceChainId,\n );\n\n const { gasLimits, is7702, maxFeePerGas, maxPriorityFeePerGas } =\n quote.original.client;\n const transactionParams = steps.map((step, i) =>\n stepToParams(step, from, gasLimits[i], maxFeePerGas, maxPriorityFeePerGas),\n );\n const gasFeeToken = quote.fees.isSourceGasFeeToken\n ? sourceTokenAddress\n : undefined;\n\n log('Submitting via TransactionController', {\n from,\n gasFeeToken,\n is7702,\n networkClientId,\n sourceChainId,\n stepCount: steps.length,\n });\n\n const transactionIds: string[] = [];\n const { end } = collectTransactionIds(\n sourceChainId,\n from,\n messenger,\n (transactionId) => {\n transactionIds.push(transactionId);\n updateTransaction(\n {\n transactionId: transaction.id,\n messenger,\n note: 'Add required transaction ID from server submission',\n },\n (tx) => {\n tx.requiredTransactionIds ??= [];\n tx.requiredTransactionIds.push(transactionId);\n },\n );\n },\n );\n\n try {\n if (transactionParams.length === 1) {\n const addTransactionOptions = {\n gasFeeToken,\n isInternal: true,\n networkClientId,\n origin: ORIGIN_METAMASK,\n requireApproval: false,\n };\n\n log('Calling addTransaction', {\n params: transactionParams[0],\n options: addTransactionOptions,\n });\n\n await messenger.call(\n 'TransactionController:addTransaction',\n transactionParams[0],\n addTransactionOptions,\n );\n } else {\n const gasLimit7702 = is7702 ? toHex(gasLimits[0]) : undefined;\n\n const batchTransactions = transactionParams.map((params, i) => {\n const gas = (gasLimit7702 ??\n (gasLimits[i] === undefined ? undefined : params.gas)) as\n | Hex\n | undefined;\n\n return {\n params: {\n data: params.data as Hex,\n gas,\n maxFeePerGas: params.maxFeePerGas as Hex,\n maxPriorityFeePerGas: params.maxPriorityFeePerGas as Hex,\n to: params.to as Hex,\n value: params.value as Hex,\n },\n };\n });\n\n const addTransactionBatchOptions = {\n from,\n ...(gasLimit7702 === undefined\n ? { disable7702: true }\n : {\n disable7702: false,\n disableHook: true,\n disableSequential: true,\n gasLimit7702,\n }),\n gasFeeToken,\n isInternal: true,\n networkClientId,\n origin: ORIGIN_METAMASK,\n overwriteUpgrade: true,\n requireApproval: false,\n transactions: batchTransactions,\n };\n\n log('Calling addTransactionBatch', addTransactionBatchOptions);\n\n await messenger.call(\n 'TransactionController:addTransactionBatch',\n addTransactionBatchOptions,\n );\n }\n } finally {\n end();\n }\n\n log('Server transactions added', transactionIds);\n\n await Promise.all(\n transactionIds.map((txId) => waitForTransactionConfirmed(txId, messenger)),\n );\n\n log('Server transactions confirmed', transactionIds);\n\n const lastId = transactionIds.at(-1);\n const sourceHash = lastId\n ? getTransaction(lastId, messenger)?.hash\n : undefined;\n\n if (sourceHash) {\n updateTransaction(\n {\n transactionId: transaction.id,\n messenger,\n note: 'Add source hash from server transaction submission',\n },\n (tx) => {\n tx.metamaskPay ??= {};\n tx.metamaskPay.sourceHash = sourceHash as Hex;\n },\n );\n }\n}\n\nfunction stepToParams(\n step: ServerQuoteStep,\n from: Hex,\n gasLimit?: number,\n clientMaxFeePerGas?: string,\n clientMaxPriorityFeePerGas?: string,\n): TransactionParams {\n let gas: Hex | undefined;\n if (gasLimit) {\n gas = toHex(gasLimit);\n } else if (step.gasLimit) {\n gas = toHex(step.gasLimit);\n }\n\n const resolvedMaxFeePerGas = step.maxFeePerGas ?? clientMaxFeePerGas;\n const resolvedMaxPriorityFeePerGas =\n step.maxPriorityFeePerGas ?? clientMaxPriorityFeePerGas;\n\n const params = {\n data: step.data,\n from,\n gas,\n maxFeePerGas: resolvedMaxFeePerGas\n ? toHex(resolvedMaxFeePerGas)\n : undefined,\n maxPriorityFeePerGas: resolvedMaxPriorityFeePerGas\n ? toHex(resolvedMaxPriorityFeePerGas)\n : undefined,\n to: step.to,\n value: toHex(step.value),\n };\n\n log('Step to params', {\n step: {\n gasLimit: step.gasLimit,\n maxFeePerGas: step.maxFeePerGas,\n maxPriorityFeePerGas: step.maxPriorityFeePerGas,\n value: step.value,\n },\n params: {\n gas: params.gas,\n maxFeePerGas: params.maxFeePerGas,\n maxPriorityFeePerGas: params.maxPriorityFeePerGas,\n value: params.value,\n },\n });\n\n return params;\n}\n\nasync function waitForServerCompletion(\n quote: ServerQuote,\n messenger: TransactionPayControllerMessenger,\n transactionId: string,\n): Promise<Hex | undefined> {\n const pollingInterval = getServerPollingInterval(messenger);\n const pollingTimeout = getServerPollingTimeout(messenger);\n const hasTimeout = pollingTimeout !== undefined && pollingTimeout > 0;\n\n log('Server polling config', { pollingInterval, pollingTimeout });\n\n const startTime = Date.now();\n\n let lastStatus: string | undefined;\n let sourceHashEmitted = false;\n\n while (true) {\n let statusResponse: ServerStatusResponse | undefined;\n\n try {\n const tx = getTransaction(transactionId, messenger);\n\n statusResponse = await getServerStatus(messenger, {\n provider: quote.provider,\n id: quote.id,\n hash: tx?.metamaskPay?.sourceHash ?? tx?.hash,\n });\n } catch (error) {\n log('Polling network error', error);\n }\n\n if (statusResponse) {\n lastStatus = statusResponse.status;\n log('Polled status', statusResponse.status, statusResponse);\n\n if (!sourceHashEmitted && statusResponse.sourceHash) {\n sourceHashEmitted = true;\n const { sourceHash } = statusResponse;\n\n updateTransaction(\n {\n transactionId,\n messenger,\n note: 'Add source hash from server status',\n },\n (tx) => {\n tx.metamaskPay ??= {};\n tx.metamaskPay.sourceHash = sourceHash;\n },\n );\n }\n\n if (statusResponse.status === ServerStatus.Confirmed) {\n return statusResponse.targetHash ?? '0x';\n }\n\n if (\n statusResponse.status === ServerStatus.Failed ||\n statusResponse.status === ServerStatus.Refunded\n ) {\n throw new Error(`Server intent ${statusResponse.status.toLowerCase()}`);\n }\n }\n\n if (hasTimeout && Date.now() - startTime >= pollingTimeout) {\n const statusDetail = lastStatus ? ` (last status: ${lastStatus})` : '';\n throw new Error(`Server polling timed out${statusDetail}`);\n }\n\n await new Promise((resolve) => setTimeout(resolve, pollingInterval));\n }\n}\n"]}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ServerStatus = exports.ServerTradeType = exports.ServerProviderName = void 0;
4
+ /** Provider names supported by the server intents API. */
5
+ var ServerProviderName;
6
+ (function (ServerProviderName) {
7
+ ServerProviderName["Relay"] = "relay";
8
+ ServerProviderName["Across"] = "across";
9
+ })(ServerProviderName || (exports.ServerProviderName = ServerProviderName = {}));
10
+ /** Trade type for server quote requests. */
11
+ var ServerTradeType;
12
+ (function (ServerTradeType) {
13
+ ServerTradeType["ExactInput"] = "EXACT_INPUT";
14
+ ServerTradeType["ExpectedOutput"] = "EXPECTED_OUTPUT";
15
+ })(ServerTradeType || (exports.ServerTradeType = ServerTradeType = {}));
16
+ /** Status values returned by GET /status. */
17
+ var ServerStatus;
18
+ (function (ServerStatus) {
19
+ ServerStatus["Pending"] = "PENDING";
20
+ ServerStatus["Submitted"] = "SUBMITTED";
21
+ ServerStatus["Confirmed"] = "CONFIRMED";
22
+ ServerStatus["Failed"] = "FAILED";
23
+ ServerStatus["Refunded"] = "REFUNDED";
24
+ ServerStatus["Unknown"] = "UNKNOWN";
25
+ })(ServerStatus || (exports.ServerStatus = ServerStatus = {}));
26
+ //# sourceMappingURL=types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.cjs","sourceRoot":"","sources":["../../../src/strategy/server/types.ts"],"names":[],"mappings":";;;AAEA,0DAA0D;AAC1D,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC5B,qCAAe,CAAA;IACf,uCAAiB,CAAA;AACnB,CAAC,EAHW,kBAAkB,kCAAlB,kBAAkB,QAG7B;AAED,4CAA4C;AAC5C,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,6CAA0B,CAAA;IAC1B,qDAAkC,CAAA;AACpC,CAAC,EAHW,eAAe,+BAAf,eAAe,QAG1B;AA+GD,6CAA6C;AAC7C,IAAY,YAOX;AAPD,WAAY,YAAY;IACtB,mCAAmB,CAAA;IACnB,uCAAuB,CAAA;IACvB,uCAAuB,CAAA;IACvB,iCAAiB,CAAA;IACjB,qCAAqB,CAAA;IACrB,mCAAmB,CAAA;AACrB,CAAC,EAPW,YAAY,4BAAZ,YAAY,QAOvB","sourcesContent":["import type { Hex } from '@metamask/utils';\n\n/** Provider names supported by the server intents API. */\nexport enum ServerProviderName {\n Relay = 'relay',\n Across = 'across',\n}\n\n/** Trade type for server quote requests. */\nexport enum ServerTradeType {\n ExactInput = 'EXACT_INPUT',\n ExpectedOutput = 'EXPECTED_OUTPUT',\n}\n\n/** Token amount with chain and token context. */\nexport type ServerQuoteAmount = {\n chainId: number;\n token: string;\n decimals: number;\n raw: string;\n formatted: string;\n};\n\n/** A single on-chain step returned by the server quote endpoint. */\nexport type ServerQuoteStep = {\n chainId: number;\n to: Hex;\n data: Hex;\n value: string;\n gasLimit?: string;\n maxFeePerGas?: string;\n maxPriorityFeePerGas?: string;\n};\n\n/** A call to include in the quote request (for delegation flows). */\nexport type ServerCall = {\n to: Hex;\n data: Hex;\n value: Hex;\n};\n\n/** EIP-7702 authorization entry for quote and submit requests. */\nexport type ServerAuthorization = {\n address: Hex;\n chainId: number;\n nonce: number;\n r: Hex;\n s: Hex;\n yParity: number;\n};\n\n/** Request body for POST /quote. */\nexport type ServerQuoteRequest = {\n source: { chainId: number; token: Hex };\n target: { chainId: number; token: Hex };\n amount: string;\n tradeType: ServerTradeType;\n sender: Hex;\n recipient: Hex;\n refundTo?: Hex;\n slippage?: number;\n providers?: ServerProviderName[];\n calls?: ServerCall[];\n authorizationList?: ServerAuthorization[];\n supportsGasless?: boolean;\n};\n\n/** Error detail from a rejected quote result. */\nexport type ServerQuoteError = {\n code?: string;\n message: string;\n};\n\n/** A successful quote payload nested inside a ServerQuoteResult. */\nexport type ServerQuotePayload = {\n id: string;\n input: ServerQuoteAmount;\n output: ServerQuoteAmount;\n fees: ServerQuoteFees;\n duration: number;\n steps: ServerQuoteStep[];\n gasless: boolean;\n};\n\n/** Fee breakdown from a quote. */\nexport type ServerQuoteFees = {\n metamask: string;\n provider: string;\n subsidized: boolean;\n};\n\n/** A single provider result within the quote response. */\nexport type ServerQuoteResult = {\n provider: ServerProviderName;\n quote?: ServerQuotePayload;\n error?: ServerQuoteError;\n};\n\n/** Response body from POST /quote. */\nexport type ServerQuoteResponse = {\n results: ServerQuoteResult[];\n};\n\nexport type ServerQuoteClient = {\n gasLimits: number[];\n is7702: boolean;\n maxFeePerGas: string | undefined;\n maxPriorityFeePerGas: string | undefined;\n};\n\n/** Normalized server quote stored in TransactionPayQuote.original. */\nexport type ServerQuote = {\n id: string;\n provider: ServerProviderName;\n input: ServerQuoteAmount;\n output: ServerQuoteAmount;\n fees: ServerQuoteFees;\n duration: number;\n client: ServerQuoteClient;\n steps: ServerQuoteStep[];\n gasless: boolean;\n};\n\n/** Status values returned by GET /status. */\nexport enum ServerStatus {\n Pending = 'PENDING',\n Submitted = 'SUBMITTED',\n Confirmed = 'CONFIRMED',\n Failed = 'FAILED',\n Refunded = 'REFUNDED',\n Unknown = 'UNKNOWN',\n}\n\n/** Response body from GET /status. */\nexport type ServerStatusResponse = {\n status: ServerStatus;\n sourceHash?: Hex;\n targetHash?: Hex;\n error?: string;\n};\n\n/** Request body for POST /submit. */\nexport type ServerSubmitRequest = {\n provider: ServerProviderName;\n id: string;\n chainId: number;\n to: Hex;\n data: Hex;\n value: string;\n authorizationList?: {\n chainId: number;\n address: Hex;\n nonce: number;\n yParity: number;\n r: Hex;\n s: Hex;\n }[];\n};\n\n/** Response body from POST /submit. */\nexport type ServerSubmitResponse = {\n success: boolean;\n error?: string;\n};\n"]}
@@ -0,0 +1,153 @@
1
+ import type { Hex } from "@metamask/utils";
2
+ /** Provider names supported by the server intents API. */
3
+ export declare enum ServerProviderName {
4
+ Relay = "relay",
5
+ Across = "across"
6
+ }
7
+ /** Trade type for server quote requests. */
8
+ export declare enum ServerTradeType {
9
+ ExactInput = "EXACT_INPUT",
10
+ ExpectedOutput = "EXPECTED_OUTPUT"
11
+ }
12
+ /** Token amount with chain and token context. */
13
+ export type ServerQuoteAmount = {
14
+ chainId: number;
15
+ token: string;
16
+ decimals: number;
17
+ raw: string;
18
+ formatted: string;
19
+ };
20
+ /** A single on-chain step returned by the server quote endpoint. */
21
+ export type ServerQuoteStep = {
22
+ chainId: number;
23
+ to: Hex;
24
+ data: Hex;
25
+ value: string;
26
+ gasLimit?: string;
27
+ maxFeePerGas?: string;
28
+ maxPriorityFeePerGas?: string;
29
+ };
30
+ /** A call to include in the quote request (for delegation flows). */
31
+ export type ServerCall = {
32
+ to: Hex;
33
+ data: Hex;
34
+ value: Hex;
35
+ };
36
+ /** EIP-7702 authorization entry for quote and submit requests. */
37
+ export type ServerAuthorization = {
38
+ address: Hex;
39
+ chainId: number;
40
+ nonce: number;
41
+ r: Hex;
42
+ s: Hex;
43
+ yParity: number;
44
+ };
45
+ /** Request body for POST /quote. */
46
+ export type ServerQuoteRequest = {
47
+ source: {
48
+ chainId: number;
49
+ token: Hex;
50
+ };
51
+ target: {
52
+ chainId: number;
53
+ token: Hex;
54
+ };
55
+ amount: string;
56
+ tradeType: ServerTradeType;
57
+ sender: Hex;
58
+ recipient: Hex;
59
+ refundTo?: Hex;
60
+ slippage?: number;
61
+ providers?: ServerProviderName[];
62
+ calls?: ServerCall[];
63
+ authorizationList?: ServerAuthorization[];
64
+ supportsGasless?: boolean;
65
+ };
66
+ /** Error detail from a rejected quote result. */
67
+ export type ServerQuoteError = {
68
+ code?: string;
69
+ message: string;
70
+ };
71
+ /** A successful quote payload nested inside a ServerQuoteResult. */
72
+ export type ServerQuotePayload = {
73
+ id: string;
74
+ input: ServerQuoteAmount;
75
+ output: ServerQuoteAmount;
76
+ fees: ServerQuoteFees;
77
+ duration: number;
78
+ steps: ServerQuoteStep[];
79
+ gasless: boolean;
80
+ };
81
+ /** Fee breakdown from a quote. */
82
+ export type ServerQuoteFees = {
83
+ metamask: string;
84
+ provider: string;
85
+ subsidized: boolean;
86
+ };
87
+ /** A single provider result within the quote response. */
88
+ export type ServerQuoteResult = {
89
+ provider: ServerProviderName;
90
+ quote?: ServerQuotePayload;
91
+ error?: ServerQuoteError;
92
+ };
93
+ /** Response body from POST /quote. */
94
+ export type ServerQuoteResponse = {
95
+ results: ServerQuoteResult[];
96
+ };
97
+ export type ServerQuoteClient = {
98
+ gasLimits: number[];
99
+ is7702: boolean;
100
+ maxFeePerGas: string | undefined;
101
+ maxPriorityFeePerGas: string | undefined;
102
+ };
103
+ /** Normalized server quote stored in TransactionPayQuote.original. */
104
+ export type ServerQuote = {
105
+ id: string;
106
+ provider: ServerProviderName;
107
+ input: ServerQuoteAmount;
108
+ output: ServerQuoteAmount;
109
+ fees: ServerQuoteFees;
110
+ duration: number;
111
+ client: ServerQuoteClient;
112
+ steps: ServerQuoteStep[];
113
+ gasless: boolean;
114
+ };
115
+ /** Status values returned by GET /status. */
116
+ export declare enum ServerStatus {
117
+ Pending = "PENDING",
118
+ Submitted = "SUBMITTED",
119
+ Confirmed = "CONFIRMED",
120
+ Failed = "FAILED",
121
+ Refunded = "REFUNDED",
122
+ Unknown = "UNKNOWN"
123
+ }
124
+ /** Response body from GET /status. */
125
+ export type ServerStatusResponse = {
126
+ status: ServerStatus;
127
+ sourceHash?: Hex;
128
+ targetHash?: Hex;
129
+ error?: string;
130
+ };
131
+ /** Request body for POST /submit. */
132
+ export type ServerSubmitRequest = {
133
+ provider: ServerProviderName;
134
+ id: string;
135
+ chainId: number;
136
+ to: Hex;
137
+ data: Hex;
138
+ value: string;
139
+ authorizationList?: {
140
+ chainId: number;
141
+ address: Hex;
142
+ nonce: number;
143
+ yParity: number;
144
+ r: Hex;
145
+ s: Hex;
146
+ }[];
147
+ };
148
+ /** Response body from POST /submit. */
149
+ export type ServerSubmitResponse = {
150
+ success: boolean;
151
+ error?: string;
152
+ };
153
+ //# sourceMappingURL=types.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../../../src/strategy/server/types.ts"],"names":[],"mappings":"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"}