@rosen-bridge/address-codec 0.2.0 → 0.2.1-6770eb

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @rosen-bridge/address-codec
2
2
 
3
+ ## 0.2.1
4
+
5
+ ### Patch Changes
6
+
7
+ - reduce ergo wasm version due to nextjs bug
8
+
3
9
  ## 0.2.0
4
10
 
5
11
  ### Minor Changes
package/dist/decoder.d.ts CHANGED
@@ -4,8 +4,5 @@
4
4
  * @param chain
5
5
  * @param encodedAddress
6
6
  */
7
- export declare const decodeAddress: (
8
- chain: string,
9
- encodedAddress: string,
10
- ) => string;
11
- //# sourceMappingURL=decoder.d.ts.map
7
+ export declare const decodeAddress: (chain: string, encodedAddress: string) => string;
8
+ //# sourceMappingURL=decoder.d.ts.map
package/dist/encoder.d.ts CHANGED
@@ -5,4 +5,4 @@
5
5
  * @param address
6
6
  */
7
7
  export declare const encodeAddress: (chain: string, address: string) => string;
8
- //# sourceMappingURL=encoder.d.ts.map
8
+ //# sourceMappingURL=encoder.d.ts.map
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './encoder';
2
2
  export * from './decoder';
3
3
  export * from './types';
4
- //# sourceMappingURL=index.d.ts.map
4
+ export * from './validator';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './encoder';
2
2
  export * from './decoder';
3
3
  export * from './types';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2VuY29kZXInO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNvZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuIl19
4
+ export * from './validator';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2VuY29kZXInO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNvZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi92YWxpZGF0b3InO1xuIl19
@@ -1,4 +1,5 @@
1
1
  export * from './encoder';
2
2
  export * from './decoder';
3
3
  export * from './types';
4
+ export * from './validator';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC"}
package/dist/lib/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './encoder';
2
2
  export * from './decoder';
3
3
  export * from './types';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2VuY29kZXInO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNvZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuIl19
4
+ export * from './validator';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2VuY29kZXInO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNvZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi92YWxpZGF0b3InO1xuIl19
@@ -0,0 +1,7 @@
1
+ /**
2
+ * validates address of a chain
3
+ * @param chain
4
+ * @param address
5
+ */
6
+ export declare const validateAddress: (chain: string, address: string) => boolean;
7
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../lib/validator.ts"],"names":[],"mappings":"AAYA;;;;GAIG;AACH,eAAO,MAAM,eAAe,UAAW,MAAM,WAAW,MAAM,KAAG,OAoBhE,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { BITCOIN_CHAIN, CARDANO_CHAIN, ERGO_CHAIN, ETHEREUM_CHAIN, } from './const';
2
+ import { UnsupportedAddressError, UnsupportedChainError } from './types';
3
+ import * as ergoLib from 'ergo-lib-wasm-nodejs';
4
+ import * as cardanoLib from '@emurgo/cardano-serialization-lib-nodejs';
5
+ import * as bitcoinLib from 'bitcoinjs-lib';
6
+ import * as ethereumLib from 'ethers';
7
+ /**
8
+ * validates address of a chain
9
+ * @param chain
10
+ * @param address
11
+ */
12
+ export const validateAddress = (chain, address) => {
13
+ switch (chain) {
14
+ case ERGO_CHAIN:
15
+ ergoLib.Address.from_base58(address);
16
+ return true;
17
+ case CARDANO_CHAIN:
18
+ cardanoLib.Address.from_bech32(address);
19
+ return true;
20
+ case BITCOIN_CHAIN:
21
+ bitcoinLib.address.fromBech32(address);
22
+ if (address.slice(0, 4) != 'bc1q')
23
+ throw new UnsupportedAddressError(chain, address);
24
+ return true;
25
+ case ETHEREUM_CHAIN:
26
+ if (address.toLowerCase() != address || !ethereumLib.isAddress(address))
27
+ throw new UnsupportedAddressError(chain, address);
28
+ return true;
29
+ default:
30
+ throw new UnsupportedChainError(chain);
31
+ }
32
+ };
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsYUFBYSxFQUNiLGFBQWEsRUFDYixVQUFVLEVBQ1YsY0FBYyxHQUNmLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6RSxPQUFPLEtBQUssT0FBTyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxVQUFVLE1BQU0sMENBQTBDLENBQUM7QUFDdkUsT0FBTyxLQUFLLFVBQVUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxLQUFLLFdBQVcsTUFBTSxRQUFRLENBQUM7QUFFdEM7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQVcsRUFBRTtJQUN6RSxRQUFRLEtBQUssRUFBRTtRQUNiLEtBQUssVUFBVTtZQUNiLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsS0FBSyxhQUFhO1lBQ2hCLFVBQVUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsS0FBSyxhQUFhO1lBQ2hCLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTTtnQkFDL0IsTUFBTSxJQUFJLHVCQUF1QixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNwRCxPQUFPLElBQUksQ0FBQztRQUNkLEtBQUssY0FBYztZQUNqQixJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztnQkFDckUsTUFBTSxJQUFJLHVCQUF1QixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNwRCxPQUFPLElBQUksQ0FBQztRQUNkO1lBQ0UsTUFBTSxJQUFJLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQklUQ09JTl9DSEFJTixcbiAgQ0FSREFOT19DSEFJTixcbiAgRVJHT19DSEFJTixcbiAgRVRIRVJFVU1fQ0hBSU4sXG59IGZyb20gJy4vY29uc3QnO1xuaW1wb3J0IHsgVW5zdXBwb3J0ZWRBZGRyZXNzRXJyb3IsIFVuc3VwcG9ydGVkQ2hhaW5FcnJvciB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0ICogYXMgZXJnb0xpYiBmcm9tICdlcmdvLWxpYi13YXNtLW5vZGVqcyc7XG5pbXBvcnQgKiBhcyBjYXJkYW5vTGliIGZyb20gJ0BlbXVyZ28vY2FyZGFuby1zZXJpYWxpemF0aW9uLWxpYi1ub2RlanMnO1xuaW1wb3J0ICogYXMgYml0Y29pbkxpYiBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCAqIGFzIGV0aGVyZXVtTGliIGZyb20gJ2V0aGVycyc7XG5cbi8qKlxuICogdmFsaWRhdGVzIGFkZHJlc3Mgb2YgYSBjaGFpblxuICogQHBhcmFtIGNoYWluXG4gKiBAcGFyYW0gYWRkcmVzc1xuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBZGRyZXNzID0gKGNoYWluOiBzdHJpbmcsIGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBzd2l0Y2ggKGNoYWluKSB7XG4gICAgY2FzZSBFUkdPX0NIQUlOOlxuICAgICAgZXJnb0xpYi5BZGRyZXNzLmZyb21fYmFzZTU4KGFkZHJlc3MpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSBDQVJEQU5PX0NIQUlOOlxuICAgICAgY2FyZGFub0xpYi5BZGRyZXNzLmZyb21fYmVjaDMyKGFkZHJlc3MpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSBCSVRDT0lOX0NIQUlOOlxuICAgICAgYml0Y29pbkxpYi5hZGRyZXNzLmZyb21CZWNoMzIoYWRkcmVzcyk7XG4gICAgICBpZiAoYWRkcmVzcy5zbGljZSgwLCA0KSAhPSAnYmMxcScpXG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEFkZHJlc3NFcnJvcihjaGFpbiwgYWRkcmVzcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBjYXNlIEVUSEVSRVVNX0NIQUlOOlxuICAgICAgaWYgKGFkZHJlc3MudG9Mb3dlckNhc2UoKSAhPSBhZGRyZXNzIHx8ICFldGhlcmV1bUxpYi5pc0FkZHJlc3MoYWRkcmVzcykpXG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEFkZHJlc3NFcnJvcihjaGFpbiwgYWRkcmVzcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkQ2hhaW5FcnJvcihjaGFpbik7XG4gIH1cbn07XG4iXX0=
@@ -1,12 +1,17 @@
1
1
  export declare const ergoAddress = "9iMjQx8PzwBKXRvsFUJFJAPoy31znfEeBUGz8DRkcnJX4rJYjVd";
