@metamask/transaction-pay-controller 1.0.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.
- package/CHANGELOG.md +17 -0
- package/LICENSE +20 -0
- package/README.md +19 -0
- package/dist/TransactionPayController.cjs +96 -0
- package/dist/TransactionPayController.cjs.map +1 -0
- package/dist/TransactionPayController.d.cts +9 -0
- package/dist/TransactionPayController.d.cts.map +1 -0
- package/dist/TransactionPayController.d.mts +9 -0
- package/dist/TransactionPayController.d.mts.map +1 -0
- package/dist/TransactionPayController.mjs +93 -0
- package/dist/TransactionPayController.mjs.map +1 -0
- package/dist/actions/update-payment-token.cjs +79 -0
- package/dist/actions/update-payment-token.cjs.map +1 -0
- package/dist/actions/update-payment-token.d.cts +14 -0
- package/dist/actions/update-payment-token.d.cts.map +1 -0
- package/dist/actions/update-payment-token.d.mts +14 -0
- package/dist/actions/update-payment-token.d.mts.map +1 -0
- package/dist/actions/update-payment-token.mjs +75 -0
- package/dist/actions/update-payment-token.mjs.map +1 -0
- package/dist/constants.cjs +12 -0
- package/dist/constants.cjs.map +1 -0
- package/dist/constants.d.cts +8 -0
- package/dist/constants.d.cts.map +1 -0
- package/dist/constants.d.mts +8 -0
- package/dist/constants.d.mts.map +1 -0
- package/dist/constants.mjs +9 -0
- package/dist/constants.mjs.map +1 -0
- package/dist/helpers/TransactionPayPublishHook.cjs +61 -0
- package/dist/helpers/TransactionPayPublishHook.cjs.map +1 -0
- package/dist/helpers/TransactionPayPublishHook.d.cts +12 -0
- package/dist/helpers/TransactionPayPublishHook.d.cts.map +1 -0
- package/dist/helpers/TransactionPayPublishHook.d.mts +12 -0
- package/dist/helpers/TransactionPayPublishHook.d.mts.map +1 -0
- package/dist/helpers/TransactionPayPublishHook.mjs +57 -0
- package/dist/helpers/TransactionPayPublishHook.mjs.map +1 -0
- package/dist/index.cjs +10 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +6 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +6 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +4 -0
- package/dist/index.mjs.map +1 -0
- package/dist/logger.cjs +8 -0
- package/dist/logger.cjs.map +1 -0
- package/dist/logger.d.cts +5 -0
- package/dist/logger.d.cts.map +1 -0
- package/dist/logger.d.mts +5 -0
- package/dist/logger.d.mts.map +1 -0
- package/dist/logger.mjs +5 -0
- package/dist/logger.mjs.map +1 -0
- package/dist/strategy/bridge/BridgeStrategy.cjs +30 -0
- package/dist/strategy/bridge/BridgeStrategy.cjs.map +1 -0
- package/dist/strategy/bridge/BridgeStrategy.d.cts +11 -0
- package/dist/strategy/bridge/BridgeStrategy.d.cts.map +1 -0
- package/dist/strategy/bridge/BridgeStrategy.d.mts +11 -0
- package/dist/strategy/bridge/BridgeStrategy.d.mts.map +1 -0
- package/dist/strategy/bridge/BridgeStrategy.mjs +26 -0
- package/dist/strategy/bridge/BridgeStrategy.mjs.map +1 -0
- package/dist/strategy/bridge/bridge-quotes.cjs +386 -0
- package/dist/strategy/bridge/bridge-quotes.cjs.map +1 -0
- package/dist/strategy/bridge/bridge-quotes.d.cts +35 -0
- package/dist/strategy/bridge/bridge-quotes.d.cts.map +1 -0
- package/dist/strategy/bridge/bridge-quotes.d.mts +35 -0
- package/dist/strategy/bridge/bridge-quotes.d.mts.map +1 -0
- package/dist/strategy/bridge/bridge-quotes.mjs +380 -0
- package/dist/strategy/bridge/bridge-quotes.mjs.map +1 -0
- package/dist/strategy/bridge/bridge-submit.cjs +155 -0
- package/dist/strategy/bridge/bridge-submit.cjs.map +1 -0
- package/dist/strategy/bridge/bridge-submit.d.cts +19 -0
- package/dist/strategy/bridge/bridge-submit.d.cts.map +1 -0
- package/dist/strategy/bridge/bridge-submit.d.mts +19 -0
- package/dist/strategy/bridge/bridge-submit.d.mts.map +1 -0
- package/dist/strategy/bridge/bridge-submit.mjs +152 -0
- package/dist/strategy/bridge/bridge-submit.mjs.map +1 -0
- package/dist/strategy/bridge/types.cjs +3 -0
- package/dist/strategy/bridge/types.cjs.map +1 -0
- package/dist/strategy/bridge/types.d.cts +27 -0
- package/dist/strategy/bridge/types.d.cts.map +1 -0
- package/dist/strategy/bridge/types.d.mts +27 -0
- package/dist/strategy/bridge/types.d.mts.map +1 -0
- package/dist/strategy/bridge/types.mjs +2 -0
- package/dist/strategy/bridge/types.mjs.map +1 -0
- package/dist/strategy/relay/RelayStrategy.cjs +15 -0
- package/dist/strategy/relay/RelayStrategy.cjs.map +1 -0
- package/dist/strategy/relay/RelayStrategy.d.cts +9 -0
- package/dist/strategy/relay/RelayStrategy.d.cts.map +1 -0
- package/dist/strategy/relay/RelayStrategy.d.mts +9 -0
- package/dist/strategy/relay/RelayStrategy.d.mts.map +1 -0
- package/dist/strategy/relay/RelayStrategy.mjs +11 -0
- package/dist/strategy/relay/RelayStrategy.mjs.map +1 -0
- package/dist/strategy/relay/constants.cjs +9 -0
- package/dist/strategy/relay/constants.cjs.map +1 -0
- package/dist/strategy/relay/constants.d.cts +6 -0
- package/dist/strategy/relay/constants.d.cts.map +1 -0
- package/dist/strategy/relay/constants.d.mts +6 -0
- package/dist/strategy/relay/constants.d.mts.map +1 -0
- package/dist/strategy/relay/constants.mjs +6 -0
- package/dist/strategy/relay/constants.mjs.map +1 -0
- package/dist/strategy/relay/relay-quotes.cjs +210 -0
- package/dist/strategy/relay/relay-quotes.cjs.map +1 -0
- package/dist/strategy/relay/relay-quotes.d.cts +10 -0
- package/dist/strategy/relay/relay-quotes.d.cts.map +1 -0
- package/dist/strategy/relay/relay-quotes.d.mts +10 -0
- package/dist/strategy/relay/relay-quotes.d.mts.map +1 -0
- package/dist/strategy/relay/relay-quotes.mjs +206 -0
- package/dist/strategy/relay/relay-quotes.mjs.map +1 -0
- package/dist/strategy/relay/relay-submit.cjs +137 -0
- package/dist/strategy/relay/relay-submit.cjs.map +1 -0
- package/dist/strategy/relay/relay-submit.d.cts +13 -0
- package/dist/strategy/relay/relay-submit.d.cts.map +1 -0
- package/dist/strategy/relay/relay-submit.d.mts +13 -0
- package/dist/strategy/relay/relay-submit.d.mts.map +1 -0
- package/dist/strategy/relay/relay-submit.mjs +133 -0
- package/dist/strategy/relay/relay-submit.mjs.map +1 -0
- package/dist/strategy/relay/types.cjs +3 -0
- package/dist/strategy/relay/types.cjs.map +1 -0
- package/dist/strategy/relay/types.d.cts +52 -0
- package/dist/strategy/relay/types.d.cts.map +1 -0
- package/dist/strategy/relay/types.d.mts +52 -0
- package/dist/strategy/relay/types.d.mts.map +1 -0
- package/dist/strategy/relay/types.mjs +2 -0
- package/dist/strategy/relay/types.mjs.map +1 -0
- package/dist/strategy/test/TestStrategy.cjs +48 -0
- package/dist/strategy/test/TestStrategy.cjs.map +1 -0
- package/dist/strategy/test/TestStrategy.d.cts +9 -0
- package/dist/strategy/test/TestStrategy.d.cts.map +1 -0
- package/dist/strategy/test/TestStrategy.d.mts +9 -0
- package/dist/strategy/test/TestStrategy.d.mts.map +1 -0
- package/dist/strategy/test/TestStrategy.mjs +44 -0
- package/dist/strategy/test/TestStrategy.mjs.map +1 -0
- package/dist/tests/messenger-mock.cjs +76 -0
- package/dist/tests/messenger-mock.cjs.map +1 -0
- package/dist/tests/messenger-mock.d.cts +215 -0
- package/dist/tests/messenger-mock.d.cts.map +1 -0
- package/dist/tests/messenger-mock.d.mts +215 -0
- package/dist/tests/messenger-mock.d.mts.map +1 -0
- package/dist/tests/messenger-mock.mjs +72 -0
- package/dist/tests/messenger-mock.mjs.map +1 -0
- package/dist/types.cjs +3 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +264 -0
- package/dist/types.d.cts.map +1 -0
- package/dist/types.d.mts +264 -0
- package/dist/types.d.mts.map +1 -0
- package/dist/types.mjs +2 -0
- package/dist/types.mjs.map +1 -0
- package/dist/utils/gas.cjs +87 -0
- package/dist/utils/gas.cjs.map +1 -0
- package/dist/utils/gas.d.cts +33 -0
- package/dist/utils/gas.d.cts.map +1 -0
- package/dist/utils/gas.d.mts +33 -0
- package/dist/utils/gas.d.mts.map +1 -0
- package/dist/utils/gas.mjs +82 -0
- package/dist/utils/gas.mjs.map +1 -0
- package/dist/utils/quotes.cjs +168 -0
- package/dist/utils/quotes.cjs.map +1 -0
- package/dist/utils/quotes.d.cts +21 -0
- package/dist/utils/quotes.d.cts.map +1 -0
- package/dist/utils/quotes.d.mts +21 -0
- package/dist/utils/quotes.d.mts.map +1 -0
- package/dist/utils/quotes.mjs +163 -0
- package/dist/utils/quotes.mjs.map +1 -0
- package/dist/utils/required-tokens.cjs +179 -0
- package/dist/utils/required-tokens.cjs.map +1 -0
- package/dist/utils/required-tokens.d.cts +11 -0
- package/dist/utils/required-tokens.d.cts.map +1 -0
- package/dist/utils/required-tokens.d.mts +11 -0
- package/dist/utils/required-tokens.d.mts.map +1 -0
- package/dist/utils/required-tokens.mjs +175 -0
- package/dist/utils/required-tokens.mjs.map +1 -0
- package/dist/utils/source-amounts.cjs +72 -0
- package/dist/utils/source-amounts.cjs.map +1 -0
- package/dist/utils/source-amounts.d.cts +11 -0
- package/dist/utils/source-amounts.d.cts.map +1 -0
- package/dist/utils/source-amounts.d.mts +11 -0
- package/dist/utils/source-amounts.d.mts.map +1 -0
- package/dist/utils/source-amounts.mjs +68 -0
- package/dist/utils/source-amounts.mjs.map +1 -0
- package/dist/utils/strategy.cjs +39 -0
- package/dist/utils/strategy.cjs.map +1 -0
- package/dist/utils/strategy.d.cts +19 -0
- package/dist/utils/strategy.d.cts.map +1 -0
- package/dist/utils/strategy.d.mts +19 -0
- package/dist/utils/strategy.d.mts.map +1 -0
- package/dist/utils/strategy.mjs +34 -0
- package/dist/utils/strategy.mjs.map +1 -0
- package/dist/utils/token.cjs +161 -0
- package/dist/utils/token.cjs.map +1 -0
- package/dist/utils/token.d.cts +53 -0
- package/dist/utils/token.d.cts.map +1 -0
- package/dist/utils/token.d.mts +53 -0
- package/dist/utils/token.d.mts.map +1 -0
- package/dist/utils/token.mjs +154 -0
- package/dist/utils/token.mjs.map +1 -0
- package/dist/utils/totals.cjs +69 -0
- package/dist/utils/totals.cjs.map +1 -0
- package/dist/utils/totals.d.cts +11 -0
- package/dist/utils/totals.d.cts.map +1 -0
- package/dist/utils/totals.d.mts +11 -0
- package/dist/utils/totals.d.mts.map +1 -0
- package/dist/utils/totals.mjs +65 -0
- package/dist/utils/totals.mjs.map +1 -0
- package/dist/utils/transaction.cjs +132 -0
- package/dist/utils/transaction.cjs.map +1 -0
- package/dist/utils/transaction.d.cts +42 -0
- package/dist/utils/transaction.d.cts.map +1 -0
- package/dist/utils/transaction.d.mts +42 -0
- package/dist/utils/transaction.d.mts.map +1 -0
- package/dist/utils/transaction.mjs +126 -0
- package/dist/utils/transaction.mjs.map +1 -0
- package/package.json +97 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay-submit.mjs","sourceRoot":"","sources":["../../../src/strategy/relay/relay-submit.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ORIGIN_METAMASK,\n successfulFetch,\n toHex,\n} from '@metamask/controller-utils';\nimport type { TransactionParams } from '@metamask/transaction-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\n\nimport { RELAY_URL_BASE } from './constants';\nimport type { RelayQuote, RelayStatus } from './types';\nimport { projectLogger } from '../../logger';\nimport type {\n PayStrategyExecuteRequest,\n TransactionPayControllerMessenger,\n} from '../../types';\nimport {\n updateTransaction,\n waitForTransactionConfirmed,\n} from '../../utils/transaction';\n\nconst log = createModuleLogger(projectLogger, 'relay-strategy');\n\n/**\n * Submits Relay quotes.\n *\n * @param request - Request object.\n * @returns An object containing the transaction hash if available.\n */\nexport async function submitRelayQuotes(\n request: PayStrategyExecuteRequest<RelayQuote>,\n): Promise<{ transactionHash?: Hex }> {\n log('Executing 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 executeSingleQuote(\n quote.original,\n messenger,\n transaction,\n ));\n }\n\n const isSkipTransaction = quotes.some((q) => q.original.skipTransaction);\n\n if (isSkipTransaction) {\n log('Skipping original transaction', transactionHash);\n return { transactionHash };\n }\n\n return { transactionHash: undefined };\n}\n\n/**\n * Executes a single Relay quote.\n *\n * @param quote - Relay quote to execute.\n * @param messenger - Controller messenger.\n * @param transaction - Original transaction meta.\n * @returns An object containing the transaction hash if available.\n */\nasync function executeSingleQuote(\n quote: RelayQuote,\n messenger: TransactionPayControllerMessenger,\n transaction: TransactionMeta,\n) {\n log('Executing single quote', quote);\n\n const { kind } = quote.steps[0];\n\n if (kind !== 'transaction') {\n throw new Error(`Unsupported step kind: ${kind as string}`);\n }\n\n const transactionParams = quote.steps[0].items[0].data;\n const chainId = toHex(transactionParams.chainId);\n const normalizedParams = normalizeParams(transactionParams);\n\n const networkClientId = messenger.call(\n 'NetworkController:findNetworkClientIdByChainId',\n chainId,\n );\n\n log('Adding transaction', {\n chainId,\n normalizedParams,\n networkClientId,\n });\n\n if (quote.skipTransaction) {\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\n const result = await messenger.call(\n 'TransactionController:addTransaction',\n normalizedParams,\n {\n networkClientId,\n origin: ORIGIN_METAMASK,\n requireApproval: false,\n },\n );\n\n const { transactionMeta, result: transactionHashPromise } = result;\n\n updateTransaction(\n {\n transactionId: transaction.id,\n messenger,\n note: 'Add required transaction ID',\n },\n (tx) => {\n if (!tx.requiredTransactionIds) {\n tx.requiredTransactionIds = [];\n }\n\n tx.requiredTransactionIds.push(transactionMeta.id);\n },\n );\n\n log('Added transaction', transactionMeta);\n\n const transactionHash = (await transactionHashPromise) as Hex;\n\n log('Submitted transaction', transactionHash);\n\n await waitForTransactionConfirmed(transactionMeta.id, messenger);\n\n log('Transaction confirmed', transactionMeta.id);\n\n await waitForRelayCompletion(quote);\n\n log('Relay request completed');\n\n if (quote.skipTransaction) {\n log('Updating intent complete flag on transaction', transaction.id);\n\n updateTransaction(\n {\n transactionId: transaction.id,\n messenger,\n note: 'Intent complete after Relay completion',\n },\n (tx) => {\n tx.isIntentComplete = true;\n },\n );\n }\n\n return { transactionHash };\n}\n\n/**\n * Wait for a Relay request to complete.\n *\n * @param quote - Relay quote associated with the request.\n * @returns A promise that resolves when the Relay request is complete.\n */\nasync function waitForRelayCompletion(quote: RelayQuote) {\n const { endpoint, method } = quote.steps[0].items[0].check;\n const url = `${RELAY_URL_BASE}${endpoint}`;\n\n while (true) {\n const response = await successfulFetch(url, { method });\n const status = (await response.json()) as RelayStatus;\n\n log('Polled status', status.status, status);\n\n if (status.status === 'success') {\n return;\n }\n\n if (['failure', 'refund'].includes(status.status)) {\n throw new Error(`Relay request failed with status: ${status.status}`);\n }\n\n await new Promise((resolve) => setTimeout(resolve, 1000));\n }\n}\n\n/**\n * Normalize the parameters from a relay quote step to match TransactionParams.\n *\n * @param params - Parameters from a relay quote step.\n * @returns Normalized transaction parameters.\n */\nfunction normalizeParams(\n params: RelayQuote['steps'][0]['items'][0]['data'],\n): TransactionParams {\n return {\n data: params.data,\n from: params.from,\n gas: toHex(params.gas),\n maxFeePerGas: toHex(params.maxFeePerGas),\n maxPriorityFeePerGas: toHex(params.maxPriorityFeePerGas),\n to: params.to,\n value: toHex(params.value ?? '0'),\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.cjs","sourceRoot":"","sources":["../../../src/strategy/relay/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Hex } from '@metamask/utils';\n\nexport type RelayQuote = {\n details: {\n currencyIn: {\n amountUsd: string;\n };\n currencyOut: {\n amountFormatted: string;\n amountUsd: string;\n currency: {\n decimals: number;\n };\n minimumAmount: string;\n };\n timeEstimate: number;\n };\n fees: {\n gas: {\n amountUsd: string;\n };\n };\n steps: {\n items: {\n check: {\n endpoint: string;\n method: 'GET' | 'POST';\n };\n data: {\n chainId: number;\n data: Hex;\n from: Hex;\n gas: string;\n maxFeePerGas: string;\n maxPriorityFeePerGas: string;\n to: Hex;\n value: string;\n };\n status: 'complete' | 'incomplete';\n }[];\n kind: 'transaction';\n }[];\n skipTransaction?: boolean;\n};\n\nexport type RelayStatus = {\n status:\n | 'refund'\n | 'waiting'\n | 'failure'\n | 'pending'\n | 'submitted'\n | 'success';\n inTxHashes: string[];\n txHashes: string[];\n updatedAt: number;\n originChainId: number;\n destinationChainId: number;\n};\n"]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Hex } from "@metamask/utils";
|
|
2
|
+
export type RelayQuote = {
|
|
3
|
+
details: {
|
|
4
|
+
currencyIn: {
|
|
5
|
+
amountUsd: string;
|
|
6
|
+
};
|
|
7
|
+
currencyOut: {
|
|
8
|
+
amountFormatted: string;
|
|
9
|
+
amountUsd: string;
|
|
10
|
+
currency: {
|
|
11
|
+
decimals: number;
|
|
12
|
+
};
|
|
13
|
+
minimumAmount: string;
|
|
14
|
+
};
|
|
15
|
+
timeEstimate: number;
|
|
16
|
+
};
|
|
17
|
+
fees: {
|
|
18
|
+
gas: {
|
|
19
|
+
amountUsd: string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
steps: {
|
|
23
|
+
items: {
|
|
24
|
+
check: {
|
|
25
|
+
endpoint: string;
|
|
26
|
+
method: 'GET' | 'POST';
|
|
27
|
+
};
|
|
28
|
+
data: {
|
|
29
|
+
chainId: number;
|
|
30
|
+
data: Hex;
|
|
31
|
+
from: Hex;
|
|
32
|
+
gas: string;
|
|
33
|
+
maxFeePerGas: string;
|
|
34
|
+
maxPriorityFeePerGas: string;
|
|
35
|
+
to: Hex;
|
|
36
|
+
value: string;
|
|
37
|
+
};
|
|
38
|
+
status: 'complete' | 'incomplete';
|
|
39
|
+
}[];
|
|
40
|
+
kind: 'transaction';
|
|
41
|
+
}[];
|
|
42
|
+
skipTransaction?: boolean;
|
|
43
|
+
};
|
|
44
|
+
export type RelayStatus = {
|
|
45
|
+
status: 'refund' | 'waiting' | 'failure' | 'pending' | 'submitted' | 'success';
|
|
46
|
+
inTxHashes: string[];
|
|
47
|
+
txHashes: string[];
|
|
48
|
+
updatedAt: number;
|
|
49
|
+
originChainId: number;
|
|
50
|
+
destinationChainId: number;
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=types.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../../../src/strategy/relay/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAE3C,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE;QACP,UAAU,EAAE;YACV,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,WAAW,EAAE;YACX,eAAe,EAAE,MAAM,CAAC;YACxB,SAAS,EAAE,MAAM,CAAC;YAClB,QAAQ,EAAE;gBACR,QAAQ,EAAE,MAAM,CAAC;aAClB,CAAC;YACF,aAAa,EAAE,MAAM,CAAC;SACvB,CAAC;QACF,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,IAAI,EAAE;QACJ,GAAG,EAAE;YACH,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC;IACF,KAAK,EAAE;QACL,KAAK,EAAE;YACL,KAAK,EAAE;gBACL,QAAQ,EAAE,MAAM,CAAC;gBACjB,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;aACxB,CAAC;YACF,IAAI,EAAE;gBACJ,OAAO,EAAE,MAAM,CAAC;gBAChB,IAAI,EAAE,GAAG,CAAC;gBACV,IAAI,EAAE,GAAG,CAAC;gBACV,GAAG,EAAE,MAAM,CAAC;gBACZ,YAAY,EAAE,MAAM,CAAC;gBACrB,oBAAoB,EAAE,MAAM,CAAC;gBAC7B,EAAE,EAAE,GAAG,CAAC;gBACR,KAAK,EAAE,MAAM,CAAC;aACf,CAAC;YACF,MAAM,EAAE,UAAU,GAAG,YAAY,CAAC;SACnC,EAAE,CAAC;QACJ,IAAI,EAAE,aAAa,CAAC;KACrB,EAAE,CAAC;IACJ,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EACF,QAAQ,GACR,SAAS,GACT,SAAS,GACT,SAAS,GACT,WAAW,GACX,SAAS,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Hex } from "@metamask/utils";
|
|
2
|
+
export type RelayQuote = {
|
|
3
|
+
details: {
|
|
4
|
+
currencyIn: {
|
|
5
|
+
amountUsd: string;
|
|
6
|
+
};
|
|
7
|
+
currencyOut: {
|
|
8
|
+
amountFormatted: string;
|
|
9
|
+
amountUsd: string;
|
|
10
|
+
currency: {
|
|
11
|
+
decimals: number;
|
|
12
|
+
};
|
|
13
|
+
minimumAmount: string;
|
|
14
|
+
};
|
|
15
|
+
timeEstimate: number;
|
|
16
|
+
};
|
|
17
|
+
fees: {
|
|
18
|
+
gas: {
|
|
19
|
+
amountUsd: string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
steps: {
|
|
23
|
+
items: {
|
|
24
|
+
check: {
|
|
25
|
+
endpoint: string;
|
|
26
|
+
method: 'GET' | 'POST';
|
|
27
|
+
};
|
|
28
|
+
data: {
|
|
29
|
+
chainId: number;
|
|
30
|
+
data: Hex;
|
|
31
|
+
from: Hex;
|
|
32
|
+
gas: string;
|
|
33
|
+
maxFeePerGas: string;
|
|
34
|
+
maxPriorityFeePerGas: string;
|
|
35
|
+
to: Hex;
|
|
36
|
+
value: string;
|
|
37
|
+
};
|
|
38
|
+
status: 'complete' | 'incomplete';
|
|
39
|
+
}[];
|
|
40
|
+
kind: 'transaction';
|
|
41
|
+
}[];
|
|
42
|
+
skipTransaction?: boolean;
|
|
43
|
+
};
|
|
44
|
+
export type RelayStatus = {
|
|
45
|
+
status: 'refund' | 'waiting' | 'failure' | 'pending' | 'submitted' | 'success';
|
|
46
|
+
inTxHashes: string[];
|
|
47
|
+
txHashes: string[];
|
|
48
|
+
updatedAt: number;
|
|
49
|
+
originChainId: number;
|
|
50
|
+
destinationChainId: number;
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=types.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.mts","sourceRoot":"","sources":["../../../src/strategy/relay/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAE3C,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE;QACP,UAAU,EAAE;YACV,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,WAAW,EAAE;YACX,eAAe,EAAE,MAAM,CAAC;YACxB,SAAS,EAAE,MAAM,CAAC;YAClB,QAAQ,EAAE;gBACR,QAAQ,EAAE,MAAM,CAAC;aAClB,CAAC;YACF,aAAa,EAAE,MAAM,CAAC;SACvB,CAAC;QACF,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,IAAI,EAAE;QACJ,GAAG,EAAE;YACH,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC;IACF,KAAK,EAAE;QACL,KAAK,EAAE;YACL,KAAK,EAAE;gBACL,QAAQ,EAAE,MAAM,CAAC;gBACjB,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;aACxB,CAAC;YACF,IAAI,EAAE;gBACJ,OAAO,EAAE,MAAM,CAAC;gBAChB,IAAI,EAAE,GAAG,CAAC;gBACV,IAAI,EAAE,GAAG,CAAC;gBACV,GAAG,EAAE,MAAM,CAAC;gBACZ,YAAY,EAAE,MAAM,CAAC;gBACrB,oBAAoB,EAAE,MAAM,CAAC;gBAC7B,EAAE,EAAE,GAAG,CAAC;gBACR,KAAK,EAAE,MAAM,CAAC;aACf,CAAC;YACF,MAAM,EAAE,UAAU,GAAG,YAAY,CAAC;SACnC,EAAE,CAAC;QACJ,IAAI,EAAE,aAAa,CAAC;KACrB,EAAE,CAAC;IACJ,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EACF,QAAQ,GACR,SAAS,GACT,SAAS,GACT,SAAS,GACT,WAAW,GACX,SAAS,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.mjs","sourceRoot":"","sources":["../../../src/strategy/relay/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Hex } from '@metamask/utils';\n\nexport type RelayQuote = {\n details: {\n currencyIn: {\n amountUsd: string;\n };\n currencyOut: {\n amountFormatted: string;\n amountUsd: string;\n currency: {\n decimals: number;\n };\n minimumAmount: string;\n };\n timeEstimate: number;\n };\n fees: {\n gas: {\n amountUsd: string;\n };\n };\n steps: {\n items: {\n check: {\n endpoint: string;\n method: 'GET' | 'POST';\n };\n data: {\n chainId: number;\n data: Hex;\n from: Hex;\n gas: string;\n maxFeePerGas: string;\n maxPriorityFeePerGas: string;\n to: Hex;\n value: string;\n };\n status: 'complete' | 'incomplete';\n }[];\n kind: 'transaction';\n }[];\n skipTransaction?: boolean;\n};\n\nexport type RelayStatus = {\n status:\n | 'refund'\n | 'waiting'\n | 'failure'\n | 'pending'\n | 'submitted'\n | 'success';\n inTxHashes: string[];\n txHashes: string[];\n updatedAt: number;\n originChainId: number;\n destinationChainId: number;\n};\n"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
+
};
|
|
7
|
+
var _TestStrategy_instances, _TestStrategy_timeout;
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.TestStrategy = void 0;
|
|
10
|
+
const utils_1 = require("@metamask/utils");
|
|
11
|
+
const __1 = require("../../index.cjs");
|
|
12
|
+
const logger_1 = require("../../logger.cjs");
|
|
13
|
+
const log = (0, utils_1.createModuleLogger)(logger_1.projectLogger, 'test-strategy');
|
|
14
|
+
class TestStrategy {
|
|
15
|
+
constructor() {
|
|
16
|
+
_TestStrategy_instances.add(this);
|
|
17
|
+
}
|
|
18
|
+
async getQuotes(request) {
|
|
19
|
+
const { requests } = request;
|
|
20
|
+
log('Getting quotes', requests);
|
|
21
|
+
await __classPrivateFieldGet(this, _TestStrategy_instances, "m", _TestStrategy_timeout).call(this, 5000);
|
|
22
|
+
return [
|
|
23
|
+
{
|
|
24
|
+
dust: { fiat: '0.12', usd: '0.34' },
|
|
25
|
+
estimatedDuration: 5,
|
|
26
|
+
fees: {
|
|
27
|
+
provider: { fiat: '1.23', usd: '1.23' },
|
|
28
|
+
sourceNetwork: { fiat: '2.34', usd: '2.34' },
|
|
29
|
+
targetNetwork: { fiat: '3.45', usd: '3.45' },
|
|
30
|
+
},
|
|
31
|
+
original: undefined,
|
|
32
|
+
request: requests[0],
|
|
33
|
+
strategy: __1.TransactionPayStrategy.Test,
|
|
34
|
+
},
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
async execute(request) {
|
|
38
|
+
const { quotes } = request;
|
|
39
|
+
log('Executing', quotes);
|
|
40
|
+
await __classPrivateFieldGet(this, _TestStrategy_instances, "m", _TestStrategy_timeout).call(this, 5000);
|
|
41
|
+
return { transactionHash: undefined };
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.TestStrategy = TestStrategy;
|
|
45
|
+
_TestStrategy_instances = new WeakSet(), _TestStrategy_timeout = function _TestStrategy_timeout(ms) {
|
|
46
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=TestStrategy.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestStrategy.cjs","sourceRoot":"","sources":["../../../src/strategy/test/TestStrategy.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAqD;AAErD,uCAA+C;AAC/C,6CAA6C;AAQ7C,MAAM,GAAG,GAAG,IAAA,0BAAkB,EAAC,sBAAa,EAAE,eAAe,CAAC,CAAC;AAE/D,MAAa,YAAY;IAAzB;;IAuCA,CAAC;IAtCC,KAAK,CAAC,SAAS,CACb,OAAoC;QAEpC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QAE7B,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAEhC,MAAM,uBAAA,IAAI,sDAAS,MAAb,IAAI,EAAU,IAAI,CAAC,CAAC;QAE1B,OAAO;YACL;gBACE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;gBACnC,iBAAiB,EAAE,CAAC;gBACpB,IAAI,EAAE;oBACJ,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;oBACvC,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;oBAC5C,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;iBAC7C;gBACD,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACpB,QAAQ,EAAE,0BAAsB,CAAC,IAAI;aACtC;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAwC;QACpD,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAE3B,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEzB,MAAM,uBAAA,IAAI,sDAAS,MAAb,IAAI,EAAU,IAAI,CAAC,CAAC;QAE1B,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC;IACxC,CAAC;CAKF;AAvCD,oCAuCC;gGAHU,EAAU;IACjB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC","sourcesContent":["import { createModuleLogger } from '@metamask/utils';\n\nimport { TransactionPayStrategy } from '../..';\nimport { projectLogger } from '../../logger';\nimport type {\n PayStrategy,\n PayStrategyExecuteRequest,\n PayStrategyGetQuotesRequest,\n TransactionPayQuote,\n} from '../../types';\n\nconst log = createModuleLogger(projectLogger, 'test-strategy');\n\nexport class TestStrategy implements PayStrategy<void> {\n async getQuotes(\n request: PayStrategyGetQuotesRequest,\n ): Promise<TransactionPayQuote<void>[]> {\n const { requests } = request;\n\n log('Getting quotes', requests);\n\n await this.#timeout(5000);\n\n return [\n {\n dust: { fiat: '0.12', usd: '0.34' },\n estimatedDuration: 5,\n fees: {\n provider: { fiat: '1.23', usd: '1.23' },\n sourceNetwork: { fiat: '2.34', usd: '2.34' },\n targetNetwork: { fiat: '3.45', usd: '3.45' },\n },\n original: undefined,\n request: requests[0],\n strategy: TransactionPayStrategy.Test,\n },\n ];\n }\n\n async execute(request: PayStrategyExecuteRequest<void>) {\n const { quotes } = request;\n\n log('Executing', quotes);\n\n await this.#timeout(5000);\n\n return { transactionHash: undefined };\n }\n\n #timeout(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PayStrategy, PayStrategyExecuteRequest, PayStrategyGetQuotesRequest, TransactionPayQuote } from "../../types.cjs";
|
|
2
|
+
export declare class TestStrategy implements PayStrategy<void> {
|
|
3
|
+
#private;
|
|
4
|
+
getQuotes(request: PayStrategyGetQuotesRequest): Promise<TransactionPayQuote<void>[]>;
|
|
5
|
+
execute(request: PayStrategyExecuteRequest<void>): Promise<{
|
|
6
|
+
transactionHash: undefined;
|
|
7
|
+
}>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=TestStrategy.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestStrategy.d.cts","sourceRoot":"","sources":["../../../src/strategy/test/TestStrategy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,WAAW,EACX,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACpB,wBAAoB;AAIrB,qBAAa,YAAa,YAAW,WAAW,CAAC,IAAI,CAAC;;IAC9C,SAAS,CACb,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;IAuBjC,OAAO,CAAC,OAAO,EAAE,yBAAyB,CAAC,IAAI,CAAC;;;CAavD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PayStrategy, PayStrategyExecuteRequest, PayStrategyGetQuotesRequest, TransactionPayQuote } from "../../types.mjs";
|
|
2
|
+
export declare class TestStrategy implements PayStrategy<void> {
|
|
3
|
+
#private;
|
|
4
|
+
getQuotes(request: PayStrategyGetQuotesRequest): Promise<TransactionPayQuote<void>[]>;
|
|
5
|
+
execute(request: PayStrategyExecuteRequest<void>): Promise<{
|
|
6
|
+
transactionHash: undefined;
|
|
7
|
+
}>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=TestStrategy.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestStrategy.d.mts","sourceRoot":"","sources":["../../../src/strategy/test/TestStrategy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,WAAW,EACX,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACpB,wBAAoB;AAIrB,qBAAa,YAAa,YAAW,WAAW,CAAC,IAAI,CAAC;;IAC9C,SAAS,CACb,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;IAuBjC,OAAO,CAAC,OAAO,EAAE,yBAAyB,CAAC,IAAI,CAAC;;;CAavD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
2
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
3
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
4
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
|
+
};
|
|
6
|
+
var _TestStrategy_instances, _TestStrategy_timeout;
|
|
7
|
+
import { createModuleLogger } from "@metamask/utils";
|
|
8
|
+
import { TransactionPayStrategy } from "../../index.mjs";
|
|
9
|
+
import { projectLogger } from "../../logger.mjs";
|
|
10
|
+
const log = createModuleLogger(projectLogger, 'test-strategy');
|
|
11
|
+
export class TestStrategy {
|
|
12
|
+
constructor() {
|
|
13
|
+
_TestStrategy_instances.add(this);
|
|
14
|
+
}
|
|
15
|
+
async getQuotes(request) {
|
|
16
|
+
const { requests } = request;
|
|
17
|
+
log('Getting quotes', requests);
|
|
18
|
+
await __classPrivateFieldGet(this, _TestStrategy_instances, "m", _TestStrategy_timeout).call(this, 5000);
|
|
19
|
+
return [
|
|
20
|
+
{
|
|
21
|
+
dust: { fiat: '0.12', usd: '0.34' },
|
|
22
|
+
estimatedDuration: 5,
|
|
23
|
+
fees: {
|
|
24
|
+
provider: { fiat: '1.23', usd: '1.23' },
|
|
25
|
+
sourceNetwork: { fiat: '2.34', usd: '2.34' },
|
|
26
|
+
targetNetwork: { fiat: '3.45', usd: '3.45' },
|
|
27
|
+
},
|
|
28
|
+
original: undefined,
|
|
29
|
+
request: requests[0],
|
|
30
|
+
strategy: TransactionPayStrategy.Test,
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
}
|
|
34
|
+
async execute(request) {
|
|
35
|
+
const { quotes } = request;
|
|
36
|
+
log('Executing', quotes);
|
|
37
|
+
await __classPrivateFieldGet(this, _TestStrategy_instances, "m", _TestStrategy_timeout).call(this, 5000);
|
|
38
|
+
return { transactionHash: undefined };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
_TestStrategy_instances = new WeakSet(), _TestStrategy_timeout = function _TestStrategy_timeout(ms) {
|
|
42
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=TestStrategy.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestStrategy.mjs","sourceRoot":"","sources":["../../../src/strategy/test/TestStrategy.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB;AAErD,OAAO,EAAE,sBAAsB,EAAE,wBAAc;AAC/C,OAAO,EAAE,aAAa,EAAE,yBAAqB;AAQ7C,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;AAE/D,MAAM,OAAO,YAAY;IAAzB;;IAuCA,CAAC;IAtCC,KAAK,CAAC,SAAS,CACb,OAAoC;QAEpC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QAE7B,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAEhC,MAAM,uBAAA,IAAI,sDAAS,MAAb,IAAI,EAAU,IAAI,CAAC,CAAC;QAE1B,OAAO;YACL;gBACE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;gBACnC,iBAAiB,EAAE,CAAC;gBACpB,IAAI,EAAE;oBACJ,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;oBACvC,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;oBAC5C,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;iBAC7C;gBACD,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACpB,QAAQ,EAAE,sBAAsB,CAAC,IAAI;aACtC;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAwC;QACpD,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAE3B,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEzB,MAAM,uBAAA,IAAI,sDAAS,MAAb,IAAI,EAAU,IAAI,CAAC,CAAC;QAE1B,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC;IACxC,CAAC;CAKF;gGAHU,EAAU;IACjB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC","sourcesContent":["import { createModuleLogger } from '@metamask/utils';\n\nimport { TransactionPayStrategy } from '../..';\nimport { projectLogger } from '../../logger';\nimport type {\n PayStrategy,\n PayStrategyExecuteRequest,\n PayStrategyGetQuotesRequest,\n TransactionPayQuote,\n} from '../../types';\n\nconst log = createModuleLogger(projectLogger, 'test-strategy');\n\nexport class TestStrategy implements PayStrategy<void> {\n async getQuotes(\n request: PayStrategyGetQuotesRequest,\n ): Promise<TransactionPayQuote<void>[]> {\n const { requests } = request;\n\n log('Getting quotes', requests);\n\n await this.#timeout(5000);\n\n return [\n {\n dust: { fiat: '0.12', usd: '0.34' },\n estimatedDuration: 5,\n fees: {\n provider: { fiat: '1.23', usd: '1.23' },\n sourceNetwork: { fiat: '2.34', usd: '2.34' },\n targetNetwork: { fiat: '3.45', usd: '3.45' },\n },\n original: undefined,\n request: requests[0],\n strategy: TransactionPayStrategy.Test,\n },\n ];\n }\n\n async execute(request: PayStrategyExecuteRequest<void>) {\n const { quotes } = request;\n\n log('Executing', quotes);\n\n await this.#timeout(5000);\n\n return { transactionHash: undefined };\n }\n\n #timeout(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n"]}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getMessengerMock = void 0;
|
|
4
|
+
const messenger_1 = require("@metamask/messenger");
|
|
5
|
+
/**
|
|
6
|
+
* Creates a mock controller messenger for testing.
|
|
7
|
+
*
|
|
8
|
+
* @param options - Options for creating the messenger mock.
|
|
9
|
+
* @param options.skipRegister - Whether to skip registering action handlers.
|
|
10
|
+
* @returns The mock messenger and associated mock functions.
|
|
11
|
+
*/
|
|
12
|
+
function getMessengerMock({ skipRegister, } = {}) {
|
|
13
|
+
const getControllerStateMock = jest.fn();
|
|
14
|
+
const getStrategyMock = jest.fn();
|
|
15
|
+
const getTransactionControllerStateMock = jest.fn();
|
|
16
|
+
const addTransactionMock = jest.fn();
|
|
17
|
+
const findNetworkClientIdByChainIdMock = jest.fn();
|
|
18
|
+
const fetchQuotesMock = jest.fn();
|
|
19
|
+
const getRemoteFeatureFlagControllerStateMock = jest.fn();
|
|
20
|
+
const getGasFeeControllerStateMock = jest.fn();
|
|
21
|
+
const submitTransactionMock = jest.fn();
|
|
22
|
+
const updateTransactionMock = jest.fn();
|
|
23
|
+
const getBridgeStatusControllerStateMock = jest.fn();
|
|
24
|
+
const getTokensControllerStateMock = jest.fn();
|
|
25
|
+
const getTokenBalanceControllerStateMock = jest.fn();
|
|
26
|
+
const getTokenRatesControllerStateMock = jest.fn();
|
|
27
|
+
const getCurrencyRateControllerStateMock = jest.fn();
|
|
28
|
+
const getAccountTrackerControllerStateMock = jest.fn();
|
|
29
|
+
const getNetworkClientByIdMock = jest.fn();
|
|
30
|
+
const messenger = new messenger_1.Messenger({
|
|
31
|
+
namespace: messenger_1.MOCK_ANY_NAMESPACE,
|
|
32
|
+
});
|
|
33
|
+
if (skipRegister !== true) {
|
|
34
|
+
messenger.registerActionHandler('TransactionPayController:getState', getControllerStateMock);
|
|
35
|
+
messenger.registerActionHandler('TransactionPayController:getStrategy', getStrategyMock);
|
|
36
|
+
messenger.registerActionHandler('TransactionController:getState', getTransactionControllerStateMock);
|
|
37
|
+
messenger.registerActionHandler('TransactionController:addTransaction', addTransactionMock);
|
|
38
|
+
messenger.registerActionHandler('NetworkController:findNetworkClientIdByChainId', findNetworkClientIdByChainIdMock);
|
|
39
|
+
messenger.registerActionHandler('BridgeController:fetchQuotes', fetchQuotesMock);
|
|
40
|
+
messenger.registerActionHandler('RemoteFeatureFlagController:getState', getRemoteFeatureFlagControllerStateMock);
|
|
41
|
+
messenger.registerActionHandler('BridgeStatusController:submitTx', submitTransactionMock);
|
|
42
|
+
messenger.registerActionHandler('GasFeeController:getState', getGasFeeControllerStateMock);
|
|
43
|
+
messenger.registerActionHandler('TransactionController:updateTransaction', updateTransactionMock);
|
|
44
|
+
messenger.registerActionHandler('BridgeStatusController:getState', getBridgeStatusControllerStateMock);
|
|
45
|
+
messenger.registerActionHandler('TokensController:getState', getTokensControllerStateMock);
|
|
46
|
+
messenger.registerActionHandler('TokenBalancesController:getState', getTokenBalanceControllerStateMock);
|
|
47
|
+
messenger.registerActionHandler('TokenRatesController:getState', getTokenRatesControllerStateMock);
|
|
48
|
+
messenger.registerActionHandler('AccountTrackerController:getState', getAccountTrackerControllerStateMock);
|
|
49
|
+
messenger.registerActionHandler('CurrencyRateController:getState', getCurrencyRateControllerStateMock);
|
|
50
|
+
messenger.registerActionHandler('NetworkController:getNetworkClientById', getNetworkClientByIdMock);
|
|
51
|
+
}
|
|
52
|
+
const publish = messenger.publish.bind(messenger);
|
|
53
|
+
return {
|
|
54
|
+
addTransactionMock,
|
|
55
|
+
fetchQuotesMock,
|
|
56
|
+
findNetworkClientIdByChainIdMock,
|
|
57
|
+
getAccountTrackerControllerStateMock,
|
|
58
|
+
getBridgeStatusControllerStateMock,
|
|
59
|
+
getControllerStateMock,
|
|
60
|
+
getCurrencyRateControllerStateMock,
|
|
61
|
+
getGasFeeControllerStateMock,
|
|
62
|
+
getNetworkClientByIdMock,
|
|
63
|
+
getRemoteFeatureFlagControllerStateMock,
|
|
64
|
+
getStrategyMock,
|
|
65
|
+
getTokenBalanceControllerStateMock,
|
|
66
|
+
getTokenRatesControllerStateMock,
|
|
67
|
+
getTokensControllerStateMock,
|
|
68
|
+
getTransactionControllerStateMock,
|
|
69
|
+
messenger: messenger,
|
|
70
|
+
publish,
|
|
71
|
+
submitTransactionMock,
|
|
72
|
+
updateTransactionMock,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
exports.getMessengerMock = getMessengerMock;
|
|
76
|
+
//# sourceMappingURL=messenger-mock.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messenger-mock.cjs","sourceRoot":"","sources":["../../src/tests/messenger-mock.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TokensControllerGetStateAction } from '@metamask/assets-controllers';\nimport type { TokenBalancesControllerGetStateAction } from '@metamask/assets-controllers';\nimport type { TokenRatesControllerGetStateAction } from '@metamask/assets-controllers';\nimport type { AccountTrackerControllerGetStateAction } from '@metamask/assets-controllers';\nimport type { BridgeStatusControllerGetStateAction } from '@metamask/bridge-status-controller';\nimport type {\n MessengerActions,\n MessengerEvents,\n MockAnyNamespace,\n} from '@metamask/messenger';\nimport { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';\nimport type { NetworkControllerGetNetworkClientByIdAction } from '@metamask/network-controller';\nimport type { NetworkControllerFindNetworkClientIdByChainIdAction } from '@metamask/network-controller';\nimport type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller';\nimport type {\n TransactionControllerAddTransactionAction,\n TransactionControllerGetStateAction,\n} from '@metamask/transaction-controller';\nimport type { TransactionControllerUpdateTransactionAction } from '@metamask/transaction-controller';\n\nimport type { TransactionPayControllerMessenger } from '..';\nimport type { BridgeStatusControllerSubmitTxAction } from '../../../bridge-status-controller/src/types';\nimport type { TransactionPayControllerGetStrategyAction } from '../types';\nimport { type TransactionPayControllerGetStateAction } from '../types';\n\ntype AllActions = MessengerActions<TransactionPayControllerMessenger>;\ntype AllEvents = MessengerEvents<TransactionPayControllerMessenger>;\ntype RootMessenger = Messenger<MockAnyNamespace, AllActions, AllEvents>;\n\n/**\n * Creates a mock controller messenger for testing.\n *\n * @param options - Options for creating the messenger mock.\n * @param options.skipRegister - Whether to skip registering action handlers.\n * @returns The mock messenger and associated mock functions.\n */\nexport function getMessengerMock({\n skipRegister,\n}: { skipRegister?: boolean } = {}) {\n const getControllerStateMock: jest.MockedFn<\n TransactionPayControllerGetStateAction['handler']\n > = jest.fn();\n\n const getStrategyMock: jest.MockedFn<\n TransactionPayControllerGetStrategyAction['handler']\n > = jest.fn();\n\n const getTransactionControllerStateMock: jest.MockedFn<\n TransactionControllerGetStateAction['handler']\n > = jest.fn();\n\n const addTransactionMock: jest.MockedFn<\n TransactionControllerAddTransactionAction['handler']\n > = jest.fn();\n\n const findNetworkClientIdByChainIdMock: jest.MockedFn<\n NetworkControllerFindNetworkClientIdByChainIdAction['handler']\n > = jest.fn();\n\n const fetchQuotesMock = jest.fn();\n\n const getRemoteFeatureFlagControllerStateMock: jest.MockedFn<\n RemoteFeatureFlagControllerGetStateAction['handler']\n > = jest.fn();\n\n const getGasFeeControllerStateMock = jest.fn();\n\n const submitTransactionMock: jest.MockedFunction<\n BridgeStatusControllerSubmitTxAction['handler']\n > = jest.fn();\n\n const updateTransactionMock: jest.MockedFn<\n TransactionControllerUpdateTransactionAction['handler']\n > = jest.fn();\n\n const getBridgeStatusControllerStateMock: jest.MockedFn<\n BridgeStatusControllerGetStateAction['handler']\n > = jest.fn();\n\n const getTokensControllerStateMock: jest.MockedFn<\n TokensControllerGetStateAction['handler']\n > = jest.fn();\n\n const getTokenBalanceControllerStateMock: jest.MockedFn<\n TokenBalancesControllerGetStateAction['handler']\n > = jest.fn();\n\n const getTokenRatesControllerStateMock: jest.MockedFn<\n TokenRatesControllerGetStateAction['handler']\n > = jest.fn();\n\n const getCurrencyRateControllerStateMock = jest.fn();\n\n const getAccountTrackerControllerStateMock: jest.MockedFn<\n AccountTrackerControllerGetStateAction['handler']\n > = jest.fn();\n\n const getNetworkClientByIdMock: jest.MockedFn<\n NetworkControllerGetNetworkClientByIdAction['handler']\n > = jest.fn();\n\n const messenger: RootMessenger = new Messenger({\n namespace: MOCK_ANY_NAMESPACE,\n });\n\n if (skipRegister !== true) {\n messenger.registerActionHandler(\n 'TransactionPayController:getState',\n getControllerStateMock,\n );\n\n messenger.registerActionHandler(\n 'TransactionPayController:getStrategy',\n getStrategyMock,\n );\n\n messenger.registerActionHandler(\n 'TransactionController:getState',\n getTransactionControllerStateMock,\n );\n\n messenger.registerActionHandler(\n 'TransactionController:addTransaction',\n addTransactionMock,\n );\n\n messenger.registerActionHandler(\n 'NetworkController:findNetworkClientIdByChainId',\n findNetworkClientIdByChainIdMock,\n );\n\n messenger.registerActionHandler(\n 'BridgeController:fetchQuotes',\n fetchQuotesMock,\n );\n\n messenger.registerActionHandler(\n 'RemoteFeatureFlagController:getState',\n getRemoteFeatureFlagControllerStateMock,\n );\n\n messenger.registerActionHandler(\n 'BridgeStatusController:submitTx',\n submitTransactionMock,\n );\n\n messenger.registerActionHandler(\n 'GasFeeController:getState',\n getGasFeeControllerStateMock,\n );\n\n messenger.registerActionHandler(\n 'TransactionController:updateTransaction',\n updateTransactionMock,\n );\n\n messenger.registerActionHandler(\n 'BridgeStatusController:getState',\n getBridgeStatusControllerStateMock,\n );\n\n messenger.registerActionHandler(\n 'TokensController:getState',\n getTokensControllerStateMock,\n );\n\n messenger.registerActionHandler(\n 'TokenBalancesController:getState',\n getTokenBalanceControllerStateMock,\n );\n\n messenger.registerActionHandler(\n 'TokenRatesController:getState',\n getTokenRatesControllerStateMock,\n );\n\n messenger.registerActionHandler(\n 'AccountTrackerController:getState',\n getAccountTrackerControllerStateMock,\n );\n\n messenger.registerActionHandler(\n 'CurrencyRateController:getState',\n getCurrencyRateControllerStateMock,\n );\n\n messenger.registerActionHandler(\n 'NetworkController:getNetworkClientById',\n getNetworkClientByIdMock,\n );\n }\n\n const publish = messenger.publish.bind(messenger);\n\n return {\n addTransactionMock,\n fetchQuotesMock,\n findNetworkClientIdByChainIdMock,\n getAccountTrackerControllerStateMock,\n getBridgeStatusControllerStateMock,\n getControllerStateMock,\n getCurrencyRateControllerStateMock,\n getGasFeeControllerStateMock,\n getNetworkClientByIdMock,\n getRemoteFeatureFlagControllerStateMock,\n getStrategyMock,\n getTokenBalanceControllerStateMock,\n getTokenRatesControllerStateMock,\n getTokensControllerStateMock,\n getTransactionControllerStateMock,\n messenger: messenger as TransactionPayControllerMessenger,\n publish,\n submitTransactionMock,\n updateTransactionMock,\n };\n}\n"]}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/// <reference types="jest" />
|
|
2
|
+
import type { TransactionPayControllerMessenger } from "../index.cjs";
|
|
3
|
+
/**
|
|
4
|
+
* Creates a mock controller messenger for testing.
|
|
5
|
+
*
|
|
6
|
+
* @param options - Options for creating the messenger mock.
|
|
7
|
+
* @param options.skipRegister - Whether to skip registering action handlers.
|
|
8
|
+
* @returns The mock messenger and associated mock functions.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getMessengerMock({ skipRegister, }?: {
|
|
11
|
+
skipRegister?: boolean;
|
|
12
|
+
}): {
|
|
13
|
+
addTransactionMock: jest.MockedFn<(txParams: import("@metamask/transaction-controller").TransactionParams, options: import("@metamask/transaction-controller").AddTransactionOptions) => Promise<import("@metamask/transaction-controller").Result>>;
|
|
14
|
+
fetchQuotesMock: jest.Mock<any, any>;
|
|
15
|
+
findNetworkClientIdByChainIdMock: jest.MockedFn<(chainId: `0x${string}`) => string>;
|
|
16
|
+
getAccountTrackerControllerStateMock: jest.MockedFn<() => import("@metamask/assets-controllers").AccountTrackerControllerState>;
|
|
17
|
+
getBridgeStatusControllerStateMock: jest.MockedFn<() => import("@metamask/bridge-status-controller").BridgeStatusControllerState>;
|
|
18
|
+
getControllerStateMock: jest.MockedFn<() => import("../index.cjs").TransactionPayControllerState>;
|
|
19
|
+
getCurrencyRateControllerStateMock: jest.Mock<any, any>;
|
|
20
|
+
getGasFeeControllerStateMock: jest.Mock<any, any>;
|
|
21
|
+
getNetworkClientByIdMock: jest.MockedFn<{
|
|
22
|
+
(infuraNetworkClientId: import("@metamask/controller-utils").InfuraNetworkType): import("@metamask/network-controller").AutoManagedNetworkClient<import("@metamask/network-controller").InfuraNetworkClientConfiguration>;
|
|
23
|
+
(customNetworkClientId: string): import("@metamask/network-controller").AutoManagedNetworkClient<import("@metamask/network-controller").CustomNetworkClientConfiguration>;
|
|
24
|
+
}>;
|
|
25
|
+
getRemoteFeatureFlagControllerStateMock: jest.MockedFn<() => import("@metamask/remote-feature-flag-controller").RemoteFeatureFlagControllerState>;
|
|
26
|
+
getStrategyMock: jest.MockedFn<(transaction: import("@metamask/transaction-controller").TransactionMeta) => Promise<import("../index.cjs").TransactionPayStrategy>>;
|
|
27
|
+
getTokenBalanceControllerStateMock: jest.MockedFn<() => import("@metamask/assets-controllers").TokenBalancesControllerState>;
|
|
28
|
+
getTokenRatesControllerStateMock: jest.MockedFn<() => import("@metamask/assets-controllers").TokenRatesControllerState>;
|
|
29
|
+
getTokensControllerStateMock: jest.MockedFn<() => import("@metamask/assets-controllers").TokensControllerState>;
|
|
30
|
+
getTransactionControllerStateMock: jest.MockedFn<() => import("@metamask/transaction-controller").TransactionControllerState>;
|
|
31
|
+
messenger: TransactionPayControllerMessenger;
|
|
32
|
+
publish: <EventType extends "BridgeStatusController:stateChange" | "TransactionController:stateChange" | "TransactionController:unapprovedTransactionAdded" | "TransactionPayController:stateChange">(eventType: EventType & `${string}:${string}`, ...payload: import("@metamask/messenger").ExtractEventPayload<import("@metamask/bridge-status-controller").BridgeStatusControllerStateChangeEvent, EventType> | import("@metamask/messenger").ExtractEventPayload<import("@metamask/transaction-controller").TransactionControllerStateChangeEvent, EventType> | import("@metamask/messenger").ExtractEventPayload<import("@metamask/transaction-controller").TransactionControllerUnapprovedTransactionAddedEvent, EventType> | import("@metamask/messenger").ExtractEventPayload<import("../index.cjs").TransactionPayControllerStateChangeEvent, EventType>) => void;
|
|
33
|
+
submitTransactionMock: jest.MockedFunction<(accountAddress: string, quoteResponse: {
|
|
34
|
+
quote: {
|
|
35
|
+
srcChainId: number;
|
|
36
|
+
destChainId: number;
|
|
37
|
+
srcAsset: {
|
|
38
|
+
symbol: string;
|
|
39
|
+
chainId: number;
|
|
40
|
+
address: string;
|
|
41
|
+
assetId: `${string}:${string}/${string}:${string}`;
|
|
42
|
+
name: string;
|
|
43
|
+
decimals: number;
|
|
44
|
+
icon?: string | null | undefined;
|
|
45
|
+
iconUrl?: string | null | undefined;
|
|
46
|
+
};
|
|
47
|
+
destAsset: {
|
|
48
|
+
symbol: string;
|
|
49
|
+
chainId: number;
|
|
50
|
+
address: string;
|
|
51
|
+
assetId: `${string}:${string}/${string}:${string}`;
|
|
52
|
+
name: string;
|
|
53
|
+
decimals: number;
|
|
54
|
+
icon?: string | null | undefined;
|
|
55
|
+
iconUrl?: string | null | undefined;
|
|
56
|
+
};
|
|
57
|
+
requestId: string;
|
|
58
|
+
srcTokenAmount: string;
|
|
59
|
+
destTokenAmount: string;
|
|
60
|
+
minDestTokenAmount: string;
|
|
61
|
+
feeData: {
|
|
62
|
+
metabridge: {
|
|
63
|
+
amount: string;
|
|
64
|
+
asset: {
|
|
65
|
+
symbol: string;
|
|
66
|
+
chainId: number;
|
|
67
|
+
address: string;
|
|
68
|
+
assetId: `${string}:${string}/${string}:${string}`;
|
|
69
|
+
name: string;
|
|
70
|
+
decimals: number;
|
|
71
|
+
icon?: string | null | undefined;
|
|
72
|
+
iconUrl?: string | null | undefined;
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
txFee?: ({
|
|
76
|
+
amount: string;
|
|
77
|
+
asset: {
|
|
78
|
+
symbol: string;
|
|
79
|
+
chainId: number;
|
|
80
|
+
address: string;
|
|
81
|
+
assetId: `${string}:${string}/${string}:${string}`;
|
|
82
|
+
name: string;
|
|
83
|
+
decimals: number;
|
|
84
|
+
icon?: string | null | undefined;
|
|
85
|
+
iconUrl?: string | null | undefined;
|
|
86
|
+
};
|
|
87
|
+
} & {
|
|
88
|
+
maxFeePerGas: string;
|
|
89
|
+
maxPriorityFeePerGas: string;
|
|
90
|
+
}) | undefined;
|
|
91
|
+
};
|
|
92
|
+
bridgeId: string;
|
|
93
|
+
bridges: string[];
|
|
94
|
+
steps: {
|
|
95
|
+
action: import("@metamask/bridge-controller").ActionTypes;
|
|
96
|
+
srcChainId: number;
|
|
97
|
+
srcAsset: {
|
|
98
|
+
symbol: string;
|
|
99
|
+
chainId: number;
|
|
100
|
+
address: string;
|
|
101
|
+
assetId: `${string}:${string}/${string}:${string}`;
|
|
102
|
+
name: string;
|
|
103
|
+
decimals: number;
|
|
104
|
+
icon?: string | null | undefined;
|
|
105
|
+
iconUrl?: string | null | undefined;
|
|
106
|
+
};
|
|
107
|
+
destAsset: {
|
|
108
|
+
symbol: string;
|
|
109
|
+
chainId: number;
|
|
110
|
+
address: string;
|
|
111
|
+
assetId: `${string}:${string}/${string}:${string}`;
|
|
112
|
+
name: string;
|
|
113
|
+
decimals: number;
|
|
114
|
+
icon?: string | null | undefined;
|
|
115
|
+
iconUrl?: string | null | undefined;
|
|
116
|
+
};
|
|
117
|
+
srcAmount: string;
|
|
118
|
+
destAmount: string;
|
|
119
|
+
protocol: {
|
|
120
|
+
name: string;
|
|
121
|
+
icon?: string | undefined;
|
|
122
|
+
displayName?: string | undefined;
|
|
123
|
+
};
|
|
124
|
+
destChainId?: number | undefined;
|
|
125
|
+
}[];
|
|
126
|
+
refuel?: {
|
|
127
|
+
action: import("@metamask/bridge-controller").ActionTypes;
|
|
128
|
+
srcChainId: number;
|
|
129
|
+
srcAsset: {
|
|
130
|
+
symbol: string;
|
|
131
|
+
chainId: number;
|
|
132
|
+
address: string;
|
|
133
|
+
assetId: `${string}:${string}/${string}:${string}`;
|
|
134
|
+
name: string;
|
|
135
|
+
decimals: number;
|
|
136
|
+
icon?: string | null | undefined;
|
|
137
|
+
iconUrl?: string | null | undefined;
|
|
138
|
+
};
|
|
139
|
+
destAsset: {
|
|
140
|
+
symbol: string;
|
|
141
|
+
chainId: number;
|
|
142
|
+
address: string;
|
|
143
|
+
assetId: `${string}:${string}/${string}:${string}`;
|
|
144
|
+
name: string;
|
|
145
|
+
decimals: number;
|
|
146
|
+
icon?: string | null | undefined;
|
|
147
|
+
iconUrl?: string | null | undefined;
|
|
148
|
+
};
|
|
149
|
+
srcAmount: string;
|
|
150
|
+
destAmount: string;
|
|
151
|
+
protocol: {
|
|
152
|
+
name: string;
|
|
153
|
+
icon?: string | undefined;
|
|
154
|
+
displayName?: string | undefined;
|
|
155
|
+
};
|
|
156
|
+
destChainId?: number | undefined;
|
|
157
|
+
} | undefined;
|
|
158
|
+
gasIncluded?: boolean | undefined;
|
|
159
|
+
gasIncluded7702?: boolean | undefined;
|
|
160
|
+
priceData?: {
|
|
161
|
+
totalFromAmountUsd?: string | undefined;
|
|
162
|
+
totalToAmountUsd?: string | undefined;
|
|
163
|
+
priceImpact?: string | undefined;
|
|
164
|
+
totalFeeAmountUsd?: string | undefined;
|
|
165
|
+
} | undefined;
|
|
166
|
+
};
|
|
167
|
+
estimatedProcessingTimeInSeconds: number;
|
|
168
|
+
trade: string | {
|
|
169
|
+
chainId: number;
|
|
170
|
+
to: string;
|
|
171
|
+
from: string;
|
|
172
|
+
value: string;
|
|
173
|
+
data: string;
|
|
174
|
+
gasLimit: number | null;
|
|
175
|
+
effectiveGas?: number | undefined;
|
|
176
|
+
} | {
|
|
177
|
+
unsignedPsbtBase64: string;
|
|
178
|
+
inputsToSign: {}[] | null;
|
|
179
|
+
};
|
|
180
|
+
approval?: {
|
|
181
|
+
chainId: number;
|
|
182
|
+
to: string;
|
|
183
|
+
from: string;
|
|
184
|
+
value: string;
|
|
185
|
+
data: string;
|
|
186
|
+
gasLimit: number | null;
|
|
187
|
+
effectiveGas?: number | undefined;
|
|
188
|
+
} | undefined;
|
|
189
|
+
} & {
|
|
190
|
+
trade: string | {
|
|
191
|
+
chainId: number;
|
|
192
|
+
to: string;
|
|
193
|
+
from: string;
|
|
194
|
+
value: string;
|
|
195
|
+
data: string;
|
|
196
|
+
gasLimit: number | null;
|
|
197
|
+
effectiveGas?: number | undefined;
|
|
198
|
+
} | {
|
|
199
|
+
unsignedPsbtBase64: string;
|
|
200
|
+
inputsToSign: {}[] | null;
|
|
201
|
+
};
|
|
202
|
+
approval?: {
|
|
203
|
+
chainId: number;
|
|
204
|
+
to: string;
|
|
205
|
+
from: string;
|
|
206
|
+
value: string;
|
|
207
|
+
data: string;
|
|
208
|
+
gasLimit: number | null;
|
|
209
|
+
effectiveGas?: number | undefined;
|
|
210
|
+
} | undefined;
|
|
211
|
+
featureId?: import("@metamask/bridge-controller").FeatureId | undefined;
|
|
212
|
+
} & Partial<import("@metamask/bridge-controller").QuoteMetadata>, isStxEnabledOnClient: boolean) => Promise<import("@metamask/transaction-controller").TransactionMeta & Partial<import("../../../bridge-status-controller/src/types.cjs").SolanaTransactionMeta>>>;
|
|
213
|
+
updateTransactionMock: jest.MockedFn<(transactionMeta: import("@metamask/transaction-controller").TransactionMeta, note: string) => void>;
|
|
214
|
+
};
|
|
215
|
+
//# sourceMappingURL=messenger-mock.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messenger-mock.d.cts","sourceRoot":"","sources":["../../src/tests/messenger-mock.ts"],"names":[],"mappings":";AAoBA,OAAO,KAAK,EAAE,iCAAiC,EAAE,qBAAW;AAS5D;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,YAAY,GACb,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiLjC"}
|