@shapeshiftoss/caip 8.16.4 → 8.16.5

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 (198) hide show
  1. package/dist/cjs/.tsbuildinfo +1 -0
  2. package/dist/cjs/accountId/accountId.d.ts +29 -0
  3. package/dist/cjs/accountId/accountId.js +44 -0
  4. package/dist/cjs/accountId/accountId.test.d.ts +1 -0
  5. package/dist/cjs/accountId/accountId.test.js +109 -0
  6. package/dist/cjs/adapters/banxa/index.d.ts +15 -0
  7. package/dist/cjs/adapters/banxa/index.js +153 -0
  8. package/dist/cjs/adapters/coinbase/generate.d.ts +1 -0
  9. package/dist/cjs/adapters/coinbase/generate.js +9 -0
  10. package/dist/cjs/adapters/coinbase/generated/adapter.json +153 -0
  11. package/dist/cjs/adapters/coinbase/generated/index.d.ts +2 -0
  12. package/dist/cjs/adapters/coinbase/generated/index.js +8 -0
  13. package/dist/cjs/adapters/coinbase/index.d.ts +3 -0
  14. package/dist/cjs/adapters/coinbase/index.js +16 -0
  15. package/dist/cjs/adapters/coinbase/utils.d.ts +12 -0
  16. package/dist/cjs/adapters/coinbase/utils.js +55 -0
  17. package/dist/cjs/adapters/coincap/generate.d.ts +1 -0
  18. package/dist/cjs/adapters/coincap/generate.js +10 -0
  19. package/dist/cjs/adapters/coincap/generated/bip122_000000000000000000651ef99cb9fcbe/adapter.json +1 -0
  20. package/dist/cjs/adapters/coincap/generated/bip122_000000000019d6689c085ae165831e93/adapter.json +1 -0
  21. package/dist/cjs/adapters/coincap/generated/bip122_00000000001a91e3dace36e2be3bf030/adapter.json +1 -0
  22. package/dist/cjs/adapters/coincap/generated/bip122_12a765e31ffd4059bada1e25190f6e98/adapter.json +1 -0
  23. package/dist/cjs/adapters/coincap/generated/cosmos_cosmoshub-4/adapter.json +1 -0
  24. package/dist/cjs/adapters/coincap/generated/cosmos_thorchain-1/adapter.json +1 -0
  25. package/dist/cjs/adapters/coincap/generated/eip155_1/adapter.json +1 -0
  26. package/dist/cjs/adapters/coincap/generated/eip155_10/adapter.json +1 -0
  27. package/dist/cjs/adapters/coincap/generated/eip155_137/adapter.json +1 -0
  28. package/dist/cjs/adapters/coincap/generated/eip155_42161/adapter.json +1 -0
  29. package/dist/cjs/adapters/coincap/generated/eip155_43114/adapter.json +1 -0
  30. package/dist/cjs/adapters/coincap/generated/eip155_56/adapter.json +1 -0
  31. package/dist/cjs/adapters/coincap/generated/eip155_8453/adapter.json +1 -0
  32. package/dist/cjs/adapters/coincap/generated/index.d.ts +15 -0
  33. package/dist/cjs/adapters/coincap/generated/index.js +34 -0
  34. package/dist/cjs/adapters/coincap/generated/solana_5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/adapter.json +1 -0
  35. package/dist/cjs/adapters/coincap/index.d.ts +4 -0
  36. package/dist/cjs/adapters/coincap/index.js +44 -0
  37. package/dist/cjs/adapters/coincap/index.test.d.ts +1 -0
  38. package/dist/cjs/adapters/coincap/index.test.js +90 -0
  39. package/dist/cjs/adapters/coincap/utils.d.ts +24 -0
  40. package/dist/cjs/adapters/coincap/utils.js +146 -0
  41. package/dist/cjs/adapters/coincap/utils.test.d.ts +4 -0
  42. package/dist/cjs/adapters/coincap/utils.test.js +173 -0
  43. package/dist/cjs/adapters/coingecko/generate.d.ts +1 -0
  44. package/dist/cjs/adapters/coingecko/generate.js +10 -0
  45. package/dist/cjs/adapters/coingecko/generated/bip122_000000000000000000651ef99cb9fcbe/adapter.json +1 -0
  46. package/dist/cjs/adapters/coingecko/generated/bip122_000000000019d6689c085ae165831e93/adapter.json +1 -0
  47. package/dist/cjs/adapters/coingecko/generated/bip122_00000000001a91e3dace36e2be3bf030/adapter.json +1 -0
  48. package/dist/cjs/adapters/coingecko/generated/bip122_12a765e31ffd4059bada1e25190f6e98/adapter.json +1 -0
  49. package/dist/cjs/adapters/coingecko/generated/cosmos_cosmoshub-4/adapter.json +1 -0
  50. package/dist/cjs/adapters/coingecko/generated/cosmos_mayachain-mainnet-v1/adapter.json +1 -0
  51. package/dist/cjs/adapters/coingecko/generated/cosmos_thorchain-1/adapter.json +1 -0
  52. package/dist/cjs/adapters/coingecko/generated/eip155_1/adapter.json +1 -0
  53. package/dist/cjs/adapters/coingecko/generated/eip155_10/adapter.json +1 -0
  54. package/dist/cjs/adapters/coingecko/generated/eip155_100/adapter.json +1 -0
  55. package/dist/cjs/adapters/coingecko/generated/eip155_137/adapter.json +1 -0
  56. package/dist/cjs/adapters/coingecko/generated/eip155_143/adapter.json +1 -0
  57. package/dist/cjs/adapters/coingecko/generated/eip155_42161/adapter.json +1 -0
  58. package/dist/cjs/adapters/coingecko/generated/eip155_42170/adapter.json +1 -0
  59. package/dist/cjs/adapters/coingecko/generated/eip155_43114/adapter.json +1 -0
  60. package/dist/cjs/adapters/coingecko/generated/eip155_56/adapter.json +1 -0
  61. package/dist/cjs/adapters/coingecko/generated/eip155_8453/adapter.json +1 -0
  62. package/dist/cjs/adapters/coingecko/generated/index.d.ts +21 -0
  63. package/dist/cjs/adapters/coingecko/generated/index.js +46 -0
  64. package/dist/cjs/adapters/coingecko/generated/solana_5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/adapter.json +1 -0
  65. package/dist/cjs/adapters/coingecko/generated/sui_35834a8a/adapter.json +1 -0
  66. package/dist/cjs/adapters/coingecko/generated/tron_0x2b6653dc/adapter.json +1 -0
  67. package/dist/cjs/adapters/coingecko/index.d.ts +29 -0
  68. package/dist/cjs/adapters/coingecko/index.js +188 -0
  69. package/dist/cjs/adapters/coingecko/index.test.d.ts +1 -0
  70. package/dist/cjs/adapters/coingecko/index.test.js +297 -0
  71. package/dist/cjs/adapters/coingecko/utils.d.ts +11 -0
  72. package/dist/cjs/adapters/coingecko/utils.js +235 -0
  73. package/dist/cjs/adapters/coingecko/utils.test.d.ts +1 -0
  74. package/dist/cjs/adapters/coingecko/utils.test.js +202 -0
  75. package/dist/cjs/adapters/index.d.ts +6 -0
  76. package/dist/cjs/adapters/index.js +22 -0
  77. package/dist/cjs/adapters/mtpelerin/index.d.ts +10 -0
  78. package/dist/cjs/adapters/mtpelerin/index.js +127 -0
  79. package/dist/cjs/adapters/onramper/index.d.ts +6 -0
  80. package/dist/cjs/adapters/onramper/index.js +39 -0
  81. package/dist/cjs/assetId/assetId.d.ts +36 -0
  82. package/dist/cjs/assetId/assetId.js +120 -0
  83. package/dist/cjs/assetId/assetId.test.d.ts +1 -0
  84. package/dist/cjs/assetId/assetId.test.js +324 -0
  85. package/dist/cjs/chainId/chainId.d.ts +20 -0
  86. package/dist/cjs/chainId/chainId.js +25 -0
  87. package/dist/cjs/chainId/chainId.test.d.ts +1 -0
  88. package/dist/cjs/chainId/chainId.test.js +90 -0
  89. package/dist/cjs/constants.d.ts +135 -0
  90. package/dist/cjs/constants.js +192 -0
  91. package/dist/cjs/index.d.ts +7 -0
  92. package/dist/cjs/index.js +36 -0
  93. package/dist/cjs/package.json +1 -0
  94. package/dist/cjs/typeGuards.d.ts +16 -0
  95. package/dist/cjs/typeGuards.js +56 -0
  96. package/dist/cjs/utils.d.ts +33 -0
  97. package/dist/cjs/utils.js +56 -0
  98. package/dist/cjs/utils.test.d.ts +1 -0
  99. package/dist/cjs/utils.test.js +160 -0
  100. package/dist/esm/.tsbuildinfo +1 -0
  101. package/dist/esm/accountId/accountId.d.ts +29 -0
  102. package/dist/esm/accountId/accountId.js +39 -0
  103. package/dist/esm/accountId/accountId.test.d.ts +1 -0
  104. package/dist/esm/accountId/accountId.test.js +107 -0
  105. package/dist/esm/adapters/banxa/index.d.ts +15 -0
  106. package/dist/esm/adapters/banxa/index.js +143 -0
  107. package/dist/esm/adapters/coinbase/generate.d.ts +1 -0
  108. package/dist/esm/adapters/coinbase/generate.js +7 -0
  109. package/dist/esm/adapters/coinbase/generated/adapter.json +153 -0
  110. package/dist/esm/adapters/coinbase/generated/index.d.ts +2 -0
  111. package/dist/esm/adapters/coinbase/generated/index.js +2 -0
  112. package/dist/esm/adapters/coinbase/index.d.ts +3 -0
  113. package/dist/esm/adapters/coinbase/index.js +8 -0
  114. package/dist/esm/adapters/coinbase/utils.d.ts +12 -0
  115. package/dist/esm/adapters/coinbase/utils.js +46 -0
  116. package/dist/esm/adapters/coincap/generate.d.ts +1 -0
  117. package/dist/esm/adapters/coincap/generate.js +8 -0
  118. package/dist/esm/adapters/coincap/generated/bip122_000000000000000000651ef99cb9fcbe/adapter.json +1 -0
  119. package/dist/esm/adapters/coincap/generated/bip122_000000000019d6689c085ae165831e93/adapter.json +1 -0
  120. package/dist/esm/adapters/coincap/generated/bip122_00000000001a91e3dace36e2be3bf030/adapter.json +1 -0
  121. package/dist/esm/adapters/coincap/generated/bip122_12a765e31ffd4059bada1e25190f6e98/adapter.json +1 -0
  122. package/dist/esm/adapters/coincap/generated/cosmos_cosmoshub-4/adapter.json +1 -0
  123. package/dist/esm/adapters/coincap/generated/cosmos_thorchain-1/adapter.json +1 -0
  124. package/dist/esm/adapters/coincap/generated/eip155_1/adapter.json +1 -0
  125. package/dist/esm/adapters/coincap/generated/eip155_10/adapter.json +1 -0
  126. package/dist/esm/adapters/coincap/generated/eip155_137/adapter.json +1 -0
  127. package/dist/esm/adapters/coincap/generated/eip155_42161/adapter.json +1 -0
  128. package/dist/esm/adapters/coincap/generated/eip155_43114/adapter.json +1 -0
  129. package/dist/esm/adapters/coincap/generated/eip155_56/adapter.json +1 -0
  130. package/dist/esm/adapters/coincap/generated/eip155_8453/adapter.json +1 -0
  131. package/dist/esm/adapters/coincap/generated/index.d.ts +15 -0
  132. package/dist/esm/adapters/coincap/generated/index.js +15 -0
  133. package/dist/esm/adapters/coincap/generated/solana_5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/adapter.json +1 -0
  134. package/dist/esm/adapters/coincap/index.d.ts +4 -0
  135. package/dist/esm/adapters/coincap/index.js +13 -0
  136. package/dist/esm/adapters/coincap/index.test.d.ts +1 -0
  137. package/dist/esm/adapters/coincap/index.test.js +88 -0
  138. package/dist/esm/adapters/coincap/utils.d.ts +24 -0
  139. package/dist/esm/adapters/coincap/utils.js +135 -0
  140. package/dist/esm/adapters/coincap/utils.test.d.ts +4 -0
  141. package/dist/esm/adapters/coincap/utils.test.js +168 -0
  142. package/dist/esm/adapters/coingecko/generate.d.ts +1 -0
  143. package/dist/esm/adapters/coingecko/generate.js +8 -0
  144. package/dist/esm/adapters/coingecko/generated/bip122_000000000000000000651ef99cb9fcbe/adapter.json +1 -0
  145. package/dist/esm/adapters/coingecko/generated/bip122_000000000019d6689c085ae165831e93/adapter.json +1 -0
  146. package/dist/esm/adapters/coingecko/generated/bip122_00000000001a91e3dace36e2be3bf030/adapter.json +1 -0
  147. package/dist/esm/adapters/coingecko/generated/bip122_12a765e31ffd4059bada1e25190f6e98/adapter.json +1 -0
  148. package/dist/esm/adapters/coingecko/generated/cosmos_cosmoshub-4/adapter.json +1 -0
  149. package/dist/esm/adapters/coingecko/generated/cosmos_mayachain-mainnet-v1/adapter.json +1 -0
  150. package/dist/esm/adapters/coingecko/generated/cosmos_thorchain-1/adapter.json +1 -0
  151. package/dist/esm/adapters/coingecko/generated/eip155_1/adapter.json +1 -0
  152. package/dist/esm/adapters/coingecko/generated/eip155_10/adapter.json +1 -0
  153. package/dist/esm/adapters/coingecko/generated/eip155_100/adapter.json +1 -0
  154. package/dist/esm/adapters/coingecko/generated/eip155_137/adapter.json +1 -0
  155. package/dist/esm/adapters/coingecko/generated/eip155_143/adapter.json +1 -0
  156. package/dist/esm/adapters/coingecko/generated/eip155_42161/adapter.json +1 -0
  157. package/dist/esm/adapters/coingecko/generated/eip155_42170/adapter.json +1 -0
  158. package/dist/esm/adapters/coingecko/generated/eip155_43114/adapter.json +1 -0
  159. package/dist/esm/adapters/coingecko/generated/eip155_56/adapter.json +1 -0
  160. package/dist/esm/adapters/coingecko/generated/eip155_8453/adapter.json +1 -0
  161. package/dist/esm/adapters/coingecko/generated/index.d.ts +21 -0
  162. package/dist/esm/adapters/coingecko/generated/index.js +21 -0
  163. package/dist/esm/adapters/coingecko/generated/solana_5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/adapter.json +1 -0
  164. package/dist/esm/adapters/coingecko/generated/sui_35834a8a/adapter.json +1 -0
  165. package/dist/esm/adapters/coingecko/generated/tron_0x2b6653dc/adapter.json +1 -0
  166. package/dist/esm/adapters/coingecko/index.d.ts +29 -0
  167. package/dist/esm/adapters/coingecko/index.js +152 -0
  168. package/dist/esm/adapters/coingecko/index.test.d.ts +1 -0
  169. package/dist/esm/adapters/coingecko/index.test.js +295 -0
  170. package/dist/esm/adapters/coingecko/utils.d.ts +11 -0
  171. package/dist/esm/adapters/coingecko/utils.js +226 -0
  172. package/dist/esm/adapters/coingecko/utils.test.d.ts +1 -0
  173. package/dist/esm/adapters/coingecko/utils.test.js +197 -0
  174. package/dist/esm/adapters/index.d.ts +6 -0
  175. package/dist/esm/adapters/index.js +6 -0
  176. package/dist/esm/adapters/mtpelerin/index.d.ts +10 -0
  177. package/dist/esm/adapters/mtpelerin/index.js +121 -0
  178. package/dist/esm/adapters/onramper/index.d.ts +6 -0
  179. package/dist/esm/adapters/onramper/index.js +31 -0
  180. package/dist/esm/assetId/assetId.d.ts +36 -0
  181. package/dist/esm/assetId/assetId.js +114 -0
  182. package/dist/esm/assetId/assetId.test.d.ts +1 -0
  183. package/dist/esm/assetId/assetId.test.js +322 -0
  184. package/dist/esm/chainId/chainId.d.ts +20 -0
  185. package/dist/esm/chainId/chainId.js +20 -0
  186. package/dist/esm/chainId/chainId.test.d.ts +1 -0
  187. package/dist/esm/chainId/chainId.test.js +88 -0
  188. package/dist/esm/constants.d.ts +135 -0
  189. package/dist/esm/constants.js +188 -0
  190. package/dist/esm/index.d.ts +7 -0
  191. package/dist/esm/index.js +7 -0
  192. package/dist/esm/typeGuards.d.ts +16 -0
  193. package/dist/esm/typeGuards.js +44 -0
  194. package/dist/esm/utils.d.ts +33 -0
  195. package/dist/esm/utils.js +26 -0
  196. package/dist/esm/utils.test.d.ts +1 -0
  197. package/dist/esm/utils.test.js +158 -0
  198. package/package.json +1 -1
