@shapeshiftoss/caip 1.13.0 → 2.0.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.
package/README.md CHANGED
@@ -41,7 +41,9 @@ Ether
41
41
  ```ts
42
42
  const chain = ChainTypes.Ethereum
43
43
  const network = NetworkTypes.MAINNET
44
- const result = toCAIP19({ chain, network })
44
+ const assetNamespace = AssetNamespace.Slip44
45
+ const assetReference = AssetReference.Ethereum
46
+ const result = toCAIP19({ chain, network, assetNamespace, assetReference })
45
47
  expect(result).toEqual('eip155:1/slip44:60')
46
48
  ```
47
49
 
@@ -50,7 +52,7 @@ ERC20 token
50
52
  ```ts
51
53
  const chain = ChainTypes.Ethereum
52
54
  const network = NetworkTypes.MAINNET
53
- const contractType = ContractTypes.ERC20
55
+ const contractType = AssetNamespace.ERC20
54
56
  const tokenId = '0xc770eefad204b5180df6a14ee197d99d808ee52d'
55
57
  const result = toCAIP19({ chain, network, contractType, tokenId })
56
58
  expect(result).toEqual('eip155:1/erc20:0xc770eefad204b5180df6a14ee197d99d808ee52d')
@@ -65,8 +67,8 @@ const caip19 = 'eip155:1/slip44:60'
65
67
  const { chain, network, contractType, tokenId } = fromCAIP19(caip19)
66
68
  expect(chain).toEqual(ChainTypes.Ethereum)
67
69
  expect(network).toEqual(NetworkTypes.MAINNET)
68
- expect(contractType).toBeUndefined()
69
- expect(tokenId).toBeUndefined()
70
+ expect(contractType).toEqual(AssetNamespace.Slip44)
71
+ expect(tokenId).toEqual(AssetReference.Ethereum)
70
72
  ```
71
73
 
72
74
  ERC20 token
@@ -76,7 +78,7 @@ const caip19 = 'eip155:1/erc20:0xc770eefad204b5180df6a14ee197d99d808ee52d'
76
78
  const { chain, network, contractType, tokenId } = fromCAIP19(caip19)
77
79
  expect(chain).toEqual(ChainTypes.Ethereum)
78
80
  expect(network).toEqual(NetworkTypes.MAINNET)
79
- expect(contractType).toEqual(ContractTypes.ERC20)
81
+ expect(contractType).toEqual(AssetNamespace.ERC20)
80
82
  expect(tokenId).toEqual('0xc770eefad204b5180df6a14ee197d99d808ee52d')
