@metamask-previews/transaction-controller 39.1.0-preview-fd7ad7de → 39.1.0-preview-690da12e

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/TransactionController.cjs +25 -30
  2. package/dist/TransactionController.cjs.map +1 -1
  3. package/dist/TransactionController.d.cts +73 -4
  4. package/dist/TransactionController.d.cts.map +1 -1
  5. package/dist/TransactionController.d.mts +73 -4
  6. package/dist/TransactionController.d.mts.map +1 -1
  7. package/dist/TransactionController.mjs +25 -30
  8. package/dist/TransactionController.mjs.map +1 -1
  9. package/dist/api/accounts-api.cjs +7 -24
  10. package/dist/api/accounts-api.cjs.map +1 -1
  11. package/dist/api/accounts-api.d.cts +1 -7
  12. package/dist/api/accounts-api.d.cts.map +1 -1
  13. package/dist/api/accounts-api.d.mts +1 -7
  14. package/dist/api/accounts-api.d.mts.map +1 -1
  15. package/dist/api/accounts-api.mjs +6 -22
  16. package/dist/api/accounts-api.mjs.map +1 -1
  17. package/dist/helpers/AccountsApiRemoteTransactionSource.cjs +77 -31
  18. package/dist/helpers/AccountsApiRemoteTransactionSource.cjs.map +1 -1
  19. package/dist/helpers/AccountsApiRemoteTransactionSource.d.cts +1 -0
  20. package/dist/helpers/AccountsApiRemoteTransactionSource.d.cts.map +1 -1
  21. package/dist/helpers/AccountsApiRemoteTransactionSource.d.mts +1 -0
  22. package/dist/helpers/AccountsApiRemoteTransactionSource.d.mts.map +1 -1
  23. package/dist/helpers/AccountsApiRemoteTransactionSource.mjs +75 -29
  24. package/dist/helpers/AccountsApiRemoteTransactionSource.mjs.map +1 -1
  25. package/dist/helpers/IncomingTransactionHelper.cjs +24 -45
  26. package/dist/helpers/IncomingTransactionHelper.cjs.map +1 -1
  27. package/dist/helpers/IncomingTransactionHelper.d.cts +6 -8
  28. package/dist/helpers/IncomingTransactionHelper.d.cts.map +1 -1
  29. package/dist/helpers/IncomingTransactionHelper.d.mts +6 -8
  30. package/dist/helpers/IncomingTransactionHelper.d.mts.map +1 -1
  31. package/dist/helpers/IncomingTransactionHelper.mjs +24 -45
  32. package/dist/helpers/IncomingTransactionHelper.mjs.map +1 -1
  33. package/dist/index.cjs +3 -1
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.cts +1 -0
  36. package/dist/index.d.cts.map +1 -1
  37. package/dist/index.d.mts +1 -0
  38. package/dist/index.d.mts.map +1 -1
  39. package/dist/index.mjs +1 -0
  40. package/dist/index.mjs.map +1 -1
  41. package/dist/types.cjs.map +1 -1
  42. package/dist/types.d.cts +14 -10
  43. package/dist/types.d.cts.map +1 -1
  44. package/dist/types.d.mts +14 -10
  45. package/dist/types.d.mts.map +1 -1
  46. package/dist/types.mjs.map +1 -1
  47. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getAccountTransactionsAllPages = exports.getAccountTransactions = void 0;
3
+ exports.getAccountTransactions = void 0;
4
+ const controller_utils_1 = require("@metamask/controller-utils");
4
5
  const utils_1 = require("@metamask/utils");
5
6
  const logger_1 = require("../logger.cjs");
6
7
  const BASE_URL = `https://accounts.api.cx.metamask.io/v1/accounts/`;
