@metamask-previews/transaction-controller 40.0.0-preview-ebca6967 → 40.1.0-preview-6879d4ce

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 (96) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/dist/TransactionController.cjs +103 -51
  3. package/dist/TransactionController.cjs.map +1 -1
  4. package/dist/TransactionController.d.cts +10 -9
  5. package/dist/TransactionController.d.cts.map +1 -1
  6. package/dist/TransactionController.d.mts +10 -9
  7. package/dist/TransactionController.d.mts.map +1 -1
  8. package/dist/TransactionController.mjs +105 -53
  9. package/dist/TransactionController.mjs.map +1 -1
  10. package/dist/api/accounts-api.cjs +92 -0
  11. package/dist/api/accounts-api.cjs.map +1 -0
  12. package/dist/api/accounts-api.d.cts +92 -0
  13. package/dist/api/accounts-api.d.cts.map +1 -0
  14. package/dist/api/accounts-api.d.mts +92 -0
  15. package/dist/api/accounts-api.d.mts.map +1 -0
  16. package/dist/api/accounts-api.mjs +87 -0
  17. package/dist/api/accounts-api.mjs.map +1 -0
  18. package/dist/constants.cjs +1 -85
  19. package/dist/constants.cjs.map +1 -1
  20. package/dist/constants.d.cts +0 -84
  21. package/dist/constants.d.cts.map +1 -1
  22. package/dist/constants.d.mts +0 -84
  23. package/dist/constants.d.mts.map +1 -1
  24. package/dist/constants.mjs +0 -84
  25. package/dist/constants.mjs.map +1 -1
  26. package/dist/errors.cjs +8 -1
  27. package/dist/errors.cjs.map +1 -1
  28. package/dist/errors.d.cts +4 -0
  29. package/dist/errors.d.cts.map +1 -1
  30. package/dist/errors.d.mts +4 -0
  31. package/dist/errors.d.mts.map +1 -1
  32. package/dist/errors.mjs +6 -0
  33. package/dist/errors.mjs.map +1 -1
  34. package/dist/helpers/AccountsApiRemoteTransactionSource.cjs +181 -0
  35. package/dist/helpers/AccountsApiRemoteTransactionSource.cjs.map +1 -0
  36. package/dist/helpers/AccountsApiRemoteTransactionSource.d.cts +12 -0
  37. package/dist/helpers/AccountsApiRemoteTransactionSource.d.cts.map +1 -0
  38. package/dist/helpers/AccountsApiRemoteTransactionSource.d.mts +12 -0
  39. package/dist/helpers/AccountsApiRemoteTransactionSource.d.mts.map +1 -0
  40. package/dist/helpers/AccountsApiRemoteTransactionSource.mjs +181 -0
  41. package/dist/helpers/AccountsApiRemoteTransactionSource.mjs.map +1 -0
  42. package/dist/helpers/IncomingTransactionHelper.cjs +68 -139
  43. package/dist/helpers/IncomingTransactionHelper.cjs.map +1 -1
  44. package/dist/helpers/IncomingTransactionHelper.d.cts +9 -16
  45. package/dist/helpers/IncomingTransactionHelper.d.cts.map +1 -1
  46. package/dist/helpers/IncomingTransactionHelper.d.mts +9 -16
  47. package/dist/helpers/IncomingTransactionHelper.d.mts.map +1 -1
  48. package/dist/helpers/IncomingTransactionHelper.mjs +68 -139
  49. package/dist/helpers/IncomingTransactionHelper.mjs.map +1 -1
  50. package/dist/helpers/MultichainTrackingHelper.cjs +3 -66
  51. package/dist/helpers/MultichainTrackingHelper.cjs.map +1 -1
  52. package/dist/helpers/MultichainTrackingHelper.d.cts +1 -14
  53. package/dist/helpers/MultichainTrackingHelper.d.cts.map +1 -1
  54. package/dist/helpers/MultichainTrackingHelper.d.mts +1 -14
  55. package/dist/helpers/MultichainTrackingHelper.d.mts.map +1 -1
  56. package/dist/helpers/MultichainTrackingHelper.mjs +3 -66
  57. package/dist/helpers/MultichainTrackingHelper.mjs.map +1 -1
  58. package/dist/index.cjs +3 -2
  59. package/dist/index.cjs.map +1 -1
  60. package/dist/index.d.cts +3 -3
  61. package/dist/index.d.cts.map +1 -1
  62. package/dist/index.d.mts +3 -3
  63. package/dist/index.d.mts.map +1 -1
  64. package/dist/index.mjs +2 -1
  65. package/dist/index.mjs.map +1 -1
  66. package/dist/types.cjs.map +1 -1
  67. package/dist/types.d.cts +25 -14
  68. package/dist/types.d.cts.map +1 -1
  69. package/dist/types.d.mts +25 -14
  70. package/dist/types.d.mts.map +1 -1
  71. package/dist/types.mjs.map +1 -1
  72. package/dist/utils/validation.cjs +13 -1
  73. package/dist/utils/validation.cjs.map +1 -1
  74. package/dist/utils/validation.d.cts +7 -0
  75. package/dist/utils/validation.d.cts.map +1 -1
  76. package/dist/utils/validation.d.mts +7 -0
  77. package/dist/utils/validation.d.mts.map +1 -1
  78. package/dist/utils/validation.mjs +11 -0
  79. package/dist/utils/validation.mjs.map +1 -1
  80. package/package.json +1 -1
  81. package/dist/helpers/EtherscanRemoteTransactionSource.cjs +0 -157
  82. package/dist/helpers/EtherscanRemoteTransactionSource.cjs.map +0 -1
  83. package/dist/helpers/EtherscanRemoteTransactionSource.d.cts +0 -16
  84. package/dist/helpers/EtherscanRemoteTransactionSource.d.cts.map +0 -1
  85. package/dist/helpers/EtherscanRemoteTransactionSource.d.mts +0 -16
  86. package/dist/helpers/EtherscanRemoteTransactionSource.d.mts.map +0 -1
  87. package/dist/helpers/EtherscanRemoteTransactionSource.mjs +0 -157
  88. package/dist/helpers/EtherscanRemoteTransactionSource.mjs.map +0 -1
  89. package/dist/utils/etherscan.cjs +0 -115
  90. package/dist/utils/etherscan.cjs.map +0 -1
  91. package/dist/utils/etherscan.d.cts +0 -74
  92. package/dist/utils/etherscan.d.cts.map +0 -1
  93. package/dist/utils/etherscan.d.mts +0 -74
  94. package/dist/utils/etherscan.d.mts.map +0 -1
  95. package/dist/utils/etherscan.mjs +0 -109
  96. package/dist/utils/etherscan.mjs.map +0 -1