2
2
  export declare const encodedErgoAddress = "03f999da8e6e42660e4464d17d29e63bc006734a6710a24eb489b466323d3a9339";
3
+ export declare const invalidErgoAddress = "9iMjQx8PzwBKXRvsFUJFJAPoy31znfEeBUGz8DRkcnJX4rJYjVD";
3
4
  export declare const cardanoAddress = "addr1qxxa3kfnnh40yqtepa5frt0tkw4a0rys7v33422lzt8glx43sqtd4vkhjzawajej8aujh27p5a54zx62xf3wvuplynqs3fsqet";
4
5
  export declare const encodedCardanoAddress = "018dd8d9339deaf201790f6891adebb3abd78c90f3231aa95f12ce8f9ab18016dab2d790baeecb323f792babc1a769511b4a3262e6703f24c1";
6
+ export declare const invalidCardanoAddress = "addr1qxxa3kfnnh40yqtepa5frt0tkw4a0rys7v33422lzt8glx43sqtd4vkhjzawajej8aujh27p5a54zx62xf3wvuplynqs3fsqee";
5
7
  export declare const bitcoinAddress = "bc1qkgp89fjerymm5ltg0hygnumr0m2qa7n22gyw6h";
8
+ export declare const invalidBitcoinAddressLength = "bc1qkgp89fjerymm5ltg0hygnumr0m2qa7n22gyw6";
9
+ export declare const tapRootBitcoinAddress = "bc1pxhtmm7mjrafdkw46wc7lmjn3gyrmdm4q0dnmw8j225gxtwtq7mwqd7e24v";
6
10
  export declare const encodedBitcoinAddress = "0014b20272a6591937ba7d687dc889f3637ed40efa6a";
7
11
  export declare const longErgoAddress = "nB3L2PD3LBtiNhDYK7XhZ8nVt6uekBXN7RcPUKgdKLXFcrJiSPxmQsUKuUkTRQ1hbvDrxEQAKYurGFbaGD1RPxU7XqQimD78j23HHMQKL1boUGsnNhCxaVNAYMcFbQNo355Af8cWkhAN6";
8
12
  export declare const longEncodedAddress = "100304000e20a6ac381e6fa99929fd1477b3ba9499790a775e91d4c14c5aa86e9a118dfac8530400d801d601b2db6501fe730000ea02d1aedb63087201d901024d0e938c720201730198b2e4c672010510730200ade4c67201041ad901020ecdee7202";
9
13
  export declare const ethereumAddress = "0xb416c8a6d7ec94706a9ae2c26c11d320519482b1";
10
14
  export declare const encodedEthereumAddress = "b416c8a6d7ec94706a9ae2c26c11d320519482b1";
11
15
  export declare const invalidEthereumAddressLength = "0xb416c8a7ec94706a9ae2c26c11d320519482b1";
16
+ export declare const invalidEthereumIcapAddress = "XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36";
12
17
  //# sourceMappingURL=testData.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"testData.d.ts","sourceRoot":"","sources":["../../tests/testData.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,wDAC+B,CAAC;AACxD,eAAO,MAAM,kBAAkB,uEACuC,CAAC;AAEvE,eAAO,MAAM,cAAc,4GACgF,CAAC;AAC5G,eAAO,MAAM,qBAAqB,uHACoF,CAAC;AAEvH,eAAO,MAAM,cAAc,+CAA+C,CAAC;AAC3E,eAAO,MAAM,qBAAqB,iDACc,CAAC;AAEjD,eAAO,MAAM,eAAe,kJACqH,CAAC;AAClJ,eAAO,MAAM,kBAAkB,2MAC2K,CAAC;AAE3M,eAAO,MAAM,eAAe,+CAA+C,CAAC;AAC5E,eAAO,MAAM,sBAAsB,6CACS,CAAC;AAE7C,eAAO,MAAM,4BAA4B,6CACG,CAAC"}
