@shapeshiftoss/utils 1.0.3 → 1.0.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 (136) hide show
  1. package/dist/cjs/.tsbuildinfo +1 -0
  2. package/dist/cjs/assertUnreachable.d.ts +1 -0
  3. package/dist/cjs/assertUnreachable.js +7 -0
  4. package/dist/cjs/assetData/assetData.test.d.ts +1 -0
  5. package/dist/cjs/assetData/assetData.test.js +136 -0
  6. package/dist/cjs/assetData/baseAssets.d.ts +30 -0
  7. package/dist/cjs/assetData/baseAssets.js +458 -0
  8. package/dist/cjs/assetData/constants.d.ts +1 -0
  9. package/dist/cjs/assetData/constants.js +13 -0
  10. package/dist/cjs/assetData/decodeAssetData.d.ts +7 -0
  11. package/dist/cjs/assetData/decodeAssetData.js +106 -0
  12. package/dist/cjs/assetData/decodeRelatedAssetIndex.d.ts +3 -0
  13. package/dist/cjs/assetData/decodeRelatedAssetIndex.js +14 -0
  14. package/dist/cjs/assetData/encodeAssetData.d.ts +4 -0
  15. package/dist/cjs/assetData/encodeAssetData.js +72 -0
  16. package/dist/cjs/assetData/encodeRelatedAssetIndex.d.ts +3 -0
  17. package/dist/cjs/assetData/encodeRelatedAssetIndex.js +20 -0
  18. package/dist/cjs/assetData/getBaseAsset.d.ts +3 -0
  19. package/dist/cjs/assetData/getBaseAsset.js +66 -0
  20. package/dist/cjs/assetData/index.d.ts +7 -0
  21. package/dist/cjs/assetData/index.js +23 -0
  22. package/dist/cjs/assetData/relatedAssetIndex.test.d.ts +1 -0
  23. package/dist/cjs/assetData/relatedAssetIndex.test.js +32 -0
  24. package/dist/cjs/assetData/types.d.ts +28 -0
  25. package/dist/cjs/assetData/types.js +2 -0
  26. package/dist/cjs/baseUnits/baseUnits.d.ts +5 -0
  27. package/dist/cjs/baseUnits/baseUnits.js +32 -0
  28. package/dist/cjs/baseUnits/baseUnits.test.d.ts +1 -0
  29. package/dist/cjs/baseUnits/baseUnits.test.js +32 -0
  30. package/dist/cjs/basisPoints.d.ts +23 -0
  31. package/dist/cjs/basisPoints.js +48 -0
  32. package/dist/cjs/bignumber/bignumber.d.ts +11 -0
  33. package/dist/cjs/bignumber/bignumber.js +27 -0
  34. package/dist/cjs/bignumber/bignumber.test.d.ts +1 -0
  35. package/dist/cjs/bignumber/bignumber.test.js +52 -0
  36. package/dist/cjs/chainIdToFeeAsset.d.ts +3 -0
  37. package/dist/cjs/chainIdToFeeAsset.js +9 -0
  38. package/dist/cjs/chainIdToFeeAssetId.d.ts +2 -0
  39. package/dist/cjs/chainIdToFeeAssetId.js +66 -0
  40. package/dist/cjs/createThrottle.d.ts +9 -0
  41. package/dist/cjs/createThrottle.js +36 -0
  42. package/dist/cjs/getAssetNamespaceFromChainId.d.ts +3 -0
  43. package/dist/cjs/getAssetNamespaceFromChainId.js +46 -0
  44. package/dist/cjs/getChainShortName.d.ts +2 -0
  45. package/dist/cjs/getChainShortName.js +65 -0
  46. package/dist/cjs/getNativeFeeAssetReference.d.ts +2 -0
  47. package/dist/cjs/getNativeFeeAssetReference.js +105 -0
  48. package/dist/cjs/historyTimeframe.d.ts +6 -0
  49. package/dist/cjs/historyTimeframe.js +36 -0
  50. package/dist/cjs/index.d.ts +24 -0
  51. package/dist/cjs/index.js +62 -0
  52. package/dist/cjs/makeAsset/makeAsset.d.ts +10 -0
  53. package/dist/cjs/makeAsset/makeAsset.js +45 -0
  54. package/dist/cjs/makeAsset/makeAsset.test.d.ts +1 -0
  55. package/dist/cjs/makeAsset/makeAsset.test.js +47 -0
  56. package/dist/cjs/package.json +1 -0
  57. package/dist/cjs/promises.d.ts +4 -0
  58. package/dist/cjs/promises.js +9 -0
  59. package/dist/cjs/sha256.d.ts +1 -0
  60. package/dist/cjs/sha256.js +9 -0
  61. package/dist/cjs/timeout.d.ts +7 -0
  62. package/dist/cjs/timeout.js +34 -0
  63. package/dist/cjs/treasury.d.ts +17 -0
  64. package/dist/cjs/treasury.js +36 -0
  65. package/dist/cjs/unfreeze.d.ts +4 -0
  66. package/dist/cjs/unfreeze.js +10 -0
  67. package/dist/cjs/utxo.d.ts +2 -0
  68. package/dist/cjs/utxo.js +6 -0
  69. package/dist/esm/.tsbuildinfo +1 -0
  70. package/dist/esm/assertUnreachable.d.ts +1 -0
  71. package/dist/esm/assertUnreachable.js +3 -0
  72. package/dist/esm/assetData/assetData.test.d.ts +1 -0
  73. package/dist/esm/assetData/assetData.test.js +134 -0
  74. package/dist/esm/assetData/baseAssets.d.ts +30 -0
  75. package/dist/esm/assetData/baseAssets.js +432 -0
  76. package/dist/esm/assetData/constants.d.ts +1 -0
  77. package/dist/esm/assetData/constants.js +10 -0
  78. package/dist/esm/assetData/decodeAssetData.d.ts +7 -0
  79. package/dist/esm/assetData/decodeAssetData.js +102 -0
  80. package/dist/esm/assetData/decodeRelatedAssetIndex.d.ts +3 -0
  81. package/dist/esm/assetData/decodeRelatedAssetIndex.js +10 -0
  82. package/dist/esm/assetData/encodeAssetData.d.ts +4 -0
  83. package/dist/esm/assetData/encodeAssetData.js +68 -0
  84. package/dist/esm/assetData/encodeRelatedAssetIndex.d.ts +3 -0
  85. package/dist/esm/assetData/encodeRelatedAssetIndex.js +16 -0
  86. package/dist/esm/assetData/getBaseAsset.d.ts +3 -0
  87. package/dist/esm/assetData/getBaseAsset.js +62 -0
  88. package/dist/esm/assetData/index.d.ts +7 -0
  89. package/dist/esm/assetData/index.js +7 -0
  90. package/dist/esm/assetData/relatedAssetIndex.test.d.ts +1 -0
  91. package/dist/esm/assetData/relatedAssetIndex.test.js +30 -0
  92. package/dist/esm/assetData/types.d.ts +28 -0
  93. package/dist/esm/assetData/types.js +1 -0
  94. package/dist/esm/baseUnits/baseUnits.d.ts +5 -0
  95. package/dist/esm/baseUnits/baseUnits.js +23 -0
  96. package/dist/esm/baseUnits/baseUnits.test.d.ts +1 -0
  97. package/dist/esm/baseUnits/baseUnits.test.js +30 -0
  98. package/dist/esm/basisPoints.d.ts +23 -0
  99. package/dist/esm/basisPoints.js +39 -0
  100. package/dist/esm/bignumber/bignumber.d.ts +11 -0
  101. package/dist/esm/bignumber/bignumber.js +16 -0
  102. package/dist/esm/bignumber/bignumber.test.d.ts +1 -0
  103. package/dist/esm/bignumber/bignumber.test.js +50 -0
  104. package/dist/esm/chainIdToFeeAsset.d.ts +3 -0
  105. package/dist/esm/chainIdToFeeAsset.js +5 -0
  106. package/dist/esm/chainIdToFeeAssetId.d.ts +2 -0
  107. package/dist/esm/chainIdToFeeAssetId.js +62 -0
  108. package/dist/esm/createThrottle.d.ts +9 -0
  109. package/dist/esm/createThrottle.js +32 -0
  110. package/dist/esm/getAssetNamespaceFromChainId.d.ts +3 -0
  111. package/dist/esm/getAssetNamespaceFromChainId.js +42 -0
  112. package/dist/esm/getChainShortName.d.ts +2 -0
  113. package/dist/esm/getChainShortName.js +61 -0
  114. package/dist/esm/getNativeFeeAssetReference.d.ts +2 -0
  115. package/dist/esm/getNativeFeeAssetReference.js +101 -0
  116. package/dist/esm/historyTimeframe.d.ts +6 -0
  117. package/dist/esm/historyTimeframe.js +29 -0
  118. package/dist/esm/index.d.ts +24 -0
  119. package/dist/esm/index.js +41 -0
  120. package/dist/esm/makeAsset/makeAsset.d.ts +10 -0
  121. package/dist/esm/makeAsset/makeAsset.js +41 -0
  122. package/dist/esm/makeAsset/makeAsset.test.d.ts +1 -0
  123. package/dist/esm/makeAsset/makeAsset.test.js +45 -0
  124. package/dist/esm/promises.d.ts +4 -0
  125. package/dist/esm/promises.js +3 -0
  126. package/dist/esm/sha256.d.ts +1 -0
  127. package/dist/esm/sha256.js +2 -0
  128. package/dist/esm/timeout.d.ts +7 -0
  129. package/dist/esm/timeout.js +28 -0
  130. package/dist/esm/treasury.d.ts +17 -0
  131. package/dist/esm/treasury.js +32 -0
  132. package/dist/esm/unfreeze.d.ts +4 -0
  133. package/dist/esm/unfreeze.js +6 -0
  134. package/dist/esm/utxo.d.ts +2 -0
  135. package/dist/esm/utxo.js +2 -0
  136. package/package.json +3 -3