@@ -30,90 +30,6 @@ export declare const CHAIN_IDS: {
30
30
  readonly SCROLL: "0x82750";
31
31
  readonly SCROLL_SEPOLIA: "0x8274f";
32
32
  };
33
- export declare const DEFAULT_ETHERSCAN_DOMAIN = "etherscan.io";
34
- export declare const DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX = "api";
35
- export declare const ETHERSCAN_SUPPORTED_NETWORKS: {
36
- "0x5": {
37
- domain: string;
38
- subdomain: string;
39
- };
40
- "0x1": {
41
- domain: string;
42
- subdomain: string;
43
- };
44
- "0xaa36a7": {
45
- domain: string;
46
- subdomain: string;
47
- };
48
- "0xe704": {
49
- domain: string;
50
- subdomain: string;
51
- };
52
- "0xe705": {
53
- domain: string;
54
- subdomain: string;
55
- };
56
- "0xe708": {
57
- domain: string;
58
- subdomain: string;
59
- };
60
- "0x38": {
61
- domain: string;
62
- subdomain: string;
63
- };
64
- "0x61": {
65
- domain: string;
66
- subdomain: string;
67
- };
68
- "0xa": {
69
- domain: string;
70
- subdomain: string;
71
- };
72
- "0xaa37dc": {
73
- domain: string;
74
- subdomain: string;
75
- };
76
- "0x89": {
77
- domain: string;
78
- subdomain: string;
79
- };
80
- "0x13881": {
81
- domain: string;
82
- subdomain: string;
83
- };
84
- "0xa86a": {
85
- domain: string;
86
- subdomain: string;
87
- };
88
- "0xa869": {
89
- domain: string;
90
- subdomain: string;
91
- };
92
- "0xfa": {
93
- domain: string;
94
- subdomain: string;
95
- };
96
- "0xfa2": {
97
- domain: string;
98
- subdomain: string;
99
- };
100
- "0x504": {
101
- domain: string;
102
- subdomain: string;
103
- };
104
- "0x507": {
105
- domain: string;
106
- subdomain: string;
107
- };
108
- "0x505": {
109
- domain: string;
110
- subdomain: string;
111
- };
112
- "0x64": {
113
- domain: string;
114
- subdomain: string;
115
- };
116
- };
117
33
  export declare const GAS_BUFFER_CHAIN_OVERRIDES: {
118
34
  "0xa": number;
119
35
  "0xaa37dc": number;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BZ,CAAC;AAEX,eAAO,MAAM,wBAAwB,iBAAiB,CAAC;AACvD,eAAO,MAAM,kCAAkC,QAAQ,CAAC;AAExD,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiFxC,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;CAGtC,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,4BAA4B;;;;;;;;;GAmBxC,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,4BAA4B;;;;;;;;;GAuBxC,CAAC"}
1
+ {"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BZ,CAAC;AAEX,eAAO,MAAM,0BAA0B;;;CAGtC,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,4BAA4B;;;;;;;;;GAmBxC,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,4BAA4B;;;;;;;;;GAuBxC,CAAC"}
@@ -30,90 +30,6 @@ export const CHAIN_IDS = {
30
30
  SCROLL: '0x82750',
31
31
  SCROLL_SEPOLIA: '0x8274f',
32
32
  };
33
- export const DEFAULT_ETHERSCAN_DOMAIN = 'etherscan.io';
34
- export const DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX = 'api';
35
- export const ETHERSCAN_SUPPORTED_NETWORKS = {
36
- [CHAIN_IDS.GOERLI]: {
37
- domain: DEFAULT_ETHERSCAN_DOMAIN,
38
- subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-goerli`,
39
- },
40
- [CHAIN_IDS.MAINNET]: {
41
- domain: DEFAULT_ETHERSCAN_DOMAIN,
42
- subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,
43
- },
44
- [CHAIN_IDS.SEPOLIA]: {
45
- domain: DEFAULT_ETHERSCAN_DOMAIN,
46
- subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-sepolia`,
47
- },
48
- [CHAIN_IDS.LINEA_GOERLI]: {
49
- domain: 'lineascan.build',
50
- subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-goerli`,
51
- },
52
- [CHAIN_IDS.LINEA_SEPOLIA]: {
53
- domain: 'lineascan.build',
54
- subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-sepolia`,
55
- },
56
- [CHAIN_IDS.LINEA_MAINNET]: {
57
- domain: 'lineascan.build',
58
- subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,
59
- },
60
- [CHAIN_IDS.BSC]: {
61
- domain: 'bscscan.com',
62
- subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,
63
- },
64
- [CHAIN_IDS.BSC_TESTNET]: {
65
- domain: 'bscscan.com',
66
- subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-testnet`,
67
- },
68
- [CHAIN_IDS.OPTIMISM]: {
69
- domain: DEFAULT_ETHERSCAN_DOMAIN,
70
- subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-optimistic`,
71
- },
72
- [CHAIN_IDS.OPTIMISM_SEPOLIA]: {
73
- domain: DEFAULT_ETHERSCAN_DOMAIN,
74
- subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-sepolia-optimistic`,
75
- },
76
- [CHAIN_IDS.POLYGON]: {
77
- domain: 'polygonscan.com',
78
- subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,
79
- },
80
- [CHAIN_IDS.POLYGON_TESTNET]: {
81
- domain: 'polygonscan.com',
82
- subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-mumbai`,
83
- },
84
- [CHAIN_IDS.AVALANCHE]: {
85
- domain: 'snowtrace.io',
86
- subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,
87
- },
88
- [CHAIN_IDS.AVALANCHE_TESTNET]: {
89
- domain: 'snowtrace.io',
90
- subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-testnet`,
91
- },
92
- [CHAIN_IDS.FANTOM]: {
93
- domain: 'ftmscan.com',
94
- subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,
95
- },
96
- [CHAIN_IDS.FANTOM_TESTNET]: {
97
- domain: 'ftmscan.com',
98
- subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-testnet`,
99
- },
100
- [CHAIN_IDS.MOONBEAM]: {
101
- domain: 'moonscan.io',
102
- subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-moonbeam`,
103
- },
104
- [CHAIN_IDS.MOONBEAM_TESTNET]: {
105
- domain: 'moonscan.io',
106
- subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-moonbase`,
107
- },
108
- [CHAIN_IDS.MOONRIVER]: {
109
- domain: 'moonscan.io',
110
- subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-moonriver`,
111
- },
112
- [CHAIN_IDS.GNOSIS]: {
113
- domain: 'gnosisscan.io',
114
- subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-gnosis`,
115
- },
116
- };
117
33
  export const GAS_BUFFER_CHAIN_OVERRIDES = {
118
34
  [CHAIN_IDS.OPTIMISM]: 1,
119
35
  [CHAIN_IDS.OPTIMISM_SEPOLIA]: 1,
@@ -1 +1 @@
1
- {"version":3,"file":"constants.mjs","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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","sourcesContent":["export const CHAIN_IDS = {\n MAINNET: '0x1',\n GOERLI: '0x5',\n BASE: '0x2105',\n BASE_TESTNET: '0x14a33',\n BSC: '0x38',\n BSC_TESTNET: '0x61',\n OPTIMISM: '0xa',\n OPTIMISM_TESTNET: '0x1a4',\n OPBNB: '0xcc',\n OPBNB_TESTNET: '0x15eb',\n OPTIMISM_SEPOLIA: '0xaa37dc',\n POLYGON: '0x89',\n POLYGON_TESTNET: '0x13881',\n AVALANCHE: '0xa86a',\n AVALANCHE_TESTNET: '0xa869',\n FANTOM: '0xfa',\n FANTOM_TESTNET: '0xfa2',\n SEPOLIA: '0xaa36a7',\n LINEA_GOERLI: '0xe704',\n LINEA_SEPOLIA: '0xe705',\n LINEA_MAINNET: '0xe708',\n MOONBEAM: '0x504',\n MOONBEAM_TESTNET: '0x507',\n MOONRIVER: '0x505',\n GNOSIS: '0x64',\n ARBITRUM: '0xa4b1',\n ZKSYNC_ERA: '0x144',\n ZORA: '0x76adf1',\n SCROLL: '0x82750',\n SCROLL_SEPOLIA: '0x8274f',\n} as const;\n\nexport const DEFAULT_ETHERSCAN_DOMAIN = 'etherscan.io';\nexport const DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX = 'api';\n\nexport const ETHERSCAN_SUPPORTED_NETWORKS = {\n [CHAIN_IDS.GOERLI]: {\n domain: DEFAULT_ETHERSCAN_DOMAIN,\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-goerli`,\n },\n [CHAIN_IDS.MAINNET]: {\n domain: DEFAULT_ETHERSCAN_DOMAIN,\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.SEPOLIA]: {\n domain: DEFAULT_ETHERSCAN_DOMAIN,\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-sepolia`,\n },\n [CHAIN_IDS.LINEA_GOERLI]: {\n domain: 'lineascan.build',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-goerli`,\n },\n [CHAIN_IDS.LINEA_SEPOLIA]: {\n domain: 'lineascan.build',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-sepolia`,\n },\n [CHAIN_IDS.LINEA_MAINNET]: {\n domain: 'lineascan.build',\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.BSC]: {\n domain: 'bscscan.com',\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.BSC_TESTNET]: {\n domain: 'bscscan.com',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-testnet`,\n },\n [CHAIN_IDS.OPTIMISM]: {\n domain: DEFAULT_ETHERSCAN_DOMAIN,\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-optimistic`,\n },\n [CHAIN_IDS.OPTIMISM_SEPOLIA]: {\n domain: DEFAULT_ETHERSCAN_DOMAIN,\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-sepolia-optimistic`,\n },\n [CHAIN_IDS.POLYGON]: {\n domain: 'polygonscan.com',\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.POLYGON_TESTNET]: {\n domain: 'polygonscan.com',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-mumbai`,\n },\n [CHAIN_IDS.AVALANCHE]: {\n domain: 'snowtrace.io',\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.AVALANCHE_TESTNET]: {\n domain: 'snowtrace.io',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-testnet`,\n },\n [CHAIN_IDS.FANTOM]: {\n domain: 'ftmscan.com',\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.FANTOM_TESTNET]: {\n domain: 'ftmscan.com',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-testnet`,\n },\n [CHAIN_IDS.MOONBEAM]: {\n domain: 'moonscan.io',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-moonbeam`,\n },\n [CHAIN_IDS.MOONBEAM_TESTNET]: {\n domain: 'moonscan.io',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-moonbase`,\n },\n [CHAIN_IDS.MOONRIVER]: {\n domain: 'moonscan.io',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-moonriver`,\n },\n [CHAIN_IDS.GNOSIS]: {\n domain: 'gnosisscan.io',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-gnosis`,\n },\n};\n\nexport const GAS_BUFFER_CHAIN_OVERRIDES = {\n [CHAIN_IDS.OPTIMISM]: 1,\n [CHAIN_IDS.OPTIMISM_SEPOLIA]: 1,\n};\n\n/** Extract of the Wrapped ERC-20 ABI required for simulation. */\nexport const ABI_SIMULATION_ERC20_WRAPPED = [\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: 'to', type: 'address' },\n { indexed: false, name: 'wad', type: 'uint256' },\n ],\n name: 'Deposit',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: 'from', type: 'address' },\n { indexed: false, name: 'wad', type: 'uint256' },\n ],\n name: 'Withdrawal',\n type: 'event',\n },\n];\n\n/** Extract of the legacy ERC-721 ABI required for simulation. */\nexport const ABI_SIMULATION_ERC721_LEGACY = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n name: '_from',\n type: 'address',\n },\n {\n indexed: false,\n name: '_to',\n type: 'address',\n },\n {\n indexed: false,\n name: '_tokenId',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n];\n"]}
1
+ {"version":3,"file":"constants.mjs","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,QAAQ;IACd,YAAY,EAAE,SAAS;IACvB,GAAG,EAAE,MAAM;IACX,WAAW,EAAE,MAAM;IACnB,QAAQ,EAAE,KAAK;IACf,gBAAgB,EAAE,OAAO;IACzB,KAAK,EAAE,MAAM;IACb,aAAa,EAAE,QAAQ;IACvB,gBAAgB,EAAE,UAAU;IAC5B,OAAO,EAAE,MAAM;IACf,eAAe,EAAE,SAAS;IAC1B,SAAS,EAAE,QAAQ;IACnB,iBAAiB,EAAE,QAAQ;IAC3B,MAAM,EAAE,MAAM;IACd,cAAc,EAAE,OAAO;IACvB,OAAO,EAAE,UAAU;IACnB,YAAY,EAAE,QAAQ;IACtB,aAAa,EAAE,QAAQ;IACvB,aAAa,EAAE,QAAQ;IACvB,QAAQ,EAAE,OAAO;IACjB,gBAAgB,EAAE,OAAO;IACzB,SAAS,EAAE,OAAO;IAClB,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,QAAQ;IAClB,UAAU,EAAE,OAAO;IACnB,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,SAAS;IACjB,cAAc,EAAE,SAAS;CACjB,CAAC;AAEX,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;IACvB,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC;CAChC,CAAC;AAEF,iEAAiE;AACjE,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C;QACE,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE;YACN,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;YAC9C,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE;SACjD;QACD,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,OAAO;KACd;IACD;QACE,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE;YACN,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;YAChD,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE;SACjD;QACD,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,OAAO;KACd;CACF,CAAC;AAEF,iEAAiE;AACjE,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C;QACE,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE;YACN;gBACE,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,SAAS;aAChB;YACD;gBACE,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,SAAS;aAChB;YACD;gBACE,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,SAAS;aAChB;SACF;QACD,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;KACd;CACF,CAAC","sourcesContent":["export const CHAIN_IDS = {\n MAINNET: '0x1',\n GOERLI: '0x5',\n BASE: '0x2105',\n BASE_TESTNET: '0x14a33',\n BSC: '0x38',\n BSC_TESTNET: '0x61',\n OPTIMISM: '0xa',\n OPTIMISM_TESTNET: '0x1a4',\n OPBNB: '0xcc',\n OPBNB_TESTNET: '0x15eb',\n OPTIMISM_SEPOLIA: '0xaa37dc',\n POLYGON: '0x89',\n POLYGON_TESTNET: '0x13881',\n AVALANCHE: '0xa86a',\n AVALANCHE_TESTNET: '0xa869',\n FANTOM: '0xfa',\n FANTOM_TESTNET: '0xfa2',\n SEPOLIA: '0xaa36a7',\n LINEA_GOERLI: '0xe704',\n LINEA_SEPOLIA: '0xe705',\n LINEA_MAINNET: '0xe708',\n MOONBEAM: '0x504',\n MOONBEAM_TESTNET: '0x507',\n MOONRIVER: '0x505',\n GNOSIS: '0x64',\n ARBITRUM: '0xa4b1',\n ZKSYNC_ERA: '0x144',\n ZORA: '0x76adf1',\n SCROLL: '0x82750',\n SCROLL_SEPOLIA: '0x8274f',\n} as const;\n\nexport const GAS_BUFFER_CHAIN_OVERRIDES = {\n [CHAIN_IDS.OPTIMISM]: 1,\n [CHAIN_IDS.OPTIMISM_SEPOLIA]: 1,\n};\n\n/** Extract of the Wrapped ERC-20 ABI required for simulation. */\nexport const ABI_SIMULATION_ERC20_WRAPPED = [\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: 'to', type: 'address' },\n { indexed: false, name: 'wad', type: 'uint256' },\n ],\n name: 'Deposit',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: 'from', type: 'address' },\n { indexed: false, name: 'wad', type: 'uint256' },\n ],\n name: 'Withdrawal',\n type: 'event',\n },\n];\n\n/** Extract of the legacy ERC-721 ABI required for simulation. */\nexport const ABI_SIMULATION_ERC721_LEGACY = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n name: '_from',\n type: 'address',\n },\n {\n indexed: false,\n name: '_to',\n type: 'address',\n },\n {\n indexed: false,\n name: '_tokenId',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n];\n"]}
package/dist/errors.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SimulationRevertedError = exports.SimulationInvalidResponseError = exports.SimulationChainNotSupportedError = exports.SimulationError = void 0;
3
+ exports.SimulationRevertedError = exports.SimulationInvalidResponseError = exports.SimulationChainNotSupportedError = exports.FirstTimeInteractionError = exports.SimulationError = void 0;
4
4
  const types_1 = require("./types.cjs");
5
5
  class SimulationError extends Error {
6
6
  constructor(message, code) {
@@ -9,6 +9,13 @@ class SimulationError extends Error {
9
9
  }
10
10
  }
11
11
  exports.SimulationError = SimulationError;
12
+ class FirstTimeInteractionError extends Error {
13
+ constructor(message, code) {
14
+ super(message ?? 'Error checking first time interaction');
15
+ this.code = code;
16
+ }
17
+ }
18
+ exports.FirstTimeInteractionError = FirstTimeInteractionError;
12
19
  class SimulationChainNotSupportedError extends SimulationError {
13
20
  constructor(chainId) {
14
21
  super(`Chain is not supported: ${chainId}`, types_1.SimulationErrorCode.ChainNotSupported);
@@ -1 +1 @@
1
- {"version":3,"file":"errors.cjs","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAEA,uCAA8C;AAE9C,MAAa,eAAgB,SAAQ,KAAK;IAGxC,YAAY,OAAgB,EAAE,IAAsB;QAClD,KAAK,CAAC,OAAO,IAAI,mBAAmB,CAAC,CAAC;QAEtC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AARD,0CAQC;AAED,MAAa,gCAAiC,SAAQ,eAAe;IACnE,YAAY,OAAY;QACtB,KAAK,CACH,2BAA2B,OAAO,EAAE,EACpC,2BAAmB,CAAC,iBAAiB,CACtC,CAAC;IACJ,CAAC;CACF;AAPD,4EAOC;AAED,MAAa,8BAA+B,SAAQ,eAAe;IACjE;QACE,KAAK,CACH,sCAAsC,EACtC,2BAAmB,CAAC,eAAe,CACpC,CAAC;IACJ,CAAC;CACF;AAPD,wEAOC;AAED,MAAa,uBAAwB,SAAQ,eAAe;IAC1D;QACE,KAAK,CAAC,0BAA0B,EAAE,2BAAmB,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC;CACF;AAJD,0DAIC","sourcesContent":["import type { Hex } from '@metamask/utils';\n\nimport { SimulationErrorCode } from './types';\n\nexport class SimulationError extends Error {\n code?: string | number;\n\n constructor(message?: string, code?: string | number) {\n super(message ?? 'Simulation failed');\n\n this.code = code;\n }\n}\n\nexport class SimulationChainNotSupportedError extends SimulationError {\n constructor(chainId: Hex) {\n super(\n `Chain is not supported: ${chainId}`,\n SimulationErrorCode.ChainNotSupported,\n );\n }\n}\n\nexport class SimulationInvalidResponseError extends SimulationError {\n constructor() {\n super(\n 'Invalid response from simulation API',\n SimulationErrorCode.InvalidResponse,\n );\n }\n}\n\nexport class SimulationRevertedError extends SimulationError {\n constructor() {\n super('Transaction was reverted', SimulationErrorCode.Reverted);\n }\n}\n"]}
1
+ {"version":3,"file":"errors.cjs","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAEA,uCAA8C;AAE9C,MAAa,eAAgB,SAAQ,KAAK;IAGxC,YAAY,OAAgB,EAAE,IAAsB;QAClD,KAAK,CAAC,OAAO,IAAI,mBAAmB,CAAC,CAAC;QAEtC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AARD,0CAQC;AAED,MAAa,yBAA0B,SAAQ,KAAK;IAGlD,YAAY,OAAgB,EAAE,IAAsB;QAClD,KAAK,CAAC,OAAO,IAAI,uCAAuC,CAAC,CAAC;QAE1D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AARD,8DAQC;AAED,MAAa,gCAAiC,SAAQ,eAAe;IACnE,YAAY,OAAY;QACtB,KAAK,CACH,2BAA2B,OAAO,EAAE,EACpC,2BAAmB,CAAC,iBAAiB,CACtC,CAAC;IACJ,CAAC;CACF;AAPD,4EAOC;AAED,MAAa,8BAA+B,SAAQ,eAAe;IACjE;QACE,KAAK,CACH,sCAAsC,EACtC,2BAAmB,CAAC,eAAe,CACpC,CAAC;IACJ,CAAC;CACF;AAPD,wEAOC;AAED,MAAa,uBAAwB,SAAQ,eAAe;IAC1D;QACE,KAAK,CAAC,0BAA0B,EAAE,2BAAmB,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC;CACF;AAJD,0DAIC","sourcesContent":["import type { Hex } from '@metamask/utils';\n\nimport { SimulationErrorCode } from './types';\n\nexport class SimulationError extends Error {\n code?: string | number;\n\n constructor(message?: string, code?: string | number) {\n super(message ?? 'Simulation failed');\n\n this.code = code;\n }\n}\n\nexport class FirstTimeInteractionError extends Error {\n code?: string | number;\n\n constructor(message?: string, code?: string | number) {\n super(message ?? 'Error checking first time interaction');\n\n this.code = code;\n }\n}\n\nexport class SimulationChainNotSupportedError extends SimulationError {\n constructor(chainId: Hex) {\n super(\n `Chain is not supported: ${chainId}`,\n SimulationErrorCode.ChainNotSupported,\n );\n }\n}\n\nexport class SimulationInvalidResponseError extends SimulationError {\n constructor() {\n super(\n 'Invalid response from simulation API',\n SimulationErrorCode.InvalidResponse,\n );\n }\n}\n\nexport class SimulationRevertedError extends SimulationError {\n constructor() {\n super('Transaction was reverted', SimulationErrorCode.Reverted);\n }\n}\n"]}
package/dist/errors.d.cts CHANGED
@@ -3,6 +3,10 @@ export declare class SimulationError extends Error {
3
3
  code?: string | number;
4
4
  constructor(message?: string, code?: string | number);
5
5
  }
6
+ export declare class FirstTimeInteractionError extends Error {
7
+ code?: string | number;
8
+ constructor(message?: string, code?: string | number);
9
+ }
6
10
  export declare class SimulationChainNotSupportedError extends SimulationError {
7
11
  constructor(chainId: Hex);
8
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.cts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAI3C,qBAAa,eAAgB,SAAQ,KAAK;IACxC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;gBAEX,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;CAKrD;AAED,qBAAa,gCAAiC,SAAQ,eAAe;gBACvD,OAAO,EAAE,GAAG;CAMzB;AAED,qBAAa,8BAA+B,SAAQ,eAAe;;CAOlE;AAED,qBAAa,uBAAwB,SAAQ,eAAe;;CAI3D"}
1
+ {"version":3,"file":"errors.d.cts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAI3C,qBAAa,eAAgB,SAAQ,KAAK;IACxC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;gBAEX,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;CAKrD;AAED,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;gBAEX,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;CAKrD;AAED,qBAAa,gCAAiC,SAAQ,eAAe;gBACvD,OAAO,EAAE,GAAG;CAMzB;AAED,qBAAa,8BAA+B,SAAQ,eAAe;;CAOlE;AAED,qBAAa,uBAAwB,SAAQ,eAAe;;CAI3D"}
package/dist/errors.d.mts CHANGED
@@ -3,6 +3,10 @@ export declare class SimulationError extends Error {
3
3
  code?: string | number;
4
4
  constructor(message?: string, code?: string | number);
5
5
  }
6
+ export declare class FirstTimeInteractionError extends Error {
7
+ code?: string | number;
8
+ constructor(message?: string, code?: string | number);
9
+ }
6
10
  export declare class SimulationChainNotSupportedError extends SimulationError {
7
11
  constructor(chainId: Hex);
8
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.mts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAI3C,qBAAa,eAAgB,SAAQ,KAAK;IACxC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;gBAEX,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;CAKrD;AAED,qBAAa,gCAAiC,SAAQ,eAAe;gBACvD,OAAO,EAAE,GAAG;CAMzB;AAED,qBAAa,8BAA+B,SAAQ,eAAe;;CAOlE;AAED,qBAAa,uBAAwB,SAAQ,eAAe;;CAI3D"}
1
+ {"version":3,"file":"errors.d.mts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAI3C,qBAAa,eAAgB,SAAQ,KAAK;IACxC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;gBAEX,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;CAKrD;AAED,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;gBAEX,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;CAKrD;AAED,qBAAa,gCAAiC,SAAQ,eAAe;gBACvD,OAAO,EAAE,GAAG;CAMzB;AAED,qBAAa,8BAA+B,SAAQ,eAAe;;CAOlE;AAED,qBAAa,uBAAwB,SAAQ,eAAe;;CAI3D"}
package/dist/errors.mjs CHANGED
@@ -5,6 +5,12 @@ export class SimulationError extends Error {
5
5
  this.code = code;
6
6
  }
7
7
  }
8
+ export class FirstTimeInteractionError extends Error {
9
+ constructor(message, code) {
10
+ super(message ?? 'Error checking first time interaction');
11
+ this.code = code;
12
+ }
13
+ }
8
14
  export class SimulationChainNotSupportedError extends SimulationError {
9
15
  constructor(chainId) {
10
16
  super(`Chain is not supported: ${chainId}`, SimulationErrorCode.ChainNotSupported);
@@ -1 +1 @@
1
- {"version":3,"file":"errors.mjs","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,oBAAgB;AAE9C,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAGxC,YAAY,OAAgB,EAAE,IAAsB;QAClD,KAAK,CAAC,OAAO,IAAI,mBAAmB,CAAC,CAAC;QAEtC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,gCAAiC,SAAQ,eAAe;IACnE,YAAY,OAAY;QACtB,KAAK,CACH,2BAA2B,OAAO,EAAE,EACpC,mBAAmB,CAAC,iBAAiB,CACtC,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,8BAA+B,SAAQ,eAAe;IACjE;QACE,KAAK,CACH,sCAAsC,EACtC,mBAAmB,CAAC,eAAe,CACpC,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,uBAAwB,SAAQ,eAAe;IAC1D;QACE,KAAK,CAAC,0BAA0B,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC;CACF","sourcesContent":["import type { Hex } from '@metamask/utils';\n\nimport { SimulationErrorCode } from './types';\n\nexport class SimulationError extends Error {\n code?: string | number;\n\n constructor(message?: string, code?: string | number) {\n super(message ?? 'Simulation failed');\n\n this.code = code;\n }\n}\n\nexport class SimulationChainNotSupportedError extends SimulationError {\n constructor(chainId: Hex) {\n super(\n `Chain is not supported: ${chainId}`,\n SimulationErrorCode.ChainNotSupported,\n );\n }\n}\n\nexport class SimulationInvalidResponseError extends SimulationError {\n constructor() {\n super(\n 'Invalid response from simulation API',\n SimulationErrorCode.InvalidResponse,\n );\n }\n}\n\nexport class SimulationRevertedError extends SimulationError {\n constructor() {\n super('Transaction was reverted', SimulationErrorCode.Reverted);\n }\n}\n"]}
1
+ {"version":3,"file":"errors.mjs","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,oBAAgB;AAE9C,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAGxC,YAAY,OAAgB,EAAE,IAAsB;QAClD,KAAK,CAAC,OAAO,IAAI,mBAAmB,CAAC,CAAC;QAEtC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAGlD,YAAY,OAAgB,EAAE,IAAsB;QAClD,KAAK,CAAC,OAAO,IAAI,uCAAuC,CAAC,CAAC;QAE1D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,gCAAiC,SAAQ,eAAe;IACnE,YAAY,OAAY;QACtB,KAAK,CACH,2BAA2B,OAAO,EAAE,EACpC,mBAAmB,CAAC,iBAAiB,CACtC,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,8BAA+B,SAAQ,eAAe;IACjE;QACE,KAAK,CACH,sCAAsC,EACtC,mBAAmB,CAAC,eAAe,CACpC,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,uBAAwB,SAAQ,eAAe;IAC1D;QACE,KAAK,CAAC,0BAA0B,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC;CACF","sourcesContent":["import type { Hex } from '@metamask/utils';\n\nimport { SimulationErrorCode } from './types';\n\nexport class SimulationError extends Error {\n code?: string | number;\n\n constructor(message?: string, code?: string | number) {\n super(message ?? 'Simulation failed');\n\n this.code = code;\n }\n}\n\nexport class FirstTimeInteractionError extends Error {\n code?: string | number;\n\n constructor(message?: string, code?: string | number) {\n super(message ?? 'Error checking first time interaction');\n\n this.code = code;\n }\n}\n\nexport class SimulationChainNotSupportedError extends SimulationError {\n constructor(chainId: Hex) {\n super(\n `Chain is not supported: ${chainId}`,\n SimulationErrorCode.ChainNotSupported,\n );\n }\n}\n\nexport class SimulationInvalidResponseError extends SimulationError {\n constructor() {\n super(\n 'Invalid response from simulation API',\n SimulationErrorCode.InvalidResponse,\n );\n }\n}\n\nexport class SimulationRevertedError extends SimulationError {\n constructor() {\n super('Transaction was reverted', SimulationErrorCode.Reverted);\n }\n}\n"]}
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
+ };
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ var _AccountsApiRemoteTransactionSource_instances, _AccountsApiRemoteTransactionSource_getTransactions, _AccountsApiRemoteTransactionSource_queryTransactions, _AccountsApiRemoteTransactionSource_filterTransactions, _AccountsApiRemoteTransactionSource_normalizeTransaction, _AccountsApiRemoteTransactionSource_getCacheKey, _AccountsApiRemoteTransactionSource_getCacheCursor, _AccountsApiRemoteTransactionSource_getTimestampSeconds;
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AccountsApiRemoteTransactionSource = exports.SUPPORTED_CHAIN_IDS = void 0;
13
+ const controller_utils_1 = require("@metamask/controller-utils");
14
+ const bn_js_1 = __importDefault(require("bn.js"));
15
+ const uuid_1 = require("uuid");
16
+ const accounts_api_1 = require("../api/accounts-api.cjs");
17
+ const constants_1 = require("../constants.cjs");
18
+ const logger_1 = require("../logger.cjs");
19
+ const types_1 = require("../types.cjs");
20
+ exports.SUPPORTED_CHAIN_IDS = [
21
+ constants_1.CHAIN_IDS.MAINNET,
22
+ constants_1.CHAIN_IDS.POLYGON,
23
+ constants_1.CHAIN_IDS.BSC,
24
+ constants_1.CHAIN_IDS.LINEA_MAINNET,
25
+ constants_1.CHAIN_IDS.BASE,
26
+ constants_1.CHAIN_IDS.OPTIMISM,
27
+ constants_1.CHAIN_IDS.ARBITRUM,
28
+ constants_1.CHAIN_IDS.SCROLL,
29
+ ];
30
+ const log = (0, logger_1.createModuleLogger)(logger_1.incomingTransactionsLogger, 'accounts-api-source');
31
+ /**
32
+ * A RemoteTransactionSource that fetches incoming transactions using the Accounts API.
33
+ */
34
+ class AccountsApiRemoteTransactionSource {
35
+ constructor() {
36
+ _AccountsApiRemoteTransactionSource_instances.add(this);
37
+ }
38
+ getSupportedChains() {
39
+ return exports.SUPPORTED_CHAIN_IDS;
40
+ }
41
+ async fetchTransactions(request) {
42
+ const { address } = request;
43
+ const responseTransactions = await __classPrivateFieldGet(this, _AccountsApiRemoteTransactionSource_instances, "m", _AccountsApiRemoteTransactionSource_getTransactions).call(this, request);
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;
50
+ }
51
+ }
52
+ exports.AccountsApiRemoteTransactionSource = AccountsApiRemoteTransactionSource;
53
+ _AccountsApiRemoteTransactionSource_instances = new WeakSet(), _AccountsApiRemoteTransactionSource_getTransactions = async function _AccountsApiRemoteTransactionSource_getTransactions(request) {
54
+ log('Getting transactions', request);
55
+ const { address, cache, chainIds: requestedChainIds } = request;
56
+ const chainIds = requestedChainIds.filter((chainId) => exports.SUPPORTED_CHAIN_IDS.includes(chainId));
57
+ const unsupportedChainIds = requestedChainIds.filter((chainId) => !chainIds.includes(chainId));
58
+ if (unsupportedChainIds.length) {
59
+ log('Ignoring unsupported chain IDs', unsupportedChainIds);
60
+ }
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 || cursor
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;
116
+ }, _AccountsApiRemoteTransactionSource_normalizeTransaction = function _AccountsApiRemoteTransactionSource_normalizeTransaction(address, responseTransaction) {
117
+ const blockNumber = String(responseTransaction.blockNumber);
118
+ const chainId = `0x${responseTransaction.chainId.toString(16)}`;
119
+ const { hash } = responseTransaction;
120
+ const time = new Date(responseTransaction.timestamp).getTime();
121
+ const id = (0, uuid_1.v1)({ msecs: time });
122
+ const { from } = responseTransaction;
123
+ const gas = (0, controller_utils_1.BNToHex)(new bn_js_1.default(responseTransaction.gas));
124
+ const gasPrice = (0, controller_utils_1.BNToHex)(new bn_js_1.default(responseTransaction.gasPrice));
125
+ const gasUsed = (0, controller_utils_1.BNToHex)(new bn_js_1.default(responseTransaction.gasUsed));
126
+ const nonce = (0, controller_utils_1.BNToHex)(new bn_js_1.default(responseTransaction.nonce));
127
+ const type = types_1.TransactionType.incoming;
128
+ const verifiedOnBlockchain = false;
129
+ const status = responseTransaction.isError
130
+ ? types_1.TransactionStatus.failed
131
+ : types_1.TransactionStatus.confirmed;
132
+ const valueTransfer = responseTransaction.valueTransfers.find((vt) => vt.to.toLowerCase() === address.toLowerCase() && vt.contractAddress);
133
+ const isTransfer = Boolean(valueTransfer);
134
+ const contractAddress = valueTransfer?.contractAddress;
135
+ const decimals = valueTransfer?.decimal;
136
+ const symbol = valueTransfer?.symbol;
137
+ const value = (0, controller_utils_1.BNToHex)(new bn_js_1.default(valueTransfer?.amount ?? responseTransaction.value));
138
+ const to = valueTransfer ? address : responseTransaction.to;
139
+ const error = status === types_1.TransactionStatus.failed
140
+ ? new Error('Transaction failed')
141
+ : undefined;
142
+ const transferInformation = isTransfer
143
+ ? {
144
+ contractAddress,
145
+ decimals,
146
+ symbol,
147
+ }
148
+ : undefined;
149
+ return {
150
+ blockNumber,
151
+ chainId,
152
+ error,
153
+ hash,
154
+ id,
155
+ isTransfer,
156
+ status,
157
+ time,
158
+ toSmartContract: false,
159
+ transferInformation,
160
+ txParams: {
161
+ chainId,
162
+ from,
163
+ gas,
164
+ gasPrice,
165
+ gasUsed,
166
+ nonce,
167
+ to,
168
+ value,
169
+ },
170
+ type,
171
+ verifiedOnBlockchain,
172
+ };
173
+ }, _AccountsApiRemoteTransactionSource_getCacheKey = function _AccountsApiRemoteTransactionSource_getCacheKey(chainIds, address) {
174
+ return `accounts-api#${chainIds.join(',')}#${address}`;
175
+ }, _AccountsApiRemoteTransactionSource_getCacheCursor = function _AccountsApiRemoteTransactionSource_getCacheCursor(cache, chainIds, address) {
176
+ const key = __classPrivateFieldGet(this, _AccountsApiRemoteTransactionSource_instances, "m", _AccountsApiRemoteTransactionSource_getCacheKey).call(this, chainIds, address);
177
+ return cache[key];
178
+ }, _AccountsApiRemoteTransactionSource_getTimestampSeconds = function _AccountsApiRemoteTransactionSource_getTimestampSeconds(timestampMs) {
179
+ return Math.floor(timestampMs / 1000);
180
+ };
181
+ //# sourceMappingURL=AccountsApiRemoteTransactionSource.cjs.map
@@ -0,0 +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 { 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 =\n queryEntireHistory || cursor\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) =>\n vt.to.toLowerCase() === address.toLowerCase() && 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 const error =\n status === TransactionStatus.failed\n ? new Error('Transaction failed')\n : (undefined as unknown as TransactionError);\n\n const transferInformation = isTransfer\n ? {\n contractAddress,\n decimals,\n symbol,\n }\n : undefined;\n\n return {\n blockNumber,\n chainId,\n error,\n hash,\n id,\n isTransfer,\n status,\n time,\n toSmartContract: false,\n transferInformation,\n txParams: {\n chainId,\n from,\n gas,\n gasPrice,\n gasUsed,\n nonce,\n to,\n value,\n },\n type,\n verifiedOnBlockchain,\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"]}
@@ -0,0 +1,12 @@
1
+ import type { Hex } from "@metamask/utils";
2
+ import type { RemoteTransactionSource, RemoteTransactionSourceRequest, TransactionMeta } from "../types.cjs";
3
+ export declare const SUPPORTED_CHAIN_IDS: Hex[];
4
+ /**
5
+ * A RemoteTransactionSource that fetches incoming transactions using the Accounts API.
6
+ */
7
+ export declare class AccountsApiRemoteTransactionSource implements RemoteTransactionSource {
8
+ #private;
9
+ getSupportedChains(): Hex[];
10
+ fetchTransactions(request: RemoteTransactionSourceRequest): Promise<TransactionMeta[]>;
11
+ }
12
+ //# sourceMappingURL=AccountsApiRemoteTransactionSource.d.cts.map
@@ -0,0 +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;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;CA4N9B"}
@@ -0,0 +1,12 @@
1
+ import type { Hex } from "@metamask/utils";
2
+ import type { RemoteTransactionSource, RemoteTransactionSourceRequest, TransactionMeta } from "../types.mjs";
3
+ export declare const SUPPORTED_CHAIN_IDS: Hex[];
4
+ /**
5
+ * A RemoteTransactionSource that fetches incoming transactions using the Accounts API.
6
+ */
7
+ export declare class AccountsApiRemoteTransactionSource implements RemoteTransactionSource {
8
+ #private;
9
+ getSupportedChains(): Hex[];
10
+ fetchTransactions(request: RemoteTransactionSourceRequest): Promise<TransactionMeta[]>;
11
+ }
12
+ //# sourceMappingURL=AccountsApiRemoteTransactionSource.d.mts.map
@@ -0,0 +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;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;CA4N9B"}