1
+ {"version":3,"file":"testData.d.ts","sourceRoot":"","sources":["../../tests/testData.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,wDAC+B,CAAC;AACxD,eAAO,MAAM,kBAAkB,uEACuC,CAAC;AACvE,eAAO,MAAM,kBAAkB,wDACwB,CAAC;AAExD,eAAO,MAAM,cAAc,4GACgF,CAAC;AAC5G,eAAO,MAAM,qBAAqB,uHACoF,CAAC;AACvH,eAAO,MAAM,qBAAqB,4GACyE,CAAC;AAE5G,eAAO,MAAM,cAAc,+CAA+C,CAAC;AAC3E,eAAO,MAAM,2BAA2B,8CACK,CAAC;AAC9C,eAAO,MAAM,qBAAqB,mEACgC,CAAC;AACnE,eAAO,MAAM,qBAAqB,iDACc,CAAC;AAEjD,eAAO,MAAM,eAAe,kJACqH,CAAC;AAClJ,eAAO,MAAM,kBAAkB,2MAC2K,CAAC;AAE3M,eAAO,MAAM,eAAe,+CAA+C,CAAC;AAC5E,eAAO,MAAM,sBAAsB,6CACS,CAAC;AAE7C,eAAO,MAAM,4BAA4B,6CACG,CAAC;AAC7C,eAAO,MAAM,0BAA0B,wCAAwC,CAAC"}
@@ -1,12 +1,17 @@
1
1
  export const ergoAddress = '9iMjQx8PzwBKXRvsFUJFJAPoy31znfEeBUGz8DRkcnJX4rJYjVd';
2
2
  export const encodedErgoAddress = '03f999da8e6e42660e4464d17d29e63bc006734a6710a24eb489b466323d3a9339';
3
+ export const invalidErgoAddress = '9iMjQx8PzwBKXRvsFUJFJAPoy31znfEeBUGz8DRkcnJX4rJYjVD';
3
4
  export const cardanoAddress = 'addr1qxxa3kfnnh40yqtepa5frt0tkw4a0rys7v33422lzt8glx43sqtd4vkhjzawajej8aujh27p5a54zx62xf3wvuplynqs3fsqet';
4
5
  export const encodedCardanoAddress = '018dd8d9339deaf201790f6891adebb3abd78c90f3231aa95f12ce8f9ab18016dab2d790baeecb323f792babc1a769511b4a3262e6703f24c1';
6
+ export const invalidCardanoAddress = 'addr1qxxa3kfnnh40yqtepa5frt0tkw4a0rys7v33422lzt8glx43sqtd4vkhjzawajej8aujh27p5a54zx62xf3wvuplynqs3fsqee';
5
7
  export const bitcoinAddress = 'bc1qkgp89fjerymm5ltg0hygnumr0m2qa7n22gyw6h';
8
+ export const invalidBitcoinAddressLength = 'bc1qkgp89fjerymm5ltg0hygnumr0m2qa7n22gyw6';
9
+ export const tapRootBitcoinAddress = 'bc1pxhtmm7mjrafdkw46wc7lmjn3gyrmdm4q0dnmw8j225gxtwtq7mwqd7e24v';
6
10
  export const encodedBitcoinAddress = '0014b20272a6591937ba7d687dc889f3637ed40efa6a';
7
11
  export const longErgoAddress = 'nB3L2PD3LBtiNhDYK7XhZ8nVt6uekBXN7RcPUKgdKLXFcrJiSPxmQsUKuUkTRQ1hbvDrxEQAKYurGFbaGD1RPxU7XqQimD78j23HHMQKL1boUGsnNhCxaVNAYMcFbQNo355Af8cWkhAN6';
8
12
  export const longEncodedAddress = '100304000e20a6ac381e6fa99929fd1477b3ba9499790a775e91d4c14c5aa86e9a118dfac8530400d801d601b2db6501fe730000ea02d1aedb63087201d901024d0e938c720201730198b2e4c672010510730200ade4c67201041ad901020ecdee7202';
9
13
  export const ethereumAddress = '0xb416c8a6d7ec94706a9ae2c26c11d320519482b1';
10
14
  export const encodedEthereumAddress = 'b416c8a6d7ec94706a9ae2c26c11d320519482b1';
11
15
  export const invalidEthereumAddressLength = '0xb416c8a7ec94706a9ae2c26c11d320519482b1';
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdERhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0cy90ZXN0RGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQ3RCLHFEQUFxRCxDQUFDO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUM3QixvRUFBb0UsQ0FBQztBQUV2RSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQ3pCLHlHQUF5RyxDQUFDO0FBQzVHLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUNoQyxvSEFBb0gsQ0FBQztBQUV2SCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsNENBQTRDLENBQUM7QUFDM0UsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQ2hDLDhDQUE4QyxDQUFDO0FBRWpELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FDMUIsK0lBQStJLENBQUM7QUFDbEosTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQzdCLHdNQUF3TSxDQUFDO0FBRTNNLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyw0Q0FBNEMsQ0FBQztBQUM1RSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FDakMsMENBQTBDLENBQUM7QUFFN0MsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQ3ZDLDBDQUEwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGVyZ29BZGRyZXNzID1cbiAgJzlpTWpReDhQendCS1hSdnNGVUpGSkFQb3kzMXpuZkVlQlVHejhEUmtjbkpYNHJKWWpWZCc7XG5leHBvcnQgY29uc3QgZW5jb2RlZEVyZ29BZGRyZXNzID1cbiAgJzAzZjk5OWRhOGU2ZTQyNjYwZTQ0NjRkMTdkMjllNjNiYzAwNjczNGE2NzEwYTI0ZWI0ODliNDY2MzIzZDNhOTMzOSc7XG5cbmV4cG9ydCBjb25zdCBjYXJkYW5vQWRkcmVzcyA9XG4gICdhZGRyMXF4eGEza2Zubmg0MHlxdGVwYTVmcnQwdGt3NGEwcnlzN3YzMzQyMmx6dDhnbHg0M3NxdGQ0dmtoanphd2FqZWo4YXVqaDI3cDVhNTR6eDYyeGYzd3Z1cGx5bnFzM2ZzcWV0JztcbmV4cG9ydCBjb25zdCBlbmNvZGVkQ2FyZGFub0FkZHJlc3MgPVxuICAnMDE4ZGQ4ZDkzMzlkZWFmMjAxNzkwZjY4OTFhZGViYjNhYmQ3OGM5MGYzMjMxYWE5NWYxMmNlOGY5YWIxODAxNmRhYjJkNzkwYmFlZWNiMzIzZjc5MmJhYmMxYTc2OTUxMWI0YTMyNjJlNjcwM2YyNGMxJztcblxuZXhwb3J0IGNvbnN0IGJpdGNvaW5BZGRyZXNzID0gJ2JjMXFrZ3A4OWZqZXJ5bW01bHRnMGh5Z251bXIwbTJxYTduMjJneXc2aCc7XG5leHBvcnQgY29uc3QgZW5jb2RlZEJpdGNvaW5BZGRyZXNzID1cbiAgJzAwMTRiMjAyNzJhNjU5MTkzN2JhN2Q2ODdkYzg4OWYzNjM3ZWQ0MGVmYTZhJztcblxuZXhwb3J0IGNvbnN0IGxvbmdFcmdvQWRkcmVzcyA9XG4gICduQjNMMlBEM0xCdGlOaERZSzdYaFo4blZ0NnVla0JYTjdSY1BVS2dkS0xYRmNySmlTUHhtUXNVS3VVa1RSUTFoYnZEcnhFUUFLWXVyR0ZiYUdEMVJQeFU3WHFRaW1ENzhqMjNISE1RS0wxYm9VR3NuTmhDeGFWTkFZTWNGYlFObzM1NUFmOGNXa2hBTjYnO1xuZXhwb3J0IGNvbnN0IGxvbmdFbmNvZGVkQWRkcmVzcyA9XG4gICcxMDAzMDQwMDBlMjBhNmFjMzgxZTZmYTk5OTI5ZmQxNDc3YjNiYTk0OTk3OTBhNzc1ZTkxZDRjMTRjNWFhODZlOWExMThkZmFjODUzMDQwMGQ4MDFkNjAxYjJkYjY1MDFmZTczMDAwMGVhMDJkMWFlZGI2MzA4NzIwMWQ5MDEwMjRkMGU5MzhjNzIwMjAxNzMwMTk4YjJlNGM2NzIwMTA1MTA3MzAyMDBhZGU0YzY3MjAxMDQxYWQ5MDEwMjBlY2RlZTcyMDInO1xuXG5leHBvcnQgY29uc3QgZXRoZXJldW1BZGRyZXNzID0gJzB4YjQxNmM4YTZkN2VjOTQ3MDZhOWFlMmMyNmMxMWQzMjA1MTk0ODJiMSc7XG5leHBvcnQgY29uc3QgZW5jb2RlZEV0aGVyZXVtQWRkcmVzcyA9XG4gICdiNDE2YzhhNmQ3ZWM5NDcwNmE5YWUyYzI2YzExZDMyMDUxOTQ4MmIxJztcblxuZXhwb3J0IGNvbnN0IGludmFsaWRFdGhlcmV1bUFkZHJlc3NMZW5ndGggPVxuICAnMHhiNDE2YzhhN2VjOTQ3MDZhOWFlMmMyNmMxMWQzMjA1MTk0ODJiMSc7XG4iXX0=
16
+ export const invalidEthereumIcapAddress = 'XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36';
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdERhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0cy90ZXN0RGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQ3RCLHFEQUFxRCxDQUFDO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUM3QixvRUFBb0UsQ0FBQztBQUN2RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FDN0IscURBQXFELENBQUM7QUFFeEQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUN6Qix5R0FBeUcsQ0FBQztBQUM1RyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FDaEMsb0hBQW9ILENBQUM7QUFDdkgsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQ2hDLHlHQUF5RyxDQUFDO0FBRTVHLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyw0Q0FBNEMsQ0FBQztBQUMzRSxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FDdEMsMkNBQTJDLENBQUM7QUFDOUMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQ2hDLGdFQUFnRSxDQUFDO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUNoQyw4Q0FBOEMsQ0FBQztBQUVqRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQzFCLCtJQUErSSxDQUFDO0FBQ2xKLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUM3Qix3TUFBd00sQ0FBQztBQUUzTSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsNENBQTRDLENBQUM7QUFDNUUsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQ2pDLDBDQUEwQyxDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUN2QywwQ0FBMEMsQ0FBQztBQUM3QyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxxQ0FBcUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBlcmdvQWRkcmVzcyA9XG4gICc5aU1qUXg4UHp3QktYUnZzRlVKRkpBUG95MzF6bmZFZUJVR3o4RFJrY25KWDRySllqVmQnO1xuZXhwb3J0IGNvbnN0IGVuY29kZWRFcmdvQWRkcmVzcyA9XG4gICcwM2Y5OTlkYThlNmU0MjY2MGU0NDY0ZDE3ZDI5ZTYzYmMwMDY3MzRhNjcxMGEyNGViNDg5YjQ2NjMyM2QzYTkzMzknO1xuZXhwb3J0IGNvbnN0IGludmFsaWRFcmdvQWRkcmVzcyA9XG4gICc5aU1qUXg4UHp3QktYUnZzRlVKRkpBUG95MzF6bmZFZUJVR3o4RFJrY25KWDRySllqVkQnO1xuXG5leHBvcnQgY29uc3QgY2FyZGFub0FkZHJlc3MgPVxuICAnYWRkcjFxeHhhM2tmbm5oNDB5cXRlcGE1ZnJ0MHRrdzRhMHJ5czd2MzM0MjJsenQ4Z2x4NDNzcXRkNHZraGp6YXdhamVqOGF1amgyN3A1YTU0eng2MnhmM3d2dXBseW5xczNmc3FldCc7XG5leHBvcnQgY29uc3QgZW5jb2RlZENhcmRhbm9BZGRyZXNzID1cbiAgJzAxOGRkOGQ5MzM5ZGVhZjIwMTc5MGY2ODkxYWRlYmIzYWJkNzhjOTBmMzIzMWFhOTVmMTJjZThmOWFiMTgwMTZkYWIyZDc5MGJhZWVjYjMyM2Y3OTJiYWJjMWE3Njk1MTFiNGEzMjYyZTY3MDNmMjRjMSc7XG5leHBvcnQgY29uc3QgaW52YWxpZENhcmRhbm9BZGRyZXNzID1cbiAgJ2FkZHIxcXh4YTNrZm5uaDQweXF0ZXBhNWZydDB0a3c0YTByeXM3djMzNDIybHp0OGdseDQzc3F0ZDR2a2hqemF3YWplajhhdWpoMjdwNWE1NHp4NjJ4ZjN3dnVwbHlucXMzZnNxZWUnO1xuXG5leHBvcnQgY29uc3QgYml0Y29pbkFkZHJlc3MgPSAnYmMxcWtncDg5ZmplcnltbTVsdGcwaHlnbnVtcjBtMnFhN24yMmd5dzZoJztcbmV4cG9ydCBjb25zdCBpbnZhbGlkQml0Y29pbkFkZHJlc3NMZW5ndGggPVxuICAnYmMxcWtncDg5ZmplcnltbTVsdGcwaHlnbnVtcjBtMnFhN24yMmd5dzYnO1xuZXhwb3J0IGNvbnN0IHRhcFJvb3RCaXRjb2luQWRkcmVzcyA9XG4gICdiYzFweGh0bW03bWpyYWZka3c0NndjN2xtam4zZ3lybWRtNHEwZG5tdzhqMjI1Z3h0d3RxN213cWQ3ZTI0dic7XG5leHBvcnQgY29uc3QgZW5jb2RlZEJpdGNvaW5BZGRyZXNzID1cbiAgJzAwMTRiMjAyNzJhNjU5MTkzN2JhN2Q2ODdkYzg4OWYzNjM3ZWQ0MGVmYTZhJztcblxuZXhwb3J0IGNvbnN0IGxvbmdFcmdvQWRkcmVzcyA9XG4gICduQjNMMlBEM0xCdGlOaERZSzdYaFo4blZ0NnVla0JYTjdSY1BVS2dkS0xYRmNySmlTUHhtUXNVS3VVa1RSUTFoYnZEcnhFUUFLWXVyR0ZiYUdEMVJQeFU3WHFRaW1ENzhqMjNISE1RS0wxYm9VR3NuTmhDeGFWTkFZTWNGYlFObzM1NUFmOGNXa2hBTjYnO1xuZXhwb3J0IGNvbnN0IGxvbmdFbmNvZGVkQWRkcmVzcyA9XG4gICcxMDAzMDQwMDBlMjBhNmFjMzgxZTZmYTk5OTI5ZmQxNDc3YjNiYTk0OTk3OTBhNzc1ZTkxZDRjMTRjNWFhODZlOWExMThkZmFjODUzMDQwMGQ4MDFkNjAxYjJkYjY1MDFmZTczMDAwMGVhMDJkMWFlZGI2MzA4NzIwMWQ5MDEwMjRkMGU5MzhjNzIwMjAxNzMwMTk4YjJlNGM2NzIwMTA1MTA3MzAyMDBhZGU0YzY3MjAxMDQxYWQ5MDEwMjBlY2RlZTcyMDInO1xuXG5leHBvcnQgY29uc3QgZXRoZXJldW1BZGRyZXNzID0gJzB4YjQxNmM4YTZkN2VjOTQ3MDZhOWFlMmMyNmMxMWQzMjA1MTk0ODJiMSc7XG5leHBvcnQgY29uc3QgZW5jb2RlZEV0aGVyZXVtQWRkcmVzcyA9XG4gICdiNDE2YzhhNmQ3ZWM5NDcwNmE5YWUyYzI2YzExZDMyMDUxOTQ4MmIxJztcblxuZXhwb3J0IGNvbnN0IGludmFsaWRFdGhlcmV1bUFkZHJlc3NMZW5ndGggPVxuICAnMHhiNDE2YzhhN2VjOTQ3MDZhOWFlMmMyNmMxMWQzMjA1MTk0ODJiMSc7XG5leHBvcnQgY29uc3QgaW52YWxpZEV0aGVyZXVtSWNhcEFkZHJlc3MgPSAnWEU2NUdCNkxETlhZT0ZUWDBOU1YzRlVXS09XSVhBTUpLMzYnO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validator.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.spec.d.ts","sourceRoot":"","sources":["../../tests/validator.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,145 @@
1
+ import * as testData from './testData';
2
+ import { UnsupportedAddressError, UnsupportedChainError, validateAddress, } from '../lib';
3
+ import { BITCOIN_CHAIN, CARDANO_CHAIN, ERGO_CHAIN, ETHEREUM_CHAIN, } from '../lib/const';
4
+ describe('validateAddress', () => {
5
+ /**
6
+ * @target `validateAddress` should validate Ergo address successfully
7
+ * @dependencies
8
+ * @scenario
9
+ * - run test
10
+ * @expected
11
+ * - to validate correct Ergo address
12
+ */
13
+ it('should validate Ergo address successfully', () => {
14
+ const res = validateAddress(ERGO_CHAIN, testData.ergoAddress);
15
+ expect(res).toEqual(true);
16
+ });
17
+ /**
18
+ * @target `validateAddress` should not validate wrong Ergo address
19
+ * @dependencies
20
+ * @scenario
21
+ * - run test
22
+ * @expected
23
+ * - not to validate wrong Ergo address
24
+ */
25
+ it('should not validate wrong Ergo address', () => {
26
+ expect(() => {
27
+ validateAddress(ERGO_CHAIN, testData.invalidErgoAddress);
28
+ }).toThrow();
29
+ });
30
+ /**
31
+ * @target `validateAddress` should validate Cardano address successfully
32
+ * @dependencies
33
+ * @scenario
34
+ * - run test
35
+ * @expected
36
+ * - to validate correct Cardano address
37
+ */
38
+ it('should validate Cardano address successfully', () => {
39
+ const res = validateAddress(CARDANO_CHAIN, testData.cardanoAddress);
40
+ expect(res).toEqual(true);
41
+ });
42
+ /**
43
+ * @target `validateAddress` should not validate wrong Cardano address
44
+ * @dependencies
45
+ * @scenario
46
+ * - run test
47
+ * @expected
48
+ * - not to validate wrong Cardano address
49
+ */
50
+ it('should not validate wrong Cardano address', () => {
51
+ expect(() => {
52
+ validateAddress(CARDANO_CHAIN, testData.invalidCardanoAddress);
53
+ }).toThrow();
54
+ });
55
+ /**
56
+ * @target `validateAddress` should validate Bitcoin address successfully
57
+ * @dependencies
58
+ * @scenario
59
+ * - run test
60
+ * @expected
61
+ * - to validate correct Bitcoin address
62
+ */
63
+ it('should validate Bitcoin address successfully', () => {
64
+ const res = validateAddress(BITCOIN_CHAIN, testData.bitcoinAddress);
65
+ expect(res).toEqual(true);
66
+ });
67
+ /**
68
+ * @target `validateAddress` should not validate Bitcoin taproot address
69
+ * @dependencies
70
+ * @scenario
71
+ * - run test
72
+ * @expected
73
+ * - not to validate Bitcoin taproot address
74
+ */
75
+ it('should not validate Bitcoin taproot address', () => {
76
+ expect(() => {
77
+ validateAddress(BITCOIN_CHAIN, testData.tapRootBitcoinAddress);
78
+ }).toThrow(UnsupportedAddressError);
79
+ });
80
+ /**
81
+ * @target `validateAddress` should not validate wrong Bitcoin address
82
+ * @dependencies
83
+ * @scenario
84
+ * - run test
85
+ * @expected
86
+ * - not to validate wrong Bitcoin address
87
+ */
88
+ it('should not validate wrong Bitcoin address', () => {
89
+ expect(() => {
90
+ validateAddress(BITCOIN_CHAIN, testData.invalidBitcoinAddressLength);
91
+ }).toThrowError();
92
+ });
93
+ /**
94
+ * @target `validateAddress` should validate Ethereum address successfully
95
+ * @dependencies
96
+ * @scenario
97
+ * - run test
98
+ * @expected
99
+ * - to validate correct Ethereum address
100
+ */
101
+ it('should validate Ethereum address successfully', () => {
102
+ const res = validateAddress(ETHEREUM_CHAIN, testData.ethereumAddress);
103
+ expect(res).toEqual(true);
104
+ });
105
+ /**
106
+ * @target `validateAddress` should not validate ICAP Ethereum address
107
+ * @dependencies
108
+ * @scenario
109
+ * - run test
110
+ * @expected
111
+ * - not to validate ICAP Ethereum address
112
+ */
113
+ it('should not validate ICAP Ethereum address', () => {
114
+ expect(() => {
115
+ validateAddress(ETHEREUM_CHAIN, testData.invalidEthereumIcapAddress);
116
+ }).toThrow(UnsupportedAddressError);
117
+ });
118
+ /**
119
+ * @target `validateAddress` should not validate wrong Ethereum address
120
+ * @dependencies
121
+ * @scenario
122
+ * - run test
123
+ * @expected
124
+ * - not to validate wrong Ethereum address
125
+ */
126
+ it('should not validate wrong Ethereum address', () => {
127
+ expect(() => {
128
+ validateAddress(ETHEREUM_CHAIN, testData.invalidEthereumAddressLength);
129
+ }).toThrow(UnsupportedAddressError);
130
+ });
131
+ /**
132
+ * @target `validateAddress` should throw error when chain is not supported
133
+ * @dependencies
134
+ * @scenario
135
+ * - run test
136
+ * @expected
137
+ * - it should throw UnsupportedChain error
138
+ */
139
+ it('should throw error when chain is not supported', () => {
140
+ expect(() => {
141
+ validateAddress('unsupported-chain', '0011223344');
142
+ }).toThrow(UnsupportedChainError);
143
+ });
144
+ });
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0cy92YWxpZGF0b3Iuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssUUFBUSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLHFCQUFxQixFQUNyQixlQUFlLEdBQ2hCLE1BQU0sUUFBUSxDQUFDO0FBQ2hCLE9BQU8sRUFDTCxhQUFhLEVBQ2IsYUFBYSxFQUNiLFVBQVUsRUFDVixjQUFjLEdBQ2YsTUFBTSxjQUFjLENBQUM7QUFFdEIsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtJQUMvQjs7Ozs7OztPQU9HO0lBQ0gsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLEdBQUcsRUFBRTtRQUNuRCxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5RCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0lBRUg7Ozs7Ozs7T0FPRztJQUNILEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSxHQUFHLEVBQUU7UUFDaEQsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLGVBQWUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDZixDQUFDLENBQUMsQ0FBQztJQUVIOzs7Ozs7O09BT0c7SUFDSCxFQUFFLENBQUMsOENBQThDLEVBQUUsR0FBRyxFQUFFO1FBQ3RELE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFFSDs7Ozs7OztPQU9HO0lBQ0gsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLEdBQUcsRUFBRTtRQUNuRCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsZUFBZSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNmLENBQUMsQ0FBQyxDQUFDO0lBRUg7Ozs7Ozs7T0FPRztJQUNILEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxHQUFHLEVBQUU7UUFDdEQsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDLENBQUMsQ0FBQztJQUVIOzs7Ozs7O09BT0c7SUFDSCxFQUFFLENBQUMsNkNBQTZDLEVBQUUsR0FBRyxFQUFFO1FBQ3JELE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixlQUFlLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBRUg7Ozs7Ozs7T0FPRztJQUNILEVBQUUsQ0FBQywyQ0FBMkMsRUFBRSxHQUFHLEVBQUU7UUFDbkQsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLGVBQWUsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFFSDs7Ozs7OztPQU9HO0lBQ0gsRUFBRSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRTtRQUN2RCxNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN0RSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0lBRUg7Ozs7Ozs7T0FPRztJQUNILEVBQUUsQ0FBQywyQ0FBMkMsRUFBRSxHQUFHLEVBQUU7UUFDbkQsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLGVBQWUsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFFSDs7Ozs7OztPQU9HO0lBQ0gsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsRUFBRTtRQUNwRCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsZUFBZSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUN6RSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVIOzs7Ozs7O09BT0c7SUFDSCxFQUFFLENBQUMsZ0RBQWdELEVBQUUsR0FBRyxFQUFFO1FBQ3hELE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixlQUFlLENBQUMsbUJBQW1CLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDcEMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4vdGVzdERhdGEnO1xuaW1wb3J0IHtcbiAgVW5zdXBwb3J0ZWRBZGRyZXNzRXJyb3IsXG4gIFVuc3VwcG9ydGVkQ2hhaW5FcnJvcixcbiAgdmFsaWRhdGVBZGRyZXNzLFxufSBmcm9tICcuLi9saWInO1xuaW1wb3J0IHtcbiAgQklUQ09JTl9DSEFJTixcbiAgQ0FSREFOT19DSEFJTixcbiAgRVJHT19DSEFJTixcbiAgRVRIRVJFVU1fQ0hBSU4sXG59IGZyb20gJy4uL2xpYi9jb25zdCc7XG5cbmRlc2NyaWJlKCd2YWxpZGF0ZUFkZHJlc3MnLCAoKSA9PiB7XG4gIC8qKlxuICAgKiBAdGFyZ2V0IGB2YWxpZGF0ZUFkZHJlc3NgIHNob3VsZCB2YWxpZGF0ZSBFcmdvIGFkZHJlc3Mgc3VjY2Vzc2Z1bGx5XG4gICAqIEBkZXBlbmRlbmNpZXNcbiAgICogQHNjZW5hcmlvXG4gICAqIC0gcnVuIHRlc3RcbiAgICogQGV4cGVjdGVkXG4gICAqIC0gdG8gdmFsaWRhdGUgY29ycmVjdCBFcmdvIGFkZHJlc3NcbiAgICovXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgRXJnbyBhZGRyZXNzIHN1Y2Nlc3NmdWxseScsICgpID0+IHtcbiAgICBjb25zdCByZXMgPSB2YWxpZGF0ZUFkZHJlc3MoRVJHT19DSEFJTiwgdGVzdERhdGEuZXJnb0FkZHJlc3MpO1xuICAgIGV4cGVjdChyZXMpLnRvRXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBAdGFyZ2V0IGB2YWxpZGF0ZUFkZHJlc3NgIHNob3VsZCBub3QgdmFsaWRhdGUgd3JvbmcgRXJnbyBhZGRyZXNzXG4gICAqIEBkZXBlbmRlbmNpZXNcbiAgICogQHNjZW5hcmlvXG4gICAqIC0gcnVuIHRlc3RcbiAgICogQGV4cGVjdGVkXG4gICAqIC0gbm90IHRvIHZhbGlkYXRlIHdyb25nIEVyZ28gYWRkcmVzc1xuICAgKi9cbiAgaXQoJ3Nob3VsZCBub3QgdmFsaWRhdGUgd3JvbmcgRXJnbyBhZGRyZXNzJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICB2YWxpZGF0ZUFkZHJlc3MoRVJHT19DSEFJTiwgdGVzdERhdGEuaW52YWxpZEVyZ29BZGRyZXNzKTtcbiAgICB9KS50b1Rocm93KCk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBAdGFyZ2V0IGB2YWxpZGF0ZUFkZHJlc3NgIHNob3VsZCB2YWxpZGF0ZSBDYXJkYW5vIGFkZHJlc3Mgc3VjY2Vzc2Z1bGx5XG4gICAqIEBkZXBlbmRlbmNpZXNcbiAgICogQHNjZW5hcmlvXG4gICAqIC0gcnVuIHRlc3RcbiAgICogQGV4cGVjdGVkXG4gICAqIC0gdG8gdmFsaWRhdGUgY29ycmVjdCBDYXJkYW5vIGFkZHJlc3NcbiAgICovXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgQ2FyZGFubyBhZGRyZXNzIHN1Y2Nlc3NmdWxseScsICgpID0+IHtcbiAgICBjb25zdCByZXMgPSB2YWxpZGF0ZUFkZHJlc3MoQ0FSREFOT19DSEFJTiwgdGVzdERhdGEuY2FyZGFub0FkZHJlc3MpO1xuICAgIGV4cGVjdChyZXMpLnRvRXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBAdGFyZ2V0IGB2YWxpZGF0ZUFkZHJlc3NgIHNob3VsZCBub3QgdmFsaWRhdGUgd3JvbmcgQ2FyZGFubyBhZGRyZXNzXG4gICAqIEBkZXBlbmRlbmNpZXNcbiAgICogQHNjZW5hcmlvXG4gICAqIC0gcnVuIHRlc3RcbiAgICogQGV4cGVjdGVkXG4gICAqIC0gbm90IHRvIHZhbGlkYXRlIHdyb25nIENhcmRhbm8gYWRkcmVzc1xuICAgKi9cbiAgaXQoJ3Nob3VsZCBub3QgdmFsaWRhdGUgd3JvbmcgQ2FyZGFubyBhZGRyZXNzJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICB2YWxpZGF0ZUFkZHJlc3MoQ0FSREFOT19DSEFJTiwgdGVzdERhdGEuaW52YWxpZENhcmRhbm9BZGRyZXNzKTtcbiAgICB9KS50b1Rocm93KCk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBAdGFyZ2V0IGB2YWxpZGF0ZUFkZHJlc3NgIHNob3VsZCB2YWxpZGF0ZSBCaXRjb2luIGFkZHJlc3Mgc3VjY2Vzc2Z1bGx5XG4gICAqIEBkZXBlbmRlbmNpZXNcbiAgICogQHNjZW5hcmlvXG4gICAqIC0gcnVuIHRlc3RcbiAgICogQGV4cGVjdGVkXG4gICAqIC0gdG8gdmFsaWRhdGUgY29ycmVjdCBCaXRjb2luIGFkZHJlc3NcbiAgICovXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgQml0Y29pbiBhZGRyZXNzIHN1Y2Nlc3NmdWxseScsICgpID0+IHtcbiAgICBjb25zdCByZXMgPSB2YWxpZGF0ZUFkZHJlc3MoQklUQ09JTl9DSEFJTiwgdGVzdERhdGEuYml0Y29pbkFkZHJlc3MpO1xuICAgIGV4cGVjdChyZXMpLnRvRXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBAdGFyZ2V0IGB2YWxpZGF0ZUFkZHJlc3NgIHNob3VsZCBub3QgdmFsaWRhdGUgQml0Y29pbiB0YXByb290IGFkZHJlc3NcbiAgICogQGRlcGVuZGVuY2llc1xuICAgKiBAc2NlbmFyaW9cbiAgICogLSBydW4gdGVzdFxuICAgKiBAZXhwZWN0ZWRcbiAgICogLSBub3QgdG8gdmFsaWRhdGUgQml0Y29pbiB0YXByb290IGFkZHJlc3NcbiAgICovXG4gIGl0KCdzaG91bGQgbm90IHZhbGlkYXRlIEJpdGNvaW4gdGFwcm9vdCBhZGRyZXNzJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICB2YWxpZGF0ZUFkZHJlc3MoQklUQ09JTl9DSEFJTiwgdGVzdERhdGEudGFwUm9vdEJpdGNvaW5BZGRyZXNzKTtcbiAgICB9KS50b1Rocm93KFVuc3VwcG9ydGVkQWRkcmVzc0Vycm9yKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEB0YXJnZXQgYHZhbGlkYXRlQWRkcmVzc2Agc2hvdWxkIG5vdCB2YWxpZGF0ZSB3cm9uZyBCaXRjb2luIGFkZHJlc3NcbiAgICogQGRlcGVuZGVuY2llc1xuICAgKiBAc2NlbmFyaW9cbiAgICogLSBydW4gdGVzdFxuICAgKiBAZXhwZWN0ZWRcbiAgICogLSBub3QgdG8gdmFsaWRhdGUgd3JvbmcgQml0Y29pbiBhZGRyZXNzXG4gICAqL1xuICBpdCgnc2hvdWxkIG5vdCB2YWxpZGF0ZSB3cm9uZyBCaXRjb2luIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIHZhbGlkYXRlQWRkcmVzcyhCSVRDT0lOX0NIQUlOLCB0ZXN0RGF0YS5pbnZhbGlkQml0Y29pbkFkZHJlc3NMZW5ndGgpO1xuICAgIH0pLnRvVGhyb3dFcnJvcigpO1xuICB9KTtcblxuICAvKipcbiAgICogQHRhcmdldCBgdmFsaWRhdGVBZGRyZXNzYCBzaG91bGQgdmFsaWRhdGUgRXRoZXJldW0gYWRkcmVzcyBzdWNjZXNzZnVsbHlcbiAgICogQGRlcGVuZGVuY2llc1xuICAgKiBAc2NlbmFyaW9cbiAgICogLSBydW4gdGVzdFxuICAgKiBAZXhwZWN0ZWRcbiAgICogLSB0byB2YWxpZGF0ZSBjb3JyZWN0IEV0aGVyZXVtIGFkZHJlc3NcbiAgICovXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgRXRoZXJldW0gYWRkcmVzcyBzdWNjZXNzZnVsbHknLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gdmFsaWRhdGVBZGRyZXNzKEVUSEVSRVVNX0NIQUlOLCB0ZXN0RGF0YS5ldGhlcmV1bUFkZHJlc3MpO1xuICAgIGV4cGVjdChyZXMpLnRvRXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBAdGFyZ2V0IGB2YWxpZGF0ZUFkZHJlc3NgIHNob3VsZCBub3QgdmFsaWRhdGUgSUNBUCBFdGhlcmV1bSBhZGRyZXNzXG4gICAqIEBkZXBlbmRlbmNpZXNcbiAgICogQHNjZW5hcmlvXG4gICAqIC0gcnVuIHRlc3RcbiAgICogQGV4cGVjdGVkXG4gICAqIC0gbm90IHRvIHZhbGlkYXRlIElDQVAgRXRoZXJldW0gYWRkcmVzc1xuICAgKi9cbiAgaXQoJ3Nob3VsZCBub3QgdmFsaWRhdGUgSUNBUCBFdGhlcmV1bSBhZGRyZXNzJywgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICB2YWxpZGF0ZUFkZHJlc3MoRVRIRVJFVU1fQ0hBSU4sIHRlc3REYXRhLmludmFsaWRFdGhlcmV1bUljYXBBZGRyZXNzKTtcbiAgICB9KS50b1Rocm93KFVuc3VwcG9ydGVkQWRkcmVzc0Vycm9yKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEB0YXJnZXQgYHZhbGlkYXRlQWRkcmVzc2Agc2hvdWxkIG5vdCB2YWxpZGF0ZSB3cm9uZyBFdGhlcmV1bSBhZGRyZXNzXG4gICAqIEBkZXBlbmRlbmNpZXNcbiAgICogQHNjZW5hcmlvXG4gICAqIC0gcnVuIHRlc3RcbiAgICogQGV4cGVjdGVkXG4gICAqIC0gbm90IHRvIHZhbGlkYXRlIHdyb25nIEV0aGVyZXVtIGFkZHJlc3NcbiAgICovXG4gIGl0KCdzaG91bGQgbm90IHZhbGlkYXRlIHdyb25nIEV0aGVyZXVtIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIHZhbGlkYXRlQWRkcmVzcyhFVEhFUkVVTV9DSEFJTiwgdGVzdERhdGEuaW52YWxpZEV0aGVyZXVtQWRkcmVzc0xlbmd0aCk7XG4gICAgfSkudG9UaHJvdyhVbnN1cHBvcnRlZEFkZHJlc3NFcnJvcik7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBAdGFyZ2V0IGB2YWxpZGF0ZUFkZHJlc3NgIHNob3VsZCB0aHJvdyBlcnJvciB3aGVuIGNoYWluIGlzIG5vdCBzdXBwb3J0ZWRcbiAgICogQGRlcGVuZGVuY2llc1xuICAgKiBAc2NlbmFyaW9cbiAgICogLSBydW4gdGVzdFxuICAgKiBAZXhwZWN0ZWRcbiAgICogLSBpdCBzaG91bGQgdGhyb3cgVW5zdXBwb3J0ZWRDaGFpbiBlcnJvclxuICAgKi9cbiAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIGNoYWluIGlzIG5vdCBzdXBwb3J0ZWQnLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IHtcbiAgICAgIHZhbGlkYXRlQWRkcmVzcygndW5zdXBwb3J0ZWQtY2hhaW4nLCAnMDAxMTIyMzM0NCcpO1xuICAgIH0pLnRvVGhyb3coVW5zdXBwb3J0ZWRDaGFpbkVycm9yKTtcbiAgfSk7XG59KTtcbiJdfQ==