@@ -13,7 +14,7 @@ const log = (0, utils_1.createModuleLogger)(logger_1.projectLogger, 'accounts-ap
13
14
  * @returns The response object.
14
15
  */
15
16
  async function getAccountTransactions(request) {
16
- const { address, chainIds, cursor, endTimestamp, startTimestamp } = request;
17
+ const { address, chainIds, cursor, endTimestamp, sortDirection, startTimestamp, } = request;
17
18
  let url = `${BASE_URL}${address}/transactions`;
18
19
  const params = [];
19
20
  if (chainIds) {
@@ -29,6 +30,9 @@ async function getAccountTransactions(request) {
29
30
  if (cursor) {
30
31
  params.push(`cursor=${cursor}`);
31
32
  }
33
+ if (sortDirection) {
34
+ params.push(`sortDirection=${sortDirection}`);
35
+ }
32
36
  if (params.length) {
33
37
  url += `?${params.join('&')}`;
34
38
  }
@@ -36,31 +40,10 @@ async function getAccountTransactions(request) {
36
40
  const headers = {
37
41
  [CLIENT_HEADER]: CLIENT_ID,
38
42
  };
39
- const response = await fetch(url, { headers });
43
+ const response = await (0, controller_utils_1.successfulFetch)(url, { headers });
40
44
  const responseJson = await response.json();
41
45
  log('Retrieved account transactions', responseJson);
42
46
  return responseJson;
43
47
  }
44
48
  exports.getAccountTransactions = getAccountTransactions;
45
- /**
46
- * Fetch account transactions from the accounts API.
47
- * Automatically fetches all pages.
48
- * @param request - The request object.
49
- * @returns An array of transaction objects.
50
- */
51
- async function getAccountTransactionsAllPages(request) {
52
- const transactions = [];
53
- let cursor;
54
- let hasNextPage = true;
55
- log('Getting account transactions from all pages', request);
56
- while (hasNextPage) {
57
- const response = await getAccountTransactions({ ...request, cursor });
58
- transactions.push(...response.data);
59
- cursor = response.pageInfo.cursor;
60
- hasNextPage = response.pageInfo.hasNextPage;
61
- }
62
- log('Retrieved account transactions from all pages', transactions);
63
- return transactions;
64
- }
65
- exports.getAccountTransactionsAllPages = getAccountTransactionsAllPages;
66
49
  //# sourceMappingURL=accounts-api.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"accounts-api.cjs","sourceRoot":"","sources":["../../src/api/accounts-api.ts"],"names":[],"mappings":";;;AAAA,2CAA+D;AAE/D,0CAA0C;AA8C1C,MAAM,QAAQ,GAAG,kDAAkD,CAAC;AACpE,MAAM,aAAa,GAAG,0BAA0B,CAAC;AACjD,MAAM,SAAS,GAAG,gCAAgC,CAAC;AAEnD,MAAM,GAAG,GAAG,IAAA,0BAAkB,EAAC,sBAAa,EAAE,cAAc,CAAC,CAAC;AAE9D;;;;GAIG;AACI,KAAK,UAAU,sBAAsB,CAC1C,OAAsC;IAEtC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAE5E,IAAI,GAAG,GAAG,GAAG,QAAQ,GAAG,OAAO,eAAe,CAAC;IAC/C,MAAM,MAAM,GAAG,EAAE,CAAC;IAElB,IAAI,QAAQ,EAAE;QACZ,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;KACpC;IAED,IAAI,cAAc,EAAE;QAClB,MAAM,CAAC,IAAI,CAAC,kBAAkB,cAAc,EAAE,CAAC,CAAC;KACjD;IAED,IAAI,YAAY,EAAE;QAChB,MAAM,CAAC,IAAI,CAAC,gBAAgB,YAAY,EAAE,CAAC,CAAC;KAC7C;IAED,IAAI,MAAM,EAAE;QACV,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;KACjC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE;QACjB,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;KAC/B;IAED,GAAG,CAAC,8BAA8B,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAG;QACd,CAAC,aAAa,CAAC,EAAE,SAAS;KAC3B,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAE3C,GAAG,CAAC,gCAAgC,EAAE,YAAY,CAAC,CAAC;IAEpD,OAAO,YAAY,CAAC;AACtB,CAAC;AAzCD,wDAyCC;AAED;;;;;GAKG;AACI,KAAK,UAAU,8BAA8B,CAClD,OAAsC;IAEtC,MAAM,YAAY,GAAG,EAAE,CAAC;IAExB,IAAI,MAAM,CAAC;IACX,IAAI,WAAW,GAAG,IAAI,CAAC;IAEvB,GAAG,CAAC,6CAA6C,EAAE,OAAO,CAAC,CAAC;IAE5D,OAAO,WAAW,EAAE;QAClB,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACtE,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEpC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAClC,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;KAC7C;IAED,GAAG,CAAC,+CAA+C,EAAE,YAAY,CAAC,CAAC;IAEnE,OAAO,YAAY,CAAC;AACtB,CAAC;AArBD,wEAqBC","sourcesContent":["import { createModuleLogger, type Hex } from '@metamask/utils';\n\nimport { projectLogger } from '../logger';\n\nexport type TransactionResponse = {\n hash: Hex;\n timestamp: string;\n chainId: number;\n blockNumber: number;\n blockHash: Hex;\n gas: number;\n gasUsed: number;\n gasPrice: string;\n effectiveGasPrice: string;\n nonce: number;\n cumulativeGasUsed: number;\n methodId: null;\n value: string;\n to: string;\n from: string;\n isError: boolean;\n valueTransfers: {\n contractAddress: string;\n decimal: number;\n symbol: string;\n from: string;\n to: string;\n amount: string;\n }[];\n};\n\nexport type GetAccountTransactionsRequest = {\n address: Hex;\n chainIds?: Hex[];\n cursor?: string;\n endTimestamp?: number;\n startTimestamp?: number;\n};\n\nexport type GetAccountTransactionsResponse = {\n data: TransactionResponse[];\n pageInfo: {\n count: number;\n hasNextPage: boolean;\n cursor?: string;\n };\n};\n\nconst BASE_URL = `https://accounts.api.cx.metamask.io/v1/accounts/`;\nconst CLIENT_HEADER = 'x-metamask-clientproduct';\nconst CLIENT_ID = 'metamask-incoming-transactions';\n\nconst log = createModuleLogger(projectLogger, 'accounts-api');\n\n/**\n * Fetch account transactions from the accounts API.\n * @param request - The request object.\n * @returns The response object.\n */\nexport async function getAccountTransactions(\n request: GetAccountTransactionsRequest,\n): Promise<GetAccountTransactionsResponse> {\n const { address, chainIds, cursor, endTimestamp, startTimestamp } = request;\n\n let url = `${BASE_URL}${address}/transactions`;\n const params = [];\n\n if (chainIds) {\n const network = chainIds.join(',');\n params.push(`networks=${network}`);\n }\n\n if (startTimestamp) {\n params.push(`startTimestamp=${startTimestamp}`);\n }\n\n if (endTimestamp) {\n params.push(`endTimestamp=${endTimestamp}`);\n }\n\n if (cursor) {\n params.push(`cursor=${cursor}`);\n }\n\n if (params.length) {\n url += `?${params.join('&')}`;\n }\n\n log('Getting account transactions', { request, url });\n\n const headers = {\n [CLIENT_HEADER]: CLIENT_ID,\n };\n\n const response = await fetch(url, { headers });\n const responseJson = await response.json();\n\n log('Retrieved account transactions', responseJson);\n\n return responseJson;\n}\n\n/**\n * Fetch account transactions from the accounts API.\n * Automatically fetches all pages.\n * @param request - The request object.\n * @returns An array of transaction objects.\n */\nexport async function getAccountTransactionsAllPages(\n request: GetAccountTransactionsRequest,\n): Promise<TransactionResponse[]> {\n const transactions = [];\n\n let cursor;\n let hasNextPage = true;\n\n log('Getting account transactions from all pages', request);\n\n while (hasNextPage) {\n const response = await getAccountTransactions({ ...request, cursor });\n transactions.push(...response.data);\n\n cursor = response.pageInfo.cursor;\n hasNextPage = response.pageInfo.hasNextPage;\n }\n\n log('Retrieved account transactions from all pages', transactions);\n\n return transactions;\n}\n"]}
1
+ {"version":3,"file":"accounts-api.cjs","sourceRoot":"","sources":["../../src/api/accounts-api.ts"],"names":[],"mappings":";;;AAAA,iEAA6D;AAC7D,2CAA+D;AAE/D,0CAA0C;AA+C1C,MAAM,QAAQ,GAAG,kDAAkD,CAAC;AACpE,MAAM,aAAa,GAAG,0BAA0B,CAAC;AACjD,MAAM,SAAS,GAAG,gCAAgC,CAAC;AAEnD,MAAM,GAAG,GAAG,IAAA,0BAAkB,EAAC,sBAAa,EAAE,cAAc,CAAC,CAAC;AAE9D;;;;GAIG;AACI,KAAK,UAAU,sBAAsB,CAC1C,OAAsC;IAEtC,MAAM,EACJ,OAAO,EACP,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,aAAa,EACb,cAAc,GACf,GAAG,OAAO,CAAC;IAEZ,IAAI,GAAG,GAAG,GAAG,QAAQ,GAAG,OAAO,eAAe,CAAC;IAC/C,MAAM,MAAM,GAAG,EAAE,CAAC;IAElB,IAAI,QAAQ,EAAE;QACZ,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;KACpC;IAED,IAAI,cAAc,EAAE;QAClB,MAAM,CAAC,IAAI,CAAC,kBAAkB,cAAc,EAAE,CAAC,CAAC;KACjD;IAED,IAAI,YAAY,EAAE;QAChB,MAAM,CAAC,IAAI,CAAC,gBAAgB,YAAY,EAAE,CAAC,CAAC;KAC7C;IAED,IAAI,MAAM,EAAE;QACV,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;KACjC;IAED,IAAI,aAAa,EAAE;QACjB,MAAM,CAAC,IAAI,CAAC,iBAAiB,aAAa,EAAE,CAAC,CAAC;KAC/C;IAED,IAAI,MAAM,CAAC,MAAM,EAAE;QACjB,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;KAC/B;IAED,GAAG,CAAC,8BAA8B,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAG;QACd,CAAC,aAAa,CAAC,EAAE,SAAS;KAC3B,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,IAAA,kCAAe,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAE3C,GAAG,CAAC,gCAAgC,EAAE,YAAY,CAAC,CAAC;IAEpD,OAAO,YAAY,CAAC;AACtB,CAAC;AApDD,wDAoDC","sourcesContent":["import { successfulFetch } from '@metamask/controller-utils';\nimport { createModuleLogger, type Hex } from '@metamask/utils';\n\nimport { projectLogger } from '../logger';\n\nexport type TransactionResponse = {\n hash: Hex;\n timestamp: string;\n chainId: number;\n blockNumber: number;\n blockHash: Hex;\n gas: number;\n gasUsed: number;\n gasPrice: string;\n effectiveGasPrice: string;\n nonce: number;\n cumulativeGasUsed: number;\n methodId: null;\n value: string;\n to: string;\n from: string;\n isError: boolean;\n valueTransfers: {\n contractAddress: string;\n decimal: number;\n symbol: string;\n from: string;\n to: string;\n amount: string;\n }[];\n};\n\nexport type GetAccountTransactionsRequest = {\n address: Hex;\n chainIds?: Hex[];\n cursor?: string;\n endTimestamp?: number;\n sortDirection?: 'ASC' | 'DESC';\n startTimestamp?: number;\n};\n\nexport type GetAccountTransactionsResponse = {\n data: TransactionResponse[];\n pageInfo: {\n count: number;\n hasNextPage: boolean;\n cursor?: string;\n };\n};\n\nconst BASE_URL = `https://accounts.api.cx.metamask.io/v1/accounts/`;\nconst CLIENT_HEADER = 'x-metamask-clientproduct';\nconst CLIENT_ID = 'metamask-incoming-transactions';\n\nconst log = createModuleLogger(projectLogger, 'accounts-api');\n\n/**\n * Fetch account transactions from the accounts API.\n * @param request - The request object.\n * @returns The response object.\n */\nexport async function getAccountTransactions(\n request: GetAccountTransactionsRequest,\n): Promise<GetAccountTransactionsResponse> {\n const {\n address,\n chainIds,\n cursor,\n endTimestamp,\n sortDirection,\n startTimestamp,\n } = request;\n\n let url = `${BASE_URL}${address}/transactions`;\n const params = [];\n\n if (chainIds) {\n const network = chainIds.join(',');\n params.push(`networks=${network}`);\n }\n\n if (startTimestamp) {\n params.push(`startTimestamp=${startTimestamp}`);\n }\n\n if (endTimestamp) {\n params.push(`endTimestamp=${endTimestamp}`);\n }\n\n if (cursor) {\n params.push(`cursor=${cursor}`);\n }\n\n if (sortDirection) {\n params.push(`sortDirection=${sortDirection}`);\n }\n\n if (params.length) {\n url += `?${params.join('&')}`;\n }\n\n log('Getting account transactions', { request, url });\n\n const headers = {\n [CLIENT_HEADER]: CLIENT_ID,\n };\n\n const response = await successfulFetch(url, { headers });\n const responseJson = await response.json();\n\n log('Retrieved account transactions', responseJson);\n\n return responseJson;\n}\n"]}
@@ -30,6 +30,7 @@ export type GetAccountTransactionsRequest = {
30
30
  chainIds?: Hex[];
31
31
  cursor?: string;
32
32
  endTimestamp?: number;
33
+ sortDirection?: 'ASC' | 'DESC';
33
34
  startTimestamp?: number;
34
35
  };
35
36
  export type GetAccountTransactionsResponse = {
@@ -46,11 +47,4 @@ export type GetAccountTransactionsResponse = {
46
47
  * @returns The response object.
47
48
  */
48
49
  export declare function getAccountTransactions(request: GetAccountTransactionsRequest): Promise<GetAccountTransactionsResponse>;
49
- /**
50
- * Fetch account transactions from the accounts API.
51
- * Automatically fetches all pages.
52
- * @param request - The request object.
53
- * @returns An array of transaction objects.
54
- */
55
- export declare function getAccountTransactionsAllPages(request: GetAccountTransactionsRequest): Promise<TransactionResponse[]>;
56
50
  //# sourceMappingURL=accounts-api.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"accounts-api.d.cts","sourceRoot":"","sources":["../../src/api/accounts-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,GAAG,EAAE,wBAAwB;AAI/D,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,GAAG,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE;QACd,eAAe,EAAE,MAAM,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;KAChB,EAAE,CAAC;CACL,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,EAAE,GAAG,CAAC;IACb,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,IAAI,EAAE,mBAAmB,EAAE,CAAC;IAC5B,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,OAAO,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC;AAQF;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,8BAA8B,CAAC,CAuCzC;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAmBhC"}
1
+ {"version":3,"file":"accounts-api.d.cts","sourceRoot":"","sources":["../../src/api/accounts-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,GAAG,EAAE,wBAAwB;AAI/D,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,GAAG,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE;QACd,eAAe,EAAE,MAAM,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;KAChB,EAAE,CAAC;CACL,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,EAAE,GAAG,CAAC;IACb,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,IAAI,EAAE,mBAAmB,EAAE,CAAC;IAC5B,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,OAAO,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC;AAQF;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,8BAA8B,CAAC,CAkDzC"}
@@ -30,6 +30,7 @@ export type GetAccountTransactionsRequest = {
30
30
  chainIds?: Hex[];
31
31
  cursor?: string;
32
32
  endTimestamp?: number;
33
+ sortDirection?: 'ASC' | 'DESC';
33
34
  startTimestamp?: number;
34
35
  };
35
36
  export type GetAccountTransactionsResponse = {
@@ -46,11 +47,4 @@ export type GetAccountTransactionsResponse = {
46
47
  * @returns The response object.
47
48
  */
48
49
  export declare function getAccountTransactions(request: GetAccountTransactionsRequest): Promise<GetAccountTransactionsResponse>;
49
- /**
50
- * Fetch account transactions from the accounts API.
51
- * Automatically fetches all pages.
52
- * @param request - The request object.
53
- * @returns An array of transaction objects.
54
- */
55
- export declare function getAccountTransactionsAllPages(request: GetAccountTransactionsRequest): Promise<TransactionResponse[]>;
56
50
  //# sourceMappingURL=accounts-api.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"accounts-api.d.mts","sourceRoot":"","sources":["../../src/api/accounts-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,GAAG,EAAE,wBAAwB;AAI/D,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,GAAG,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE;QACd,eAAe,EAAE,MAAM,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;KAChB,EAAE,CAAC;CACL,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,EAAE,GAAG,CAAC;IACb,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,IAAI,EAAE,mBAAmB,EAAE,CAAC;IAC5B,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,OAAO,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC;AAQF;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,8BAA8B,CAAC,CAuCzC;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAmBhC"}
1
+ {"version":3,"file":"accounts-api.d.mts","sourceRoot":"","sources":["../../src/api/accounts-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,GAAG,EAAE,wBAAwB;AAI/D,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,GAAG,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE;QACd,eAAe,EAAE,MAAM,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;KAChB,EAAE,CAAC;CACL,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,EAAE,GAAG,CAAC;IACb,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,IAAI,EAAE,mBAAmB,EAAE,CAAC;IAC5B,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,OAAO,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC;AAQF;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,8BAA8B,CAAC,CAkDzC"}
@@ -1,3 +1,4 @@
1
+ import { successfulFetch } from "@metamask/controller-utils";
1
2
  import { createModuleLogger } from "@metamask/utils";
2
3
  import { projectLogger } from "../logger.mjs";
3
4
  const BASE_URL = `https://accounts.api.cx.metamask.io/v1/accounts/`;
@@ -10,7 +11,7 @@ const log = createModuleLogger(projectLogger, 'accounts-api');
10
11
  * @returns The response object.
11
12
  */
12
13
  export async function getAccountTransactions(request) {
13
- const { address, chainIds, cursor, endTimestamp, startTimestamp } = request;
14
+ const { address, chainIds, cursor, endTimestamp, sortDirection, startTimestamp, } = request;
14
15
  let url = `${BASE_URL}${address}/transactions`;
15
16
  const params = [];
16
17
  if (chainIds) {
@@ -26,6 +27,9 @@ export async function getAccountTransactions(request) {
26
27
  if (cursor) {
27
28
  params.push(`cursor=${cursor}`);
28
29
  }
30
+ if (sortDirection) {
31
+ params.push(`sortDirection=${sortDirection}`);
32
+ }
29
33
  if (params.length) {
30
34
  url += `?${params.join('&')}`;
31
35
  }
@@ -33,29 +37,9 @@ export async function getAccountTransactions(request) {
33
37
  const headers = {
34
38
  [CLIENT_HEADER]: CLIENT_ID,
35
39
  };
36
- const response = await fetch(url, { headers });
40
+ const response = await successfulFetch(url, { headers });
37
41
  const responseJson = await response.json();
38
42
  log('Retrieved account transactions', responseJson);
39
43
  return responseJson;
40
44
  }
41
- /**
42
- * Fetch account transactions from the accounts API.
43
- * Automatically fetches all pages.
44
- * @param request - The request object.
45
- * @returns An array of transaction objects.
46
- */
47
- export async function getAccountTransactionsAllPages(request) {
48
- const transactions = [];
49
- let cursor;
50
- let hasNextPage = true;
51
- log('Getting account transactions from all pages', request);
52
- while (hasNextPage) {
53
- const response = await getAccountTransactions({ ...request, cursor });
54
- transactions.push(...response.data);
55
- cursor = response.pageInfo.cursor;
56
- hasNextPage = response.pageInfo.hasNextPage;
57
- }
58
- log('Retrieved account transactions from all pages', transactions);
59
- return transactions;
60
- }
61
45
  //# sourceMappingURL=accounts-api.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"accounts-api.mjs","sourceRoot":"","sources":["../../src/api/accounts-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAY,wBAAwB;AAE/D,OAAO,EAAE,aAAa,EAAE,sBAAkB;AA8C1C,MAAM,QAAQ,GAAG,kDAAkD,CAAC;AACpE,MAAM,aAAa,GAAG,0BAA0B,CAAC;AACjD,MAAM,SAAS,GAAG,gCAAgC,CAAC;AAEnD,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AAE9D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAsC;IAEtC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAE5E,IAAI,GAAG,GAAG,GAAG,QAAQ,GAAG,OAAO,eAAe,CAAC;IAC/C,MAAM,MAAM,GAAG,EAAE,CAAC;IAElB,IAAI,QAAQ,EAAE;QACZ,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;KACpC;IAED,IAAI,cAAc,EAAE;QAClB,MAAM,CAAC,IAAI,CAAC,kBAAkB,cAAc,EAAE,CAAC,CAAC;KACjD;IAED,IAAI,YAAY,EAAE;QAChB,MAAM,CAAC,IAAI,CAAC,gBAAgB,YAAY,EAAE,CAAC,CAAC;KAC7C;IAED,IAAI,MAAM,EAAE;QACV,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;KACjC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE;QACjB,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;KAC/B;IAED,GAAG,CAAC,8BAA8B,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAG;QACd,CAAC,aAAa,CAAC,EAAE,SAAS;KAC3B,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAE3C,GAAG,CAAC,gCAAgC,EAAE,YAAY,CAAC,CAAC;IAEpD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,OAAsC;IAEtC,MAAM,YAAY,GAAG,EAAE,CAAC;IAExB,IAAI,MAAM,CAAC;IACX,IAAI,WAAW,GAAG,IAAI,CAAC;IAEvB,GAAG,CAAC,6CAA6C,EAAE,OAAO,CAAC,CAAC;IAE5D,OAAO,WAAW,EAAE;QAClB,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACtE,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEpC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAClC,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;KAC7C;IAED,GAAG,CAAC,+CAA+C,EAAE,YAAY,CAAC,CAAC;IAEnE,OAAO,YAAY,CAAC;AACtB,CAAC","sourcesContent":["import { createModuleLogger, type Hex } from '@metamask/utils';\n\nimport { projectLogger } from '../logger';\n\nexport type TransactionResponse = {\n hash: Hex;\n timestamp: string;\n chainId: number;\n blockNumber: number;\n blockHash: Hex;\n gas: number;\n gasUsed: number;\n gasPrice: string;\n effectiveGasPrice: string;\n nonce: number;\n cumulativeGasUsed: number;\n methodId: null;\n value: string;\n to: string;\n from: string;\n isError: boolean;\n valueTransfers: {\n contractAddress: string;\n decimal: number;\n symbol: string;\n from: string;\n to: string;\n amount: string;\n }[];\n};\n\nexport type GetAccountTransactionsRequest = {\n address: Hex;\n chainIds?: Hex[];\n cursor?: string;\n endTimestamp?: number;\n startTimestamp?: number;\n};\n\nexport type GetAccountTransactionsResponse = {\n data: TransactionResponse[];\n pageInfo: {\n count: number;\n hasNextPage: boolean;\n cursor?: string;\n };\n};\n\nconst BASE_URL = `https://accounts.api.cx.metamask.io/v1/accounts/`;\nconst CLIENT_HEADER = 'x-metamask-clientproduct';\nconst CLIENT_ID = 'metamask-incoming-transactions';\n\nconst log = createModuleLogger(projectLogger, 'accounts-api');\n\n/**\n * Fetch account transactions from the accounts API.\n * @param request - The request object.\n * @returns The response object.\n */\nexport async function getAccountTransactions(\n request: GetAccountTransactionsRequest,\n): Promise<GetAccountTransactionsResponse> {\n const { address, chainIds, cursor, endTimestamp, startTimestamp } = request;\n\n let url = `${BASE_URL}${address}/transactions`;\n const params = [];\n\n if (chainIds) {\n const network = chainIds.join(',');\n params.push(`networks=${network}`);\n }\n\n if (startTimestamp) {\n params.push(`startTimestamp=${startTimestamp}`);\n }\n\n if (endTimestamp) {\n params.push(`endTimestamp=${endTimestamp}`);\n }\n\n if (cursor) {\n params.push(`cursor=${cursor}`);\n }\n\n if (params.length) {\n url += `?${params.join('&')}`;\n }\n\n log('Getting account transactions', { request, url });\n\n const headers = {\n [CLIENT_HEADER]: CLIENT_ID,\n };\n\n const response = await fetch(url, { headers });\n const responseJson = await response.json();\n\n log('Retrieved account transactions', responseJson);\n\n return responseJson;\n}\n\n/**\n * Fetch account transactions from the accounts API.\n * Automatically fetches all pages.\n * @param request - The request object.\n * @returns An array of transaction objects.\n */\nexport async function getAccountTransactionsAllPages(\n request: GetAccountTransactionsRequest,\n): Promise<TransactionResponse[]> {\n const transactions = [];\n\n let cursor;\n let hasNextPage = true;\n\n log('Getting account transactions from all pages', request);\n\n while (hasNextPage) {\n const response = await getAccountTransactions({ ...request, cursor });\n transactions.push(...response.data);\n\n cursor = response.pageInfo.cursor;\n hasNextPage = response.pageInfo.hasNextPage;\n }\n\n log('Retrieved account transactions from all pages', transactions);\n\n return transactions;\n}\n"]}
1
+ {"version":3,"file":"accounts-api.mjs","sourceRoot":"","sources":["../../src/api/accounts-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,mCAAmC;AAC7D,OAAO,EAAE,kBAAkB,EAAY,wBAAwB;AAE/D,OAAO,EAAE,aAAa,EAAE,sBAAkB;AA+C1C,MAAM,QAAQ,GAAG,kDAAkD,CAAC;AACpE,MAAM,aAAa,GAAG,0BAA0B,CAAC;AACjD,MAAM,SAAS,GAAG,gCAAgC,CAAC;AAEnD,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AAE9D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAsC;IAEtC,MAAM,EACJ,OAAO,EACP,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,aAAa,EACb,cAAc,GACf,GAAG,OAAO,CAAC;IAEZ,IAAI,GAAG,GAAG,GAAG,QAAQ,GAAG,OAAO,eAAe,CAAC;IAC/C,MAAM,MAAM,GAAG,EAAE,CAAC;IAElB,IAAI,QAAQ,EAAE;QACZ,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;KACpC;IAED,IAAI,cAAc,EAAE;QAClB,MAAM,CAAC,IAAI,CAAC,kBAAkB,cAAc,EAAE,CAAC,CAAC;KACjD;IAED,IAAI,YAAY,EAAE;QAChB,MAAM,CAAC,IAAI,CAAC,gBAAgB,YAAY,EAAE,CAAC,CAAC;KAC7C;IAED,IAAI,MAAM,EAAE;QACV,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;KACjC;IAED,IAAI,aAAa,EAAE;QACjB,MAAM,CAAC,IAAI,CAAC,iBAAiB,aAAa,EAAE,CAAC,CAAC;KAC/C;IAED,IAAI,MAAM,CAAC,MAAM,EAAE;QACjB,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;KAC/B;IAED,GAAG,CAAC,8BAA8B,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAG;QACd,CAAC,aAAa,CAAC,EAAE,SAAS;KAC3B,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAE3C,GAAG,CAAC,gCAAgC,EAAE,YAAY,CAAC,CAAC;IAEpD,OAAO,YAAY,CAAC;AACtB,CAAC","sourcesContent":["import { successfulFetch } from '@metamask/controller-utils';\nimport { createModuleLogger, type Hex } from '@metamask/utils';\n\nimport { projectLogger } from '../logger';\n\nexport type TransactionResponse = {\n hash: Hex;\n timestamp: string;\n chainId: number;\n blockNumber: number;\n blockHash: Hex;\n gas: number;\n gasUsed: number;\n gasPrice: string;\n effectiveGasPrice: string;\n nonce: number;\n cumulativeGasUsed: number;\n methodId: null;\n value: string;\n to: string;\n from: string;\n isError: boolean;\n valueTransfers: {\n contractAddress: string;\n decimal: number;\n symbol: string;\n from: string;\n to: string;\n amount: string;\n }[];\n};\n\nexport type GetAccountTransactionsRequest = {\n address: Hex;\n chainIds?: Hex[];\n cursor?: string;\n endTimestamp?: number;\n sortDirection?: 'ASC' | 'DESC';\n startTimestamp?: number;\n};\n\nexport type GetAccountTransactionsResponse = {\n data: TransactionResponse[];\n pageInfo: {\n count: number;\n hasNextPage: boolean;\n cursor?: string;\n };\n};\n\nconst BASE_URL = `https://accounts.api.cx.metamask.io/v1/accounts/`;\nconst CLIENT_HEADER = 'x-metamask-clientproduct';\nconst CLIENT_ID = 'metamask-incoming-transactions';\n\nconst log = createModuleLogger(projectLogger, 'accounts-api');\n\n/**\n * Fetch account transactions from the accounts API.\n * @param request - The request object.\n * @returns The response object.\n */\nexport async function getAccountTransactions(\n request: GetAccountTransactionsRequest,\n): Promise<GetAccountTransactionsResponse> {\n const {\n address,\n chainIds,\n cursor,\n endTimestamp,\n sortDirection,\n startTimestamp,\n } = request;\n\n let url = `${BASE_URL}${address}/transactions`;\n const params = [];\n\n if (chainIds) {\n const network = chainIds.join(',');\n params.push(`networks=${network}`);\n }\n\n if (startTimestamp) {\n params.push(`startTimestamp=${startTimestamp}`);\n }\n\n if (endTimestamp) {\n params.push(`endTimestamp=${endTimestamp}`);\n }\n\n if (cursor) {\n params.push(`cursor=${cursor}`);\n }\n\n if (sortDirection) {\n params.push(`sortDirection=${sortDirection}`);\n }\n\n if (params.length) {\n url += `?${params.join('&')}`;\n }\n\n log('Getting account transactions', { request, url });\n\n const headers = {\n [CLIENT_HEADER]: CLIENT_ID,\n };\n\n const response = await successfulFetch(url, { headers });\n const responseJson = await response.json();\n\n log('Retrieved account transactions', responseJson);\n\n return responseJson;\n}\n"]}
@@ -7,9 +7,9 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
7
7
  var __importDefault = (this && this.__importDefault) || function (mod) {
8
8
  return (mod && mod.__esModule) ? mod : { "default": mod };
9
9
  };
10
- var _AccountsApiRemoteTransactionSource_instances, _AccountsApiRemoteTransactionSource_getTransactions, _AccountsApiRemoteTransactionSource_filterTransactions, _AccountsApiRemoteTransactionSource_normalizeTransaction;
10
+ var _AccountsApiRemoteTransactionSource_instances, _AccountsApiRemoteTransactionSource_getTransactions, _AccountsApiRemoteTransactionSource_queryTransactions, _AccountsApiRemoteTransactionSource_filterTransactions, _AccountsApiRemoteTransactionSource_normalizeTransaction, _AccountsApiRemoteTransactionSource_getCacheKey, _AccountsApiRemoteTransactionSource_getCacheCursor, _AccountsApiRemoteTransactionSource_getTimestampSeconds;
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.AccountsApiRemoteTransactionSource = void 0;
12
+ exports.AccountsApiRemoteTransactionSource = exports.SUPPORTED_CHAIN_IDS = void 0;
13
13
  const controller_utils_1 = require("@metamask/controller-utils");
14
14
  const bn_js_1 = __importDefault(require("bn.js"));
15
15
  const uuid_1 = require("uuid");
@@ -17,7 +17,7 @@ const accounts_api_1 = require("../api/accounts-api.cjs");
17
17
  const constants_1 = require("../constants.cjs");
18
18
  const logger_1 = require("../logger.cjs");
19
19
  const types_1 = require("../types.cjs");
20
- const SUPPORTED_CHAIN_IDS = [
20
+ exports.SUPPORTED_CHAIN_IDS = [
21
21
  constants_1.CHAIN_IDS.MAINNET,
22
22
  constants_1.CHAIN_IDS.POLYGON,
23
23
  constants_1.CHAIN_IDS.BSC,
@@ -36,44 +36,83 @@ class AccountsApiRemoteTransactionSource {
36
36
  _AccountsApiRemoteTransactionSource_instances.add(this);
37
37
  }
38
38
  getSupportedChains() {
39
- return SUPPORTED_CHAIN_IDS;
39
+ return exports.SUPPORTED_CHAIN_IDS;
40
40
  }
41
41
  async fetchTransactions(request) {
42
42
  const { address } = request;
43
43
  const responseTransactions = await __classPrivateFieldGet(this, _AccountsApiRemoteTransactionSource_instances, "m", _AccountsApiRemoteTransactionSource_getTransactions).call(this, request);
44
- const incomingTransactions = __classPrivateFieldGet(this, _AccountsApiRemoteTransactionSource_instances, "m", _AccountsApiRemoteTransactionSource_filterTransactions).call(this, request, responseTransactions);
45
- const normalizedTransactions = incomingTransactions.map((tx) => __classPrivateFieldGet(this, _AccountsApiRemoteTransactionSource_instances, "m", _AccountsApiRemoteTransactionSource_normalizeTransaction).call(this, address, tx));
46
- log('Filtered and normalized transactions', normalizedTransactions);
47
- return normalizedTransactions;
44
+ log('Fetched transactions', responseTransactions);
45
+ const normalizedTransactions = responseTransactions.map((tx) => __classPrivateFieldGet(this, _AccountsApiRemoteTransactionSource_instances, "m", _AccountsApiRemoteTransactionSource_normalizeTransaction).call(this, address, tx));
46
+ log('Normalized transactions', normalizedTransactions);
47
+ const filteredTransactions = __classPrivateFieldGet(this, _AccountsApiRemoteTransactionSource_instances, "m", _AccountsApiRemoteTransactionSource_filterTransactions).call(this, request, normalizedTransactions);
48
+ log('Filtered transactions', filteredTransactions);
49
+ return filteredTransactions;
48
50
  }
49
51
  }
50
52
  exports.AccountsApiRemoteTransactionSource = AccountsApiRemoteTransactionSource;
51
53
  _AccountsApiRemoteTransactionSource_instances = new WeakSet(), _AccountsApiRemoteTransactionSource_getTransactions = async function _AccountsApiRemoteTransactionSource_getTransactions(request) {
52
- log('Fetching transactions', request);
53
- const { address, chainIds: requestedChainIds, endTimestamp, startTimestampByChainId, } = request;
54
- const chainIds = requestedChainIds.filter((chainId) => SUPPORTED_CHAIN_IDS.includes(chainId));
54
+ log('Getting transactions', request);
55
+ const { address, cache, chainIds: requestedChainIds } = request;
56
+ const chainIds = requestedChainIds.filter((chainId) => exports.SUPPORTED_CHAIN_IDS.includes(chainId));
55
57
  const unsupportedChainIds = requestedChainIds.filter((chainId) => !chainIds.includes(chainId));
56
58
  if (unsupportedChainIds.length) {
57
59
  log('Ignoring unsupported chain IDs', unsupportedChainIds);
58
60
  }
59
- const startTimestamp = Math.min(...Object.values(startTimestampByChainId));
60
- return await (0, accounts_api_1.getAccountTransactionsAllPages)({
61
- address,
62
- chainIds,
63
- startTimestamp,
64
- endTimestamp,
65
- });
66
- }, _AccountsApiRemoteTransactionSource_filterTransactions = function _AccountsApiRemoteTransactionSource_filterTransactions(request, responseTransactions) {
67
- const { address, startTimestampByChainId, limit } = request;
68
- const incomingTransactions = responseTransactions.filter((tx) => tx.to === address || tx.valueTransfers.some((vt) => vt.to === address));
69
- log('Fetched incoming transactions from accounts API', incomingTransactions);
70
- const incomingTransactionsMatchingTimestamp = incomingTransactions.filter((tx) => {
71
- const chainId = `0x${tx.chainId.toString(16)}`;
72
- const chainStartTimestamp = startTimestampByChainId[chainId];
73
- const timestamp = new Date(tx.timestamp).getTime();
74
- return timestamp >= chainStartTimestamp;
75
- });
76
- return incomingTransactionsMatchingTimestamp.slice(0, limit);
61
+ const cursor = __classPrivateFieldGet(this, _AccountsApiRemoteTransactionSource_instances, "m", _AccountsApiRemoteTransactionSource_getCacheCursor).call(this, cache, chainIds, address);
62
+ if (cursor) {
63
+ log('Using cached cursor', cursor);
64
+ }
65
+ return await __classPrivateFieldGet(this, _AccountsApiRemoteTransactionSource_instances, "m", _AccountsApiRemoteTransactionSource_queryTransactions).call(this, request, chainIds, cursor);
66
+ }, _AccountsApiRemoteTransactionSource_queryTransactions = async function _AccountsApiRemoteTransactionSource_queryTransactions(request, chainIds, cursor) {
67
+ const { address, queryEntireHistory, updateCache } = request;
68
+ const transactions = [];
69
+ let hasNextPage = true;
70
+ let currentCursor = cursor;
71
+ let pageCount = 0;
72
+ const startTimestamp = queryEntireHistory
73
+ ? undefined
74
+ : __classPrivateFieldGet(this, _AccountsApiRemoteTransactionSource_instances, "m", _AccountsApiRemoteTransactionSource_getTimestampSeconds).call(this, Date.now());
75
+ while (hasNextPage) {
76
+ try {
77
+ const response = await (0, accounts_api_1.getAccountTransactions)({
78
+ address,
79
+ chainIds,
80
+ cursor: currentCursor,
81
+ sortDirection: 'ASC',
82
+ startTimestamp,
83
+ });
84
+ pageCount += 1;
85
+ if (response?.data) {
86
+ transactions.push(...response.data);
87
+ }
88
+ hasNextPage = response?.pageInfo?.hasNextPage;
89
+ currentCursor = response?.pageInfo?.cursor;
90
+ if (currentCursor) {
91
+ // eslint-disable-next-line no-loop-func
92
+ updateCache((cache) => {
93
+ const key = __classPrivateFieldGet(this, _AccountsApiRemoteTransactionSource_instances, "m", _AccountsApiRemoteTransactionSource_getCacheKey).call(this, chainIds, address);
94
+ cache[key] = currentCursor;
95
+ log('Updated cache', { key, newCursor: currentCursor });
96
+ });
97
+ }
98
+ }
99
+ catch (error) {
100
+ log('Error while fetching transactions', error);
101
+ break;
102
+ }
103
+ }
104
+ log('Queried transactions', { pageCount });
105
+ return transactions;
106
+ }, _AccountsApiRemoteTransactionSource_filterTransactions = function _AccountsApiRemoteTransactionSource_filterTransactions(request, transactions) {
107
+ const { address, includeTokenTransfers, updateTransactions } = request;
108
+ let filteredTransactions = transactions;
109
+ if (!updateTransactions) {
110
+ filteredTransactions = filteredTransactions.filter((tx) => tx.txParams.to === address);
111
+ }
112
+ if (!includeTokenTransfers) {
113
+ filteredTransactions = filteredTransactions.filter((tx) => !tx.isTransfer);
114
+ }
115
+ return filteredTransactions;
77
116
  }, _AccountsApiRemoteTransactionSource_normalizeTransaction = function _AccountsApiRemoteTransactionSource_normalizeTransaction(address, responseTransaction) {
78
117
  const blockNumber = String(responseTransaction.blockNumber);
79
118
  const chainId = `0x${responseTransaction.chainId.toString(16)}`;
@@ -90,13 +129,13 @@ _AccountsApiRemoteTransactionSource_instances = new WeakSet(), _AccountsApiRemot
90
129
  const status = responseTransaction.isError
91
130
  ? types_1.TransactionStatus.failed
92
131
  : types_1.TransactionStatus.confirmed;
93
- const valueTransfer = responseTransaction.valueTransfers.find((vt) => vt.to === address);
132
+ const valueTransfer = responseTransaction.valueTransfers.find((vt) => vt.to === address && vt.contractAddress);
94
133
  const isTransfer = Boolean(valueTransfer);
95
134
  const contractAddress = valueTransfer?.contractAddress;
96
135
  const decimals = valueTransfer?.decimal;
97
136
  const symbol = valueTransfer?.symbol;
98
137
  const value = (0, controller_utils_1.BNToHex)(new bn_js_1.default(valueTransfer?.amount ?? responseTransaction.value));
99
- const to = address;
138
+ const to = valueTransfer ? address : responseTransaction.to;
100
139
  return {
101
140
  blockNumber,
102
141
  chainId,
@@ -128,5 +167,12 @@ _AccountsApiRemoteTransactionSource_instances = new WeakSet(), _AccountsApiRemot
128
167
  }
129
168
  : undefined,
130
169
  };
170
+ }, _AccountsApiRemoteTransactionSource_getCacheKey = function _AccountsApiRemoteTransactionSource_getCacheKey(chainIds, address) {
171
+ return `accounts-api#${chainIds.join(',')}#${address}`;
172
+ }, _AccountsApiRemoteTransactionSource_getCacheCursor = function _AccountsApiRemoteTransactionSource_getCacheCursor(cache, chainIds, address) {
173
+ const key = __classPrivateFieldGet(this, _AccountsApiRemoteTransactionSource_instances, "m", _AccountsApiRemoteTransactionSource_getCacheKey).call(this, chainIds, address);
174
+ return cache[key];
175
+ }, _AccountsApiRemoteTransactionSource_getTimestampSeconds = function _AccountsApiRemoteTransactionSource_getTimestampSeconds(timestampMs) {
176
+ return Math.floor(timestampMs / 1000);
131
177
  };
132
178
  //# sourceMappingURL=AccountsApiRemoteTransactionSource.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"AccountsApiRemoteTransactionSource.cjs","sourceRoot":"","sources":["../../src/helpers/AccountsApiRemoteTransactionSource.ts"],"names":[],"mappings":"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","sourcesContent":["import { BNToHex } from '@metamask/controller-utils';\nimport type { Hex } from '@metamask/utils';\nimport BN from 'bn.js';\nimport { v1 as random } from 'uuid';\n\nimport type {\n GetAccountTransactionsResponse,\n TransactionResponse,\n} from '../api/accounts-api';\nimport { getAccountTransactionsAllPages } from '../api/accounts-api';\nimport { CHAIN_IDS } from '../constants';\nimport { createModuleLogger, incomingTransactionsLogger } from '../logger';\nimport type {\n RemoteTransactionSource,\n RemoteTransactionSourceRequest,\n TransactionError,\n TransactionMeta,\n} from '../types';\nimport { TransactionStatus, TransactionType } from '../types';\n\nconst SUPPORTED_CHAIN_IDS: Hex[] = [\n CHAIN_IDS.MAINNET,\n CHAIN_IDS.POLYGON,\n CHAIN_IDS.BSC,\n CHAIN_IDS.LINEA_MAINNET,\n CHAIN_IDS.BASE,\n CHAIN_IDS.OPTIMISM,\n CHAIN_IDS.ARBITRUM,\n CHAIN_IDS.SCROLL,\n];\n\nconst log = createModuleLogger(\n incomingTransactionsLogger,\n 'accounts-api-source',\n);\n\n/**\n * A RemoteTransactionSource that fetches incoming transactions using the Accounts API.\n */\nexport class AccountsApiRemoteTransactionSource\n implements RemoteTransactionSource\n{\n getSupportedChains(): Hex[] {\n return SUPPORTED_CHAIN_IDS;\n }\n\n async fetchTransactions(\n request: RemoteTransactionSourceRequest,\n ): Promise<TransactionMeta[]> {\n const { address } = request;\n\n const responseTransactions = await this.#getTransactions(request);\n\n const incomingTransactions = this.#filterTransactions(\n request,\n responseTransactions,\n );\n\n const normalizedTransactions = incomingTransactions.map((tx) =>\n this.#normalizeTransaction(address, tx),\n );\n\n log('Filtered and normalized transactions', normalizedTransactions);\n\n return normalizedTransactions;\n }\n\n async #getTransactions(request: RemoteTransactionSourceRequest) {\n log('Fetching transactions', request);\n\n const {\n address,\n chainIds: requestedChainIds,\n endTimestamp,\n startTimestampByChainId,\n } = request;\n\n const chainIds = requestedChainIds.filter((chainId) =>\n SUPPORTED_CHAIN_IDS.includes(chainId),\n );\n\n const unsupportedChainIds = requestedChainIds.filter(\n (chainId) => !chainIds.includes(chainId),\n );\n\n if (unsupportedChainIds.length) {\n log('Ignoring unsupported chain IDs', unsupportedChainIds);\n }\n\n const startTimestamp = Math.min(...Object.values(startTimestampByChainId));\n\n return await getAccountTransactionsAllPages({\n address,\n chainIds,\n startTimestamp,\n endTimestamp,\n });\n }\n\n #filterTransactions(\n request: RemoteTransactionSourceRequest,\n responseTransactions: TransactionResponse[],\n ) {\n const { address, startTimestampByChainId, limit } = request;\n\n const incomingTransactions = responseTransactions.filter(\n (tx) =>\n tx.to === address || tx.valueTransfers.some((vt) => vt.to === address),\n );\n\n log(\n 'Fetched incoming transactions from accounts API',\n incomingTransactions,\n );\n\n const incomingTransactionsMatchingTimestamp = incomingTransactions.filter(\n (tx) => {\n const chainId = `0x${tx.chainId.toString(16)}` as Hex;\n const chainStartTimestamp = startTimestampByChainId[chainId];\n const timestamp = new Date(tx.timestamp).getTime();\n return timestamp >= chainStartTimestamp;\n },\n );\n\n return incomingTransactionsMatchingTimestamp.slice(0, limit);\n }\n\n #normalizeTransaction(\n address: Hex,\n responseTransaction: GetAccountTransactionsResponse['data'][0],\n ): TransactionMeta {\n const blockNumber = String(responseTransaction.blockNumber);\n const chainId = `0x${responseTransaction.chainId.toString(16)}` as Hex;\n const { hash } = responseTransaction;\n const time = new Date(responseTransaction.timestamp).getTime();\n const id = random({ msecs: time });\n const { from } = responseTransaction;\n const gas = BNToHex(new BN(responseTransaction.gas));\n const gasPrice = BNToHex(new BN(responseTransaction.gasPrice));\n const gasUsed = BNToHex(new BN(responseTransaction.gasUsed));\n const nonce = BNToHex(new BN(responseTransaction.nonce));\n const type = TransactionType.incoming;\n const verifiedOnBlockchain = false;\n\n const status = responseTransaction.isError\n ? TransactionStatus.failed\n : TransactionStatus.confirmed;\n\n const valueTransfer = responseTransaction.valueTransfers.find(\n (vt) => vt.to === address,\n );\n\n const isTransfer = Boolean(valueTransfer);\n const contractAddress = valueTransfer?.contractAddress as string;\n const decimals = valueTransfer?.decimal as number;\n const symbol = valueTransfer?.symbol as string;\n\n const value = BNToHex(\n new BN(valueTransfer?.amount ?? responseTransaction.value),\n );\n\n const to = address;\n\n return {\n blockNumber,\n chainId,\n hash,\n id,\n status,\n error:\n status === TransactionStatus.failed\n ? new Error('Transaction failed')\n : (undefined as unknown as TransactionError),\n time,\n txParams: {\n chainId,\n from,\n gas,\n gasPrice,\n gasUsed,\n nonce,\n to,\n value,\n },\n type,\n verifiedOnBlockchain,\n isTransfer,\n transferInformation: isTransfer\n ? {\n contractAddress,\n decimals,\n symbol,\n }\n : undefined,\n };\n }\n}\n"]}
1
+ {"version":3,"file":"AccountsApiRemoteTransactionSource.cjs","sourceRoot":"","sources":["../../src/helpers/AccountsApiRemoteTransactionSource.ts"],"names":[],"mappings":"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","sourcesContent":["import { BNToHex } from '@metamask/controller-utils';\nimport type { Hex } from '@metamask/utils';\nimport BN from 'bn.js';\nimport { v1 as random } from 'uuid';\n\nimport type {\n GetAccountTransactionsResponse,\n TransactionResponse,\n} from '../api/accounts-api';\nimport { getAccountTransactions } from '../api/accounts-api';\nimport { CHAIN_IDS } from '../constants';\nimport { createModuleLogger, incomingTransactionsLogger } from '../logger';\nimport type {\n RemoteTransactionSource,\n RemoteTransactionSourceRequest,\n TransactionError,\n TransactionMeta,\n} from '../types';\nimport { TransactionStatus, TransactionType } from '../types';\n\nexport const SUPPORTED_CHAIN_IDS: Hex[] = [\n CHAIN_IDS.MAINNET,\n CHAIN_IDS.POLYGON,\n CHAIN_IDS.BSC,\n CHAIN_IDS.LINEA_MAINNET,\n CHAIN_IDS.BASE,\n CHAIN_IDS.OPTIMISM,\n CHAIN_IDS.ARBITRUM,\n CHAIN_IDS.SCROLL,\n];\n\nconst log = createModuleLogger(\n incomingTransactionsLogger,\n 'accounts-api-source',\n);\n\n/**\n * A RemoteTransactionSource that fetches incoming transactions using the Accounts API.\n */\nexport class AccountsApiRemoteTransactionSource\n implements RemoteTransactionSource\n{\n getSupportedChains(): Hex[] {\n return SUPPORTED_CHAIN_IDS;\n }\n\n async fetchTransactions(\n request: RemoteTransactionSourceRequest,\n ): Promise<TransactionMeta[]> {\n const { address } = request;\n\n const responseTransactions = await this.#getTransactions(request);\n\n log('Fetched transactions', responseTransactions);\n\n const normalizedTransactions = responseTransactions.map((tx) =>\n this.#normalizeTransaction(address, tx),\n );\n\n log('Normalized transactions', normalizedTransactions);\n\n const filteredTransactions = this.#filterTransactions(\n request,\n normalizedTransactions,\n );\n\n log('Filtered transactions', filteredTransactions);\n\n return filteredTransactions;\n }\n\n async #getTransactions(request: RemoteTransactionSourceRequest) {\n log('Getting transactions', request);\n\n const { address, cache, chainIds: requestedChainIds } = request;\n\n const chainIds = requestedChainIds.filter((chainId) =>\n SUPPORTED_CHAIN_IDS.includes(chainId),\n );\n\n const unsupportedChainIds = requestedChainIds.filter(\n (chainId) => !chainIds.includes(chainId),\n );\n\n if (unsupportedChainIds.length) {\n log('Ignoring unsupported chain IDs', unsupportedChainIds);\n }\n\n const cursor = this.#getCacheCursor(cache, chainIds, address);\n\n if (cursor) {\n log('Using cached cursor', cursor);\n }\n\n return await this.#queryTransactions(request, chainIds, cursor);\n }\n\n async #queryTransactions(\n request: RemoteTransactionSourceRequest,\n chainIds: Hex[],\n cursor?: string,\n ): Promise<TransactionResponse[]> {\n const { address, queryEntireHistory, updateCache } = request;\n const transactions: TransactionResponse[] = [];\n\n let hasNextPage = true;\n let currentCursor = cursor;\n let pageCount = 0;\n\n const startTimestamp = queryEntireHistory\n ? undefined\n : this.#getTimestampSeconds(Date.now());\n\n while (hasNextPage) {\n try {\n const response = await getAccountTransactions({\n address,\n chainIds,\n cursor: currentCursor,\n sortDirection: 'ASC',\n startTimestamp,\n });\n\n pageCount += 1;\n\n if (response?.data) {\n transactions.push(...response.data);\n }\n\n hasNextPage = response?.pageInfo?.hasNextPage;\n currentCursor = response?.pageInfo?.cursor;\n\n if (currentCursor) {\n // eslint-disable-next-line no-loop-func\n updateCache((cache) => {\n const key = this.#getCacheKey(chainIds, address);\n cache[key] = currentCursor;\n\n log('Updated cache', { key, newCursor: currentCursor });\n });\n }\n } catch (error) {\n log('Error while fetching transactions', error);\n break;\n }\n }\n\n log('Queried transactions', { pageCount });\n\n return transactions;\n }\n\n #filterTransactions(\n request: RemoteTransactionSourceRequest,\n transactions: TransactionMeta[],\n ) {\n const { address, includeTokenTransfers, updateTransactions } = request;\n\n let filteredTransactions = transactions;\n\n if (!updateTransactions) {\n filteredTransactions = filteredTransactions.filter(\n (tx) => tx.txParams.to === address,\n );\n }\n\n if (!includeTokenTransfers) {\n filteredTransactions = filteredTransactions.filter(\n (tx) => !tx.isTransfer,\n );\n }\n\n return filteredTransactions;\n }\n\n #normalizeTransaction(\n address: Hex,\n responseTransaction: GetAccountTransactionsResponse['data'][0],\n ): TransactionMeta {\n const blockNumber = String(responseTransaction.blockNumber);\n const chainId = `0x${responseTransaction.chainId.toString(16)}` as Hex;\n const { hash } = responseTransaction;\n const time = new Date(responseTransaction.timestamp).getTime();\n const id = random({ msecs: time });\n const { from } = responseTransaction;\n const gas = BNToHex(new BN(responseTransaction.gas));\n const gasPrice = BNToHex(new BN(responseTransaction.gasPrice));\n const gasUsed = BNToHex(new BN(responseTransaction.gasUsed));\n const nonce = BNToHex(new BN(responseTransaction.nonce));\n const type = TransactionType.incoming;\n const verifiedOnBlockchain = false;\n\n const status = responseTransaction.isError\n ? TransactionStatus.failed\n : TransactionStatus.confirmed;\n\n const valueTransfer = responseTransaction.valueTransfers.find(\n (vt) => vt.to === address && vt.contractAddress,\n );\n\n const isTransfer = Boolean(valueTransfer);\n const contractAddress = valueTransfer?.contractAddress as string;\n const decimals = valueTransfer?.decimal as number;\n const symbol = valueTransfer?.symbol as string;\n\n const value = BNToHex(\n new BN(valueTransfer?.amount ?? responseTransaction.value),\n );\n\n const to = valueTransfer ? address : responseTransaction.to;\n\n return {\n blockNumber,\n chainId,\n hash,\n id,\n status,\n error:\n status === TransactionStatus.failed\n ? new Error('Transaction failed')\n : (undefined as unknown as TransactionError),\n time,\n txParams: {\n chainId,\n from,\n gas,\n gasPrice,\n gasUsed,\n nonce,\n to,\n value,\n },\n type,\n verifiedOnBlockchain,\n isTransfer,\n transferInformation: isTransfer\n ? {\n contractAddress,\n decimals,\n symbol,\n }\n : undefined,\n };\n }\n\n #getCacheKey(chainIds: Hex[], address: Hex): string {\n return `accounts-api#${chainIds.join(',')}#${address}`;\n }\n\n #getCacheCursor(\n cache: Record<string, unknown>,\n chainIds: Hex[],\n address: Hex,\n ): string | undefined {\n const key = this.#getCacheKey(chainIds, address);\n return cache[key] as string | undefined;\n }\n\n #getTimestampSeconds(timestampMs: number): number {\n return Math.floor(timestampMs / 1000);\n }\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import type { Hex } from "@metamask/utils";
2
2
  import type { RemoteTransactionSource, RemoteTransactionSourceRequest, TransactionMeta } from "../types.cjs";
3
+ export declare const SUPPORTED_CHAIN_IDS: Hex[];
3
4
  /**
4
5
  * A RemoteTransactionSource that fetches incoming transactions using the Accounts API.
5
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"AccountsApiRemoteTransactionSource.d.cts","sourceRoot":"","sources":["../../src/helpers/AccountsApiRemoteTransactionSource.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAW3C,OAAO,KAAK,EACV,uBAAuB,EACvB,8BAA8B,EAE9B,eAAe,EAChB,qBAAiB;AAmBlB;;GAEG;AACH,qBAAa,kCACX,YAAW,uBAAuB;;IAElC,kBAAkB,IAAI,GAAG,EAAE;IAIrB,iBAAiB,CACrB,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,eAAe,EAAE,CAAC;CAoJ9B"}
1
+ {"version":3,"file":"AccountsApiRemoteTransactionSource.d.cts","sourceRoot":"","sources":["../../src/helpers/AccountsApiRemoteTransactionSource.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAW3C,OAAO,KAAK,EACV,uBAAuB,EACvB,8BAA8B,EAE9B,eAAe,EAChB,qBAAiB;AAGlB,eAAO,MAAM,mBAAmB,EAAE,GAAG,EASpC,CAAC;AAOF;;GAEG;AACH,qBAAa,kCACX,YAAW,uBAAuB;;IAElC,kBAAkB,IAAI,GAAG,EAAE;IAIrB,iBAAiB,CACrB,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,eAAe,EAAE,CAAC;CAqN9B"}
@@ -1,5 +1,6 @@
1
1
  import type { Hex } from "@metamask/utils";
2
2
  import type { RemoteTransactionSource, RemoteTransactionSourceRequest, TransactionMeta } from "../types.mjs";
3
+ export declare const SUPPORTED_CHAIN_IDS: Hex[];
3
4
  /**
4
5
  * A RemoteTransactionSource that fetches incoming transactions using the Accounts API.
5
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"AccountsApiRemoteTransactionSource.d.mts","sourceRoot":"","sources":["../../src/helpers/AccountsApiRemoteTransactionSource.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAW3C,OAAO,KAAK,EACV,uBAAuB,EACvB,8BAA8B,EAE9B,eAAe,EAChB,qBAAiB;AAmBlB;;GAEG;AACH,qBAAa,kCACX,YAAW,uBAAuB;;IAElC,kBAAkB,IAAI,GAAG,EAAE;IAIrB,iBAAiB,CACrB,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,eAAe,EAAE,CAAC;CAoJ9B"}
1
+ {"version":3,"file":"AccountsApiRemoteTransactionSource.d.mts","sourceRoot":"","sources":["../../src/helpers/AccountsApiRemoteTransactionSource.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAW3C,OAAO,KAAK,EACV,uBAAuB,EACvB,8BAA8B,EAE9B,eAAe,EAChB,qBAAiB;AAGlB,eAAO,MAAM,mBAAmB,EAAE,GAAG,EASpC,CAAC;AAOF;;GAEG;AACH,qBAAa,kCACX,YAAW,uBAAuB;;IAElC,kBAAkB,IAAI,GAAG,EAAE;IAIrB,iBAAiB,CACrB,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,eAAe,EAAE,CAAC;CAqN9B"}