@@ -0,0 +1,62 @@
1
+ import { arbitrumAssetId, arbitrumNovaAssetId, avalancheAssetId, baseAssetId, bchAssetId, bscAssetId, btcAssetId, cosmosAssetId, dogeAssetId, ethAssetId, gnosisAssetId, hyperEvmAssetId, katanaAssetId, ltcAssetId, mayachainAssetId, monadAssetId, nearAssetId, optimismAssetId, plasmaAssetId, polygonAssetId, solAssetId, starknetAssetId, suiAssetId, thorchainAssetId, tronAssetId, zecAssetId, } from '@shapeshiftoss/caip';
2
+ import { KnownChainIds } from '@shapeshiftoss/types';
3
+ import { assertUnreachable } from './assertUnreachable.js';
4
+ export const chainIdToFeeAssetId = (_chainId) => {
5
+ const chainId = _chainId;
6
+ switch (chainId) {
7
+ case KnownChainIds.ArbitrumMainnet:
8
+ return arbitrumAssetId;
9
+ case KnownChainIds.AvalancheMainnet:
10
+ return avalancheAssetId;
11
+ case KnownChainIds.ArbitrumNovaMainnet:
12
+ return arbitrumNovaAssetId;
13
+ case KnownChainIds.BaseMainnet:
14
+ return baseAssetId;
15
+ case KnownChainIds.BitcoinCashMainnet:
16
+ return bchAssetId;
17
+ case KnownChainIds.BitcoinMainnet:
18
+ return btcAssetId;
19
+ case KnownChainIds.BnbSmartChainMainnet:
20
+ return bscAssetId;
21
+ case KnownChainIds.CosmosMainnet:
22
+ return cosmosAssetId;
23
+ case KnownChainIds.DogecoinMainnet:
24
+ return dogeAssetId;
25
+ case KnownChainIds.EthereumMainnet:
26
+ return ethAssetId;
27
+ case KnownChainIds.GnosisMainnet:
28
+ return gnosisAssetId;
29
+ case KnownChainIds.LitecoinMainnet:
30
+ return ltcAssetId;
31
+ case KnownChainIds.OptimismMainnet:
32
+ return optimismAssetId;
33
+ case KnownChainIds.PolygonMainnet:
34
+ return polygonAssetId;
35
+ case KnownChainIds.ThorchainMainnet:
36
+ return thorchainAssetId;
37
+ case KnownChainIds.MayachainMainnet:
38
+ return mayachainAssetId;
39
+ case KnownChainIds.SolanaMainnet:
40
+ return solAssetId;
41
+ case KnownChainIds.TronMainnet:
42
+ return tronAssetId;
43
+ case KnownChainIds.SuiMainnet:
44
+ return suiAssetId;
45
+ case KnownChainIds.StarknetMainnet:
46
+ return starknetAssetId;
47
+ case KnownChainIds.MonadMainnet:
48
+ return monadAssetId;
49
+ case KnownChainIds.HyperEvmMainnet:
50
+ return hyperEvmAssetId;
51
+ case KnownChainIds.PlasmaMainnet:
52
+ return plasmaAssetId;
53
+ case KnownChainIds.KatanaMainnet:
54
+ return katanaAssetId;
55
+ case KnownChainIds.ZcashMainnet:
56
+ return zecAssetId;
57
+ case KnownChainIds.NearMainnet:
58
+ return nearAssetId;
59
+ default:
60
+ return assertUnreachable(chainId);
61
+ }
62
+ };
@@ -0,0 +1,9 @@
1
+ export declare const createThrottle: ({ capacity, costPerReq, drainPerInterval, intervalMs, }: {
2
+ capacity: number;
3
+ costPerReq: number;
4
+ drainPerInterval: number;
5
+ intervalMs: number;
6
+ }) => {
7
+ throttle: () => Promise<void>;
8
+ clear: () => void;
9
+ };
@@ -0,0 +1,32 @@
1
+ export const createThrottle = ({ capacity, costPerReq, drainPerInterval, intervalMs, }) => {
2
+ let currentLevel = 0;
3
+ let pendingResolves = [];
4
+ const drain = () => {
5
+ const drainAmount = Math.min(currentLevel, drainPerInterval);
6
+ currentLevel -= drainAmount;
7
+ // Resolve pending promises if there's enough capacity
8
+ while (pendingResolves.length > 0 && currentLevel + costPerReq <= capacity) {
9
+ const resolve = pendingResolves.shift();
10
+ if (resolve) {
11
+ currentLevel += costPerReq;
12
+ resolve();
13
+ }
14
+ }
15
+ };
16
+ // Start the interval to drain the capacity
17
+ const intervalId = setInterval(drain, intervalMs);
18
+ const throttle = async () => {
19
+ if (currentLevel + costPerReq <= capacity) {
20
+ // If adding another request doesn't exceed capacity, proceed immediately
21
+ currentLevel += costPerReq;
22
+ }
23
+ else {
24
+ // Otherwise, wait until there's enough capacity
25
+ await new Promise(resolve => {
26
+ pendingResolves.push(resolve);
27
+ });
28
+ }
29
+ };
30
+ const clear = () => clearInterval(intervalId);
31
+ return { throttle, clear };
32
+ };
@@ -0,0 +1,3 @@
1
+ import type { AssetNamespace } from '@shapeshiftoss/caip';
2
+ import { KnownChainIds } from '@shapeshiftoss/types';
3
+ export declare const getAssetNamespaceFromChainId: (chainId: KnownChainIds) => AssetNamespace;
@@ -0,0 +1,42 @@
1
+ import { ASSET_NAMESPACE } from '@shapeshiftoss/caip';
2
+ import { KnownChainIds } from '@shapeshiftoss/types';
3
+ import { assertUnreachable } from './assertUnreachable.js';
4
+ export const getAssetNamespaceFromChainId = (chainId) => {
5
+ switch (chainId) {
6
+ case KnownChainIds.SolanaMainnet:
7
+ return ASSET_NAMESPACE.splToken;
8
+ case KnownChainIds.SuiMainnet:
9
+ return ASSET_NAMESPACE.suiCoin;
10
+ case KnownChainIds.NearMainnet:
11
+ return ASSET_NAMESPACE.nep141;
12
+ case KnownChainIds.TronMainnet:
13
+ return ASSET_NAMESPACE.trc20;
14
+ case KnownChainIds.EthereumMainnet:
15
+ case KnownChainIds.AvalancheMainnet:
16
+ case KnownChainIds.OptimismMainnet:
17
+ case KnownChainIds.PolygonMainnet:
18
+ case KnownChainIds.GnosisMainnet:
19
+ case KnownChainIds.ArbitrumMainnet:
20
+ case KnownChainIds.ArbitrumNovaMainnet:
21
+ case KnownChainIds.BaseMainnet:
22
+ case KnownChainIds.BnbSmartChainMainnet:
23
+ case KnownChainIds.MonadMainnet:
24
+ case KnownChainIds.HyperEvmMainnet:
25
+ case KnownChainIds.PlasmaMainnet:
26
+ case KnownChainIds.KatanaMainnet:
27
+ return ASSET_NAMESPACE.erc20;
28
+ case KnownChainIds.StarknetMainnet:
29
+ return ASSET_NAMESPACE.starknetToken;
30
+ case KnownChainIds.CosmosMainnet:
31
+ case KnownChainIds.BitcoinMainnet:
32
+ case KnownChainIds.BitcoinCashMainnet:
33
+ case KnownChainIds.DogecoinMainnet:
34
+ case KnownChainIds.LitecoinMainnet:
35
+ case KnownChainIds.ZcashMainnet:
36
+ case KnownChainIds.ThorchainMainnet:
37
+ case KnownChainIds.MayachainMainnet:
38
+ throw Error(`Unhandled case '${chainId}'`);
39
+ default:
40
+ return assertUnreachable(chainId);
41
+ }
42
+ };
@@ -0,0 +1,2 @@
1
+ import { KnownChainIds } from '@shapeshiftoss/types';
2
+ export declare const getChainShortName: (chainId: KnownChainIds) => "AVA" | "OP" | "ETH" | "POLY" | "GNO" | "BNB" | "ARB" | "ARB-Nova" | "BAS" | "BTC" | "BCH" | "COSM" | "THOR" | "MAYA" | "DOGE" | "LTC" | "SOL" | "TRX" | "SUI" | "STRK" | "MON" | "HYPE" | "XPL" | "KAT" | "ZEC" | "NEAR" | undefined;
@@ -0,0 +1,61 @@
1
+ import { KnownChainIds } from '@shapeshiftoss/types';
2
+ import { assertUnreachable } from './assertUnreachable.js';
3
+ export const getChainShortName = (chainId) => {
4
+ switch (chainId) {
5
+ case KnownChainIds.AvalancheMainnet:
6
+ return 'AVA';
7
+ case KnownChainIds.OptimismMainnet:
8
+ return 'OP';
9
+ case KnownChainIds.EthereumMainnet:
10
+ return 'ETH';
11
+ case KnownChainIds.PolygonMainnet:
12
+ return 'POLY';
13
+ case KnownChainIds.GnosisMainnet:
14
+ return 'GNO';
15
+ case KnownChainIds.BnbSmartChainMainnet:
16
+ return 'BNB';
17
+ case KnownChainIds.ArbitrumMainnet:
18
+ return 'ARB';
19
+ case KnownChainIds.ArbitrumNovaMainnet:
20
+ return 'ARB-Nova';
21
+ case KnownChainIds.BaseMainnet:
22
+ return 'BAS';
23
+ case KnownChainIds.BitcoinMainnet:
24
+ return 'BTC';
25
+ case KnownChainIds.BitcoinCashMainnet:
26
+ return 'BCH';
27
+ case KnownChainIds.CosmosMainnet:
28
+ return 'COSM';
29
+ case KnownChainIds.ThorchainMainnet:
30
+ return 'THOR';
31
+ case KnownChainIds.MayachainMainnet:
32
+ return 'MAYA';
33
+ case KnownChainIds.DogecoinMainnet:
34
+ return 'DOGE';
35
+ case KnownChainIds.LitecoinMainnet:
36
+ return 'LTC';
37
+ case KnownChainIds.SolanaMainnet:
38
+ return 'SOL';
39
+ case KnownChainIds.TronMainnet:
40
+ return 'TRX';
41
+ case KnownChainIds.SuiMainnet:
42
+ return 'SUI';
43
+ case KnownChainIds.StarknetMainnet:
44
+ return 'STRK';
45
+ case KnownChainIds.MonadMainnet:
46
+ return 'MON';
47
+ case KnownChainIds.HyperEvmMainnet:
48
+ return 'HYPE';
49
+ case KnownChainIds.PlasmaMainnet:
50
+ return 'XPL';
51
+ case KnownChainIds.KatanaMainnet:
52
+ return 'KAT';
53
+ case KnownChainIds.ZcashMainnet:
54
+ return 'ZEC';
55
+ case KnownChainIds.NearMainnet:
56
+ return 'NEAR';
57
+ default: {
58
+ assertUnreachable(chainId);
59
+ }
60
+ }
61
+ };
@@ -0,0 +1,2 @@
1
+ import type { AssetReference, ChainNamespace, ChainReference } from '@shapeshiftoss/caip';
2
+ export declare const getNativeFeeAssetReference: (chainNamespace: ChainNamespace, chainReference: ChainReference) => AssetReference;
@@ -0,0 +1,101 @@
1
+ import { ASSET_REFERENCE, CHAIN_NAMESPACE, CHAIN_REFERENCE } from '@shapeshiftoss/caip';
2
+ export const getNativeFeeAssetReference = (chainNamespace, chainReference) => {
3
+ return (() => {
4
+ switch (chainNamespace) {
5
+ case CHAIN_NAMESPACE.Utxo:
6
+ switch (chainReference) {
7
+ case CHAIN_REFERENCE.BitcoinMainnet:
8
+ return ASSET_REFERENCE.Bitcoin;
9
+ case CHAIN_REFERENCE.BitcoinCashMainnet:
10
+ return ASSET_REFERENCE.BitcoinCash;
11
+ case CHAIN_REFERENCE.DogecoinMainnet:
12
+ return ASSET_REFERENCE.Dogecoin;
13
+ case CHAIN_REFERENCE.LitecoinMainnet:
14
+ return ASSET_REFERENCE.Litecoin;
15
+ case CHAIN_REFERENCE.ZcashMainnet:
16
+ return ASSET_REFERENCE.Zcash;
17
+ default:
18
+ throw new Error(`Chain namespace ${chainNamespace} on ${chainReference} not supported.`);
19
+ }
20
+ case CHAIN_NAMESPACE.Evm:
21
+ switch (chainReference) {
22
+ case CHAIN_REFERENCE.AvalancheCChain:
23
+ return ASSET_REFERENCE.AvalancheC;
24
+ case CHAIN_REFERENCE.EthereumMainnet:
25
+ return ASSET_REFERENCE.Ethereum;
26
+ case CHAIN_REFERENCE.OptimismMainnet:
27
+ return ASSET_REFERENCE.Optimism;
28
+ case CHAIN_REFERENCE.BnbSmartChainMainnet:
29
+ return ASSET_REFERENCE.BnbSmartChain;
30
+ case CHAIN_REFERENCE.PolygonMainnet:
31
+ return ASSET_REFERENCE.Polygon;
32
+ case CHAIN_REFERENCE.GnosisMainnet:
33
+ return ASSET_REFERENCE.Gnosis;
34
+ case CHAIN_REFERENCE.ArbitrumMainnet:
35
+ return ASSET_REFERENCE.Arbitrum;
36
+ case CHAIN_REFERENCE.ArbitrumNovaMainnet:
37
+ return ASSET_REFERENCE.ArbitrumNova;
38
+ case CHAIN_REFERENCE.BaseMainnet:
39
+ return ASSET_REFERENCE.Base;
40
+ case CHAIN_REFERENCE.MonadMainnet:
41
+ return ASSET_REFERENCE.Monad;
42
+ case CHAIN_REFERENCE.HyperEvmMainnet:
43
+ return ASSET_REFERENCE.HyperEvm;
44
+ case CHAIN_REFERENCE.PlasmaMainnet:
45
+ return ASSET_REFERENCE.Plasma;
46
+ case CHAIN_REFERENCE.KatanaMainnet:
47
+ return ASSET_REFERENCE.Katana;
48
+ default:
49
+ throw new Error(`Chain namespace ${chainNamespace} on ${chainReference} not supported.`);
50
+ }
51
+ case CHAIN_NAMESPACE.CosmosSdk:
52
+ switch (chainReference) {
53
+ case CHAIN_REFERENCE.CosmosHubMainnet:
54
+ return ASSET_REFERENCE.Cosmos;
55
+ case CHAIN_REFERENCE.ThorchainMainnet:
56
+ return ASSET_REFERENCE.Thorchain;
57
+ case CHAIN_REFERENCE.MayachainMainnet:
58
+ return ASSET_REFERENCE.Mayachain;
59
+ default:
60
+ throw new Error(`Chain namespace ${chainNamespace} on ${chainReference} not supported.`);
61
+ }
62
+ case CHAIN_NAMESPACE.Solana:
63
+ switch (chainReference) {
64
+ case CHAIN_REFERENCE.SolanaMainnet:
65
+ return ASSET_REFERENCE.Solana;
66
+ default:
67
+ throw new Error(`Chain namespace ${chainNamespace} on ${chainReference} not supported.`);
68
+ }
69
+ case CHAIN_NAMESPACE.Tron:
70
+ switch (chainReference) {
71
+ case CHAIN_REFERENCE.TronMainnet:
72
+ return ASSET_REFERENCE.Tron;
73
+ default:
74
+ throw new Error(`Chain namespace ${chainNamespace} on ${chainReference} not supported.`);
75
+ }
76
+ case CHAIN_NAMESPACE.Sui:
77
+ switch (chainReference) {
78
+ case CHAIN_REFERENCE.SuiMainnet:
79
+ return ASSET_REFERENCE.Sui;
80
+ default:
81
+ throw new Error(`Chain namespace ${chainNamespace} on ${chainReference} not supported.`);
82
+ }
83
+ case CHAIN_NAMESPACE.Near:
84
+ switch (chainReference) {
85
+ case CHAIN_REFERENCE.NearMainnet:
86
+ return ASSET_REFERENCE.Near;
87
+ default:
88
+ throw new Error(`Chain namespace ${chainNamespace} on ${chainReference} not supported.`);
89
+ }
90
+ case CHAIN_NAMESPACE.Starknet:
91
+ switch (chainReference) {
92
+ case CHAIN_REFERENCE.StarknetMainnet:
93
+ return ASSET_REFERENCE.Starknet;
94
+ default:
95
+ throw new Error(`Chain namespace ${chainNamespace} on ${chainReference} not supported.`);
96
+ }
97
+ default:
98
+ throw new Error(`Chain namespace ${chainNamespace} on ${chainReference} not supported.`);
99
+ }
100
+ })();
101
+ };
@@ -0,0 +1,6 @@
1
+ import { HistoryTimeframe } from '@shapeshiftoss/types';
2
+ import dayjs from 'dayjs';
3
+ export declare const getHistoryTimeframeBounds: (timeframe: HistoryTimeframe, end?: dayjs.Dayjs) => {
4
+ start: dayjs.Dayjs;
5
+ end: dayjs.Dayjs;
6
+ };
@@ -0,0 +1,29 @@
1
+ import { HistoryTimeframe } from '@shapeshiftoss/types';
2
+ import dayjs from 'dayjs';
3
+ import { assertUnreachable } from './assertUnreachable.js';
4
+ export const getHistoryTimeframeBounds = (timeframe, end = dayjs().endOf('day')) => {
5
+ let start = end; // Shut up typescript.
6
+ switch (timeframe) {
7
+ case HistoryTimeframe.HOUR:
8
+ start = end.subtract(1, 'day');
9
+ break;
10
+ case HistoryTimeframe.DAY:
11
+ start = end.subtract(1, 'day');
12
+ break;
13
+ case HistoryTimeframe.WEEK:
14
+ start = end.subtract(1, 'week');
15
+ break;
16
+ case HistoryTimeframe.MONTH:
17
+ start = end.subtract(1, 'month');
18
+ break;
19
+ case HistoryTimeframe.YEAR:
20
+ start = end.subtract(1, 'year');
21
+ break;
22
+ case HistoryTimeframe.ALL:
23
+ start = end.subtract(5, 'years');
24
+ break;
25
+ default:
26
+ assertUnreachable(timeframe);
27
+ }
28
+ return { start, end };
29
+ };
@@ -0,0 +1,24 @@
1
+ import type { AssetId } from '@shapeshiftoss/caip';
2
+ export * from './assertUnreachable.js';
3
+ export * from './assetData/index.js';
4
+ export * from './baseUnits/baseUnits.js';
5
+ export * from './basisPoints.js';
6
+ export * from './bignumber/bignumber.js';
7
+ export * from './chainIdToFeeAsset.js';
8
+ export * from './chainIdToFeeAssetId.js';
9
+ export * from './createThrottle.js';
10
+ export * from './getAssetNamespaceFromChainId.js';
11
+ export * from './getChainShortName.js';
12
+ export * from './getNativeFeeAssetReference.js';
13
+ export * from './historyTimeframe.js';
14
+ export * from './makeAsset/makeAsset.js';
15
+ export * from './promises.js';
16
+ export * from './sha256.js';
17
+ export * from './timeout.js';
18
+ export * from './treasury.js';
19
+ export * from './unfreeze.js';
20
+ export * from './utxo.js';
21
+ export declare const isSome: <T>(option: T | null | undefined) => option is T;
22
+ export declare const isToken: (assetId: AssetId) => boolean;
23
+ export declare const isSplToken: (assetId: AssetId) => boolean;
24
+ export declare const contractAddressOrUndefined: (assetId: AssetId) => import("@shapeshiftoss/caip").AssetReference | undefined;
@@ -0,0 +1,41 @@
1
+ import { ASSET_NAMESPACE, fromAssetId } from '@shapeshiftoss/caip';
2
+ import { isNull, isUndefined } from 'lodash';
3
+ export * from './assertUnreachable.js';
4
+ export * from './assetData/index.js';
5
+ export * from './baseUnits/baseUnits.js';
6
+ export * from './basisPoints.js';
7
+ export * from './bignumber/bignumber.js';
8
+ export * from './chainIdToFeeAsset.js';
9
+ export * from './chainIdToFeeAssetId.js';
10
+ export * from './createThrottle.js';
11
+ export * from './getAssetNamespaceFromChainId.js';
12
+ export * from './getChainShortName.js';
13
+ export * from './getNativeFeeAssetReference.js';
14
+ export * from './historyTimeframe.js';
15
+ export * from './makeAsset/makeAsset.js';
16
+ export * from './promises.js';
17
+ export * from './sha256.js';
18
+ export * from './timeout.js';
19
+ export * from './treasury.js';
20
+ export * from './unfreeze.js';
21
+ export * from './utxo.js';
22
+ export const isSome = (option) => !isUndefined(option) && !isNull(option);
23
+ export const isToken = (assetId) => {
24
+ switch (fromAssetId(assetId).assetNamespace) {
25
+ case ASSET_NAMESPACE.erc20:
26
+ case ASSET_NAMESPACE.erc721:
27
+ case ASSET_NAMESPACE.erc1155:
28
+ case ASSET_NAMESPACE.splToken:
29
+ case ASSET_NAMESPACE.trc20:
30
+ case ASSET_NAMESPACE.suiCoin:
31
+ case ASSET_NAMESPACE.starknetToken:
32
+ case ASSET_NAMESPACE.nep141:
33
+ return true;
34
+ default:
35
+ return false;
36
+ }
37
+ };
38
+ export const isSplToken = (assetId) => {
39
+ return fromAssetId(assetId).assetNamespace === ASSET_NAMESPACE.splToken;
40
+ };
41
+ export const contractAddressOrUndefined = (assetId) => isToken(assetId) || isSplToken(assetId) ? fromAssetId(assetId).assetReference : undefined;
@@ -0,0 +1,10 @@
1
+ import type { AssetId } from '@shapeshiftoss/caip';
2
+ import type { Asset } from '@shapeshiftoss/types';
3
+ export type MinimalAsset = Partial<Asset> & Pick<Asset, 'assetId' | 'symbol' | 'name' | 'precision'>;
4
+ /**
5
+ * utility to create an asset from minimal asset data from external sources at runtime
6
+ * e.g. zapper/zerion/etherscan
7
+ * required fields are assetId, symbol, name, precision
8
+ * the rest can be inferred from existing data
9
+ */
10
+ export declare const makeAsset: (assetsById: Partial<Record<AssetId, Asset>>, minimalAsset: MinimalAsset) => Asset;
@@ -0,0 +1,41 @@
1
+ import { fromAssetId } from '@shapeshiftoss/caip';
2
+ import { chainIdToFeeAsset } from '../chainIdToFeeAsset.js';
3
+ import { sha256 } from '../sha256.js';
4
+ /**
5
+ * utility to create an asset from minimal asset data from external sources at runtime
6
+ * e.g. zapper/zerion/etherscan
7
+ * required fields are assetId, symbol, name, precision
8
+ * the rest can be inferred from existing data
9
+ */
10
+ export const makeAsset = (assetsById, minimalAsset) => {
11
+ const { assetId } = minimalAsset;
12
+ const color = (() => {
13
+ if (minimalAsset.color)
14
+ return minimalAsset.color;
15
+ const shaAssetId = sha256(assetId);
16
+ return `#${shaAssetId.slice(0, 6)}`;
17
+ })();
18
+ const chainId = (() => {
19
+ if (minimalAsset.chainId)
20
+ return minimalAsset.chainId;
21
+ return fromAssetId(assetId).chainId;
22
+ })();
23
+ // currently, dynamic assets are LP pairs, and they have two icon urls and are rendered differently
24
+ const icon = minimalAsset?.icon ?? '';
25
+ const explorerLinks = (() => {
26
+ const feeAsset = chainIdToFeeAsset(assetsById, chainId);
27
+ return {
28
+ explorer: feeAsset?.explorer ?? '',
29
+ explorerTxLink: feeAsset?.explorerTxLink ?? '',
30
+ explorerAddressLink: feeAsset?.explorerAddressLink ?? '',
31
+ };
32
+ })();
33
+ return Object.assign({}, minimalAsset, explorerLinks, {
34
+ chainId,
35
+ color,
36
+ icon,
37
+ relatedAssetKey: null,
38
+ isPrimary: true,
39
+ isChainSpecific: true,
40
+ });
41
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,45 @@
1
+ import { ASSET_NAMESPACE, ethAssetId, ethChainId, toAssetId } from '@shapeshiftoss/caip';
2
+ import { describe, expect, it } from 'vitest';
3
+ import { makeAsset } from './makeAsset.js';
4
+ const ETH = {
5
+ assetId: ethAssetId,
6
+ chainId: ethChainId,
7
+ symbol: 'ETH',
8
+ name: 'Ethereum',
9
+ precision: 18,
10
+ color: '#FFFFFF',
11
+ icon: 'https://rawcdn.githack.com/trustwallet/assets/32e51d582a890b3dd3135fe3ee7c20c2fd699a6d/blockchains/ethereum/info/logo.png',
12
+ explorer: 'https://etherscan.io',
13
+ explorerTxLink: 'https://etherscan.io/tx/',
14
+ explorerAddressLink: 'https://etherscan.io/address/',
15
+ relatedAssetKey: null,
16
+ };
17
+ describe('makeAsset', () => {
18
+ it('can make erc20 shitcoins', () => {
19
+ const assetReference = '0xfoobar0000000000000000000000000000000000';
20
+ const assetNamespace = ASSET_NAMESPACE.erc20;
21
+ const symbol = 'FOOO';
22
+ const name = 'Humble Panda';
23
+ const precision = 18;
24
+ const chainId = ethChainId;
25
+ const assetId = toAssetId({ chainId, assetNamespace, assetReference });
26
+ const minimalAsset = { assetId, symbol, precision, name };
27
+ const assetsById = { [ETH.assetId]: ETH };
28
+ const asset = makeAsset(assetsById, minimalAsset);
29
+ const asset2 = makeAsset(assetsById, minimalAsset);
30
+ // doesn't molest asset id, precision, symbol, name
31
+ expect(asset?.assetId).toEqual(assetId);
32
+ expect(asset?.name).toEqual(name);
33
+ expect(asset?.symbol).toEqual(symbol);
34
+ expect(asset?.precision).toEqual(precision);
35
+ // belongs to correct chain
36
+ expect(asset?.chainId).toEqual(chainId);
37
+ // inherits fee asset explorer links
38
+ expect(asset?.explorer).toEqual(ETH.explorer);
39
+ expect(asset?.explorerTxLink).toEqual(ETH.explorerTxLink);
40
+ expect(asset?.explorerAddressLink).toEqual(ETH.explorerAddressLink);
41
+ // is deterministic on color and icon
42
+ expect(asset?.color).toEqual(asset2?.color);
43
+ expect(asset?.icon).toEqual(asset2?.icon);
44
+ });
45
+ });
@@ -0,0 +1,4 @@
1
+ import type { Result } from '@sniptt/monads';
2
+ export declare const isFulfilled: <T>(promise: PromiseSettledResult<T>) => promise is PromiseFulfilledResult<T>;
3
+ export declare const isRejected: <T>(promise: PromiseSettledResult<T>) => promise is PromiseRejectedResult;
4
+ export declare const isResolvedErr: <U, V, T extends Result<U, V>>(promise: PromiseSettledResult<T>) => promise is PromiseRejectedResult;
@@ -0,0 +1,3 @@
1
+ export const isFulfilled = (promise) => promise.status === 'fulfilled';
2
+ export const isRejected = (promise) => promise.status === 'rejected';
3
+ export const isResolvedErr = (promise) => 'value' in promise && promise.value.isErr();
@@ -0,0 +1 @@
1
+ export declare const sha256: (input: string) => string;
@@ -0,0 +1,2 @@
1
+ import crypto from 'node:crypto';
2
+ export const sha256 = (input) => crypto.createHash('sha256').update(input).digest('hex');
@@ -0,0 +1,7 @@
1
+ import type { Result } from '@sniptt/monads';
2
+ export declare const timeout: <SuccessType, FallbackType>(promise: Promise<SuccessType>, timeoutMs: number, fallbackValue: FallbackType) => Promise<SuccessType | FallbackType>;
3
+ export declare const timeoutMonadic: <Left, Right>(promise: Promise<Result<Left, Right>>, timeoutMs: number, timeoutRight: Right) => Promise<Result<Left, Right>>;
4
+ export declare const timeoutMonadicWithOriginal: <Ok, ErrType>(promise: Promise<Result<Ok, ErrType>>, timeoutMs: number, timeoutErr: ErrType) => {
5
+ timed: Promise<Result<Ok, ErrType>>;
6
+ original: Promise<Result<Ok, ErrType>>;
7
+ };
@@ -0,0 +1,28 @@
1
+ import { Err } from '@sniptt/monads';
2
+ export const timeout = (promise, timeoutMs, fallbackValue) => {
3
+ return Promise.race([
4
+ promise,
5
+ new Promise(resolve => setTimeout(() => {
6
+ resolve(fallbackValue);
7
+ }, timeoutMs)),
8
+ ]);
9
+ };
10
+ export const timeoutMonadic = (promise, timeoutMs, timeoutRight) => {
11
+ return Promise.race([
12
+ promise,
13
+ new Promise(resolve => setTimeout(() => {
14
+ resolve(Err(timeoutRight));
15
+ }, timeoutMs)),
16
+ ]);
17
+ };
18
+ export const timeoutMonadicWithOriginal = (promise, timeoutMs, timeoutErr) => {
19
+ return {
20
+ timed: Promise.race([
21
+ promise,
22
+ new Promise(resolve => setTimeout(() => {
23
+ resolve(Err(timeoutErr));
24
+ }, timeoutMs)),
25
+ ]),
26
+ original: promise,
27
+ };
28
+ };
@@ -0,0 +1,17 @@
1
+ import type { ChainId } from '@shapeshiftoss/caip';
2
+ import { KnownChainIds } from '@shapeshiftoss/types';
3
+ export declare const treasuryChainIds: readonly [KnownChainIds.EthereumMainnet, KnownChainIds.AvalancheMainnet, KnownChainIds.OptimismMainnet, KnownChainIds.BnbSmartChainMainnet, KnownChainIds.PolygonMainnet, KnownChainIds.GnosisMainnet, KnownChainIds.ArbitrumMainnet, KnownChainIds.BaseMainnet, KnownChainIds.SolanaMainnet, KnownChainIds.BitcoinMainnet, KnownChainIds.StarknetMainnet];
4
+ export type TreasuryChainId = (typeof treasuryChainIds)[number];
5
+ export declare const isTreasuryChainId: (chainId: ChainId) => chainId is KnownChainIds.EthereumMainnet | KnownChainIds.AvalancheMainnet | KnownChainIds.OptimismMainnet | KnownChainIds.BnbSmartChainMainnet | KnownChainIds.PolygonMainnet | KnownChainIds.GnosisMainnet | KnownChainIds.ArbitrumMainnet | KnownChainIds.BaseMainnet | KnownChainIds.BitcoinMainnet | KnownChainIds.SolanaMainnet | KnownChainIds.StarknetMainnet;
6
+ export declare const DAO_TREASURY_ETHEREUM_MAINNET = "0x90a48d5cf7343b08da12e067680b4c6dbfe551be";
7
+ export declare const DAO_TREASURY_OPTIMISM = "0x6268d07327f4fb7380732dc6d63d95F88c0E083b";
8
+ export declare const DAO_TREASURY_AVALANCHE = "0x74d63F31C2335b5b3BA7ad2812357672b2624cEd";
9
+ export declare const DAO_TREASURY_POLYGON = "0xB5F944600785724e31Edb90F9DFa16dBF01Af000";
10
+ export declare const DAO_TREASURY_GNOSIS = "0xb0E3175341794D1dc8E5F02a02F9D26989EbedB3";
11
+ export declare const DAO_TREASURY_BSC = "0x8b92b1698b57bEDF2142297e9397875ADBb2297E";
12
+ export declare const DAO_TREASURY_ARBITRUM = "0x38276553F8fbf2A027D901F8be45f00373d8Dd48";
13
+ export declare const DAO_TREASURY_BASE = "0x9c9aA90363630d4ab1D9dbF416cc3BBC8d3Ed502";
14
+ export declare const DAO_TREASURY_SOLANA = "Bh7R3MeJ98D7Ersxh7TgVQVQUSmDMqwrFVHH9DLfb4u3";
15
+ export declare const DAO_TREASURY_BITCOIN = "bc1qr2whxtd0gvqnctcxlynwejp6fvntv0mtxkv0dlv02vyale8h69ysm6l32n";
16
+ export declare const DAO_TREASURY_NEAR = "f471d0b0f90593d85125f38aaf5458748d6f23fd5b437b844d293d8e87557070";
17
+ export declare const DAO_TREASURY_STARKNET = "0x052a1132ea4db81Bde863AFb18a4d4CE5de9d3efdfda6b3DaA6484e26425D467";
@@ -0,0 +1,32 @@
1
+ // Wallets relating to the ShapeShift DAO Treasury
2
+ // https://forum.shapeshift.com/thread/dao-treasuries-and-multisigs-43646
3
+ import { KnownChainIds } from '@shapeshiftoss/types';
4
+ export const treasuryChainIds = [
5
+ KnownChainIds.EthereumMainnet,
6
+ KnownChainIds.AvalancheMainnet,
7
+ KnownChainIds.OptimismMainnet,
8
+ KnownChainIds.BnbSmartChainMainnet,
9
+ KnownChainIds.PolygonMainnet,
10
+ KnownChainIds.GnosisMainnet,
11
+ KnownChainIds.ArbitrumMainnet,
12
+ KnownChainIds.BaseMainnet,
13
+ KnownChainIds.SolanaMainnet,
14
+ KnownChainIds.BitcoinMainnet,
15
+ KnownChainIds.StarknetMainnet,
16
+ ];
17
+ export const isTreasuryChainId = (chainId) => {
18
+ return treasuryChainIds.includes(chainId);
19
+ };
20
+ // Safes
21
+ export const DAO_TREASURY_ETHEREUM_MAINNET = '0x90a48d5cf7343b08da12e067680b4c6dbfe551be';
22
+ export const DAO_TREASURY_OPTIMISM = '0x6268d07327f4fb7380732dc6d63d95F88c0E083b';
23
+ export const DAO_TREASURY_AVALANCHE = '0x74d63F31C2335b5b3BA7ad2812357672b2624cEd';
24
+ export const DAO_TREASURY_POLYGON = '0xB5F944600785724e31Edb90F9DFa16dBF01Af000';
25
+ export const DAO_TREASURY_GNOSIS = '0xb0E3175341794D1dc8E5F02a02F9D26989EbedB3';
26
+ export const DAO_TREASURY_BSC = '0x8b92b1698b57bEDF2142297e9397875ADBb2297E';
27
+ export const DAO_TREASURY_ARBITRUM = '0x38276553F8fbf2A027D901F8be45f00373d8Dd48';
28
+ export const DAO_TREASURY_BASE = '0x9c9aA90363630d4ab1D9dbF416cc3BBC8d3Ed502';
29
+ export const DAO_TREASURY_SOLANA = 'Bh7R3MeJ98D7Ersxh7TgVQVQUSmDMqwrFVHH9DLfb4u3';
30
+ export const DAO_TREASURY_BITCOIN = 'bc1qr2whxtd0gvqnctcxlynwejp6fvntv0mtxkv0dlv02vyale8h69ysm6l32n';
31
+ export const DAO_TREASURY_NEAR = 'f471d0b0f90593d85125f38aaf5458748d6f23fd5b437b844d293d8e87557070';
32
+ export const DAO_TREASURY_STARKNET = '0x052a1132ea4db81Bde863AFb18a4d4CE5de9d3efdfda6b3DaA6484e26425D467';
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Creates a shallow clone to allow mutation of a readonly object
3
+ */
4
+ export declare const unfreeze: <T>(obj: Readonly<T>) => T;