multichain-address-validator 0.0.1 → 0.7.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.
Files changed (40) hide show
  1. package/README.md +1 -1
  2. package/dist/chain-validators.d.ts +1 -1
  3. package/dist/chain-validators.js +7 -1
  4. package/dist/validators/hedera_validator.d.ts +5 -0
  5. package/dist/validators/hedera_validator.js +8 -0
  6. package/dist/validators/index.d.ts +2 -0
  7. package/dist/validators/index.js +2 -0
  8. package/dist/validators/move_validator.d.ts +5 -0
  9. package/dist/validators/move_validator.js +8 -0
  10. package/dist/validators/ripple_validator.js +5 -1
  11. package/dist/validators/xlm_validator.d.ts +2 -1
  12. package/dist/validators/xlm_validator.js +11 -5
  13. package/package-lock.json +1295 -0
  14. package/package.json +4 -6
  15. package/src/chain-validators.ts +10 -1
  16. package/src/validators/hedera_validator.ts +10 -0
  17. package/src/validators/index.ts +2 -0
  18. package/src/validators/move_validator.ts +11 -0
  19. package/src/validators/ripple_validator.ts +6 -2
  20. package/src/validators/xlm_validator.ts +13 -5
  21. package/test/addresses/addresses.ts +10 -0
  22. package/test/addresses/aptos.json +6 -0
  23. package/test/addresses/bch.json +0 -5
  24. package/test/addresses/btc-testnet.json +5 -0
  25. package/test/addresses/btc.json +5 -5
  26. package/test/addresses/doge-testnet.json +3 -0
  27. package/test/addresses/doge.json +0 -1
  28. package/test/addresses/evm.json +0 -1
  29. package/test/addresses/hbar.json +11 -0
  30. package/test/addresses/monero-testnet.json +5 -0
  31. package/test/addresses/ripple.json +4 -0
  32. package/test/addresses/sia.json +0 -1
  33. package/test/addresses/sui.json +6 -0
  34. package/test/addresses/xlm.json +5 -1
  35. package/test/multichain-address-validator.test.ts +28 -1438
  36. package/tsconfig.json +1 -1
  37. package/config/esbuild.inject.js +0 -1
  38. package/config/esbuild.ts +0 -14
  39. package/dist/multichain-address-validator.bundle.min.js +0 -17
  40. 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
- [![Build Status](https://travis-ci.org/christsim/multicoin-address-validator.svg?branch=master)](https://travis-ci.org/christsim/multicoin-address-validator)
4
+ [![Build Status](https://travis-ci.org/christsim/multicchain-address-validator.svg?branch=master)](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;
@@ -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: {
@@ -46,6 +47,10 @@ const chainValidators = {
46
47
  alternatives: ['eth', 'erc20', 'flare', 'avalanche', 'avalanche-c', 'bsc', 'bnb', 'binance'],
47
48
  validator: ETHValidator
48
49
  },
50
+ hedera: {
51
+ alternatives: ['hbar'],
52
+ validator: HederaValidator
53
+ },
49
54
  litecoin: {
50
55
  alternatives: ['ltc'],
51
56
  validator: {
@@ -77,6 +82,7 @@ const chainValidators = {
77
82
  alternatives: ['spl'],
78
83
  validator: SolanaValidator,
79
84
  },
85
+ sui: { validator: MoveValidator },
80
86
  tron: {
81
87
  alternatives: ['trc20'],
82
88
  validator: TronValidator(),
@@ -0,0 +1,5 @@
1
+ import type { Address } from '../types.js';
2
+ declare const _default: {
3
+ isValidAddress(address: Address): boolean;
4
+ };
5
+ export default _default;
@@ -0,0 +1,8 @@
1
+ import { getAddress } from '../helpers.js';
2
+ export default {
3
+ isValidAddress(address) {
4
+ // Regex to validate the format "shard.realm.account"
5
+ const regex = /^\d+\.\d+\.\d+$/;
6
+ return regex.test(getAddress(address));
7
+ }
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";
@@ -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";
@@ -0,0 +1,5 @@
1
+ import type { Address } from '../types.js';
2
+ declare const _default: {
3
+ isValidAddress(address: Address): boolean;
4
+ };
5
+ export default _default;
@@ -0,0 +1,8 @@
1
+ import { getAddress } from '../helpers.js';
2
+ const regexp = new RegExp('^0x[0-9a-fA-F]{64}$');
3
+ export default {
4
+ isValidAddress(address) {
5
+ const addr = getAddress(address);
6
+ return regexp.test(addr);
7
+ },
8
+ };
@@ -15,7 +15,11 @@ export default {
15
15
  return validAddress && this.verifyMemo(destinationTag);
16
16
  },
17
17
  verifyMemo(destinationTag) {
18
- return !destinationTag || /[0-9]+/.test(destinationTag);
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): any;
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
- if (regexp.test(addr)) {
18
- return this.verifyChecksum(addr);
19
- }
20
- return false;
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