@bitgo-beta/abstract-utxo 1.6.1-alpha.244 → 1.6.1-alpha.245

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/src/core/descriptor/DescriptorMap.d.ts +1 -1
  3. package/dist/src/core/descriptor/DescriptorMap.d.ts.map +1 -1
  4. package/dist/src/core/descriptor/DescriptorMap.js +5 -2
  5. package/dist/src/descriptor/NamedDescriptor.d.ts +14 -3
  6. package/dist/src/descriptor/NamedDescriptor.d.ts.map +1 -1
  7. package/dist/src/descriptor/NamedDescriptor.js +35 -5
  8. package/dist/src/descriptor/createWallet/createDescriptorWallet.d.ts +20 -0
  9. package/dist/src/descriptor/createWallet/createDescriptorWallet.d.ts.map +1 -0
  10. package/dist/src/descriptor/createWallet/createDescriptorWallet.js +74 -0
  11. package/dist/src/descriptor/createWallet/createDescriptors.d.ts +12 -0
  12. package/dist/src/descriptor/createWallet/createDescriptors.d.ts.map +1 -0
  13. package/dist/src/descriptor/createWallet/createDescriptors.js +31 -0
  14. package/dist/src/descriptor/createWallet/index.d.ts +3 -0
  15. package/dist/src/descriptor/createWallet/index.d.ts.map +1 -0
  16. package/dist/src/descriptor/createWallet/index.js +19 -0
  17. package/dist/src/descriptor/index.d.ts +1 -0
  18. package/dist/src/descriptor/index.d.ts.map +1 -1
  19. package/dist/src/descriptor/index.js +36 -2
  20. package/dist/src/descriptor/validatePolicy.d.ts +14 -5
  21. package/dist/src/descriptor/validatePolicy.d.ts.map +1 -1
  22. package/dist/src/descriptor/validatePolicy.js +71 -28
  23. package/dist/test/descriptor/NamedDescriptor.d.ts +2 -0
  24. package/dist/test/descriptor/NamedDescriptor.d.ts.map +1 -0
  25. package/dist/test/descriptor/NamedDescriptor.js +19 -0
  26. package/dist/test/descriptor/createWallet/createDescriptors.d.ts +2 -0
  27. package/dist/test/descriptor/createWallet/createDescriptors.d.ts.map +1 -0
  28. package/dist/test/descriptor/createWallet/createDescriptors.js +21 -0
  29. package/dist/test/descriptor/descriptorWallet.js +3 -2
  30. package/dist/test/transaction/descriptor/validatePolicy.d.ts +2 -0
  31. package/dist/test/transaction/descriptor/validatePolicy.d.ts.map +1 -0
  32. package/dist/test/transaction/descriptor/validatePolicy.js +40 -0
  33. package/dist/tsconfig.tsbuildinfo +1 -1
  34. package/package.json +7 -7
