@metamask/bridge-status-controller 33.0.0 → 35.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 +31 -1
- package/dist/bridge-status-controller.cjs +142 -110
- package/dist/bridge-status-controller.cjs.map +1 -1
- package/dist/bridge-status-controller.d.cts +4 -4
- package/dist/bridge-status-controller.d.cts.map +1 -1
- package/dist/bridge-status-controller.d.mts +4 -4
- package/dist/bridge-status-controller.d.mts.map +1 -1
- package/dist/bridge-status-controller.mjs +144 -112
- package/dist/bridge-status-controller.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +1 -0
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +1 -0
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/gas.cjs +34 -1
- package/dist/utils/gas.cjs.map +1 -1
- package/dist/utils/gas.d.cts +7 -0
- package/dist/utils/gas.d.cts.map +1 -1
- package/dist/utils/gas.d.mts +7 -0
- package/dist/utils/gas.d.mts.map +1 -1
- package/dist/utils/gas.mjs +32 -0
- package/dist/utils/gas.mjs.map +1 -1
- package/dist/utils/metrics.cjs +9 -4
- package/dist/utils/metrics.cjs.map +1 -1
- package/dist/utils/metrics.d.cts +1 -1
- package/dist/utils/metrics.d.cts.map +1 -1
- package/dist/utils/metrics.d.mts +1 -1
- package/dist/utils/metrics.d.mts.map +1 -1
- package/dist/utils/metrics.mjs +9 -4
- package/dist/utils/metrics.mjs.map +1 -1
- package/dist/utils/transaction.cjs +100 -29
- package/dist/utils/transaction.cjs.map +1 -1
- package/dist/utils/transaction.d.cts +80 -34
- package/dist/utils/transaction.d.cts.map +1 -1
- package/dist/utils/transaction.d.mts +80 -34
- package/dist/utils/transaction.d.mts.map +1 -1
- package/dist/utils/transaction.mjs +96 -28
- package/dist/utils/transaction.mjs.map +1 -1
- package/package.json +8 -9
|
@@ -2,9 +2,18 @@ import type { AccountsControllerState } from "@metamask/accounts-controller";
|
|
|
2
2
|
import type { TxData } from "@metamask/bridge-controller";
|
|
3
3
|
import { type QuoteMetadata, type QuoteResponse } from "@metamask/bridge-controller";
|
|
4
4
|
import { SolScope } from "@metamask/keyring-api";
|
|
5
|
-
import {
|
|
6
|
-
import type
|
|
5
|
+
import type { BatchTransactionParams, TransactionController } from "@metamask/transaction-controller";
|
|
6
|
+
import { TransactionType, type TransactionMeta } from "@metamask/transaction-controller";
|
|
7
|
+
import type { BridgeStatusControllerMessenger, SolanaTransactionMeta } from "../types.cjs";
|
|
7
8
|
export declare const generateActionId: () => string;
|
|
9
|
+
export declare const getUSDTAllowanceResetTx: (messagingSystem: BridgeStatusControllerMessenger, quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata) => Promise<{
|
|
10
|
+
data: string;
|
|
11
|
+
value: string;
|
|
12
|
+
to: string;
|
|
13
|
+
from: string;
|
|
14
|
+
gasLimit: number | null;
|
|
15
|
+
chainId: number;
|
|
16
|
+
} | undefined>;
|
|
8
17
|
export declare const getStatusRequestParams: (quoteResponse: QuoteResponse<string | TxData>) => {
|
|
9
18
|
bridgeId: string;
|
|
10
19
|
bridge: string;
|
|
@@ -149,38 +158,6 @@ export declare const handleSolanaTxResponse: (snapResponse: string | {
|
|
|
149
158
|
signature: string;
|
|
150
159
|
}, quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata, selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string]) => TransactionMeta & SolanaTransactionMeta;
|
|
151
160
|
export declare const handleLineaDelay: (quoteResponse: QuoteResponse<TxData | string>) => Promise<void>;
|
|
152
|
-
export declare const getKeyringRequest: (quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata, selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string]) => {
|
|
153
|
-
origin: string;
|
|
154
|
-
snapId: never;
|
|
155
|
-
handler: never;
|
|
156
|
-
request: {
|
|
157
|
-
id: string;
|
|
158
|
-
jsonrpc: string;
|
|
159
|
-
method: string;
|
|
160
|
-
params: {
|
|
161
|
-
request: {
|
|
162
|
-
params: {
|
|
163
|
-
account: {
|
|
164
|
-
address: string;
|
|
165
|
-
};
|
|
166
|
-
transaction: string | ({
|
|
167
|
-
data: string;
|
|
168
|
-
value: string;
|
|
169
|
-
to: string;
|
|
170
|
-
from: string;
|
|
171
|
-
gasLimit: number | null;
|
|
172
|
-
chainId: number;
|
|
173
|
-
} & string);
|
|
174
|
-
scope: SolScope;
|
|
175
|
-
};
|
|
176
|
-
method: string;
|
|
177
|
-
};
|
|
178
|
-
id: string;
|
|
179
|
-
account: string;
|
|
180
|
-
scope: SolScope;
|
|
181
|
-
};
|
|
182
|
-
};
|
|
183
|
-
};
|
|
184
161
|
export declare const getClientRequest: (quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata, selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string]) => {
|
|
185
162
|
origin: string;
|
|
186
163
|
snapId: never;
|
|
@@ -205,4 +182,73 @@ export declare const getClientRequest: (quoteResponse: Omit<QuoteResponse<string
|
|
|
205
182
|
};
|
|
206
183
|
};
|
|
207
184
|
};
|
|
185
|
+
export declare const toBatchTxParams: (disable7702: boolean, { chainId, gasLimit, ...trade }: TxData, { maxFeePerGas, maxPriorityFeePerGas, gas, }: {
|
|
186
|
+
maxFeePerGas?: string | undefined;
|
|
187
|
+
maxPriorityFeePerGas?: string | undefined;
|
|
188
|
+
gas?: string | undefined;
|
|
189
|
+
}) => BatchTransactionParams;
|
|
190
|
+
export declare const getAddTransactionBatchParams: ({ messagingSystem, isBridgeTx, approval, resetApproval, trade, quoteResponse: { quote: { feeData: { txFee }, gasIncluded, }, }, requireApproval, estimateGasFeeFn, }: {
|
|
191
|
+
messagingSystem: BridgeStatusControllerMessenger;
|
|
192
|
+
isBridgeTx: boolean;
|
|
193
|
+
trade: TxData;
|
|
194
|
+
quoteResponse: Omit<QuoteResponse, 'approval' | 'trade'> & QuoteMetadata;
|
|
195
|
+
estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee;
|
|
196
|
+
approval?: {
|
|
197
|
+
data: string;
|
|
198
|
+
value: string;
|
|
199
|
+
to: string;
|
|
200
|
+
from: string;
|
|
201
|
+
gasLimit: number | null;
|
|
202
|
+
chainId: number;
|
|
203
|
+
} | undefined;
|
|
204
|
+
resetApproval?: {
|
|
205
|
+
data: string;
|
|
206
|
+
value: string;
|
|
207
|
+
to: string;
|
|
208
|
+
from: string;
|
|
209
|
+
gasLimit: number | null;
|
|
210
|
+
chainId: number;
|
|
211
|
+
} | undefined;
|
|
212
|
+
requireApproval?: boolean | undefined;
|
|
213
|
+
}) => Promise<import("@metamask/transaction-controller").TransactionBatchRequest>;
|
|
214
|
+
export declare const findAndUpdateTransactionsInBatch: ({ messagingSystem, updateTransactionFn, batchId, txDataByType, }: {
|
|
215
|
+
messagingSystem: BridgeStatusControllerMessenger;
|
|
216
|
+
updateTransactionFn: typeof TransactionController.prototype.updateTransaction;
|
|
217
|
+
batchId: string;
|
|
218
|
+
txDataByType: {
|
|
219
|
+
batch?: string | undefined;
|
|
220
|
+
bridge?: string | undefined;
|
|
221
|
+
bridgeApproval?: string | undefined;
|
|
222
|
+
cancel?: string | undefined;
|
|
223
|
+
contractInteraction?: string | undefined;
|
|
224
|
+
contractDeployment?: string | undefined;
|
|
225
|
+
eth_decrypt?: string | undefined;
|
|
226
|
+
eth_getEncryptionPublicKey?: string | undefined;
|
|
227
|
+
gas_payment?: string | undefined;
|
|
228
|
+
incoming?: string | undefined;
|
|
229
|
+
lendingDeposit?: string | undefined;
|
|
230
|
+
lendingWithdraw?: string | undefined;
|
|
231
|
+
personal_sign?: string | undefined;
|
|
232
|
+
retry?: string | undefined;
|
|
233
|
+
revokeDelegation?: string | undefined;
|
|
234
|
+
simpleSend?: string | undefined;
|
|
235
|
+
eth_signTypedData?: string | undefined;
|
|
236
|
+
smart?: string | undefined;
|
|
237
|
+
stakingClaim?: string | undefined;
|
|
238
|
+
stakingDeposit?: string | undefined;
|
|
239
|
+
stakingUnstake?: string | undefined;
|
|
240
|
+
swap?: string | undefined;
|
|
241
|
+
swapAndSend?: string | undefined;
|
|
242
|
+
swapApproval?: string | undefined;
|
|
243
|
+
approve?: string | undefined;
|
|
244
|
+
safetransferfrom?: string | undefined;
|
|
245
|
+
transfer?: string | undefined;
|
|
246
|
+
transferfrom?: string | undefined;
|
|
247
|
+
setapprovalforall?: string | undefined;
|
|
248
|
+
increaseAllowance?: string | undefined;
|
|
249
|
+
};
|
|
250
|
+
}) => {
|
|
251
|
+
approvalMeta?: TransactionMeta | undefined;
|
|
252
|
+
tradeMeta?: TransactionMeta | undefined;
|
|
253
|
+
};
|
|
208
254
|
//# sourceMappingURL=transaction.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.cts","sourceRoot":"","sources":["../../src/utils/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,sCAAsC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,oCAAoC;AAC1D,OAAO,
|
|
1
|
+
{"version":3,"file":"transaction.d.cts","sourceRoot":"","sources":["../../src/utils/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,sCAAsC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,oCAAoC;AAC1D,OAAO,EAML,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,oCAAoC;AAErC,OAAO,EAAE,QAAQ,EAAE,8BAA8B;AACjD,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACtB,yCAAyC;AAC1C,OAAO,EAEL,eAAe,EACf,KAAK,eAAe,EACrB,yCAAyC;AAQ1C,OAAO,KAAK,EACV,+BAA+B,EAC/B,qBAAqB,EACtB,qBAAiB;AAElB,eAAO,MAAM,gBAAgB,cAAgD,CAAC;AAE9E,eAAO,MAAM,uBAAuB,oEAEnB,cAAc,MAAM,GAAG,MAAM,CAAC,GAAG,aAAa;;;;;;;cAqB9D,CAAC;AAEF,eAAO,MAAM,sBAAsB,kBAClB,cAAc,MAAM,GAAG,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAU9C,CAAC;AAEF,eAAO,MAAM,eAAe,kBACX,KAAK,cAAc,MAAM,GAAG,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,GACvE,aAAa,iBACA,MAAM,KACpB,KACD,eAAe,EACf,iBAAiB,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAmB1D,CAAC;AAEF,eAAO,MAAM,sBAAsB,iBAE7B,MAAM,GACN;IAAE,MAAM,EAAE,OAAO,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAClC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBACV,KAAK,cAAc,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,aAAa,mBACrD,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAC/E,eAAe,GAAG,qBAsDpB,CAAC;AAEF,eAAO,MAAM,gBAAgB,kBACZ,cAAc,MAAM,GAAG,MAAM,CAAC,kBAY9C,CAAC;AAEF,eAAO,MAAM,gBAAgB,kBACZ,KAAK,cAAc,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,aAAa,mBACrD,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;CAmBjF,CAAC;AAEF,eAAO,MAAM,eAAe,gBACb,OAAO,mCACa,MAAM;;;;MAMtC,sBAiBF,CAAC;AAEF,eAAO,MAAM,4BAA4B;;gBAgB3B,OAAO;WACZ,MAAM;mBACE,KAAK,aAAa,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,aAAa;sBACtD,OAAO,sBAAsB,SAAS,CAAC,cAAc;;;;;;;;;;;;;;;;;;iFAkFxE,CAAC;AAEF,eAAO,MAAM,gCAAgC;;yBAOtB,OAAO,sBAAsB,SAAS,CAAC,iBAAiB;aACpE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkChB,CAAC"}
|
|
@@ -2,9 +2,18 @@ import type { AccountsControllerState } from "@metamask/accounts-controller";
|
|
|
2
2
|
import type { TxData } from "@metamask/bridge-controller";
|
|
3
3
|
import { type QuoteMetadata, type QuoteResponse } from "@metamask/bridge-controller";
|
|
4
4
|
import { SolScope } from "@metamask/keyring-api";
|
|
5
|
-
import {
|
|
6
|
-
import type
|
|
5
|
+
import type { BatchTransactionParams, TransactionController } from "@metamask/transaction-controller";
|
|
6
|
+
import { TransactionType, type TransactionMeta } from "@metamask/transaction-controller";
|
|
7
|
+
import type { BridgeStatusControllerMessenger, SolanaTransactionMeta } from "../types.mjs";
|
|
7
8
|
export declare const generateActionId: () => string;
|
|
9
|
+
export declare const getUSDTAllowanceResetTx: (messagingSystem: BridgeStatusControllerMessenger, quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata) => Promise<{
|
|
10
|
+
data: string;
|
|
11
|
+
value: string;
|
|
12
|
+
to: string;
|
|
13
|
+
from: string;
|
|
14
|
+
gasLimit: number | null;
|
|
15
|
+
chainId: number;
|
|
16
|
+
} | undefined>;
|
|
8
17
|
export declare const getStatusRequestParams: (quoteResponse: QuoteResponse<string | TxData>) => {
|
|
9
18
|
bridgeId: string;
|
|
10
19
|
bridge: string;
|
|
@@ -149,38 +158,6 @@ export declare const handleSolanaTxResponse: (snapResponse: string | {
|
|
|
149
158
|
signature: string;
|
|
150
159
|
}, quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata, selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string]) => TransactionMeta & SolanaTransactionMeta;
|
|
151
160
|
export declare const handleLineaDelay: (quoteResponse: QuoteResponse<TxData | string>) => Promise<void>;
|
|
152
|
-
export declare const getKeyringRequest: (quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata, selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string]) => {
|
|
153
|
-
origin: string;
|
|
154
|
-
snapId: never;
|
|
155
|
-
handler: never;
|
|
156
|
-
request: {
|
|
157
|
-
id: string;
|
|
158
|
-
jsonrpc: string;
|
|
159
|
-
method: string;
|
|
160
|
-
params: {
|
|
161
|
-
request: {
|
|
162
|
-
params: {
|
|
163
|
-
account: {
|
|
164
|
-
address: string;
|
|
165
|
-
};
|
|
166
|
-
transaction: string | ({
|
|
167
|
-
data: string;
|
|
168
|
-
value: string;
|
|
169
|
-
to: string;
|
|
170
|
-
from: string;
|
|
171
|
-
gasLimit: number | null;
|
|
172
|
-
chainId: number;
|
|
173
|
-
} & string);
|
|
174
|
-
scope: SolScope;
|
|
175
|
-
};
|
|
176
|
-
method: string;
|
|
177
|
-
};
|
|
178
|
-
id: string;
|
|
179
|
-
account: string;
|
|
180
|
-
scope: SolScope;
|
|
181
|
-
};
|
|
182
|
-
};
|
|
183
|
-
};
|
|
184
161
|
export declare const getClientRequest: (quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata, selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string]) => {
|
|
185
162
|
origin: string;
|
|
186
163
|
snapId: never;
|
|
@@ -205,4 +182,73 @@ export declare const getClientRequest: (quoteResponse: Omit<QuoteResponse<string
|
|
|
205
182
|
};
|
|
206
183
|
};
|
|
207
184
|
};
|
|
185
|
+
export declare const toBatchTxParams: (disable7702: boolean, { chainId, gasLimit, ...trade }: TxData, { maxFeePerGas, maxPriorityFeePerGas, gas, }: {
|
|
186
|
+
maxFeePerGas?: string | undefined;
|
|
187
|
+
maxPriorityFeePerGas?: string | undefined;
|
|
188
|
+
gas?: string | undefined;
|
|
189
|
+
}) => BatchTransactionParams;
|
|
190
|
+
export declare const getAddTransactionBatchParams: ({ messagingSystem, isBridgeTx, approval, resetApproval, trade, quoteResponse: { quote: { feeData: { txFee }, gasIncluded, }, }, requireApproval, estimateGasFeeFn, }: {
|
|
191
|
+
messagingSystem: BridgeStatusControllerMessenger;
|
|
192
|
+
isBridgeTx: boolean;
|
|
193
|
+
trade: TxData;
|
|
194
|
+
quoteResponse: Omit<QuoteResponse, 'approval' | 'trade'> & QuoteMetadata;
|
|
195
|
+
estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee;
|
|
196
|
+
approval?: {
|
|
197
|
+
data: string;
|
|
198
|
+
value: string;
|
|
199
|
+
to: string;
|
|
200
|
+
from: string;
|
|
201
|
+
gasLimit: number | null;
|
|
202
|
+
chainId: number;
|
|
203
|
+
} | undefined;
|
|
204
|
+
resetApproval?: {
|
|
205
|
+
data: string;
|
|
206
|
+
value: string;
|
|
207
|
+
to: string;
|
|
208
|
+
from: string;
|
|
209
|
+
gasLimit: number | null;
|
|
210
|
+
chainId: number;
|
|
211
|
+
} | undefined;
|
|
212
|
+
requireApproval?: boolean | undefined;
|
|
213
|
+
}) => Promise<import("@metamask/transaction-controller").TransactionBatchRequest>;
|
|
214
|
+
export declare const findAndUpdateTransactionsInBatch: ({ messagingSystem, updateTransactionFn, batchId, txDataByType, }: {
|
|
215
|
+
messagingSystem: BridgeStatusControllerMessenger;
|
|
216
|
+
updateTransactionFn: typeof TransactionController.prototype.updateTransaction;
|
|
217
|
+
batchId: string;
|
|
218
|
+
txDataByType: {
|
|
219
|
+
batch?: string | undefined;
|
|
220
|
+
bridge?: string | undefined;
|
|
221
|
+
bridgeApproval?: string | undefined;
|
|
222
|
+
cancel?: string | undefined;
|
|
223
|
+
contractInteraction?: string | undefined;
|
|
224
|
+
contractDeployment?: string | undefined;
|
|
225
|
+
eth_decrypt?: string | undefined;
|
|
226
|
+
eth_getEncryptionPublicKey?: string | undefined;
|
|
227
|
+
gas_payment?: string | undefined;
|
|
228
|
+
incoming?: string | undefined;
|
|
229
|
+
lendingDeposit?: string | undefined;
|
|
230
|
+
lendingWithdraw?: string | undefined;
|
|
231
|
+
personal_sign?: string | undefined;
|
|
232
|
+
retry?: string | undefined;
|
|
233
|
+
revokeDelegation?: string | undefined;
|
|
234
|
+
simpleSend?: string | undefined;
|
|
235
|
+
eth_signTypedData?: string | undefined;
|
|
236
|
+
smart?: string | undefined;
|
|
237
|
+
stakingClaim?: string | undefined;
|
|
238
|
+
stakingDeposit?: string | undefined;
|
|
239
|
+
stakingUnstake?: string | undefined;
|
|
240
|
+
swap?: string | undefined;
|
|
241
|
+
swapAndSend?: string | undefined;
|
|
242
|
+
swapApproval?: string | undefined;
|
|
243
|
+
approve?: string | undefined;
|
|
244
|
+
safetransferfrom?: string | undefined;
|
|
245
|
+
transfer?: string | undefined;
|
|
246
|
+
transferfrom?: string | undefined;
|
|
247
|
+
setapprovalforall?: string | undefined;
|
|
248
|
+
increaseAllowance?: string | undefined;
|
|
249
|
+
};
|
|
250
|
+
}) => {
|
|
251
|
+
approvalMeta?: TransactionMeta | undefined;
|
|
252
|
+
tradeMeta?: TransactionMeta | undefined;
|
|
253
|
+
};
|
|
208
254
|
//# sourceMappingURL=transaction.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.mts","sourceRoot":"","sources":["../../src/utils/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,sCAAsC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,oCAAoC;AAC1D,OAAO,
|
|
1
|
+
{"version":3,"file":"transaction.d.mts","sourceRoot":"","sources":["../../src/utils/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,sCAAsC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,oCAAoC;AAC1D,OAAO,EAML,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,oCAAoC;AAErC,OAAO,EAAE,QAAQ,EAAE,8BAA8B;AACjD,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACtB,yCAAyC;AAC1C,OAAO,EAEL,eAAe,EACf,KAAK,eAAe,EACrB,yCAAyC;AAQ1C,OAAO,KAAK,EACV,+BAA+B,EAC/B,qBAAqB,EACtB,qBAAiB;AAElB,eAAO,MAAM,gBAAgB,cAAgD,CAAC;AAE9E,eAAO,MAAM,uBAAuB,oEAEnB,cAAc,MAAM,GAAG,MAAM,CAAC,GAAG,aAAa;;;;;;;cAqB9D,CAAC;AAEF,eAAO,MAAM,sBAAsB,kBAClB,cAAc,MAAM,GAAG,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAU9C,CAAC;AAEF,eAAO,MAAM,eAAe,kBACX,KAAK,cAAc,MAAM,GAAG,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,GACvE,aAAa,iBACA,MAAM,KACpB,KACD,eAAe,EACf,iBAAiB,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAmB1D,CAAC;AAEF,eAAO,MAAM,sBAAsB,iBAE7B,MAAM,GACN;IAAE,MAAM,EAAE,OAAO,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAClC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBACV,KAAK,cAAc,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,aAAa,mBACrD,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAC/E,eAAe,GAAG,qBAsDpB,CAAC;AAEF,eAAO,MAAM,gBAAgB,kBACZ,cAAc,MAAM,GAAG,MAAM,CAAC,kBAY9C,CAAC;AAEF,eAAO,MAAM,gBAAgB,kBACZ,KAAK,cAAc,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,aAAa,mBACrD,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;CAmBjF,CAAC;AAEF,eAAO,MAAM,eAAe,gBACb,OAAO,mCACa,MAAM;;;;MAMtC,sBAiBF,CAAC;AAEF,eAAO,MAAM,4BAA4B;;gBAgB3B,OAAO;WACZ,MAAM;mBACE,KAAK,aAAa,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,aAAa;sBACtD,OAAO,sBAAsB,SAAS,CAAC,cAAc;;;;;;;;;;;;;;;;;;iFAkFxE,CAAC;AAEF,eAAO,MAAM,gCAAgC;;yBAOtB,OAAO,sBAAsB,SAAS,CAAC,iBAAiB;aACpE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkChB,CAAC"}
|
|
@@ -1,10 +1,25 @@
|
|
|
1
|
-
import { ChainId, formatChainIdToHex, isCrossChain } from "@metamask/bridge-controller";
|
|
1
|
+
import { ChainId, formatChainIdToHex, getEthUsdtResetData, isCrossChain, isEthUsdt } from "@metamask/bridge-controller";
|
|
2
|
+
import { toHex } from "@metamask/controller-utils";
|
|
2
3
|
import { SolScope } from "@metamask/keyring-api";
|
|
3
4
|
import { TransactionStatus, TransactionType } from "@metamask/transaction-controller";
|
|
4
5
|
import { createProjectLogger } from "@metamask/utils";
|
|
6
|
+
import { BigNumber } from "bignumber.js";
|
|
5
7
|
import { v4 as uuid } from "uuid";
|
|
8
|
+
import { calculateGasFees } from "./gas.mjs";
|
|
6
9
|
import { LINEA_DELAY_MS } from "../constants.mjs";
|
|
7
10
|
export const generateActionId = () => (Date.now() + Math.random()).toString();
|
|
11
|
+
export const getUSDTAllowanceResetTx = async (messagingSystem, quoteResponse) => {
|
|
12
|
+
const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);
|
|
13
|
+
if (quoteResponse.approval &&
|
|
14
|
+
isEthUsdt(hexChainId, quoteResponse.quote.srcAsset.address)) {
|
|
15
|
+
const allowance = new BigNumber(await messagingSystem.call('BridgeController:getBridgeERC20Allowance', quoteResponse.quote.srcAsset.address, hexChainId));
|
|
16
|
+
const shouldResetApproval = allowance.lt(quoteResponse.sentAmount.amount) && allowance.gt(0);
|
|
17
|
+
if (shouldResetApproval) {
|
|
18
|
+
return { ...quoteResponse.approval, data: getEthUsdtResetData() };
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return undefined;
|
|
22
|
+
};
|
|
8
23
|
export const getStatusRequestParams = (quoteResponse) => {
|
|
9
24
|
return {
|
|
10
25
|
bridgeId: quoteResponse.quote.bridgeId,
|
|
@@ -87,33 +102,6 @@ export const handleLineaDelay = async (quoteResponse) => {
|
|
|
87
102
|
await waitPromise;
|
|
88
103
|
}
|
|
89
104
|
};
|
|
90
|
-
export const getKeyringRequest = (quoteResponse, selectedAccount) => {
|
|
91
|
-
const keyringReqId = uuid();
|
|
92
|
-
const snapRequestId = uuid();
|
|
93
|
-
return {
|
|
94
|
-
origin: 'metamask',
|
|
95
|
-
snapId: selectedAccount.metadata.snap?.id,
|
|
96
|
-
handler: 'onKeyringRequest',
|
|
97
|
-
request: {
|
|
98
|
-
id: keyringReqId,
|
|
99
|
-
jsonrpc: '2.0',
|
|
100
|
-
method: 'keyring_submitRequest',
|
|
101
|
-
params: {
|
|
102
|
-
request: {
|
|
103
|
-
params: {
|
|
104
|
-
account: { address: selectedAccount.address },
|
|
105
|
-
transaction: quoteResponse.trade,
|
|
106
|
-
scope: SolScope.Mainnet,
|
|
107
|
-
},
|
|
108
|
-
method: 'signAndSendTransaction',
|
|
109
|
-
},
|
|
110
|
-
id: snapRequestId,
|
|
111
|
-
account: selectedAccount.id,
|
|
112
|
-
scope: SolScope.Mainnet,
|
|
113
|
-
},
|
|
114
|
-
},
|
|
115
|
-
};
|
|
116
|
-
};
|
|
117
105
|
export const getClientRequest = (quoteResponse, selectedAccount) => {
|
|
118
106
|
const clientReqId = uuid();
|
|
119
107
|
return {
|
|
@@ -132,4 +120,84 @@ export const getClientRequest = (quoteResponse, selectedAccount) => {
|
|
|
132
120
|
},
|
|
133
121
|
};
|
|
134
122
|
};
|
|
123
|
+
export const toBatchTxParams = (disable7702, { chainId, gasLimit, ...trade }, { maxFeePerGas, maxPriorityFeePerGas, gas, }) => {
|
|
124
|
+
const params = {
|
|
125
|
+
...trade,
|
|
126
|
+
data: trade.data,
|
|
127
|
+
to: trade.to,
|
|
128
|
+
value: trade.value,
|
|
129
|
+
};
|
|
130
|
+
if (!disable7702) {
|
|
131
|
+
return params;
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
...params,
|
|
135
|
+
gas: toHex(gas ?? 0),
|
|
136
|
+
maxFeePerGas: toHex(maxFeePerGas ?? 0),
|
|
137
|
+
maxPriorityFeePerGas: toHex(maxPriorityFeePerGas ?? 0),
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
export const getAddTransactionBatchParams = async ({ messagingSystem, isBridgeTx, approval, resetApproval, trade, quoteResponse: { quote: { feeData: { txFee }, gasIncluded, }, }, requireApproval = false, estimateGasFeeFn, }) => {
|
|
141
|
+
const selectedAccount = messagingSystem.call('AccountsController:getAccountByAddress', trade.from);
|
|
142
|
+
if (!selectedAccount) {
|
|
143
|
+
throw new Error('Failed to submit cross-chain swap batch transaction: unknown account in trade data');
|
|
144
|
+
}
|
|
145
|
+
const hexChainId = formatChainIdToHex(trade.chainId);
|
|
146
|
+
const networkClientId = messagingSystem.call('NetworkController:findNetworkClientIdByChainId', hexChainId);
|
|
147
|
+
// 7702 enables gasless txs for smart accounts, so we disable it for now
|
|
148
|
+
const disable7702 = true;
|
|
149
|
+
const transactions = [];
|
|
150
|
+
if (resetApproval) {
|
|
151
|
+
const gasFees = await calculateGasFees(disable7702, messagingSystem, estimateGasFeeFn, resetApproval, networkClientId, hexChainId, gasIncluded ? txFee : undefined);
|
|
152
|
+
transactions.push({
|
|
153
|
+
type: isBridgeTx
|
|
154
|
+
? TransactionType.bridgeApproval
|
|
155
|
+
: TransactionType.swapApproval,
|
|
156
|
+
params: toBatchTxParams(disable7702, resetApproval, gasFees),
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
if (approval) {
|
|
160
|
+
const gasFees = await calculateGasFees(disable7702, messagingSystem, estimateGasFeeFn, approval, networkClientId, hexChainId, gasIncluded ? txFee : undefined);
|
|
161
|
+
transactions.push({
|
|
162
|
+
type: isBridgeTx
|
|
163
|
+
? TransactionType.bridgeApproval
|
|
164
|
+
: TransactionType.swapApproval,
|
|
165
|
+
params: toBatchTxParams(disable7702, approval, gasFees),
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
const gasFees = await calculateGasFees(disable7702, messagingSystem, estimateGasFeeFn, trade, networkClientId, hexChainId, gasIncluded ? txFee : undefined);
|
|
169
|
+
transactions.push({
|
|
170
|
+
type: isBridgeTx ? TransactionType.bridge : TransactionType.swap,
|
|
171
|
+
params: toBatchTxParams(disable7702, trade, gasFees),
|
|
172
|
+
});
|
|
173
|
+
const transactionParams = {
|
|
174
|
+
disable7702,
|
|
175
|
+
networkClientId,
|
|
176
|
+
requireApproval,
|
|
177
|
+
origin: 'metamask',
|
|
178
|
+
from: trade.from,
|
|
179
|
+
transactions,
|
|
180
|
+
};
|
|
181
|
+
return transactionParams;
|
|
182
|
+
};
|
|
183
|
+
export const findAndUpdateTransactionsInBatch = ({ messagingSystem, updateTransactionFn, batchId, txDataByType, }) => {
|
|
184
|
+
const txs = messagingSystem.call('TransactionController:getState').transactions;
|
|
185
|
+
const txBatch = {
|
|
186
|
+
approvalMeta: undefined,
|
|
187
|
+
tradeMeta: undefined,
|
|
188
|
+
};
|
|
189
|
+
// This is a workaround to update the tx type after the tx is signed
|
|
190
|
+
// TODO: remove this once the tx type for batch txs is preserved in the tx controller
|
|
191
|
+
Object.entries(txDataByType).forEach(([txType, txData]) => {
|
|
192
|
+
const txMeta = txs.find((tx) => tx.batchId === batchId && tx.txParams.data === txData);
|
|
193
|
+
if (txMeta) {
|
|
194
|
+
const updatedTx = { ...txMeta, type: txType };
|
|
195
|
+
updateTransactionFn(updatedTx, `Update tx type to ${txType}`);
|
|
196
|
+
txBatch[[TransactionType.bridgeApproval, TransactionType.swapApproval].includes(txType)
|
|
197
|
+
? 'approvalMeta'
|
|
198
|
+
: 'tradeMeta'] = updatedTx;
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
return txBatch;
|
|
202
|
+
};
|
|
135
203
|
//# sourceMappingURL=transaction.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.mjs","sourceRoot":"","sources":["../../src/utils/transaction.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AccountsControllerState } from '@metamask/accounts-controller';\nimport type { TxData } from '@metamask/bridge-controller';\nimport {\n ChainId,\n formatChainIdToHex,\n isCrossChain,\n type QuoteMetadata,\n type QuoteResponse,\n} from '@metamask/bridge-controller';\nimport { SolScope } from '@metamask/keyring-api';\nimport {\n TransactionStatus,\n TransactionType,\n type TransactionMeta,\n} from '@metamask/transaction-controller';\nimport { createProjectLogger } from '@metamask/utils';\nimport { v4 as uuid } from 'uuid';\n\nimport { LINEA_DELAY_MS } from '../constants';\nimport type { SolanaTransactionMeta } from '../types';\n\nexport const generateActionId = () => (Date.now() + Math.random()).toString();\n\nexport const getStatusRequestParams = (\n quoteResponse: QuoteResponse<string | TxData>,\n) => {\n return {\n bridgeId: quoteResponse.quote.bridgeId,\n bridge: quoteResponse.quote.bridges[0],\n srcChainId: quoteResponse.quote.srcChainId,\n destChainId: quoteResponse.quote.destChainId,\n quote: quoteResponse.quote,\n refuel: Boolean(quoteResponse.quote.refuel),\n };\n};\n\nexport const getTxMetaFields = (\n quoteResponse: Omit<QuoteResponse<string | TxData>, 'approval' | 'trade'> &\n QuoteMetadata,\n approvalTxId?: string,\n): Omit<\n TransactionMeta,\n 'networkClientId' | 'status' | 'time' | 'txParams' | 'id'\n> => {\n return {\n destinationChainId: formatChainIdToHex(quoteResponse.quote.destChainId),\n sourceTokenAmount: quoteResponse.quote.srcTokenAmount,\n sourceTokenSymbol: quoteResponse.quote.srcAsset.symbol,\n sourceTokenDecimals: quoteResponse.quote.srcAsset.decimals,\n sourceTokenAddress: quoteResponse.quote.srcAsset.address,\n\n destinationTokenAmount: quoteResponse.quote.destTokenAmount,\n destinationTokenSymbol: quoteResponse.quote.destAsset.symbol,\n destinationTokenDecimals: quoteResponse.quote.destAsset.decimals,\n destinationTokenAddress: quoteResponse.quote.destAsset.address,\n\n chainId: formatChainIdToHex(quoteResponse.quote.srcChainId),\n approvalTxId,\n // this is the decimal (non atomic) amount (not USD value) of source token to swap\n swapTokenValue: quoteResponse.sentAmount.amount,\n };\n};\n\nexport const handleSolanaTxResponse = (\n snapResponse:\n | string\n | { result: Record<string, string> }\n | { signature: string },\n quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata,\n selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string],\n): TransactionMeta & SolanaTransactionMeta => {\n const selectedAccountAddress = selectedAccount.address;\n const snapId = selectedAccount.metadata.snap?.id;\n let hash;\n // Handle different response formats\n if (typeof snapResponse === 'string') {\n hash = snapResponse;\n } else if (snapResponse && typeof snapResponse === 'object') {\n // If it's an object with result property, try to get the signature\n if (\n typeof snapResponse === 'object' &&\n 'result' in snapResponse &&\n snapResponse.result &&\n typeof snapResponse.result === 'object'\n ) {\n // Try to extract signature from common locations in response object\n hash =\n snapResponse.result.signature ||\n snapResponse.result.txid ||\n snapResponse.result.hash ||\n snapResponse.result.txHash;\n }\n if (\n typeof snapResponse === 'object' &&\n 'signature' in snapResponse &&\n snapResponse.signature &&\n typeof snapResponse.signature === 'string'\n ) {\n hash = snapResponse.signature;\n }\n }\n\n const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);\n const isBridgeTx = isCrossChain(\n quoteResponse.quote.srcChainId,\n quoteResponse.quote.destChainId,\n );\n\n // Create a transaction meta object with bridge-specific fields\n return {\n ...getTxMetaFields(quoteResponse),\n time: Date.now(),\n id: uuid(),\n chainId: hexChainId,\n networkClientId: snapId ?? hexChainId,\n txParams: { from: selectedAccountAddress, data: quoteResponse.trade },\n type: isBridgeTx ? TransactionType.bridge : TransactionType.swap,\n status: TransactionStatus.submitted,\n hash, // Add the transaction signature as hash\n origin: snapId,\n // Add an explicit bridge flag to mark this as a Solana transaction\n isSolana: true, // TODO deprecate this and use chainId\n isBridgeTx,\n };\n};\n\nexport const handleLineaDelay = async (\n quoteResponse: QuoteResponse<TxData | string>,\n) => {\n if (ChainId.LINEA === quoteResponse.quote.srcChainId) {\n const debugLog = createProjectLogger('bridge');\n debugLog(\n 'Delaying submitting bridge tx to make Linea confirmation more likely',\n );\n const waitPromise = new Promise((resolve) =>\n setTimeout(resolve, LINEA_DELAY_MS),\n );\n await waitPromise;\n }\n};\n\nexport const getKeyringRequest = (\n quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata,\n selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string],\n) => {\n const keyringReqId = uuid();\n const snapRequestId = uuid();\n\n return {\n origin: 'metamask',\n snapId: selectedAccount.metadata.snap?.id as never,\n handler: 'onKeyringRequest' as never,\n request: {\n id: keyringReqId,\n jsonrpc: '2.0',\n method: 'keyring_submitRequest',\n params: {\n request: {\n params: {\n account: { address: selectedAccount.address },\n transaction: quoteResponse.trade,\n scope: SolScope.Mainnet,\n },\n method: 'signAndSendTransaction',\n },\n id: snapRequestId,\n account: selectedAccount.id,\n scope: SolScope.Mainnet,\n },\n },\n };\n};\n\nexport const getClientRequest = (\n quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata,\n selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string],\n) => {\n const clientReqId = uuid();\n\n return {\n origin: 'metamask',\n snapId: selectedAccount.metadata.snap?.id as never,\n handler: 'onClientRequest' as never,\n request: {\n id: clientReqId,\n jsonrpc: '2.0',\n method: 'signAndSendTransactionWithoutConfirmation',\n params: {\n account: { address: selectedAccount.address },\n transaction: quoteResponse.trade,\n scope: SolScope.Mainnet,\n },\n },\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"transaction.mjs","sourceRoot":"","sources":["../../src/utils/transaction.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AccountsControllerState } from '@metamask/accounts-controller';\nimport type { TxData } from '@metamask/bridge-controller';\nimport {\n ChainId,\n formatChainIdToHex,\n getEthUsdtResetData,\n isCrossChain,\n isEthUsdt,\n type QuoteMetadata,\n type QuoteResponse,\n} from '@metamask/bridge-controller';\nimport { toHex } from '@metamask/controller-utils';\nimport { SolScope } from '@metamask/keyring-api';\nimport type {\n BatchTransactionParams,\n TransactionController,\n} from '@metamask/transaction-controller';\nimport {\n TransactionStatus,\n TransactionType,\n type TransactionMeta,\n} from '@metamask/transaction-controller';\nimport { createProjectLogger } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\nimport { v4 as uuid } from 'uuid';\n\nimport { calculateGasFees } from './gas';\nimport type { TransactionBatchSingleRequest } from '../../../transaction-controller/src/types';\nimport { LINEA_DELAY_MS } from '../constants';\nimport type {\n BridgeStatusControllerMessenger,\n SolanaTransactionMeta,\n} from '../types';\n\nexport const generateActionId = () => (Date.now() + Math.random()).toString();\n\nexport const getUSDTAllowanceResetTx = async (\n messagingSystem: BridgeStatusControllerMessenger,\n quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n) => {\n const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);\n if (\n quoteResponse.approval &&\n isEthUsdt(hexChainId, quoteResponse.quote.srcAsset.address)\n ) {\n const allowance = new BigNumber(\n await messagingSystem.call(\n 'BridgeController:getBridgeERC20Allowance',\n quoteResponse.quote.srcAsset.address,\n hexChainId,\n ),\n );\n const shouldResetApproval =\n allowance.lt(quoteResponse.sentAmount.amount) && allowance.gt(0);\n if (shouldResetApproval) {\n return { ...quoteResponse.approval, data: getEthUsdtResetData() };\n }\n }\n return undefined;\n};\n\nexport const getStatusRequestParams = (\n quoteResponse: QuoteResponse<string | TxData>,\n) => {\n return {\n bridgeId: quoteResponse.quote.bridgeId,\n bridge: quoteResponse.quote.bridges[0],\n srcChainId: quoteResponse.quote.srcChainId,\n destChainId: quoteResponse.quote.destChainId,\n quote: quoteResponse.quote,\n refuel: Boolean(quoteResponse.quote.refuel),\n };\n};\n\nexport const getTxMetaFields = (\n quoteResponse: Omit<QuoteResponse<string | TxData>, 'approval' | 'trade'> &\n QuoteMetadata,\n approvalTxId?: string,\n): Omit<\n TransactionMeta,\n 'networkClientId' | 'status' | 'time' | 'txParams' | 'id'\n> => {\n return {\n destinationChainId: formatChainIdToHex(quoteResponse.quote.destChainId),\n sourceTokenAmount: quoteResponse.quote.srcTokenAmount,\n sourceTokenSymbol: quoteResponse.quote.srcAsset.symbol,\n sourceTokenDecimals: quoteResponse.quote.srcAsset.decimals,\n sourceTokenAddress: quoteResponse.quote.srcAsset.address,\n\n destinationTokenAmount: quoteResponse.quote.destTokenAmount,\n destinationTokenSymbol: quoteResponse.quote.destAsset.symbol,\n destinationTokenDecimals: quoteResponse.quote.destAsset.decimals,\n destinationTokenAddress: quoteResponse.quote.destAsset.address,\n\n chainId: formatChainIdToHex(quoteResponse.quote.srcChainId),\n approvalTxId,\n // this is the decimal (non atomic) amount (not USD value) of source token to swap\n swapTokenValue: quoteResponse.sentAmount.amount,\n };\n};\n\nexport const handleSolanaTxResponse = (\n snapResponse:\n | string\n | { result: Record<string, string> }\n | { signature: string },\n quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata,\n selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string],\n): TransactionMeta & SolanaTransactionMeta => {\n const selectedAccountAddress = selectedAccount.address;\n const snapId = selectedAccount.metadata.snap?.id;\n let hash;\n // Handle different response formats\n if (typeof snapResponse === 'string') {\n hash = snapResponse;\n } else if (snapResponse && typeof snapResponse === 'object') {\n // If it's an object with result property, try to get the signature\n if (\n typeof snapResponse === 'object' &&\n 'result' in snapResponse &&\n snapResponse.result &&\n typeof snapResponse.result === 'object'\n ) {\n // Try to extract signature from common locations in response object\n hash =\n snapResponse.result.signature ||\n snapResponse.result.txid ||\n snapResponse.result.hash ||\n snapResponse.result.txHash;\n }\n if (\n typeof snapResponse === 'object' &&\n 'signature' in snapResponse &&\n snapResponse.signature &&\n typeof snapResponse.signature === 'string'\n ) {\n hash = snapResponse.signature;\n }\n }\n\n const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);\n const isBridgeTx = isCrossChain(\n quoteResponse.quote.srcChainId,\n quoteResponse.quote.destChainId,\n );\n\n // Create a transaction meta object with bridge-specific fields\n return {\n ...getTxMetaFields(quoteResponse),\n time: Date.now(),\n id: uuid(),\n chainId: hexChainId,\n networkClientId: snapId ?? hexChainId,\n txParams: { from: selectedAccountAddress, data: quoteResponse.trade },\n type: isBridgeTx ? TransactionType.bridge : TransactionType.swap,\n status: TransactionStatus.submitted,\n hash, // Add the transaction signature as hash\n origin: snapId,\n // Add an explicit bridge flag to mark this as a Solana transaction\n isSolana: true, // TODO deprecate this and use chainId\n isBridgeTx,\n };\n};\n\nexport const handleLineaDelay = async (\n quoteResponse: QuoteResponse<TxData | string>,\n) => {\n if (ChainId.LINEA === quoteResponse.quote.srcChainId) {\n const debugLog = createProjectLogger('bridge');\n debugLog(\n 'Delaying submitting bridge tx to make Linea confirmation more likely',\n );\n const waitPromise = new Promise((resolve) =>\n setTimeout(resolve, LINEA_DELAY_MS),\n );\n await waitPromise;\n }\n};\n\nexport const getClientRequest = (\n quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata,\n selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string],\n) => {\n const clientReqId = uuid();\n\n return {\n origin: 'metamask',\n snapId: selectedAccount.metadata.snap?.id as never,\n handler: 'onClientRequest' as never,\n request: {\n id: clientReqId,\n jsonrpc: '2.0',\n method: 'signAndSendTransactionWithoutConfirmation',\n params: {\n account: { address: selectedAccount.address },\n transaction: quoteResponse.trade,\n scope: SolScope.Mainnet,\n },\n },\n };\n};\n\nexport const toBatchTxParams = (\n disable7702: boolean,\n { chainId, gasLimit, ...trade }: TxData,\n {\n maxFeePerGas,\n maxPriorityFeePerGas,\n gas,\n }: { maxFeePerGas?: string; maxPriorityFeePerGas?: string; gas?: string },\n): BatchTransactionParams => {\n const params = {\n ...trade,\n data: trade.data as `0x${string}`,\n to: trade.to as `0x${string}`,\n value: trade.value as `0x${string}`,\n };\n if (!disable7702) {\n return params;\n }\n\n return {\n ...params,\n gas: toHex(gas ?? 0),\n maxFeePerGas: toHex(maxFeePerGas ?? 0),\n maxPriorityFeePerGas: toHex(maxPriorityFeePerGas ?? 0),\n };\n};\n\nexport const getAddTransactionBatchParams = async ({\n messagingSystem,\n isBridgeTx,\n approval,\n resetApproval,\n trade,\n quoteResponse: {\n quote: {\n feeData: { txFee },\n gasIncluded,\n },\n },\n requireApproval = false,\n estimateGasFeeFn,\n}: {\n messagingSystem: BridgeStatusControllerMessenger;\n isBridgeTx: boolean;\n trade: TxData;\n quoteResponse: Omit<QuoteResponse, 'approval' | 'trade'> & QuoteMetadata;\n estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee;\n approval?: TxData;\n resetApproval?: TxData;\n requireApproval?: boolean;\n}) => {\n const selectedAccount = messagingSystem.call(\n 'AccountsController:getAccountByAddress',\n trade.from,\n );\n if (!selectedAccount) {\n throw new Error(\n 'Failed to submit cross-chain swap batch transaction: unknown account in trade data',\n );\n }\n const hexChainId = formatChainIdToHex(trade.chainId);\n const networkClientId = messagingSystem.call(\n 'NetworkController:findNetworkClientIdByChainId',\n hexChainId,\n );\n\n // 7702 enables gasless txs for smart accounts, so we disable it for now\n const disable7702 = true;\n const transactions: TransactionBatchSingleRequest[] = [];\n if (resetApproval) {\n const gasFees = await calculateGasFees(\n disable7702,\n messagingSystem,\n estimateGasFeeFn,\n resetApproval,\n networkClientId,\n hexChainId,\n gasIncluded ? txFee : undefined,\n );\n transactions.push({\n type: isBridgeTx\n ? TransactionType.bridgeApproval\n : TransactionType.swapApproval,\n params: toBatchTxParams(disable7702, resetApproval, gasFees),\n });\n }\n if (approval) {\n const gasFees = await calculateGasFees(\n disable7702,\n messagingSystem,\n estimateGasFeeFn,\n approval,\n networkClientId,\n hexChainId,\n gasIncluded ? txFee : undefined,\n );\n transactions.push({\n type: isBridgeTx\n ? TransactionType.bridgeApproval\n : TransactionType.swapApproval,\n params: toBatchTxParams(disable7702, approval, gasFees),\n });\n }\n const gasFees = await calculateGasFees(\n disable7702,\n messagingSystem,\n estimateGasFeeFn,\n trade,\n networkClientId,\n hexChainId,\n gasIncluded ? txFee : undefined,\n );\n transactions.push({\n type: isBridgeTx ? TransactionType.bridge : TransactionType.swap,\n params: toBatchTxParams(disable7702, trade, gasFees),\n });\n const transactionParams: Parameters<\n TransactionController['addTransactionBatch']\n >[0] = {\n disable7702,\n networkClientId,\n requireApproval,\n origin: 'metamask',\n from: trade.from as `0x${string}`,\n transactions,\n };\n\n return transactionParams;\n};\n\nexport const findAndUpdateTransactionsInBatch = ({\n messagingSystem,\n updateTransactionFn,\n batchId,\n txDataByType,\n}: {\n messagingSystem: BridgeStatusControllerMessenger;\n updateTransactionFn: typeof TransactionController.prototype.updateTransaction;\n batchId: string;\n txDataByType: { [key in TransactionType]?: string };\n}) => {\n const txs = messagingSystem.call(\n 'TransactionController:getState',\n ).transactions;\n const txBatch: {\n approvalMeta?: TransactionMeta;\n tradeMeta?: TransactionMeta;\n } = {\n approvalMeta: undefined,\n tradeMeta: undefined,\n };\n\n // This is a workaround to update the tx type after the tx is signed\n // TODO: remove this once the tx type for batch txs is preserved in the tx controller\n Object.entries(txDataByType).forEach(([txType, txData]) => {\n const txMeta = txs.find(\n (tx) => tx.batchId === batchId && tx.txParams.data === txData,\n );\n if (txMeta) {\n const updatedTx = { ...txMeta, type: txType as TransactionType };\n updateTransactionFn(updatedTx, `Update tx type to ${txType}`);\n txBatch[\n [TransactionType.bridgeApproval, TransactionType.swapApproval].includes(\n txType as TransactionType,\n )\n ? 'approvalMeta'\n : 'tradeMeta'\n ] = updatedTx;\n }\n });\n\n return txBatch;\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask/bridge-status-controller",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "35.0.0",
|
|
4
4
|
"description": "Manages bridge-related status fetching functionality for MetaMask",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"MetaMask",
|
|
@@ -48,23 +48,22 @@
|
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@metamask/base-controller": "^8.0.1",
|
|
51
|
-
"@metamask/controller-utils": "^11.
|
|
51
|
+
"@metamask/controller-utils": "^11.11.0",
|
|
52
52
|
"@metamask/keyring-api": "^18.0.0",
|
|
53
53
|
"@metamask/polling-controller": "^14.0.0",
|
|
54
54
|
"@metamask/superstruct": "^3.1.0",
|
|
55
|
-
"@metamask/
|
|
56
|
-
"@metamask/utils": "^11.2.0",
|
|
55
|
+
"@metamask/utils": "^11.4.2",
|
|
57
56
|
"bignumber.js": "^9.1.2",
|
|
58
57
|
"uuid": "^8.3.2"
|
|
59
58
|
},
|
|
60
59
|
"devDependencies": {
|
|
61
60
|
"@metamask/accounts-controller": "^31.0.0",
|
|
62
61
|
"@metamask/auto-changelog": "^3.4.4",
|
|
63
|
-
"@metamask/bridge-controller": "^
|
|
62
|
+
"@metamask/bridge-controller": "^35.0.0",
|
|
64
63
|
"@metamask/gas-fee-controller": "^24.0.0",
|
|
65
64
|
"@metamask/network-controller": "^24.0.0",
|
|
66
|
-
"@metamask/snaps-controllers": "^
|
|
67
|
-
"@metamask/transaction-controller": "^58.1.
|
|
65
|
+
"@metamask/snaps-controllers": "^14.0.1",
|
|
66
|
+
"@metamask/transaction-controller": "^58.1.1",
|
|
68
67
|
"@types/jest": "^27.4.1",
|
|
69
68
|
"deepmerge": "^4.2.2",
|
|
70
69
|
"jest": "^27.5.1",
|
|
@@ -78,10 +77,10 @@
|
|
|
78
77
|
},
|
|
79
78
|
"peerDependencies": {
|
|
80
79
|
"@metamask/accounts-controller": "^31.0.0",
|
|
81
|
-
"@metamask/bridge-controller": "^
|
|
80
|
+
"@metamask/bridge-controller": "^35.0.0",
|
|
82
81
|
"@metamask/gas-fee-controller": "^24.0.0",
|
|
83
82
|
"@metamask/network-controller": "^24.0.0",
|
|
84
|
-
"@metamask/snaps-controllers": "^
|
|
83
|
+
"@metamask/snaps-controllers": "^14.0.0",
|
|
85
84
|
"@metamask/transaction-controller": "^58.0.0"
|
|
86
85
|
},
|
|
87
86
|
"engines": {
|