@sudobility/types 1.8.21

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 (248) hide show
  1. package/CLAUDE.md +285 -0
  2. package/README.md +310 -0
  3. package/dist/index.cjs +62 -0
  4. package/dist/index.d.ts +18 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +62 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/types/blockchain/common.cjs +102 -0
  9. package/dist/types/blockchain/common.d.ts +262 -0
  10. package/dist/types/blockchain/common.d.ts.map +1 -0
  11. package/dist/types/blockchain/common.js +102 -0
  12. package/dist/types/blockchain/common.js.map +1 -0
  13. package/dist/types/blockchain/index.cjs +18 -0
  14. package/dist/types/blockchain/index.d.ts +4 -0
  15. package/dist/types/blockchain/index.d.ts.map +1 -0
  16. package/dist/types/blockchain/index.js +18 -0
  17. package/dist/types/blockchain/index.js.map +1 -0
  18. package/dist/types/blockchain/validation.cjs +88 -0
  19. package/dist/types/blockchain/validation.d.ts +9 -0
  20. package/dist/types/blockchain/validation.d.ts.map +1 -0
  21. package/dist/types/blockchain/validation.js +88 -0
  22. package/dist/types/blockchain/validation.js.map +1 -0
  23. package/dist/types/business/enums.cjs +314 -0
  24. package/dist/types/business/enums.d.ts +227 -0
  25. package/dist/types/business/enums.d.ts.map +1 -0
  26. package/dist/types/business/enums.js +314 -0
  27. package/dist/types/business/enums.js.map +1 -0
  28. package/dist/types/business/index.cjs +33 -0
  29. package/dist/types/business/index.d.ts +5 -0
  30. package/dist/types/business/index.d.ts.map +1 -0
  31. package/dist/types/business/index.js +33 -0
  32. package/dist/types/business/index.js.map +1 -0
  33. package/dist/types/business/wallet-status.cjs +38 -0
  34. package/dist/types/business/wallet-status.d.ts +32 -0
  35. package/dist/types/business/wallet-status.d.ts.map +1 -0
  36. package/dist/types/business/wallet-status.js +38 -0
  37. package/dist/types/business/wallet-status.js.map +1 -0
  38. package/dist/types/common.cjs +6 -0
  39. package/dist/types/common.d.ts +142 -0
  40. package/dist/types/common.d.ts.map +1 -0
  41. package/dist/types/common.js +6 -0
  42. package/dist/types/common.js.map +1 -0
  43. package/dist/types/config/app-config.cjs +6 -0
  44. package/dist/types/config/app-config.d.ts +67 -0
  45. package/dist/types/config/app-config.d.ts.map +1 -0
  46. package/dist/types/config/app-config.js +6 -0
  47. package/dist/types/config/app-config.js.map +1 -0
  48. package/dist/types/config/environment.cjs +24 -0
  49. package/dist/types/config/environment.d.ts +68 -0
  50. package/dist/types/config/environment.d.ts.map +1 -0
  51. package/dist/types/config/environment.js +24 -0
  52. package/dist/types/config/environment.js.map +1 -0
  53. package/dist/types/config/index.cjs +6 -0
  54. package/dist/types/config/index.d.ts +4 -0
  55. package/dist/types/config/index.d.ts.map +1 -0
  56. package/dist/types/config/index.js +6 -0
  57. package/dist/types/config/index.js.map +1 -0
  58. package/dist/types/index.cjs +35 -0
  59. package/dist/types/index.d.ts +10 -0
  60. package/dist/types/index.d.ts.map +1 -0
  61. package/dist/types/index.js +35 -0
  62. package/dist/types/index.js.map +1 -0
  63. package/dist/types/indexer/index.cjs +19 -0
  64. package/dist/types/indexer/index.d.ts +3 -0
  65. package/dist/types/indexer/index.d.ts.map +1 -0
  66. package/dist/types/indexer/index.js +19 -0
  67. package/dist/types/indexer/index.js.map +1 -0
  68. package/dist/types/indexer/indexer-guards.cjs +145 -0
  69. package/dist/types/indexer/indexer-guards.d.ts +26 -0
  70. package/dist/types/indexer/indexer-guards.d.ts.map +1 -0
  71. package/dist/types/indexer/indexer-guards.js +145 -0
  72. package/dist/types/indexer/indexer-guards.js.map +1 -0
  73. package/dist/types/indexer/indexer-responses.cjs +8 -0
  74. package/dist/types/indexer/indexer-responses.d.ts +136 -0
  75. package/dist/types/indexer/indexer-responses.d.ts.map +1 -0
  76. package/dist/types/indexer/indexer-responses.js +8 -0
  77. package/dist/types/indexer/indexer-responses.js.map +1 -0
  78. package/dist/types/infrastructure/analytics.cjs +212 -0
  79. package/dist/types/infrastructure/analytics.d.ts +449 -0
  80. package/dist/types/infrastructure/analytics.d.ts.map +1 -0
  81. package/dist/types/infrastructure/analytics.js +212 -0
  82. package/dist/types/infrastructure/analytics.js.map +1 -0
  83. package/dist/types/infrastructure/api.cjs +17 -0
  84. package/dist/types/infrastructure/api.d.ts +152 -0
  85. package/dist/types/infrastructure/api.d.ts.map +1 -0
  86. package/dist/types/infrastructure/api.js +17 -0
  87. package/dist/types/infrastructure/api.js.map +1 -0
  88. package/dist/types/infrastructure/index.cjs +14 -0
  89. package/dist/types/infrastructure/index.d.ts +9 -0
  90. package/dist/types/infrastructure/index.d.ts.map +1 -0
  91. package/dist/types/infrastructure/index.js +14 -0
  92. package/dist/types/infrastructure/index.js.map +1 -0
  93. package/dist/types/infrastructure/navigation.cjs +3 -0
  94. package/dist/types/infrastructure/navigation.d.ts +56 -0
  95. package/dist/types/infrastructure/navigation.d.ts.map +1 -0
  96. package/dist/types/infrastructure/navigation.js +3 -0
  97. package/dist/types/infrastructure/navigation.js.map +1 -0
  98. package/dist/types/infrastructure/network.cjs +18 -0
  99. package/dist/types/infrastructure/network.d.ts +48 -0
  100. package/dist/types/infrastructure/network.d.ts.map +1 -0
  101. package/dist/types/infrastructure/network.js +18 -0
  102. package/dist/types/infrastructure/network.js.map +1 -0
  103. package/dist/types/infrastructure/wallet.cjs +37 -0
  104. package/dist/types/infrastructure/wallet.d.ts +33 -0
  105. package/dist/types/infrastructure/wallet.d.ts.map +1 -0
  106. package/dist/types/infrastructure/wallet.js +37 -0
  107. package/dist/types/infrastructure/wallet.js.map +1 -0
  108. package/dist/types/kyc/index.cjs +19 -0
  109. package/dist/types/kyc/index.d.ts +2 -0
  110. package/dist/types/kyc/index.d.ts.map +1 -0
  111. package/dist/types/kyc/index.js +19 -0
  112. package/dist/types/kyc/index.js.map +1 -0
  113. package/dist/types/kyc/kyc-types.cjs +12 -0
  114. package/dist/types/kyc/kyc-types.d.ts +260 -0
  115. package/dist/types/kyc/kyc-types.d.ts.map +1 -0
  116. package/dist/types/kyc/kyc-types.js +12 -0
  117. package/dist/types/kyc/kyc-types.js.map +1 -0
  118. package/dist/types/mailer/index.cjs +19 -0
  119. package/dist/types/mailer/index.d.ts +2 -0
  120. package/dist/types/mailer/index.d.ts.map +1 -0
  121. package/dist/types/mailer/index.js +19 -0
  122. package/dist/types/mailer/index.js.map +1 -0
  123. package/dist/types/mailer/mail-types.cjs +38 -0
  124. package/dist/types/mailer/mail-types.d.ts +296 -0
  125. package/dist/types/mailer/mail-types.d.ts.map +1 -0
  126. package/dist/types/mailer/mail-types.js +38 -0
  127. package/dist/types/mailer/mail-types.js.map +1 -0
  128. package/dist/types/wildduck/index.cjs +19 -0
  129. package/dist/types/wildduck/index.d.ts +2 -0
  130. package/dist/types/wildduck/index.d.ts.map +1 -0
  131. package/dist/types/wildduck/index.js +19 -0
  132. package/dist/types/wildduck/index.js.map +1 -0
  133. package/dist/types/wildduck/wildduck-types.cjs +48 -0
  134. package/dist/types/wildduck/wildduck-types.d.ts +1239 -0
  135. package/dist/types/wildduck/wildduck-types.d.ts.map +1 -0
  136. package/dist/types/wildduck/wildduck-types.js +48 -0
  137. package/dist/types/wildduck/wildduck-types.js.map +1 -0
  138. package/dist/utils/async-helpers.cjs +130 -0
  139. package/dist/utils/async-helpers.d.ts +35 -0
  140. package/dist/utils/async-helpers.d.ts.map +1 -0
  141. package/dist/utils/async-helpers.js +130 -0
  142. package/dist/utils/async-helpers.js.map +1 -0
  143. package/dist/utils/auth/auth.cjs +96 -0
  144. package/dist/utils/auth/auth.d.ts +40 -0
  145. package/dist/utils/auth/auth.d.ts.map +1 -0
  146. package/dist/utils/auth/auth.js +96 -0
  147. package/dist/utils/auth/auth.js.map +1 -0
  148. package/dist/utils/auth/index.cjs +14 -0
  149. package/dist/utils/auth/index.d.ts +2 -0
  150. package/dist/utils/auth/index.d.ts.map +1 -0
  151. package/dist/utils/auth/index.js +14 -0
  152. package/dist/utils/auth/index.js.map +1 -0
  153. package/dist/utils/blockchain/address.cjs +231 -0
  154. package/dist/utils/blockchain/address.d.ts +65 -0
  155. package/dist/utils/blockchain/address.d.ts.map +1 -0
  156. package/dist/utils/blockchain/address.js +231 -0
  157. package/dist/utils/blockchain/address.js.map +1 -0
  158. package/dist/utils/blockchain/event-helpers.cjs +143 -0
  159. package/dist/utils/blockchain/event-helpers.d.ts +87 -0
  160. package/dist/utils/blockchain/event-helpers.d.ts.map +1 -0
  161. package/dist/utils/blockchain/event-helpers.js +143 -0
  162. package/dist/utils/blockchain/event-helpers.js.map +1 -0
  163. package/dist/utils/blockchain/index.cjs +30 -0
  164. package/dist/utils/blockchain/index.d.ts +8 -0
  165. package/dist/utils/blockchain/index.d.ts.map +1 -0
  166. package/dist/utils/blockchain/index.js +30 -0
  167. package/dist/utils/blockchain/index.js.map +1 -0
  168. package/dist/utils/blockchain/rpc-helpers.cjs +865 -0
  169. package/dist/utils/blockchain/rpc-helpers.d.ts +251 -0
  170. package/dist/utils/blockchain/rpc-helpers.d.ts.map +1 -0
  171. package/dist/utils/blockchain/rpc-helpers.js +865 -0
  172. package/dist/utils/blockchain/rpc-helpers.js.map +1 -0
  173. package/dist/utils/constants/application.cjs +158 -0
  174. package/dist/utils/constants/application.d.ts +119 -0
  175. package/dist/utils/constants/application.d.ts.map +1 -0
  176. package/dist/utils/constants/application.js +158 -0
  177. package/dist/utils/constants/application.js.map +1 -0
  178. package/dist/utils/constants/index.cjs +30 -0
  179. package/dist/utils/constants/index.d.ts +7 -0
  180. package/dist/utils/constants/index.d.ts.map +1 -0
  181. package/dist/utils/constants/index.js +30 -0
  182. package/dist/utils/constants/index.js.map +1 -0
  183. package/dist/utils/constants/status-values.cjs +14 -0
  184. package/dist/utils/constants/status-values.d.ts +12 -0
  185. package/dist/utils/constants/status-values.d.ts.map +1 -0
  186. package/dist/utils/constants/status-values.js +14 -0
  187. package/dist/utils/constants/status-values.js.map +1 -0
  188. package/dist/utils/formatting/currency.cjs +36 -0
  189. package/dist/utils/formatting/currency.d.ts +26 -0
  190. package/dist/utils/formatting/currency.d.ts.map +1 -0
  191. package/dist/utils/formatting/currency.js +36 -0
  192. package/dist/utils/formatting/currency.js.map +1 -0
  193. package/dist/utils/formatting/date.cjs +138 -0
  194. package/dist/utils/formatting/date.d.ts +33 -0
  195. package/dist/utils/formatting/date.d.ts.map +1 -0
  196. package/dist/utils/formatting/date.js +138 -0
  197. package/dist/utils/formatting/date.js.map +1 -0
  198. package/dist/utils/formatting/index.cjs +37 -0
  199. package/dist/utils/formatting/index.d.ts +4 -0
  200. package/dist/utils/formatting/index.d.ts.map +1 -0
  201. package/dist/utils/formatting/index.js +37 -0
  202. package/dist/utils/formatting/index.js.map +1 -0
  203. package/dist/utils/formatting/string.cjs +193 -0
  204. package/dist/utils/formatting/string.d.ts +69 -0
  205. package/dist/utils/formatting/string.d.ts.map +1 -0
  206. package/dist/utils/formatting/string.js +193 -0
  207. package/dist/utils/formatting/string.js.map +1 -0
  208. package/dist/utils/index.cjs +28 -0
  209. package/dist/utils/index.d.ts +12 -0
  210. package/dist/utils/index.d.ts.map +1 -0
  211. package/dist/utils/index.js +28 -0
  212. package/dist/utils/index.js.map +1 -0
  213. package/dist/utils/logging/index.cjs +16 -0
  214. package/dist/utils/logging/index.d.ts +5 -0
  215. package/dist/utils/logging/index.d.ts.map +1 -0
  216. package/dist/utils/logging/index.js +16 -0
  217. package/dist/utils/logging/index.js.map +1 -0
  218. package/dist/utils/logging/logger.cjs +92 -0
  219. package/dist/utils/logging/logger.d.ts +70 -0
  220. package/dist/utils/logging/logger.d.ts.map +1 -0
  221. package/dist/utils/logging/logger.js +92 -0
  222. package/dist/utils/logging/logger.js.map +1 -0
  223. package/dist/utils/url/index.cjs +13 -0
  224. package/dist/utils/url/index.d.ts +5 -0
  225. package/dist/utils/url/index.d.ts.map +1 -0
  226. package/dist/utils/url/index.js +13 -0
  227. package/dist/utils/url/index.js.map +1 -0
  228. package/dist/utils/url/url-params.cjs +128 -0
  229. package/dist/utils/url/url-params.d.ts +36 -0
  230. package/dist/utils/url/url-params.d.ts.map +1 -0
  231. package/dist/utils/url/url-params.js +128 -0
  232. package/dist/utils/url/url-params.js.map +1 -0
  233. package/dist/utils/validation/index.cjs +25 -0
  234. package/dist/utils/validation/index.d.ts +5 -0
  235. package/dist/utils/validation/index.d.ts.map +1 -0
  236. package/dist/utils/validation/index.js +25 -0
  237. package/dist/utils/validation/index.js.map +1 -0
  238. package/dist/utils/validation/type-validation.cjs +167 -0
  239. package/dist/utils/validation/type-validation.d.ts +68 -0
  240. package/dist/utils/validation/type-validation.d.ts.map +1 -0
  241. package/dist/utils/validation/type-validation.js +167 -0
  242. package/dist/utils/validation/type-validation.js.map +1 -0
  243. package/dist/utils/validation/web3-username-validator.cjs +132 -0
  244. package/dist/utils/validation/web3-username-validator.d.ts +43 -0
  245. package/dist/utils/validation/web3-username-validator.d.ts.map +1 -0
  246. package/dist/utils/validation/web3-username-validator.js +132 -0
  247. package/dist/utils/validation/web3-username-validator.js.map +1 -0
  248. package/package.json +80 -0
