sushi 6.6.6 → 6.6.7
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/_cjs/generic/utils/normalize-address.js +29 -1
- package/_cjs/generic/utils/normalize-address.js.map +1 -1
- package/_esm/generic/utils/normalize-address.js +29 -1
- package/_esm/generic/utils/normalize-address.js.map +1 -1
- package/_types/generic/utils/normalize-address.d.ts +2 -1
- package/_types/generic/utils/normalize-address.d.ts.map +1 -1
- package/generic/utils/normalize-address.test-d.ts +110 -0
- package/generic/utils/normalize-address.test.ts +29 -0
- package/generic/utils/normalize-address.ts +58 -16
- package/package.json +1 -1
|
@@ -2,15 +2,28 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.normalizeAddress = normalizeAddress;
|
|
4
4
|
const chains_js_1 = require("../../evm/chain/chains.js");
|
|
5
|
+
const token_js_1 = require("../../evm/currency/token.js");
|
|
5
6
|
const normalize_address_js_1 = require("../../evm/utils/normalize-address.js");
|
|
6
7
|
const chains_js_2 = require("../../mvm/chain/chains.js");
|
|
8
|
+
const token_js_2 = require("../../mvm/currency/token.js");
|
|
7
9
|
const normalize_address_js_2 = require("../../mvm/utils/normalize-address.js");
|
|
10
|
+
const address_js_1 = require("../../stellar/address.js");
|
|
8
11
|
const chains_js_3 = require("../../stellar/chain/chains.js");
|
|
9
12
|
const normalize_address_js_3 = require("../../stellar/utils/normalize-address.js");
|
|
10
13
|
const chains_js_4 = require("../../svm/chain/chains.js");
|
|
14
|
+
const token_js_3 = require("../../svm/currency/token.js");
|
|
11
15
|
const normalize_address_js_4 = require("../../svm/utils/normalize-address.js");
|
|
12
16
|
const assert_never_js_1 = require("./assert-never.js");
|
|
13
|
-
function normalizeAddress(
|
|
17
|
+
function normalizeAddress(chainIdOrAddress, address) {
|
|
18
|
+
if (address === undefined) {
|
|
19
|
+
if (typeof chainIdOrAddress !== 'string') {
|
|
20
|
+
throw new Error(`normalizeAddress, unsupported address: ${chainIdOrAddress}`);
|
|
21
|
+
}
|
|
22
|
+
return normalizeAddressByFormat(chainIdOrAddress);
|
|
23
|
+
}
|
|
24
|
+
return normalizeAddressByChainId(chainIdOrAddress, address);
|
|
25
|
+
}
|
|
26
|
+
function normalizeAddressByChainId(chainId, address) {
|
|
14
27
|
if ((0, chains_js_1.isEvmChainId)(chainId)) {
|
|
15
28
|
return (0, normalize_address_js_1.normalizeEvmAddress)(address);
|
|
16
29
|
}
|
|
@@ -25,4 +38,19 @@ function normalizeAddress(chainId, address) {
|
|
|
25
38
|
}
|
|
26
39
|
(0, assert_never_js_1.assertNever)(chainId, `normalizeAddress, unsupported chainId: ${chainId}`);
|
|
27
40
|
}
|
|
41
|
+
function normalizeAddressByFormat(address) {
|
|
42
|
+
if ((0, token_js_2.isMvmAddress)(address)) {
|
|
43
|
+
return (0, normalize_address_js_2.normalizeMvmAddress)(address);
|
|
44
|
+
}
|
|
45
|
+
if ((0, token_js_1.isEvmAddress)(address)) {
|
|
46
|
+
return (0, normalize_address_js_1.normalizeEvmAddress)(address);
|
|
47
|
+
}
|
|
48
|
+
if ((0, token_js_3.isSvmAddress)(address)) {
|
|
49
|
+
return (0, normalize_address_js_4.normalizeSvmAddress)(address);
|
|
50
|
+
}
|
|
51
|
+
if ((0, address_js_1.isStellarAddress)(address.toUpperCase())) {
|
|
52
|
+
return (0, normalize_address_js_3.normalizeStellarAddress)(address);
|
|
53
|
+
}
|
|
54
|
+
throw new Error(`normalizeAddress, unsupported address: ${address}`);
|
|
55
|
+
}
|
|
28
56
|
//# sourceMappingURL=normalize-address.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-address.js","sourceRoot":"","sources":["../../../generic/utils/normalize-address.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"normalize-address.js","sourceRoot":"","sources":["../../../generic/utils/normalize-address.ts"],"names":[],"mappings":";;AA2BA,4CAeC;AAzCD,yDAAwD;AACxD,0DAA2E;AAC3E,+EAA0E;AAE1E,yDAAwD;AACxD,0DAA0D;AAC1D,+EAA0E;AAC1E,yDAAgF;AAEhF,6DAAgE;AAChE,mFAAkF;AAElF,yDAAwD;AACxD,0DAA2E;AAC3E,+EAA0E;AAG1E,uDAA+C;AAS/C,SAAgB,gBAAgB,CAC9B,gBAA+C,EAC/C,OAA6B;IAE7B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACb,0CAA0C,gBAAgB,EAAE,CAC7D,CAAA;QACH,CAAC;QAED,OAAO,wBAAwB,CAAC,gBAAgB,CAAC,CAAA;IACnD,CAAC;IAED,OAAO,yBAAyB,CAAC,gBAA2B,EAAE,OAAO,CAAC,CAAA;AACxE,CAAC;AAED,SAAS,yBAAyB,CAChC,OAAgB,EAChB,OAA4B;IAE5B,IAAI,IAAA,wBAAY,EAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAA,0CAAmB,EAAC,OAAiC,CAAC,CAAA;IAC/D,CAAC;IAED,IAAI,IAAA,wBAAY,EAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAA,0CAAmB,EAAC,OAAiC,CAAC,CAAA;IAC/D,CAAC;IAED,IAAI,IAAA,wBAAY,EAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAA,0CAAmB,EAAC,OAAiC,CAAC,CAAA;IAC/D,CAAC;IAED,IAAI,IAAA,4BAAgB,EAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAA,8CAAuB,EAAC,OAAqC,CAAC,CAAA;IACvE,CAAC;IAED,IAAA,6BAAW,EAAC,OAAO,EAAE,0CAA0C,OAAO,EAAE,CAAC,CAAA;AAC3E,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAA4B;IAE5B,IAAI,IAAA,uBAAY,EAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAA,0CAAmB,EAAC,OAAO,CAAC,CAAA;IACrC,CAAC;IAED,IAAI,IAAA,uBAAY,EAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAA,0CAAmB,EAAC,OAAqB,CAAC,CAAA;IACnD,CAAC;IAED,IAAI,IAAA,uBAAY,EAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAA,0CAAmB,EAAC,OAAqB,CAAC,CAAA;IACnD,CAAC;IAED,IAAI,IAAA,6BAAgB,EAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QAC5C,OAAO,IAAA,8CAAuB,EAAC,OAAyB,CAAC,CAAA;IAC3D,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,0CAA0C,OAAO,EAAE,CAAC,CAAA;AACtE,CAAC"}
|
|
@@ -1,13 +1,26 @@
|
|
|
1
1
|
import { isEvmChainId } from '../../evm/chain/chains.js';
|
|
2
|
+
import { isEvmAddress } from '../../evm/currency/token.js';
|
|
2
3
|
import { normalizeEvmAddress } from '../../evm/utils/normalize-address.js';
|
|
3
4
|
import { isMvmChainId } from '../../mvm/chain/chains.js';
|
|
5
|
+
import { isMvmAddress } from '../../mvm/currency/token.js';
|
|
4
6
|
import { normalizeMvmAddress } from '../../mvm/utils/normalize-address.js';
|
|
7
|
+
import { isStellarAddress } from '../../stellar/address.js';
|
|
5
8
|
import { isStellarChainId } from '../../stellar/chain/chains.js';
|
|
6
9
|
import { normalizeStellarAddress } from '../../stellar/utils/normalize-address.js';
|
|
7
10
|
import { isSvmChainId } from '../../svm/chain/chains.js';
|
|
11
|
+
import { isSvmAddress } from '../../svm/currency/token.js';
|
|
8
12
|
import { normalizeSvmAddress } from '../../svm/utils/normalize-address.js';
|
|
9
13
|
import { assertNever } from './assert-never.js';
|
|
10
|
-
export function normalizeAddress(
|
|
14
|
+
export function normalizeAddress(chainIdOrAddress, address) {
|
|
15
|
+
if (address === undefined) {
|
|
16
|
+
if (typeof chainIdOrAddress !== 'string') {
|
|
17
|
+
throw new Error(`normalizeAddress, unsupported address: ${chainIdOrAddress}`);
|
|
18
|
+
}
|
|
19
|
+
return normalizeAddressByFormat(chainIdOrAddress);
|
|
20
|
+
}
|
|
21
|
+
return normalizeAddressByChainId(chainIdOrAddress, address);
|
|
22
|
+
}
|
|
23
|
+
function normalizeAddressByChainId(chainId, address) {
|
|
11
24
|
if (isEvmChainId(chainId)) {
|
|
12
25
|
return normalizeEvmAddress(address);
|
|
13
26
|
}
|
|
@@ -22,4 +35,19 @@ export function normalizeAddress(chainId, address) {
|
|
|
22
35
|
}
|
|
23
36
|
assertNever(chainId, `normalizeAddress, unsupported chainId: ${chainId}`);
|
|
24
37
|
}
|
|
38
|
+
function normalizeAddressByFormat(address) {
|
|
39
|
+
if (isMvmAddress(address)) {
|
|
40
|
+
return normalizeMvmAddress(address);
|
|
41
|
+
}
|
|
42
|
+
if (isEvmAddress(address)) {
|
|
43
|
+
return normalizeEvmAddress(address);
|
|
44
|
+
}
|
|
45
|
+
if (isSvmAddress(address)) {
|
|
46
|
+
return normalizeSvmAddress(address);
|
|
47
|
+
}
|
|
48
|
+
if (isStellarAddress(address.toUpperCase())) {
|
|
49
|
+
return normalizeStellarAddress(address);
|
|
50
|
+
}
|
|
51
|
+
throw new Error(`normalizeAddress, unsupported address: ${address}`);
|
|
52
|
+
}
|
|
25
53
|
//# sourceMappingURL=normalize-address.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-address.js","sourceRoot":"","sources":["../../../generic/utils/normalize-address.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;
|
|
1
|
+
{"version":3,"file":"normalize-address.js","sourceRoot":"","sources":["../../../generic/utils/normalize-address.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAmB,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAC1E,OAAO,EAAE,gBAAgB,EAAuB,MAAM,0BAA0B,CAAA;AAEhF,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAA;AAElF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,YAAY,EAAmB,MAAM,6BAA6B,CAAA;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAG1E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAS/C,MAAM,UAAU,gBAAgB,CAC9B,gBAA+C,EAC/C,OAA6B;IAE7B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACb,0CAA0C,gBAAgB,EAAE,CAC7D,CAAA;QACH,CAAC;QAED,OAAO,wBAAwB,CAAC,gBAAgB,CAAC,CAAA;IACnD,CAAC;IAED,OAAO,yBAAyB,CAAC,gBAA2B,EAAE,OAAO,CAAC,CAAA;AACxE,CAAC;AAED,SAAS,yBAAyB,CAChC,OAAgB,EAChB,OAA4B;IAE5B,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,mBAAmB,CAAC,OAAiC,CAAC,CAAA;IAC/D,CAAC;IAED,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,mBAAmB,CAAC,OAAiC,CAAC,CAAA;IAC/D,CAAC;IAED,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,mBAAmB,CAAC,OAAiC,CAAC,CAAA;IAC/D,CAAC;IAED,IAAI,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,uBAAuB,CAAC,OAAqC,CAAC,CAAA;IACvE,CAAC;IAED,WAAW,CAAC,OAAO,EAAE,0CAA0C,OAAO,EAAE,CAAC,CAAA;AAC3E,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAA4B;IAE5B,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAA;IACrC,CAAC;IAED,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,mBAAmB,CAAC,OAAqB,CAAC,CAAA;IACnD,CAAC;IAED,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,mBAAmB,CAAC,OAAqB,CAAC,CAAA;IACnD,CAAC;IAED,IAAI,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QAC5C,OAAO,uBAAuB,CAAC,OAAyB,CAAC,CAAA;IAC3D,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,0CAA0C,OAAO,EAAE,CAAC,CAAA;AACtE,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ChainId } from '../chain/chains.js';
|
|
2
2
|
import type { AddressFor } from '../types/for-chain.js';
|
|
3
|
-
export declare function normalizeAddress<
|
|
3
|
+
export declare function normalizeAddress<TAddress extends AddressFor<ChainId>>(address: TAddress): TAddress;
|
|
4
|
+
export declare function normalizeAddress<TChainId extends ChainId, TAddress extends AddressFor<TChainId>>(chainId: TChainId, address: TAddress): TAddress;
|
|
4
5
|
//# sourceMappingURL=normalize-address.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-address.d.ts","sourceRoot":"","sources":["../../../generic/utils/normalize-address.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"normalize-address.d.ts","sourceRoot":"","sources":["../../../generic/utils/normalize-address.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAGvD,wBAAgB,gBAAgB,CAAC,QAAQ,SAAS,UAAU,CAAC,OAAO,CAAC,EACnE,OAAO,EAAE,QAAQ,GAChB,QAAQ,CAAA;AACX,wBAAgB,gBAAgB,CAC9B,QAAQ,SAAS,OAAO,EACxB,QAAQ,SAAS,UAAU,CAAC,QAAQ,CAAC,EACrC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAA"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { describe, expectTypeOf, it } from 'vitest'
|
|
2
|
+
import { EvmChainId } from '../../evm/chain/chains.js'
|
|
3
|
+
import type { EvmAddress } from '../../evm/currency/token.js'
|
|
4
|
+
import type { MvmAddress } from '../../mvm/currency/token.js'
|
|
5
|
+
import type {
|
|
6
|
+
StellarAccountAddress,
|
|
7
|
+
StellarContractAddress,
|
|
8
|
+
} from '../../stellar/address.js'
|
|
9
|
+
import { StellarChainId } from '../../stellar/chain/chains.js'
|
|
10
|
+
import { SvmChainId } from '../../svm/chain/chains.js'
|
|
11
|
+
import type { SvmAddress } from '../../svm/currency/token.js'
|
|
12
|
+
import { normalizeAddress } from './normalize-address.js'
|
|
13
|
+
|
|
14
|
+
describe('normalizeAddress types', () => {
|
|
15
|
+
it('preserves EVM address types', () => {
|
|
16
|
+
const address = '0x0000000000000000000000000000000000000000' as EvmAddress
|
|
17
|
+
|
|
18
|
+
expectTypeOf(
|
|
19
|
+
normalizeAddress(EvmChainId.ETHEREUM, address),
|
|
20
|
+
).toEqualTypeOf<EvmAddress>()
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
it('preserves SVM address types', () => {
|
|
24
|
+
const address = 'So11111111111111111111111111111111111111112' as SvmAddress
|
|
25
|
+
|
|
26
|
+
expectTypeOf(
|
|
27
|
+
normalizeAddress(SvmChainId.SOLANA, address),
|
|
28
|
+
).toEqualTypeOf<SvmAddress>()
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
it('preserves Stellar account and contract address types', () => {
|
|
32
|
+
const accountAddress =
|
|
33
|
+
'GAAZI4TCR3TY5OJHCTJC2A4QSY6CJWJH5IAJTGKIN2ER7LBNVKOCCWN7' as StellarAccountAddress
|
|
34
|
+
const contractAddress =
|
|
35
|
+
'CCRSMJDITH3VK5QOGYCVZDAKIY5GL3RCG4TCVLIAVB662IW2V5KJGZGF' as StellarContractAddress
|
|
36
|
+
|
|
37
|
+
expectTypeOf(
|
|
38
|
+
normalizeAddress(StellarChainId.STELLAR, accountAddress),
|
|
39
|
+
).toEqualTypeOf<StellarAccountAddress>()
|
|
40
|
+
expectTypeOf(
|
|
41
|
+
normalizeAddress(StellarChainId.STELLAR, contractAddress),
|
|
42
|
+
).toEqualTypeOf<StellarContractAddress>()
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
it('preserves same-chain address unions', () => {
|
|
46
|
+
function normalizeStellarUnion(
|
|
47
|
+
address: StellarAccountAddress | StellarContractAddress,
|
|
48
|
+
) {
|
|
49
|
+
expectTypeOf(
|
|
50
|
+
normalizeAddress(StellarChainId.STELLAR, address),
|
|
51
|
+
).toEqualTypeOf<StellarAccountAddress | StellarContractAddress>()
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
expectTypeOf(normalizeStellarUnion).returns.toEqualTypeOf<void>()
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
it('preserves cross-chain address unions', () => {
|
|
58
|
+
function normalizeEvmOrSvmUnion(
|
|
59
|
+
chainId: typeof EvmChainId.ETHEREUM | typeof SvmChainId.SOLANA,
|
|
60
|
+
address: EvmAddress | SvmAddress,
|
|
61
|
+
) {
|
|
62
|
+
expectTypeOf(normalizeAddress(chainId, address)).toEqualTypeOf<
|
|
63
|
+
EvmAddress | SvmAddress
|
|
64
|
+
>()
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
expectTypeOf(normalizeEvmOrSvmUnion).returns.toEqualTypeOf<void>()
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
it('preserves address types without chain ids', () => {
|
|
71
|
+
const evmAddress =
|
|
72
|
+
'0x0000000000000000000000000000000000000000' as EvmAddress
|
|
73
|
+
const mvmAddress = '0x1::coin::T' as MvmAddress
|
|
74
|
+
const svmAddress =
|
|
75
|
+
'So11111111111111111111111111111111111111112' as SvmAddress
|
|
76
|
+
const stellarAccountAddress =
|
|
77
|
+
'GAAZI4TCR3TY5OJHCTJC2A4QSY6CJWJH5IAJTGKIN2ER7LBNVKOCCWN7' as StellarAccountAddress
|
|
78
|
+
const stellarContractAddress =
|
|
79
|
+
'CCRSMJDITH3VK5QOGYCVZDAKIY5GL3RCG4TCVLIAVB662IW2V5KJGZGF' as StellarContractAddress
|
|
80
|
+
|
|
81
|
+
expectTypeOf(normalizeAddress(evmAddress)).toEqualTypeOf<EvmAddress>()
|
|
82
|
+
expectTypeOf(normalizeAddress(mvmAddress)).toEqualTypeOf<MvmAddress>()
|
|
83
|
+
expectTypeOf(normalizeAddress(svmAddress)).toEqualTypeOf<SvmAddress>()
|
|
84
|
+
expectTypeOf(
|
|
85
|
+
normalizeAddress(stellarAccountAddress),
|
|
86
|
+
).toEqualTypeOf<StellarAccountAddress>()
|
|
87
|
+
expectTypeOf(
|
|
88
|
+
normalizeAddress(stellarContractAddress),
|
|
89
|
+
).toEqualTypeOf<StellarContractAddress>()
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
it('preserves address unions without chain ids', () => {
|
|
93
|
+
function normalizeStellarUnion(
|
|
94
|
+
address: StellarAccountAddress | StellarContractAddress,
|
|
95
|
+
) {
|
|
96
|
+
expectTypeOf(normalizeAddress(address)).toEqualTypeOf<
|
|
97
|
+
StellarAccountAddress | StellarContractAddress
|
|
98
|
+
>()
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function normalizeEvmOrSvmUnion(address: EvmAddress | SvmAddress) {
|
|
102
|
+
expectTypeOf(normalizeAddress(address)).toEqualTypeOf<
|
|
103
|
+
EvmAddress | SvmAddress
|
|
104
|
+
>()
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
expectTypeOf(normalizeStellarUnion).returns.toEqualTypeOf<void>()
|
|
108
|
+
expectTypeOf(normalizeEvmOrSvmUnion).returns.toEqualTypeOf<void>()
|
|
109
|
+
})
|
|
110
|
+
})
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
import type { EvmAddress } from '../../evm/currency/token.js'
|
|
3
|
+
import type { MvmAddress } from '../../mvm/currency/token.js'
|
|
4
|
+
import type { StellarContractAddress } from '../../stellar/address.js'
|
|
5
|
+
import type { SvmAddress } from '../../svm/currency/token.js'
|
|
6
|
+
import { normalizeAddress } from './normalize-address.js'
|
|
7
|
+
|
|
8
|
+
describe('normalizeAddress', () => {
|
|
9
|
+
it('normalizes addresses without chain ids by address format', () => {
|
|
10
|
+
expect(
|
|
11
|
+
normalizeAddress(
|
|
12
|
+
'0x000000000000000000000000000000000000dEaD' as EvmAddress,
|
|
13
|
+
),
|
|
14
|
+
).toBe('0x000000000000000000000000000000000000dead')
|
|
15
|
+
|
|
16
|
+
const mvmAddress = '0xABC::Coin::T' as MvmAddress
|
|
17
|
+
expect(normalizeAddress(mvmAddress)).toBe(mvmAddress)
|
|
18
|
+
|
|
19
|
+
const svmAddress =
|
|
20
|
+
'So11111111111111111111111111111111111111112' as SvmAddress
|
|
21
|
+
expect(normalizeAddress(svmAddress)).toBe(svmAddress)
|
|
22
|
+
|
|
23
|
+
expect(
|
|
24
|
+
normalizeAddress(
|
|
25
|
+
'ccrsmjdith3vk5qogycvzdakiy5gl3rcg4tcvliavb662iw2v5kjgzgf' as StellarContractAddress,
|
|
26
|
+
),
|
|
27
|
+
).toBe('CCRSMJDITH3VK5QOGYCVZDAKIY5GL3RCG4TCVLIAVB662IW2V5KJGZGF')
|
|
28
|
+
})
|
|
29
|
+
})
|
|
@@ -1,46 +1,88 @@
|
|
|
1
1
|
import type { EvmChainId } from '../../evm/chain/chains.js'
|
|
2
2
|
import { isEvmChainId } from '../../evm/chain/chains.js'
|
|
3
|
+
import { type EvmAddress, isEvmAddress } from '../../evm/currency/token.js'
|
|
3
4
|
import { normalizeEvmAddress } from '../../evm/utils/normalize-address.js'
|
|
4
5
|
import type { MvmChainId } from '../../mvm/chain/chains.js'
|
|
5
6
|
import { isMvmChainId } from '../../mvm/chain/chains.js'
|
|
7
|
+
import { isMvmAddress } from '../../mvm/currency/token.js'
|
|
6
8
|
import { normalizeMvmAddress } from '../../mvm/utils/normalize-address.js'
|
|
9
|
+
import { isStellarAddress, type StellarAddress } from '../../stellar/address.js'
|
|
7
10
|
import type { StellarChainId } from '../../stellar/chain/chains.js'
|
|
8
11
|
import { isStellarChainId } from '../../stellar/chain/chains.js'
|
|
9
12
|
import { normalizeStellarAddress } from '../../stellar/utils/normalize-address.js'
|
|
10
13
|
import type { SvmChainId } from '../../svm/chain/chains.js'
|
|
11
14
|
import { isSvmChainId } from '../../svm/chain/chains.js'
|
|
15
|
+
import { isSvmAddress, type SvmAddress } from '../../svm/currency/token.js'
|
|
12
16
|
import { normalizeSvmAddress } from '../../svm/utils/normalize-address.js'
|
|
13
17
|
import type { ChainId } from '../chain/chains.js'
|
|
14
18
|
import type { AddressFor } from '../types/for-chain.js'
|
|
15
19
|
import { assertNever } from './assert-never.js'
|
|
16
20
|
|
|
17
|
-
export function normalizeAddress<
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
export function normalizeAddress<TAddress extends AddressFor<ChainId>>(
|
|
22
|
+
address: TAddress,
|
|
23
|
+
): TAddress
|
|
24
|
+
export function normalizeAddress<
|
|
25
|
+
TChainId extends ChainId,
|
|
26
|
+
TAddress extends AddressFor<TChainId>,
|
|
27
|
+
>(chainId: TChainId, address: TAddress): TAddress
|
|
28
|
+
export function normalizeAddress(
|
|
29
|
+
chainIdOrAddress: ChainId | AddressFor<ChainId>,
|
|
30
|
+
address?: AddressFor<ChainId>,
|
|
31
|
+
): AddressFor<ChainId> {
|
|
32
|
+
if (address === undefined) {
|
|
33
|
+
if (typeof chainIdOrAddress !== 'string') {
|
|
34
|
+
throw new Error(
|
|
35
|
+
`normalizeAddress, unsupported address: ${chainIdOrAddress}`,
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return normalizeAddressByFormat(chainIdOrAddress)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return normalizeAddressByChainId(chainIdOrAddress as ChainId, address)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function normalizeAddressByChainId(
|
|
46
|
+
chainId: ChainId,
|
|
47
|
+
address: AddressFor<ChainId>,
|
|
48
|
+
) {
|
|
21
49
|
if (isEvmChainId(chainId)) {
|
|
22
|
-
return normalizeEvmAddress(
|
|
23
|
-
address as AddressFor<EvmChainId>,
|
|
24
|
-
) as AddressFor<TChainId>
|
|
50
|
+
return normalizeEvmAddress(address as AddressFor<EvmChainId>)
|
|
25
51
|
}
|
|
26
52
|
|
|
27
53
|
if (isMvmChainId(chainId)) {
|
|
28
|
-
return normalizeMvmAddress(
|
|
29
|
-
address as AddressFor<MvmChainId>,
|
|
30
|
-
) as AddressFor<TChainId>
|
|
54
|
+
return normalizeMvmAddress(address as AddressFor<MvmChainId>)
|
|
31
55
|
}
|
|
32
56
|
|
|
33
57
|
if (isSvmChainId(chainId)) {
|
|
34
|
-
return normalizeSvmAddress(
|
|
35
|
-
address as AddressFor<SvmChainId>,
|
|
36
|
-
) as AddressFor<TChainId>
|
|
58
|
+
return normalizeSvmAddress(address as AddressFor<SvmChainId>)
|
|
37
59
|
}
|
|
38
60
|
|
|
39
61
|
if (isStellarChainId(chainId)) {
|
|
40
|
-
return normalizeStellarAddress(
|
|
41
|
-
address as AddressFor<StellarChainId>,
|
|
42
|
-
) as AddressFor<TChainId>
|
|
62
|
+
return normalizeStellarAddress(address as AddressFor<StellarChainId>)
|
|
43
63
|
}
|
|
44
64
|
|
|
45
65
|
assertNever(chainId, `normalizeAddress, unsupported chainId: ${chainId}`)
|
|
46
66
|
}
|
|
67
|
+
|
|
68
|
+
function normalizeAddressByFormat(
|
|
69
|
+
address: AddressFor<ChainId>,
|
|
70
|
+
): AddressFor<ChainId> {
|
|
71
|
+
if (isMvmAddress(address)) {
|
|
72
|
+
return normalizeMvmAddress(address)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (isEvmAddress(address)) {
|
|
76
|
+
return normalizeEvmAddress(address as EvmAddress)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (isSvmAddress(address)) {
|
|
80
|
+
return normalizeSvmAddress(address as SvmAddress)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (isStellarAddress(address.toUpperCase())) {
|
|
84
|
+
return normalizeStellarAddress(address as StellarAddress)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
throw new Error(`normalizeAddress, unsupported address: ${address}`)
|
|
88
|
+
}
|