81
83
  ```
82
84
 
@@ -23,13 +23,16 @@ const parseEthData = (data) => {
23
23
  const ethCoins = data.filter(({ id, explorer }) => (explorer && explorer.startsWith('https://etherscan.io/token/0x')) || id === 'ethereum');
24
24
  const chain = types_1.ChainTypes.Ethereum;
25
25
  const network = types_1.NetworkTypes.MAINNET;
26
- const contractType = types_1.ContractTypes.ERC20;
27
26
  return ethCoins.reduce((acc, { id, explorer }) => {
28
- let tokenId;
27
+ let assetReference = caip19_1.AssetReference.Ethereum;
28
+ const assetNamespace = id === 'ethereum' ? caip19_1.AssetNamespace.Slip44 : caip19_1.AssetNamespace.ERC20;
29
29
  if (id !== 'ethereum' && explorer) {
30
- tokenId = explorer.replace('https://etherscan.io/token/', '').split('#')[0].split('?')[0];
30
+ assetReference = explorer
31
+ .replace('https://etherscan.io/token/', '')
32
+ .split('#')[0]
33
+ .split('?')[0];
31
34
  }
32
- const caip19 = (0, caip19_1.toCAIP19)({ chain, network, ...(tokenId ? { contractType, tokenId } : {}) });
35
+ const caip19 = (0, caip19_1.toCAIP19)({ chain, network, assetNamespace, assetReference });
33
36
  acc[caip19] = id;
34
37
  return acc;
35
38
  }, {});
@@ -38,21 +41,36 @@ exports.parseEthData = parseEthData;
38
41
  const makeBtcData = () => {
39
42
  const chain = types_1.ChainTypes.Bitcoin;
40
43
  const network = types_1.NetworkTypes.MAINNET;
41
- const caip19 = (0, caip19_1.toCAIP19)({ chain, network });
44
+ const caip19 = (0, caip19_1.toCAIP19)({
45
+ chain,
46
+ network,
47
+ assetNamespace: caip19_1.AssetNamespace.Slip44,
48
+ assetReference: caip19_1.AssetReference.Bitcoin
49
+ });
42
50
  return { [caip19]: 'bitcoin' };
43
51
  };
44
52
  exports.makeBtcData = makeBtcData;
45
53
  const makeCosmosHubData = () => {
46
54
  const chain = types_1.ChainTypes.Cosmos;
47
55
  const network = types_1.NetworkTypes.COSMOSHUB_MAINNET;
48
- const caip19 = (0, caip19_1.toCAIP19)({ chain, network });
56
+ const caip19 = (0, caip19_1.toCAIP19)({
57
+ chain,
58
+ network,
59
+ assetNamespace: caip19_1.AssetNamespace.Slip44,
60
+ assetReference: caip19_1.AssetReference.Cosmos
61
+ });
49
62
  return { [caip19]: 'cosmos' };
50
63
  };
51
64
  exports.makeCosmosHubData = makeCosmosHubData;
52
65
  const makeOsmosisData = () => {
53
66
  const chain = types_1.ChainTypes.Osmosis;
54
67
  const network = types_1.NetworkTypes.OSMOSIS_MAINNET;
55
- const caip19 = (0, caip19_1.toCAIP19)({ chain, network });
68
+ const caip19 = (0, caip19_1.toCAIP19)({
69
+ chain,
70
+ network,
71
+ assetNamespace: caip19_1.AssetNamespace.Slip44,
72
+ assetReference: caip19_1.AssetReference.Osmosis
73
+ });
56
74
  return { [caip19]: 'osmosis' };
57
75
  };
58
76
  exports.makeOsmosisData = makeOsmosisData;
@@ -23,10 +23,10 @@ const parseEthData = (data) => {
23
23
  const ethCoins = data.filter(({ id, platforms }) => Boolean(platforms === null || platforms === void 0 ? void 0 : platforms.ethereum) || id === 'ethereum');
24
24
  const chain = types_1.ChainTypes.Ethereum;
25
25
  const network = types_1.NetworkTypes.MAINNET;
26
- const contractType = types_1.ContractTypes.ERC20;
27
26
  return ethCoins.reduce((acc, { id, platforms }) => {
28
- const tokenId = platforms === null || platforms === void 0 ? void 0 : platforms.ethereum;
29
- const caip19 = (0, caip19_1.toCAIP19)({ chain, network, ...(tokenId ? { contractType, tokenId } : {}) });
27
+ const assetNamespace = id === 'ethereum' ? caip19_1.AssetNamespace.Slip44 : caip19_1.AssetNamespace.ERC20;
28
+ const assetReference = id === 'ethereum' ? caip19_1.AssetReference.Ethereum : platforms === null || platforms === void 0 ? void 0 : platforms.ethereum;
29
+ const caip19 = (0, caip19_1.toCAIP19)({ chain, network, assetNamespace, assetReference });
30
30
  acc[caip19] = id;
31
31
  return acc;
32
32
  }, {});
@@ -35,21 +35,36 @@ exports.parseEthData = parseEthData;
35
35
  const makeBtcData = () => {
36
36
  const chain = types_1.ChainTypes.Bitcoin;
37
37
  const network = types_1.NetworkTypes.MAINNET;
38
- const caip19 = (0, caip19_1.toCAIP19)({ chain, network });
38
+ const caip19 = (0, caip19_1.toCAIP19)({
39
+ chain,
40
+ network,
41
+ assetNamespace: caip19_1.AssetNamespace.Slip44,
42
+ assetReference: caip19_1.AssetReference.Bitcoin
43
+ });
39
44
  return { [caip19]: 'bitcoin' };
40
45
  };
41
46
  exports.makeBtcData = makeBtcData;
42
47
  const makeCosmosHubData = () => {
43
48
  const chain = types_1.ChainTypes.Cosmos;
44
49
  const network = types_1.NetworkTypes.COSMOSHUB_MAINNET;
45
- const caip19 = (0, caip19_1.toCAIP19)({ chain, network });
50
+ const caip19 = (0, caip19_1.toCAIP19)({
51
+ chain,
52
+ network,
53
+ assetNamespace: caip19_1.AssetNamespace.Slip44,
54
+ assetReference: caip19_1.AssetReference.Cosmos
55
+ });
46
56
  return { [caip19]: 'cosmos' };
47
57
  };
48
58
  exports.makeCosmosHubData = makeCosmosHubData;
49
59
  const makeOsmosisData = () => {
50
60
  const chain = types_1.ChainTypes.Osmosis;
51
61
  const network = types_1.NetworkTypes.OSMOSIS_MAINNET;
52
- const caip19 = (0, caip19_1.toCAIP19)({ chain, network });
62
+ const caip19 = (0, caip19_1.toCAIP19)({
63
+ chain,
64
+ network,
65
+ assetNamespace: caip19_1.AssetNamespace.Slip44,
66
+ assetReference: caip19_1.AssetReference.Osmosis
67
+ });
53
68
  return { [caip19]: 'osmosis' };
54
69
  };
55
70
  exports.makeOsmosisData = makeOsmosisData;
@@ -11,7 +11,7 @@ const fs_1 = __importDefault(require("fs"));
11
11
  const toLower_1 = __importDefault(require("lodash/toLower"));
12
12
  const uniqBy_1 = __importDefault(require("lodash/uniqBy"));
13
13
  const caip2_1 = require("../../caip2/caip2");
14
- const caip19_1 = require("./../../caip19/caip19");
14
+ const caip19_1 = require("../../caip19/caip19");
15
15
  const network = 1; // 1 for mainnet
16
16
  const provider = new providers_1.JsonRpcProvider(process.env.REACT_APP_UNCHAINED_ETHEREUM_HTTP_URL);
17
17
  const yearnSdk = new sdk_1.Yearn(network, { provider, disableAllowlist: true });
@@ -31,22 +31,25 @@ const fetchData = async () => {
31
31
  yearnSdk.vaults.tokens()
32
32
  ]);
33
33
  const tokens = [...vaults, ...ironBankTokens, ...zapperTokens, ...underlyingVaultTokens];
34
- const uniqueTokens = (0, uniqBy_1.default)(tokens, 'address');
35
- return uniqueTokens;
34
+ return (0, uniqBy_1.default)(tokens, 'address');
36
35
  };
37
36
  exports.fetchData = fetchData;
38
37
  const parseEthData = (data) => {
39
38
  const chain = types_1.ChainTypes.Ethereum;
40
- const contractType = types_1.ContractTypes.ERC20;
41
- const result = data.reduce((acc, datum) => {
39
+ const assetNamespace = caip19_1.AssetNamespace.ERC20;
40
+ return data.reduce((acc, datum) => {
42
41
  const { address } = datum;
43
42
  const id = address;
44
- const tokenId = (0, toLower_1.default)(address);
45
- const caip19 = (0, caip19_1.toCAIP19)({ chain, network: types_1.NetworkTypes.MAINNET, contractType, tokenId });
43
+ const assetReference = (0, toLower_1.default)(address);
44
+ const caip19 = (0, caip19_1.toCAIP19)({
45
+ chain,
46
+ network: types_1.NetworkTypes.MAINNET,
47
+ assetNamespace,
48
+ assetReference
49
+ });
46
50
  acc[caip19] = id;
47
51
  return acc;
48
52
  }, {});
49
- return result;
50
53
  };
51
54
  exports.parseEthData = parseEthData;
52
55
  const parseData = (d) => {
@@ -1,4 +1,5 @@
1
- import { ChainTypes, ContractTypes, NetworkTypes } from '@shapeshiftoss/types';
1
+ import { ChainTypes, NetworkTypes } from '@shapeshiftoss/types';
2
+ import { ChainReference } from '../caip2/caip2';
2
3
  export declare type CAIP19 = string;
3
4
  export declare enum AssetNamespace {
4
5
  CW20 = "cw20",
@@ -10,29 +11,24 @@ export declare enum AssetNamespace {
10
11
  IBC = "ibc"
11
12
  }
12
13
  export declare enum AssetReference {
13
- Bitcoin = 0,
14
- Ethereum = 60,
15
- Cosmos = 118,
16
- Osmosis = 118
14
+ Bitcoin = "0",
15
+ Ethereum = "60",
16
+ Cosmos = "118",
17
+ Osmosis = "118"
17
18
  }
18
19
  declare type ToCAIP19Args = {
19
20
  chain: ChainTypes;
20
- network: NetworkTypes;
21
- contractType?: ContractTypes;
22
- tokenId?: string;
23
- assetNamespace?: AssetNamespace;
24
- assetReference?: string;
21
+ network: NetworkTypes | ChainReference;
22
+ assetNamespace: AssetNamespace;
23
+ assetReference: AssetReference | string;
25
24
  };
26
25
  declare type ToCAIP19 = (args: ToCAIP19Args) => string;
27
26
  export declare const toCAIP19: ToCAIP19;
28
27
  declare type FromCAIP19Return = {
29
28
  chain: ChainTypes;
30
29
  network: NetworkTypes;
31
- contractType?: ContractTypes;
32
- tokenId?: string;
33
- assetNamespace?: AssetNamespace;
34
- assetReference?: string;
30
+ assetNamespace: AssetNamespace;
31
+ assetReference: AssetReference | string;
35
32
  };
36
- declare type FromCAIP19 = (caip19: string) => FromCAIP19Return;
37
- export declare const fromCAIP19: FromCAIP19;
33
+ export declare const fromCAIP19: (caip19: string) => FromCAIP19Return;
38
34
  export {};
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
- // https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-19.md
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
3
  exports.fromCAIP19 = exports.toCAIP19 = exports.AssetReference = exports.AssetNamespace = void 0;
4
+ // https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-19.md
5
5
  const types_1 = require("@shapeshiftoss/types");
6
6
  const caip2_1 = require("../caip2/caip2");
7
7
  var AssetNamespace;
@@ -16,11 +16,51 @@ var AssetNamespace;
16
16
  })(AssetNamespace = exports.AssetNamespace || (exports.AssetNamespace = {}));
17
17
  var AssetReference;
18
18
  (function (AssetReference) {
19
- AssetReference[AssetReference["Bitcoin"] = 0] = "Bitcoin";
20
- AssetReference[AssetReference["Ethereum"] = 60] = "Ethereum";
21
- AssetReference[AssetReference["Cosmos"] = 118] = "Cosmos";
22
- AssetReference[AssetReference["Osmosis"] = 118] = "Osmosis";
19
+ AssetReference["Bitcoin"] = "0";
20
+ AssetReference["Ethereum"] = "60";
21
+ AssetReference["Cosmos"] = "118";
22
+ AssetReference["Osmosis"] = "118";
23
23
  })(AssetReference = exports.AssetReference || (exports.AssetReference = {}));
24
+ const validAssetNamespaces = Object.freeze({
25
+ [types_1.ChainTypes.Bitcoin]: [AssetNamespace.Slip44],
26
+ [types_1.ChainTypes.Ethereum]: [AssetNamespace.Slip44, AssetNamespace.ERC20, AssetNamespace.ERC721],
27
+ [types_1.ChainTypes.Cosmos]: [
28
+ AssetNamespace.CW20,
29
+ AssetNamespace.CW721,
30
+ AssetNamespace.IBC,
31
+ AssetNamespace.NATIVE,
32
+ AssetNamespace.Slip44
33
+ ],
34
+ [types_1.ChainTypes.Osmosis]: [
35
+ AssetNamespace.CW20,
36
+ AssetNamespace.CW721,
37
+ AssetNamespace.IBC,
38
+ AssetNamespace.NATIVE,
39
+ AssetNamespace.Slip44
40
+ ]
41
+ });
42
+ const chainReferenceToNetworkType = Object.freeze({
43
+ [caip2_1.ChainReference.BitcoinMainnet]: types_1.NetworkTypes.MAINNET,
44
+ [caip2_1.ChainReference.BitcoinTestnet]: types_1.NetworkTypes.TESTNET,
45
+ [caip2_1.ChainReference.EthereumMainnet]: types_1.NetworkTypes.MAINNET,
46
+ [caip2_1.ChainReference.EthereumRopsten]: types_1.NetworkTypes.ETH_ROPSTEN,
47
+ [caip2_1.ChainReference.EthereumRinkeby]: types_1.NetworkTypes.ETH_RINKEBY,
48
+ [caip2_1.ChainReference.CosmosHubMainnet]: types_1.NetworkTypes.COSMOSHUB_MAINNET,
49
+ [caip2_1.ChainReference.CosmosHubVega]: types_1.NetworkTypes.COSMOSHUB_VEGA,
50
+ [caip2_1.ChainReference.OsmosisMainnet]: types_1.NetworkTypes.OSMOSIS_MAINNET,
51
+ [caip2_1.ChainReference.OsmosisTestnet]: types_1.NetworkTypes.OSMOSIS_TESTNET
52
+ });
53
+ const chainNamespaceToChainType = Object.freeze({
54
+ [caip2_1.ChainNamespace.Bitcoin]: types_1.ChainTypes.Bitcoin,
55
+ [caip2_1.ChainNamespace.Ethereum]: types_1.ChainTypes.Ethereum,
56
+ [caip2_1.ChainNamespace.Cosmos]: types_1.ChainTypes.Cosmos
57
+ });
58
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
59
+ function stringToEnum(obj, item) {
60
+ var _a;
61
+ const found = (_a = Object.entries(obj).find((i) => i.includes(item))) === null || _a === void 0 ? void 0 : _a[0];
62
+ return found ? obj[found] : undefined;
63
+ }
24
64
  /**
25
65
  * validate that a value is a string slip44 value
26
66
  * @see https://github.com/satoshilabs/slips/blob/master/slip-0044.md
@@ -31,178 +71,61 @@ const isValidSlip44 = (value) => {
31
71
  // slip44 has a max value of an unsigned 32-bit integer
32
72
  return !isNaN(n) && n >= 0 && n < 4294967296;
33
73
  };
34
- const toCAIP19 = ({ chain, network, contractType, tokenId, assetNamespace, assetReference }) => {
74
+ const toCAIP19 = (args) => {
75
+ const { chain, network, assetNamespace } = args;
76
+ let { assetReference } = args;
77
+ if (!chain)
78
+ throw new Error('toCAIP19: No chain provided');
79
+ if (!network)
80
+ throw new Error('toCAIP19: No chainReference Provided');
81
+ if (!assetNamespace)
82
+ throw new Error('toCAIP19: No assetNamespace provided');
83
+ if (!assetReference)
84
+ throw new Error('toCAIP19: No assetReference provided');
35
85
  const caip2 = (0, caip2_1.toCAIP2)({ chain, network });
36
- switch (chain) {
37
- // TODO: There is no chain-level fungible token standard in Cosmos SDK, but CosmWasm chains have CW20/CW721
38
- // This should be implemented when we want to support tokens for Cosmos SDK chains
39
- case types_1.ChainTypes.Cosmos:
40
- case types_1.ChainTypes.Osmosis: {
41
- if (!assetNamespace || !assetReference) {
42
- return `${caip2}/${AssetNamespace.Slip44}:${AssetReference.Cosmos}`;
43
- }
44
- switch (assetNamespace) {
45
- case AssetNamespace.CW20:
46
- case AssetNamespace.CW721:
47
- case AssetNamespace.IBC:
48
- case AssetNamespace.NATIVE:
49
- return `${caip2}/${assetNamespace}:${assetReference}`;
50
- case AssetNamespace.Slip44:
51
- if (isValidSlip44(assetReference))
52
- return `${caip2}/${assetNamespace}:${assetReference}`;
53
- }
54
- throw new Error(`Could not construct CAIP19 chain: ${chain}, network: ${network}, assetNamespace: ${assetNamespace}, assetReference: ${assetReference}`);
55
- }
56
- case types_1.ChainTypes.Ethereum: {
57
- tokenId = tokenId === null || tokenId === void 0 ? void 0 : tokenId.toLowerCase();
58
- if (contractType) {
59
- if (!tokenId) {
60
- throw new Error(`toCAIP19: no tokenId provided with contract type ${contractType}`);
61
- }
62
- const shapeShiftToCAIP19Namespace = {
63
- [types_1.ChainTypes.Ethereum]: {
64
- [types_1.ContractTypes.ERC20]: AssetNamespace.ERC20,
65
- [types_1.ContractTypes.ERC721]: AssetNamespace.ERC721
66
- }
67
- };
68
- switch (contractType) {
69
- case types_1.ContractTypes.ERC20:
70
- case types_1.ContractTypes.ERC721: {
71
- const namespace = shapeShiftToCAIP19Namespace[chain][contractType];
72
- if (!tokenId.startsWith('0x')) {
73
- throw new Error(`toCAIP19: tokenId must start with 0x: ${tokenId}`);
74
- }
75
- if (tokenId.length !== 42) {
76
- throw new Error(`toCAIP19: tokenId length must be 42, length: ${tokenId.length}`);
77
- }
78
- return `${caip2}/${namespace}:${tokenId}`;
79
- }
80
- default: {
81
- throw new Error(`toCAIP19: unsupported contractType ${contractType} on chain ${chain}`);
82
- }
83
- }
84
- }
85
- else {
86
- if (tokenId) {
87
- throw new Error(`toCAIP19: tokenId provided without contract type`);
88
- }
89
- return `${caip2}/${AssetNamespace.Slip44}:${AssetReference.Ethereum}`;
90
- }
91
- }
92
- case types_1.ChainTypes.Bitcoin: {
93
- return `${caip2}/${AssetNamespace.Slip44}:${AssetReference.Bitcoin}`;
86
+ if (!validAssetNamespaces[chain].includes(assetNamespace)) {
87
+ throw new Error(`toCAIP19: Asset Namespace ${assetNamespace} not supported for chain ${chain}`);
88
+ }
89
+ if (assetNamespace === AssetNamespace.Slip44 && !isValidSlip44(String(assetReference))) {
90
+ throw new Error(`Invalid reference for namespace slip44`);
91
+ }
92
+ if ([AssetNamespace.ERC20, AssetNamespace.ERC721].includes(assetNamespace)) {
93
+ if (!assetReference.startsWith('0x')) {
94
+ throw new Error(`toCAIP19: assetReference must start with 0x: ${assetReference}`);
94
95
  }
95
- default: {
96
- throw new Error(`Chain type not supported: ${chain}`);
96
+ if (assetReference.length !== 42) {
97
+ throw new Error(`toCAIP19: assetReference length must be 42, length: ${assetReference.length}`);
97
98
  }
99
+ // We make Eth contract addresses lower case to simplify comparisons
100
+ assetReference = assetReference.toLowerCase();
98
101
  }
102
+ return `${caip2}/${assetNamespace}:${assetReference}`;
99
103
  };
100
104
  exports.toCAIP19 = toCAIP19;
105
+ const parseCaip19RegExp = /([-a-z\d]{3,8}):([-a-zA-Z\d]{1,32})\/([-a-z\d]{3,8}):([-a-zA-Z\d]+)/;
101
106
  const fromCAIP19 = (caip19) => {
102
- const [caip2, namespaceAndReference] = caip19.split('/');
103
- if (!(caip2 && namespaceAndReference)) {
104
- throw new Error(`fromCAIP19: error parsing caip19, caip2: ${caip2}, namespaceAndReference: ${namespaceAndReference}`);
105
- }
106
- const [namespace, referenceString] = namespaceAndReference.split(':');
107
- if (!(namespace && referenceString)) {
108
- throw new Error(`fromCAIP19: error parsing namespace and reference, namespace: ${namespace}, reference: ${referenceString}`);
109
- }
110
- const reference = Number(referenceString);
111
- const { chain, network } = (0, caip2_1.fromCAIP2)(caip2);
112
- switch (chain) {
113
- case types_1.ChainTypes.Bitcoin: {
114
- switch (namespace) {
115
- case AssetNamespace.Slip44: {
116
- switch (reference) {
117
- case AssetReference.Bitcoin: {
118
- return { chain, network };
119
- }
120
- default: {
121
- throw new Error(`fromCAIP19: invalid asset reference ${reference} on chain ${chain}`);
122
- }
123
- }
124
- }
125
- default: {
126
- throw new Error(`fromCAIP19: invalid asset namespace ${namespace} on chain ${chain}`);
127
- }
128
- }
129
- }
130
- case types_1.ChainTypes.Ethereum: {
131
- switch (namespace) {
132
- case AssetNamespace.Slip44: {
133
- switch (reference) {
134
- case AssetReference.Ethereum: {
135
- return { chain, network };
136
- }
137
- default: {
138
- throw new Error(`fromCAIP19: invalid asset reference ${reference} on chain ${chain}`);
139
- }
140
- }
141
- }
142
- case AssetNamespace.ERC20: {
143
- const contractType = types_1.ContractTypes.ERC20;
144
- const tokenId = referenceString.toLowerCase();
145
- return { chain, network, contractType, tokenId };
146
- }
147
- case AssetNamespace.ERC721: {
148
- const contractType = types_1.ContractTypes.ERC721;
149
- const tokenId = referenceString.toLowerCase();
150
- return { chain, network, contractType, tokenId };
151
- }
152
- default: {
153
- throw new Error(`fromCAIP19: invalid asset namespace ${namespace} on chain ${chain}`);
154
- }
155
- }
107
+ var _a;
108
+ const matches = (_a = parseCaip19RegExp.exec(caip19)) !== null && _a !== void 0 ? _a : [];
109
+ // We're okay casting these strings to enums because we check to make sure
110
+ // they are valid enum values
111
+ let chain = chainNamespaceToChainType[matches[1]];
112
+ const network = chainReferenceToNetworkType[matches[2]];
113
+ const assetNamespace = stringToEnum(AssetNamespace, matches[3]);
114
+ let assetReference = matches[4];
115
+ if (chain && network && assetNamespace && assetReference) {
116
+ switch (network) {
117
+ case types_1.NetworkTypes.OSMOSIS_MAINNET:
118
+ case types_1.NetworkTypes.OSMOSIS_TESTNET:
119
+ chain = types_1.ChainTypes.Osmosis;
156
120
  }
157
- case types_1.ChainTypes.Osmosis:
158
- case types_1.ChainTypes.Cosmos: {
159
- switch (namespace) {
160
- case AssetNamespace.Slip44: {
161
- switch (reference) {
162
- case AssetReference.Cosmos: {
163
- return { chain, network };
164
- }
165
- case AssetReference.Ethereum:
166
- case AssetReference.Bitcoin:
167
- default: {
168
- throw new Error(`fromCAIP19: invalid asset namespace ${namespace} on chain ${chain}`);
169
- }
170
- }
171
- }
172
- case AssetNamespace.CW20:
173
- return {
174
- chain,
175
- network,
176
- assetNamespace: AssetNamespace.CW20,
177
- assetReference: referenceString
178
- };
179
- case AssetNamespace.CW721:
180
- return {
181
- chain,
182
- network,
183
- assetNamespace: AssetNamespace.CW721,
184
- assetReference: referenceString
185
- };
186
- case AssetNamespace.IBC:
187
- return {
188
- chain,
189
- network,
190
- assetNamespace: AssetNamespace.IBC,
191
- assetReference: referenceString
192
- };
193
- case AssetNamespace.NATIVE:
194
- return {
195
- chain,
196
- network,
197
- assetNamespace: AssetNamespace.NATIVE,
198
- assetReference: referenceString
199
- };
200
- default: {
201
- throw new Error(`fromCAIP19: invalid asset namespace ${namespace} on chain ${chain}`);
202
- }
121
+ switch (assetNamespace) {
122
+ case AssetNamespace.ERC20:
123
+ case AssetNamespace.ERC721: {
124
+ assetReference = assetReference.toLowerCase();
203
125
  }
204
126
  }
127
+ return { chain, network, assetNamespace, assetReference };
205
128
  }
206
- throw new Error(`fromCAIP19: error parsing caip19: ${caip19}`);
129
+ throw new Error(`fromCAIP19: invalid CAIP19: ${caip19}`);
207
130
  };
208
131
  exports.fromCAIP19 = fromCAIP19;
@@ -18,7 +18,7 @@ export declare enum ChainReference {
18
18
  }
19
19
  declare type ToCAIP2Args = {
20
20
  chain: ChainTypes;
21
- network: NetworkTypes;
21
+ network: NetworkTypes | ChainReference;
22
22
  };
23
23
  export declare const toCAIP2: (args: ToCAIP2Args) => string;
24
24
  declare type FromCAIP2Return = {
package/dist/index.d.ts CHANGED
@@ -5,4 +5,4 @@ import * as caip19 from './caip19/caip19';
5
5
  export { adapters, caip2, caip19, caip10 };
6
6
  export { CAIP2 } from './caip2/caip2';
7
7
  export { CAIP10 } from './caip10/caip10';
8
- export { AssetNamespace, CAIP19 } from './caip19/caip19';
8
+ export { AssetNamespace, AssetReference, CAIP19 } from './caip19/caip19';
package/dist/index.js CHANGED
@@ -19,7 +19,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
19
19
  return result;
20
20
  };
21
21
  Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.AssetNamespace = exports.caip10 = exports.caip19 = exports.caip2 = exports.adapters = void 0;
22
+ exports.AssetReference = exports.AssetNamespace = exports.caip10 = exports.caip19 = exports.caip2 = exports.adapters = void 0;
23
23
  const adapters = __importStar(require("./adapters"));
24
24
  exports.adapters = adapters;
25
25
  const caip2 = __importStar(require("./caip2/caip2"));
@@ -30,3 +30,4 @@ const caip19 = __importStar(require("./caip19/caip19"));
30
30
  exports.caip19 = caip19;
31
31
  var caip19_1 = require("./caip19/caip19");
32
32
  Object.defineProperty(exports, "AssetNamespace", { enumerable: true, get: function () { return caip19_1.AssetNamespace; } });
33
+ Object.defineProperty(exports, "AssetReference", { enumerable: true, get: function () { return caip19_1.AssetReference; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shapeshiftoss/caip",
3
- "version": "1.13.0",
3
+ "version": "2.0.0",
4
4
  "description": "CAIP Implementation",
5
5
  "homepage": "",
6
6
  "license": "MIT",