Skip to content

Commit 8b22bb4

Browse files
committed
feat: add additional CAIP-19 types and parsing functions to align with proposal
1 parent a5886d3 commit 8b22bb4

6 files changed

+671
-28
lines changed

src/__fixtures__/caip-types.ts

+34
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,37 @@ export const CAIP_ACCOUNT_ID_FIXTURES = [
3333
export const CAIP_ACCOUNT_ADDRESS_FIXTURES = Array.from(
3434
new Set(CAIP_ACCOUNT_ID_FIXTURES.map((value) => value.split(':')[2])),
3535
);
36+
37+
export const CAIP_ASSET_ID_FIXTURES = [
38+
'eip155:1/slip44:60',
39+
'eip155:1/erc20:0x6b175474e89094c44da98b954eedeac495271d0f',
40+
'eip155:1/erc721:0x06012c8cf97BEaD5deAe237070F9587f8E7A266d/771769',
41+
'bip122:000000000019d6689c085ae165831e93/slip44:0',
42+
'bip122:12a765e31ffd4059bada1e25190f6e98/slip44:2',
43+
'cosmos:cosmoshub-3/slip44:118',
44+
'cosmos:Binance-Chain-Tigris/slip44:714',
45+
'lip9:9ee11e9df416b18b/slip44:134',
46+
'hedera:mainnet/nft:0.0.55492/12',
47+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/nft:Fz6LxeUg5qjesYX3BdmtTwyyzBtMxk644XiTqU5W3w9w',
48+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
49+
] as const;
50+
51+
export const CAIP_ASSET_NAMESPACE_FIXTURES = Array.from(
52+
new Set(
53+
CAIP_ASSET_ID_FIXTURES.map((value) => value.split('/')[1]?.split(':')[0]),
54+
),
55+
);
56+
57+
export const CAIP_ASSET_REFERENCE_FIXTURES = Array.from(
58+
new Set(
59+
CAIP_ASSET_ID_FIXTURES.map((value) => value.split('/')[1]?.split(':')[1]),
60+
),
61+
);
62+
63+
export const CAIP_ASSET_TYPE_FIXTURES = Array.from(
64+
new Set(
65+
CAIP_ASSET_ID_FIXTURES.map((value) =>
66+
value.split('/').slice(0, 2).join('/'),
67+
),
68+
),
69+
);

src/caip-types.test-d.ts

+44
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ import { expectAssignable, expectNotAssignable } from 'tsd';
33
import type {
44
CaipAccountAddress,
55
CaipAccountId,
6+
CaipAssetId,
7+
CaipAssetNamespace,
8+
CaipAssetReference,
9+
CaipAssetType,
610
CaipChainId,
711
CaipNamespace,
812
CaipReference,
@@ -33,6 +37,36 @@ expectAssignable<CaipAccountId>(
3337
expectAssignable<CaipAccountAddress>('string');
3438
expectAssignable<CaipAccountAddress>(`${embeddedString}`);
3539

40+
expectAssignable<CaipAssetNamespace>('string');
41+
expectAssignable<CaipAssetNamespace>(`${embeddedString}`);
42+
43+
expectAssignable<CaipAssetReference>('string');
44+
expectAssignable<CaipAssetReference>(`${embeddedString}`);
45+
46+
expectAssignable<CaipAssetType>(
47+
'namespace:reference/assetNamespace:assetReference',
48+
);
49+
expectAssignable<CaipAssetType>('namespace:reference/:');
50+
expectAssignable<CaipAssetType>(':reference/assetNamespace:');
51+
expectAssignable<CaipAssetType>(
52+
`${embeddedString}:${embeddedString}/${embeddedString}:${embeddedString}`,
53+
);
54+
55+
expectAssignable<CaipAssetId>(
56+
'namespace:reference/assetNamespace:assetReference',
57+
);
58+
expectAssignable<CaipAssetId>(
59+
'namespace:reference/assetNamespace:assetReference/tokenId',
60+
);
61+
expectAssignable<CaipAssetId>('namespace:reference/:assetReference/');
62+
expectAssignable<CaipAssetId>(':reference/assetNamespace:');
63+
expectAssignable<CaipAssetId>(
64+
`${embeddedString}:${embeddedString}/${embeddedString}:${embeddedString}`,
65+
);
66+
expectAssignable<CaipAssetId>(
67+
`${embeddedString}:${embeddedString}/${embeddedString}:${embeddedString}/${embeddedString}`,
68+
);
69+
3670
// Not valid caip strings:
3771

3872
expectAssignable<CaipChainId>('namespace:😀');
@@ -50,3 +84,13 @@ expectNotAssignable<CaipAccountId>(0);
5084
expectNotAssignable<CaipAccountId>('🙃');
5185

5286
expectNotAssignable<CaipAccountAddress>(0);
87+
88+
expectNotAssignable<CaipAssetNamespace>(0);
89+
90+
expectNotAssignable<CaipAssetReference>(0);
91+
92+
expectNotAssignable<CaipAssetType>(0);
93+
expectNotAssignable<CaipAssetType>('🙃');
94+
95+
expectNotAssignable<CaipAssetId>(0);
96+
expectNotAssignable<CaipAssetId>('🙃');

0 commit comments

Comments
 (0)