@metamask/transaction-pay-controller 23.17.1 → 23.17.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -1
- package/dist/constants.cjs +0 -2
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +1 -3
- package/dist/constants.d.cts.map +1 -1
- package/dist/constants.d.mts +1 -3
- package/dist/constants.d.mts.map +1 -1
- package/dist/constants.mjs +0 -2
- package/dist/constants.mjs.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +0 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +0 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/tests/messenger-mock.cjs +0 -9
- package/dist/tests/messenger-mock.cjs.map +1 -1
- package/dist/tests/messenger-mock.d.cts +1 -498
- package/dist/tests/messenger-mock.d.cts.map +1 -1
- package/dist/tests/messenger-mock.d.mts +1 -498
- package/dist/tests/messenger-mock.d.mts.map +1 -1
- package/dist/tests/messenger-mock.mjs +0 -9
- package/dist/tests/messenger-mock.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +2 -5
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +2 -5
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/strategy.cjs +0 -6
- package/dist/utils/strategy.cjs.map +1 -1
- package/dist/utils/strategy.d.cts.map +1 -1
- package/dist/utils/strategy.d.mts.map +1 -1
- package/dist/utils/strategy.mjs +0 -6
- package/dist/utils/strategy.mjs.map +1 -1
- package/package.json +6 -8
- package/dist/strategy/bridge/BridgeStrategy.cjs +0 -30
- package/dist/strategy/bridge/BridgeStrategy.cjs.map +0 -1
- package/dist/strategy/bridge/BridgeStrategy.d.cts +0 -10
- package/dist/strategy/bridge/BridgeStrategy.d.cts.map +0 -1
- package/dist/strategy/bridge/BridgeStrategy.d.mts +0 -10
- package/dist/strategy/bridge/BridgeStrategy.d.mts.map +0 -1
- package/dist/strategy/bridge/BridgeStrategy.mjs +0 -26
- package/dist/strategy/bridge/BridgeStrategy.mjs.map +0 -1
- package/dist/strategy/bridge/bridge-quotes.cjs +0 -418
- package/dist/strategy/bridge/bridge-quotes.cjs.map +0 -1
- package/dist/strategy/bridge/bridge-quotes.d.cts +0 -35
- package/dist/strategy/bridge/bridge-quotes.d.cts.map +0 -1
- package/dist/strategy/bridge/bridge-quotes.d.mts +0 -35
- package/dist/strategy/bridge/bridge-quotes.d.mts.map +0 -1
- package/dist/strategy/bridge/bridge-quotes.mjs +0 -412
- package/dist/strategy/bridge/bridge-quotes.mjs.map +0 -1
- package/dist/strategy/bridge/bridge-submit.cjs +0 -136
- package/dist/strategy/bridge/bridge-submit.cjs.map +0 -1
- package/dist/strategy/bridge/bridge-submit.d.cts +0 -19
- package/dist/strategy/bridge/bridge-submit.d.cts.map +0 -1
- package/dist/strategy/bridge/bridge-submit.d.mts +0 -19
- package/dist/strategy/bridge/bridge-submit.d.mts.map +0 -1
- package/dist/strategy/bridge/bridge-submit.mjs +0 -133
- package/dist/strategy/bridge/bridge-submit.mjs.map +0 -1
- package/dist/strategy/bridge/types.cjs +0 -3
- package/dist/strategy/bridge/types.cjs.map +0 -1
- package/dist/strategy/bridge/types.d.cts +0 -27
- package/dist/strategy/bridge/types.d.cts.map +0 -1
- package/dist/strategy/bridge/types.d.mts +0 -27
- package/dist/strategy/bridge/types.d.mts.map +0 -1
- package/dist/strategy/bridge/types.mjs +0 -2
- package/dist/strategy/bridge/types.mjs.map +0 -1
- package/dist/strategy/test/TestStrategy.cjs +0 -75
- package/dist/strategy/test/TestStrategy.cjs.map +0 -1
- package/dist/strategy/test/TestStrategy.d.cts +0 -7
- package/dist/strategy/test/TestStrategy.d.cts.map +0 -1
- package/dist/strategy/test/TestStrategy.d.mts +0 -7
- package/dist/strategy/test/TestStrategy.d.mts.map +0 -1
- package/dist/strategy/test/TestStrategy.mjs +0 -71
- package/dist/strategy/test/TestStrategy.mjs.map +0 -1
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.submitBridgeQuotes = void 0;
|
|
4
|
-
const bridge_controller_1 = require("@metamask/bridge-controller");
|
|
5
|
-
const controller_utils_1 = require("@metamask/controller-utils");
|
|
6
|
-
const utils_1 = require("@metamask/utils");
|
|
7
|
-
const lodash_1 = require("lodash");
|
|
8
|
-
const logger_1 = require("../../logger.cjs");
|
|
9
|
-
const transaction_1 = require("../../utils/transaction.cjs");
|
|
10
|
-
const bridge_quotes_1 = require("./bridge-quotes.cjs");
|
|
11
|
-
const log = (0, utils_1.createModuleLogger)(logger_1.projectLogger, 'bridge-strategy');
|
|
12
|
-
/**
|
|
13
|
-
* Submit multiple bridge quotes sequentially and wait for their completion.
|
|
14
|
-
*
|
|
15
|
-
* @param request - The request object containing necessary data.
|
|
16
|
-
* @returns An object containing the transaction hash if available.
|
|
17
|
-
*/
|
|
18
|
-
async function submitBridgeQuotes(request) {
|
|
19
|
-
const { quotes, messenger, transaction } = request;
|
|
20
|
-
if (!quotes?.length) {
|
|
21
|
-
log('No quotes found');
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
// Currently we only support a single source meaning we only check the first quote.
|
|
25
|
-
const isSameChain = quotes[0].original.quote.srcChainId ===
|
|
26
|
-
quotes[0].original.quote.destChainId;
|
|
27
|
-
if (isSameChain) {
|
|
28
|
-
log('Ignoring quotes as source is same chain', quotes[0].original.quote.srcChainId);
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
let index = 0;
|
|
32
|
-
for (const quote of quotes) {
|
|
33
|
-
log('Submitting bridge', index, quote);
|
|
34
|
-
let finalQuote = quote.original;
|
|
35
|
-
if (index > 0) {
|
|
36
|
-
try {
|
|
37
|
-
finalQuote = await (0, bridge_quotes_1.refreshQuote)(quote, messenger, transaction);
|
|
38
|
-
}
|
|
39
|
-
catch (error) {
|
|
40
|
-
log('Failed to refresh subsequent quote before submit', error);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
await submitBridgeTransaction(request, finalQuote);
|
|
44
|
-
index += 1;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
exports.submitBridgeQuotes = submitBridgeQuotes;
|
|
48
|
-
/**
|
|
49
|
-
* Submit a bridge transaction and wait for it to complete.
|
|
50
|
-
*
|
|
51
|
-
* @param request - The request object containing necessary data.
|
|
52
|
-
* @param originalQuote - The original quote to submit.
|
|
53
|
-
*/
|
|
54
|
-
async function submitBridgeTransaction(request, originalQuote) {
|
|
55
|
-
const { isSmartTransaction, messenger, from, transaction } = request;
|
|
56
|
-
const quote = (0, lodash_1.cloneDeep)(originalQuote);
|
|
57
|
-
const sourceChainId = (0, controller_utils_1.toHex)(quote.quote.srcChainId);
|
|
58
|
-
const isSTX = isSmartTransaction(sourceChainId);
|
|
59
|
-
const requiredTransactionIds = [];
|
|
60
|
-
const bridgeTransactionIdCollector = (0, transaction_1.collectTransactionIds)(sourceChainId, from, messenger, (id) => (0, transaction_1.updateTransaction)({
|
|
61
|
-
transactionId: transaction.id,
|
|
62
|
-
messenger,
|
|
63
|
-
note: 'Add required transaction ID',
|
|
64
|
-
}, (transactionMeta) => {
|
|
65
|
-
transactionMeta.requiredTransactionIds ?? (transactionMeta.requiredTransactionIds = []);
|
|
66
|
-
transactionMeta?.requiredTransactionIds.push(id);
|
|
67
|
-
requiredTransactionIds.push(id);
|
|
68
|
-
}));
|
|
69
|
-
const tokenAmountValues = {
|
|
70
|
-
amount: '0',
|
|
71
|
-
valueInCurrency: null,
|
|
72
|
-
usd: null,
|
|
73
|
-
};
|
|
74
|
-
const metadata = {
|
|
75
|
-
gasFee: {
|
|
76
|
-
effective: tokenAmountValues,
|
|
77
|
-
max: tokenAmountValues,
|
|
78
|
-
total: tokenAmountValues,
|
|
79
|
-
},
|
|
80
|
-
totalNetworkFee: tokenAmountValues,
|
|
81
|
-
totalMaxNetworkFee: tokenAmountValues,
|
|
82
|
-
toTokenAmount: tokenAmountValues,
|
|
83
|
-
minToTokenAmount: tokenAmountValues,
|
|
84
|
-
adjustedReturn: tokenAmountValues,
|
|
85
|
-
sentAmount: tokenAmountValues,
|
|
86
|
-
swapRate: '0',
|
|
87
|
-
cost: tokenAmountValues,
|
|
88
|
-
};
|
|
89
|
-
const result = await messenger.call('BridgeStatusController:submitTx', from, { ...quote, ...metadata }, isSTX);
|
|
90
|
-
bridgeTransactionIdCollector.end();
|
|
91
|
-
log('Bridge transaction submitted', {
|
|
92
|
-
requiredTransactionIds,
|
|
93
|
-
result,
|
|
94
|
-
});
|
|
95
|
-
await Promise.all(requiredTransactionIds.map((id) => (0, transaction_1.waitForTransactionConfirmed)(id, messenger)));
|
|
96
|
-
log('All required transactions confirmed', requiredTransactionIds);
|
|
97
|
-
const { id: bridgeTransactionId } = result;
|
|
98
|
-
log('Waiting for bridge completion', bridgeTransactionId);
|
|
99
|
-
await waitForBridgeCompletion(bridgeTransactionId, messenger);
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Wait for a bridge transaction to complete.
|
|
103
|
-
*
|
|
104
|
-
* @param bridgeTransactionId - The bridge transaction ID.
|
|
105
|
-
* @param messenger - The controller messenger.
|
|
106
|
-
*/
|
|
107
|
-
async function waitForBridgeCompletion(bridgeTransactionId, messenger) {
|
|
108
|
-
return new Promise((resolve, reject) => {
|
|
109
|
-
const isComplete = (item, fn) => {
|
|
110
|
-
const status = item?.status?.status;
|
|
111
|
-
log('Checking bridge status', status ?? 'missing');
|
|
112
|
-
if (status === bridge_controller_1.StatusTypes.COMPLETE) {
|
|
113
|
-
fn?.();
|
|
114
|
-
resolve();
|
|
115
|
-
return true;
|
|
116
|
-
}
|
|
117
|
-
if (status === bridge_controller_1.StatusTypes.FAILED) {
|
|
118
|
-
fn?.();
|
|
119
|
-
reject(new Error('Bridge failed'));
|
|
120
|
-
return true;
|
|
121
|
-
}
|
|
122
|
-
return false;
|
|
123
|
-
};
|
|
124
|
-
const initialState = messenger.call('BridgeStatusController:getState');
|
|
125
|
-
const initialTx = initialState.txHistory[bridgeTransactionId];
|
|
126
|
-
if (isComplete(initialTx)) {
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
const handler = (bridgeHistory) => {
|
|
130
|
-
const unsubscribe = () => messenger.unsubscribe('BridgeStatusController:stateChange', handler);
|
|
131
|
-
isComplete(bridgeHistory, unsubscribe);
|
|
132
|
-
};
|
|
133
|
-
messenger.subscribe('BridgeStatusController:stateChange', handler, (state) => state.txHistory[bridgeTransactionId]);
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
//# sourceMappingURL=bridge-submit.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-submit.cjs","sourceRoot":"","sources":["../../../src/strategy/bridge/bridge-submit.ts"],"names":[],"mappings":"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","sourcesContent":["import { StatusTypes } from '@metamask/bridge-controller';\nimport type { QuoteMetadata } from '@metamask/bridge-controller';\nimport type { QuoteResponse } from '@metamask/bridge-controller';\nimport type { BridgeHistoryItem } from '@metamask/bridge-status-controller';\nimport { toHex } from '@metamask/controller-utils';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\nimport { cloneDeep } from 'lodash';\n\nimport { projectLogger } from '../../logger';\nimport type {\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n} from '../../types';\nimport {\n collectTransactionIds,\n updateTransaction,\n waitForTransactionConfirmed,\n} from '../../utils/transaction';\nimport { refreshQuote } from './bridge-quotes';\nimport type { TransactionPayBridgeQuote } from './types';\n\nconst log = createModuleLogger(projectLogger, 'bridge-strategy');\n\nexport type SubmitBridgeQuotesRequest = {\n from: Hex;\n isSmartTransaction: (chainId: Hex) => boolean;\n messenger: TransactionPayControllerMessenger;\n quotes: TransactionPayQuote<TransactionPayBridgeQuote>[];\n transaction: TransactionMeta;\n};\n\n/**\n * Submit multiple bridge quotes sequentially and wait for their completion.\n *\n * @param request - The request object containing necessary data.\n * @returns An object containing the transaction hash if available.\n */\nexport async function submitBridgeQuotes(\n request: SubmitBridgeQuotesRequest,\n): Promise<void> {\n const { quotes, messenger, transaction } = request;\n\n if (!quotes?.length) {\n log('No quotes found');\n return;\n }\n\n // Currently we only support a single source meaning we only check the first quote.\n const isSameChain =\n quotes[0].original.quote.srcChainId ===\n quotes[0].original.quote.destChainId;\n\n if (isSameChain) {\n log(\n 'Ignoring quotes as source is same chain',\n quotes[0].original.quote.srcChainId,\n );\n return;\n }\n\n let index = 0;\n\n for (const quote of quotes) {\n log('Submitting bridge', index, quote);\n\n let finalQuote = quote.original;\n\n if (index > 0) {\n try {\n finalQuote = await refreshQuote(quote, messenger, transaction);\n } catch (error) {\n log('Failed to refresh subsequent quote before submit', error);\n }\n }\n\n await submitBridgeTransaction(request, finalQuote);\n\n index += 1;\n }\n}\n\n/**\n * Submit a bridge transaction and wait for it to complete.\n *\n * @param request - The request object containing necessary data.\n * @param originalQuote - The original quote to submit.\n */\nasync function submitBridgeTransaction(\n request: SubmitBridgeQuotesRequest,\n originalQuote: QuoteResponse,\n): Promise<void> {\n const { isSmartTransaction, messenger, from, transaction } = request;\n const quote = cloneDeep(originalQuote);\n const sourceChainId = toHex(quote.quote.srcChainId);\n const isSTX = isSmartTransaction(sourceChainId);\n const requiredTransactionIds: string[] = [];\n\n const bridgeTransactionIdCollector = collectTransactionIds(\n sourceChainId,\n from,\n messenger,\n (id) =>\n updateTransaction(\n {\n transactionId: transaction.id,\n messenger,\n note: 'Add required transaction ID',\n },\n (transactionMeta) => {\n transactionMeta.requiredTransactionIds ??= [];\n transactionMeta?.requiredTransactionIds.push(id);\n requiredTransactionIds.push(id);\n },\n ),\n );\n\n const tokenAmountValues = {\n amount: '0',\n valueInCurrency: null,\n usd: null,\n };\n\n const metadata: QuoteMetadata = {\n gasFee: {\n effective: tokenAmountValues,\n max: tokenAmountValues,\n total: tokenAmountValues,\n },\n totalNetworkFee: tokenAmountValues,\n totalMaxNetworkFee: tokenAmountValues,\n toTokenAmount: tokenAmountValues,\n minToTokenAmount: tokenAmountValues,\n adjustedReturn: tokenAmountValues,\n sentAmount: tokenAmountValues,\n swapRate: '0',\n cost: tokenAmountValues,\n };\n\n const result = await messenger.call(\n 'BridgeStatusController:submitTx',\n from,\n { ...quote, ...metadata },\n isSTX,\n );\n\n bridgeTransactionIdCollector.end();\n\n log('Bridge transaction submitted', {\n requiredTransactionIds,\n result,\n });\n\n await Promise.all(\n requiredTransactionIds.map((id) =>\n waitForTransactionConfirmed(id, messenger),\n ),\n );\n\n log('All required transactions confirmed', requiredTransactionIds);\n\n const { id: bridgeTransactionId } = result;\n\n log('Waiting for bridge completion', bridgeTransactionId);\n\n await waitForBridgeCompletion(bridgeTransactionId, messenger);\n}\n\n/**\n * Wait for a bridge transaction to complete.\n *\n * @param bridgeTransactionId - The bridge transaction ID.\n * @param messenger - The controller messenger.\n */\nasync function waitForBridgeCompletion(\n bridgeTransactionId: string,\n messenger: TransactionPayControllerMessenger,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const isComplete = (item?: BridgeHistoryItem, fn?: () => void): boolean => {\n const status = item?.status?.status;\n\n log('Checking bridge status', status ?? 'missing');\n\n if (status === StatusTypes.COMPLETE) {\n fn?.();\n resolve();\n return true;\n }\n\n if (status === StatusTypes.FAILED) {\n fn?.();\n reject(new Error('Bridge failed'));\n return true;\n }\n\n return false;\n };\n\n const initialState = messenger.call('BridgeStatusController:getState');\n\n const initialTx = initialState.txHistory[bridgeTransactionId];\n\n if (isComplete(initialTx)) {\n return;\n }\n\n const handler = (bridgeHistory?: BridgeHistoryItem): void => {\n const unsubscribe = (): void =>\n messenger.unsubscribe('BridgeStatusController:stateChange', handler);\n\n isComplete(bridgeHistory, unsubscribe);\n };\n\n messenger.subscribe(\n 'BridgeStatusController:stateChange',\n handler,\n (state) => state.txHistory[bridgeTransactionId],\n );\n });\n}\n"]}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { TransactionMeta } from "@metamask/transaction-controller";
|
|
2
|
-
import type { Hex } from "@metamask/utils";
|
|
3
|
-
import type { TransactionPayControllerMessenger, TransactionPayQuote } from "../../types.cjs";
|
|
4
|
-
import type { TransactionPayBridgeQuote } from "./types.cjs";
|
|
5
|
-
export type SubmitBridgeQuotesRequest = {
|
|
6
|
-
from: Hex;
|
|
7
|
-
isSmartTransaction: (chainId: Hex) => boolean;
|
|
8
|
-
messenger: TransactionPayControllerMessenger;
|
|
9
|
-
quotes: TransactionPayQuote<TransactionPayBridgeQuote>[];
|
|
10
|
-
transaction: TransactionMeta;
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* Submit multiple bridge quotes sequentially and wait for their completion.
|
|
14
|
-
*
|
|
15
|
-
* @param request - The request object containing necessary data.
|
|
16
|
-
* @returns An object containing the transaction hash if available.
|
|
17
|
-
*/
|
|
18
|
-
export declare function submitBridgeQuotes(request: SubmitBridgeQuotesRequest): Promise<void>;
|
|
19
|
-
//# sourceMappingURL=bridge-submit.d.cts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-submit.d.cts","sourceRoot":"","sources":["../../../src/strategy/bridge/bridge-submit.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AACxE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAK3C,OAAO,KAAK,EACV,iCAAiC,EACjC,mBAAmB,EACpB,wBAAoB;AAOrB,OAAO,KAAK,EAAE,yBAAyB,EAAE,oBAAgB;AAIzD,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,GAAG,CAAC;IACV,kBAAkB,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC;IAC9C,SAAS,EAAE,iCAAiC,CAAC;IAC7C,MAAM,EAAE,mBAAmB,CAAC,yBAAyB,CAAC,EAAE,CAAC;IACzD,WAAW,EAAE,eAAe,CAAC;CAC9B,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CAwCf"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { TransactionMeta } from "@metamask/transaction-controller";
|
|
2
|
-
import type { Hex } from "@metamask/utils";
|
|
3
|
-
import type { TransactionPayControllerMessenger, TransactionPayQuote } from "../../types.mjs";
|
|
4
|
-
import type { TransactionPayBridgeQuote } from "./types.mjs";
|
|
5
|
-
export type SubmitBridgeQuotesRequest = {
|
|
6
|
-
from: Hex;
|
|
7
|
-
isSmartTransaction: (chainId: Hex) => boolean;
|
|
8
|
-
messenger: TransactionPayControllerMessenger;
|
|
9
|
-
quotes: TransactionPayQuote<TransactionPayBridgeQuote>[];
|
|
10
|
-
transaction: TransactionMeta;
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* Submit multiple bridge quotes sequentially and wait for their completion.
|
|
14
|
-
*
|
|
15
|
-
* @param request - The request object containing necessary data.
|
|
16
|
-
* @returns An object containing the transaction hash if available.
|
|
17
|
-
*/
|
|
18
|
-
export declare function submitBridgeQuotes(request: SubmitBridgeQuotesRequest): Promise<void>;
|
|
19
|
-
//# sourceMappingURL=bridge-submit.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-submit.d.mts","sourceRoot":"","sources":["../../../src/strategy/bridge/bridge-submit.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AACxE,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAK3C,OAAO,KAAK,EACV,iCAAiC,EACjC,mBAAmB,EACpB,wBAAoB;AAOrB,OAAO,KAAK,EAAE,yBAAyB,EAAE,oBAAgB;AAIzD,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,GAAG,CAAC;IACV,kBAAkB,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC;IAC9C,SAAS,EAAE,iCAAiC,CAAC;IAC7C,MAAM,EAAE,mBAAmB,CAAC,yBAAyB,CAAC,EAAE,CAAC;IACzD,WAAW,EAAE,eAAe,CAAC;CAC9B,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CAwCf"}
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { StatusTypes } from "@metamask/bridge-controller";
|
|
2
|
-
import { toHex } from "@metamask/controller-utils";
|
|
3
|
-
import { createModuleLogger } from "@metamask/utils";
|
|
4
|
-
import $lodash from "lodash";
|
|
5
|
-
const { cloneDeep } = $lodash;
|
|
6
|
-
import { projectLogger } from "../../logger.mjs";
|
|
7
|
-
import { collectTransactionIds, updateTransaction, waitForTransactionConfirmed } from "../../utils/transaction.mjs";
|
|
8
|
-
import { refreshQuote } from "./bridge-quotes.mjs";
|
|
9
|
-
const log = createModuleLogger(projectLogger, 'bridge-strategy');
|
|
10
|
-
/**
|
|
11
|
-
* Submit multiple bridge quotes sequentially and wait for their completion.
|
|
12
|
-
*
|
|
13
|
-
* @param request - The request object containing necessary data.
|
|
14
|
-
* @returns An object containing the transaction hash if available.
|
|
15
|
-
*/
|
|
16
|
-
export async function submitBridgeQuotes(request) {
|
|
17
|
-
const { quotes, messenger, transaction } = request;
|
|
18
|
-
if (!quotes?.length) {
|
|
19
|
-
log('No quotes found');
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
// Currently we only support a single source meaning we only check the first quote.
|
|
23
|
-
const isSameChain = quotes[0].original.quote.srcChainId ===
|
|
24
|
-
quotes[0].original.quote.destChainId;
|
|
25
|
-
if (isSameChain) {
|
|
26
|
-
log('Ignoring quotes as source is same chain', quotes[0].original.quote.srcChainId);
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
let index = 0;
|
|
30
|
-
for (const quote of quotes) {
|
|
31
|
-
log('Submitting bridge', index, quote);
|
|
32
|
-
let finalQuote = quote.original;
|
|
33
|
-
if (index > 0) {
|
|
34
|
-
try {
|
|
35
|
-
finalQuote = await refreshQuote(quote, messenger, transaction);
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
log('Failed to refresh subsequent quote before submit', error);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
await submitBridgeTransaction(request, finalQuote);
|
|
42
|
-
index += 1;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Submit a bridge transaction and wait for it to complete.
|
|
47
|
-
*
|
|
48
|
-
* @param request - The request object containing necessary data.
|
|
49
|
-
* @param originalQuote - The original quote to submit.
|
|
50
|
-
*/
|
|
51
|
-
async function submitBridgeTransaction(request, originalQuote) {
|
|
52
|
-
const { isSmartTransaction, messenger, from, transaction } = request;
|
|
53
|
-
const quote = cloneDeep(originalQuote);
|
|
54
|
-
const sourceChainId = toHex(quote.quote.srcChainId);
|
|
55
|
-
const isSTX = isSmartTransaction(sourceChainId);
|
|
56
|
-
const requiredTransactionIds = [];
|
|
57
|
-
const bridgeTransactionIdCollector = collectTransactionIds(sourceChainId, from, messenger, (id) => updateTransaction({
|
|
58
|
-
transactionId: transaction.id,
|
|
59
|
-
messenger,
|
|
60
|
-
note: 'Add required transaction ID',
|
|
61
|
-
}, (transactionMeta) => {
|
|
62
|
-
transactionMeta.requiredTransactionIds ?? (transactionMeta.requiredTransactionIds = []);
|
|
63
|
-
transactionMeta?.requiredTransactionIds.push(id);
|
|
64
|
-
requiredTransactionIds.push(id);
|
|
65
|
-
}));
|
|
66
|
-
const tokenAmountValues = {
|
|
67
|
-
amount: '0',
|
|
68
|
-
valueInCurrency: null,
|
|
69
|
-
usd: null,
|
|
70
|
-
};
|
|
71
|
-
const metadata = {
|
|
72
|
-
gasFee: {
|
|
73
|
-
effective: tokenAmountValues,
|
|
74
|
-
max: tokenAmountValues,
|
|
75
|
-
total: tokenAmountValues,
|
|
76
|
-
},
|
|
77
|
-
totalNetworkFee: tokenAmountValues,
|
|
78
|
-
totalMaxNetworkFee: tokenAmountValues,
|
|
79
|
-
toTokenAmount: tokenAmountValues,
|
|
80
|
-
minToTokenAmount: tokenAmountValues,
|
|
81
|
-
adjustedReturn: tokenAmountValues,
|
|
82
|
-
sentAmount: tokenAmountValues,
|
|
83
|
-
swapRate: '0',
|
|
84
|
-
cost: tokenAmountValues,
|
|
85
|
-
};
|
|
86
|
-
const result = await messenger.call('BridgeStatusController:submitTx', from, { ...quote, ...metadata }, isSTX);
|
|
87
|
-
bridgeTransactionIdCollector.end();
|
|
88
|
-
log('Bridge transaction submitted', {
|
|
89
|
-
requiredTransactionIds,
|
|
90
|
-
result,
|
|
91
|
-
});
|
|
92
|
-
await Promise.all(requiredTransactionIds.map((id) => waitForTransactionConfirmed(id, messenger)));
|
|
93
|
-
log('All required transactions confirmed', requiredTransactionIds);
|
|
94
|
-
const { id: bridgeTransactionId } = result;
|
|
95
|
-
log('Waiting for bridge completion', bridgeTransactionId);
|
|
96
|
-
await waitForBridgeCompletion(bridgeTransactionId, messenger);
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Wait for a bridge transaction to complete.
|
|
100
|
-
*
|
|
101
|
-
* @param bridgeTransactionId - The bridge transaction ID.
|
|
102
|
-
* @param messenger - The controller messenger.
|
|
103
|
-
*/
|
|
104
|
-
async function waitForBridgeCompletion(bridgeTransactionId, messenger) {
|
|
105
|
-
return new Promise((resolve, reject) => {
|
|
106
|
-
const isComplete = (item, fn) => {
|
|
107
|
-
const status = item?.status?.status;
|
|
108
|
-
log('Checking bridge status', status ?? 'missing');
|
|
109
|
-
if (status === StatusTypes.COMPLETE) {
|
|
110
|
-
fn?.();
|
|
111
|
-
resolve();
|
|
112
|
-
return true;
|
|
113
|
-
}
|
|
114
|
-
if (status === StatusTypes.FAILED) {
|
|
115
|
-
fn?.();
|
|
116
|
-
reject(new Error('Bridge failed'));
|
|
117
|
-
return true;
|
|
118
|
-
}
|
|
119
|
-
return false;
|
|
120
|
-
};
|
|
121
|
-
const initialState = messenger.call('BridgeStatusController:getState');
|
|
122
|
-
const initialTx = initialState.txHistory[bridgeTransactionId];
|
|
123
|
-
if (isComplete(initialTx)) {
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
const handler = (bridgeHistory) => {
|
|
127
|
-
const unsubscribe = () => messenger.unsubscribe('BridgeStatusController:stateChange', handler);
|
|
128
|
-
isComplete(bridgeHistory, unsubscribe);
|
|
129
|
-
};
|
|
130
|
-
messenger.subscribe('BridgeStatusController:stateChange', handler, (state) => state.txHistory[bridgeTransactionId]);
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
//# sourceMappingURL=bridge-submit.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-submit.mjs","sourceRoot":"","sources":["../../../src/strategy/bridge/bridge-submit.ts"],"names":[],"mappings":"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","sourcesContent":["import { StatusTypes } from '@metamask/bridge-controller';\nimport type { QuoteMetadata } from '@metamask/bridge-controller';\nimport type { QuoteResponse } from '@metamask/bridge-controller';\nimport type { BridgeHistoryItem } from '@metamask/bridge-status-controller';\nimport { toHex } from '@metamask/controller-utils';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\nimport { cloneDeep } from 'lodash';\n\nimport { projectLogger } from '../../logger';\nimport type {\n TransactionPayControllerMessenger,\n TransactionPayQuote,\n} from '../../types';\nimport {\n collectTransactionIds,\n updateTransaction,\n waitForTransactionConfirmed,\n} from '../../utils/transaction';\nimport { refreshQuote } from './bridge-quotes';\nimport type { TransactionPayBridgeQuote } from './types';\n\nconst log = createModuleLogger(projectLogger, 'bridge-strategy');\n\nexport type SubmitBridgeQuotesRequest = {\n from: Hex;\n isSmartTransaction: (chainId: Hex) => boolean;\n messenger: TransactionPayControllerMessenger;\n quotes: TransactionPayQuote<TransactionPayBridgeQuote>[];\n transaction: TransactionMeta;\n};\n\n/**\n * Submit multiple bridge quotes sequentially and wait for their completion.\n *\n * @param request - The request object containing necessary data.\n * @returns An object containing the transaction hash if available.\n */\nexport async function submitBridgeQuotes(\n request: SubmitBridgeQuotesRequest,\n): Promise<void> {\n const { quotes, messenger, transaction } = request;\n\n if (!quotes?.length) {\n log('No quotes found');\n return;\n }\n\n // Currently we only support a single source meaning we only check the first quote.\n const isSameChain =\n quotes[0].original.quote.srcChainId ===\n quotes[0].original.quote.destChainId;\n\n if (isSameChain) {\n log(\n 'Ignoring quotes as source is same chain',\n quotes[0].original.quote.srcChainId,\n );\n return;\n }\n\n let index = 0;\n\n for (const quote of quotes) {\n log('Submitting bridge', index, quote);\n\n let finalQuote = quote.original;\n\n if (index > 0) {\n try {\n finalQuote = await refreshQuote(quote, messenger, transaction);\n } catch (error) {\n log('Failed to refresh subsequent quote before submit', error);\n }\n }\n\n await submitBridgeTransaction(request, finalQuote);\n\n index += 1;\n }\n}\n\n/**\n * Submit a bridge transaction and wait for it to complete.\n *\n * @param request - The request object containing necessary data.\n * @param originalQuote - The original quote to submit.\n */\nasync function submitBridgeTransaction(\n request: SubmitBridgeQuotesRequest,\n originalQuote: QuoteResponse,\n): Promise<void> {\n const { isSmartTransaction, messenger, from, transaction } = request;\n const quote = cloneDeep(originalQuote);\n const sourceChainId = toHex(quote.quote.srcChainId);\n const isSTX = isSmartTransaction(sourceChainId);\n const requiredTransactionIds: string[] = [];\n\n const bridgeTransactionIdCollector = collectTransactionIds(\n sourceChainId,\n from,\n messenger,\n (id) =>\n updateTransaction(\n {\n transactionId: transaction.id,\n messenger,\n note: 'Add required transaction ID',\n },\n (transactionMeta) => {\n transactionMeta.requiredTransactionIds ??= [];\n transactionMeta?.requiredTransactionIds.push(id);\n requiredTransactionIds.push(id);\n },\n ),\n );\n\n const tokenAmountValues = {\n amount: '0',\n valueInCurrency: null,\n usd: null,\n };\n\n const metadata: QuoteMetadata = {\n gasFee: {\n effective: tokenAmountValues,\n max: tokenAmountValues,\n total: tokenAmountValues,\n },\n totalNetworkFee: tokenAmountValues,\n totalMaxNetworkFee: tokenAmountValues,\n toTokenAmount: tokenAmountValues,\n minToTokenAmount: tokenAmountValues,\n adjustedReturn: tokenAmountValues,\n sentAmount: tokenAmountValues,\n swapRate: '0',\n cost: tokenAmountValues,\n };\n\n const result = await messenger.call(\n 'BridgeStatusController:submitTx',\n from,\n { ...quote, ...metadata },\n isSTX,\n );\n\n bridgeTransactionIdCollector.end();\n\n log('Bridge transaction submitted', {\n requiredTransactionIds,\n result,\n });\n\n await Promise.all(\n requiredTransactionIds.map((id) =>\n waitForTransactionConfirmed(id, messenger),\n ),\n );\n\n log('All required transactions confirmed', requiredTransactionIds);\n\n const { id: bridgeTransactionId } = result;\n\n log('Waiting for bridge completion', bridgeTransactionId);\n\n await waitForBridgeCompletion(bridgeTransactionId, messenger);\n}\n\n/**\n * Wait for a bridge transaction to complete.\n *\n * @param bridgeTransactionId - The bridge transaction ID.\n * @param messenger - The controller messenger.\n */\nasync function waitForBridgeCompletion(\n bridgeTransactionId: string,\n messenger: TransactionPayControllerMessenger,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const isComplete = (item?: BridgeHistoryItem, fn?: () => void): boolean => {\n const status = item?.status?.status;\n\n log('Checking bridge status', status ?? 'missing');\n\n if (status === StatusTypes.COMPLETE) {\n fn?.();\n resolve();\n return true;\n }\n\n if (status === StatusTypes.FAILED) {\n fn?.();\n reject(new Error('Bridge failed'));\n return true;\n }\n\n return false;\n };\n\n const initialState = messenger.call('BridgeStatusController:getState');\n\n const initialTx = initialState.txHistory[bridgeTransactionId];\n\n if (isComplete(initialTx)) {\n return;\n }\n\n const handler = (bridgeHistory?: BridgeHistoryItem): void => {\n const unsubscribe = (): void =>\n messenger.unsubscribe('BridgeStatusController:stateChange', handler);\n\n isComplete(bridgeHistory, unsubscribe);\n };\n\n messenger.subscribe(\n 'BridgeStatusController:stateChange',\n handler,\n (state) => state.txHistory[bridgeTransactionId],\n );\n });\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.cjs","sourceRoot":"","sources":["../../../src/strategy/bridge/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { QuoteResponse } from '@metamask/bridge-controller';\n\nimport type { QuoteRequest } from '../../types';\n\nexport type TransactionPayBridgeQuote = QuoteResponse & {\n metrics?: {\n attempts: number;\n buffer: number;\n latency: number;\n };\n request: BridgeQuoteRequest;\n};\n\nexport type BridgeQuoteRequest = QuoteRequest & {\n attemptsMax: number;\n bufferInitial: number;\n bufferStep: number;\n bufferSubsequent: number;\n slippage: number;\n sourceBalanceRaw: string;\n};\n\nexport type BridgeFeatureFlags = {\n chains?: {\n [chainId: number]: {\n refreshRate?: number;\n };\n };\n refreshRate?: number;\n};\n"]}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import type { QuoteResponse } from "@metamask/bridge-controller";
|
|
2
|
-
import type { QuoteRequest } from "../../types.cjs";
|
|
3
|
-
export type TransactionPayBridgeQuote = QuoteResponse & {
|
|
4
|
-
metrics?: {
|
|
5
|
-
attempts: number;
|
|
6
|
-
buffer: number;
|
|
7
|
-
latency: number;
|
|
8
|
-
};
|
|
9
|
-
request: BridgeQuoteRequest;
|
|
10
|
-
};
|
|
11
|
-
export type BridgeQuoteRequest = QuoteRequest & {
|
|
12
|
-
attemptsMax: number;
|
|
13
|
-
bufferInitial: number;
|
|
14
|
-
bufferStep: number;
|
|
15
|
-
bufferSubsequent: number;
|
|
16
|
-
slippage: number;
|
|
17
|
-
sourceBalanceRaw: string;
|
|
18
|
-
};
|
|
19
|
-
export type BridgeFeatureFlags = {
|
|
20
|
-
chains?: {
|
|
21
|
-
[chainId: number]: {
|
|
22
|
-
refreshRate?: number;
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
refreshRate?: number;
|
|
26
|
-
};
|
|
27
|
-
//# sourceMappingURL=types.d.cts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../../../src/strategy/bridge/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,oCAAoC;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,wBAAoB;AAEhD,MAAM,MAAM,yBAAyB,GAAG,aAAa,GAAG;IACtD,OAAO,CAAC,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,EAAE,kBAAkB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE;QACP,CAAC,OAAO,EAAE,MAAM,GAAG;YACjB,WAAW,CAAC,EAAE,MAAM,CAAC;SACtB,CAAC;KACH,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import type { QuoteResponse } from "@metamask/bridge-controller";
|
|
2
|
-
import type { QuoteRequest } from "../../types.mjs";
|
|
3
|
-
export type TransactionPayBridgeQuote = QuoteResponse & {
|
|
4
|
-
metrics?: {
|
|
5
|
-
attempts: number;
|
|
6
|
-
buffer: number;
|
|
7
|
-
latency: number;
|
|
8
|
-
};
|
|
9
|
-
request: BridgeQuoteRequest;
|
|
10
|
-
};
|
|
11
|
-
export type BridgeQuoteRequest = QuoteRequest & {
|
|
12
|
-
attemptsMax: number;
|
|
13
|
-
bufferInitial: number;
|
|
14
|
-
bufferStep: number;
|
|
15
|
-
bufferSubsequent: number;
|
|
16
|
-
slippage: number;
|
|
17
|
-
sourceBalanceRaw: string;
|
|
18
|
-
};
|
|
19
|
-
export type BridgeFeatureFlags = {
|
|
20
|
-
chains?: {
|
|
21
|
-
[chainId: number]: {
|
|
22
|
-
refreshRate?: number;
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
refreshRate?: number;
|
|
26
|
-
};
|
|
27
|
-
//# sourceMappingURL=types.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.mts","sourceRoot":"","sources":["../../../src/strategy/bridge/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,oCAAoC;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,wBAAoB;AAEhD,MAAM,MAAM,yBAAyB,GAAG,aAAa,GAAG;IACtD,OAAO,CAAC,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,EAAE,kBAAkB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE;QACP,CAAC,OAAO,EAAE,MAAM,GAAG;YACjB,WAAW,CAAC,EAAE,MAAM,CAAC;SACtB,CAAC;KACH,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.mjs","sourceRoot":"","sources":["../../../src/strategy/bridge/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { QuoteResponse } from '@metamask/bridge-controller';\n\nimport type { QuoteRequest } from '../../types';\n\nexport type TransactionPayBridgeQuote = QuoteResponse & {\n metrics?: {\n attempts: number;\n buffer: number;\n latency: number;\n };\n request: BridgeQuoteRequest;\n};\n\nexport type BridgeQuoteRequest = QuoteRequest & {\n attemptsMax: number;\n bufferInitial: number;\n bufferStep: number;\n bufferSubsequent: number;\n slippage: number;\n sourceBalanceRaw: string;\n};\n\nexport type BridgeFeatureFlags = {\n chains?: {\n [chainId: number]: {\n refreshRate?: number;\n };\n };\n refreshRate?: number;\n};\n"]}
|
|
@@ -1,75 +0,0 @@
|
|
|
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
|
-
metaMask: { fiat: '0', usd: '0' },
|
|
28
|
-
provider: { fiat: '1.23', usd: '1.23' },
|
|
29
|
-
sourceNetwork: {
|
|
30
|
-
estimate: {
|
|
31
|
-
human: '2.34',
|
|
32
|
-
fiat: '2.34',
|
|
33
|
-
usd: '2.34',
|
|
34
|
-
raw: '234000',
|
|
35
|
-
},
|
|
36
|
-
max: {
|
|
37
|
-
human: '2.35',
|
|
38
|
-
fiat: '2.35',
|
|
39
|
-
usd: '2.35',
|
|
40
|
-
raw: '235000',
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
targetNetwork: {
|
|
44
|
-
fiat: '3.45',
|
|
45
|
-
usd: '3.45',
|
|
46
|
-
},
|
|
47
|
-
},
|
|
48
|
-
original: undefined,
|
|
49
|
-
request: requests[0],
|
|
50
|
-
sourceAmount: {
|
|
51
|
-
human: '4.56',
|
|
52
|
-
fiat: '4.56',
|
|
53
|
-
raw: '456000',
|
|
54
|
-
usd: '4.56',
|
|
55
|
-
},
|
|
56
|
-
targetAmount: {
|
|
57
|
-
fiat: '5.67',
|
|
58
|
-
usd: '5.67',
|
|
59
|
-
},
|
|
60
|
-
strategy: __1.TransactionPayStrategy.Test,
|
|
61
|
-
},
|
|
62
|
-
];
|
|
63
|
-
}
|
|
64
|
-
async execute(request) {
|
|
65
|
-
const { quotes } = request;
|
|
66
|
-
log('Executing', quotes);
|
|
67
|
-
await __classPrivateFieldGet(this, _TestStrategy_instances, "m", _TestStrategy_timeout).call(this, 5000);
|
|
68
|
-
return { transactionHash: undefined };
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
exports.TestStrategy = TestStrategy;
|
|
72
|
-
_TestStrategy_instances = new WeakSet(), _TestStrategy_timeout = function _TestStrategy_timeout(ms) {
|
|
73
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
74
|
-
};
|
|
75
|
-
//# sourceMappingURL=TestStrategy.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
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;;IAoEA,CAAC;IAnEC,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,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;oBACjC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;oBACvC,aAAa,EAAE;wBACb,QAAQ,EAAE;4BACR,KAAK,EAAE,MAAM;4BACb,IAAI,EAAE,MAAM;4BACZ,GAAG,EAAE,MAAM;4BACX,GAAG,EAAE,QAAQ;yBACd;wBACD,GAAG,EAAE;4BACH,KAAK,EAAE,MAAM;4BACb,IAAI,EAAE,MAAM;4BACZ,GAAG,EAAE,MAAM;4BACX,GAAG,EAAE,QAAQ;yBACd;qBACF;oBACD,aAAa,EAAE;wBACb,IAAI,EAAE,MAAM;wBACZ,GAAG,EAAE,MAAM;qBACZ;iBACF;gBACD,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACpB,YAAY,EAAE;oBACZ,KAAK,EAAE,MAAM;oBACb,IAAI,EAAE,MAAM;oBACZ,GAAG,EAAE,QAAQ;oBACb,GAAG,EAAE,MAAM;iBACZ;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,MAAM;oBACZ,GAAG,EAAE,MAAM;iBACZ;gBACD,QAAQ,EAAE,0BAAsB,CAAC,IAAI;aACtC;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAAwC;QAExC,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;AApED,oCAoEC;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 metaMask: { fiat: '0', usd: '0' },\n provider: { fiat: '1.23', usd: '1.23' },\n sourceNetwork: {\n estimate: {\n human: '2.34',\n fiat: '2.34',\n usd: '2.34',\n raw: '234000',\n },\n max: {\n human: '2.35',\n fiat: '2.35',\n usd: '2.35',\n raw: '235000',\n },\n },\n targetNetwork: {\n fiat: '3.45',\n usd: '3.45',\n },\n },\n original: undefined,\n request: requests[0],\n sourceAmount: {\n human: '4.56',\n fiat: '4.56',\n raw: '456000',\n usd: '4.56',\n },\n targetAmount: {\n fiat: '5.67',\n usd: '5.67',\n },\n strategy: TransactionPayStrategy.Test,\n },\n ];\n }\n\n async execute(\n request: PayStrategyExecuteRequest<void>,\n ): ReturnType<PayStrategy<void>['execute']> {\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): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n"]}
|
|
@@ -1,7 +0,0 @@
|
|
|
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>): ReturnType<PayStrategy<void>['execute']>;
|
|
6
|
-
}
|
|
7
|
-
//# sourceMappingURL=TestStrategy.d.cts.map
|
|
@@ -1 +0,0 @@
|
|
|
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;IAkDjC,OAAO,CACX,OAAO,EAAE,yBAAyB,CAAC,IAAI,CAAC,GACvC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;CAa5C"}
|
|
@@ -1,7 +0,0 @@
|
|
|
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>): ReturnType<PayStrategy<void>['execute']>;
|
|
6
|
-
}
|
|
7
|
-
//# sourceMappingURL=TestStrategy.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
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;IAkDjC,OAAO,CACX,OAAO,EAAE,yBAAyB,CAAC,IAAI,CAAC,GACvC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;CAa5C"}
|
|
@@ -1,71 +0,0 @@
|
|
|
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
|
-
metaMask: { fiat: '0', usd: '0' },
|
|
25
|
-
provider: { fiat: '1.23', usd: '1.23' },
|
|
26
|
-
sourceNetwork: {
|
|
27
|
-
estimate: {
|
|
28
|
-
human: '2.34',
|
|
29
|
-
fiat: '2.34',
|
|
30
|
-
usd: '2.34',
|
|
31
|
-
raw: '234000',
|
|
32
|
-
},
|
|
33
|
-
max: {
|
|
34
|
-
human: '2.35',
|
|
35
|
-
fiat: '2.35',
|
|
36
|
-
usd: '2.35',
|
|
37
|
-
raw: '235000',
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
targetNetwork: {
|
|
41
|
-
fiat: '3.45',
|
|
42
|
-
usd: '3.45',
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
original: undefined,
|
|
46
|
-
request: requests[0],
|
|
47
|
-
sourceAmount: {
|
|
48
|
-
human: '4.56',
|
|
49
|
-
fiat: '4.56',
|
|
50
|
-
raw: '456000',
|
|
51
|
-
usd: '4.56',
|
|
52
|
-
},
|
|
53
|
-
targetAmount: {
|
|
54
|
-
fiat: '5.67',
|
|
55
|
-
usd: '5.67',
|
|
56
|
-
},
|
|
57
|
-
strategy: TransactionPayStrategy.Test,
|
|
58
|
-
},
|
|
59
|
-
];
|
|
60
|
-
}
|
|
61
|
-
async execute(request) {
|
|
62
|
-
const { quotes } = request;
|
|
63
|
-
log('Executing', quotes);
|
|
64
|
-
await __classPrivateFieldGet(this, _TestStrategy_instances, "m", _TestStrategy_timeout).call(this, 5000);
|
|
65
|
-
return { transactionHash: undefined };
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
_TestStrategy_instances = new WeakSet(), _TestStrategy_timeout = function _TestStrategy_timeout(ms) {
|
|
69
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
70
|
-
};
|
|
71
|
-
//# sourceMappingURL=TestStrategy.mjs.map
|