@@ -0,0 +1,865 @@
1
+ "use strict";
2
+ /**
3
+ * RPC and API endpoint helper utilities
4
+ *
5
+ * Provides helper functions to build RPC endpoints and block explorer API URLs
6
+ * from API keys and chain identifiers.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.RpcHelpers = void 0;
10
+ const enums_1 = require("../../types/business/enums");
11
+ /**
12
+ * Alchemy network identifier mappings
13
+ * Maps Chain enum values to Alchemy-specific network identifiers
14
+ */
15
+ const ALCHEMY_NETWORK_MAP = {
16
+ // Ethereum - direct mapping
17
+ [enums_1.Chain.ETH_MAINNET]: 'eth-mainnet',
18
+ [enums_1.Chain.ETH_SEPOLIA]: 'eth-sepolia',
19
+ [enums_1.Chain.ETH_GOERLI]: 'eth-goerli',
20
+ // Polygon - direct mapping
21
+ [enums_1.Chain.POLYGON_MAINNET]: 'polygon-mainnet',
22
+ [enums_1.Chain.POLYGON_MUMBAI]: 'polygon-mumbai',
23
+ [enums_1.Chain.POLYGON_AMOY]: 'polygon-amoy',
24
+ // Optimism - uses 'opt' prefix
25
+ [enums_1.Chain.OPTIMISM_MAINNET]: 'opt-mainnet',
26
+ [enums_1.Chain.OPTIMISM_SEPOLIA]: 'opt-sepolia',
27
+ [enums_1.Chain.OPTIMISM_GOERLI]: 'opt-goerli',
28
+ // Arbitrum - uses 'arb' prefix
29
+ [enums_1.Chain.ARBITRUM_MAINNET]: 'arb-mainnet',
30
+ [enums_1.Chain.ARBITRUM_SEPOLIA]: 'arb-sepolia',
31
+ [enums_1.Chain.ARBITRUM_GOERLI]: 'arb-goerli',
32
+ // Base - direct mapping
33
+ [enums_1.Chain.BASE_MAINNET]: 'base-mainnet',
34
+ [enums_1.Chain.BASE_SEPOLIA]: 'base-sepolia',
35
+ [enums_1.Chain.BASE_GOERLI]: 'base-goerli',
36
+ // Avalanche
37
+ [enums_1.Chain.AVALANCHE_MAINNET]: 'avax-mainnet',
38
+ [enums_1.Chain.AVALANCHE_FUJI]: 'avax-fuji',
39
+ // BNB Chain
40
+ [enums_1.Chain.BNB_MAINNET]: 'bnb-mainnet',
41
+ [enums_1.Chain.BNB_TESTNET]: 'bnb-testnet',
42
+ // Gnosis Chain
43
+ [enums_1.Chain.GNOSIS_MAINNET]: 'gnosis-mainnet',
44
+ [enums_1.Chain.GNOSIS_CHIADO]: 'gnosis-chiado',
45
+ // Celo
46
+ [enums_1.Chain.CELO_MAINNET]: 'celo-mainnet',
47
+ [enums_1.Chain.CELO_ALFAJORES]: 'celo-alfajores',
48
+ // zkSync
49
+ [enums_1.Chain.ZKSYNC_MAINNET]: 'zksync-mainnet',
50
+ [enums_1.Chain.ZKSYNC_SEPOLIA]: 'zksync-sepolia',
51
+ // Linea
52
+ [enums_1.Chain.LINEA_MAINNET]: 'linea-mainnet',
53
+ [enums_1.Chain.LINEA_SEPOLIA]: 'linea-sepolia',
54
+ // Scroll
55
+ [enums_1.Chain.SCROLL_MAINNET]: 'scroll-mainnet',
56
+ [enums_1.Chain.SCROLL_SEPOLIA]: 'scroll-sepolia',
57
+ // Monad
58
+ [enums_1.Chain.MONAD_MAINNET]: '',
59
+ [enums_1.Chain.MONAD_TESTNET]: '',
60
+ // Story Protocol
61
+ [enums_1.Chain.STORY_MAINNET]: '',
62
+ [enums_1.Chain.STORY_TESTNET]: '',
63
+ // Plume Network
64
+ [enums_1.Chain.PLUME_MAINNET]: '',
65
+ [enums_1.Chain.PLUME_TESTNET]: '',
66
+ // Nexus
67
+ [enums_1.Chain.NEXUS_MAINNET]: '',
68
+ [enums_1.Chain.NEXUS_TESTNET]: '',
69
+ // HyperEVM
70
+ [enums_1.Chain.HYPEREVM_MAINNET]: '',
71
+ [enums_1.Chain.HYPEREVM_TESTNET]: '',
72
+ // Sonic
73
+ [enums_1.Chain.SONIC_MAINNET]: '',
74
+ [enums_1.Chain.SONIC_TESTNET]: '',
75
+ [enums_1.Chain.SONIC_BLAZE]: '',
76
+ // Unichain
77
+ [enums_1.Chain.UNICHAIN_MAINNET]: '',
78
+ [enums_1.Chain.UNICHAIN_SEPOLIA]: '',
79
+ // World Chain
80
+ [enums_1.Chain.WORLD_MAINNET]: '',
81
+ // XDC Network
82
+ [enums_1.Chain.XDC_MAINNET]: '',
83
+ // Ink
84
+ [enums_1.Chain.INK_TESTNET]: '',
85
+ // Fetch.ai
86
+ [enums_1.Chain.FETCH_MAINNET]: '',
87
+ [enums_1.Chain.FETCH_TESTNET]: '',
88
+ // Gensyn
89
+ [enums_1.Chain.GENSYN_MAINNET]: '',
90
+ [enums_1.Chain.GENSYN_TESTNET]: '',
91
+ // Ritual
92
+ [enums_1.Chain.RITUAL_MAINNET]: '',
93
+ [enums_1.Chain.RITUAL_TESTNET]: '',
94
+ // Solana - simple names
95
+ [enums_1.Chain.SOLANA_MAINNET]: 'mainnet',
96
+ [enums_1.Chain.SOLANA_DEVNET]: 'devnet',
97
+ [enums_1.Chain.SOLANA_TESTNET]: 'testnet',
98
+ // Local development - no Alchemy support
99
+ [enums_1.Chain.EVM_LOCAL]: '',
100
+ [enums_1.Chain.SOLANA_LOCAL]: '',
101
+ };
102
+ /**
103
+ * Block explorer domain mappings
104
+ */
105
+ const EXPLORER_DOMAIN_MAP = {
106
+ // Ethereum
107
+ [enums_1.Chain.ETH_MAINNET]: 'api.etherscan.io',
108
+ [enums_1.Chain.ETH_SEPOLIA]: 'api-sepolia.etherscan.io',
109
+ [enums_1.Chain.ETH_GOERLI]: 'api-goerli.etherscan.io',
110
+ // Polygon
111
+ [enums_1.Chain.POLYGON_MAINNET]: 'api.polygonscan.com',
112
+ [enums_1.Chain.POLYGON_MUMBAI]: 'api-testnet.polygonscan.com',
113
+ [enums_1.Chain.POLYGON_AMOY]: 'api-amoy.polygonscan.com',
114
+ // Optimism
115
+ [enums_1.Chain.OPTIMISM_MAINNET]: 'api-optimistic.etherscan.io',
116
+ [enums_1.Chain.OPTIMISM_SEPOLIA]: 'api-sepolia-optimistic.etherscan.io',
117
+ [enums_1.Chain.OPTIMISM_GOERLI]: 'api-goerli-optimistic.etherscan.io',
118
+ // Arbitrum
119
+ [enums_1.Chain.ARBITRUM_MAINNET]: 'api.arbiscan.io',
120
+ [enums_1.Chain.ARBITRUM_SEPOLIA]: 'api-sepolia.arbiscan.io',
121
+ [enums_1.Chain.ARBITRUM_GOERLI]: 'api-goerli.arbiscan.io',
122
+ // Base
123
+ [enums_1.Chain.BASE_MAINNET]: 'api.basescan.org',
124
+ [enums_1.Chain.BASE_SEPOLIA]: 'api-sepolia.basescan.org',
125
+ [enums_1.Chain.BASE_GOERLI]: 'api-goerli.basescan.org',
126
+ // Avalanche
127
+ [enums_1.Chain.AVALANCHE_MAINNET]: 'api.snowtrace.io',
128
+ [enums_1.Chain.AVALANCHE_FUJI]: 'api-testnet.snowtrace.io',
129
+ // BNB Chain
130
+ [enums_1.Chain.BNB_MAINNET]: 'api.bscscan.com',
131
+ [enums_1.Chain.BNB_TESTNET]: 'api-testnet.bscscan.com',
132
+ // Gnosis Chain
133
+ [enums_1.Chain.GNOSIS_MAINNET]: 'api.gnosisscan.io',
134
+ [enums_1.Chain.GNOSIS_CHIADO]: 'api-chiado.gnosisscan.io',
135
+ // Celo
136
+ [enums_1.Chain.CELO_MAINNET]: 'api.celoscan.io',
137
+ [enums_1.Chain.CELO_ALFAJORES]: 'api-alfajores.celoscan.io',
138
+ // zkSync
139
+ [enums_1.Chain.ZKSYNC_MAINNET]: 'api-era.zksync.network',
140
+ [enums_1.Chain.ZKSYNC_SEPOLIA]: 'api-sepolia-era.zksync.network',
141
+ // Linea
142
+ [enums_1.Chain.LINEA_MAINNET]: 'api.lineascan.build',
143
+ [enums_1.Chain.LINEA_SEPOLIA]: 'api-sepolia.lineascan.build',
144
+ // Scroll
145
+ [enums_1.Chain.SCROLL_MAINNET]: 'api.scrollscan.com',
146
+ [enums_1.Chain.SCROLL_SEPOLIA]: 'api-sepolia.scrollscan.com',
147
+ // Monad
148
+ [enums_1.Chain.MONAD_MAINNET]: '',
149
+ [enums_1.Chain.MONAD_TESTNET]: '',
150
+ // Story Protocol
151
+ [enums_1.Chain.STORY_MAINNET]: '',
152
+ [enums_1.Chain.STORY_TESTNET]: '',
153
+ // Plume Network
154
+ [enums_1.Chain.PLUME_MAINNET]: '',
155
+ [enums_1.Chain.PLUME_TESTNET]: '',
156
+ // Nexus
157
+ [enums_1.Chain.NEXUS_MAINNET]: '',
158
+ [enums_1.Chain.NEXUS_TESTNET]: '',
159
+ // HyperEVM
160
+ [enums_1.Chain.HYPEREVM_MAINNET]: '',
161
+ [enums_1.Chain.HYPEREVM_TESTNET]: '',
162
+ // Sonic
163
+ [enums_1.Chain.SONIC_MAINNET]: '',
164
+ [enums_1.Chain.SONIC_TESTNET]: '',
165
+ [enums_1.Chain.SONIC_BLAZE]: '',
166
+ // Unichain
167
+ [enums_1.Chain.UNICHAIN_MAINNET]: '',
168
+ [enums_1.Chain.UNICHAIN_SEPOLIA]: '',
169
+ // World Chain
170
+ [enums_1.Chain.WORLD_MAINNET]: '',
171
+ // XDC Network
172
+ [enums_1.Chain.XDC_MAINNET]: '',
173
+ // Ink
174
+ [enums_1.Chain.INK_TESTNET]: '',
175
+ // Fetch.ai
176
+ [enums_1.Chain.FETCH_MAINNET]: '',
177
+ [enums_1.Chain.FETCH_TESTNET]: '',
178
+ // Gensyn
179
+ [enums_1.Chain.GENSYN_MAINNET]: '',
180
+ [enums_1.Chain.GENSYN_TESTNET]: '',
181
+ // Ritual
182
+ [enums_1.Chain.RITUAL_MAINNET]: '',
183
+ [enums_1.Chain.RITUAL_TESTNET]: '',
184
+ // Solana - no block explorer API in this format
185
+ [enums_1.Chain.SOLANA_MAINNET]: '',
186
+ [enums_1.Chain.SOLANA_DEVNET]: '',
187
+ [enums_1.Chain.SOLANA_TESTNET]: '',
188
+ // Local development - no block explorer API
189
+ [enums_1.Chain.EVM_LOCAL]: '',
190
+ [enums_1.Chain.SOLANA_LOCAL]: '',
191
+ };
192
+ /**
193
+ * Block explorer browser URL mappings
194
+ */
195
+ const EXPLORER_BROWSER_MAP = {
196
+ // Ethereum
197
+ [enums_1.Chain.ETH_MAINNET]: 'etherscan.io',
198
+ [enums_1.Chain.ETH_SEPOLIA]: 'sepolia.etherscan.io',
199
+ [enums_1.Chain.ETH_GOERLI]: 'goerli.etherscan.io',
200
+ // Polygon
201
+ [enums_1.Chain.POLYGON_MAINNET]: 'polygonscan.com',
202
+ [enums_1.Chain.POLYGON_MUMBAI]: 'mumbai.polygonscan.com',
203
+ [enums_1.Chain.POLYGON_AMOY]: 'amoy.polygonscan.com',
204
+ // Optimism
205
+ [enums_1.Chain.OPTIMISM_MAINNET]: 'optimistic.etherscan.io',
206
+ [enums_1.Chain.OPTIMISM_SEPOLIA]: 'sepolia-optimistic.etherscan.io',
207
+ [enums_1.Chain.OPTIMISM_GOERLI]: 'goerli-optimistic.etherscan.io',
208
+ // Arbitrum
209
+ [enums_1.Chain.ARBITRUM_MAINNET]: 'arbiscan.io',
210
+ [enums_1.Chain.ARBITRUM_SEPOLIA]: 'sepolia.arbiscan.io',
211
+ [enums_1.Chain.ARBITRUM_GOERLI]: 'goerli.arbiscan.io',
212
+ // Base
213
+ [enums_1.Chain.BASE_MAINNET]: 'basescan.org',
214
+ [enums_1.Chain.BASE_SEPOLIA]: 'sepolia.basescan.org',
215
+ [enums_1.Chain.BASE_GOERLI]: 'goerli.basescan.org',
216
+ // Avalanche
217
+ [enums_1.Chain.AVALANCHE_MAINNET]: 'snowtrace.io',
218
+ [enums_1.Chain.AVALANCHE_FUJI]: 'testnet.snowtrace.io',
219
+ // BNB Chain
220
+ [enums_1.Chain.BNB_MAINNET]: 'bscscan.com',
221
+ [enums_1.Chain.BNB_TESTNET]: 'testnet.bscscan.com',
222
+ // Gnosis Chain
223
+ [enums_1.Chain.GNOSIS_MAINNET]: 'gnosisscan.io',
224
+ [enums_1.Chain.GNOSIS_CHIADO]: 'gnosis-chiado.blockscout.com',
225
+ // Celo
226
+ [enums_1.Chain.CELO_MAINNET]: 'celoscan.io',
227
+ [enums_1.Chain.CELO_ALFAJORES]: 'alfajores.celoscan.io',
228
+ // zkSync
229
+ [enums_1.Chain.ZKSYNC_MAINNET]: 'explorer.zksync.io',
230
+ [enums_1.Chain.ZKSYNC_SEPOLIA]: 'sepolia.explorer.zksync.io',
231
+ // Linea
232
+ [enums_1.Chain.LINEA_MAINNET]: 'lineascan.build',
233
+ [enums_1.Chain.LINEA_SEPOLIA]: 'sepolia.lineascan.build',
234
+ // Scroll
235
+ [enums_1.Chain.SCROLL_MAINNET]: 'scrollscan.com',
236
+ [enums_1.Chain.SCROLL_SEPOLIA]: 'sepolia.scrollscan.com',
237
+ // Monad
238
+ [enums_1.Chain.MONAD_MAINNET]: 'explorer.monad.xyz',
239
+ [enums_1.Chain.MONAD_TESTNET]: 'testnet.explorer.monad.xyz',
240
+ // Story Protocol
241
+ [enums_1.Chain.STORY_MAINNET]: 'explorer.story.foundation',
242
+ [enums_1.Chain.STORY_TESTNET]: 'testnet.explorer.story.foundation',
243
+ // Plume Network
244
+ [enums_1.Chain.PLUME_MAINNET]: 'explorer.plumenetwork.xyz',
245
+ [enums_1.Chain.PLUME_TESTNET]: 'testnet.explorer.plumenetwork.xyz',
246
+ // Nexus
247
+ [enums_1.Chain.NEXUS_MAINNET]: 'explorer.nexus.xyz',
248
+ [enums_1.Chain.NEXUS_TESTNET]: 'testnet.explorer.nexus.xyz',
249
+ // HyperEVM
250
+ [enums_1.Chain.HYPEREVM_MAINNET]: 'app.hyperliquid.xyz/explorer',
251
+ [enums_1.Chain.HYPEREVM_TESTNET]: 'app.hyperliquid-testnet.xyz/explorer',
252
+ // Sonic
253
+ [enums_1.Chain.SONIC_MAINNET]: 'sonicscan.org',
254
+ [enums_1.Chain.SONIC_TESTNET]: 'testnet.sonicscan.org',
255
+ [enums_1.Chain.SONIC_BLAZE]: 'blaze.sonicscan.org',
256
+ // Unichain
257
+ [enums_1.Chain.UNICHAIN_MAINNET]: 'uniscan.xyz',
258
+ [enums_1.Chain.UNICHAIN_SEPOLIA]: 'sepolia.uniscan.xyz',
259
+ // World Chain
260
+ [enums_1.Chain.WORLD_MAINNET]: 'worldscan.org',
261
+ // XDC Network
262
+ [enums_1.Chain.XDC_MAINNET]: 'xdcscan.io',
263
+ // Ink
264
+ [enums_1.Chain.INK_TESTNET]: 'explorer.inkonchain.com',
265
+ // Fetch.ai
266
+ [enums_1.Chain.FETCH_MAINNET]: 'explore.fetch.ai',
267
+ [enums_1.Chain.FETCH_TESTNET]: 'explore-testnet.fetch.ai',
268
+ // Gensyn
269
+ [enums_1.Chain.GENSYN_MAINNET]: 'explorer.gensyn.ai',
270
+ [enums_1.Chain.GENSYN_TESTNET]: 'testnet.explorer.gensyn.ai',
271
+ // Ritual
272
+ [enums_1.Chain.RITUAL_MAINNET]: 'explorer.ritual.net',
273
+ [enums_1.Chain.RITUAL_TESTNET]: 'testnet.explorer.ritual.net',
274
+ // Solana
275
+ [enums_1.Chain.SOLANA_MAINNET]: 'explorer.solana.com',
276
+ [enums_1.Chain.SOLANA_DEVNET]: 'explorer.solana.com/?cluster=devnet',
277
+ [enums_1.Chain.SOLANA_TESTNET]: 'explorer.solana.com/?cluster=testnet',
278
+ // Local development - no block explorer
279
+ [enums_1.Chain.EVM_LOCAL]: '',
280
+ [enums_1.Chain.SOLANA_LOCAL]: '',
281
+ };
282
+ /**
283
+ * EVM chains (used for type checking)
284
+ */
285
+ const EVM_CHAINS = new Set([
286
+ enums_1.Chain.ETH_MAINNET,
287
+ enums_1.Chain.ETH_SEPOLIA,
288
+ enums_1.Chain.ETH_GOERLI,
289
+ enums_1.Chain.POLYGON_MAINNET,
290
+ enums_1.Chain.POLYGON_MUMBAI,
291
+ enums_1.Chain.POLYGON_AMOY,
292
+ enums_1.Chain.OPTIMISM_MAINNET,
293
+ enums_1.Chain.OPTIMISM_SEPOLIA,
294
+ enums_1.Chain.OPTIMISM_GOERLI,
295
+ enums_1.Chain.ARBITRUM_MAINNET,
296
+ enums_1.Chain.ARBITRUM_SEPOLIA,
297
+ enums_1.Chain.ARBITRUM_GOERLI,
298
+ enums_1.Chain.BASE_MAINNET,
299
+ enums_1.Chain.BASE_SEPOLIA,
300
+ enums_1.Chain.BASE_GOERLI,
301
+ enums_1.Chain.AVALANCHE_MAINNET,
302
+ enums_1.Chain.AVALANCHE_FUJI,
303
+ enums_1.Chain.BNB_MAINNET,
304
+ enums_1.Chain.BNB_TESTNET,
305
+ enums_1.Chain.GNOSIS_MAINNET,
306
+ enums_1.Chain.GNOSIS_CHIADO,
307
+ enums_1.Chain.CELO_MAINNET,
308
+ enums_1.Chain.CELO_ALFAJORES,
309
+ enums_1.Chain.ZKSYNC_MAINNET,
310
+ enums_1.Chain.ZKSYNC_SEPOLIA,
311
+ enums_1.Chain.LINEA_MAINNET,
312
+ enums_1.Chain.LINEA_SEPOLIA,
313
+ enums_1.Chain.SCROLL_MAINNET,
314
+ enums_1.Chain.SCROLL_SEPOLIA,
315
+ enums_1.Chain.MONAD_MAINNET,
316
+ enums_1.Chain.MONAD_TESTNET,
317
+ enums_1.Chain.STORY_MAINNET,
318
+ enums_1.Chain.STORY_TESTNET,
319
+ enums_1.Chain.PLUME_MAINNET,
320
+ enums_1.Chain.PLUME_TESTNET,
321
+ enums_1.Chain.NEXUS_MAINNET,
322
+ enums_1.Chain.NEXUS_TESTNET,
323
+ enums_1.Chain.HYPEREVM_MAINNET,
324
+ enums_1.Chain.HYPEREVM_TESTNET,
325
+ enums_1.Chain.SONIC_MAINNET,
326
+ enums_1.Chain.SONIC_TESTNET,
327
+ enums_1.Chain.SONIC_BLAZE,
328
+ enums_1.Chain.UNICHAIN_MAINNET,
329
+ enums_1.Chain.UNICHAIN_SEPOLIA,
330
+ enums_1.Chain.WORLD_MAINNET,
331
+ enums_1.Chain.XDC_MAINNET,
332
+ enums_1.Chain.INK_TESTNET,
333
+ enums_1.Chain.FETCH_MAINNET,
334
+ enums_1.Chain.FETCH_TESTNET,
335
+ enums_1.Chain.GENSYN_MAINNET,
336
+ enums_1.Chain.GENSYN_TESTNET,
337
+ enums_1.Chain.RITUAL_MAINNET,
338
+ enums_1.Chain.RITUAL_TESTNET,
339
+ enums_1.Chain.EVM_LOCAL,
340
+ ]);
341
+ /**
342
+ * Solana chains (used for type checking)
343
+ */
344
+ const SOLANA_CHAINS = new Set([
345
+ enums_1.Chain.SOLANA_MAINNET,
346
+ enums_1.Chain.SOLANA_DEVNET,
347
+ enums_1.Chain.SOLANA_TESTNET,
348
+ enums_1.Chain.SOLANA_LOCAL,
349
+ ]);
350
+ /**
351
+ * Chain ID mappings
352
+ * EVM chains use positive IDs, Solana chains use negative IDs
353
+ */
354
+ const CHAIN_ID_MAP = {
355
+ // Ethereum
356
+ [enums_1.Chain.ETH_MAINNET]: 1,
357
+ [enums_1.Chain.ETH_SEPOLIA]: 11155111,
358
+ [enums_1.Chain.ETH_GOERLI]: 5,
359
+ // Polygon
360
+ [enums_1.Chain.POLYGON_MAINNET]: 137,
361
+ [enums_1.Chain.POLYGON_MUMBAI]: 80001,
362
+ [enums_1.Chain.POLYGON_AMOY]: 80002,
363
+ // Optimism
364
+ [enums_1.Chain.OPTIMISM_MAINNET]: 10,
365
+ [enums_1.Chain.OPTIMISM_SEPOLIA]: 11155420,
366
+ [enums_1.Chain.OPTIMISM_GOERLI]: 420,
367
+ // Arbitrum
368
+ [enums_1.Chain.ARBITRUM_MAINNET]: 42161,
369
+ [enums_1.Chain.ARBITRUM_SEPOLIA]: 421614,
370
+ [enums_1.Chain.ARBITRUM_GOERLI]: 421613,
371
+ // Base
372
+ [enums_1.Chain.BASE_MAINNET]: 8453,
373
+ [enums_1.Chain.BASE_SEPOLIA]: 84532,
374
+ [enums_1.Chain.BASE_GOERLI]: 84531,
375
+ // Avalanche
376
+ [enums_1.Chain.AVALANCHE_MAINNET]: 43114,
377
+ [enums_1.Chain.AVALANCHE_FUJI]: 43113,
378
+ // BNB Chain
379
+ [enums_1.Chain.BNB_MAINNET]: 56,
380
+ [enums_1.Chain.BNB_TESTNET]: 97,
381
+ // Gnosis Chain
382
+ [enums_1.Chain.GNOSIS_MAINNET]: 100,
383
+ [enums_1.Chain.GNOSIS_CHIADO]: 10200,
384
+ // Celo
385
+ [enums_1.Chain.CELO_MAINNET]: 42220,
386
+ [enums_1.Chain.CELO_ALFAJORES]: 44787,
387
+ // zkSync
388
+ [enums_1.Chain.ZKSYNC_MAINNET]: 324,
389
+ [enums_1.Chain.ZKSYNC_SEPOLIA]: 300,
390
+ // Linea
391
+ [enums_1.Chain.LINEA_MAINNET]: 59144,
392
+ [enums_1.Chain.LINEA_SEPOLIA]: 59141,
393
+ // Scroll
394
+ [enums_1.Chain.SCROLL_MAINNET]: 534352,
395
+ [enums_1.Chain.SCROLL_SEPOLIA]: 534351,
396
+ // Monad
397
+ [enums_1.Chain.MONAD_MAINNET]: 10000, // TBD - placeholder
398
+ [enums_1.Chain.MONAD_TESTNET]: 10001, // TBD - placeholder
399
+ // Story Protocol
400
+ [enums_1.Chain.STORY_MAINNET]: 1516, // Actual Story chain ID
401
+ [enums_1.Chain.STORY_TESTNET]: 1513, // Story testnet chain ID
402
+ // Plume Network
403
+ [enums_1.Chain.PLUME_MAINNET]: 98865, // Plume mainnet
404
+ [enums_1.Chain.PLUME_TESTNET]: 98864, // Plume testnet
405
+ // Nexus
406
+ [enums_1.Chain.NEXUS_MAINNET]: 9999, // TBD - placeholder
407
+ [enums_1.Chain.NEXUS_TESTNET]: 9998, // TBD - placeholder
408
+ // HyperEVM
409
+ [enums_1.Chain.HYPEREVM_MAINNET]: 998, // HyperEVM L1
410
+ [enums_1.Chain.HYPEREVM_TESTNET]: 997, // HyperEVM testnet
411
+ // Sonic
412
+ [enums_1.Chain.SONIC_MAINNET]: 146, // Sonic mainnet
413
+ [enums_1.Chain.SONIC_TESTNET]: 64165, // Sonic testnet (S)
414
+ [enums_1.Chain.SONIC_BLAZE]: 57054, // Sonic Blaze testnet (deprecated soon)
415
+ // Unichain
416
+ [enums_1.Chain.UNICHAIN_MAINNET]: 1, // TBD - mainnet not launched yet, placeholder
417
+ [enums_1.Chain.UNICHAIN_SEPOLIA]: 1301, // Unichain Sepolia testnet
418
+ // World Chain
419
+ [enums_1.Chain.WORLD_MAINNET]: 480, // World Chain mainnet
420
+ // XDC Network
421
+ [enums_1.Chain.XDC_MAINNET]: 50, // XDC Network mainnet
422
+ // Ink
423
+ [enums_1.Chain.INK_TESTNET]: 763373, // Ink testnet (Sepolia)
424
+ // Fetch.ai (Cosmos-based but supports EVM)
425
+ [enums_1.Chain.FETCH_MAINNET]: 2154, // Fetch.ai EVM
426
+ [enums_1.Chain.FETCH_TESTNET]: 2153, // Fetch.ai testnet
427
+ // Gensyn
428
+ [enums_1.Chain.GENSYN_MAINNET]: 8888, // TBD - placeholder
429
+ [enums_1.Chain.GENSYN_TESTNET]: 8887, // TBD - placeholder
430
+ // Ritual
431
+ [enums_1.Chain.RITUAL_MAINNET]: 7777, // TBD - placeholder
432
+ [enums_1.Chain.RITUAL_TESTNET]: 7776, // TBD - placeholder
433
+ // Solana (negative IDs)
434
+ [enums_1.Chain.SOLANA_MAINNET]: -101,
435
+ [enums_1.Chain.SOLANA_DEVNET]: -102,
436
+ [enums_1.Chain.SOLANA_TESTNET]: -103,
437
+ // Local development
438
+ [enums_1.Chain.EVM_LOCAL]: 31337,
439
+ [enums_1.Chain.SOLANA_LOCAL]: -104,
440
+ };
441
+ /**
442
+ * USDC address/mint mappings
443
+ * EVM chains have contract addresses, Solana chains have mint addresses
444
+ * Source: https://developers.circle.com/stablecoins/usdc-contract-addresses
445
+ */
446
+ const USDC_ADDRESS_MAP = {
447
+ // Ethereum - Official Circle USDC
448
+ [enums_1.Chain.ETH_MAINNET]: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
449
+ [enums_1.Chain.ETH_SEPOLIA]: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',
450
+ [enums_1.Chain.ETH_GOERLI]: '0x07865c6E87B9F70255377e024ace6630C1Eaa37F', // Deprecated
451
+ // Polygon - Official Circle USDC (native USDC)
452
+ [enums_1.Chain.POLYGON_MAINNET]: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',
453
+ [enums_1.Chain.POLYGON_MUMBAI]: '0x9999f7Fea5938fD3b1E26A12c3f2fb024e194f97', // Deprecated
454
+ [enums_1.Chain.POLYGON_AMOY]: '0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582',
455
+ // Optimism - Official Circle USDC
456
+ [enums_1.Chain.OPTIMISM_MAINNET]: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',
457
+ [enums_1.Chain.OPTIMISM_SEPOLIA]: '0x5fd84259d66Cd46123540766Be93DFE6D43130D7',
458
+ [enums_1.Chain.OPTIMISM_GOERLI]: '0xe05606174bac4A6364B31bd0eCA4bf4dD368f8C6', // Deprecated
459
+ // Arbitrum - Official Circle USDC
460
+ [enums_1.Chain.ARBITRUM_MAINNET]: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
461
+ [enums_1.Chain.ARBITRUM_SEPOLIA]: '0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d',
462
+ [enums_1.Chain.ARBITRUM_GOERLI]: '0xfd064A18f3BF249cf1f87FC203E90D8f650f2d63', // Deprecated
463
+ // Base - Official Circle USDC
464
+ [enums_1.Chain.BASE_MAINNET]: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
465
+ [enums_1.Chain.BASE_SEPOLIA]: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',
466
+ [enums_1.Chain.BASE_GOERLI]: '0xF175520C52418dfE19C8098071a252da48Cd1C19', // Deprecated
467
+ // Avalanche - Official Circle USDC
468
+ [enums_1.Chain.AVALANCHE_MAINNET]: '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E',
469
+ [enums_1.Chain.AVALANCHE_FUJI]: '0x5425890298aed601595a70AB815c96711a31Bc65',
470
+ // BNB Chain
471
+ [enums_1.Chain.BNB_MAINNET]: '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d',
472
+ [enums_1.Chain.BNB_TESTNET]: '0x64544969ed7EBf5f083679233325356EbE738930',
473
+ // Gnosis Chain
474
+ [enums_1.Chain.GNOSIS_MAINNET]: '0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83',
475
+ [enums_1.Chain.GNOSIS_CHIADO]: '0x',
476
+ // Celo
477
+ [enums_1.Chain.CELO_MAINNET]: '0xcebA9300f2b948710d2653dD7B07f33A8B32118C',
478
+ [enums_1.Chain.CELO_ALFAJORES]: '0x2F25deB3848C207fc8E0c34035B3Ba7fC157602B',
479
+ // zkSync - Official Circle USDC
480
+ [enums_1.Chain.ZKSYNC_MAINNET]: '0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4',
481
+ [enums_1.Chain.ZKSYNC_SEPOLIA]: '0x',
482
+ // Linea
483
+ [enums_1.Chain.LINEA_MAINNET]: '0x176211869cA2b568f2A7D4EE941E073a821EE1ff',
484
+ [enums_1.Chain.LINEA_SEPOLIA]: '0x',
485
+ // Scroll
486
+ [enums_1.Chain.SCROLL_MAINNET]: '0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4',
487
+ [enums_1.Chain.SCROLL_SEPOLIA]: '0x',
488
+ // Monad
489
+ [enums_1.Chain.MONAD_MAINNET]: '0x',
490
+ [enums_1.Chain.MONAD_TESTNET]: '0x',
491
+ // Story Protocol
492
+ [enums_1.Chain.STORY_MAINNET]: '0x',
493
+ [enums_1.Chain.STORY_TESTNET]: '0x',
494
+ // Plume Network
495
+ [enums_1.Chain.PLUME_MAINNET]: '0x222365EF19F7947e5484218551B56bb3965Aa7aF',
496
+ [enums_1.Chain.PLUME_TESTNET]: '0xcB5f30e335672893c7eb944B374c196392C19D18',
497
+ // Nexus
498
+ [enums_1.Chain.NEXUS_MAINNET]: '0x',
499
+ [enums_1.Chain.NEXUS_TESTNET]: '0x',
500
+ // HyperEVM
501
+ [enums_1.Chain.HYPEREVM_MAINNET]: '0xb88339CB7199b77E23DB6E890353E22632Ba630f',
502
+ [enums_1.Chain.HYPEREVM_TESTNET]: '0x2B3370eE501B4a559b57D449569354196457D8Ab',
503
+ // Sonic
504
+ [enums_1.Chain.SONIC_MAINNET]: '0x29219dd400f2Bf60E5a23d13Be72B486D4038894',
505
+ [enums_1.Chain.SONIC_TESTNET]: '0x0BA304580ee7c9a980CF72e55f5Ed2E9fd30Bc51',
506
+ [enums_1.Chain.SONIC_BLAZE]: '0xA4879Fed32Ecbef99399e5cbC247E533421C4eC6',
507
+ // Unichain
508
+ [enums_1.Chain.UNICHAIN_MAINNET]: '0x078D782b760474a361dDA0AF3839290b0EF57AD6',
509
+ [enums_1.Chain.UNICHAIN_SEPOLIA]: '0x31d0220469e10c4E71834a79b1f276E153D00a2D',
510
+ // World Chain
511
+ [enums_1.Chain.WORLD_MAINNET]: '0x79A02482A880bCe3F13E09da970dC34dB4cD24D1',
512
+ // XDC Network
513
+ [enums_1.Chain.XDC_MAINNET]: '0x',
514
+ // Ink
515
+ [enums_1.Chain.INK_TESTNET]: '0xFabab97dCE620294D2B0b0e46C68964e326300Ac',
516
+ // Fetch.ai
517
+ [enums_1.Chain.FETCH_MAINNET]: '0x',
518
+ [enums_1.Chain.FETCH_TESTNET]: '0x',
519
+ // Gensyn
520
+ [enums_1.Chain.GENSYN_MAINNET]: '0x',
521
+ [enums_1.Chain.GENSYN_TESTNET]: '0x',
522
+ // Ritual
523
+ [enums_1.Chain.RITUAL_MAINNET]: '0x',
524
+ [enums_1.Chain.RITUAL_TESTNET]: '0x',
525
+ // Solana (mint addresses)
526
+ [enums_1.Chain.SOLANA_MAINNET]: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
527
+ [enums_1.Chain.SOLANA_DEVNET]: '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU',
528
+ [enums_1.Chain.SOLANA_TESTNET]: '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU',
529
+ // Local development - mock addresses
530
+ [enums_1.Chain.EVM_LOCAL]: '0x0000000000000000000000000000000000000000',
531
+ [enums_1.Chain.SOLANA_LOCAL]: '11111111111111111111111111111111',
532
+ };
533
+ /**
534
+ * User-friendly chain name mappings
535
+ */
536
+ const CHAIN_NAME_MAP = {
537
+ // Ethereum
538
+ [enums_1.Chain.ETH_MAINNET]: 'Ethereum',
539
+ [enums_1.Chain.ETH_SEPOLIA]: 'Ethereum Sepolia',
540
+ [enums_1.Chain.ETH_GOERLI]: 'Ethereum Goerli',
541
+ // Polygon
542
+ [enums_1.Chain.POLYGON_MAINNET]: 'Polygon',
543
+ [enums_1.Chain.POLYGON_MUMBAI]: 'Polygon Mumbai',
544
+ [enums_1.Chain.POLYGON_AMOY]: 'Polygon Amoy',
545
+ // Optimism
546
+ [enums_1.Chain.OPTIMISM_MAINNET]: 'Optimism',
547
+ [enums_1.Chain.OPTIMISM_SEPOLIA]: 'Optimism Sepolia',
548
+ [enums_1.Chain.OPTIMISM_GOERLI]: 'Optimism Goerli',
549
+ // Arbitrum
550
+ [enums_1.Chain.ARBITRUM_MAINNET]: 'Arbitrum',
551
+ [enums_1.Chain.ARBITRUM_SEPOLIA]: 'Arbitrum Sepolia',
552
+ [enums_1.Chain.ARBITRUM_GOERLI]: 'Arbitrum Goerli',
553
+ // Base
554
+ [enums_1.Chain.BASE_MAINNET]: 'Base',
555
+ [enums_1.Chain.BASE_SEPOLIA]: 'Base Sepolia',
556
+ [enums_1.Chain.BASE_GOERLI]: 'Base Goerli',
557
+ // Avalanche
558
+ [enums_1.Chain.AVALANCHE_MAINNET]: 'Avalanche',
559
+ [enums_1.Chain.AVALANCHE_FUJI]: 'Avalanche Fuji',
560
+ // BNB Chain
561
+ [enums_1.Chain.BNB_MAINNET]: 'BNB Chain',
562
+ [enums_1.Chain.BNB_TESTNET]: 'BNB Chain Testnet',
563
+ // Gnosis Chain
564
+ [enums_1.Chain.GNOSIS_MAINNET]: 'Gnosis',
565
+ [enums_1.Chain.GNOSIS_CHIADO]: 'Gnosis Chiado',
566
+ // Celo
567
+ [enums_1.Chain.CELO_MAINNET]: 'Celo',
568
+ [enums_1.Chain.CELO_ALFAJORES]: 'Celo Alfajores',
569
+ // zkSync
570
+ [enums_1.Chain.ZKSYNC_MAINNET]: 'zkSync',
571
+ [enums_1.Chain.ZKSYNC_SEPOLIA]: 'zkSync Sepolia',
572
+ // Linea
573
+ [enums_1.Chain.LINEA_MAINNET]: 'Linea',
574
+ [enums_1.Chain.LINEA_SEPOLIA]: 'Linea Sepolia',
575
+ // Scroll
576
+ [enums_1.Chain.SCROLL_MAINNET]: 'Scroll',
577
+ [enums_1.Chain.SCROLL_SEPOLIA]: 'Scroll Sepolia',
578
+ // Monad
579
+ [enums_1.Chain.MONAD_MAINNET]: 'Monad',
580
+ [enums_1.Chain.MONAD_TESTNET]: 'Monad Testnet',
581
+ // Story Protocol
582
+ [enums_1.Chain.STORY_MAINNET]: 'Story',
583
+ [enums_1.Chain.STORY_TESTNET]: 'Story Testnet',
584
+ // Plume Network
585
+ [enums_1.Chain.PLUME_MAINNET]: 'Plume',
586
+ [enums_1.Chain.PLUME_TESTNET]: 'Plume Testnet',
587
+ // Nexus
588
+ [enums_1.Chain.NEXUS_MAINNET]: 'Nexus',
589
+ [enums_1.Chain.NEXUS_TESTNET]: 'Nexus Testnet',
590
+ // HyperEVM
591
+ [enums_1.Chain.HYPEREVM_MAINNET]: 'HyperEVM',
592
+ [enums_1.Chain.HYPEREVM_TESTNET]: 'HyperEVM Testnet',
593
+ // Sonic
594
+ [enums_1.Chain.SONIC_MAINNET]: 'Sonic',
595
+ [enums_1.Chain.SONIC_TESTNET]: 'Sonic Testnet',
596
+ [enums_1.Chain.SONIC_BLAZE]: 'Sonic Blaze',
597
+ // Unichain
598
+ [enums_1.Chain.UNICHAIN_MAINNET]: 'Unichain',
599
+ [enums_1.Chain.UNICHAIN_SEPOLIA]: 'Unichain Sepolia',
600
+ // World Chain
601
+ [enums_1.Chain.WORLD_MAINNET]: 'World Chain',
602
+ // XDC Network
603
+ [enums_1.Chain.XDC_MAINNET]: 'XDC Network',
604
+ // Ink
605
+ [enums_1.Chain.INK_TESTNET]: 'Ink Testnet',
606
+ // Fetch.ai
607
+ [enums_1.Chain.FETCH_MAINNET]: 'Fetch.ai',
608
+ [enums_1.Chain.FETCH_TESTNET]: 'Fetch.ai Testnet',
609
+ // Gensyn
610
+ [enums_1.Chain.GENSYN_MAINNET]: 'Gensyn',
611
+ [enums_1.Chain.GENSYN_TESTNET]: 'Gensyn Testnet',
612
+ // Ritual
613
+ [enums_1.Chain.RITUAL_MAINNET]: 'Ritual',
614
+ [enums_1.Chain.RITUAL_TESTNET]: 'Ritual Testnet',
615
+ // Solana
616
+ [enums_1.Chain.SOLANA_MAINNET]: 'Solana',
617
+ [enums_1.Chain.SOLANA_DEVNET]: 'Solana Devnet',
618
+ [enums_1.Chain.SOLANA_TESTNET]: 'Solana Testnet',
619
+ // Local development
620
+ [enums_1.Chain.EVM_LOCAL]: 'Local EVM',
621
+ [enums_1.Chain.SOLANA_LOCAL]: 'Local Solana',
622
+ };
623
+ /**
624
+ * Helper class for building RPC endpoints and block explorer API URLs
625
+ */
626
+ class RpcHelpers {
627
+ /**
628
+ * Check if a chain is an EVM chain
629
+ * @param chain - Chain identifier to check
630
+ * @returns True if the chain is an EVM chain
631
+ */
632
+ static isEvmChain(chain) {
633
+ return EVM_CHAINS.has(chain);
634
+ }
635
+ /**
636
+ * Check if a chain is a Solana chain
637
+ * @param chain - Chain identifier to check
638
+ * @returns True if the chain is a Solana chain
639
+ */
640
+ static isSolanaChain(chain) {
641
+ return SOLANA_CHAINS.has(chain);
642
+ }
643
+ /**
644
+ * Get the chain type (EVM or Solana) for a given chain
645
+ * @param chain - Chain identifier
646
+ * @returns ChainType.EVM or ChainType.SOLANA
647
+ * @throws Error if the chain is not recognized
648
+ * @example
649
+ * ```typescript
650
+ * const type = RpcHelpers.getChainType(Chain.ETH_MAINNET);
651
+ * // Returns: ChainType.EVM
652
+ *
653
+ * const solanaType = RpcHelpers.getChainType(Chain.SOLANA_MAINNET);
654
+ * // Returns: ChainType.SOLANA
655
+ * ```
656
+ */
657
+ static getChainType(chain) {
658
+ if (this.isEvmChain(chain)) {
659
+ return enums_1.ChainType.EVM;
660
+ }
661
+ if (this.isSolanaChain(chain)) {
662
+ return enums_1.ChainType.SOLANA;
663
+ }
664
+ throw new Error(`Unknown chain: ${chain}`);
665
+ }
666
+ /**
667
+ * Get the chain ID for a given chain
668
+ * @param chain - Chain identifier
669
+ * @returns Numeric chain ID for EVM chains, or negative ID for Solana chains
670
+ * @throws Error if the chain is not recognized or has no chain ID
671
+ * @example
672
+ * ```typescript
673
+ * const ethChainId = RpcHelpers.getChainId(Chain.ETH_MAINNET);
674
+ * // Returns: 1
675
+ *
676
+ * const polygonChainId = RpcHelpers.getChainId(Chain.POLYGON_MAINNET);
677
+ * // Returns: 137
678
+ *
679
+ * const solanaChainId = RpcHelpers.getChainId(Chain.SOLANA_MAINNET);
680
+ * // Returns: -101
681
+ *
682
+ * const localChainId = RpcHelpers.getChainId(Chain.EVM_LOCAL);
683
+ * // Returns: 31337
684
+ * ```
685
+ */
686
+ static getChainId(chain) {
687
+ const chainId = CHAIN_ID_MAP[chain];
688
+ if (chainId === undefined) {
689
+ throw new Error(`Unknown chain: ${chain}`);
690
+ }
691
+ return chainId;
692
+ }
693
+ /**
694
+ * Get the USDC address/mint for a given chain
695
+ * @param chain - Chain identifier
696
+ * @returns USDC contract address for EVM chains, or mint address for Solana chains
697
+ * @throws Error if the chain is not recognized
698
+ * @example
699
+ * ```typescript
700
+ * const ethUSDC = RpcHelpers.getUSDCAddress(Chain.ETH_MAINNET);
701
+ * // Returns: '0xA0b86a33E6441146a8A8e27c01f0D9B1F5E42E92'
702
+ *
703
+ * const polygonUSDC = RpcHelpers.getUSDCAddress(Chain.POLYGON_MAINNET);
704
+ * // Returns: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174'
705
+ *
706
+ * const solanaUSDC = RpcHelpers.getUSDCAddress(Chain.SOLANA_MAINNET);
707
+ * // Returns: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'
708
+ * ```
709
+ */
710
+ static getUSDCAddress(chain) {
711
+ const address = USDC_ADDRESS_MAP[chain];
712
+ if (address === undefined) {
713
+ throw new Error(`Unknown chain: ${chain}`);
714
+ }
715
+ return address;
716
+ }
717
+ /**
718
+ * Get the user-friendly display name for a chain
719
+ * @param chain - Chain identifier
720
+ * @returns Human-readable chain name
721
+ * @throws Error if the chain is not recognized
722
+ * @example
723
+ * ```typescript
724
+ * const ethName = RpcHelpers.getUserFriendlyName(Chain.ETH_MAINNET);
725
+ * // Returns: 'Ethereum'
726
+ *
727
+ * const polygonName = RpcHelpers.getUserFriendlyName(Chain.POLYGON_MAINNET);
728
+ * // Returns: 'Polygon'
729
+ *
730
+ * const sepoliaName = RpcHelpers.getUserFriendlyName(Chain.ETH_SEPOLIA);
731
+ * // Returns: 'Ethereum Sepolia'
732
+ *
733
+ * const localName = RpcHelpers.getUserFriendlyName(Chain.EVM_LOCAL);
734
+ * // Returns: 'Local EVM'
735
+ * ```
736
+ */
737
+ static getUserFriendlyName(chain) {
738
+ const name = CHAIN_NAME_MAP[chain];
739
+ if (name === undefined) {
740
+ throw new Error(`Unknown chain: ${chain}`);
741
+ }
742
+ return name;
743
+ }
744
+ /**
745
+ * Get the list of visible chains for the application
746
+ * @param isDev - Whether to include development/testnet chains
747
+ * @returns Array of Chain values to display
748
+ * @example
749
+ * ```typescript
750
+ * const prodChains = RpcHelpers.getVisibleChains(false);
751
+ * // Returns: [Chain.ETH_MAINNET, Chain.BASE_MAINNET, Chain.POLYGON_MAINNET, Chain.OPTIMISM_MAINNET]
752
+ *
753
+ * const devChains = RpcHelpers.getVisibleChains(true);
754
+ * // Returns: [Chain.ETH_MAINNET, Chain.BASE_MAINNET, Chain.POLYGON_MAINNET, Chain.OPTIMISM_MAINNET, Chain.ETH_SEPOLIA]
755
+ * ```
756
+ */
757
+ static getVisibleChains(isDev) {
758
+ const mainnetChains = [
759
+ enums_1.Chain.ETH_MAINNET,
760
+ enums_1.Chain.BASE_MAINNET,
761
+ enums_1.Chain.POLYGON_MAINNET,
762
+ enums_1.Chain.OPTIMISM_MAINNET,
763
+ ];
764
+ if (isDev) {
765
+ return [...mainnetChains, enums_1.Chain.ETH_SEPOLIA];
766
+ }
767
+ return mainnetChains;
768
+ }
769
+ /**
770
+ * Derive all chain information from a ChainConfig
771
+ * @param config - Chain configuration with API keys
772
+ * @returns Object with all derived chain information
773
+ * @example
774
+ * ```typescript
775
+ * const config: ChainConfig = {
776
+ * chain: Chain.ETH_MAINNET,
777
+ * alchemyApiKey: 'your-alchemy-key',
778
+ * etherscanApiKey: 'your-etherscan-key'
779
+ * };
780
+ *
781
+ * const info = RpcHelpers.getChainInfo(config);
782
+ * // Returns: {
783
+ * // chain: Chain.ETH_MAINNET,
784
+ * // chainId: 1,
785
+ * // chainType: ChainType.EVM,
786
+ * // name: 'Ethereum',
787
+ * // rpcUrl: 'https://eth-mainnet.g.alchemy.com/v2/your-alchemy-key',
788
+ * // explorerApiUrl: 'https://api.etherscan.io/api?apikey=your-etherscan-key',
789
+ * // explorerUrl: 'https://etherscan.io',
790
+ * // usdcAddress: '0xA0b86a33E6441146a8A8e27c01f0D9B1F5E42E92'
791
+ * // }
792
+ * ```
793
+ */
794
+ static getChainInfo(config) {
795
+ return {
796
+ chain: config.chain,
797
+ chainId: this.getChainId(config.chain),
798
+ chainType: this.getChainType(config.chain),
799
+ name: this.getUserFriendlyName(config.chain),
800
+ rpcUrl: this.getRpcUrl(config.alchemyApiKey, config.chain),
801
+ explorerApiUrl: this.getExplorerApiUrl(config.etherscanApiKey, config.chain),
802
+ explorerUrl: this.getBlockExplorerUrl(config.chain),
803
+ usdcAddress: this.getUSDCAddress(config.chain),
804
+ };
805
+ }
806
+ static getRpcUrl(apiKeyOrApis, chain) {
807
+ const alchemyApiKey = typeof apiKeyOrApis === 'string'
808
+ ? apiKeyOrApis
809
+ : apiKeyOrApis.alchemyApiKey;
810
+ if (!alchemyApiKey) {
811
+ return undefined;
812
+ }
813
+ const network = ALCHEMY_NETWORK_MAP[chain];
814
+ if (!network) {
815
+ return undefined;
816
+ }
817
+ if (this.isSolanaChain(chain)) {
818
+ return `https://solana-${network}.g.alchemy.com/v2/${alchemyApiKey}`;
819
+ }
820
+ return `https://${network}.g.alchemy.com/v2/${alchemyApiKey}`;
821
+ }
822
+ static getExplorerApiUrl(apiKeyOrApis, chain) {
823
+ const etherscanApiKey = typeof apiKeyOrApis === 'string'
824
+ ? apiKeyOrApis
825
+ : apiKeyOrApis.etherscanApiKey;
826
+ if (!etherscanApiKey) {
827
+ return undefined;
828
+ }
829
+ if (this.isSolanaChain(chain)) {
830
+ return undefined;
831
+ }
832
+ const domain = EXPLORER_DOMAIN_MAP[chain];
833
+ if (!domain) {
834
+ return undefined;
835
+ }
836
+ return `https://${domain}/api?apikey=${etherscanApiKey}`;
837
+ }
838
+ /**
839
+ * Get block explorer browser URL
840
+ *
841
+ * @param chain - Chain identifier from Chain enum
842
+ * @returns Browser URL for the explorer, or undefined if no explorer available
843
+ *
844
+ * @example
845
+ * ```typescript
846
+ * const etherscanUrl = RpcHelpers.getBlockExplorerUrl(Chain.ETH_MAINNET);
847
+ * // Returns: https://etherscan.io
848
+ *
849
+ * const basescanUrl = RpcHelpers.getBlockExplorerUrl(Chain.BASE_MAINNET);
850
+ * // Returns: https://basescan.org
851
+ *
852
+ * const solanaUrl = RpcHelpers.getBlockExplorerUrl(Chain.SOLANA_MAINNET);
853
+ * // Returns: https://explorer.solana.com
854
+ * ```
855
+ */
856
+ static getBlockExplorerUrl(chain) {
857
+ const domain = EXPLORER_BROWSER_MAP[chain];
858
+ if (!domain) {
859
+ return undefined;
860
+ }
861
+ return `https://${domain}`;
862
+ }
863
+ }
864
+ exports.RpcHelpers = RpcHelpers;
865
+ //# sourceMappingURL=rpc-helpers.js.map