@bitgo/abstract-utxo 9.10.0 → 9.11.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,18 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [9.11.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/abstract-utxo@9.10.0...@bitgo/abstract-utxo@9.11.0) (2025-01-09)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **abstract-utxo:** check if external and internal descriptors are different ([10a48c3](https://github.com/BitGo/BitGoJS/commit/10a48c3b90bb985206a3eb808e2f454e1d8e292a))
11
+
12
+ ### Features
13
+
14
+ - **abstract-utxo:** allow signed descriptors in prod policy ([a19606a](https://github.com/BitGo/BitGoJS/commit/a19606aa68e527bb0457e926e2b263d18c7e0f45))
15
+ - add example for createDescriptorWalletWithWalletPassphrase ([384ed92](https://github.com/BitGo/BitGoJS/commit/384ed9221c14eca4235b152d4a848d16d68aaf14))
16
+ - export createNamedDescriptorWithSignature ([8856442](https://github.com/BitGo/BitGoJS/commit/885644217954e1a8d5736d11dff2aa171c1ace11))
17
+
6
18
  # [9.10.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/abstract-utxo@9.9.0...@bitgo/abstract-utxo@9.10.0) (2025-01-03)
7
19
 
8
20
  ### Features
@@ -4,6 +4,6 @@ export type DescriptorMap = Map<string, Descriptor>;
4
4
  /** Convert an array of descriptor name-value pairs to a descriptor map */
5
5
  export declare function toDescriptorMap(descriptors: {
6
6
  name: string;
7
- value: string;
7
+ value: Descriptor | string;
8
8
  }[]): DescriptorMap;
9
9
  //# sourceMappingURL=DescriptorMap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DescriptorMap.d.ts","sourceRoot":"","sources":["../../../../src/core/descriptor/DescriptorMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,6CAA6C;AAC7C,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEpD,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,aAAa,CAE7F"}
1
+ {"version":3,"file":"DescriptorMap.d.ts","sourceRoot":"","sources":["../../../../src/core/descriptor/DescriptorMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,6CAA6C;AAC7C,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEpD,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAAA;CAAE,EAAE,GAAG,aAAa,CAO1G"}
@@ -4,6 +4,9 @@ exports.toDescriptorMap = toDescriptorMap;
4
4
  const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
5
5
  /** Convert an array of descriptor name-value pairs to a descriptor map */
6
6
  function toDescriptorMap(descriptors) {
7
- return new Map(descriptors.map((d) => [d.name, wasm_miniscript_1.Descriptor.fromString(d.value, 'derivable')]));
7
+ return new Map(descriptors.map((d) => [
8
+ d.name,
9
+ d.value instanceof wasm_miniscript_1.Descriptor ? d.value : wasm_miniscript_1.Descriptor.fromString(d.value, 'derivable'),
10
+ ]));
8
11
  }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVzY3JpcHRvck1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL2Rlc2NyaXB0b3IvRGVzY3JpcHRvck1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU1BLDBDQUVDO0FBUkQsNERBQW9EO0FBS3BELDBFQUEwRTtBQUMxRSxTQUFnQixlQUFlLENBQUMsV0FBOEM7SUFDNUUsT0FBTyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsNEJBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpcHRvciB9IGZyb20gJ0BiaXRnby93YXNtLW1pbmlzY3JpcHQnO1xuXG4vKiogTWFwIGZyb20gZGVzY3JpcHRvciBuYW1lIHRvIGRlc2NyaXB0b3IgKi9cbmV4cG9ydCB0eXBlIERlc2NyaXB0b3JNYXAgPSBNYXA8c3RyaW5nLCBEZXNjcmlwdG9yPjtcblxuLyoqIENvbnZlcnQgYW4gYXJyYXkgb2YgZGVzY3JpcHRvciBuYW1lLXZhbHVlIHBhaXJzIHRvIGEgZGVzY3JpcHRvciBtYXAgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Rlc2NyaXB0b3JNYXAoZGVzY3JpcHRvcnM6IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSk6IERlc2NyaXB0b3JNYXAge1xuICByZXR1cm4gbmV3IE1hcChkZXNjcmlwdG9ycy5tYXAoKGQpID0+IFtkLm5hbWUsIERlc2NyaXB0b3IuZnJvbVN0cmluZyhkLnZhbHVlLCAnZGVyaXZhYmxlJyldKSk7XG59XG4iXX0=
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVzY3JpcHRvck1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL2Rlc2NyaXB0b3IvRGVzY3JpcHRvck1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU1BLDBDQU9DO0FBYkQsNERBQW9EO0FBS3BELDBFQUEwRTtBQUMxRSxTQUFnQixlQUFlLENBQUMsV0FBMkQ7SUFDekYsT0FBTyxJQUFJLEdBQUcsQ0FDWixXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsSUFBSTtRQUNOLENBQUMsQ0FBQyxLQUFLLFlBQVksNEJBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsNEJBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUM7S0FDdEYsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpcHRvciB9IGZyb20gJ0BiaXRnby93YXNtLW1pbmlzY3JpcHQnO1xuXG4vKiogTWFwIGZyb20gZGVzY3JpcHRvciBuYW1lIHRvIGRlc2NyaXB0b3IgKi9cbmV4cG9ydCB0eXBlIERlc2NyaXB0b3JNYXAgPSBNYXA8c3RyaW5nLCBEZXNjcmlwdG9yPjtcblxuLyoqIENvbnZlcnQgYW4gYXJyYXkgb2YgZGVzY3JpcHRvciBuYW1lLXZhbHVlIHBhaXJzIHRvIGEgZGVzY3JpcHRvciBtYXAgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Rlc2NyaXB0b3JNYXAoZGVzY3JpcHRvcnM6IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogRGVzY3JpcHRvciB8IHN0cmluZyB9W10pOiBEZXNjcmlwdG9yTWFwIHtcbiAgcmV0dXJuIG5ldyBNYXAoXG4gICAgZGVzY3JpcHRvcnMubWFwKChkKSA9PiBbXG4gICAgICBkLm5hbWUsXG4gICAgICBkLnZhbHVlIGluc3RhbmNlb2YgRGVzY3JpcHRvciA/IGQudmFsdWUgOiBEZXNjcmlwdG9yLmZyb21TdHJpbmcoZC52YWx1ZSwgJ2Rlcml2YWJsZScpLFxuICAgIF0pXG4gICk7XG59XG4iXX0=
@@ -7,7 +7,12 @@ export declare const NamedDescriptor: t.IntersectionC<[t.TypeC<{
7
7
  }>, t.PartialC<{
8
8
  signatures: t.UnionC<[t.ArrayC<t.StringC>, t.UndefinedC]>;
9
9
  }>]>;
10
- export type NamedDescriptor = t.TypeOf<typeof NamedDescriptor>;
11
- export declare function createNamedDescriptorWithSignature(name: string, descriptor: Descriptor, signingKey: BIP32Interface): NamedDescriptor;
10
+ export type NamedDescriptor<T = string> = {
11
+ name: string;
12
+ value: T;
13
+ signatures?: string[];
14
+ };
15
+ export declare function createNamedDescriptorWithSignature(name: string, descriptor: string | Descriptor, signingKey: BIP32Interface): NamedDescriptor;
16
+ export declare function hasValidSignature(descriptor: string | Descriptor, key: BIP32Interface, signatures: string[]): boolean;
12
17
  export declare function assertHasValidSignature(namedDescriptor: NamedDescriptor, key: BIP32Interface): void;
13
18
  //# sourceMappingURL=NamedDescriptor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NamedDescriptor.d.ts","sourceRoot":"","sources":["../../../src/descriptor/NamedDescriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAY,MAAM,iBAAiB,CAAC;AAG3D,eAAO,MAAM,eAAe;;;;;IAW3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC;AAE/D,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,cAAc,GACzB,eAAe,CAIjB;AAED,wBAAgB,uBAAuB,CAAC,eAAe,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAUnG"}
1
+ {"version":3,"file":"NamedDescriptor.d.ts","sourceRoot":"","sources":["../../../src/descriptor/NamedDescriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAY,MAAM,iBAAiB,CAAC;AAG3D,eAAO,MAAM,eAAe;;;;;IAW3B,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,MAAM,IAAI;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,CAAC;IACT,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GAAG,UAAU,EAC/B,UAAU,EAAE,cAAc,GACzB,eAAe,CAOjB;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CASrH;AAED,wBAAgB,uBAAuB,CAAC,eAAe,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAInG"}
@@ -35,8 +35,10 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.NamedDescriptor = void 0;
37
37
  exports.createNamedDescriptorWithSignature = createNamedDescriptorWithSignature;
38
+ exports.hasValidSignature = hasValidSignature;
38
39
  exports.assertHasValidSignature = assertHasValidSignature;
39
40
  const t = __importStar(require("io-ts"));
41
+ const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
40
42
  const utxo_lib_1 = require("@bitgo/utxo-lib");
41
43
  const sdk_core_1 = require("@bitgo/sdk-core");
42
44
  exports.NamedDescriptor = t.intersection([
@@ -49,19 +51,25 @@ exports.NamedDescriptor = t.intersection([
49
51
  }),
50
52
  ], 'NamedDescriptor');
51
53
  function createNamedDescriptorWithSignature(name, descriptor, signingKey) {
54
+ if (typeof descriptor === 'string') {
55
+ descriptor = wasm_miniscript_1.Descriptor.fromString(descriptor, 'derivable');
56
+ }
52
57
  const value = descriptor.toString();
53
58
  const signature = (0, sdk_core_1.signMessage)(value, signingKey, utxo_lib_1.networks.bitcoin).toString('hex');
54
59
  return { name, value, signatures: [signature] };
55
60
  }
56
- function assertHasValidSignature(namedDescriptor, key) {
57
- if (namedDescriptor.signatures === undefined) {
58
- throw new Error(`Descriptor ${namedDescriptor.name} does not have a signature`);
61
+ function hasValidSignature(descriptor, key, signatures) {
62
+ if (typeof descriptor === 'string') {
63
+ descriptor = wasm_miniscript_1.Descriptor.fromString(descriptor, 'derivable');
59
64
  }
60
- const isValid = namedDescriptor.signatures.some((signature) => {
61
- return (0, sdk_core_1.verifyMessage)(namedDescriptor.value, key, Buffer.from(signature, 'hex'), utxo_lib_1.networks.bitcoin);
65
+ const message = descriptor.toString();
66
+ return signatures.some((signature) => {
67
+ return (0, sdk_core_1.verifyMessage)(message, key, Buffer.from(signature, 'hex'), utxo_lib_1.networks.bitcoin);
62
68
  });
63
- if (!isValid) {
69
+ }
70
+ function assertHasValidSignature(namedDescriptor, key) {
71
+ if (!hasValidSignature(namedDescriptor.value, key, namedDescriptor.signatures ?? [])) {
64
72
  throw new Error(`Descriptor ${namedDescriptor.name} does not have a valid signature (key=${key.toBase58()})`);
65
73
  }
66
74
  }
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmFtZWREZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Rlc2NyaXB0b3IvTmFtZWREZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQSxnRkFRQztBQUVELDBEQVVDO0FBeENELHlDQUEyQjtBQUUzQiw4Q0FBMkQ7QUFDM0QsOENBQTZEO0FBRWhELFFBQUEsZUFBZSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQzNDO0lBQ0UsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNMLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTTtRQUNkLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTTtLQUNoQixDQUFDO0lBQ0YsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNSLFVBQVUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3RELENBQUM7Q0FDSCxFQUNELGlCQUFpQixDQUNsQixDQUFDO0FBSUYsU0FBZ0Isa0NBQWtDLENBQ2hELElBQVksRUFDWixVQUFzQixFQUN0QixVQUEwQjtJQUUxQixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEMsTUFBTSxTQUFTLEdBQUcsSUFBQSxzQkFBVyxFQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsbUJBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkYsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBZ0IsdUJBQXVCLENBQUMsZUFBZ0MsRUFBRSxHQUFtQjtJQUMzRixJQUFJLGVBQWUsQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDN0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLGVBQWUsQ0FBQyxJQUFJLDRCQUE0QixDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7UUFDNUQsT0FBTyxJQUFBLHdCQUFhLEVBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUUsbUJBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRyxDQUFDLENBQUMsQ0FBQztJQUNILElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxlQUFlLENBQUMsSUFBSSx5Q0FBeUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNoSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHQgZnJvbSAnaW8tdHMnO1xuaW1wb3J0IHsgRGVzY3JpcHRvciB9IGZyb20gJ0BiaXRnby93YXNtLW1pbmlzY3JpcHQnO1xuaW1wb3J0IHsgQklQMzJJbnRlcmZhY2UsIG5ldHdvcmtzIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IHNpZ25NZXNzYWdlLCB2ZXJpZnlNZXNzYWdlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuZXhwb3J0IGNvbnN0IE5hbWVkRGVzY3JpcHRvciA9IHQuaW50ZXJzZWN0aW9uKFxuICBbXG4gICAgdC50eXBlKHtcbiAgICAgIG5hbWU6IHQuc3RyaW5nLFxuICAgICAgdmFsdWU6IHQuc3RyaW5nLFxuICAgIH0pLFxuICAgIHQucGFydGlhbCh7XG4gICAgICBzaWduYXR1cmVzOiB0LnVuaW9uKFt0LmFycmF5KHQuc3RyaW5nKSwgdC51bmRlZmluZWRdKSxcbiAgICB9KSxcbiAgXSxcbiAgJ05hbWVkRGVzY3JpcHRvcidcbik7XG5cbmV4cG9ydCB0eXBlIE5hbWVkRGVzY3JpcHRvciA9IHQuVHlwZU9mPHR5cGVvZiBOYW1lZERlc2NyaXB0b3I+O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTmFtZWREZXNjcmlwdG9yV2l0aFNpZ25hdHVyZShcbiAgbmFtZTogc3RyaW5nLFxuICBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yLFxuICBzaWduaW5nS2V5OiBCSVAzMkludGVyZmFjZVxuKTogTmFtZWREZXNjcmlwdG9yIHtcbiAgY29uc3QgdmFsdWUgPSBkZXNjcmlwdG9yLnRvU3RyaW5nKCk7XG4gIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25NZXNzYWdlKHZhbHVlLCBzaWduaW5nS2V5LCBuZXR3b3Jrcy5iaXRjb2luKS50b1N0cmluZygnaGV4Jyk7XG4gIHJldHVybiB7IG5hbWUsIHZhbHVlLCBzaWduYXR1cmVzOiBbc2lnbmF0dXJlXSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0SGFzVmFsaWRTaWduYXR1cmUobmFtZWREZXNjcmlwdG9yOiBOYW1lZERlc2NyaXB0b3IsIGtleTogQklQMzJJbnRlcmZhY2UpOiB2b2lkIHtcbiAgaWYgKG5hbWVkRGVzY3JpcHRvci5zaWduYXR1cmVzID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERlc2NyaXB0b3IgJHtuYW1lZERlc2NyaXB0b3IubmFtZX0gZG9lcyBub3QgaGF2ZSBhIHNpZ25hdHVyZWApO1xuICB9XG4gIGNvbnN0IGlzVmFsaWQgPSBuYW1lZERlc2NyaXB0b3Iuc2lnbmF0dXJlcy5zb21lKChzaWduYXR1cmUpID0+IHtcbiAgICByZXR1cm4gdmVyaWZ5TWVzc2FnZShuYW1lZERlc2NyaXB0b3IudmFsdWUsIGtleSwgQnVmZmVyLmZyb20oc2lnbmF0dXJlLCAnaGV4JyksIG5ldHdvcmtzLmJpdGNvaW4pO1xuICB9KTtcbiAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEZXNjcmlwdG9yICR7bmFtZWREZXNjcmlwdG9yLm5hbWV9IGRvZXMgbm90IGhhdmUgYSB2YWxpZCBzaWduYXR1cmUgKGtleT0ke2tleS50b0Jhc2U1OCgpfSlgKTtcbiAgfVxufVxuIl19
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmFtZWREZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Rlc2NyaXB0b3IvTmFtZWREZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCQSxnRkFXQztBQUVELDhDQVNDO0FBRUQsMERBSUM7QUFwREQseUNBQTJCO0FBQzNCLDREQUFvRDtBQUNwRCw4Q0FBMkQ7QUFDM0QsOENBQTZEO0FBRWhELFFBQUEsZUFBZSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQzNDO0lBQ0UsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNMLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTTtRQUNkLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTTtLQUNoQixDQUFDO0lBQ0YsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNSLFVBQVUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3RELENBQUM7Q0FDSCxFQUNELGlCQUFpQixDQUNsQixDQUFDO0FBUUYsU0FBZ0Isa0NBQWtDLENBQ2hELElBQVksRUFDWixVQUErQixFQUMvQixVQUEwQjtJQUUxQixJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ25DLFVBQVUsR0FBRyw0QkFBVSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFBLHNCQUFXLEVBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxtQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRixPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO0FBQ2xELENBQUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FBQyxVQUErQixFQUFFLEdBQW1CLEVBQUUsVUFBb0I7SUFDMUcsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNuQyxVQUFVLEdBQUcsNEJBQVUsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdEMsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7UUFDbkMsT0FBTyxJQUFBLHdCQUFhLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxtQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RGLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQWdCLHVCQUF1QixDQUFDLGVBQWdDLEVBQUUsR0FBbUI7SUFDM0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNyRixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsZUFBZSxDQUFDLElBQUkseUNBQXlDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDaEgsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcbmltcG9ydCB7IERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS1taW5pc2NyaXB0JztcbmltcG9ydCB7IEJJUDMySW50ZXJmYWNlLCBuZXR3b3JrcyB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBzaWduTWVzc2FnZSwgdmVyaWZ5TWVzc2FnZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmV4cG9ydCBjb25zdCBOYW1lZERlc2NyaXB0b3IgPSB0LmludGVyc2VjdGlvbihcbiAgW1xuICAgIHQudHlwZSh7XG4gICAgICBuYW1lOiB0LnN0cmluZyxcbiAgICAgIHZhbHVlOiB0LnN0cmluZyxcbiAgICB9KSxcbiAgICB0LnBhcnRpYWwoe1xuICAgICAgc2lnbmF0dXJlczogdC51bmlvbihbdC5hcnJheSh0LnN0cmluZyksIHQudW5kZWZpbmVkXSksXG4gICAgfSksXG4gIF0sXG4gICdOYW1lZERlc2NyaXB0b3InXG4pO1xuXG5leHBvcnQgdHlwZSBOYW1lZERlc2NyaXB0b3I8VCA9IHN0cmluZz4gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmFsdWU6IFQ7XG4gIHNpZ25hdHVyZXM/OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOYW1lZERlc2NyaXB0b3JXaXRoU2lnbmF0dXJlKFxuICBuYW1lOiBzdHJpbmcsXG4gIGRlc2NyaXB0b3I6IHN0cmluZyB8IERlc2NyaXB0b3IsXG4gIHNpZ25pbmdLZXk6IEJJUDMySW50ZXJmYWNlXG4pOiBOYW1lZERlc2NyaXB0b3Ige1xuICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgZGVzY3JpcHRvciA9IERlc2NyaXB0b3IuZnJvbVN0cmluZyhkZXNjcmlwdG9yLCAnZGVyaXZhYmxlJyk7XG4gIH1cbiAgY29uc3QgdmFsdWUgPSBkZXNjcmlwdG9yLnRvU3RyaW5nKCk7XG4gIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25NZXNzYWdlKHZhbHVlLCBzaWduaW5nS2V5LCBuZXR3b3Jrcy5iaXRjb2luKS50b1N0cmluZygnaGV4Jyk7XG4gIHJldHVybiB7IG5hbWUsIHZhbHVlLCBzaWduYXR1cmVzOiBbc2lnbmF0dXJlXSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVmFsaWRTaWduYXR1cmUoZGVzY3JpcHRvcjogc3RyaW5nIHwgRGVzY3JpcHRvciwga2V5OiBCSVAzMkludGVyZmFjZSwgc2lnbmF0dXJlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yID09PSAnc3RyaW5nJykge1xuICAgIGRlc2NyaXB0b3IgPSBEZXNjcmlwdG9yLmZyb21TdHJpbmcoZGVzY3JpcHRvciwgJ2Rlcml2YWJsZScpO1xuICB9XG5cbiAgY29uc3QgbWVzc2FnZSA9IGRlc2NyaXB0b3IudG9TdHJpbmcoKTtcbiAgcmV0dXJuIHNpZ25hdHVyZXMuc29tZSgoc2lnbmF0dXJlKSA9PiB7XG4gICAgcmV0dXJuIHZlcmlmeU1lc3NhZ2UobWVzc2FnZSwga2V5LCBCdWZmZXIuZnJvbShzaWduYXR1cmUsICdoZXgnKSwgbmV0d29ya3MuYml0Y29pbik7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0SGFzVmFsaWRTaWduYXR1cmUobmFtZWREZXNjcmlwdG9yOiBOYW1lZERlc2NyaXB0b3IsIGtleTogQklQMzJJbnRlcmZhY2UpOiB2b2lkIHtcbiAgaWYgKCFoYXNWYWxpZFNpZ25hdHVyZShuYW1lZERlc2NyaXB0b3IudmFsdWUsIGtleSwgbmFtZWREZXNjcmlwdG9yLnNpZ25hdHVyZXMgPz8gW10pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEZXNjcmlwdG9yICR7bmFtZWREZXNjcmlwdG9yLm5hbWV9IGRvZXMgbm90IGhhdmUgYSB2YWxpZCBzaWduYXR1cmUgKGtleT0ke2tleS50b0Jhc2U1OCgpfSlgKTtcbiAgfVxufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"createDescriptors.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/createWallet/createDescriptors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAsC,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGzF,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,CAAC;AA8B7G;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,kBACiF,CAAC"}
1
+ {"version":3,"file":"createDescriptors.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/createWallet/createDescriptors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAsC,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGzF,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,CAAC;AAgC7G;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,kBACiF,CAAC"}
@@ -14,10 +14,12 @@ function createExternalInternalPair(builder, userKey) {
14
14
  if (userKey.isNeutered()) {
15
15
  throw new Error('User key must be private');
16
16
  }
17
- return [
18
- (0, NamedDescriptor_1.createNamedDescriptorWithSignature)(builder.name + '/external', (0, builder_1.getDescriptorFromBuilder)({ ...builder, path: '0/*' }), userKey),
19
- (0, NamedDescriptor_1.createNamedDescriptorWithSignature)(builder.name + '/internal', (0, builder_1.getDescriptorFromBuilder)({ ...builder, path: '1/*' }), userKey),
20
- ];
17
+ const external = (0, NamedDescriptor_1.createNamedDescriptorWithSignature)(builder.name + '/external', (0, builder_1.getDescriptorFromBuilder)({ ...builder, path: '0/*' }), userKey);
18
+ const internal = (0, NamedDescriptor_1.createNamedDescriptorWithSignature)(builder.name + '/internal', (0, builder_1.getDescriptorFromBuilder)({ ...builder, path: '1/*' }), userKey);
19
+ if (external.value === internal.value) {
20
+ throw new Error('External and internal descriptors must be different. Make to use the path in descriptor.');
21
+ }
22
+ return [external, internal];
21
23
  }
22
24
  /**
23
25
  * Create a pair of external and internal descriptors for a 2-of-3 multisig wallet.
@@ -28,4 +30,4 @@ function createExternalInternalPair(builder, userKey) {
28
30
  */
29
31
  const DefaultWsh2Of3 = (userKey, cosigners) => createExternalInternalPair({ name: 'Wsh2Of3', keys: [userKey.neutered(), ...cosigners], path: '' }, userKey);
30
32
  exports.DefaultWsh2Of3 = DefaultWsh2Of3;
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlRGVzY3JpcHRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9jcmVhdGVXYWxsZXQvY3JlYXRlRGVzY3JpcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsd0RBQXlGO0FBQ3pGLHdDQUF5RTtBQUl6RTs7Ozs7O0dBTUc7QUFDSCxTQUFTLDBCQUEwQixDQUNqQyxPQUEwQixFQUMxQixPQUF1QjtJQUV2QixJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsT0FBTztRQUNMLElBQUEsb0RBQWtDLEVBQ2hDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsV0FBVyxFQUMxQixJQUFBLGtDQUF3QixFQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQ3JELE9BQU8sQ0FDUjtRQUNELElBQUEsb0RBQWtDLEVBQ2hDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsV0FBVyxFQUMxQixJQUFBLGtDQUF3QixFQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQ3JELE9BQU8sQ0FDUjtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0ksTUFBTSxjQUFjLEdBQXVCLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQ3ZFLDBCQUEwQixDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFEbEcsUUFBQSxjQUFjLGtCQUNvRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJJUDMySW50ZXJmYWNlIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcblxuaW1wb3J0IHsgY3JlYXRlTmFtZWREZXNjcmlwdG9yV2l0aFNpZ25hdHVyZSwgTmFtZWREZXNjcmlwdG9yIH0gZnJvbSAnLi4vTmFtZWREZXNjcmlwdG9yJztcbmltcG9ydCB7IGdldERlc2NyaXB0b3JGcm9tQnVpbGRlciwgRGVzY3JpcHRvckJ1aWxkZXIgfSBmcm9tICcuLi9idWlsZGVyJztcblxuZXhwb3J0IHR5cGUgRGVzY3JpcHRvckZyb21LZXlzID0gKHVzZXJLZXk6IEJJUDMySW50ZXJmYWNlLCBjb3NpZ25lcnM6IEJJUDMySW50ZXJmYWNlW10pID0+IE5hbWVkRGVzY3JpcHRvcltdO1xuXG4vKipcbiAqIENyZWF0ZSBhIHBhaXIgb2YgZXh0ZXJuYWwgYW5kIGludGVybmFsIGRlc2NyaXB0b3JzIGZvciBhIDItb2YtMyBtdWx0aXNpZyB3YWxsZXQuXG4gKiBPdmVycmlkZXMgdGhlIHBhdGggb2YgdGhlIGJ1aWxkZXIgdG8gdXNlIHRoZSBleHRlcm5hbCBhbmQgaW50ZXJuYWwgZGVyaXZhdGlvbiBwYXRocyAoMC8qIGFuZCAxLyopLlxuICpcbiAqIEBwYXJhbSBidWlsZGVyXG4gKiBAcGFyYW0gdXNlcktleVxuICovXG5mdW5jdGlvbiBjcmVhdGVFeHRlcm5hbEludGVybmFsUGFpcihcbiAgYnVpbGRlcjogRGVzY3JpcHRvckJ1aWxkZXIsXG4gIHVzZXJLZXk6IEJJUDMySW50ZXJmYWNlXG4pOiBbTmFtZWREZXNjcmlwdG9yLCBOYW1lZERlc2NyaXB0b3JdIHtcbiAgaWYgKHVzZXJLZXkuaXNOZXV0ZXJlZCgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIGtleSBtdXN0IGJlIHByaXZhdGUnKTtcbiAgfVxuICByZXR1cm4gW1xuICAgIGNyZWF0ZU5hbWVkRGVzY3JpcHRvcldpdGhTaWduYXR1cmUoXG4gICAgICBidWlsZGVyLm5hbWUgKyAnL2V4dGVybmFsJyxcbiAgICAgIGdldERlc2NyaXB0b3JGcm9tQnVpbGRlcih7IC4uLmJ1aWxkZXIsIHBhdGg6ICcwLyonIH0pLFxuICAgICAgdXNlcktleVxuICAgICksXG4gICAgY3JlYXRlTmFtZWREZXNjcmlwdG9yV2l0aFNpZ25hdHVyZShcbiAgICAgIGJ1aWxkZXIubmFtZSArICcvaW50ZXJuYWwnLFxuICAgICAgZ2V0RGVzY3JpcHRvckZyb21CdWlsZGVyKHsgLi4uYnVpbGRlciwgcGF0aDogJzEvKicgfSksXG4gICAgICB1c2VyS2V5XG4gICAgKSxcbiAgXTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBwYWlyIG9mIGV4dGVybmFsIGFuZCBpbnRlcm5hbCBkZXNjcmlwdG9ycyBmb3IgYSAyLW9mLTMgbXVsdGlzaWcgd2FsbGV0LlxuICpcbiAqIEBwYXJhbSB1c2VyS2V5XG4gKiBAcGFyYW0gY29zaWduZXJzXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRXc2gyT2YzOiBEZXNjcmlwdG9yRnJvbUtleXMgPSAodXNlcktleSwgY29zaWduZXJzKSA9PlxuICBjcmVhdGVFeHRlcm5hbEludGVybmFsUGFpcih7IG5hbWU6ICdXc2gyT2YzJywga2V5czogW3VzZXJLZXkubmV1dGVyZWQoKSwgLi4uY29zaWduZXJzXSwgcGF0aDogJycgfSwgdXNlcktleSk7XG4iXX0=
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlRGVzY3JpcHRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9jcmVhdGVXYWxsZXQvY3JlYXRlRGVzY3JpcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsd0RBQXlGO0FBQ3pGLHdDQUF5RTtBQUl6RTs7Ozs7O0dBTUc7QUFDSCxTQUFTLDBCQUEwQixDQUNqQyxPQUEwQixFQUMxQixPQUF1QjtJQUV2QixJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBQSxvREFBa0MsRUFDakQsT0FBTyxDQUFDLElBQUksR0FBRyxXQUFXLEVBQzFCLElBQUEsa0NBQXdCLEVBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFDckQsT0FBTyxDQUNSLENBQUM7SUFDRixNQUFNLFFBQVEsR0FBRyxJQUFBLG9EQUFrQyxFQUNqRCxPQUFPLENBQUMsSUFBSSxHQUFHLFdBQVcsRUFDMUIsSUFBQSxrQ0FBd0IsRUFBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUNyRCxPQUFPLENBQ1IsQ0FBQztJQUNGLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQywwRkFBMEYsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFDRCxPQUFPLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSSxNQUFNLGNBQWMsR0FBdUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FDdkUsMEJBQTBCLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQURsRyxRQUFBLGNBQWMsa0JBQ29GIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQklQMzJJbnRlcmZhY2UgfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuXG5pbXBvcnQgeyBjcmVhdGVOYW1lZERlc2NyaXB0b3JXaXRoU2lnbmF0dXJlLCBOYW1lZERlc2NyaXB0b3IgfSBmcm9tICcuLi9OYW1lZERlc2NyaXB0b3InO1xuaW1wb3J0IHsgZ2V0RGVzY3JpcHRvckZyb21CdWlsZGVyLCBEZXNjcmlwdG9yQnVpbGRlciB9IGZyb20gJy4uL2J1aWxkZXInO1xuXG5leHBvcnQgdHlwZSBEZXNjcmlwdG9yRnJvbUtleXMgPSAodXNlcktleTogQklQMzJJbnRlcmZhY2UsIGNvc2lnbmVyczogQklQMzJJbnRlcmZhY2VbXSkgPT4gTmFtZWREZXNjcmlwdG9yW107XG5cbi8qKlxuICogQ3JlYXRlIGEgcGFpciBvZiBleHRlcm5hbCBhbmQgaW50ZXJuYWwgZGVzY3JpcHRvcnMgZm9yIGEgMi1vZi0zIG11bHRpc2lnIHdhbGxldC5cbiAqIE92ZXJyaWRlcyB0aGUgcGF0aCBvZiB0aGUgYnVpbGRlciB0byB1c2UgdGhlIGV4dGVybmFsIGFuZCBpbnRlcm5hbCBkZXJpdmF0aW9uIHBhdGhzICgwLyogYW5kIDEvKikuXG4gKlxuICogQHBhcmFtIGJ1aWxkZXJcbiAqIEBwYXJhbSB1c2VyS2V5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUV4dGVybmFsSW50ZXJuYWxQYWlyKFxuICBidWlsZGVyOiBEZXNjcmlwdG9yQnVpbGRlcixcbiAgdXNlcktleTogQklQMzJJbnRlcmZhY2Vcbik6IFtOYW1lZERlc2NyaXB0b3IsIE5hbWVkRGVzY3JpcHRvcl0ge1xuICBpZiAodXNlcktleS5pc05ldXRlcmVkKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIga2V5IG11c3QgYmUgcHJpdmF0ZScpO1xuICB9XG4gIGNvbnN0IGV4dGVybmFsID0gY3JlYXRlTmFtZWREZXNjcmlwdG9yV2l0aFNpZ25hdHVyZShcbiAgICBidWlsZGVyLm5hbWUgKyAnL2V4dGVybmFsJyxcbiAgICBnZXREZXNjcmlwdG9yRnJvbUJ1aWxkZXIoeyAuLi5idWlsZGVyLCBwYXRoOiAnMC8qJyB9KSxcbiAgICB1c2VyS2V5XG4gICk7XG4gIGNvbnN0IGludGVybmFsID0gY3JlYXRlTmFtZWREZXNjcmlwdG9yV2l0aFNpZ25hdHVyZShcbiAgICBidWlsZGVyLm5hbWUgKyAnL2ludGVybmFsJyxcbiAgICBnZXREZXNjcmlwdG9yRnJvbUJ1aWxkZXIoeyAuLi5idWlsZGVyLCBwYXRoOiAnMS8qJyB9KSxcbiAgICB1c2VyS2V5XG4gICk7XG4gIGlmIChleHRlcm5hbC52YWx1ZSA9PT0gaW50ZXJuYWwudmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4dGVybmFsIGFuZCBpbnRlcm5hbCBkZXNjcmlwdG9ycyBtdXN0IGJlIGRpZmZlcmVudC4gTWFrZSB0byB1c2UgdGhlIHBhdGggaW4gZGVzY3JpcHRvci4nKTtcbiAgfVxuICByZXR1cm4gW2V4dGVybmFsLCBpbnRlcm5hbF07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcGFpciBvZiBleHRlcm5hbCBhbmQgaW50ZXJuYWwgZGVzY3JpcHRvcnMgZm9yIGEgMi1vZi0zIG11bHRpc2lnIHdhbGxldC5cbiAqXG4gKiBAcGFyYW0gdXNlcktleVxuICogQHBhcmFtIGNvc2lnbmVyc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0V3NoMk9mMzogRGVzY3JpcHRvckZyb21LZXlzID0gKHVzZXJLZXksIGNvc2lnbmVycykgPT5cbiAgY3JlYXRlRXh0ZXJuYWxJbnRlcm5hbFBhaXIoeyBuYW1lOiAnV3NoMk9mMycsIGtleXM6IFt1c2VyS2V5Lm5ldXRlcmVkKCksIC4uLmNvc2lnbmVyc10sIHBhdGg6ICcnIH0sIHVzZXJLZXkpO1xuIl19
@@ -1,6 +1,6 @@
1
1
  export { Miniscript, Descriptor } from '@bitgo/wasm-miniscript';
2
2
  export { assertDescriptorWalletAddress } from './assertDescriptorWalletAddress';
3
- export { NamedDescriptor } from './NamedDescriptor';
3
+ export { NamedDescriptor, createNamedDescriptorWithSignature, hasValidSignature } from './NamedDescriptor';
4
4
  export { isDescriptorWallet, getDescriptorMapFromWallet } from './descriptorWallet';
5
5
  export { getPolicyForEnv } from './validatePolicy';
6
6
  export * as createWallet from './createWallet';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/descriptor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/descriptor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,kCAAkC,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3G,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC"}
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.createWallet = exports.getPolicyForEnv = exports.getDescriptorMapFromWallet = exports.isDescriptorWallet = exports.NamedDescriptor = exports.assertDescriptorWalletAddress = exports.Descriptor = exports.Miniscript = void 0;
36
+ exports.createWallet = exports.getPolicyForEnv = exports.getDescriptorMapFromWallet = exports.isDescriptorWallet = exports.hasValidSignature = exports.createNamedDescriptorWithSignature = exports.NamedDescriptor = exports.assertDescriptorWalletAddress = exports.Descriptor = exports.Miniscript = void 0;
37
37
  var wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
38
38
  Object.defineProperty(exports, "Miniscript", { enumerable: true, get: function () { return wasm_miniscript_1.Miniscript; } });
39
39
  Object.defineProperty(exports, "Descriptor", { enumerable: true, get: function () { return wasm_miniscript_1.Descriptor; } });
@@ -41,10 +41,12 @@ var assertDescriptorWalletAddress_1 = require("./assertDescriptorWalletAddress")
41
41
  Object.defineProperty(exports, "assertDescriptorWalletAddress", { enumerable: true, get: function () { return assertDescriptorWalletAddress_1.assertDescriptorWalletAddress; } });
42
42
  var NamedDescriptor_1 = require("./NamedDescriptor");
43
43
  Object.defineProperty(exports, "NamedDescriptor", { enumerable: true, get: function () { return NamedDescriptor_1.NamedDescriptor; } });
44
+ Object.defineProperty(exports, "createNamedDescriptorWithSignature", { enumerable: true, get: function () { return NamedDescriptor_1.createNamedDescriptorWithSignature; } });
45
+ Object.defineProperty(exports, "hasValidSignature", { enumerable: true, get: function () { return NamedDescriptor_1.hasValidSignature; } });
44
46
  var descriptorWallet_1 = require("./descriptorWallet");
45
47
  Object.defineProperty(exports, "isDescriptorWallet", { enumerable: true, get: function () { return descriptorWallet_1.isDescriptorWallet; } });
46
48
  Object.defineProperty(exports, "getDescriptorMapFromWallet", { enumerable: true, get: function () { return descriptorWallet_1.getDescriptorMapFromWallet; } });
47
49
  var validatePolicy_1 = require("./validatePolicy");
48
50
  Object.defineProperty(exports, "getPolicyForEnv", { enumerable: true, get: function () { return validatePolicy_1.getPolicyForEnv; } });
49
51
  exports.createWallet = __importStar(require("./createWallet"));
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwREFBZ0U7QUFBdkQsNkdBQUEsVUFBVSxPQUFBO0FBQUUsNkdBQUEsVUFBVSxPQUFBO0FBQy9CLGlGQUFnRjtBQUF2RSw4SUFBQSw2QkFBNkIsT0FBQTtBQUN0QyxxREFBb0Q7QUFBM0Msa0hBQUEsZUFBZSxPQUFBO0FBQ3hCLHVEQUFvRjtBQUEzRSxzSEFBQSxrQkFBa0IsT0FBQTtBQUFFLDhIQUFBLDBCQUEwQixPQUFBO0FBQ3ZELG1EQUFtRDtBQUExQyxpSEFBQSxlQUFlLE9BQUE7QUFDeEIsK0RBQStDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgTWluaXNjcmlwdCwgRGVzY3JpcHRvciB9IGZyb20gJ0BiaXRnby93YXNtLW1pbmlzY3JpcHQnO1xuZXhwb3J0IHsgYXNzZXJ0RGVzY3JpcHRvcldhbGxldEFkZHJlc3MgfSBmcm9tICcuL2Fzc2VydERlc2NyaXB0b3JXYWxsZXRBZGRyZXNzJztcbmV4cG9ydCB7IE5hbWVkRGVzY3JpcHRvciB9IGZyb20gJy4vTmFtZWREZXNjcmlwdG9yJztcbmV4cG9ydCB7IGlzRGVzY3JpcHRvcldhbGxldCwgZ2V0RGVzY3JpcHRvck1hcEZyb21XYWxsZXQgfSBmcm9tICcuL2Rlc2NyaXB0b3JXYWxsZXQnO1xuZXhwb3J0IHsgZ2V0UG9saWN5Rm9yRW52IH0gZnJvbSAnLi92YWxpZGF0ZVBvbGljeSc7XG5leHBvcnQgKiBhcyBjcmVhdGVXYWxsZXQgZnJvbSAnLi9jcmVhdGVXYWxsZXQnO1xuIl19
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwREFBZ0U7QUFBdkQsNkdBQUEsVUFBVSxPQUFBO0FBQUUsNkdBQUEsVUFBVSxPQUFBO0FBQy9CLGlGQUFnRjtBQUF2RSw4SUFBQSw2QkFBNkIsT0FBQTtBQUN0QyxxREFBMkc7QUFBbEcsa0hBQUEsZUFBZSxPQUFBO0FBQUUscUlBQUEsa0NBQWtDLE9BQUE7QUFBRSxvSEFBQSxpQkFBaUIsT0FBQTtBQUMvRSx1REFBb0Y7QUFBM0Usc0hBQUEsa0JBQWtCLE9BQUE7QUFBRSw4SEFBQSwwQkFBMEIsT0FBQTtBQUN2RCxtREFBbUQ7QUFBMUMsaUhBQUEsZUFBZSxPQUFBO0FBQ3hCLCtEQUErQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IE1pbmlzY3JpcHQsIERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS1taW5pc2NyaXB0JztcbmV4cG9ydCB7IGFzc2VydERlc2NyaXB0b3JXYWxsZXRBZGRyZXNzIH0gZnJvbSAnLi9hc3NlcnREZXNjcmlwdG9yV2FsbGV0QWRkcmVzcyc7XG5leHBvcnQgeyBOYW1lZERlc2NyaXB0b3IsIGNyZWF0ZU5hbWVkRGVzY3JpcHRvcldpdGhTaWduYXR1cmUsIGhhc1ZhbGlkU2lnbmF0dXJlIH0gZnJvbSAnLi9OYW1lZERlc2NyaXB0b3InO1xuZXhwb3J0IHsgaXNEZXNjcmlwdG9yV2FsbGV0LCBnZXREZXNjcmlwdG9yTWFwRnJvbVdhbGxldCB9IGZyb20gJy4vZGVzY3JpcHRvcldhbGxldCc7XG5leHBvcnQgeyBnZXRQb2xpY3lGb3JFbnYgfSBmcm9tICcuL3ZhbGlkYXRlUG9saWN5JztcbmV4cG9ydCAqIGFzIGNyZWF0ZVdhbGxldCBmcm9tICcuL2NyZWF0ZVdhbGxldCc7XG4iXX0=
@@ -2,13 +2,22 @@ import { Descriptor } from '@bitgo/wasm-miniscript';
2
2
  import { EnvironmentName, Triple } from '@bitgo/sdk-core';
3
3
  import * as utxolib from '@bitgo/utxo-lib';
4
4
  import { DescriptorMap } from '../core/descriptor';
5
- import { DescriptorBuilder } from './builder';
6
5
  import { NamedDescriptor } from './NamedDescriptor';
7
- export type DescriptorValidationPolicy = {
8
- allowedTemplates: DescriptorBuilder['name'][];
9
- } | 'allowAll';
10
6
  export type KeyTriple = Triple<utxolib.BIP32Interface>;
11
- export declare function assertDescriptorPolicy(descriptor: Descriptor, policy: DescriptorValidationPolicy, walletKeys: Triple<utxolib.BIP32Interface>): void;
7
+ export interface DescriptorValidationPolicy {
8
+ name: string;
9
+ validate(d: Descriptor, walletKeys: KeyTriple, signatures: string[]): boolean;
10
+ }
11
+ export declare const policyAllowAll: DescriptorValidationPolicy;
12
+ export declare function getValidatorDescriptorTemplate(name: string): DescriptorValidationPolicy;
13
+ export declare function getValidatorEvery(validators: DescriptorValidationPolicy[]): DescriptorValidationPolicy;
14
+ export declare function getValidatorSome(validators: DescriptorValidationPolicy[]): DescriptorValidationPolicy;
15
+ export declare function getValidatorOneOfTemplates(names: string[]): DescriptorValidationPolicy;
16
+ export declare function getValidatorSignedByUserKey(): DescriptorValidationPolicy;
17
+ export declare class DescriptorPolicyValidationError extends Error {
18
+ constructor(descriptor: Descriptor, policy: DescriptorValidationPolicy);
19
+ }
20
+ export declare function assertDescriptorPolicy(descriptor: Descriptor, policy: DescriptorValidationPolicy, walletKeys: KeyTriple, signatures: string[]): void;
12
21
  export declare function toDescriptorMapValidate(descriptors: NamedDescriptor[], walletKeys: KeyTriple, policy: DescriptorValidationPolicy): DescriptorMap;
13
22
  export declare function getPolicyForEnv(env: EnvironmentName): DescriptorValidationPolicy;
14
23
  //# sourceMappingURL=validatePolicy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validatePolicy.d.ts","sourceRoot":"","sources":["../../../src/descriptor/validatePolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAmB,MAAM,oBAAoB,CAAC;AAEpE,OAAO,EAAE,iBAAiB,EAAmB,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,MAAM,0BAA0B,GAAG;IAAE,gBAAgB,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAA;CAAE,GAAG,UAAU,CAAC;AAExG,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AAiBvD,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,0BAA0B,EAClC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,GACzC,IAAI,CAaN;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,eAAe,EAAE,EAC9B,UAAU,EAAE,SAAS,EACrB,MAAM,EAAE,0BAA0B,GACjC,aAAa,CAMf;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,0BAA0B,CAUhF"}
1
+ {"version":3,"file":"validatePolicy.d.ts","sourceRoot":"","sources":["../../../src/descriptor/validatePolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAmB,MAAM,oBAAoB,CAAC;AAGpE,OAAO,EAAqB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEvE,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AAEvD,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;CAC/E;AAED,eAAO,MAAM,cAAc,EAAE,0BAG5B,CAAC;AAEF,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,0BAA0B,CAYvF;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,0BAA0B,EAAE,GAAG,0BAA0B,CAOtG;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,0BAA0B,EAAE,GAAG,0BAA0B,CAOrG;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,0BAA0B,CAEtF;AAED,wBAAgB,2BAA2B,IAAI,0BAA0B,CAQxE;AAED,qBAAa,+BAAgC,SAAQ,KAAK;gBAC5C,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,0BAA0B;CAGvE;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,0BAA0B,EAClC,UAAU,EAAE,SAAS,EACrB,UAAU,EAAE,MAAM,EAAE,GACnB,IAAI,CAIN;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,eAAe,EAAE,EAC9B,UAAU,EAAE,SAAS,EACrB,MAAM,EAAE,0BAA0B,GACjC,aAAa,CAQf;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,0BAA0B,CAahF"}
@@ -1,48 +1,91 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DescriptorPolicyValidationError = exports.policyAllowAll = void 0;
4
+ exports.getValidatorDescriptorTemplate = getValidatorDescriptorTemplate;
5
+ exports.getValidatorEvery = getValidatorEvery;
6
+ exports.getValidatorSome = getValidatorSome;
7
+ exports.getValidatorOneOfTemplates = getValidatorOneOfTemplates;
8
+ exports.getValidatorSignedByUserKey = getValidatorSignedByUserKey;
3
9
  exports.assertDescriptorPolicy = assertDescriptorPolicy;
4
10
  exports.toDescriptorMapValidate = toDescriptorMapValidate;
5
11
  exports.getPolicyForEnv = getPolicyForEnv;
12
+ const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
6
13
  const descriptor_1 = require("../core/descriptor");
7
14
  const builder_1 = require("./builder");
8
- function isDescriptorWithTemplate(d, name, walletKeys) {
9
- const parsed = (0, builder_1.parseDescriptor)(d);
10
- if (parsed.name !== name) {
11
- return false;
12
- }
13
- if (parsed.keys.length !== walletKeys.length) {
14
- return false;
15
- }
16
- return parsed.keys.every((k, i) => k.toBase58() === walletKeys[i].toBase58());
15
+ const NamedDescriptor_1 = require("./NamedDescriptor");
16
+ exports.policyAllowAll = {
17
+ name: 'allowAll',
18
+ validate: () => true,
19
+ };
20
+ function getValidatorDescriptorTemplate(name) {
21
+ return {
22
+ name: 'descriptorTemplate(' + name + ')',
23
+ validate(d, walletKeys) {
24
+ const parsed = (0, builder_1.parseDescriptor)(d);
25
+ return (parsed.name === name &&
26
+ parsed.keys.length === walletKeys.length &&
27
+ parsed.keys.every((k, i) => k.toBase58() === walletKeys[i].neutered().toBase58()));
28
+ },
29
+ };
30
+ }
31
+ function getValidatorEvery(validators) {
32
+ return {
33
+ name: 'every(' + validators.map((v) => v.name).join(',') + ')',
34
+ validate(d, walletKeys, signatures) {
35
+ return validators.every((v) => v.validate(d, walletKeys, signatures));
36
+ },
37
+ };
38
+ }
39
+ function getValidatorSome(validators) {
40
+ return {
41
+ name: 'some(' + validators.map((v) => v.name).join(',') + ')',
42
+ validate(d, walletKeys, signatures) {
43
+ return validators.some((v) => v.validate(d, walletKeys, signatures));
44
+ },
45
+ };
17
46
  }
18
- function assertDescriptorPolicy(descriptor, policy, walletKeys) {
19
- if (policy === 'allowAll') {
20
- return;
47
+ function getValidatorOneOfTemplates(names) {
48
+ return getValidatorSome(names.map(getValidatorDescriptorTemplate));
49
+ }
50
+ function getValidatorSignedByUserKey() {
51
+ return {
52
+ name: 'signedByUser',
53
+ validate(d, walletKeys, signatures) {
54
+ // the first key is the user key, by convention
55
+ return (0, NamedDescriptor_1.hasValidSignature)(d, walletKeys[0], signatures);
56
+ },
57
+ };
58
+ }
59
+ class DescriptorPolicyValidationError extends Error {
60
+ constructor(descriptor, policy) {
61
+ super(`Descriptor ${descriptor.toString()} does not match policy ${policy.name}`);
21
62
  }
22
- if ('allowedTemplates' in policy) {
23
- const allowed = policy.allowedTemplates;
24
- if (!allowed.some((t) => isDescriptorWithTemplate(descriptor, t, walletKeys))) {
25
- throw new Error(`Descriptor ${descriptor.toString()} does not match any allowed template`);
26
- }
63
+ }
64
+ exports.DescriptorPolicyValidationError = DescriptorPolicyValidationError;
65
+ function assertDescriptorPolicy(descriptor, policy, walletKeys, signatures) {
66
+ if (!policy.validate(descriptor, walletKeys, signatures)) {
67
+ throw new DescriptorPolicyValidationError(descriptor, policy);
27
68
  }
28
- throw new Error(`Unknown descriptor validation policy: ${policy}`);
29
69
  }
30
70
  function toDescriptorMapValidate(descriptors, walletKeys, policy) {
31
- const map = (0, descriptor_1.toDescriptorMap)(descriptors);
32
- for (const descriptor of map.values()) {
33
- assertDescriptorPolicy(descriptor, policy, walletKeys);
34
- }
35
- return map;
71
+ return (0, descriptor_1.toDescriptorMap)(descriptors.map((namedDescriptor) => {
72
+ const d = wasm_miniscript_1.Descriptor.fromString(namedDescriptor.value, 'derivable');
73
+ assertDescriptorPolicy(d, policy, walletKeys, namedDescriptor.signatures ?? []);
74
+ return { name: namedDescriptor.name, value: d };
75
+ }));
36
76
  }
37
77
  function getPolicyForEnv(env) {
38
78
  switch (env) {
39
79
  case 'adminProd':
40
80
  case 'prod':
41
- return {
42
- allowedTemplates: ['Wsh2Of3', 'Wsh2Of3CltvDrop', 'ShWsh2Of3CltvDrop'],
43
- };
81
+ return getValidatorSome([
82
+ // allow all 2-of-3-ish descriptors where the keys match the wallet keys
83
+ getValidatorOneOfTemplates(['Wsh2Of3', 'Wsh2Of3CltvDrop', 'ShWsh2Of3CltvDrop']),
84
+ // allow all descriptors signed by the user key
85
+ getValidatorSignedByUserKey(),
86
+ ]);
44
87
  default:
45
- return 'allowAll';
88
+ return exports.policyAllowAll;
46
89
  }
47
90
  }
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVQb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVzY3JpcHRvci92YWxpZGF0ZVBvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTRCQSx3REFpQkM7QUFFRCwwREFVQztBQUVELDBDQVVDO0FBakVELG1EQUFvRTtBQUVwRSx1Q0FBK0Q7QUFPL0QsU0FBUyx3QkFBd0IsQ0FDL0IsQ0FBYSxFQUNiLElBQStCLEVBQy9CLFVBQTBDO0lBRTFDLE1BQU0sTUFBTSxHQUFHLElBQUEseUJBQWUsRUFBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDekIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0MsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUNoRixDQUFDO0FBRUQsU0FBZ0Isc0JBQXNCLENBQ3BDLFVBQXNCLEVBQ3RCLE1BQWtDLEVBQ2xDLFVBQTBDO0lBRTFDLElBQUksTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQzFCLE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBSSxrQkFBa0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNqQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlFLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxVQUFVLENBQUMsUUFBUSxFQUFFLHNDQUFzQyxDQUFDLENBQUM7UUFDN0YsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRCxTQUFnQix1QkFBdUIsQ0FDckMsV0FBOEIsRUFDOUIsVUFBcUIsRUFDckIsTUFBa0M7SUFFbEMsTUFBTSxHQUFHLEdBQUcsSUFBQSw0QkFBZSxFQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLEtBQUssTUFBTSxVQUFVLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDdEMsc0JBQXNCLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBZ0IsZUFBZSxDQUFDLEdBQW9CO0lBQ2xELFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDWixLQUFLLFdBQVcsQ0FBQztRQUNqQixLQUFLLE1BQU07WUFDVCxPQUFPO2dCQUNMLGdCQUFnQixFQUFFLENBQUMsU0FBUyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixDQUFDO2FBQ3RFLENBQUM7UUFDSjtZQUNFLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpcHRvciB9IGZyb20gJ0BiaXRnby93YXNtLW1pbmlzY3JpcHQnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnROYW1lLCBUcmlwbGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuXG5pbXBvcnQgeyBEZXNjcmlwdG9yTWFwLCB0b0Rlc2NyaXB0b3JNYXAgfSBmcm9tICcuLi9jb3JlL2Rlc2NyaXB0b3InO1xuXG5pbXBvcnQgeyBEZXNjcmlwdG9yQnVpbGRlciwgcGFyc2VEZXNjcmlwdG9yIH0gZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCB7IE5hbWVkRGVzY3JpcHRvciB9IGZyb20gJy4vTmFtZWREZXNjcmlwdG9yJztcblxuZXhwb3J0IHR5cGUgRGVzY3JpcHRvclZhbGlkYXRpb25Qb2xpY3kgPSB7IGFsbG93ZWRUZW1wbGF0ZXM6IERlc2NyaXB0b3JCdWlsZGVyWyduYW1lJ11bXSB9IHwgJ2FsbG93QWxsJztcblxuZXhwb3J0IHR5cGUgS2V5VHJpcGxlID0gVHJpcGxlPHV0eG9saWIuQklQMzJJbnRlcmZhY2U+O1xuXG5mdW5jdGlvbiBpc0Rlc2NyaXB0b3JXaXRoVGVtcGxhdGUoXG4gIGQ6IERlc2NyaXB0b3IsXG4gIG5hbWU6IERlc2NyaXB0b3JCdWlsZGVyWyduYW1lJ10sXG4gIHdhbGxldEtleXM6IFRyaXBsZTx1dHhvbGliLkJJUDMySW50ZXJmYWNlPlxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlRGVzY3JpcHRvcihkKTtcbiAgaWYgKHBhcnNlZC5uYW1lICE9PSBuYW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChwYXJzZWQua2V5cy5sZW5ndGggIT09IHdhbGxldEtleXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBwYXJzZWQua2V5cy5ldmVyeSgoaywgaSkgPT4gay50b0Jhc2U1OCgpID09PSB3YWxsZXRLZXlzW2ldLnRvQmFzZTU4KCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0RGVzY3JpcHRvclBvbGljeShcbiAgZGVzY3JpcHRvcjogRGVzY3JpcHRvcixcbiAgcG9saWN5OiBEZXNjcmlwdG9yVmFsaWRhdGlvblBvbGljeSxcbiAgd2FsbGV0S2V5czogVHJpcGxlPHV0eG9saWIuQklQMzJJbnRlcmZhY2U+XG4pOiB2b2lkIHtcbiAgaWYgKHBvbGljeSA9PT0gJ2FsbG93QWxsJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICgnYWxsb3dlZFRlbXBsYXRlcycgaW4gcG9saWN5KSB7XG4gICAgY29uc3QgYWxsb3dlZCA9IHBvbGljeS5hbGxvd2VkVGVtcGxhdGVzO1xuICAgIGlmICghYWxsb3dlZC5zb21lKCh0KSA9PiBpc0Rlc2NyaXB0b3JXaXRoVGVtcGxhdGUoZGVzY3JpcHRvciwgdCwgd2FsbGV0S2V5cykpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERlc2NyaXB0b3IgJHtkZXNjcmlwdG9yLnRvU3RyaW5nKCl9IGRvZXMgbm90IG1hdGNoIGFueSBhbGxvd2VkIHRlbXBsYXRlYCk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGRlc2NyaXB0b3IgdmFsaWRhdGlvbiBwb2xpY3k6ICR7cG9saWN5fWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9EZXNjcmlwdG9yTWFwVmFsaWRhdGUoXG4gIGRlc2NyaXB0b3JzOiBOYW1lZERlc2NyaXB0b3JbXSxcbiAgd2FsbGV0S2V5czogS2V5VHJpcGxlLFxuICBwb2xpY3k6IERlc2NyaXB0b3JWYWxpZGF0aW9uUG9saWN5XG4pOiBEZXNjcmlwdG9yTWFwIHtcbiAgY29uc3QgbWFwID0gdG9EZXNjcmlwdG9yTWFwKGRlc2NyaXB0b3JzKTtcbiAgZm9yIChjb25zdCBkZXNjcmlwdG9yIG9mIG1hcC52YWx1ZXMoKSkge1xuICAgIGFzc2VydERlc2NyaXB0b3JQb2xpY3koZGVzY3JpcHRvciwgcG9saWN5LCB3YWxsZXRLZXlzKTtcbiAgfVxuICByZXR1cm4gbWFwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9saWN5Rm9yRW52KGVudjogRW52aXJvbm1lbnROYW1lKTogRGVzY3JpcHRvclZhbGlkYXRpb25Qb2xpY3kge1xuICBzd2l0Y2ggKGVudikge1xuICAgIGNhc2UgJ2FkbWluUHJvZCc6XG4gICAgY2FzZSAncHJvZCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbGxvd2VkVGVtcGxhdGVzOiBbJ1dzaDJPZjMnLCAnV3NoMk9mM0NsdHZEcm9wJywgJ1NoV3NoMk9mM0NsdHZEcm9wJ10sXG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ2FsbG93QWxsJztcbiAgfVxufVxuIl19
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVQb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVzY3JpcHRvci92YWxpZGF0ZVBvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFxQkEsd0VBWUM7QUFFRCw4Q0FPQztBQUVELDRDQU9DO0FBRUQsZ0VBRUM7QUFFRCxrRUFRQztBQVFELHdEQVNDO0FBRUQsMERBWUM7QUFFRCwwQ0FhQztBQS9HRCw0REFBb0Q7QUFJcEQsbURBQW9FO0FBRXBFLHVDQUE0QztBQUM1Qyx1REFBdUU7QUFTMUQsUUFBQSxjQUFjLEdBQStCO0lBQ3hELElBQUksRUFBRSxVQUFVO0lBQ2hCLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJO0NBQ3JCLENBQUM7QUFFRixTQUFnQiw4QkFBOEIsQ0FBQyxJQUFZO0lBQ3pELE9BQU87UUFDTCxJQUFJLEVBQUUscUJBQXFCLEdBQUcsSUFBSSxHQUFHLEdBQUc7UUFDeEMsUUFBUSxDQUFDLENBQWEsRUFBRSxVQUFxQjtZQUMzQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHlCQUFlLEVBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsT0FBTyxDQUNMLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSTtnQkFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLE1BQU07Z0JBQ3hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUNsRixDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsVUFBd0M7SUFDeEUsT0FBTztRQUNMLElBQUksRUFBRSxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHO1FBQzlELFFBQVEsQ0FBQyxDQUFhLEVBQUUsVUFBcUIsRUFBRSxVQUFvQjtZQUNqRSxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLFVBQXdDO0lBQ3ZFLE9BQU87UUFDTCxJQUFJLEVBQUUsT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRztRQUM3RCxRQUFRLENBQUMsQ0FBYSxFQUFFLFVBQXFCLEVBQUUsVUFBb0I7WUFDakUsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN2RSxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQiwwQkFBMEIsQ0FBQyxLQUFlO0lBQ3hELE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELFNBQWdCLDJCQUEyQjtJQUN6QyxPQUFPO1FBQ0wsSUFBSSxFQUFFLGNBQWM7UUFDcEIsUUFBUSxDQUFDLENBQWEsRUFBRSxVQUFxQixFQUFFLFVBQW9CO1lBQ2pFLCtDQUErQztZQUMvQyxPQUFPLElBQUEsbUNBQWlCLEVBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN6RCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFhLCtCQUFnQyxTQUFRLEtBQUs7SUFDeEQsWUFBWSxVQUFzQixFQUFFLE1BQWtDO1FBQ3BFLEtBQUssQ0FBQyxjQUFjLFVBQVUsQ0FBQyxRQUFRLEVBQUUsMEJBQTBCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7Q0FDRjtBQUpELDBFQUlDO0FBRUQsU0FBZ0Isc0JBQXNCLENBQ3BDLFVBQXNCLEVBQ3RCLE1BQWtDLEVBQ2xDLFVBQXFCLEVBQ3JCLFVBQW9CO0lBRXBCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUN6RCxNQUFNLElBQUksK0JBQStCLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hFLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBZ0IsdUJBQXVCLENBQ3JDLFdBQThCLEVBQzlCLFVBQXFCLEVBQ3JCLE1BQWtDO0lBRWxDLE9BQU8sSUFBQSw0QkFBZSxFQUNwQixXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7UUFDbEMsTUFBTSxDQUFDLEdBQUcsNEJBQVUsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNwRSxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxlQUFlLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLE9BQU8sRUFBRSxJQUFJLEVBQUUsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDbEQsQ0FBQyxDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixlQUFlLENBQUMsR0FBb0I7SUFDbEQsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNaLEtBQUssV0FBVyxDQUFDO1FBQ2pCLEtBQUssTUFBTTtZQUNULE9BQU8sZ0JBQWdCLENBQUM7Z0JBQ3RCLHdFQUF3RTtnQkFDeEUsMEJBQTBCLENBQUMsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztnQkFDL0UsK0NBQStDO2dCQUMvQywyQkFBMkIsRUFBRTthQUM5QixDQUFDLENBQUM7UUFDTDtZQUNFLE9BQU8sc0JBQWMsQ0FBQztJQUMxQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS1taW5pc2NyaXB0JztcbmltcG9ydCB7IEVudmlyb25tZW50TmFtZSwgVHJpcGxlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcblxuaW1wb3J0IHsgRGVzY3JpcHRvck1hcCwgdG9EZXNjcmlwdG9yTWFwIH0gZnJvbSAnLi4vY29yZS9kZXNjcmlwdG9yJztcblxuaW1wb3J0IHsgcGFyc2VEZXNjcmlwdG9yIH0gZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCB7IGhhc1ZhbGlkU2lnbmF0dXJlLCBOYW1lZERlc2NyaXB0b3IgfSBmcm9tICcuL05hbWVkRGVzY3JpcHRvcic7XG5cbmV4cG9ydCB0eXBlIEtleVRyaXBsZSA9IFRyaXBsZTx1dHhvbGliLkJJUDMySW50ZXJmYWNlPjtcblxuZXhwb3J0IGludGVyZmFjZSBEZXNjcmlwdG9yVmFsaWRhdGlvblBvbGljeSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmFsaWRhdGUoZDogRGVzY3JpcHRvciwgd2FsbGV0S2V5czogS2V5VHJpcGxlLCBzaWduYXR1cmVzOiBzdHJpbmdbXSk6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBwb2xpY3lBbGxvd0FsbDogRGVzY3JpcHRvclZhbGlkYXRpb25Qb2xpY3kgPSB7XG4gIG5hbWU6ICdhbGxvd0FsbCcsXG4gIHZhbGlkYXRlOiAoKSA9PiB0cnVlLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbGlkYXRvckRlc2NyaXB0b3JUZW1wbGF0ZShuYW1lOiBzdHJpbmcpOiBEZXNjcmlwdG9yVmFsaWRhdGlvblBvbGljeSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2Rlc2NyaXB0b3JUZW1wbGF0ZSgnICsgbmFtZSArICcpJyxcbiAgICB2YWxpZGF0ZShkOiBEZXNjcmlwdG9yLCB3YWxsZXRLZXlzOiBLZXlUcmlwbGUpOiBib29sZWFuIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRGVzY3JpcHRvcihkKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHBhcnNlZC5uYW1lID09PSBuYW1lICYmXG4gICAgICAgIHBhcnNlZC5rZXlzLmxlbmd0aCA9PT0gd2FsbGV0S2V5cy5sZW5ndGggJiZcbiAgICAgICAgcGFyc2VkLmtleXMuZXZlcnkoKGssIGkpID0+IGsudG9CYXNlNTgoKSA9PT0gd2FsbGV0S2V5c1tpXS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpXG4gICAgICApO1xuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWxpZGF0b3JFdmVyeSh2YWxpZGF0b3JzOiBEZXNjcmlwdG9yVmFsaWRhdGlvblBvbGljeVtdKTogRGVzY3JpcHRvclZhbGlkYXRpb25Qb2xpY3kge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdldmVyeSgnICsgdmFsaWRhdG9ycy5tYXAoKHYpID0+IHYubmFtZSkuam9pbignLCcpICsgJyknLFxuICAgIHZhbGlkYXRlKGQ6IERlc2NyaXB0b3IsIHdhbGxldEtleXM6IEtleVRyaXBsZSwgc2lnbmF0dXJlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB2YWxpZGF0b3JzLmV2ZXJ5KCh2KSA9PiB2LnZhbGlkYXRlKGQsIHdhbGxldEtleXMsIHNpZ25hdHVyZXMpKTtcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWRhdG9yU29tZSh2YWxpZGF0b3JzOiBEZXNjcmlwdG9yVmFsaWRhdGlvblBvbGljeVtdKTogRGVzY3JpcHRvclZhbGlkYXRpb25Qb2xpY3kge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzb21lKCcgKyB2YWxpZGF0b3JzLm1hcCgodikgPT4gdi5uYW1lKS5qb2luKCcsJykgKyAnKScsXG4gICAgdmFsaWRhdGUoZDogRGVzY3JpcHRvciwgd2FsbGV0S2V5czogS2V5VHJpcGxlLCBzaWduYXR1cmVzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHZhbGlkYXRvcnMuc29tZSgodikgPT4gdi52YWxpZGF0ZShkLCB3YWxsZXRLZXlzLCBzaWduYXR1cmVzKSk7XG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbGlkYXRvck9uZU9mVGVtcGxhdGVzKG5hbWVzOiBzdHJpbmdbXSk6IERlc2NyaXB0b3JWYWxpZGF0aW9uUG9saWN5IHtcbiAgcmV0dXJuIGdldFZhbGlkYXRvclNvbWUobmFtZXMubWFwKGdldFZhbGlkYXRvckRlc2NyaXB0b3JUZW1wbGF0ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWRhdG9yU2lnbmVkQnlVc2VyS2V5KCk6IERlc2NyaXB0b3JWYWxpZGF0aW9uUG9saWN5IHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2lnbmVkQnlVc2VyJyxcbiAgICB2YWxpZGF0ZShkOiBEZXNjcmlwdG9yLCB3YWxsZXRLZXlzOiBLZXlUcmlwbGUsIHNpZ25hdHVyZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgICAvLyB0aGUgZmlyc3Qga2V5IGlzIHRoZSB1c2VyIGtleSwgYnkgY29udmVudGlvblxuICAgICAgcmV0dXJuIGhhc1ZhbGlkU2lnbmF0dXJlKGQsIHdhbGxldEtleXNbMF0sIHNpZ25hdHVyZXMpO1xuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBEZXNjcmlwdG9yUG9saWN5VmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihkZXNjcmlwdG9yOiBEZXNjcmlwdG9yLCBwb2xpY3k6IERlc2NyaXB0b3JWYWxpZGF0aW9uUG9saWN5KSB7XG4gICAgc3VwZXIoYERlc2NyaXB0b3IgJHtkZXNjcmlwdG9yLnRvU3RyaW5nKCl9IGRvZXMgbm90IG1hdGNoIHBvbGljeSAke3BvbGljeS5uYW1lfWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnREZXNjcmlwdG9yUG9saWN5KFxuICBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yLFxuICBwb2xpY3k6IERlc2NyaXB0b3JWYWxpZGF0aW9uUG9saWN5LFxuICB3YWxsZXRLZXlzOiBLZXlUcmlwbGUsXG4gIHNpZ25hdHVyZXM6IHN0cmluZ1tdXG4pOiB2b2lkIHtcbiAgaWYgKCFwb2xpY3kudmFsaWRhdGUoZGVzY3JpcHRvciwgd2FsbGV0S2V5cywgc2lnbmF0dXJlcykpIHtcbiAgICB0aHJvdyBuZXcgRGVzY3JpcHRvclBvbGljeVZhbGlkYXRpb25FcnJvcihkZXNjcmlwdG9yLCBwb2xpY3kpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0Rlc2NyaXB0b3JNYXBWYWxpZGF0ZShcbiAgZGVzY3JpcHRvcnM6IE5hbWVkRGVzY3JpcHRvcltdLFxuICB3YWxsZXRLZXlzOiBLZXlUcmlwbGUsXG4gIHBvbGljeTogRGVzY3JpcHRvclZhbGlkYXRpb25Qb2xpY3lcbik6IERlc2NyaXB0b3JNYXAge1xuICByZXR1cm4gdG9EZXNjcmlwdG9yTWFwKFxuICAgIGRlc2NyaXB0b3JzLm1hcCgobmFtZWREZXNjcmlwdG9yKSA9PiB7XG4gICAgICBjb25zdCBkID0gRGVzY3JpcHRvci5mcm9tU3RyaW5nKG5hbWVkRGVzY3JpcHRvci52YWx1ZSwgJ2Rlcml2YWJsZScpO1xuICAgICAgYXNzZXJ0RGVzY3JpcHRvclBvbGljeShkLCBwb2xpY3ksIHdhbGxldEtleXMsIG5hbWVkRGVzY3JpcHRvci5zaWduYXR1cmVzID8/IFtdKTtcbiAgICAgIHJldHVybiB7IG5hbWU6IG5hbWVkRGVzY3JpcHRvci5uYW1lLCB2YWx1ZTogZCB9O1xuICAgIH0pXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb2xpY3lGb3JFbnYoZW52OiBFbnZpcm9ubWVudE5hbWUpOiBEZXNjcmlwdG9yVmFsaWRhdGlvblBvbGljeSB7XG4gIHN3aXRjaCAoZW52KSB7XG4gICAgY2FzZSAnYWRtaW5Qcm9kJzpcbiAgICBjYXNlICdwcm9kJzpcbiAgICAgIHJldHVybiBnZXRWYWxpZGF0b3JTb21lKFtcbiAgICAgICAgLy8gYWxsb3cgYWxsIDItb2YtMy1pc2ggZGVzY3JpcHRvcnMgd2hlcmUgdGhlIGtleXMgbWF0Y2ggdGhlIHdhbGxldCBrZXlzXG4gICAgICAgIGdldFZhbGlkYXRvck9uZU9mVGVtcGxhdGVzKFsnV3NoMk9mMycsICdXc2gyT2YzQ2x0dkRyb3AnLCAnU2hXc2gyT2YzQ2x0dkRyb3AnXSksXG4gICAgICAgIC8vIGFsbG93IGFsbCBkZXNjcmlwdG9ycyBzaWduZWQgYnkgdGhlIHVzZXIga2V5XG4gICAgICAgIGdldFZhbGlkYXRvclNpZ25lZEJ5VXNlcktleSgpLFxuICAgICAgXSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBwb2xpY3lBbGxvd0FsbDtcbiAgfVxufVxuIl19
@@ -7,6 +7,7 @@ const assert_1 = __importDefault(require("assert"));
7
7
  const descriptor_1 = require("../../src/descriptor");
8
8
  const descriptor_utils_1 = require("../core/descriptor/descriptor.utils");
9
9
  const keychains_1 = require("../../src/keychains");
10
+ const validatePolicy_1 = require("../../src/descriptor/validatePolicy");
10
11
  describe('isDescriptorWalletData', function () {
11
12
  const descriptorMap = (0, descriptor_utils_1.getDescriptorMap)('Wsh2Of3');
12
13
  it('should return true for valid DescriptorWalletData', function () {
@@ -21,7 +22,7 @@ describe('isDescriptorWalletData', function () {
21
22
  },
22
23
  };
23
24
  (0, assert_1.default)((0, descriptor_1.isDescriptorWallet)(wallet));
24
- assert_1.default.strictEqual((0, descriptor_1.getDescriptorMapFromWallet)(wallet, (0, keychains_1.toBip32Triple)((0, descriptor_utils_1.getDefaultXPubs)()), 'allowAll').size, descriptorMap.size);
25
+ assert_1.default.strictEqual((0, descriptor_1.getDescriptorMapFromWallet)(wallet, (0, keychains_1.toBip32Triple)((0, descriptor_utils_1.getDefaultXPubs)()), validatePolicy_1.policyAllowAll).size, descriptorMap.size);
25
26
  });
26
27
  });
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvcldhbGxldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvZGVzY3JpcHRvci9kZXNjcmlwdG9yV2FsbGV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLHFEQUFzRjtBQUV0RiwwRUFBd0Y7QUFDeEYsbURBQW9EO0FBRXBELFFBQVEsQ0FBQyx3QkFBd0IsRUFBRTtJQUNqQyxNQUFNLGFBQWEsR0FBRyxJQUFBLG1DQUFnQixFQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xELEVBQUUsQ0FBQyxtREFBbUQsRUFBRTtRQUN0RCxNQUFNLE1BQU0sR0FBZTtZQUN6QixZQUFZO2dCQUNWLE9BQU87b0JBQ0wsV0FBVyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDckUsSUFBSTt3QkFDSixLQUFLLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRTtxQkFDN0IsQ0FBQyxDQUFDO2lCQUNKLENBQUM7WUFDSixDQUFDO1NBQ3VCLENBQUM7UUFFM0IsSUFBQSxnQkFBTSxFQUFDLElBQUEsK0JBQWtCLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNuQyxnQkFBTSxDQUFDLFdBQVcsQ0FDaEIsSUFBQSx1Q0FBMEIsRUFBQyxNQUFNLEVBQUUsSUFBQSx5QkFBYSxFQUFDLElBQUEsa0NBQWUsR0FBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUNyRixhQUFhLENBQUMsSUFBSSxDQUNuQixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHsgZ2V0RGVzY3JpcHRvck1hcEZyb21XYWxsZXQsIGlzRGVzY3JpcHRvcldhbGxldCB9IGZyb20gJy4uLy4uL3NyYy9kZXNjcmlwdG9yJztcbmltcG9ydCB7IFV0eG9XYWxsZXQgfSBmcm9tICcuLi8uLi9zcmMvd2FsbGV0JztcbmltcG9ydCB7IGdldERlZmF1bHRYUHVicywgZ2V0RGVzY3JpcHRvck1hcCB9IGZyb20gJy4uL2NvcmUvZGVzY3JpcHRvci9kZXNjcmlwdG9yLnV0aWxzJztcbmltcG9ydCB7IHRvQmlwMzJUcmlwbGUgfSBmcm9tICcuLi8uLi9zcmMva2V5Y2hhaW5zJztcblxuZGVzY3JpYmUoJ2lzRGVzY3JpcHRvcldhbGxldERhdGEnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGRlc2NyaXB0b3JNYXAgPSBnZXREZXNjcmlwdG9yTWFwKCdXc2gyT2YzJyk7XG4gIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIHZhbGlkIERlc2NyaXB0b3JXYWxsZXREYXRhJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHdhbGxldDogVXR4b1dhbGxldCA9IHtcbiAgICAgIGNvaW5TcGVjaWZpYygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkZXNjcmlwdG9yczogWy4uLmRlc2NyaXB0b3JNYXAuZW50cmllcygpXS5tYXAoKFtuYW1lLCBkZXNjcmlwdG9yXSkgPT4gKHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogZGVzY3JpcHRvci50b1N0cmluZygpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSBhcyB1bmtub3duIGFzIFV0eG9XYWxsZXQ7XG5cbiAgICBhc3NlcnQoaXNEZXNjcmlwdG9yV2FsbGV0KHdhbGxldCkpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIGdldERlc2NyaXB0b3JNYXBGcm9tV2FsbGV0KHdhbGxldCwgdG9CaXAzMlRyaXBsZShnZXREZWZhdWx0WFB1YnMoKSksICdhbGxvd0FsbCcpLnNpemUsXG4gICAgICBkZXNjcmlwdG9yTWFwLnNpemVcbiAgICApO1xuICB9KTtcbn0pO1xuIl19
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvcldhbGxldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvZGVzY3JpcHRvci9kZXNjcmlwdG9yV2FsbGV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLHFEQUFzRjtBQUV0RiwwRUFBd0Y7QUFDeEYsbURBQW9EO0FBQ3BELHdFQUFxRTtBQUVyRSxRQUFRLENBQUMsd0JBQXdCLEVBQUU7SUFDakMsTUFBTSxhQUFhLEdBQUcsSUFBQSxtQ0FBZ0IsRUFBQyxTQUFTLENBQUMsQ0FBQztJQUNsRCxFQUFFLENBQUMsbURBQW1ELEVBQUU7UUFDdEQsTUFBTSxNQUFNLEdBQWU7WUFDekIsWUFBWTtnQkFDVixPQUFPO29CQUNMLFdBQVcsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQ3JFLElBQUk7d0JBQ0osS0FBSyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUU7cUJBQzdCLENBQUMsQ0FBQztpQkFDSixDQUFDO1lBQ0osQ0FBQztTQUN1QixDQUFDO1FBRTNCLElBQUEsZ0JBQU0sRUFBQyxJQUFBLCtCQUFrQixFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDbkMsZ0JBQU0sQ0FBQyxXQUFXLENBQ2hCLElBQUEsdUNBQTBCLEVBQUMsTUFBTSxFQUFFLElBQUEseUJBQWEsRUFBQyxJQUFBLGtDQUFlLEdBQUUsQ0FBQyxFQUFFLCtCQUFjLENBQUMsQ0FBQyxJQUFJLEVBQ3pGLGFBQWEsQ0FBQyxJQUFJLENBQ25CLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyBnZXREZXNjcmlwdG9yTWFwRnJvbVdhbGxldCwgaXNEZXNjcmlwdG9yV2FsbGV0IH0gZnJvbSAnLi4vLi4vc3JjL2Rlc2NyaXB0b3InO1xuaW1wb3J0IHsgVXR4b1dhbGxldCB9IGZyb20gJy4uLy4uL3NyYy93YWxsZXQnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFhQdWJzLCBnZXREZXNjcmlwdG9yTWFwIH0gZnJvbSAnLi4vY29yZS9kZXNjcmlwdG9yL2Rlc2NyaXB0b3IudXRpbHMnO1xuaW1wb3J0IHsgdG9CaXAzMlRyaXBsZSB9IGZyb20gJy4uLy4uL3NyYy9rZXljaGFpbnMnO1xuaW1wb3J0IHsgcG9saWN5QWxsb3dBbGwgfSBmcm9tICcuLi8uLi9zcmMvZGVzY3JpcHRvci92YWxpZGF0ZVBvbGljeSc7XG5cbmRlc2NyaWJlKCdpc0Rlc2NyaXB0b3JXYWxsZXREYXRhJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBkZXNjcmlwdG9yTWFwID0gZ2V0RGVzY3JpcHRvck1hcCgnV3NoMk9mMycpO1xuICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciB2YWxpZCBEZXNjcmlwdG9yV2FsbGV0RGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB3YWxsZXQ6IFV0eG9XYWxsZXQgPSB7XG4gICAgICBjb2luU3BlY2lmaWMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGVzY3JpcHRvcnM6IFsuLi5kZXNjcmlwdG9yTWFwLmVudHJpZXMoKV0ubWFwKChbbmFtZSwgZGVzY3JpcHRvcl0pID0+ICh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdmFsdWU6IGRlc2NyaXB0b3IudG9TdHJpbmcoKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0gYXMgdW5rbm93biBhcyBVdHhvV2FsbGV0O1xuXG4gICAgYXNzZXJ0KGlzRGVzY3JpcHRvcldhbGxldCh3YWxsZXQpKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICBnZXREZXNjcmlwdG9yTWFwRnJvbVdhbGxldCh3YWxsZXQsIHRvQmlwMzJUcmlwbGUoZ2V0RGVmYXVsdFhQdWJzKCkpLCBwb2xpY3lBbGxvd0FsbCkuc2l6ZSxcbiAgICAgIGRlc2NyaXB0b3JNYXAuc2l6ZVxuICAgICk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validatePolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validatePolicy.d.ts","sourceRoot":"","sources":["../../../../test/transaction/descriptor/validatePolicy.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const assert_1 = __importDefault(require("assert"));
7
+ const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
8
+ const validatePolicy_1 = require("../../../src/descriptor/validatePolicy");
9
+ const descriptor_utils_1 = require("../../core/descriptor/descriptor.utils");
10
+ const key_utils_1 = require("../../core/key.utils");
11
+ const NamedDescriptor_1 = require("../../../src/descriptor/NamedDescriptor");
12
+ function testAssertDescriptorPolicy(d, p, k, expectedError) {
13
+ const f = () => (0, validatePolicy_1.assertDescriptorPolicy)(wasm_miniscript_1.Descriptor.fromString(d.value, 'derivable'), p, k, d.signatures ?? []);
14
+ if (expectedError) {
15
+ assert_1.default.throws(f);
16
+ }
17
+ else {
18
+ assert_1.default.doesNotThrow(f);
19
+ }
20
+ }
21
+ describe('assertDescriptorPolicy', function () {
22
+ const keys = (0, key_utils_1.getKeyTriple)();
23
+ function getNamedDescriptor(name) {
24
+ return (0, NamedDescriptor_1.createNamedDescriptorWithSignature)(name, (0, descriptor_utils_1.getDescriptor)(name), keys[0]);
25
+ }
26
+ function stripSignature(d) {
27
+ return { ...d, signatures: undefined };
28
+ }
29
+ it('has expected result', function () {
30
+ testAssertDescriptorPolicy(getNamedDescriptor('Wsh2Of3'), (0, validatePolicy_1.getValidatorDescriptorTemplate)('Wsh2Of3'), keys, null);
31
+ // prod does only allow Wsh2Of3-ish descriptors
32
+ testAssertDescriptorPolicy(getNamedDescriptor('Wsh2Of3'), (0, validatePolicy_1.getPolicyForEnv)('prod'), keys, null);
33
+ // prod only allows other descriptors if they are signed by the user key
34
+ testAssertDescriptorPolicy(getNamedDescriptor('Wsh2Of2'), (0, validatePolicy_1.getPolicyForEnv)('prod'), keys, null);
35
+ testAssertDescriptorPolicy(stripSignature(getNamedDescriptor('Wsh2Of2')), (0, validatePolicy_1.getPolicyForEnv)('prod'), keys, new validatePolicy_1.DescriptorPolicyValidationError((0, descriptor_utils_1.getDescriptor)('Wsh2Of2'), (0, validatePolicy_1.getPolicyForEnv)('prod')));
36
+ // test is very permissive by default
37
+ testAssertDescriptorPolicy(stripSignature(getNamedDescriptor('Wsh2Of2')), (0, validatePolicy_1.getPolicyForEnv)('test'), keys, null);
38
+ });
39
+ });
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVQb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3RyYW5zYWN0aW9uL2Rlc2NyaXB0b3IvdmFsaWRhdGVQb2xpY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFFNUIsNERBQW9EO0FBSXBELDJFQU1nRDtBQUNoRCw2RUFBMkY7QUFDM0Ysb0RBQW9EO0FBRXBELDZFQUE2RjtBQUU3RixTQUFTLDBCQUEwQixDQUNqQyxDQUEwQixFQUMxQixDQUE2QixFQUM3QixDQUF5QixFQUN6QixhQUFxRDtJQUVyRCxNQUFNLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFBLHVDQUFzQixFQUFDLDRCQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlHLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQztTQUFNLENBQUM7UUFDTixnQkFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixDQUFDO0FBQ0gsQ0FBQztBQUVELFFBQVEsQ0FBQyx3QkFBd0IsRUFBRTtJQUNqQyxNQUFNLElBQUksR0FBRyxJQUFBLHdCQUFZLEdBQUUsQ0FBQztJQUM1QixTQUFTLGtCQUFrQixDQUFDLElBQXdCO1FBQ2xELE9BQU8sSUFBQSxvREFBa0MsRUFBQyxJQUFJLEVBQUUsSUFBQSxnQ0FBYSxFQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFDRCxTQUFTLGNBQWMsQ0FBQyxDQUFrQjtRQUN4QyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxFQUFFLENBQUMscUJBQXFCLEVBQUU7UUFDeEIsMEJBQTBCLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBQSwrQ0FBOEIsRUFBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFakgsK0NBQStDO1FBQy9DLDBCQUEwQixDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUEsZ0NBQWUsRUFBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFL0Ysd0VBQXdFO1FBQ3hFLDBCQUEwQixDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUEsZ0NBQWUsRUFBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDL0YsMEJBQTBCLENBQ3hCLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUM3QyxJQUFBLGdDQUFlLEVBQUMsTUFBTSxDQUFDLEVBQ3ZCLElBQUksRUFDSixJQUFJLGdEQUErQixDQUFDLElBQUEsZ0NBQWEsRUFBQyxTQUFTLENBQUMsRUFBRSxJQUFBLGdDQUFlLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FDdkYsQ0FBQztRQUVGLHFDQUFxQztRQUNyQywwQkFBMEIsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFBLGdDQUFlLEVBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS1taW5pc2NyaXB0JztcbmltcG9ydCB7IFRyaXBsZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCSVAzMkludGVyZmFjZSB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5cbmltcG9ydCB7XG4gIGFzc2VydERlc2NyaXB0b3JQb2xpY3ksXG4gIERlc2NyaXB0b3JQb2xpY3lWYWxpZGF0aW9uRXJyb3IsXG4gIERlc2NyaXB0b3JWYWxpZGF0aW9uUG9saWN5LFxuICBnZXRQb2xpY3lGb3JFbnYsXG4gIGdldFZhbGlkYXRvckRlc2NyaXB0b3JUZW1wbGF0ZSxcbn0gZnJvbSAnLi4vLi4vLi4vc3JjL2Rlc2NyaXB0b3IvdmFsaWRhdGVQb2xpY3knO1xuaW1wb3J0IHsgRGVzY3JpcHRvclRlbXBsYXRlLCBnZXREZXNjcmlwdG9yIH0gZnJvbSAnLi4vLi4vY29yZS9kZXNjcmlwdG9yL2Rlc2NyaXB0b3IudXRpbHMnO1xuaW1wb3J0IHsgZ2V0S2V5VHJpcGxlIH0gZnJvbSAnLi4vLi4vY29yZS9rZXkudXRpbHMnO1xuaW1wb3J0IHsgTmFtZWREZXNjcmlwdG9yIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2Rlc2NyaXB0b3InO1xuaW1wb3J0IHsgY3JlYXRlTmFtZWREZXNjcmlwdG9yV2l0aFNpZ25hdHVyZSB9IGZyb20gJy4uLy4uLy4uL3NyYy9kZXNjcmlwdG9yL05hbWVkRGVzY3JpcHRvcic7XG5cbmZ1bmN0aW9uIHRlc3RBc3NlcnREZXNjcmlwdG9yUG9saWN5KFxuICBkOiBOYW1lZERlc2NyaXB0b3I8c3RyaW5nPixcbiAgcDogRGVzY3JpcHRvclZhbGlkYXRpb25Qb2xpY3ksXG4gIGs6IFRyaXBsZTxCSVAzMkludGVyZmFjZT4sXG4gIGV4cGVjdGVkRXJyb3I6IERlc2NyaXB0b3JQb2xpY3lWYWxpZGF0aW9uRXJyb3IgfCBudWxsXG4pIHtcbiAgY29uc3QgZiA9ICgpID0+IGFzc2VydERlc2NyaXB0b3JQb2xpY3koRGVzY3JpcHRvci5mcm9tU3RyaW5nKGQudmFsdWUsICdkZXJpdmFibGUnKSwgcCwgaywgZC5zaWduYXR1cmVzID8/IFtdKTtcbiAgaWYgKGV4cGVjdGVkRXJyb3IpIHtcbiAgICBhc3NlcnQudGhyb3dzKGYpO1xuICB9IGVsc2Uge1xuICAgIGFzc2VydC5kb2VzTm90VGhyb3coZik7XG4gIH1cbn1cblxuZGVzY3JpYmUoJ2Fzc2VydERlc2NyaXB0b3JQb2xpY3knLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGtleXMgPSBnZXRLZXlUcmlwbGUoKTtcbiAgZnVuY3Rpb24gZ2V0TmFtZWREZXNjcmlwdG9yKG5hbWU6IERlc2NyaXB0b3JUZW1wbGF0ZSk6IE5hbWVkRGVzY3JpcHRvciB7XG4gICAgcmV0dXJuIGNyZWF0ZU5hbWVkRGVzY3JpcHRvcldpdGhTaWduYXR1cmUobmFtZSwgZ2V0RGVzY3JpcHRvcihuYW1lKSwga2V5c1swXSk7XG4gIH1cbiAgZnVuY3Rpb24gc3RyaXBTaWduYXR1cmUoZDogTmFtZWREZXNjcmlwdG9yKTogTmFtZWREZXNjcmlwdG9yIHtcbiAgICByZXR1cm4geyAuLi5kLCBzaWduYXR1cmVzOiB1bmRlZmluZWQgfTtcbiAgfVxuXG4gIGl0KCdoYXMgZXhwZWN0ZWQgcmVzdWx0JywgZnVuY3Rpb24gKCkge1xuICAgIHRlc3RBc3NlcnREZXNjcmlwdG9yUG9saWN5KGdldE5hbWVkRGVzY3JpcHRvcignV3NoMk9mMycpLCBnZXRWYWxpZGF0b3JEZXNjcmlwdG9yVGVtcGxhdGUoJ1dzaDJPZjMnKSwga2V5cywgbnVsbCk7XG5cbiAgICAvLyBwcm9kIGRvZXMgb25seSBhbGxvdyBXc2gyT2YzLWlzaCBkZXNjcmlwdG9yc1xuICAgIHRlc3RBc3NlcnREZXNjcmlwdG9yUG9saWN5KGdldE5hbWVkRGVzY3JpcHRvcignV3NoMk9mMycpLCBnZXRQb2xpY3lGb3JFbnYoJ3Byb2QnKSwga2V5cywgbnVsbCk7XG5cbiAgICAvLyBwcm9kIG9ubHkgYWxsb3dzIG90aGVyIGRlc2NyaXB0b3JzIGlmIHRoZXkgYXJlIHNpZ25lZCBieSB0aGUgdXNlciBrZXlcbiAgICB0ZXN0QXNzZXJ0RGVzY3JpcHRvclBvbGljeShnZXROYW1lZERlc2NyaXB0b3IoJ1dzaDJPZjInKSwgZ2V0UG9saWN5Rm9yRW52KCdwcm9kJyksIGtleXMsIG51bGwpO1xuICAgIHRlc3RBc3NlcnREZXNjcmlwdG9yUG9saWN5KFxuICAgICAgc3RyaXBTaWduYXR1cmUoZ2V0TmFtZWREZXNjcmlwdG9yKCdXc2gyT2YyJykpLFxuICAgICAgZ2V0UG9saWN5Rm9yRW52KCdwcm9kJyksXG4gICAgICBrZXlzLFxuICAgICAgbmV3IERlc2NyaXB0b3JQb2xpY3lWYWxpZGF0aW9uRXJyb3IoZ2V0RGVzY3JpcHRvcignV3NoMk9mMicpLCBnZXRQb2xpY3lGb3JFbnYoJ3Byb2QnKSlcbiAgICApO1xuXG4gICAgLy8gdGVzdCBpcyB2ZXJ5IHBlcm1pc3NpdmUgYnkgZGVmYXVsdFxuICAgIHRlc3RBc3NlcnREZXNjcmlwdG9yUG9saWN5KHN0cmlwU2lnbmF0dXJlKGdldE5hbWVkRGVzY3JpcHRvcignV3NoMk9mMicpKSwgZ2V0UG9saWN5Rm9yRW52KCd0ZXN0JyksIGtleXMsIG51bGwpO1xuICB9KTtcbn0pO1xuIl19