@bitgo-beta/utxo-core 1.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +6 -0
  3. package/dist/src/descriptor/DescriptorMap.d.ts +9 -0
  4. package/dist/src/descriptor/DescriptorMap.d.ts.map +1 -0
  5. package/dist/src/descriptor/DescriptorMap.js +12 -0
  6. package/dist/src/descriptor/Output.d.ts +24 -0
  7. package/dist/src/descriptor/Output.d.ts.map +1 -0
  8. package/dist/src/descriptor/Output.js +22 -0
  9. package/dist/src/descriptor/VirtualSize.d.ts +21 -0
  10. package/dist/src/descriptor/VirtualSize.d.ts.map +1 -0
  11. package/dist/src/descriptor/VirtualSize.js +87 -0
  12. package/dist/src/descriptor/address.d.ts +5 -0
  13. package/dist/src/descriptor/address.d.ts.map +1 -0
  14. package/dist/src/descriptor/address.js +48 -0
  15. package/dist/src/descriptor/index.d.ts +9 -0
  16. package/dist/src/descriptor/index.d.ts.map +1 -0
  17. package/dist/src/descriptor/index.js +49 -0
  18. package/dist/src/descriptor/psbt/assertSatisfiable.d.ts +20 -0
  19. package/dist/src/descriptor/psbt/assertSatisfiable.d.ts.map +1 -0
  20. package/dist/src/descriptor/psbt/assertSatisfiable.js +74 -0
  21. package/dist/src/descriptor/psbt/createPsbt.d.ts +15 -0
  22. package/dist/src/descriptor/psbt/createPsbt.d.ts.map +1 -0
  23. package/dist/src/descriptor/psbt/createPsbt.js +82 -0
  24. package/dist/src/descriptor/psbt/findDescriptors.d.ts +22 -0
  25. package/dist/src/descriptor/psbt/findDescriptors.d.ts.map +1 -0
  26. package/dist/src/descriptor/psbt/findDescriptors.js +85 -0
  27. package/dist/src/descriptor/psbt/index.d.ts +6 -0
  28. package/dist/src/descriptor/psbt/index.d.ts.map +1 -0
  29. package/dist/src/descriptor/psbt/index.js +22 -0
  30. package/dist/src/descriptor/psbt/parse.d.ts +27 -0
  31. package/dist/src/descriptor/psbt/parse.d.ts.map +1 -0
  32. package/dist/src/descriptor/psbt/parse.js +87 -0
  33. package/dist/src/descriptor/psbt/wrap.d.ts +12 -0
  34. package/dist/src/descriptor/psbt/wrap.d.ts.map +1 -0
  35. package/dist/src/descriptor/psbt/wrap.js +76 -0
  36. package/dist/src/index.d.ts +3 -0
  37. package/dist/src/index.d.ts.map +1 -0
  38. package/dist/src/index.js +39 -0
  39. package/dist/src/testutil/descriptor/descriptors.d.ts +11 -0
  40. package/dist/src/testutil/descriptor/descriptors.d.ts.map +1 -0
  41. package/dist/src/testutil/descriptor/descriptors.js +95 -0
  42. package/dist/src/testutil/descriptor/index.d.ts +4 -0
  43. package/dist/src/testutil/descriptor/index.d.ts.map +1 -0
  44. package/dist/src/testutil/descriptor/index.js +20 -0
  45. package/dist/src/testutil/descriptor/mock.utils.d.ts +34 -0
  46. package/dist/src/testutil/descriptor/mock.utils.d.ts.map +1 -0
  47. package/dist/src/testutil/descriptor/mock.utils.js +87 -0
  48. package/dist/src/testutil/descriptor/psbt.utils.d.ts +4 -0
  49. package/dist/src/testutil/descriptor/psbt.utils.d.ts.map +1 -0
  50. package/dist/src/testutil/descriptor/psbt.utils.js +20 -0
  51. package/dist/src/testutil/fixtures.utils.d.ts +15 -0
  52. package/dist/src/testutil/fixtures.utils.d.ts.map +1 -0
  53. package/dist/src/testutil/fixtures.utils.js +117 -0
  54. package/dist/src/testutil/index.d.ts +4 -0
  55. package/dist/src/testutil/index.d.ts.map +1 -0
  56. package/dist/src/testutil/index.js +20 -0
  57. package/dist/src/testutil/key.utils.d.ts +16 -0
  58. package/dist/src/testutil/key.utils.d.ts.map +1 -0
  59. package/dist/src/testutil/key.utils.js +59 -0
  60. package/dist/src/testutil/toPlainObject.utils.d.ts +11 -0
  61. package/dist/src/testutil/toPlainObject.utils.d.ts.map +1 -0
  62. package/dist/src/testutil/toPlainObject.utils.js +75 -0
  63. package/package.json +60 -0
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FINAL_SEQUENCE = void 0;
4
+ exports.getRequiredLocktime = getRequiredLocktime;
5
+ exports.assertSatisfiable = assertSatisfiable;
6
+ /**
7
+ * These are some helpers for testing satisfiability of descriptors in PSBTs.
8
+ *
9
+ * They are mostly a debugging aid - if an input cannot be satisified, the `finalizePsbt()` method will fail, but
10
+ * the error message is pretty vague.
11
+ *
12
+ * The methods here have the goal of catching certain cases earlier and with a better error message.
13
+ *
14
+ * The goal is not an exhaustive check, but to catch common mistakes.
15
+ */
16
+ const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
17
+ exports.FINAL_SEQUENCE = 0xffffffff;
18
+ /**
19
+ * Get the required locktime for a descriptor.
20
+ * @param descriptor
21
+ */
22
+ function getRequiredLocktime(descriptor) {
23
+ if (descriptor instanceof wasm_miniscript_1.Descriptor) {
24
+ return getRequiredLocktime(descriptor.node());
25
+ }
26
+ if (typeof descriptor !== 'object' || descriptor === null) {
27
+ return undefined;
28
+ }
29
+ if ('Wsh' in descriptor) {
30
+ return getRequiredLocktime(descriptor.Wsh);
31
+ }
32
+ if ('Sh' in descriptor) {
33
+ return getRequiredLocktime(descriptor.Sh);
34
+ }
35
+ if ('Ms' in descriptor) {
36
+ return getRequiredLocktime(descriptor.Ms);
37
+ }
38
+ if ('AndV' in descriptor) {
39
+ if (!Array.isArray(descriptor.AndV)) {
40
+ throw new Error('Expected an array');
41
+ }
42
+ if (descriptor.AndV.length !== 2) {
43
+ throw new Error('Expected exactly two elements');
44
+ }
45
+ const [a, b] = descriptor.AndV;
46
+ return getRequiredLocktime(a) ?? getRequiredLocktime(b);
47
+ }
48
+ if ('Drop' in descriptor) {
49
+ return getRequiredLocktime(descriptor.Drop);
50
+ }
51
+ if ('Verify' in descriptor) {
52
+ return getRequiredLocktime(descriptor.Verify);
53
+ }
54
+ if ('After' in descriptor && typeof descriptor.After === 'object' && descriptor.After !== null) {
55
+ if ('absLockTime' in descriptor.After && typeof descriptor.After.absLockTime === 'number') {
56
+ return descriptor.After.absLockTime;
57
+ }
58
+ }
59
+ return undefined;
60
+ }
61
+ function assertSatisfiable(psbt, inputIndex, descriptor) {
62
+ // If the descriptor requires a locktime, the input must have a non-final sequence number
63
+ const requiredLocktime = getRequiredLocktime(descriptor);
64
+ if (requiredLocktime !== undefined) {
65
+ const input = psbt.txInputs[inputIndex];
66
+ if (input.sequence === exports.FINAL_SEQUENCE) {
67
+ throw new Error(`Input ${inputIndex} has a non-final sequence number, but requires a timelock`);
68
+ }
69
+ if (psbt.locktime !== requiredLocktime) {
70
+ throw new Error(`psbt locktime (${psbt.locktime}) does not match required locktime (${requiredLocktime})`);
71
+ }
72
+ }
73
+ }
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0U2F0aXNmaWFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9wc2J0L2Fzc2VydFNhdGlzZmlhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW1CQSxrREFzQ0M7QUFFRCw4Q0FZQztBQXZFRDs7Ozs7Ozs7O0dBU0c7QUFDSCw0REFBb0Q7QUFHdkMsUUFBQSxjQUFjLEdBQUcsVUFBVSxDQUFDO0FBRXpDOzs7R0FHRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLFVBQWdDO0lBQ2xFLElBQUksVUFBVSxZQUFZLDRCQUFVLEVBQUUsQ0FBQztRQUNyQyxPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDMUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksS0FBSyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sbUJBQW1CLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxJQUFJLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN2QixPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7UUFDdkIsT0FBTyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUNELElBQUksTUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztRQUMvQixPQUFPLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFDRCxJQUFJLE1BQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN6QixPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsSUFBSSxRQUFRLElBQUksVUFBVSxFQUFFLENBQUM7UUFDM0IsT0FBTyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNELElBQUksT0FBTyxJQUFJLFVBQVUsSUFBSSxPQUFPLFVBQVUsQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDL0YsSUFBSSxhQUFhLElBQUksVUFBVSxDQUFDLEtBQUssSUFBSSxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFGLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsSUFBa0IsRUFBRSxVQUFrQixFQUFFLFVBQXNCO0lBQzlGLHlGQUF5RjtJQUN6RixNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pELElBQUksZ0JBQWdCLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QyxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssc0JBQWMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxVQUFVLDJEQUEyRCxDQUFDLENBQUM7UUFDbEcsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLElBQUksQ0FBQyxRQUFRLHVDQUF1QyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDN0csQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGVzZSBhcmUgc29tZSBoZWxwZXJzIGZvciB0ZXN0aW5nIHNhdGlzZmlhYmlsaXR5IG9mIGRlc2NyaXB0b3JzIGluIFBTQlRzLlxuICpcbiAqIFRoZXkgYXJlIG1vc3RseSBhIGRlYnVnZ2luZyBhaWQgLSBpZiBhbiBpbnB1dCBjYW5ub3QgYmUgc2F0aXNpZmllZCwgdGhlIGBmaW5hbGl6ZVBzYnQoKWAgbWV0aG9kIHdpbGwgZmFpbCwgYnV0XG4gKiB0aGUgZXJyb3IgbWVzc2FnZSBpcyBwcmV0dHkgdmFndWUuXG4gKlxuICogVGhlIG1ldGhvZHMgaGVyZSBoYXZlIHRoZSBnb2FsIG9mIGNhdGNoaW5nIGNlcnRhaW4gY2FzZXMgZWFybGllciBhbmQgd2l0aCBhIGJldHRlciBlcnJvciBtZXNzYWdlLlxuICpcbiAqIFRoZSBnb2FsIGlzIG5vdCBhbiBleGhhdXN0aXZlIGNoZWNrLCBidXQgdG8gY2F0Y2ggY29tbW9uIG1pc3Rha2VzLlxuICovXG5pbXBvcnQgeyBEZXNjcmlwdG9yIH0gZnJvbSAnQGJpdGdvL3dhc20tbWluaXNjcmlwdCc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuZXhwb3J0IGNvbnN0IEZJTkFMX1NFUVVFTkNFID0gMHhmZmZmZmZmZjtcblxuLyoqXG4gKiBHZXQgdGhlIHJlcXVpcmVkIGxvY2t0aW1lIGZvciBhIGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0gZGVzY3JpcHRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVxdWlyZWRMb2NrdGltZShkZXNjcmlwdG9yOiBEZXNjcmlwdG9yIHwgdW5rbm93bik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGlmIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRGVzY3JpcHRvcikge1xuICAgIHJldHVybiBnZXRSZXF1aXJlZExvY2t0aW1lKGRlc2NyaXB0b3Iubm9kZSgpKTtcbiAgfVxuICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgIT09ICdvYmplY3QnIHx8IGRlc2NyaXB0b3IgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICgnV3NoJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIGdldFJlcXVpcmVkTG9ja3RpbWUoZGVzY3JpcHRvci5Xc2gpO1xuICB9XG4gIGlmICgnU2gnIGluIGRlc2NyaXB0b3IpIHtcbiAgICByZXR1cm4gZ2V0UmVxdWlyZWRMb2NrdGltZShkZXNjcmlwdG9yLlNoKTtcbiAgfVxuICBpZiAoJ01zJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIGdldFJlcXVpcmVkTG9ja3RpbWUoZGVzY3JpcHRvci5Ncyk7XG4gIH1cbiAgaWYgKCdBbmRWJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRlc2NyaXB0b3IuQW5kVikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgYW4gYXJyYXknKTtcbiAgICB9XG4gICAgaWYgKGRlc2NyaXB0b3IuQW5kVi5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgZXhhY3RseSB0d28gZWxlbWVudHMnKTtcbiAgICB9XG4gICAgY29uc3QgW2EsIGJdID0gZGVzY3JpcHRvci5BbmRWO1xuICAgIHJldHVybiBnZXRSZXF1aXJlZExvY2t0aW1lKGEpID8/IGdldFJlcXVpcmVkTG9ja3RpbWUoYik7XG4gIH1cbiAgaWYgKCdEcm9wJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIGdldFJlcXVpcmVkTG9ja3RpbWUoZGVzY3JpcHRvci5Ecm9wKTtcbiAgfVxuICBpZiAoJ1ZlcmlmeScgaW4gZGVzY3JpcHRvcikge1xuICAgIHJldHVybiBnZXRSZXF1aXJlZExvY2t0aW1lKGRlc2NyaXB0b3IuVmVyaWZ5KTtcbiAgfVxuICBpZiAoJ0FmdGVyJyBpbiBkZXNjcmlwdG9yICYmIHR5cGVvZiBkZXNjcmlwdG9yLkFmdGVyID09PSAnb2JqZWN0JyAmJiBkZXNjcmlwdG9yLkFmdGVyICE9PSBudWxsKSB7XG4gICAgaWYgKCdhYnNMb2NrVGltZScgaW4gZGVzY3JpcHRvci5BZnRlciAmJiB0eXBlb2YgZGVzY3JpcHRvci5BZnRlci5hYnNMb2NrVGltZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdG9yLkFmdGVyLmFic0xvY2tUaW1lO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0U2F0aXNmaWFibGUocHNidDogdXR4b2xpYi5Qc2J0LCBpbnB1dEluZGV4OiBudW1iZXIsIGRlc2NyaXB0b3I6IERlc2NyaXB0b3IpOiB2b2lkIHtcbiAgLy8gSWYgdGhlIGRlc2NyaXB0b3IgcmVxdWlyZXMgYSBsb2NrdGltZSwgdGhlIGlucHV0IG11c3QgaGF2ZSBhIG5vbi1maW5hbCBzZXF1ZW5jZSBudW1iZXJcbiAgY29uc3QgcmVxdWlyZWRMb2NrdGltZSA9IGdldFJlcXVpcmVkTG9ja3RpbWUoZGVzY3JpcHRvcik7XG4gIGlmIChyZXF1aXJlZExvY2t0aW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBpbnB1dCA9IHBzYnQudHhJbnB1dHNbaW5wdXRJbmRleF07XG4gICAgaWYgKGlucHV0LnNlcXVlbmNlID09PSBGSU5BTF9TRVFVRU5DRSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCAke2lucHV0SW5kZXh9IGhhcyBhIG5vbi1maW5hbCBzZXF1ZW5jZSBudW1iZXIsIGJ1dCByZXF1aXJlcyBhIHRpbWVsb2NrYCk7XG4gICAgfVxuICAgIGlmIChwc2J0LmxvY2t0aW1lICE9PSByZXF1aXJlZExvY2t0aW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHBzYnQgbG9ja3RpbWUgKCR7cHNidC5sb2NrdGltZX0pIGRvZXMgbm90IG1hdGNoIHJlcXVpcmVkIGxvY2t0aW1lICgke3JlcXVpcmVkTG9ja3RpbWV9KWApO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,15 @@
1
+ import * as utxolib from '@bitgo-beta/utxo-lib';
2
+ import { DerivedDescriptorWalletOutput, Output, WithOptDescriptor } from '../Output';
3
+ /**
4
+ * Non-Final (Replaceable)
5
+ * Reference: https://github.com/bitcoin/bitcoin/blob/v25.1/src/rpc/rawtransaction_util.cpp#L49
6
+ * */
7
+ export declare const MAX_BIP125_RBF_SEQUENCE: number;
8
+ export type PsbtParams = {
9
+ network: utxolib.Network;
10
+ version?: number;
11
+ locktime?: number;
12
+ sequence?: number;
13
+ };
14
+ export declare function createPsbt(params: PsbtParams, inputs: DerivedDescriptorWalletOutput[], outputs: WithOptDescriptor<Output>[]): utxolib.bitgo.UtxoPsbt;
15
+ //# sourceMappingURL=createPsbt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createPsbt.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/psbt/createPsbt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,6BAA6B,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAKrF;;;KAGK;AACL,eAAO,MAAM,uBAAuB,QAAiB,CAAC;AA8BtD,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,UAAU,CACxB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,6BAA6B,EAAE,EACvC,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,GACnC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAYxB"}
@@ -0,0 +1,82 @@
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.MAX_BIP125_RBF_SEQUENCE = void 0;
37
+ exports.createPsbt = createPsbt;
38
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
39
+ const wrap_1 = require("./wrap");
40
+ const assertSatisfiable_1 = require("./assertSatisfiable");
41
+ /**
42
+ * Non-Final (Replaceable)
43
+ * Reference: https://github.com/bitcoin/bitcoin/blob/v25.1/src/rpc/rawtransaction_util.cpp#L49
44
+ * */
45
+ exports.MAX_BIP125_RBF_SEQUENCE = 0xffffffff - 2;
46
+ function updateInputsWithDescriptors(psbt, descriptors) {
47
+ if (psbt.txInputs.length !== descriptors.length) {
48
+ throw new Error(`Input count mismatch (psbt=${psbt.txInputs.length}, descriptors=${descriptors.length})`);
49
+ }
50
+ const wrappedPsbt = (0, wrap_1.toWrappedPsbt)(psbt);
51
+ for (const [inputIndex, descriptor] of descriptors.entries()) {
52
+ (0, assertSatisfiable_1.assertSatisfiable)(psbt, inputIndex, descriptor);
53
+ wrappedPsbt.updateInputWithDescriptor(inputIndex, descriptor);
54
+ }
55
+ const unwrappedPsbt = (0, wrap_1.toUtxoPsbt)(wrappedPsbt, psbt.network);
56
+ for (const inputIndex in psbt.txInputs) {
57
+ psbt.data.inputs[inputIndex] = unwrappedPsbt.data.inputs[inputIndex];
58
+ }
59
+ }
60
+ function updateOutputsWithDescriptors(psbt, descriptors) {
61
+ const wrappedPsbt = (0, wrap_1.toWrappedPsbt)(psbt);
62
+ for (const [outputIndex, { descriptor }] of descriptors.entries()) {
63
+ if (descriptor) {
64
+ wrappedPsbt.updateOutputWithDescriptor(outputIndex, descriptor);
65
+ }
66
+ }
67
+ const unwrappedPsbt = (0, wrap_1.toUtxoPsbt)(wrappedPsbt, psbt.network);
68
+ for (const outputIndex in psbt.txOutputs) {
69
+ psbt.data.outputs[outputIndex] = unwrappedPsbt.data.outputs[outputIndex];
70
+ }
71
+ }
72
+ function createPsbt(params, inputs, outputs) {
73
+ const psbt = utxolib.bitgo.UtxoPsbt.createPsbt({ network: params.network });
74
+ psbt.setVersion(params.version ?? 2);
75
+ psbt.setLocktime(params.locktime ?? 0);
76
+ psbt.addInputs(inputs.map((i) => ({ ...i, sequence: params.sequence ?? exports.MAX_BIP125_RBF_SEQUENCE })));
77
+ psbt.addOutputs(outputs);
78
+ updateInputsWithDescriptors(psbt, inputs.map((i) => i.descriptor));
79
+ updateOutputsWithDescriptors(psbt, outputs);
80
+ return psbt;
81
+ }
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUHNidC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kZXNjcmlwdG9yL3BzYnQvY3JlYXRlUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpREEsZ0NBZ0JDO0FBakVELDhEQUFnRDtBQUtoRCxpQ0FBbUQ7QUFDbkQsMkRBQXdEO0FBRXhEOzs7S0FHSztBQUNRLFFBQUEsdUJBQXVCLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUV0RCxTQUFTLDJCQUEyQixDQUFDLElBQTRCLEVBQUUsV0FBeUI7SUFDMUYsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLGlCQUFpQixXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBQSxvQkFBYSxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLEtBQUssTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUM3RCxJQUFBLHFDQUFpQixFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDaEQsV0FBVyxDQUFDLHlCQUF5QixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ0QsTUFBTSxhQUFhLEdBQUcsSUFBQSxpQkFBVSxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUQsS0FBSyxNQUFNLFVBQVUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkUsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLDRCQUE0QixDQUFDLElBQTRCLEVBQUUsV0FBd0M7SUFDMUcsTUFBTSxXQUFXLEdBQUcsSUFBQSxvQkFBYSxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLEtBQUssTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDbEUsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbEUsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLGFBQWEsR0FBRyxJQUFBLGlCQUFVLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1RCxLQUFLLE1BQU0sV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzRSxDQUFDO0FBQ0gsQ0FBQztBQVNELFNBQWdCLFVBQVUsQ0FDeEIsTUFBa0IsRUFDbEIsTUFBdUMsRUFDdkMsT0FBb0M7SUFFcEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLElBQUksK0JBQXVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLDJCQUEyQixDQUN6QixJQUFJLEVBQ0osTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUNoQyxDQUFDO0lBQ0YsNEJBQTRCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgRGVzY3JpcHRvciB9IGZyb20gJ0BiaXRnby93YXNtLW1pbmlzY3JpcHQnO1xuXG5pbXBvcnQgeyBEZXJpdmVkRGVzY3JpcHRvcldhbGxldE91dHB1dCwgT3V0cHV0LCBXaXRoT3B0RGVzY3JpcHRvciB9IGZyb20gJy4uL091dHB1dCc7XG5cbmltcG9ydCB7IHRvVXR4b1BzYnQsIHRvV3JhcHBlZFBzYnQgfSBmcm9tICcuL3dyYXAnO1xuaW1wb3J0IHsgYXNzZXJ0U2F0aXNmaWFibGUgfSBmcm9tICcuL2Fzc2VydFNhdGlzZmlhYmxlJztcblxuLyoqXG4gKiBOb24tRmluYWwgKFJlcGxhY2VhYmxlKVxuICogUmVmZXJlbmNlOiBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXRjb2luL2Jsb2IvdjI1LjEvc3JjL3JwYy9yYXd0cmFuc2FjdGlvbl91dGlsLmNwcCNMNDlcbiAqICovXG5leHBvcnQgY29uc3QgTUFYX0JJUDEyNV9SQkZfU0VRVUVOQ0UgPSAweGZmZmZmZmZmIC0gMjtcblxuZnVuY3Rpb24gdXBkYXRlSW5wdXRzV2l0aERlc2NyaXB0b3JzKHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsIGRlc2NyaXB0b3JzOiBEZXNjcmlwdG9yW10pIHtcbiAgaWYgKHBzYnQudHhJbnB1dHMubGVuZ3RoICE9PSBkZXNjcmlwdG9ycy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYElucHV0IGNvdW50IG1pc21hdGNoIChwc2J0PSR7cHNidC50eElucHV0cy5sZW5ndGh9LCBkZXNjcmlwdG9ycz0ke2Rlc2NyaXB0b3JzLmxlbmd0aH0pYCk7XG4gIH1cbiAgY29uc3Qgd3JhcHBlZFBzYnQgPSB0b1dyYXBwZWRQc2J0KHBzYnQpO1xuICBmb3IgKGNvbnN0IFtpbnB1dEluZGV4LCBkZXNjcmlwdG9yXSBvZiBkZXNjcmlwdG9ycy5lbnRyaWVzKCkpIHtcbiAgICBhc3NlcnRTYXRpc2ZpYWJsZShwc2J0LCBpbnB1dEluZGV4LCBkZXNjcmlwdG9yKTtcbiAgICB3cmFwcGVkUHNidC51cGRhdGVJbnB1dFdpdGhEZXNjcmlwdG9yKGlucHV0SW5kZXgsIGRlc2NyaXB0b3IpO1xuICB9XG4gIGNvbnN0IHVud3JhcHBlZFBzYnQgPSB0b1V0eG9Qc2J0KHdyYXBwZWRQc2J0LCBwc2J0Lm5ldHdvcmspO1xuICBmb3IgKGNvbnN0IGlucHV0SW5kZXggaW4gcHNidC50eElucHV0cykge1xuICAgIHBzYnQuZGF0YS5pbnB1dHNbaW5wdXRJbmRleF0gPSB1bndyYXBwZWRQc2J0LmRhdGEuaW5wdXRzW2lucHV0SW5kZXhdO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU91dHB1dHNXaXRoRGVzY3JpcHRvcnMocHNidDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCwgZGVzY3JpcHRvcnM6IFdpdGhPcHREZXNjcmlwdG9yPE91dHB1dD5bXSkge1xuICBjb25zdCB3cmFwcGVkUHNidCA9IHRvV3JhcHBlZFBzYnQocHNidCk7XG4gIGZvciAoY29uc3QgW291dHB1dEluZGV4LCB7IGRlc2NyaXB0b3IgfV0gb2YgZGVzY3JpcHRvcnMuZW50cmllcygpKSB7XG4gICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgIHdyYXBwZWRQc2J0LnVwZGF0ZU91dHB1dFdpdGhEZXNjcmlwdG9yKG91dHB1dEluZGV4LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdW53cmFwcGVkUHNidCA9IHRvVXR4b1BzYnQod3JhcHBlZFBzYnQsIHBzYnQubmV0d29yayk7XG4gIGZvciAoY29uc3Qgb3V0cHV0SW5kZXggaW4gcHNidC50eE91dHB1dHMpIHtcbiAgICBwc2J0LmRhdGEub3V0cHV0c1tvdXRwdXRJbmRleF0gPSB1bndyYXBwZWRQc2J0LmRhdGEub3V0cHV0c1tvdXRwdXRJbmRleF07XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgUHNidFBhcmFtcyA9IHtcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrO1xuICB2ZXJzaW9uPzogbnVtYmVyO1xuICBsb2NrdGltZT86IG51bWJlcjtcbiAgc2VxdWVuY2U/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHNidChcbiAgcGFyYW1zOiBQc2J0UGFyYW1zLFxuICBpbnB1dHM6IERlcml2ZWREZXNjcmlwdG9yV2FsbGV0T3V0cHV0W10sXG4gIG91dHB1dHM6IFdpdGhPcHREZXNjcmlwdG9yPE91dHB1dD5bXVxuKTogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB7XG4gIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LmNyZWF0ZVBzYnQoeyBuZXR3b3JrOiBwYXJhbXMubmV0d29yayB9KTtcbiAgcHNidC5zZXRWZXJzaW9uKHBhcmFtcy52ZXJzaW9uID8/IDIpO1xuICBwc2J0LnNldExvY2t0aW1lKHBhcmFtcy5sb2NrdGltZSA/PyAwKTtcbiAgcHNidC5hZGRJbnB1dHMoaW5wdXRzLm1hcCgoaSkgPT4gKHsgLi4uaSwgc2VxdWVuY2U6IHBhcmFtcy5zZXF1ZW5jZSA/PyBNQVhfQklQMTI1X1JCRl9TRVFVRU5DRSB9KSkpO1xuICBwc2J0LmFkZE91dHB1dHMob3V0cHV0cyk7XG4gIHVwZGF0ZUlucHV0c1dpdGhEZXNjcmlwdG9ycyhcbiAgICBwc2J0LFxuICAgIGlucHV0cy5tYXAoKGkpID0+IGkuZGVzY3JpcHRvcilcbiAgKTtcbiAgdXBkYXRlT3V0cHV0c1dpdGhEZXNjcmlwdG9ycyhwc2J0LCBvdXRwdXRzKTtcbiAgcmV0dXJuIHBzYnQ7XG59XG4iXX0=
@@ -0,0 +1,22 @@
1
+ import { PsbtInput, PsbtOutput } from 'bip174/src/lib/interfaces';
2
+ import { Descriptor } from '@bitgo/wasm-miniscript';
3
+ import { DescriptorMap } from '../DescriptorMap';
4
+ type DescriptorWithIndex = {
5
+ descriptor: Descriptor;
6
+ index: number;
7
+ };
8
+ /**
9
+ * @param input
10
+ * @param descriptorMap
11
+ * @returns DescriptorWithIndex for the input if found, undefined otherwise
12
+ */
13
+ export declare function findDescriptorForInput(input: PsbtInput, descriptorMap: DescriptorMap): DescriptorWithIndex | undefined;
14
+ /**
15
+ * @param script - the output script
16
+ * @param output - the PSBT output
17
+ * @param descriptorMap
18
+ * @returns DescriptorWithIndex for the output if found, undefined otherwise
19
+ */
20
+ export declare function findDescriptorForOutput(script: Buffer, output: PsbtOutput, descriptorMap: DescriptorMap): DescriptorWithIndex | undefined;
21
+ export {};
22
+ //# sourceMappingURL=findDescriptors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findDescriptors.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/psbt/findDescriptors.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,KAAK,mBAAmB,GAAG;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAsErE;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,EAChB,aAAa,EAAE,aAAa,GAC3B,mBAAmB,GAAG,SAAS,CAUjC;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,EAClB,aAAa,EAAE,aAAa,GAC3B,mBAAmB,GAAG,SAAS,CAMjC"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findDescriptorForInput = findDescriptorForInput;
4
+ exports.findDescriptorForOutput = findDescriptorForOutput;
5
+ /**
6
+ * Find a descriptor in the descriptor map that matches the given script and derivation index.
7
+ * @param script
8
+ * @param index
9
+ * @param descriptorMap
10
+ * @returns DescriptorWithIndex if found, undefined otherwise
11
+ */
12
+ function findDescriptorForDerivationIndex(script, index, descriptorMap) {
13
+ for (const descriptor of descriptorMap.values()) {
14
+ if (Buffer.from(descriptor.atDerivationIndex(index).scriptPubkey()).equals(script)) {
15
+ return { descriptor, index };
16
+ }
17
+ }
18
+ return undefined;
19
+ }
20
+ function getDerivationIndexFromPath(path) {
21
+ const indexStr = path.split('/').pop();
22
+ if (!indexStr) {
23
+ throw new Error(`Invalid derivation path ${path}`);
24
+ }
25
+ const index = parseInt(indexStr, 10);
26
+ if (index.toString() !== indexStr) {
27
+ throw new Error(`Invalid derivation path ${path}`);
28
+ }
29
+ return index;
30
+ }
31
+ /**
32
+ * Wrapper around findDescriptorForDerivationPath that tries multiple derivation paths.
33
+ * @param script
34
+ * @param derivationPaths
35
+ * @param descriptorMap
36
+ */
37
+ function findDescriptorForAnyDerivationPath(script, derivationPaths, descriptorMap) {
38
+ const derivationIndexSet = new Set(derivationPaths.map((p) => getDerivationIndexFromPath(p)));
39
+ for (const index of [...derivationIndexSet]) {
40
+ const desc = findDescriptorForDerivationIndex(script, index, descriptorMap);
41
+ if (desc) {
42
+ return desc;
43
+ }
44
+ }
45
+ return undefined;
46
+ }
47
+ function getDerivationPaths(v) {
48
+ if ('bip32Derivation' in v && v.bip32Derivation) {
49
+ return v.bip32Derivation.map((v) => v.path);
50
+ }
51
+ if ('tapBip32Derivation' in v && v.tapBip32Derivation) {
52
+ return v.tapBip32Derivation.map((v) => v.path).filter((v) => v !== '' && v !== 'm');
53
+ }
54
+ return undefined;
55
+ }
56
+ /**
57
+ * @param input
58
+ * @param descriptorMap
59
+ * @returns DescriptorWithIndex for the input if found, undefined otherwise
60
+ */
61
+ function findDescriptorForInput(input, descriptorMap) {
62
+ const script = input.witnessUtxo?.script;
63
+ if (!script) {
64
+ throw new Error('Missing script');
65
+ }
66
+ const derivationPaths = getDerivationPaths(input);
67
+ if (!derivationPaths) {
68
+ throw new Error('Missing derivation paths');
69
+ }
70
+ return findDescriptorForAnyDerivationPath(script, derivationPaths, descriptorMap);
71
+ }
72
+ /**
73
+ * @param script - the output script
74
+ * @param output - the PSBT output
75
+ * @param descriptorMap
76
+ * @returns DescriptorWithIndex for the output if found, undefined otherwise
77
+ */
78
+ function findDescriptorForOutput(script, output, descriptorMap) {
79
+ const derivationPaths = getDerivationPaths(output);
80
+ if (!derivationPaths) {
81
+ return undefined;
82
+ }
83
+ return findDescriptorForAnyDerivationPath(script, derivationPaths, descriptorMap);
84
+ }
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZERlc2NyaXB0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2Rlc2NyaXB0b3IvcHNidC9maW5kRGVzY3JpcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEyRkEsd0RBYUM7QUFRRCwwREFVQztBQXhHRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGdDQUFnQyxDQUN2QyxNQUFjLEVBQ2QsS0FBYSxFQUNiLGFBQTRCO0lBRTVCLEtBQUssTUFBTSxVQUFVLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDaEQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ25GLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBUywwQkFBMEIsQ0FBQyxJQUFZO0lBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsa0NBQWtDLENBQ3pDLE1BQWMsRUFDZCxlQUF5QixFQUN6QixhQUE0QjtJQUU1QixNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RixLQUFLLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7UUFDNUMsTUFBTSxJQUFJLEdBQUcsZ0NBQWdDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM1RSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFLRCxTQUFTLGtCQUFrQixDQUFDLENBQStDO0lBQ3pFLElBQUksaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNoRCxPQUFPLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNELElBQUksb0JBQW9CLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3RELE9BQU8sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQ3BDLEtBQWdCLEVBQ2hCLGFBQTRCO0lBRTVCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO0lBQ3pDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsT0FBTyxrQ0FBa0MsQ0FBQyxNQUFNLEVBQUUsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ3BGLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLHVCQUF1QixDQUNyQyxNQUFjLEVBQ2QsTUFBa0IsRUFDbEIsYUFBNEI7SUFFNUIsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLGtDQUFrQyxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDcEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5cblV0aWxpdGllcyBmb3IgbWFwcGluZyBiYWNrIGZyb20gUFNCVCBpbnB1dHMgdG8gZGVzY3JpcHRvcnMuXG5cblRoaXMgaXMgYSBzb21ld2hhdCBicnV0ZS1mb3JjZSBhdHRlbXB0IHRoYXQgcmVsaWVzIG9uIHRoZSBgYmlwMzJEZXJpdmF0aW9uYCBmaWVsZCB0byBiZSBzZXQuXG5cbkl0IHdpbGwgcHJvYmFibHkgb25seSB3b3JrIGNvcnJlY3RseSBpZiBhbGwgeHB1YnMgaW4gdGhlIGRlc2NyaXB0b3IgYXJlIGRlcml2YWJsZS5cblxuV2Ugc2hvdWxkIHRha2UgYSBsb29rIGF0IGEgbW9yZSByb2J1c3QgYW5kIHN0YW5kYXJkIGFwcHJvYWNoIGxpa2UgdGhpczogaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9wdWxsLzE1NDhcblxuICovXG5pbXBvcnQgeyBQc2J0SW5wdXQsIFBzYnRPdXRwdXQgfSBmcm9tICdiaXAxNzQvc3JjL2xpYi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS1taW5pc2NyaXB0JztcblxuaW1wb3J0IHsgRGVzY3JpcHRvck1hcCB9IGZyb20gJy4uL0Rlc2NyaXB0b3JNYXAnO1xuXG50eXBlIERlc2NyaXB0b3JXaXRoSW5kZXggPSB7IGRlc2NyaXB0b3I6IERlc2NyaXB0b3I7IGluZGV4OiBudW1iZXIgfTtcblxuLyoqXG4gKiBGaW5kIGEgZGVzY3JpcHRvciBpbiB0aGUgZGVzY3JpcHRvciBtYXAgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBzY3JpcHQgYW5kIGRlcml2YXRpb24gaW5kZXguXG4gKiBAcGFyYW0gc2NyaXB0XG4gKiBAcGFyYW0gaW5kZXhcbiAqIEBwYXJhbSBkZXNjcmlwdG9yTWFwXG4gKiBAcmV0dXJucyBEZXNjcmlwdG9yV2l0aEluZGV4IGlmIGZvdW5kLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG4gKi9cbmZ1bmN0aW9uIGZpbmREZXNjcmlwdG9yRm9yRGVyaXZhdGlvbkluZGV4KFxuICBzY3JpcHQ6IEJ1ZmZlcixcbiAgaW5kZXg6IG51bWJlcixcbiAgZGVzY3JpcHRvck1hcDogRGVzY3JpcHRvck1hcFxuKTogRGVzY3JpcHRvcldpdGhJbmRleCB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgZGVzY3JpcHRvciBvZiBkZXNjcmlwdG9yTWFwLnZhbHVlcygpKSB7XG4gICAgaWYgKEJ1ZmZlci5mcm9tKGRlc2NyaXB0b3IuYXREZXJpdmF0aW9uSW5kZXgoaW5kZXgpLnNjcmlwdFB1YmtleSgpKS5lcXVhbHMoc2NyaXB0KSkge1xuICAgICAgcmV0dXJuIHsgZGVzY3JpcHRvciwgaW5kZXggfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXREZXJpdmF0aW9uSW5kZXhGcm9tUGF0aChwYXRoOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBpbmRleFN0ciA9IHBhdGguc3BsaXQoJy8nKS5wb3AoKTtcbiAgaWYgKCFpbmRleFN0cikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkZXJpdmF0aW9uIHBhdGggJHtwYXRofWApO1xuICB9XG4gIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQoaW5kZXhTdHIsIDEwKTtcbiAgaWYgKGluZGV4LnRvU3RyaW5nKCkgIT09IGluZGV4U3RyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRlcml2YXRpb24gcGF0aCAke3BhdGh9YCk7XG4gIH1cbiAgcmV0dXJuIGluZGV4O1xufVxuXG4vKipcbiAqIFdyYXBwZXIgYXJvdW5kIGZpbmREZXNjcmlwdG9yRm9yRGVyaXZhdGlvblBhdGggdGhhdCB0cmllcyBtdWx0aXBsZSBkZXJpdmF0aW9uIHBhdGhzLlxuICogQHBhcmFtIHNjcmlwdFxuICogQHBhcmFtIGRlcml2YXRpb25QYXRoc1xuICogQHBhcmFtIGRlc2NyaXB0b3JNYXBcbiAqL1xuZnVuY3Rpb24gZmluZERlc2NyaXB0b3JGb3JBbnlEZXJpdmF0aW9uUGF0aChcbiAgc2NyaXB0OiBCdWZmZXIsXG4gIGRlcml2YXRpb25QYXRoczogc3RyaW5nW10sXG4gIGRlc2NyaXB0b3JNYXA6IERlc2NyaXB0b3JNYXBcbik6IERlc2NyaXB0b3JXaXRoSW5kZXggfCB1bmRlZmluZWQge1xuICBjb25zdCBkZXJpdmF0aW9uSW5kZXhTZXQgPSBuZXcgU2V0KGRlcml2YXRpb25QYXRocy5tYXAoKHApID0+IGdldERlcml2YXRpb25JbmRleEZyb21QYXRoKHApKSk7XG4gIGZvciAoY29uc3QgaW5kZXggb2YgWy4uLmRlcml2YXRpb25JbmRleFNldF0pIHtcbiAgICBjb25zdCBkZXNjID0gZmluZERlc2NyaXB0b3JGb3JEZXJpdmF0aW9uSW5kZXgoc2NyaXB0LCBpbmRleCwgZGVzY3JpcHRvck1hcCk7XG4gICAgaWYgKGRlc2MpIHtcbiAgICAgIHJldHVybiBkZXNjO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbnR5cGUgV2l0aEJpcDMyRGVyaXZhdGlvbiA9IHsgYmlwMzJEZXJpdmF0aW9uPzogeyBwYXRoOiBzdHJpbmcgfVtdIH07XG50eXBlIFdpdGhUYXBCaXAzMkRlcml2YXRpb24gPSB7IHRhcEJpcDMyRGVyaXZhdGlvbj86IHsgcGF0aDogc3RyaW5nIH1bXSB9O1xuXG5mdW5jdGlvbiBnZXREZXJpdmF0aW9uUGF0aHModjogV2l0aEJpcDMyRGVyaXZhdGlvbiB8IFdpdGhUYXBCaXAzMkRlcml2YXRpb24pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gIGlmICgnYmlwMzJEZXJpdmF0aW9uJyBpbiB2ICYmIHYuYmlwMzJEZXJpdmF0aW9uKSB7XG4gICAgcmV0dXJuIHYuYmlwMzJEZXJpdmF0aW9uLm1hcCgodikgPT4gdi5wYXRoKTtcbiAgfVxuICBpZiAoJ3RhcEJpcDMyRGVyaXZhdGlvbicgaW4gdiAmJiB2LnRhcEJpcDMyRGVyaXZhdGlvbikge1xuICAgIHJldHVybiB2LnRhcEJpcDMyRGVyaXZhdGlvbi5tYXAoKHYpID0+IHYucGF0aCkuZmlsdGVyKCh2KSA9PiB2ICE9PSAnJyAmJiB2ICE9PSAnbScpO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQHBhcmFtIGlucHV0XG4gKiBAcGFyYW0gZGVzY3JpcHRvck1hcFxuICogQHJldHVybnMgRGVzY3JpcHRvcldpdGhJbmRleCBmb3IgdGhlIGlucHV0IGlmIGZvdW5kLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRGVzY3JpcHRvckZvcklucHV0KFxuICBpbnB1dDogUHNidElucHV0LFxuICBkZXNjcmlwdG9yTWFwOiBEZXNjcmlwdG9yTWFwXG4pOiBEZXNjcmlwdG9yV2l0aEluZGV4IHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2NyaXB0ID0gaW5wdXQud2l0bmVzc1V0eG8/LnNjcmlwdDtcbiAgaWYgKCFzY3JpcHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgc2NyaXB0Jyk7XG4gIH1cbiAgY29uc3QgZGVyaXZhdGlvblBhdGhzID0gZ2V0RGVyaXZhdGlvblBhdGhzKGlucHV0KTtcbiAgaWYgKCFkZXJpdmF0aW9uUGF0aHMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgZGVyaXZhdGlvbiBwYXRocycpO1xuICB9XG4gIHJldHVybiBmaW5kRGVzY3JpcHRvckZvckFueURlcml2YXRpb25QYXRoKHNjcmlwdCwgZGVyaXZhdGlvblBhdGhzLCBkZXNjcmlwdG9yTWFwKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gc2NyaXB0IC0gdGhlIG91dHB1dCBzY3JpcHRcbiAqIEBwYXJhbSBvdXRwdXQgLSB0aGUgUFNCVCBvdXRwdXRcbiAqIEBwYXJhbSBkZXNjcmlwdG9yTWFwXG4gKiBAcmV0dXJucyBEZXNjcmlwdG9yV2l0aEluZGV4IGZvciB0aGUgb3V0cHV0IGlmIGZvdW5kLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRGVzY3JpcHRvckZvck91dHB1dChcbiAgc2NyaXB0OiBCdWZmZXIsXG4gIG91dHB1dDogUHNidE91dHB1dCxcbiAgZGVzY3JpcHRvck1hcDogRGVzY3JpcHRvck1hcFxuKTogRGVzY3JpcHRvcldpdGhJbmRleCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlcml2YXRpb25QYXRocyA9IGdldERlcml2YXRpb25QYXRocyhvdXRwdXQpO1xuICBpZiAoIWRlcml2YXRpb25QYXRocykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGZpbmREZXNjcmlwdG9yRm9yQW55RGVyaXZhdGlvblBhdGgoc2NyaXB0LCBkZXJpdmF0aW9uUGF0aHMsIGRlc2NyaXB0b3JNYXApO1xufVxuIl19
@@ -0,0 +1,6 @@
1
+ export * from './assertSatisfiable';
2
+ export * from './createPsbt';
3
+ export * from './parse';
4
+ export * from './findDescriptors';
5
+ export * from './wrap';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/psbt/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,22 @@
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("./assertSatisfiable"), exports);
18
+ __exportStar(require("./createPsbt"), exports);
19
+ __exportStar(require("./parse"), exports);
20
+ __exportStar(require("./findDescriptors"), exports);
21
+ __exportStar(require("./wrap"), exports);
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9wc2J0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxzREFBb0M7QUFDcEMsK0NBQTZCO0FBQzdCLDBDQUF3QjtBQUN4QixvREFBa0M7QUFDbEMseUNBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hc3NlcnRTYXRpc2ZpYWJsZSc7XG5leHBvcnQgKiBmcm9tICcuL2NyZWF0ZVBzYnQnO1xuZXhwb3J0ICogZnJvbSAnLi9wYXJzZSc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbmREZXNjcmlwdG9ycyc7XG5leHBvcnQgKiBmcm9tICcuL3dyYXAnO1xuIl19
@@ -0,0 +1,27 @@
1
+ import { Descriptor } from '@bitgo/wasm-miniscript';
2
+ import * as utxolib from '@bitgo-beta/utxo-lib';
3
+ import { DescriptorMap } from '../DescriptorMap';
4
+ export type ScriptId = {
5
+ descriptor: Descriptor;
6
+ index: number;
7
+ };
8
+ export type ParsedInput = {
9
+ address: string;
10
+ value: bigint;
11
+ scriptId: ScriptId;
12
+ };
13
+ export type ParsedOutput = {
14
+ address?: string;
15
+ script: Buffer;
16
+ value: bigint;
17
+ scriptId?: ScriptId;
18
+ };
19
+ export type ParsedDescriptorTransaction = {
20
+ inputs: ParsedInput[];
21
+ outputs: ParsedOutput[];
22
+ spendAmount: bigint;
23
+ minerFee: bigint;
24
+ virtualSize: number;
25
+ };
26
+ export declare function parse(psbt: utxolib.Psbt, descriptorMap: DescriptorMap, network: utxolib.Network): ParsedDescriptorTransaction;
27
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/psbt/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMjD,MAAM,MAAM,QAAQ,GAAG;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjE,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAMF,wBAAgB,KAAK,CACnB,IAAI,EAAE,OAAO,CAAC,IAAI,EAClB,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,2BAA2B,CA0C7B"}
@@ -0,0 +1,87 @@
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.parse = parse;
37
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
38
+ const VirtualSize_1 = require("../VirtualSize");
39
+ const findDescriptors_1 = require("./findDescriptors");
40
+ const assertSatisfiable_1 = require("./assertSatisfiable");
41
+ function sum(...values) {
42
+ return values.reduce((a, b) => a + b, BigInt(0));
43
+ }
44
+ function parse(psbt, descriptorMap, network) {
45
+ const inputs = psbt.data.inputs.map((input, inputIndex) => {
46
+ if (!input.witnessUtxo) {
47
+ throw new Error('invalid input: no witnessUtxo');
48
+ }
49
+ if (!input.witnessUtxo.value) {
50
+ throw new Error('invalid input: no value');
51
+ }
52
+ const descriptorWithIndex = (0, findDescriptors_1.findDescriptorForInput)(input, descriptorMap);
53
+ if (!descriptorWithIndex) {
54
+ throw new Error('invalid input: no descriptor found');
55
+ }
56
+ (0, assertSatisfiable_1.assertSatisfiable)(psbt, inputIndex, descriptorWithIndex.descriptor);
57
+ return {
58
+ address: utxolib.address.fromOutputScript(input.witnessUtxo.script, network),
59
+ value: input.witnessUtxo.value,
60
+ scriptId: descriptorWithIndex,
61
+ };
62
+ });
63
+ const outputs = psbt.txOutputs.map((output, i) => {
64
+ if (output.value === undefined) {
65
+ throw new Error('invalid output: no value');
66
+ }
67
+ const descriptorWithIndex = (0, findDescriptors_1.findDescriptorForOutput)(output.script, psbt.data.outputs[i], descriptorMap);
68
+ return {
69
+ address: output.address,
70
+ script: output.script,
71
+ value: output.value,
72
+ scriptId: descriptorWithIndex,
73
+ };
74
+ });
75
+ const inputAmount = sum(...inputs.map((input) => input.value));
76
+ const outputSum = sum(...outputs.map((output) => output.value));
77
+ const spendAmount = sum(...outputs.filter((output) => !('descriptor' in output)).map((output) => output.value));
78
+ const minerFee = inputAmount - outputSum;
79
+ return {
80
+ inputs,
81
+ outputs,
82
+ spendAmount,
83
+ minerFee,
84
+ virtualSize: (0, VirtualSize_1.getVirtualSize)({ inputs: inputs.map((i) => i.scriptId.descriptor), outputs }),
85
+ };
86
+ }
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9wc2J0L3BhcnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0NBLHNCQThDQztBQWpGRCw4REFBZ0Q7QUFHaEQsZ0RBQWdEO0FBRWhELHVEQUFvRjtBQUNwRiwyREFBd0Q7QUF5QnhELFNBQVMsR0FBRyxDQUFDLEdBQUcsTUFBZ0I7SUFDOUIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBRUQsU0FBZ0IsS0FBSyxDQUNuQixJQUFrQixFQUNsQixhQUE0QixFQUM1QixPQUF3QjtJQUV4QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFlLEVBQUU7UUFDckUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsTUFBTSxtQkFBbUIsR0FBRyxJQUFBLHdDQUFzQixFQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELElBQUEscUNBQWlCLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRSxPQUFPO1lBQ0wsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDO1lBQzVFLEtBQUssRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUs7WUFDOUIsUUFBUSxFQUFFLG1CQUFtQjtTQUM5QixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQWdCLEVBQUU7UUFDN0QsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsTUFBTSxtQkFBbUIsR0FBRyxJQUFBLHlDQUF1QixFQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDeEcsT0FBTztZQUNMLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztZQUN2QixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1lBQ25CLFFBQVEsRUFBRSxtQkFBbUI7U0FDOUIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDL0QsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEUsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEgsTUFBTSxRQUFRLEdBQUcsV0FBVyxHQUFHLFNBQVMsQ0FBQztJQUN6QyxPQUFPO1FBQ0wsTUFBTTtRQUNOLE9BQU87UUFDUCxXQUFXO1FBQ1gsUUFBUTtRQUNSLFdBQVcsRUFBRSxJQUFBLDRCQUFjLEVBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQztLQUMzRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS1taW5pc2NyaXB0JztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5pbXBvcnQgeyBEZXNjcmlwdG9yTWFwIH0gZnJvbSAnLi4vRGVzY3JpcHRvck1hcCc7XG5pbXBvcnQgeyBnZXRWaXJ0dWFsU2l6ZSB9IGZyb20gJy4uL1ZpcnR1YWxTaXplJztcblxuaW1wb3J0IHsgZmluZERlc2NyaXB0b3JGb3JJbnB1dCwgZmluZERlc2NyaXB0b3JGb3JPdXRwdXQgfSBmcm9tICcuL2ZpbmREZXNjcmlwdG9ycyc7XG5pbXBvcnQgeyBhc3NlcnRTYXRpc2ZpYWJsZSB9IGZyb20gJy4vYXNzZXJ0U2F0aXNmaWFibGUnO1xuXG5leHBvcnQgdHlwZSBTY3JpcHRJZCA9IHsgZGVzY3JpcHRvcjogRGVzY3JpcHRvcjsgaW5kZXg6IG51bWJlciB9O1xuXG5leHBvcnQgdHlwZSBQYXJzZWRJbnB1dCA9IHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICB2YWx1ZTogYmlnaW50O1xuICBzY3JpcHRJZDogU2NyaXB0SWQ7XG59O1xuXG5leHBvcnQgdHlwZSBQYXJzZWRPdXRwdXQgPSB7XG4gIGFkZHJlc3M/OiBzdHJpbmc7XG4gIHNjcmlwdDogQnVmZmVyO1xuICB2YWx1ZTogYmlnaW50O1xuICBzY3JpcHRJZD86IFNjcmlwdElkO1xufTtcblxuZXhwb3J0IHR5cGUgUGFyc2VkRGVzY3JpcHRvclRyYW5zYWN0aW9uID0ge1xuICBpbnB1dHM6IFBhcnNlZElucHV0W107XG4gIG91dHB1dHM6IFBhcnNlZE91dHB1dFtdO1xuICBzcGVuZEFtb3VudDogYmlnaW50O1xuICBtaW5lckZlZTogYmlnaW50O1xuICB2aXJ0dWFsU2l6ZTogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gc3VtKC4uLnZhbHVlczogYmlnaW50W10pOiBiaWdpbnQge1xuICByZXR1cm4gdmFsdWVzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIEJpZ0ludCgwKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShcbiAgcHNidDogdXR4b2xpYi5Qc2J0LFxuICBkZXNjcmlwdG9yTWFwOiBEZXNjcmlwdG9yTWFwLFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbik6IFBhcnNlZERlc2NyaXB0b3JUcmFuc2FjdGlvbiB7XG4gIGNvbnN0IGlucHV0cyA9IHBzYnQuZGF0YS5pbnB1dHMubWFwKChpbnB1dCwgaW5wdXRJbmRleCk6IFBhcnNlZElucHV0ID0+IHtcbiAgICBpZiAoIWlucHV0LndpdG5lc3NVdHhvKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW5wdXQ6IG5vIHdpdG5lc3NVdHhvJyk7XG4gICAgfVxuICAgIGlmICghaW5wdXQud2l0bmVzc1V0eG8udmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbnB1dDogbm8gdmFsdWUnKTtcbiAgICB9XG4gICAgY29uc3QgZGVzY3JpcHRvcldpdGhJbmRleCA9IGZpbmREZXNjcmlwdG9yRm9ySW5wdXQoaW5wdXQsIGRlc2NyaXB0b3JNYXApO1xuICAgIGlmICghZGVzY3JpcHRvcldpdGhJbmRleCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGlucHV0OiBubyBkZXNjcmlwdG9yIGZvdW5kJyk7XG4gICAgfVxuICAgIGFzc2VydFNhdGlzZmlhYmxlKHBzYnQsIGlucHV0SW5kZXgsIGRlc2NyaXB0b3JXaXRoSW5kZXguZGVzY3JpcHRvcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZHJlc3M6IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KGlucHV0LndpdG5lc3NVdHhvLnNjcmlwdCwgbmV0d29yayksXG4gICAgICB2YWx1ZTogaW5wdXQud2l0bmVzc1V0eG8udmFsdWUsXG4gICAgICBzY3JpcHRJZDogZGVzY3JpcHRvcldpdGhJbmRleCxcbiAgICB9O1xuICB9KTtcbiAgY29uc3Qgb3V0cHV0cyA9IHBzYnQudHhPdXRwdXRzLm1hcCgob3V0cHV0LCBpKTogUGFyc2VkT3V0cHV0ID0+IHtcbiAgICBpZiAob3V0cHV0LnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBvdXRwdXQ6IG5vIHZhbHVlJyk7XG4gICAgfVxuICAgIGNvbnN0IGRlc2NyaXB0b3JXaXRoSW5kZXggPSBmaW5kRGVzY3JpcHRvckZvck91dHB1dChvdXRwdXQuc2NyaXB0LCBwc2J0LmRhdGEub3V0cHV0c1tpXSwgZGVzY3JpcHRvck1hcCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzLFxuICAgICAgc2NyaXB0OiBvdXRwdXQuc2NyaXB0LFxuICAgICAgdmFsdWU6IG91dHB1dC52YWx1ZSxcbiAgICAgIHNjcmlwdElkOiBkZXNjcmlwdG9yV2l0aEluZGV4LFxuICAgIH07XG4gIH0pO1xuICBjb25zdCBpbnB1dEFtb3VudCA9IHN1bSguLi5pbnB1dHMubWFwKChpbnB1dCkgPT4gaW5wdXQudmFsdWUpKTtcbiAgY29uc3Qgb3V0cHV0U3VtID0gc3VtKC4uLm91dHB1dHMubWFwKChvdXRwdXQpID0+IG91dHB1dC52YWx1ZSkpO1xuICBjb25zdCBzcGVuZEFtb3VudCA9IHN1bSguLi5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiAhKCdkZXNjcmlwdG9yJyBpbiBvdXRwdXQpKS5tYXAoKG91dHB1dCkgPT4gb3V0cHV0LnZhbHVlKSk7XG4gIGNvbnN0IG1pbmVyRmVlID0gaW5wdXRBbW91bnQgLSBvdXRwdXRTdW07XG4gIHJldHVybiB7XG4gICAgaW5wdXRzLFxuICAgIG91dHB1dHMsXG4gICAgc3BlbmRBbW91bnQsXG4gICAgbWluZXJGZWUsXG4gICAgdmlydHVhbFNpemU6IGdldFZpcnR1YWxTaXplKHsgaW5wdXRzOiBpbnB1dHMubWFwKChpKSA9PiBpLnNjcmlwdElkLmRlc2NyaXB0b3IpLCBvdXRwdXRzIH0pLFxuICB9O1xufVxuIl19
@@ -0,0 +1,12 @@
1
+ import { Psbt as WasmPsbt } from '@bitgo/wasm-miniscript';
2
+ import * as utxolib from '@bitgo-beta/utxo-lib';
3
+ export declare function toWrappedPsbt(psbt: utxolib.bitgo.UtxoPsbt | utxolib.Psbt | Buffer | Uint8Array): WasmPsbt;
4
+ export declare function toUtxoPsbt(psbt: WasmPsbt | Buffer | Uint8Array, network: utxolib.Network): utxolib.bitgo.UtxoPsbt;
5
+ /**
6
+ * Use `wasm-miniscript` to finalize a PSBT.
7
+ * Miniscript based finalization is more powerful than bitcoinjs-lib's / utxo-lib's finalization
8
+ * and can finalize more complex scripts (e.g. miniscript descriptors).
9
+ * @param psbt
10
+ */
11
+ export declare function finalizePsbt(psbt: utxolib.bitgo.UtxoPsbt): void;
12
+ //# sourceMappingURL=wrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/psbt/wrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAQzG;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAQjH;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAU/D"}
@@ -0,0 +1,76 @@
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.toWrappedPsbt = toWrappedPsbt;
37
+ exports.toUtxoPsbt = toUtxoPsbt;
38
+ exports.finalizePsbt = finalizePsbt;
39
+ const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
40
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
41
+ function toWrappedPsbt(psbt) {
42
+ if (psbt instanceof utxolib.bitgo.UtxoPsbt || psbt instanceof utxolib.Psbt) {
43
+ psbt = psbt.toBuffer();
44
+ }
45
+ if (psbt instanceof Buffer || psbt instanceof Uint8Array) {
46
+ return wasm_miniscript_1.Psbt.deserialize(psbt);
47
+ }
48
+ throw new Error('Invalid input');
49
+ }
50
+ function toUtxoPsbt(psbt, network) {
51
+ if (psbt instanceof wasm_miniscript_1.Psbt) {
52
+ psbt = psbt.serialize();
53
+ }
54
+ if (psbt instanceof Buffer || psbt instanceof Uint8Array) {
55
+ return utxolib.bitgo.UtxoPsbt.fromBuffer(Buffer.from(psbt), { network });
56
+ }
57
+ throw new Error('Invalid input');
58
+ }
59
+ /**
60
+ * Use `wasm-miniscript` to finalize a PSBT.
61
+ * Miniscript based finalization is more powerful than bitcoinjs-lib's / utxo-lib's finalization
62
+ * and can finalize more complex scripts (e.g. miniscript descriptors).
63
+ * @param psbt
64
+ */
65
+ function finalizePsbt(psbt) {
66
+ if (utxolib.getMainnet(psbt.network) !== utxolib.networks.bitcoin) {
67
+ throw new Error('only bitcoin and testnet are supported');
68
+ }
69
+ const wrappedPsbt = toWrappedPsbt(psbt);
70
+ wrappedPsbt.finalize();
71
+ const unwrappedPsbt = toUtxoPsbt(wrappedPsbt, psbt.network);
72
+ for (let i = 0; i < psbt.data.inputs.length; i++) {
73
+ psbt.data.inputs[i] = unwrappedPsbt.data.inputs[i];
74
+ }
75
+ }
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JhcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kZXNjcmlwdG9yL3BzYnQvd3JhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLHNDQVFDO0FBRUQsZ0NBUUM7QUFRRCxvQ0FVQztBQXZDRCw0REFBMEQ7QUFDMUQsOERBQWdEO0FBRWhELFNBQWdCLGFBQWEsQ0FBQyxJQUFpRTtJQUM3RixJQUFJLElBQUksWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLFlBQVksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNFLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUNELElBQUksSUFBSSxZQUFZLE1BQU0sSUFBSSxJQUFJLFlBQVksVUFBVSxFQUFFLENBQUM7UUFDekQsT0FBTyxzQkFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQsU0FBZ0IsVUFBVSxDQUFDLElBQW9DLEVBQUUsT0FBd0I7SUFDdkYsSUFBSSxJQUFJLFlBQVksc0JBQVEsRUFBRSxDQUFDO1FBQzdCLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQUksSUFBSSxZQUFZLE1BQU0sSUFBSSxJQUFJLFlBQVksVUFBVSxFQUFFLENBQUM7UUFDekQsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLElBQTRCO0lBQ3ZELElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsRSxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNELE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdkIsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHNidCBhcyBXYXNtUHNidCB9IGZyb20gJ0BiaXRnby93YXNtLW1pbmlzY3JpcHQnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1dyYXBwZWRQc2J0KHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfCB1dHhvbGliLlBzYnQgfCBCdWZmZXIgfCBVaW50OEFycmF5KTogV2FzbVBzYnQge1xuICBpZiAocHNidCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfHwgcHNidCBpbnN0YW5jZW9mIHV0eG9saWIuUHNidCkge1xuICAgIHBzYnQgPSBwc2J0LnRvQnVmZmVyKCk7XG4gIH1cbiAgaWYgKHBzYnQgaW5zdGFuY2VvZiBCdWZmZXIgfHwgcHNidCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICByZXR1cm4gV2FzbVBzYnQuZGVzZXJpYWxpemUocHNidCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlucHV0Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1V0eG9Qc2J0KHBzYnQ6IFdhc21Qc2J0IHwgQnVmZmVyIHwgVWludDhBcnJheSwgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrKTogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB7XG4gIGlmIChwc2J0IGluc3RhbmNlb2YgV2FzbVBzYnQpIHtcbiAgICBwc2J0ID0gcHNidC5zZXJpYWxpemUoKTtcbiAgfVxuICBpZiAocHNidCBpbnN0YW5jZW9mIEJ1ZmZlciB8fCBwc2J0IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIHJldHVybiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LmZyb21CdWZmZXIoQnVmZmVyLmZyb20ocHNidCksIHsgbmV0d29yayB9KTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5wdXQnKTtcbn1cblxuLyoqXG4gKiBVc2UgYHdhc20tbWluaXNjcmlwdGAgdG8gZmluYWxpemUgYSBQU0JULlxuICogTWluaXNjcmlwdCBiYXNlZCBmaW5hbGl6YXRpb24gaXMgbW9yZSBwb3dlcmZ1bCB0aGFuIGJpdGNvaW5qcy1saWIncyAvIHV0eG8tbGliJ3MgZmluYWxpemF0aW9uXG4gKiBhbmQgY2FuIGZpbmFsaXplIG1vcmUgY29tcGxleCBzY3JpcHRzIChlLmcuIG1pbmlzY3JpcHQgZGVzY3JpcHRvcnMpLlxuICogQHBhcmFtIHBzYnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsaXplUHNidChwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0KTogdm9pZCB7XG4gIGlmICh1dHhvbGliLmdldE1haW5uZXQocHNidC5uZXR3b3JrKSAhPT0gdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdvbmx5IGJpdGNvaW4gYW5kIHRlc3RuZXQgYXJlIHN1cHBvcnRlZCcpO1xuICB9XG4gIGNvbnN0IHdyYXBwZWRQc2J0ID0gdG9XcmFwcGVkUHNidChwc2J0KTtcbiAgd3JhcHBlZFBzYnQuZmluYWxpemUoKTtcbiAgY29uc3QgdW53cmFwcGVkUHNidCA9IHRvVXR4b1BzYnQod3JhcHBlZFBzYnQsIHBzYnQubmV0d29yayk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHNidC5kYXRhLmlucHV0cy5sZW5ndGg7IGkrKykge1xuICAgIHBzYnQuZGF0YS5pbnB1dHNbaV0gPSB1bndyYXBwZWRQc2J0LmRhdGEuaW5wdXRzW2ldO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ export * as descriptor from './descriptor';
2
+ export * as testutil from './testutil';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC"}