multichain-address-validator 0.0.1 → 0.7.1
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 +1 -1
- package/dist/chain-validators.d.ts +1 -1
- package/dist/chain-validators.js +20 -2
- package/dist/multichain-address-validator.d.ts +2 -1
- package/dist/multichain-address-validator.js +3 -3
- package/dist/validators/hedera_validator.d.ts +5 -0
- package/dist/validators/hedera_validator.js +8 -0
- package/dist/validators/index.d.ts +2 -0
- package/dist/validators/index.js +2 -0
- package/dist/validators/move_validator.d.ts +5 -0
- package/dist/validators/move_validator.js +8 -0
- package/dist/validators/ripple_validator.js +5 -1
- package/dist/validators/xlm_validator.d.ts +2 -1
- package/dist/validators/xlm_validator.js +11 -5
- package/package-lock.json +1295 -0
- package/package.json +4 -6
- package/src/chain-validators.ts +23 -2
- package/src/multichain-address-validator.ts +6 -4
- package/src/validators/hedera_validator.ts +10 -0
- package/src/validators/index.ts +2 -0
- package/src/validators/move_validator.ts +11 -0
- package/src/validators/ripple_validator.ts +6 -2
- package/src/validators/xlm_validator.ts +13 -5
- package/test/addresses/addresses.ts +10 -0
- package/test/addresses/aptos.json +6 -0
- package/test/addresses/bch.json +0 -5
- package/test/addresses/btc-testnet.json +5 -0
- package/test/addresses/btc.json +5 -5
- package/test/addresses/doge-testnet.json +3 -0
- package/test/addresses/doge.json +0 -1
- package/test/addresses/evm.json +0 -1
- package/test/addresses/hbar.json +11 -0
- package/test/addresses/monero-testnet.json +5 -0
- package/test/addresses/ripple.json +4 -0
- package/test/addresses/sia.json +0 -1
- package/test/addresses/sui.json +6 -0
- package/test/addresses/xlm.json +5 -1
- package/test/multichain-address-validator.test.ts +28 -1438
- package/tsconfig.json +1 -1
- package/config/esbuild.inject.js +0 -1
- package/config/esbuild.ts +0 -14
- package/dist/multichain-address-validator.bundle.min.js +0 -17
- package/test/addresses/invalid.json +0 -15
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# multichain address validator
|
|
2
2
|
Simple blockchain address validator for validating Bitcoin and other blockchain addresses **Node.js and browser**.
|
|
3
3
|
|
|
4
|
-
[](https://travis-ci.org/christsim/multichain-address-validator)
|
|
5
5
|
|
|
6
6
|
## Installation
|
|
7
7
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Chain, Validator } from './types.js';
|
|
1
|
+
import type { Chain, Validator } from './types.js';
|
|
2
2
|
export declare function getValidatorForChain(chain: Chain): Validator | undefined;
|
package/dist/chain-validators.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { NetworkType } from './types.js';
|
|
2
|
-
import { AlgorandValidator, BCHValidator, BTCValidator, CardanoValidator, EOSValidator, ETHValidator, MoneroValidator, NanoValidator, NemValidator, PolkadotValidator, RippleValidator, SiaValidator, SolanaValidator, TezosValidator, TronValidator, XLMValidator, } from './validators/index.js';
|
|
2
|
+
import { AlgorandValidator, BCHValidator, BTCValidator, CardanoValidator, EOSValidator, ETHValidator, HederaValidator, MoneroValidator, MoveValidator, NanoValidator, NemValidator, PolkadotValidator, RippleValidator, SiaValidator, SolanaValidator, TezosValidator, TronValidator, XLMValidator, } from './validators/index.js';
|
|
3
3
|
const chainValidators = {
|
|
4
4
|
algorand: { validator: AlgorandValidator },
|
|
5
|
+
aptos: { validator: MoveValidator },
|
|
5
6
|
bitcoin: {
|
|
6
7
|
alternatives: ['btc', 'omni'],
|
|
7
8
|
validator: {
|
|
@@ -43,9 +44,25 @@ const chainValidators = {
|
|
|
43
44
|
},
|
|
44
45
|
eos: { validator: EOSValidator },
|
|
45
46
|
ethereum: {
|
|
46
|
-
alternatives: [
|
|
47
|
+
alternatives: [
|
|
48
|
+
'arbitrum',
|
|
49
|
+
'avalanche',
|
|
50
|
+
'avalanche-c',
|
|
51
|
+
'base',
|
|
52
|
+
'binance',
|
|
53
|
+
'bnb',
|
|
54
|
+
'bsc',
|
|
55
|
+
'eth',
|
|
56
|
+
'erc20',
|
|
57
|
+
'flare',
|
|
58
|
+
'sonic',
|
|
59
|
+
],
|
|
47
60
|
validator: ETHValidator
|
|
48
61
|
},
|
|
62
|
+
hedera: {
|
|
63
|
+
alternatives: ['hbar'],
|
|
64
|
+
validator: HederaValidator
|
|
65
|
+
},
|
|
49
66
|
litecoin: {
|
|
50
67
|
alternatives: ['ltc'],
|
|
51
68
|
validator: {
|
|
@@ -77,6 +94,7 @@ const chainValidators = {
|
|
|
77
94
|
alternatives: ['spl'],
|
|
78
95
|
validator: SolanaValidator,
|
|
79
96
|
},
|
|
97
|
+
sui: { validator: MoveValidator },
|
|
80
98
|
tron: {
|
|
81
99
|
alternatives: ['trc20'],
|
|
82
100
|
validator: TronValidator(),
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { getValidatorForChain } from './chain-validators.js';
|
|
2
2
|
export function validate(address, chain) {
|
|
3
3
|
const validator = getValidatorForChain(chain);
|
|
4
|
-
if (validator) {
|
|
5
|
-
|
|
4
|
+
if (!validator) {
|
|
5
|
+
throw new Error(`Missing validator for chain: ${chain}`);
|
|
6
6
|
}
|
|
7
|
-
|
|
7
|
+
return validator.isValidAddress(address);
|
|
8
8
|
}
|
|
@@ -4,7 +4,9 @@ export { default as BTCValidator } from "./bitcoin_validator.js";
|
|
|
4
4
|
export { default as CardanoValidator } from "./cardano_validator.js";
|
|
5
5
|
export { default as EOSValidator } from "./eos_validator.js";
|
|
6
6
|
export { default as ETHValidator } from "./ethereum_validator.js";
|
|
7
|
+
export { default as HederaValidator } from "./hedera_validator.js";
|
|
7
8
|
export { default as MoneroValidator } from "./monero_validator.js";
|
|
9
|
+
export { default as MoveValidator } from "./move_validator.js";
|
|
8
10
|
export { default as NemValidator } from "./nem_validator.js";
|
|
9
11
|
export { default as NanoValidator } from "./nano_validator.js";
|
|
10
12
|
export { default as PolkadotValidator } from "./polkadot_validator.js";
|
package/dist/validators/index.js
CHANGED
|
@@ -4,7 +4,9 @@ export { default as BTCValidator } from "./bitcoin_validator.js";
|
|
|
4
4
|
export { default as CardanoValidator } from "./cardano_validator.js";
|
|
5
5
|
export { default as EOSValidator } from "./eos_validator.js";
|
|
6
6
|
export { default as ETHValidator } from "./ethereum_validator.js";
|
|
7
|
+
export { default as HederaValidator } from "./hedera_validator.js";
|
|
7
8
|
export { default as MoneroValidator } from "./monero_validator.js";
|
|
9
|
+
export { default as MoveValidator } from "./move_validator.js";
|
|
8
10
|
export { default as NemValidator } from "./nem_validator.js";
|
|
9
11
|
export { default as NanoValidator } from "./nano_validator.js";
|
|
10
12
|
export { default as PolkadotValidator } from "./polkadot_validator.js";
|
|
@@ -15,7 +15,11 @@ export default {
|
|
|
15
15
|
return validAddress && this.verifyMemo(destinationTag);
|
|
16
16
|
},
|
|
17
17
|
verifyMemo(destinationTag) {
|
|
18
|
-
|
|
18
|
+
if (!destinationTag)
|
|
19
|
+
return true; // Optional
|
|
20
|
+
const tagNumber = Number(destinationTag);
|
|
21
|
+
// A destination tag is a 32-bit unsigned integer.
|
|
22
|
+
return /^[0-9]+$/.test(destinationTag) && tagNumber >= 0 && tagNumber <= 4294967295;
|
|
19
23
|
},
|
|
20
24
|
verifyChecksum: function (address) {
|
|
21
25
|
const bytes = codec.decode(address);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Address } from '../types.js';
|
|
2
2
|
declare const _default: {
|
|
3
|
-
isValidAddress(address: Address)
|
|
3
|
+
isValidAddress: (address: Address) => any;
|
|
4
|
+
verifyMemo(memo: string | null): boolean;
|
|
4
5
|
verifyChecksum: (address: string) => boolean;
|
|
5
6
|
};
|
|
6
7
|
export default _default;
|
|
@@ -12,12 +12,18 @@ function swap16(number) {
|
|
|
12
12
|
return (lower << 8) | upper;
|
|
13
13
|
}
|
|
14
14
|
export default {
|
|
15
|
-
isValidAddress(address) {
|
|
15
|
+
isValidAddress: function (address) {
|
|
16
16
|
const addr = getAddress(address);
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
const destinationTag = address.destinationTag;
|
|
18
|
+
const validAddress = regexp.test(addr) && this.verifyChecksum(addr);
|
|
19
|
+
return validAddress && this.verifyMemo(destinationTag);
|
|
20
|
+
},
|
|
21
|
+
verifyMemo(memo) {
|
|
22
|
+
if (!memo)
|
|
23
|
+
return true; // Optional
|
|
24
|
+
// Ensure it's a valid UTF-8 string and does not exceed 28 bytes
|
|
25
|
+
const encoder = new TextEncoder();
|
|
26
|
+
return encoder.encode(memo).length <= 28;
|
|
21
27
|
},
|
|
22
28
|
verifyChecksum: function (address) {
|
|
23
29
|
// based on https://github.com/stellar/js-stellar-base/blob/master/src/strkey.js#L126
|