@shapeshiftoss/caip 6.0.1 → 6.1.0

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.
@@ -1,3 +1,14 @@
1
+ import { ChainId } from '../../chainId/chainId';
2
+ export declare enum CoingeckoAssetPlatform {
3
+ Ethereum = "ethereum",
4
+ Cosmos = "cosmos",
5
+ Osmosis = "osmosis",
6
+ Avalanche = "avalanche"
7
+ }
8
+ export declare const coingeckoBaseUrl = "http://api.coingecko.com/api/v3";
9
+ export declare const coingeckoProBaseUrl = "http://pro-api.coingecko.com/api/v3";
1
10
  export declare const coingeckoUrl = "https://api.coingecko.com/api/v3/coins/list?include_platform=true";
2
11
  export declare const coingeckoToAssetId: (id: string) => string | undefined;
3
12
  export declare const assetIdToCoingecko: (assetId: string) => string | undefined;
13
+ export declare const chainIdToCoingeckoAssetPlatform: (chainId: ChainId) => string;
14
+ export declare const makeCoingeckoAssetUrl: (assetId: string, apiKey?: string | undefined) => string;
@@ -26,9 +26,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.assetIdToCoingecko = exports.coingeckoToAssetId = exports.coingeckoUrl = void 0;
29
+ exports.makeCoingeckoAssetUrl = exports.chainIdToCoingeckoAssetPlatform = exports.assetIdToCoingecko = exports.coingeckoToAssetId = exports.coingeckoUrl = exports.coingeckoProBaseUrl = exports.coingeckoBaseUrl = exports.CoingeckoAssetPlatform = void 0;
30
30
  const toLower_1 = __importDefault(require("lodash/toLower"));
31
+ const assetId_1 = require("../../assetId/assetId");
32
+ const chainId_1 = require("../../chainId/chainId");
33
+ const constants_1 = require("../../constants");
31
34
  const adapters = __importStar(require("./generated"));
35
+ // https://api.coingecko.com/api/v3/asset_platforms
36
+ var CoingeckoAssetPlatform;
37
+ (function (CoingeckoAssetPlatform) {
38
+ CoingeckoAssetPlatform["Ethereum"] = "ethereum";
39
+ CoingeckoAssetPlatform["Cosmos"] = "cosmos";
40
+ CoingeckoAssetPlatform["Osmosis"] = "osmosis";
41
+ CoingeckoAssetPlatform["Avalanche"] = "avalanche";
42
+ })(CoingeckoAssetPlatform = exports.CoingeckoAssetPlatform || (exports.CoingeckoAssetPlatform = {}));
43
+ exports.coingeckoBaseUrl = 'http://api.coingecko.com/api/v3';
44
+ exports.coingeckoProBaseUrl = 'http://pro-api.coingecko.com/api/v3';
32
45
  exports.coingeckoUrl = 'https://api.coingecko.com/api/v3/coins/list?include_platform=true';
33
46
  const generatedAssetIdToCoingeckoMap = Object.values(adapters).reduce((acc, cur) => ({
34
47
  ...acc,
@@ -40,3 +53,46 @@ const coingeckoToAssetId = (id) => generatedCoingeckoToAssetIdMap[id];
40
53
  exports.coingeckoToAssetId = coingeckoToAssetId;
41
54
  const assetIdToCoingecko = (assetId) => generatedAssetIdToCoingeckoMap[(0, toLower_1.default)(assetId)];
42
55
  exports.assetIdToCoingecko = assetIdToCoingecko;
56
+ // https://www.coingecko.com/en/api/documentation - See asset_platforms
57
+ const chainIdToCoingeckoAssetPlatform = (chainId) => {
58
+ const { chainNamespace, chainReference } = (0, chainId_1.fromChainId)(chainId);
59
+ switch (chainNamespace) {
60
+ case constants_1.CHAIN_NAMESPACE.Ethereum:
61
+ switch (chainReference) {
62
+ case constants_1.CHAIN_REFERENCE.EthereumMainnet:
63
+ return CoingeckoAssetPlatform.Ethereum;
64
+ case constants_1.CHAIN_REFERENCE.AvalancheCChain:
65
+ return CoingeckoAssetPlatform.Avalanche;
66
+ default:
67
+ throw new Error(`chainNamespace ${chainNamespace}, chainReference ${chainReference} not supported.`);
68
+ }
69
+ case constants_1.CHAIN_NAMESPACE.Cosmos:
70
+ switch (chainReference) {
71
+ case constants_1.CHAIN_REFERENCE.CosmosHubMainnet:
72
+ return CoingeckoAssetPlatform.Cosmos;
73
+ case constants_1.CHAIN_REFERENCE.OsmosisMainnet:
74
+ return CoingeckoAssetPlatform.Osmosis;
75
+ default:
76
+ throw new Error(`chainNamespace ${chainNamespace}, chainReference ${chainReference} not supported.`);
77
+ }
78
+ // Bitcoin is not a valid asset platform: https://api.coingecko.com/api/v3/asset_platforms
79
+ case constants_1.CHAIN_NAMESPACE.Bitcoin:
80
+ default:
81
+ throw new Error(`chainNamespace ${chainNamespace}, chainReference ${chainReference} not supported.`);
82
+ }
83
+ };
84
+ exports.chainIdToCoingeckoAssetPlatform = chainIdToCoingeckoAssetPlatform;
85
+ const makeCoingeckoAssetUrl = (assetId, apiKey) => {
86
+ const id = (0, exports.assetIdToCoingecko)(assetId);
87
+ if (!id)
88
+ throw new Error(`no coingecko asset for assetId: ${assetId}`);
89
+ const baseUrl = apiKey ? exports.coingeckoProBaseUrl : exports.coingeckoBaseUrl;
90
+ const maybeApiKey = apiKey ? `&x_cg_pro_api_key=${apiKey}` : '';
91
+ const { chainNamespace, chainReference, assetNamespace, assetReference } = (0, assetId_1.fromAssetId)(assetId);
92
+ if (assetNamespace === 'erc20') {
93
+ const assetPlatform = (0, exports.chainIdToCoingeckoAssetPlatform)((0, chainId_1.toChainId)({ chainNamespace, chainReference }));
94
+ return `${baseUrl}/coins/${assetPlatform}/contract/${assetReference}${maybeApiKey}`;
95
+ }
96
+ return `${baseUrl}/coins/${id}${maybeApiKey}`;
97
+ };
98
+ exports.makeCoingeckoAssetUrl = makeCoingeckoAssetUrl;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shapeshiftoss/caip",
3
- "version": "6.0.1",
3
+ "version": "6.1.0",
4
4
  "description": "CAIP Implementation",
5
5
  "homepage": "",
6
6
  "license": "MIT",