@@ -0,0 +1,135 @@
1
+ import axios from 'axios';
2
+ import fs from 'fs';
3
+ import { toAssetId } from '../../assetId/assetId.js';
4
+ import { arbitrumChainId, ASSET_REFERENCE, avalancheChainId, baseChainId, bchChainId, bscChainId, btcChainId, CHAIN_NAMESPACE, CHAIN_REFERENCE, cosmosChainId, dogeChainId, ethAssetId, ethChainId, ltcChainId, optimismChainId, polygonChainId, solanaChainId, thorchainChainId, } from '../../constants.js';
5
+ import { bitcoinAssetMap, bitcoinCashAssetMap, cosmosAssetMap, dogecoinAssetMap, litecoinAssetMap, thorchainAssetMap, } from '../../utils.js';
6
+ const COINCAP_CHAIN_REFERENCE = { ...CHAIN_REFERENCE, SolanaMainnet: '101' };
7
+ // Chain ID to CoinCap network ID mapping
8
+ const COINCAP_CHAIN_MAP = {
9
+ [COINCAP_CHAIN_REFERENCE.EthereumMainnet]: {
10
+ chainId: ethChainId,
11
+ assetNamespace: 'erc20',
12
+ },
13
+ [COINCAP_CHAIN_REFERENCE.OptimismMainnet]: {
14
+ chainId: optimismChainId,
15
+ assetNamespace: 'erc20',
16
+ },
17
+ [COINCAP_CHAIN_REFERENCE.BnbSmartChainMainnet]: {
18
+ chainId: bscChainId,
19
+ assetNamespace: 'erc20',
20
+ },
21
+ [COINCAP_CHAIN_REFERENCE.SolanaMainnet]: {
22
+ chainId: solanaChainId,
23
+ assetNamespace: 'token',
24
+ },
25
+ [COINCAP_CHAIN_REFERENCE.PolygonMainnet]: {
26
+ chainId: polygonChainId,
27
+ assetNamespace: 'erc20',
28
+ },
29
+ [COINCAP_CHAIN_REFERENCE.BaseMainnet]: {
30
+ chainId: baseChainId,
31
+ assetNamespace: 'erc20',
32
+ },
33
+ [COINCAP_CHAIN_REFERENCE.ArbitrumMainnet]: {
34
+ chainId: arbitrumChainId,
35
+ assetNamespace: 'erc20',
36
+ },
37
+ [COINCAP_CHAIN_REFERENCE.AvalancheCChain]: {
38
+ chainId: avalancheChainId,
39
+ assetNamespace: 'erc20',
40
+ },
41
+ };
42
+ export const writeFiles = async (data) => {
43
+ const path = './src/adapters/coincap/generated/';
44
+ const file = '/adapter.json';
45
+ const writeFile = async ([k, v]) => await fs.promises.writeFile(`${path}${k}${file}`.replace(':', '_'), JSON.stringify(v));
46
+ await Promise.all(Object.entries(data).map(writeFile));
47
+ console.info('Generated CoinCap AssetId adapter data.');
48
+ };
49
+ export const fetchData = async (URL) => (await axios.get(URL)).data.data;
50
+ export const parseEthData = (data) => {
51
+ const ethCoins = data.filter(({ id, explorer }) => (explorer && explorer.startsWith('https://etherscan.io/token/0x')) || id === 'ethereum');
52
+ const ethAssetMap = ethCoins.reduce((acc, { id, explorer }) => {
53
+ const chainNamespace = CHAIN_NAMESPACE.Evm;
54
+ const chainReference = CHAIN_REFERENCE.EthereumMainnet;
55
+ let assetReference = ASSET_REFERENCE.Ethereum;
56
+ const assetNamespace = id === 'ethereum' ? 'slip44' : 'erc20';
57
+ if (id !== 'ethereum' && explorer) {
58
+ assetReference = explorer
59
+ .replace('https://etherscan.io/token/', '')
60
+ .split('#')[0]
61
+ .split('?')[0];
62
+ }
63
+ const assetId = toAssetId({ chainNamespace, chainReference, assetNamespace, assetReference });
64
+ acc[assetId] = id;
65
+ return acc;
66
+ }, {});
67
+ data.forEach(({ id, tokens }) => {
68
+ if (tokens[COINCAP_CHAIN_REFERENCE.EthereumMainnet] &&
69
+ tokens[COINCAP_CHAIN_REFERENCE.EthereumMainnet].length > 0) {
70
+ // Use first address for Ethereum chain
71
+ const address = tokens[COINCAP_CHAIN_REFERENCE.EthereumMainnet][0];
72
+ try {
73
+ const assetId = toAssetId({
74
+ chainNamespace: CHAIN_NAMESPACE.Evm,
75
+ chainReference: CHAIN_REFERENCE.EthereumMainnet,
76
+ assetNamespace: 'erc20',
77
+ assetReference: address,
78
+ });
79
+ ethAssetMap[assetId] = id;
80
+ }
81
+ catch {
82
+ // Skip invalid addresses
83
+ }
84
+ }
85
+ });
86
+ // This isn't in there for some reason, add it manually
87
+ ethAssetMap[ethAssetId] = 'ethereum';
88
+ return ethAssetMap;
89
+ };
90
+ export const parseMultiChainTokens = (data) => {
91
+ const chainMaps = {};
92
+ // Initialize chain maps
93
+ Object.values(COINCAP_CHAIN_MAP).forEach(({ chainId }) => {
94
+ chainMaps[chainId] = {};
95
+ });
96
+ data.forEach(({ id, tokens }) => {
97
+ Object.entries(tokens).forEach(([chainNumber, addresses]) => {
98
+ const chainInfo = COINCAP_CHAIN_MAP[chainNumber];
99
+ if (!chainInfo || !addresses.length)
100
+ return;
101
+ const { chainId, assetNamespace } = chainInfo;
102
+ const address = addresses[0];
103
+ try {
104
+ const assetId = toAssetId({
105
+ chainId,
106
+ assetNamespace,
107
+ assetReference: address,
108
+ });
109
+ chainMaps[chainId][assetId] = id;
110
+ }
111
+ catch {
112
+ // Skip invalid addresses
113
+ }
114
+ });
115
+ });
116
+ return chainMaps;
117
+ };
118
+ export const parseData = (d) => {
119
+ const result = {
120
+ [ethChainId]: parseEthData(d),
121
+ [btcChainId]: bitcoinAssetMap,
122
+ [bchChainId]: bitcoinCashAssetMap,
123
+ [dogeChainId]: dogecoinAssetMap,
124
+ [ltcChainId]: litecoinAssetMap,
125
+ [cosmosChainId]: cosmosAssetMap,
126
+ [thorchainChainId]: thorchainAssetMap,
127
+ };
128
+ const multiChainTokens = parseMultiChainTokens(d);
129
+ Object.entries(multiChainTokens).forEach(([chainId, tokens]) => {
130
+ if (Object.keys(tokens).length > 0) {
131
+ result[chainId] = { ...result[chainId], ...tokens };
132
+ }
133
+ });
134
+ return result;
135
+ };
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @vitest-environment node
3
+ */
4
+ export {};
@@ -0,0 +1,168 @@
1
+ /**
2
+ * @vitest-environment node
3
+ */
4
+ import realFs from 'fs';
5
+ import { describe, expect, it, vi } from 'vitest';
6
+ import { bitcoinAssetMap, cosmosAssetMap } from '../../utils.js';
7
+ import { parseData, parseEthData, writeFiles } from './utils.js';
8
+ const makeEthMockCoincapResponse = () => ({
9
+ id: 'ethereum',
10
+ rank: '2',
11
+ symbol: 'ETH',
12
+ name: 'Ethereum',
13
+ supply: '118739782.1240000000000000',
14
+ maxSupply: null,
15
+ marketCapUsd: '461557096820.5397856216327206',
16
+ volumeUsd24Hr: '13216473429.9114945699035335',
17
+ priceUsd: '3887.1310740534754598',
18
+ changePercent24Hr: '1.7301970732523704',
19
+ vwap24Hr: '3796.0013297212388563',
20
+ explorer: 'https://etherscan.io/',
21
+ tokens: {},
22
+ });
23
+ const makeFoxMockCoincapResponse = () => ({
24
+ id: 'fox-token',
25
+ rank: '396',
26
+ symbol: 'FOX',
27
+ name: 'FOX Token',
28
+ supply: '117022448.6044180000000000',
29
+ maxSupply: '1000001337.0000000000000000',
30
+ marketCapUsd: '76108238.1995641297877127',
31
+ volumeUsd24Hr: '1574012.7599955363585018',
32
+ priceUsd: '0.6503729763580659',
33
+ changePercent24Hr: '-3.1066427856364231',
34
+ vwap24Hr: '0.6546275575306273',
35
+ explorer: 'https://etherscan.io/token/0xc770eefad204b5180df6a14ee197d99d808ee52d',
36
+ tokens: {},
37
+ });
38
+ const makeBtcMockCoincapResponse = () => ({
39
+ id: 'bitcoin',
40
+ rank: '1',
41
+ symbol: 'BTC',
42
+ name: 'Bitcoin',
43
+ supply: '18901193.0000000000000000',
44
+ maxSupply: '21000000.0000000000000000',
45
+ marketCapUsd: '908356345541.2269154394485668',
46
+ volumeUsd24Hr: '19001957914.4173604708767279',
47
+ priceUsd: '48058.1487920485715076',
48
+ changePercent24Hr: '2.0370678507913180',
49
+ vwap24Hr: '47473.8260811456834087',
50
+ explorer: 'https://blockchain.info/',
51
+ tokens: {},
52
+ });
53
+ const makeThorchainMockCoincapResponse = () => ({
54
+ id: 'thorchain',
55
+ rank: '65',
56
+ symbol: 'RUNE',
57
+ name: 'THORChain',
58
+ supply: '330688061.3344559700000000',
59
+ maxSupply: '500000000.0000000000000000',
60
+ marketCapUsd: '657476102.4209547026470565',
61
+ volumeUsd24Hr: '62707742.6988409953177376',
62
+ priceUsd: '1.9882063469959601',
63
+ changePercent24Hr: '-3.0298851309669810',
64
+ vwap24Hr: '2.0280215210735477',
65
+ explorer: 'https://explorer.binance.org/asset/RUNE-B1A',
66
+ tokens: {},
67
+ });
68
+ const makeCosmosMockCoincapResponse = () => ({
69
+ id: 'cosmos',
70
+ rank: '24',
71
+ symbol: 'ATOM',
72
+ name: 'Cosmos',
73
+ supply: '248453201.0000000000000000',
74
+ maxSupply: null,
75
+ marketCapUsd: '6802617738.3591834303735576',
76
+ volumeUsd24Hr: '294469112.0045679597220454',
77
+ priceUsd: '27.3798756102932376',
78
+ changePercent24Hr: '-2.0945235735481851',
79
+ vwap24Hr: '27.4571410501515669',
80
+ explorer: 'https://www.mintscan.io/cosmos',
81
+ tokens: {},
82
+ });
83
+ vi.mock('fs', () => ({
84
+ default: {
85
+ promises: {
86
+ writeFile: vi.fn(() => undefined),
87
+ },
88
+ },
89
+ }));
90
+ describe('adapters:coincap:utils', () => {
91
+ describe('parseEthData', () => {
92
+ it('can parse eth data', () => {
93
+ const result = parseEthData([makeEthMockCoincapResponse(), makeFoxMockCoincapResponse()]);
94
+ const expected = {
95
+ 'eip155:1/slip44:60': 'ethereum',
96
+ 'eip155:1/erc20:0xc770eefad204b5180df6a14ee197d99d808ee52d': 'fox-token',
97
+ };
98
+ expect(result).toEqual(expected);
99
+ });
100
+ it('can parse btc data', () => {
101
+ const result = bitcoinAssetMap;
102
+ const expected = { 'bip122:000000000019d6689c085ae165831e93/slip44:0': 'bitcoin' };
103
+ expect(result).toEqual(expected);
104
+ });
105
+ it('can parse cosmos data', () => {
106
+ const result = cosmosAssetMap;
107
+ const expected = { 'cosmos:cosmoshub-4/slip44:118': 'cosmos' };
108
+ expect(result).toEqual(expected);
109
+ });
110
+ });
111
+ describe('parseData', () => {
112
+ it('can parse all data', () => {
113
+ const result = parseData([
114
+ makeEthMockCoincapResponse(),
115
+ makeFoxMockCoincapResponse(),
116
+ makeBtcMockCoincapResponse(),
117
+ makeCosmosMockCoincapResponse(),
118
+ makeThorchainMockCoincapResponse(),
119
+ ]);
120
+ const expected = {
121
+ 'bip122:000000000019d6689c085ae165831e93': {
122
+ 'bip122:000000000019d6689c085ae165831e93/slip44:0': 'bitcoin',
123
+ },
124
+ 'bip122:000000000000000000651ef99cb9fcbe': {
125
+ 'bip122:000000000000000000651ef99cb9fcbe/slip44:145': 'bitcoin-cash',
126
+ },
127
+ 'bip122:00000000001a91e3dace36e2be3bf030': {
128
+ 'bip122:00000000001a91e3dace36e2be3bf030/slip44:3': 'dogecoin',
129
+ },
130
+ 'bip122:12a765e31ffd4059bada1e25190f6e98': {
131
+ 'bip122:12a765e31ffd4059bada1e25190f6e98/slip44:2': 'litecoin',
132
+ },
133
+ 'cosmos:cosmoshub-4': {
134
+ 'cosmos:cosmoshub-4/slip44:118': 'cosmos',
135
+ },
136
+ 'cosmos:thorchain-1': {
137
+ 'cosmos:thorchain-1/slip44:931': 'thorchain',
138
+ },
139
+ 'eip155:1': {
140
+ 'eip155:1/slip44:60': 'ethereum',
141
+ 'eip155:1/erc20:0xc770eefad204b5180df6a14ee197d99d808ee52d': 'fox-token',
142
+ },
143
+ };
144
+ expect(result).toEqual(expected);
145
+ });
146
+ });
147
+ describe('writeFiles', () => {
148
+ it('can writeFiles', async () => {
149
+ const data = {
150
+ foo: {
151
+ assetIdAbc: 'bitcorn',
152
+ assetIdDef: 'efferium',
153
+ },
154
+ bar: {
155
+ assetIdGhi: 'fox',
156
+ assetIdJkl: 'shib',
157
+ },
158
+ };
159
+ const fooAssetIds = JSON.stringify(data.foo);
160
+ const barAssetIds = JSON.stringify(data.bar);
161
+ console.info = vi.fn();
162
+ await writeFiles(data);
163
+ expect(realFs.promises.writeFile).toBeCalledWith('./src/adapters/coincap/generated/foo/adapter.json', fooAssetIds);
164
+ expect(realFs.promises.writeFile).toBeCalledWith('./src/adapters/coincap/generated/bar/adapter.json', barAssetIds);
165
+ expect(console.info).toBeCalledWith('Generated CoinCap AssetId adapter data.');
166
+ });
167
+ });
168
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ import { coingeckoUrl } from './index.js';
2
+ import { fetchData, parseData, writeFiles } from './utils.js';
3
+ const main = async () => {
4
+ const data = await fetchData(coingeckoUrl);
5
+ const output = parseData(data);
6
+ await writeFiles(output);
7
+ };
8
+ main();
@@ -0,0 +1 @@
1
+ { "bip122:000000000000000000651ef99cb9fcbe/slip44:145": "bitcoin-cash" }
@@ -0,0 +1 @@
1
+ { "bip122:000000000019d6689c085ae165831e93/slip44:0": "bitcoin" }
@@ -0,0 +1 @@
1
+ { "bip122:00000000001a91e3dace36e2be3bf030/slip44:3": "dogecoin" }
@@ -0,0 +1 @@
1
+ { "bip122:12a765e31ffd4059bada1e25190f6e98/slip44:2": "litecoin" }
@@ -0,0 +1 @@
1
+ { "cosmos:cosmoshub-4/slip44:118": "cosmos" }
@@ -0,0 +1 @@
1
+ { "cosmos:mayachain-mainnet-v1/slip44:931": "cacao" }
@@ -0,0 +1 @@
1
+ { "cosmos:thorchain-1/slip44:931": "thorchain" }