package/CHANGELOG.md CHANGED
@@ -3,6 +3,12 @@
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.10.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/abstract-utxo@9.9.0...@bitgo/abstract-utxo@9.10.0) (2025-01-03)
7
+
8
+ ### Features
9
+
10
+ - **abstract-utxo:** sign descriptors when creating wallet ([079d9b9](https://github.com/BitGo/BitGoJS/commit/079d9b91281ee05b1140aaf8fbf0758627820bba))
11
+
6
12
  # [9.9.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/abstract-utxo@9.8.0...@bitgo/abstract-utxo@9.9.0) (2024-12-24)
7
13
 
8
14
  ### 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=
@@ -1,7 +1,18 @@
1
1
  import * as t from 'io-ts';
2
- export declare const NamedDescriptor: t.TypeC<{
2
+ import { Descriptor } from '@bitgo/wasm-miniscript';
3
+ import { BIP32Interface } from '@bitgo-beta/utxo-lib';
4
+ export declare const NamedDescriptor: t.IntersectionC<[t.TypeC<{
3
5
  name: t.StringC;
4
6
  value: t.StringC;
5
- }>;
6
- export type NamedDescriptor = t.TypeOf<typeof NamedDescriptor>;
7
+ }>, t.PartialC<{
8
+ signatures: t.UnionC<[t.ArrayC<t.StringC>, t.UndefinedC]>;
9
+ }>]>;
10
+ export type NamedDescriptor<T = string> = {
11
+ name: string;
12
+ value: T;
13
+ signatures?: string[];
14
+ };
15
+ export declare function createNamedDescriptorWithSignature(name: string, descriptor: Descriptor, signingKey: BIP32Interface): NamedDescriptor;
16
+ export declare function hasValidSignature(descriptor: string | Descriptor, key: BIP32Interface, signatures: string[]): boolean;
17
+ export declare function assertHasValidSignature(namedDescriptor: NamedDescriptor, key: BIP32Interface): void;
7
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;AAE3B,eAAO,MAAM,eAAe;;;EAG1B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC"}
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,sBAAsB,CAAC;AAGhE,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,UAAU,EACtB,UAAU,EAAE,cAAc,GACzB,eAAe,CAIjB;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"}
@@ -34,9 +34,39 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.NamedDescriptor = void 0;
37
+ exports.createNamedDescriptorWithSignature = createNamedDescriptorWithSignature;
38
+ exports.hasValidSignature = hasValidSignature;
39
+ exports.assertHasValidSignature = assertHasValidSignature;
37
40
  const t = __importStar(require("io-ts"));
38
- exports.NamedDescriptor = t.type({
39
- name: t.string,
40
- value: t.string,
41
- });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmFtZWREZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Rlc2NyaXB0b3IvTmFtZWREZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlDQUEyQjtBQUVkLFFBQUEsZUFBZSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDcEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNO0lBQ2QsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNO0NBQ2hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHQgZnJvbSAnaW8tdHMnO1xuXG5leHBvcnQgY29uc3QgTmFtZWREZXNjcmlwdG9yID0gdC50eXBlKHtcbiAgbmFtZTogdC5zdHJpbmcsXG4gIHZhbHVlOiB0LnN0cmluZyxcbn0pO1xuXG5leHBvcnQgdHlwZSBOYW1lZERlc2NyaXB0b3IgPSB0LlR5cGVPZjx0eXBlb2YgTmFtZWREZXNjcmlwdG9yPjtcbiJdfQ==
41
+ const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
42
+ const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
43
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
44
+ exports.NamedDescriptor = t.intersection([
45
+ t.type({
46
+ name: t.string,
47
+ value: t.string,
48
+ }),
49
+ t.partial({
50
+ signatures: t.union([t.array(t.string), t.undefined]),
51
+ }),
52
+ ], 'NamedDescriptor');
53
+ function createNamedDescriptorWithSignature(name, descriptor, signingKey) {
54
+ const value = descriptor.toString();
55
+ const signature = (0, sdk_core_1.signMessage)(value, signingKey, utxo_lib_1.networks.bitcoin).toString('hex');
56
+ return { name, value, signatures: [signature] };
57
+ }
58
+ function hasValidSignature(descriptor, key, signatures) {
59
+ if (typeof descriptor === 'string') {
60
+ descriptor = wasm_miniscript_1.Descriptor.fromString(descriptor, 'derivable');
61
+ }
62
+ const message = descriptor.toString();
63
+ return signatures.some((signature) => {
64
+ return (0, sdk_core_1.verifyMessage)(message, key, Buffer.from(signature, 'hex'), utxo_lib_1.networks.bitcoin);
65
+ });
66
+ }
67
+ function assertHasValidSignature(namedDescriptor, key) {
68
+ if (!hasValidSignature(namedDescriptor.value, key, namedDescriptor.signatures ?? [])) {
69
+ throw new Error(`Descriptor ${namedDescriptor.name} does not have a valid signature (key=${key.toBase58()})`);
70
+ }
71
+ }
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmFtZWREZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Rlc2NyaXB0b3IvTmFtZWREZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCQSxnRkFRQztBQUVELDhDQVNDO0FBRUQsMERBSUM7QUFqREQseUNBQTJCO0FBQzNCLDREQUFvRDtBQUNwRCxtREFBZ0U7QUFDaEUsbURBQWtFO0FBRXJELFFBQUEsZUFBZSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQzNDO0lBQ0UsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNMLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTTtRQUNkLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTTtLQUNoQixDQUFDO0lBQ0YsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNSLFVBQVUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3RELENBQUM7Q0FDSCxFQUNELGlCQUFpQixDQUNsQixDQUFDO0FBUUYsU0FBZ0Isa0NBQWtDLENBQ2hELElBQVksRUFDWixVQUFzQixFQUN0QixVQUEwQjtJQUUxQixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEMsTUFBTSxTQUFTLEdBQUcsSUFBQSxzQkFBVyxFQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsbUJBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkYsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsVUFBK0IsRUFBRSxHQUFtQixFQUFFLFVBQW9CO0lBQzFHLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkMsVUFBVSxHQUFHLDRCQUFVLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3RDLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1FBQ25DLE9BQU8sSUFBQSx3QkFBYSxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUUsbUJBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0RixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFnQix1QkFBdUIsQ0FBQyxlQUFnQyxFQUFFLEdBQW1CO0lBQzNGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxlQUFlLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDckYsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLGVBQWUsQ0FBQyxJQUFJLHlDQUF5QyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2hILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdCBmcm9tICdpby10cyc7XG5pbXBvcnQgeyBEZXNjcmlwdG9yIH0gZnJvbSAnQGJpdGdvL3dhc20tbWluaXNjcmlwdCc7XG5pbXBvcnQgeyBCSVAzMkludGVyZmFjZSwgbmV0d29ya3MgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBzaWduTWVzc2FnZSwgdmVyaWZ5TWVzc2FnZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuZXhwb3J0IGNvbnN0IE5hbWVkRGVzY3JpcHRvciA9IHQuaW50ZXJzZWN0aW9uKFxuICBbXG4gICAgdC50eXBlKHtcbiAgICAgIG5hbWU6IHQuc3RyaW5nLFxuICAgICAgdmFsdWU6IHQuc3RyaW5nLFxuICAgIH0pLFxuICAgIHQucGFydGlhbCh7XG4gICAgICBzaWduYXR1cmVzOiB0LnVuaW9uKFt0LmFycmF5KHQuc3RyaW5nKSwgdC51bmRlZmluZWRdKSxcbiAgICB9KSxcbiAgXSxcbiAgJ05hbWVkRGVzY3JpcHRvcidcbik7XG5cbmV4cG9ydCB0eXBlIE5hbWVkRGVzY3JpcHRvcjxUID0gc3RyaW5nPiA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZTogVDtcbiAgc2lnbmF0dXJlcz86IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU5hbWVkRGVzY3JpcHRvcldpdGhTaWduYXR1cmUoXG4gIG5hbWU6IHN0cmluZyxcbiAgZGVzY3JpcHRvcjogRGVzY3JpcHRvcixcbiAgc2lnbmluZ0tleTogQklQMzJJbnRlcmZhY2Vcbik6IE5hbWVkRGVzY3JpcHRvciB7XG4gIGNvbnN0IHZhbHVlID0gZGVzY3JpcHRvci50b1N0cmluZygpO1xuICBjb25zdCBzaWduYXR1cmUgPSBzaWduTWVzc2FnZSh2YWx1ZSwgc2lnbmluZ0tleSwgbmV0d29ya3MuYml0Y29pbikudG9TdHJpbmcoJ2hleCcpO1xuICByZXR1cm4geyBuYW1lLCB2YWx1ZSwgc2lnbmF0dXJlczogW3NpZ25hdHVyZV0gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ZhbGlkU2lnbmF0dXJlKGRlc2NyaXB0b3I6IHN0cmluZyB8IERlc2NyaXB0b3IsIGtleTogQklQMzJJbnRlcmZhY2UsIHNpZ25hdHVyZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgZGVzY3JpcHRvciA9PT0gJ3N0cmluZycpIHtcbiAgICBkZXNjcmlwdG9yID0gRGVzY3JpcHRvci5mcm9tU3RyaW5nKGRlc2NyaXB0b3IsICdkZXJpdmFibGUnKTtcbiAgfVxuXG4gIGNvbnN0IG1lc3NhZ2UgPSBkZXNjcmlwdG9yLnRvU3RyaW5nKCk7XG4gIHJldHVybiBzaWduYXR1cmVzLnNvbWUoKHNpZ25hdHVyZSkgPT4ge1xuICAgIHJldHVybiB2ZXJpZnlNZXNzYWdlKG1lc3NhZ2UsIGtleSwgQnVmZmVyLmZyb20oc2lnbmF0dXJlLCAnaGV4JyksIG5ldHdvcmtzLmJpdGNvaW4pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEhhc1ZhbGlkU2lnbmF0dXJlKG5hbWVkRGVzY3JpcHRvcjogTmFtZWREZXNjcmlwdG9yLCBrZXk6IEJJUDMySW50ZXJmYWNlKTogdm9pZCB7XG4gIGlmICghaGFzVmFsaWRTaWduYXR1cmUobmFtZWREZXNjcmlwdG9yLnZhbHVlLCBrZXksIG5hbWVkRGVzY3JpcHRvci5zaWduYXR1cmVzID8/IFtdKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGVzY3JpcHRvciAke25hbWVkRGVzY3JpcHRvci5uYW1lfSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgc2lnbmF0dXJlIChrZXk9JHtrZXkudG9CYXNlNTgoKX0pYCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,20 @@
1
+ import { BitGoAPI } from '@bitgo-beta/sdk-api';
2
+ import { AbstractUtxoCoin } from '../../abstractUtxoCoin';
3
+ import { IDescriptorWallet } from '../descriptorWallet';
4
+ import { NamedDescriptor } from '../NamedDescriptor';
5
+ import { DescriptorFromKeys } from './createDescriptors';
6
+ export declare function createDescriptorWallet(bitgo: BitGoAPI, coin: AbstractUtxoCoin, { descriptors, ...params }: {
7
+ type: 'hot';
8
+ label: string;
9
+ enterprise: string;
10
+ keys: string[];
11
+ descriptors: NamedDescriptor[];
12
+ }): Promise<IDescriptorWallet>;
13
+ export declare function createDescriptorWalletWithWalletPassphrase(bitgo: BitGoAPI, coin: AbstractUtxoCoin, { enterprise, walletPassphrase, descriptorsFromKeys, ...params }: {
14
+ label: string;
15
+ enterprise: string;
16
+ walletPassphrase: string;
17
+ descriptorsFromKeys: DescriptorFromKeys;
18
+ [key: string]: unknown;
19
+ }): Promise<IDescriptorWallet>;
20
+ //# sourceMappingURL=createDescriptorWallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createDescriptorWallet.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/createWallet/createDescriptorWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAI/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,QAAQ,EACf,IAAI,EAAE,gBAAgB,EACtB,EACE,WAAW,EACX,GAAG,MAAM,EACV,EAAE;IACD,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,eAAe,EAAE,CAAC;CAChC,GACA,OAAO,CAAC,iBAAiB,CAAC,CAW5B;AAED,wBAAsB,0CAA0C,CAC9D,KAAK,EAAE,QAAQ,EACf,IAAI,EAAE,gBAAgB,EACtB,EACE,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,GAAG,MAAM,EACV,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,kBAAkB,CAAC;IACxC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,GACA,OAAO,CAAC,iBAAiB,CAAC,CAqB5B"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.createDescriptorWallet = createDescriptorWallet;
37
+ exports.createDescriptorWalletWithWalletPassphrase = createDescriptorWalletWithWalletPassphrase;
38
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
39
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
40
+ async function createDescriptorWallet(bitgo, coin, { descriptors, ...params }) {
41
+ // We don't use `coin.wallets().add` here because it does a bunch of validation that does not make sense
42
+ // for descriptor wallets.
43
+ const newWallet = await bitgo
44
+ .post(coin.url('/wallet/add'))
45
+ .send({
46
+ ...params,
47
+ coinSpecific: { descriptors },
48
+ })
49
+ .result();
50
+ return new sdk_core_1.Wallet(bitgo, coin, newWallet);
51
+ }
52
+ async function createDescriptorWalletWithWalletPassphrase(bitgo, coin, { enterprise, walletPassphrase, descriptorsFromKeys, ...params }) {
53
+ const userKeychain = await coin.keychains().createUserKeychain(walletPassphrase);
54
+ const backupKeychain = await coin.keychains().createBackup();
55
+ const bitgoKeychain = await coin.keychains().createBitGo({ enterprise });
56
+ if (!userKeychain.prv) {
57
+ throw new Error('Missing private key');
58
+ }
59
+ const userKey = utxolib.bip32.fromBase58(userKeychain.prv);
60
+ const cosigners = [backupKeychain, bitgoKeychain].map((keychain) => {
61
+ if (!keychain.pub) {
62
+ throw new Error('Missing public key');
63
+ }
64
+ return utxolib.bip32.fromBase58(keychain.pub);
65
+ });
66
+ return createDescriptorWallet(bitgo, coin, {
67
+ ...params,
68
+ type: 'hot',
69
+ enterprise,
70
+ keys: [userKeychain.id, backupKeychain.id, bitgoKeychain.id],
71
+ descriptors: descriptorsFromKeys(userKey, cosigners),
72
+ });
73
+ }
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlRGVzY3JpcHRvcldhbGxldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kZXNjcmlwdG9yL2NyZWF0ZVdhbGxldC9jcmVhdGVEZXNjcmlwdG9yV2FsbGV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVUEsd0RBd0JDO0FBRUQsZ0dBb0NDO0FBdkVELDhEQUFnRDtBQUNoRCxtREFBOEM7QUFRdkMsS0FBSyxVQUFVLHNCQUFzQixDQUMxQyxLQUFlLEVBQ2YsSUFBc0IsRUFDdEIsRUFDRSxXQUFXLEVBQ1gsR0FBRyxNQUFNLEVBT1Y7SUFFRCx3R0FBd0c7SUFDeEcsMEJBQTBCO0lBQzFCLE1BQU0sU0FBUyxHQUFHLE1BQU0sS0FBSztTQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUM3QixJQUFJLENBQUM7UUFDSixHQUFHLE1BQU07UUFDVCxZQUFZLEVBQUUsRUFBRSxXQUFXLEVBQUU7S0FDOUIsQ0FBQztTQUNELE1BQU0sRUFBRSxDQUFDO0lBQ1osT0FBTyxJQUFJLGlCQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLENBQXNCLENBQUM7QUFDakUsQ0FBQztBQUVNLEtBQUssVUFBVSwwQ0FBMEMsQ0FDOUQsS0FBZSxFQUNmLElBQXNCLEVBQ3RCLEVBQ0UsVUFBVSxFQUNWLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsR0FBRyxNQUFNLEVBT1Y7SUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2pGLE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdELE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDekUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzRCxNQUFNLFNBQVMsR0FBRyxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUNqRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLHNCQUFzQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUU7UUFDekMsR0FBRyxNQUFNO1FBQ1QsSUFBSSxFQUFFLEtBQUs7UUFDWCxVQUFVO1FBQ1YsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFDNUQsV0FBVyxFQUFFLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUM7S0FDckQsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWFwaSc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IFdhbGxldCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiB9IGZyb20gJy4uLy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgSURlc2NyaXB0b3JXYWxsZXQgfSBmcm9tICcuLi9kZXNjcmlwdG9yV2FsbGV0JztcbmltcG9ydCB7IE5hbWVkRGVzY3JpcHRvciB9IGZyb20gJy4uL05hbWVkRGVzY3JpcHRvcic7XG5cbmltcG9ydCB7IERlc2NyaXB0b3JGcm9tS2V5cyB9IGZyb20gJy4vY3JlYXRlRGVzY3JpcHRvcnMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRGVzY3JpcHRvcldhbGxldChcbiAgYml0Z286IEJpdEdvQVBJLFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICB7XG4gICAgZGVzY3JpcHRvcnMsXG4gICAgLi4ucGFyYW1zXG4gIH06IHtcbiAgICB0eXBlOiAnaG90JztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGVudGVycHJpc2U6IHN0cmluZztcbiAgICBrZXlzOiBzdHJpbmdbXTtcbiAgICBkZXNjcmlwdG9yczogTmFtZWREZXNjcmlwdG9yW107XG4gIH1cbik6IFByb21pc2U8SURlc2NyaXB0b3JXYWxsZXQ+IHtcbiAgLy8gV2UgZG9uJ3QgdXNlIGBjb2luLndhbGxldHMoKS5hZGRgIGhlcmUgYmVjYXVzZSBpdCBkb2VzIGEgYnVuY2ggb2YgdmFsaWRhdGlvbiB0aGF0IGRvZXMgbm90IG1ha2Ugc2Vuc2VcbiAgLy8gZm9yIGRlc2NyaXB0b3Igd2FsbGV0cy5cbiAgY29uc3QgbmV3V2FsbGV0ID0gYXdhaXQgYml0Z29cbiAgICAucG9zdChjb2luLnVybCgnL3dhbGxldC9hZGQnKSlcbiAgICAuc2VuZCh7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBjb2luU3BlY2lmaWM6IHsgZGVzY3JpcHRvcnMgfSxcbiAgICB9KVxuICAgIC5yZXN1bHQoKTtcbiAgcmV0dXJuIG5ldyBXYWxsZXQoYml0Z28sIGNvaW4sIG5ld1dhbGxldCkgYXMgSURlc2NyaXB0b3JXYWxsZXQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVEZXNjcmlwdG9yV2FsbGV0V2l0aFdhbGxldFBhc3NwaHJhc2UoXG4gIGJpdGdvOiBCaXRHb0FQSSxcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAge1xuICAgIGVudGVycHJpc2UsXG4gICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICBkZXNjcmlwdG9yc0Zyb21LZXlzLFxuICAgIC4uLnBhcmFtc1xuICB9OiB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBlbnRlcnByaXNlOiBzdHJpbmc7XG4gICAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0b3JzRnJvbUtleXM6IERlc2NyaXB0b3JGcm9tS2V5cztcbiAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICB9XG4pOiBQcm9taXNlPElEZXNjcmlwdG9yV2FsbGV0PiB7XG4gIGNvbnN0IHVzZXJLZXljaGFpbiA9IGF3YWl0IGNvaW4ua2V5Y2hhaW5zKCkuY3JlYXRlVXNlcktleWNoYWluKHdhbGxldFBhc3NwaHJhc2UpO1xuICBjb25zdCBiYWNrdXBLZXljaGFpbiA9IGF3YWl0IGNvaW4ua2V5Y2hhaW5zKCkuY3JlYXRlQmFja3VwKCk7XG4gIGNvbnN0IGJpdGdvS2V5Y2hhaW4gPSBhd2FpdCBjb2luLmtleWNoYWlucygpLmNyZWF0ZUJpdEdvKHsgZW50ZXJwcmlzZSB9KTtcbiAgaWYgKCF1c2VyS2V5Y2hhaW4ucHJ2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gIH1cbiAgY29uc3QgdXNlcktleSA9IHV0eG9saWIuYmlwMzIuZnJvbUJhc2U1OCh1c2VyS2V5Y2hhaW4ucHJ2KTtcbiAgY29uc3QgY29zaWduZXJzID0gW2JhY2t1cEtleWNoYWluLCBiaXRnb0tleWNoYWluXS5tYXAoKGtleWNoYWluKSA9PiB7XG4gICAgaWYgKCFrZXljaGFpbi5wdWIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBwdWJsaWMga2V5Jyk7XG4gICAgfVxuICAgIHJldHVybiB1dHhvbGliLmJpcDMyLmZyb21CYXNlNTgoa2V5Y2hhaW4ucHViKTtcbiAgfSk7XG4gIHJldHVybiBjcmVhdGVEZXNjcmlwdG9yV2FsbGV0KGJpdGdvLCBjb2luLCB7XG4gICAgLi4ucGFyYW1zLFxuICAgIHR5cGU6ICdob3QnLFxuICAgIGVudGVycHJpc2UsXG4gICAga2V5czogW3VzZXJLZXljaGFpbi5pZCwgYmFja3VwS2V5Y2hhaW4uaWQsIGJpdGdvS2V5Y2hhaW4uaWRdLFxuICAgIGRlc2NyaXB0b3JzOiBkZXNjcmlwdG9yc0Zyb21LZXlzKHVzZXJLZXksIGNvc2lnbmVycyksXG4gIH0pO1xufVxuIl19
@@ -0,0 +1,12 @@
1
+ import { BIP32Interface } from '@bitgo-beta/utxo-lib';
2
+ import { NamedDescriptor } from '../NamedDescriptor';
3
+ export type DescriptorFromKeys = (userKey: BIP32Interface, cosigners: BIP32Interface[]) => NamedDescriptor[];
4
+ /**
5
+ * Create a pair of external and internal descriptors for a 2-of-3 multisig wallet.
6
+ *
7
+ * @param userKey
8
+ * @param cosigners
9
+ * @constructor
10
+ */
11
+ export declare const DefaultWsh2Of3: DescriptorFromKeys;
12
+ //# sourceMappingURL=createDescriptors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createDescriptors.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/createWallet/createDescriptors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,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"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DefaultWsh2Of3 = void 0;
4
+ const NamedDescriptor_1 = require("../NamedDescriptor");
5
+ const builder_1 = require("../builder");
6
+ /**
7
+ * Create a pair of external and internal descriptors for a 2-of-3 multisig wallet.
8
+ * Overrides the path of the builder to use the external and internal derivation paths (0/* and 1/*).
9
+ *
10
+ * @param builder
11
+ * @param userKey
12
+ */
13
+ function createExternalInternalPair(builder, userKey) {
14
+ if (userKey.isNeutered()) {
15
+ throw new Error('User key must be private');
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
+ ];
21
+ }
22
+ /**
23
+ * Create a pair of external and internal descriptors for a 2-of-3 multisig wallet.
24
+ *
25
+ * @param userKey
26
+ * @param cosigners
27
+ * @constructor
28
+ */
29
+ const DefaultWsh2Of3 = (userKey, cosigners) => createExternalInternalPair({ name: 'Wsh2Of3', keys: [userKey.neutered(), ...cosigners], path: '' }, userKey);
30
+ exports.DefaultWsh2Of3 = DefaultWsh2Of3;
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlRGVzY3JpcHRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9jcmVhdGVXYWxsZXQvY3JlYXRlRGVzY3JpcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsd0RBQXlGO0FBQ3pGLHdDQUF5RTtBQUl6RTs7Ozs7O0dBTUc7QUFDSCxTQUFTLDBCQUEwQixDQUNqQyxPQUEwQixFQUMxQixPQUF1QjtJQUV2QixJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsT0FBTztRQUNMLElBQUEsb0RBQWtDLEVBQ2hDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsV0FBVyxFQUMxQixJQUFBLGtDQUF3QixFQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQ3JELE9BQU8sQ0FDUjtRQUNELElBQUEsb0RBQWtDLEVBQ2hDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsV0FBVyxFQUMxQixJQUFBLGtDQUF3QixFQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQ3JELE9BQU8sQ0FDUjtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0ksTUFBTSxjQUFjLEdBQXVCLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQ3ZFLDBCQUEwQixDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFEbEcsUUFBQSxjQUFjLGtCQUNvRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJJUDMySW50ZXJmYWNlIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5pbXBvcnQgeyBjcmVhdGVOYW1lZERlc2NyaXB0b3JXaXRoU2lnbmF0dXJlLCBOYW1lZERlc2NyaXB0b3IgfSBmcm9tICcuLi9OYW1lZERlc2NyaXB0b3InO1xuaW1wb3J0IHsgZ2V0RGVzY3JpcHRvckZyb21CdWlsZGVyLCBEZXNjcmlwdG9yQnVpbGRlciB9IGZyb20gJy4uL2J1aWxkZXInO1xuXG5leHBvcnQgdHlwZSBEZXNjcmlwdG9yRnJvbUtleXMgPSAodXNlcktleTogQklQMzJJbnRlcmZhY2UsIGNvc2lnbmVyczogQklQMzJJbnRlcmZhY2VbXSkgPT4gTmFtZWREZXNjcmlwdG9yW107XG5cbi8qKlxuICogQ3JlYXRlIGEgcGFpciBvZiBleHRlcm5hbCBhbmQgaW50ZXJuYWwgZGVzY3JpcHRvcnMgZm9yIGEgMi1vZi0zIG11bHRpc2lnIHdhbGxldC5cbiAqIE92ZXJyaWRlcyB0aGUgcGF0aCBvZiB0aGUgYnVpbGRlciB0byB1c2UgdGhlIGV4dGVybmFsIGFuZCBpbnRlcm5hbCBkZXJpdmF0aW9uIHBhdGhzICgwLyogYW5kIDEvKikuXG4gKlxuICogQHBhcmFtIGJ1aWxkZXJcbiAqIEBwYXJhbSB1c2VyS2V5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUV4dGVybmFsSW50ZXJuYWxQYWlyKFxuICBidWlsZGVyOiBEZXNjcmlwdG9yQnVpbGRlcixcbiAgdXNlcktleTogQklQMzJJbnRlcmZhY2Vcbik6IFtOYW1lZERlc2NyaXB0b3IsIE5hbWVkRGVzY3JpcHRvcl0ge1xuICBpZiAodXNlcktleS5pc05ldXRlcmVkKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIga2V5IG11c3QgYmUgcHJpdmF0ZScpO1xuICB9XG4gIHJldHVybiBbXG4gICAgY3JlYXRlTmFtZWREZXNjcmlwdG9yV2l0aFNpZ25hdHVyZShcbiAgICAgIGJ1aWxkZXIubmFtZSArICcvZXh0ZXJuYWwnLFxuICAgICAgZ2V0RGVzY3JpcHRvckZyb21CdWlsZGVyKHsgLi4uYnVpbGRlciwgcGF0aDogJzAvKicgfSksXG4gICAgICB1c2VyS2V5XG4gICAgKSxcbiAgICBjcmVhdGVOYW1lZERlc2NyaXB0b3JXaXRoU2lnbmF0dXJlKFxuICAgICAgYnVpbGRlci5uYW1lICsgJy9pbnRlcm5hbCcsXG4gICAgICBnZXREZXNjcmlwdG9yRnJvbUJ1aWxkZXIoeyAuLi5idWlsZGVyLCBwYXRoOiAnMS8qJyB9KSxcbiAgICAgIHVzZXJLZXlcbiAgICApLFxuICBdO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHBhaXIgb2YgZXh0ZXJuYWwgYW5kIGludGVybmFsIGRlc2NyaXB0b3JzIGZvciBhIDItb2YtMyBtdWx0aXNpZyB3YWxsZXQuXG4gKlxuICogQHBhcmFtIHVzZXJLZXlcbiAqIEBwYXJhbSBjb3NpZ25lcnNcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdFdzaDJPZjM6IERlc2NyaXB0b3JGcm9tS2V5cyA9ICh1c2VyS2V5LCBjb3NpZ25lcnMpID0+XG4gIGNyZWF0ZUV4dGVybmFsSW50ZXJuYWxQYWlyKHsgbmFtZTogJ1dzaDJPZjMnLCBrZXlzOiBbdXNlcktleS5uZXV0ZXJlZCgpLCAuLi5jb3NpZ25lcnNdLCBwYXRoOiAnJyB9LCB1c2VyS2V5KTtcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from './createDescriptors';
2
+ export * from './createDescriptorWallet';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/createWallet/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./createDescriptors"), exports);
18
+ __exportStar(require("./createDescriptorWallet"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9jcmVhdGVXYWxsZXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUFvQztBQUNwQywyREFBeUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NyZWF0ZURlc2NyaXB0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vY3JlYXRlRGVzY3JpcHRvcldhbGxldCc7XG4iXX0=
@@ -3,4 +3,5 @@ export { assertDescriptorWalletAddress } from './assertDescriptorWalletAddress';
3
3
  export { NamedDescriptor } from './NamedDescriptor';
4
4
  export { isDescriptorWallet, getDescriptorMapFromWallet } from './descriptorWallet';
5
5
  export { getPolicyForEnv } from './validatePolicy';
6
+ export * as createWallet from './createWallet';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -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"}
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,6 +1,39 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
- 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.NamedDescriptor = exports.assertDescriptorWalletAddress = exports.Descriptor = exports.Miniscript = void 0;
4
37
  var wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
5
38
  Object.defineProperty(exports, "Miniscript", { enumerable: true, get: function () { return wasm_miniscript_1.Miniscript; } });
6
39
  Object.defineProperty(exports, "Descriptor", { enumerable: true, get: function () { return wasm_miniscript_1.Descriptor; } });
@@ -13,4 +46,5 @@ Object.defineProperty(exports, "isDescriptorWallet", { enumerable: true, get: fu
13
46
  Object.defineProperty(exports, "getDescriptorMapFromWallet", { enumerable: true, get: function () { return descriptorWallet_1.getDescriptorMapFromWallet; } });
14
47
  var validatePolicy_1 = require("./validatePolicy");
15
48
  Object.defineProperty(exports, "getPolicyForEnv", { enumerable: true, get: function () { return validatePolicy_1.getPolicyForEnv; } });
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwwREFBZ0U7QUFBdkQsNkdBQUEsVUFBVSxPQUFBO0FBQUUsNkdBQUEsVUFBVSxPQUFBO0FBQy9CLGlGQUFnRjtBQUF2RSw4SUFBQSw2QkFBNkIsT0FBQTtBQUN0QyxxREFBb0Q7QUFBM0Msa0hBQUEsZUFBZSxPQUFBO0FBQ3hCLHVEQUFvRjtBQUEzRSxzSEFBQSxrQkFBa0IsT0FBQTtBQUFFLDhIQUFBLDBCQUEwQixPQUFBO0FBQ3ZELG1EQUFtRDtBQUExQyxpSEFBQSxlQUFlLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBNaW5pc2NyaXB0LCBEZXNjcmlwdG9yIH0gZnJvbSAnQGJpdGdvL3dhc20tbWluaXNjcmlwdCc7XG5leHBvcnQgeyBhc3NlcnREZXNjcmlwdG9yV2FsbGV0QWRkcmVzcyB9IGZyb20gJy4vYXNzZXJ0RGVzY3JpcHRvcldhbGxldEFkZHJlc3MnO1xuZXhwb3J0IHsgTmFtZWREZXNjcmlwdG9yIH0gZnJvbSAnLi9OYW1lZERlc2NyaXB0b3InO1xuZXhwb3J0IHsgaXNEZXNjcmlwdG9yV2FsbGV0LCBnZXREZXNjcmlwdG9yTWFwRnJvbVdhbGxldCB9IGZyb20gJy4vZGVzY3JpcHRvcldhbGxldCc7XG5leHBvcnQgeyBnZXRQb2xpY3lGb3JFbnYgfSBmcm9tICcuL3ZhbGlkYXRlUG9saWN5JztcbiJdfQ==
49
+ exports.createWallet = __importStar(require("./createWallet"));
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwREFBZ0U7QUFBdkQsNkdBQUEsVUFBVSxPQUFBO0FBQUUsNkdBQUEsVUFBVSxPQUFBO0FBQy9CLGlGQUFnRjtBQUF2RSw4SUFBQSw2QkFBNkIsT0FBQTtBQUN0QyxxREFBb0Q7QUFBM0Msa0hBQUEsZUFBZSxPQUFBO0FBQ3hCLHVEQUFvRjtBQUEzRSxzSEFBQSxrQkFBa0IsT0FBQTtBQUFFLDhIQUFBLDBCQUEwQixPQUFBO0FBQ3ZELG1EQUFtRDtBQUExQyxpSEFBQSxlQUFlLE9BQUE7QUFDeEIsK0RBQStDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgTWluaXNjcmlwdCwgRGVzY3JpcHRvciB9IGZyb20gJ0BiaXRnby93YXNtLW1pbmlzY3JpcHQnO1xuZXhwb3J0IHsgYXNzZXJ0RGVzY3JpcHRvcldhbGxldEFkZHJlc3MgfSBmcm9tICcuL2Fzc2VydERlc2NyaXB0b3JXYWxsZXRBZGRyZXNzJztcbmV4cG9ydCB7IE5hbWVkRGVzY3JpcHRvciB9IGZyb20gJy4vTmFtZWREZXNjcmlwdG9yJztcbmV4cG9ydCB7IGlzRGVzY3JpcHRvcldhbGxldCwgZ2V0RGVzY3JpcHRvck1hcEZyb21XYWxsZXQgfSBmcm9tICcuL2Rlc2NyaXB0b3JXYWxsZXQnO1xuZXhwb3J0IHsgZ2V0UG9saWN5Rm9yRW52IH0gZnJvbSAnLi92YWxpZGF0ZVBvbGljeSc7XG5leHBvcnQgKiBhcyBjcmVhdGVXYWxsZXQgZnJvbSAnLi9jcmVhdGVXYWxsZXQnO1xuIl19
@@ -2,13 +2,22 @@ import { Descriptor } from '@bitgo/wasm-miniscript';
2
2
  import { EnvironmentName, Triple } from '@bitgo-beta/sdk-core';
3
3
  import * as utxolib from '@bitgo-beta/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,sBAAsB,CAAC;AAC/D,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,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,sBAAsB,CAAC;AAC/D,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVQb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVzY3JpcHRvci92YWxpZGF0ZVBvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTRCQSx3REFpQkM7QUFFRCwwREFVQztBQUVELDBDQVVDO0FBakVELG1EQUFvRTtBQUVwRSx1Q0FBK0Q7QUFPL0QsU0FBUyx3QkFBd0IsQ0FDL0IsQ0FBYSxFQUNiLElBQStCLEVBQy9CLFVBQTBDO0lBRTFDLE1BQU0sTUFBTSxHQUFHLElBQUEseUJBQWUsRUFBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDekIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0MsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUNoRixDQUFDO0FBRUQsU0FBZ0Isc0JBQXNCLENBQ3BDLFVBQXNCLEVBQ3RCLE1BQWtDLEVBQ2xDLFVBQTBDO0lBRTFDLElBQUksTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQzFCLE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBSSxrQkFBa0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNqQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlFLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxVQUFVLENBQUMsUUFBUSxFQUFFLHNDQUFzQyxDQUFDLENBQUM7UUFDN0YsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRCxTQUFnQix1QkFBdUIsQ0FDckMsV0FBOEIsRUFDOUIsVUFBcUIsRUFDckIsTUFBa0M7SUFFbEMsTUFBTSxHQUFHLEdBQUcsSUFBQSw0QkFBZSxFQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLEtBQUssTUFBTSxVQUFVLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDdEMsc0JBQXNCLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBZ0IsZUFBZSxDQUFDLEdBQW9CO0lBQ2xELFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDWixLQUFLLFdBQVcsQ0FBQztRQUNqQixLQUFLLE1BQU07WUFDVCxPQUFPO2dCQUNMLGdCQUFnQixFQUFFLENBQUMsU0FBUyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixDQUFDO2FBQ3RFLENBQUM7UUFDSjtZQUNFLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpcHRvciB9IGZyb20gJ0BiaXRnby93YXNtLW1pbmlzY3JpcHQnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnROYW1lLCBUcmlwbGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuaW1wb3J0IHsgRGVzY3JpcHRvck1hcCwgdG9EZXNjcmlwdG9yTWFwIH0gZnJvbSAnLi4vY29yZS9kZXNjcmlwdG9yJztcblxuaW1wb3J0IHsgRGVzY3JpcHRvckJ1aWxkZXIsIHBhcnNlRGVzY3JpcHRvciB9IGZyb20gJy4vYnVpbGRlcic7XG5pbXBvcnQgeyBOYW1lZERlc2NyaXB0b3IgfSBmcm9tICcuL05hbWVkRGVzY3JpcHRvcic7XG5cbmV4cG9ydCB0eXBlIERlc2NyaXB0b3JWYWxpZGF0aW9uUG9saWN5ID0geyBhbGxvd2VkVGVtcGxhdGVzOiBEZXNjcmlwdG9yQnVpbGRlclsnbmFtZSddW10gfSB8ICdhbGxvd0FsbCc7XG5cbmV4cG9ydCB0eXBlIEtleVRyaXBsZSA9IFRyaXBsZTx1dHhvbGliLkJJUDMySW50ZXJmYWNlPjtcblxuZnVuY3Rpb24gaXNEZXNjcmlwdG9yV2l0aFRlbXBsYXRlKFxuICBkOiBEZXNjcmlwdG9yLFxuICBuYW1lOiBEZXNjcmlwdG9yQnVpbGRlclsnbmFtZSddLFxuICB3YWxsZXRLZXlzOiBUcmlwbGU8dXR4b2xpYi5CSVAzMkludGVyZmFjZT5cbik6IGJvb2xlYW4ge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZURlc2NyaXB0b3IoZCk7XG4gIGlmIChwYXJzZWQubmFtZSAhPT0gbmFtZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAocGFyc2VkLmtleXMubGVuZ3RoICE9PSB3YWxsZXRLZXlzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gcGFyc2VkLmtleXMuZXZlcnkoKGssIGkpID0+IGsudG9CYXNlNTgoKSA9PT0gd2FsbGV0S2V5c1tpXS50b0Jhc2U1OCgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydERlc2NyaXB0b3JQb2xpY3koXG4gIGRlc2NyaXB0b3I6IERlc2NyaXB0b3IsXG4gIHBvbGljeTogRGVzY3JpcHRvclZhbGlkYXRpb25Qb2xpY3ksXG4gIHdhbGxldEtleXM6IFRyaXBsZTx1dHhvbGliLkJJUDMySW50ZXJmYWNlPlxuKTogdm9pZCB7XG4gIGlmIChwb2xpY3kgPT09ICdhbGxvd0FsbCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoJ2FsbG93ZWRUZW1wbGF0ZXMnIGluIHBvbGljeSkge1xuICAgIGNvbnN0IGFsbG93ZWQgPSBwb2xpY3kuYWxsb3dlZFRlbXBsYXRlcztcbiAgICBpZiAoIWFsbG93ZWQuc29tZSgodCkgPT4gaXNEZXNjcmlwdG9yV2l0aFRlbXBsYXRlKGRlc2NyaXB0b3IsIHQsIHdhbGxldEtleXMpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZXNjcmlwdG9yICR7ZGVzY3JpcHRvci50b1N0cmluZygpfSBkb2VzIG5vdCBtYXRjaCBhbnkgYWxsb3dlZCB0ZW1wbGF0ZWApO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkZXNjcmlwdG9yIHZhbGlkYXRpb24gcG9saWN5OiAke3BvbGljeX1gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvRGVzY3JpcHRvck1hcFZhbGlkYXRlKFxuICBkZXNjcmlwdG9yczogTmFtZWREZXNjcmlwdG9yW10sXG4gIHdhbGxldEtleXM6IEtleVRyaXBsZSxcbiAgcG9saWN5OiBEZXNjcmlwdG9yVmFsaWRhdGlvblBvbGljeVxuKTogRGVzY3JpcHRvck1hcCB7XG4gIGNvbnN0IG1hcCA9IHRvRGVzY3JpcHRvck1hcChkZXNjcmlwdG9ycyk7XG4gIGZvciAoY29uc3QgZGVzY3JpcHRvciBvZiBtYXAudmFsdWVzKCkpIHtcbiAgICBhc3NlcnREZXNjcmlwdG9yUG9saWN5KGRlc2NyaXB0b3IsIHBvbGljeSwgd2FsbGV0S2V5cyk7XG4gIH1cbiAgcmV0dXJuIG1hcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBvbGljeUZvckVudihlbnY6IEVudmlyb25tZW50TmFtZSk6IERlc2NyaXB0b3JWYWxpZGF0aW9uUG9saWN5IHtcbiAgc3dpdGNoIChlbnYpIHtcbiAgICBjYXNlICdhZG1pblByb2QnOlxuICAgIGNhc2UgJ3Byb2QnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWxsb3dlZFRlbXBsYXRlczogWydXc2gyT2YzJywgJ1dzaDJPZjNDbHR2RHJvcCcsICdTaFdzaDJPZjNDbHR2RHJvcCddLFxuICAgICAgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICdhbGxvd0FsbCc7XG4gIH1cbn1cbiJdfQ==
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVQb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVzY3JpcHRvci92YWxpZGF0ZVBvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFxQkEsd0VBWUM7QUFFRCw4Q0FPQztBQUVELDRDQU9DO0FBRUQsZ0VBRUM7QUFFRCxrRUFRQztBQVFELHdEQVNDO0FBRUQsMERBWUM7QUFFRCwwQ0FhQztBQS9HRCw0REFBb0Q7QUFJcEQsbURBQW9FO0FBRXBFLHVDQUE0QztBQUM1Qyx1REFBdUU7QUFTMUQsUUFBQSxjQUFjLEdBQStCO0lBQ3hELElBQUksRUFBRSxVQUFVO0lBQ2hCLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJO0NBQ3JCLENBQUM7QUFFRixTQUFnQiw4QkFBOEIsQ0FBQyxJQUFZO0lBQ3pELE9BQU87UUFDTCxJQUFJLEVBQUUscUJBQXFCLEdBQUcsSUFBSSxHQUFHLEdBQUc7UUFDeEMsUUFBUSxDQUFDLENBQWEsRUFBRSxVQUFxQjtZQUMzQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHlCQUFlLEVBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsT0FBTyxDQUNMLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSTtnQkFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLE1BQU07Z0JBQ3hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUNsRixDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsVUFBd0M7SUFDeEUsT0FBTztRQUNMLElBQUksRUFBRSxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHO1FBQzlELFFBQVEsQ0FBQyxDQUFhLEVBQUUsVUFBcUIsRUFBRSxVQUFvQjtZQUNqRSxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLFVBQXdDO0lBQ3ZFLE9BQU87UUFDTCxJQUFJLEVBQUUsT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRztRQUM3RCxRQUFRLENBQUMsQ0FBYSxFQUFFLFVBQXFCLEVBQUUsVUFBb0I7WUFDakUsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN2RSxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQiwwQkFBMEIsQ0FBQyxLQUFlO0lBQ3hELE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELFNBQWdCLDJCQUEyQjtJQUN6QyxPQUFPO1FBQ0wsSUFBSSxFQUFFLGNBQWM7UUFDcEIsUUFBUSxDQUFDLENBQWEsRUFBRSxVQUFxQixFQUFFLFVBQW9CO1lBQ2pFLCtDQUErQztZQUMvQyxPQUFPLElBQUEsbUNBQWlCLEVBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN6RCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFhLCtCQUFnQyxTQUFRLEtBQUs7SUFDeEQsWUFBWSxVQUFzQixFQUFFLE1BQWtDO1FBQ3BFLEtBQUssQ0FBQyxjQUFjLFVBQVUsQ0FBQyxRQUFRLEVBQUUsMEJBQTBCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7Q0FDRjtBQUpELDBFQUlDO0FBRUQsU0FBZ0Isc0JBQXNCLENBQ3BDLFVBQXNCLEVBQ3RCLE1BQWtDLEVBQ2xDLFVBQXFCLEVBQ3JCLFVBQW9CO0lBRXBCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUN6RCxNQUFNLElBQUksK0JBQStCLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hFLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBZ0IsdUJBQXVCLENBQ3JDLFdBQThCLEVBQzlCLFVBQXFCLEVBQ3JCLE1BQWtDO0lBRWxDLE9BQU8sSUFBQSw0QkFBZSxFQUNwQixXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7UUFDbEMsTUFBTSxDQUFDLEdBQUcsNEJBQVUsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNwRSxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxlQUFlLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLE9BQU8sRUFBRSxJQUFJLEVBQUUsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDbEQsQ0FBQyxDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixlQUFlLENBQUMsR0FBb0I7SUFDbEQsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNaLEtBQUssV0FBVyxDQUFDO1FBQ2pCLEtBQUssTUFBTTtZQUNULE9BQU8sZ0JBQWdCLENBQUM7Z0JBQ3RCLHdFQUF3RTtnQkFDeEUsMEJBQTBCLENBQUMsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztnQkFDL0UsK0NBQStDO2dCQUMvQywyQkFBMkIsRUFBRTthQUM5QixDQUFDLENBQUM7UUFDTDtZQUNFLE9BQU8sc0JBQWMsQ0FBQztJQUMxQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS1taW5pc2NyaXB0JztcbmltcG9ydCB7IEVudmlyb25tZW50TmFtZSwgVHJpcGxlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbmltcG9ydCB7IERlc2NyaXB0b3JNYXAsIHRvRGVzY3JpcHRvck1hcCB9IGZyb20gJy4uL2NvcmUvZGVzY3JpcHRvcic7XG5cbmltcG9ydCB7IHBhcnNlRGVzY3JpcHRvciB9IGZyb20gJy4vYnVpbGRlcic7XG5pbXBvcnQgeyBoYXNWYWxpZFNpZ25hdHVyZSwgTmFtZWREZXNjcmlwdG9yIH0gZnJvbSAnLi9OYW1lZERlc2NyaXB0b3InO1xuXG5leHBvcnQgdHlwZSBLZXlUcmlwbGUgPSBUcmlwbGU8dXR4b2xpYi5CSVAzMkludGVyZmFjZT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpcHRvclZhbGlkYXRpb25Qb2xpY3kge1xuICBuYW1lOiBzdHJpbmc7XG4gIHZhbGlkYXRlKGQ6IERlc2NyaXB0b3IsIHdhbGxldEtleXM6IEtleVRyaXBsZSwgc2lnbmF0dXJlczogc3RyaW5nW10pOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgcG9saWN5QWxsb3dBbGw6IERlc2NyaXB0b3JWYWxpZGF0aW9uUG9saWN5ID0ge1xuICBuYW1lOiAnYWxsb3dBbGwnLFxuICB2YWxpZGF0ZTogKCkgPT4gdHJ1ZSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWxpZGF0b3JEZXNjcmlwdG9yVGVtcGxhdGUobmFtZTogc3RyaW5nKTogRGVzY3JpcHRvclZhbGlkYXRpb25Qb2xpY3kge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdkZXNjcmlwdG9yVGVtcGxhdGUoJyArIG5hbWUgKyAnKScsXG4gICAgdmFsaWRhdGUoZDogRGVzY3JpcHRvciwgd2FsbGV0S2V5czogS2V5VHJpcGxlKTogYm9vbGVhbiB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZURlc2NyaXB0b3IoZCk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBwYXJzZWQubmFtZSA9PT0gbmFtZSAmJlxuICAgICAgICBwYXJzZWQua2V5cy5sZW5ndGggPT09IHdhbGxldEtleXMubGVuZ3RoICYmXG4gICAgICAgIHBhcnNlZC5rZXlzLmV2ZXJ5KChrLCBpKSA9PiBrLnRvQmFzZTU4KCkgPT09IHdhbGxldEtleXNbaV0ubmV1dGVyZWQoKS50b0Jhc2U1OCgpKVxuICAgICAgKTtcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWRhdG9yRXZlcnkodmFsaWRhdG9yczogRGVzY3JpcHRvclZhbGlkYXRpb25Qb2xpY3lbXSk6IERlc2NyaXB0b3JWYWxpZGF0aW9uUG9saWN5IHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnZXZlcnkoJyArIHZhbGlkYXRvcnMubWFwKCh2KSA9PiB2Lm5hbWUpLmpvaW4oJywnKSArICcpJyxcbiAgICB2YWxpZGF0ZShkOiBEZXNjcmlwdG9yLCB3YWxsZXRLZXlzOiBLZXlUcmlwbGUsIHNpZ25hdHVyZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdmFsaWRhdG9ycy5ldmVyeSgodikgPT4gdi52YWxpZGF0ZShkLCB3YWxsZXRLZXlzLCBzaWduYXR1cmVzKSk7XG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbGlkYXRvclNvbWUodmFsaWRhdG9yczogRGVzY3JpcHRvclZhbGlkYXRpb25Qb2xpY3lbXSk6IERlc2NyaXB0b3JWYWxpZGF0aW9uUG9saWN5IHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc29tZSgnICsgdmFsaWRhdG9ycy5tYXAoKHYpID0+IHYubmFtZSkuam9pbignLCcpICsgJyknLFxuICAgIHZhbGlkYXRlKGQ6IERlc2NyaXB0b3IsIHdhbGxldEtleXM6IEtleVRyaXBsZSwgc2lnbmF0dXJlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB2YWxpZGF0b3JzLnNvbWUoKHYpID0+IHYudmFsaWRhdGUoZCwgd2FsbGV0S2V5cywgc2lnbmF0dXJlcykpO1xuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWxpZGF0b3JPbmVPZlRlbXBsYXRlcyhuYW1lczogc3RyaW5nW10pOiBEZXNjcmlwdG9yVmFsaWRhdGlvblBvbGljeSB7XG4gIHJldHVybiBnZXRWYWxpZGF0b3JTb21lKG5hbWVzLm1hcChnZXRWYWxpZGF0b3JEZXNjcmlwdG9yVGVtcGxhdGUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbGlkYXRvclNpZ25lZEJ5VXNlcktleSgpOiBEZXNjcmlwdG9yVmFsaWRhdGlvblBvbGljeSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3NpZ25lZEJ5VXNlcicsXG4gICAgdmFsaWRhdGUoZDogRGVzY3JpcHRvciwgd2FsbGV0S2V5czogS2V5VHJpcGxlLCBzaWduYXR1cmVzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgICAgLy8gdGhlIGZpcnN0IGtleSBpcyB0aGUgdXNlciBrZXksIGJ5IGNvbnZlbnRpb25cbiAgICAgIHJldHVybiBoYXNWYWxpZFNpZ25hdHVyZShkLCB3YWxsZXRLZXlzWzBdLCBzaWduYXR1cmVzKTtcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgRGVzY3JpcHRvclBvbGljeVZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoZGVzY3JpcHRvcjogRGVzY3JpcHRvciwgcG9saWN5OiBEZXNjcmlwdG9yVmFsaWRhdGlvblBvbGljeSkge1xuICAgIHN1cGVyKGBEZXNjcmlwdG9yICR7ZGVzY3JpcHRvci50b1N0cmluZygpfSBkb2VzIG5vdCBtYXRjaCBwb2xpY3kgJHtwb2xpY3kubmFtZX1gKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0RGVzY3JpcHRvclBvbGljeShcbiAgZGVzY3JpcHRvcjogRGVzY3JpcHRvcixcbiAgcG9saWN5OiBEZXNjcmlwdG9yVmFsaWRhdGlvblBvbGljeSxcbiAgd2FsbGV0S2V5czogS2V5VHJpcGxlLFxuICBzaWduYXR1cmVzOiBzdHJpbmdbXVxuKTogdm9pZCB7XG4gIGlmICghcG9saWN5LnZhbGlkYXRlKGRlc2NyaXB0b3IsIHdhbGxldEtleXMsIHNpZ25hdHVyZXMpKSB7XG4gICAgdGhyb3cgbmV3IERlc2NyaXB0b3JQb2xpY3lWYWxpZGF0aW9uRXJyb3IoZGVzY3JpcHRvciwgcG9saWN5KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9EZXNjcmlwdG9yTWFwVmFsaWRhdGUoXG4gIGRlc2NyaXB0b3JzOiBOYW1lZERlc2NyaXB0b3JbXSxcbiAgd2FsbGV0S2V5czogS2V5VHJpcGxlLFxuICBwb2xpY3k6IERlc2NyaXB0b3JWYWxpZGF0aW9uUG9saWN5XG4pOiBEZXNjcmlwdG9yTWFwIHtcbiAgcmV0dXJuIHRvRGVzY3JpcHRvck1hcChcbiAgICBkZXNjcmlwdG9ycy5tYXAoKG5hbWVkRGVzY3JpcHRvcikgPT4ge1xuICAgICAgY29uc3QgZCA9IERlc2NyaXB0b3IuZnJvbVN0cmluZyhuYW1lZERlc2NyaXB0b3IudmFsdWUsICdkZXJpdmFibGUnKTtcbiAgICAgIGFzc2VydERlc2NyaXB0b3JQb2xpY3koZCwgcG9saWN5LCB3YWxsZXRLZXlzLCBuYW1lZERlc2NyaXB0b3Iuc2lnbmF0dXJlcyA/PyBbXSk7XG4gICAgICByZXR1cm4geyBuYW1lOiBuYW1lZERlc2NyaXB0b3IubmFtZSwgdmFsdWU6IGQgfTtcbiAgICB9KVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9saWN5Rm9yRW52KGVudjogRW52aXJvbm1lbnROYW1lKTogRGVzY3JpcHRvclZhbGlkYXRpb25Qb2xpY3kge1xuICBzd2l0Y2ggKGVudikge1xuICAgIGNhc2UgJ2FkbWluUHJvZCc6XG4gICAgY2FzZSAncHJvZCc6XG4gICAgICByZXR1cm4gZ2V0VmFsaWRhdG9yU29tZShbXG4gICAgICAgIC8vIGFsbG93IGFsbCAyLW9mLTMtaXNoIGRlc2NyaXB0b3JzIHdoZXJlIHRoZSBrZXlzIG1hdGNoIHRoZSB3YWxsZXQga2V5c1xuICAgICAgICBnZXRWYWxpZGF0b3JPbmVPZlRlbXBsYXRlcyhbJ1dzaDJPZjMnLCAnV3NoMk9mM0NsdHZEcm9wJywgJ1NoV3NoMk9mM0NsdHZEcm9wJ10pLFxuICAgICAgICAvLyBhbGxvdyBhbGwgZGVzY3JpcHRvcnMgc2lnbmVkIGJ5IHRoZSB1c2VyIGtleVxuICAgICAgICBnZXRWYWxpZGF0b3JTaWduZWRCeVVzZXJLZXkoKSxcbiAgICAgIF0pO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gcG9saWN5QWxsb3dBbGw7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=NamedDescriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NamedDescriptor.d.ts","sourceRoot":"","sources":["../../../test/descriptor/NamedDescriptor.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
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 NamedDescriptor_1 = require("../../src/descriptor/NamedDescriptor");
8
+ const key_utils_1 = require("../core/key.utils");
9
+ const builder_1 = require("../../src/descriptor/builder");
10
+ const fixtures_utils_1 = require("../core/fixtures.utils");
11
+ describe('NamedDescriptor', function () {
12
+ it('creates named descriptor with signature', async function () {
13
+ const keys = (0, key_utils_1.getKeyTriple)();
14
+ const namedDescriptor = (0, NamedDescriptor_1.createNamedDescriptorWithSignature)('foo', (0, builder_1.getDescriptorFromBuilder)({ name: 'Wsh2Of2', keys, path: '0/*' }), keys[0]);
15
+ assert_1.default.deepStrictEqual(await (0, fixtures_utils_1.getFixture)(__dirname + '/fixtures/NamedDescriptorWithSignature.json', namedDescriptor), namedDescriptor);
16
+ (0, NamedDescriptor_1.assertHasValidSignature)(namedDescriptor, keys[0]);
17
+ });
18
+ });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmFtZWREZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC9kZXNjcmlwdG9yL05hbWVkRGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUU1QiwwRUFBbUg7QUFDbkgsaURBQWlEO0FBQ2pELDBEQUF3RTtBQUN4RSwyREFBb0Q7QUFFcEQsUUFBUSxDQUFDLGlCQUFpQixFQUFFO0lBQzFCLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLO1FBQ2pELE1BQU0sSUFBSSxHQUFHLElBQUEsd0JBQVksR0FBRSxDQUFDO1FBQzVCLE1BQU0sZUFBZSxHQUFHLElBQUEsb0RBQWtDLEVBQ3hELEtBQUssRUFDTCxJQUFBLGtDQUF3QixFQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQ2hFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDUixDQUFDO1FBQ0YsZ0JBQU0sQ0FBQyxlQUFlLENBQ3BCLE1BQU0sSUFBQSwyQkFBVSxFQUFDLFNBQVMsR0FBRyw2Q0FBNkMsRUFBRSxlQUFlLENBQUMsRUFDNUYsZUFBZSxDQUNoQixDQUFDO1FBQ0YsSUFBQSx5Q0FBdUIsRUFBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHsgYXNzZXJ0SGFzVmFsaWRTaWduYXR1cmUsIGNyZWF0ZU5hbWVkRGVzY3JpcHRvcldpdGhTaWduYXR1cmUgfSBmcm9tICcuLi8uLi9zcmMvZGVzY3JpcHRvci9OYW1lZERlc2NyaXB0b3InO1xuaW1wb3J0IHsgZ2V0S2V5VHJpcGxlIH0gZnJvbSAnLi4vY29yZS9rZXkudXRpbHMnO1xuaW1wb3J0IHsgZ2V0RGVzY3JpcHRvckZyb21CdWlsZGVyIH0gZnJvbSAnLi4vLi4vc3JjL2Rlc2NyaXB0b3IvYnVpbGRlcic7XG5pbXBvcnQgeyBnZXRGaXh0dXJlIH0gZnJvbSAnLi4vY29yZS9maXh0dXJlcy51dGlscyc7XG5cbmRlc2NyaWJlKCdOYW1lZERlc2NyaXB0b3InLCBmdW5jdGlvbiAoKSB7XG4gIGl0KCdjcmVhdGVzIG5hbWVkIGRlc2NyaXB0b3Igd2l0aCBzaWduYXR1cmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qga2V5cyA9IGdldEtleVRyaXBsZSgpO1xuICAgIGNvbnN0IG5hbWVkRGVzY3JpcHRvciA9IGNyZWF0ZU5hbWVkRGVzY3JpcHRvcldpdGhTaWduYXR1cmUoXG4gICAgICAnZm9vJyxcbiAgICAgIGdldERlc2NyaXB0b3JGcm9tQnVpbGRlcih7IG5hbWU6ICdXc2gyT2YyJywga2V5cywgcGF0aDogJzAvKicgfSksXG4gICAgICBrZXlzWzBdXG4gICAgKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKFxuICAgICAgYXdhaXQgZ2V0Rml4dHVyZShfX2Rpcm5hbWUgKyAnL2ZpeHR1cmVzL05hbWVkRGVzY3JpcHRvcldpdGhTaWduYXR1cmUuanNvbicsIG5hbWVkRGVzY3JpcHRvciksXG4gICAgICBuYW1lZERlc2NyaXB0b3JcbiAgICApO1xuICAgIGFzc2VydEhhc1ZhbGlkU2lnbmF0dXJlKG5hbWVkRGVzY3JpcHRvciwga2V5c1swXSk7XG4gIH0pO1xufSk7XG4iXX0=