@bitgo-beta/abstract-lightning 1.0.1-beta.142 → 1.0.1-beta.1421

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 (92) hide show
  1. package/dist/src/abstractLightningCoin.d.ts +11 -5
  2. package/dist/src/abstractLightningCoin.d.ts.map +1 -1
  3. package/dist/src/abstractLightningCoin.js +79 -8
  4. package/dist/src/codecs/api/backup.d.ts +15 -0
  5. package/dist/src/codecs/api/backup.d.ts.map +1 -0
  6. package/dist/src/codecs/api/backup.js +47 -0
  7. package/dist/src/codecs/api/balance.d.ts +156 -0
  8. package/dist/src/codecs/api/balance.d.ts.map +1 -0
  9. package/dist/src/codecs/api/balance.js +107 -0
  10. package/dist/src/codecs/api/index.d.ts +8 -0
  11. package/dist/src/codecs/api/index.d.ts.map +1 -0
  12. package/dist/src/codecs/api/index.js +24 -0
  13. package/dist/src/codecs/api/invoice.d.ts +68 -0
  14. package/dist/src/codecs/api/invoice.d.ts.map +1 -0
  15. package/dist/src/codecs/api/invoice.js +102 -0
  16. package/dist/src/codecs/api/payment.d.ts +107 -0
  17. package/dist/src/codecs/api/payment.d.ts.map +1 -0
  18. package/dist/src/codecs/api/payment.js +153 -0
  19. package/dist/src/codecs/api/transaction.d.ts +138 -0
  20. package/dist/src/codecs/api/transaction.d.ts.map +1 -0
  21. package/dist/src/codecs/api/transaction.js +122 -0
  22. package/dist/src/codecs/api/wallet.d.ts +100 -0
  23. package/dist/src/codecs/api/wallet.d.ts.map +1 -0
  24. package/dist/src/codecs/api/wallet.js +104 -0
  25. package/dist/src/codecs/api/withdraw.d.ts +92 -0
  26. package/dist/src/codecs/api/withdraw.d.ts.map +1 -0
  27. package/dist/src/codecs/api/withdraw.js +92 -0
  28. package/dist/src/codecs/index.d.ts +3 -0
  29. package/dist/src/codecs/index.d.ts.map +1 -0
  30. package/dist/src/codecs/index.js +19 -0
  31. package/dist/src/codecs/shared.d.ts +7 -0
  32. package/dist/src/codecs/shared.d.ts.map +1 -0
  33. package/dist/src/codecs/shared.js +42 -0
  34. package/dist/src/index.d.ts +3 -0
  35. package/dist/src/index.d.ts.map +1 -1
  36. package/dist/src/index.js +4 -1
  37. package/dist/src/lightning/index.d.ts +5 -0
  38. package/dist/src/lightning/index.d.ts.map +1 -0
  39. package/dist/src/lightning/index.js +21 -0
  40. package/dist/src/lightning/lightningUtils.d.ts +90 -0
  41. package/dist/src/lightning/lightningUtils.d.ts.map +1 -0
  42. package/dist/src/lightning/lightningUtils.js +290 -0
  43. package/dist/src/lightning/parseWithdrawPsbt.d.ts +11 -0
  44. package/dist/src/lightning/parseWithdrawPsbt.d.ts.map +1 -0
  45. package/dist/src/lightning/parseWithdrawPsbt.js +163 -0
  46. package/dist/src/lightning/signableJson.d.ts +17 -0
  47. package/dist/src/lightning/signableJson.d.ts.map +1 -0
  48. package/dist/src/lightning/signableJson.js +29 -0
  49. package/dist/src/lightning/signature.d.ts +22 -0
  50. package/dist/src/lightning/signature.d.ts.map +1 -0
  51. package/dist/src/lightning/signature.js +69 -0
  52. package/dist/src/wallet/custodialLightning.d.ts +7 -0
  53. package/dist/src/wallet/custodialLightning.d.ts.map +1 -0
  54. package/dist/src/wallet/custodialLightning.js +14 -0
  55. package/dist/src/wallet/index.d.ts +5 -0
  56. package/dist/src/wallet/index.d.ts.map +1 -0
  57. package/dist/src/wallet/index.js +21 -0
  58. package/dist/src/wallet/lightning.d.ts +141 -0
  59. package/dist/src/wallet/lightning.d.ts.map +1 -0
  60. package/dist/src/wallet/lightning.js +288 -0
  61. package/dist/src/wallet/selfCustodialLightning.d.ts +32 -0
  62. package/dist/src/wallet/selfCustodialLightning.d.ts.map +1 -0
  63. package/dist/src/wallet/selfCustodialLightning.js +134 -0
  64. package/dist/src/wallet/wallet.d.ts +7 -0
  65. package/dist/src/wallet/wallet.d.ts.map +1 -0
  66. package/dist/src/wallet/wallet.js +22 -0
  67. package/dist/test/unit/lightning/codecs.d.ts +2 -0
  68. package/dist/test/unit/lightning/codecs.d.ts.map +1 -0
  69. package/dist/test/unit/lightning/codecs.js +151 -0
  70. package/dist/test/unit/lightning/createPsbt.d.ts +27 -0
  71. package/dist/test/unit/lightning/createPsbt.d.ts.map +1 -0
  72. package/dist/test/unit/lightning/createPsbt.js +162 -0
  73. package/dist/test/unit/lightning/createWatchOnlyFixture.d.ts +4 -0
  74. package/dist/test/unit/lightning/createWatchOnlyFixture.d.ts.map +1 -0
  75. package/dist/test/unit/lightning/createWatchOnlyFixture.js +1561 -0
  76. package/dist/test/unit/lightning/lightningUtils.d.ts +2 -0
  77. package/dist/test/unit/lightning/lightningUtils.d.ts.map +1 -0
  78. package/dist/test/unit/lightning/lightningUtils.js +123 -0
  79. package/dist/test/unit/lightning/parseWithdrawPsbt.d.ts +2 -0
  80. package/dist/test/unit/lightning/parseWithdrawPsbt.d.ts.map +1 -0
  81. package/dist/test/unit/lightning/parseWithdrawPsbt.js +478 -0
  82. package/dist/test/unit/lightning/signableJson.d.ts +2 -0
  83. package/dist/test/unit/lightning/signableJson.d.ts.map +1 -0
  84. package/dist/test/unit/lightning/signableJson.js +52 -0
  85. package/dist/test/unit/lightning/signature.d.ts +2 -0
  86. package/dist/test/unit/lightning/signature.d.ts.map +1 -0
  87. package/dist/test/unit/lightning/signature.js +91 -0
  88. package/dist/tsconfig.tsbuildinfo +1 -0
  89. package/package.json +19 -6
  90. package/.eslintignore +0 -5
  91. package/.mocharc.yml +0 -8
  92. package/CHANGELOG.md +0 -96
package/dist/src/index.js CHANGED
@@ -15,4 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./abstractLightningCoin"), exports);
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDBEQUF3QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWJzdHJhY3RMaWdodG5pbmdDb2luJztcbiJdfQ==
18
+ __exportStar(require("./wallet"), exports);
19
+ __exportStar(require("./lightning"), exports);
20
+ __exportStar(require("./codecs"), exports);
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDBEQUF3QztBQUN4QywyQ0FBeUI7QUFDekIsOENBQTRCO0FBQzVCLDJDQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWJzdHJhY3RMaWdodG5pbmdDb2luJztcbmV4cG9ydCAqIGZyb20gJy4vd2FsbGV0JztcbmV4cG9ydCAqIGZyb20gJy4vbGlnaHRuaW5nJztcbmV4cG9ydCAqIGZyb20gJy4vY29kZWNzJztcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ export * from './signableJson';
2
+ export * from './signature';
3
+ export * from './lightningUtils';
4
+ export * from './parseWithdrawPsbt';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lightning/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,21 @@
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("./signableJson"), exports);
18
+ __exportStar(require("./signature"), exports);
19
+ __exportStar(require("./lightningUtils"), exports);
20
+ __exportStar(require("./parseWithdrawPsbt"), exports);
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGlnaHRuaW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBK0I7QUFDL0IsOENBQTRCO0FBQzVCLG1EQUFpQztBQUNqQyxzREFBb0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NpZ25hYmxlSnNvbic7XG5leHBvcnQgKiBmcm9tICcuL3NpZ25hdHVyZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpZ2h0bmluZ1V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vcGFyc2VXaXRoZHJhd1BzYnQnO1xuIl19
@@ -0,0 +1,90 @@
1
+ import * as statics from '@bitgo-beta/statics';
2
+ import * as utxolib from '@bitgo-beta/utxo-lib';
3
+ import { WatchOnly, WatchOnlyAccount } from '../codecs';
4
+ export declare const signerMacaroonPermissions: {
5
+ entity: string;
6
+ action: string;
7
+ }[];
8
+ export declare const lightningNetworkName: readonly ["bitcoin", "testnet"];
9
+ export type LightningNetworkName = (typeof lightningNetworkName)[number];
10
+ /**
11
+ * Checks if the coin name is a lightning coin name.
12
+ */
13
+ export declare function isLightningCoinName(coinName: unknown): coinName is 'lnbtc' | 'tlnbtc';
14
+ /**
15
+ * Get the utxolib network for a lightning network.
16
+ */
17
+ export declare function getLightningNetwork(networkName: LightningNetworkName): utxolib.Network;
18
+ /**
19
+ * Get the lightning coin name for a utxolib network.
20
+ */
21
+ export declare function getLightningCoinName(network: utxolib.Network): string;
22
+ /**
23
+ * Checks if the network name is a valid lightning network name.
24
+ */
25
+ export declare function isValidLightningNetworkName(networkName: unknown): networkName is LightningNetworkName;
26
+ /**
27
+ * Checks if the network is a valid lightning network.
28
+ */
29
+ export declare function isValidLightningNetwork(network: unknown): network is utxolib.Network;
30
+ /**
31
+ * Returns the statics network data for a lightning coin.
32
+ */
33
+ export declare function getStaticsLightningNetwork(coinName: string): statics.LightningNetwork;
34
+ /**
35
+ * Returns the utxolib network for a lightning coin.
36
+ */
37
+ export declare function getUtxolibNetwork(coinName: string): utxolib.Network;
38
+ /**
39
+ * Returns coin specific data for a lightning coin.
40
+ */
41
+ export declare function unwrapLightningCoinSpecific<V>(obj: {
42
+ lnbtc: V;
43
+ } | {
44
+ tlnbtc: V;
45
+ }, coinSpecificPath: string): V;
46
+ /**
47
+ * Adds an IP caveat to a macaroon and returns the modified macaroon as a Base64 string.
48
+ */
49
+ export declare function addIPCaveatToMacaroon(macaroonBase64: string, ip: string): string;
50
+ export declare const PURPOSE_WRAPPED_P2WKH = 49;
51
+ export declare const PURPOSE_P2WKH = 84;
52
+ export declare const PURPOSE_P2TR = 86;
53
+ export declare const PURPOSE_ALL_OTHERS = 1017;
54
+ export type ExtendedKeyPurpose = typeof PURPOSE_WRAPPED_P2WKH | typeof PURPOSE_P2WKH | typeof PURPOSE_P2TR | typeof PURPOSE_ALL_OTHERS;
55
+ export type ExtendedKeyAddressPurpose = typeof PURPOSE_WRAPPED_P2WKH | typeof PURPOSE_P2WKH | typeof PURPOSE_P2TR;
56
+ /**
57
+ * Converts a prefix related to purpose and network (ypub, vpub, etc.) to extended public key (xpub).
58
+ */
59
+ export declare function revertXpubPrefix(xpub: string, purpose: ExtendedKeyPurpose, isMainnet: boolean): string;
60
+ /**
61
+ * Derives watch-only accounts from the master HD node for the given purposes and network.
62
+ */
63
+ export declare function deriveWatchOnlyAccounts(masterHDNode: utxolib.BIP32Interface, isMainnet: boolean, params?: {
64
+ onlyAddressCreationAccounts?: boolean;
65
+ }): WatchOnlyAccount[];
66
+ /**
67
+ * Creates a watch-only wallet init data from the provided signer root key and network.
68
+ */
69
+ export declare function createWatchOnly(signerRootKey: string, network: utxolib.Network): WatchOnly;
70
+ /**
71
+ * Derives the shared Elliptic Curve Diffie-Hellman (ECDH) secret between the user's auth extended private key
72
+ * and the Lightning service's public key for secure communication.
73
+ */
74
+ export declare function deriveLightningServiceSharedSecret(coinName: 'lnbtc' | 'tlnbtc', userAuthXprv: string): Buffer;
75
+ /**
76
+ * Derives the shared secret for the middleware using a private key and the middleware's public key.
77
+ */
78
+ export declare function deriveMiddlewareSharedSecret(coinName: 'lnbtc' | 'tlnbtc', xprv: string): Buffer;
79
+ /**
80
+ * Derives the shared secret for TAT service using ta private key and the TAT public key.
81
+ */
82
+ export declare function deriveTatSharedSecret(coinName: 'lnbtc' | 'tlnbtc', xprv: string): Buffer;
83
+ /**
84
+ * Given a seed, compute a BIP32 derivation index.
85
+ * 0 <= index < 2147483648 (largest 31 bit number). This needs to be 2^31 - 1 so that the bip32 library
86
+ * can derive the hardened key.
87
+ * @param seed (optional) If nothing provided, we will generate one randomly
88
+ */
89
+ export declare function computeBip32DerivationIndexFromSeed(seed?: string): number;
90
+ //# sourceMappingURL=lightningUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightningUtils.d.ts","sourceRoot":"","sources":["../../../src/lightning/lightningUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,290 @@
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.PURPOSE_ALL_OTHERS = exports.PURPOSE_P2TR = exports.PURPOSE_P2WKH = exports.PURPOSE_WRAPPED_P2WKH = exports.lightningNetworkName = exports.signerMacaroonPermissions = void 0;
37
+ exports.isLightningCoinName = isLightningCoinName;
38
+ exports.getLightningNetwork = getLightningNetwork;
39
+ exports.getLightningCoinName = getLightningCoinName;
40
+ exports.isValidLightningNetworkName = isValidLightningNetworkName;
41
+ exports.isValidLightningNetwork = isValidLightningNetwork;
42
+ exports.getStaticsLightningNetwork = getStaticsLightningNetwork;
43
+ exports.getUtxolibNetwork = getUtxolibNetwork;
44
+ exports.unwrapLightningCoinSpecific = unwrapLightningCoinSpecific;
45
+ exports.addIPCaveatToMacaroon = addIPCaveatToMacaroon;
46
+ exports.revertXpubPrefix = revertXpubPrefix;
47
+ exports.deriveWatchOnlyAccounts = deriveWatchOnlyAccounts;
48
+ exports.createWatchOnly = createWatchOnly;
49
+ exports.deriveLightningServiceSharedSecret = deriveLightningServiceSharedSecret;
50
+ exports.deriveMiddlewareSharedSecret = deriveMiddlewareSharedSecret;
51
+ exports.deriveTatSharedSecret = deriveTatSharedSecret;
52
+ exports.computeBip32DerivationIndexFromSeed = computeBip32DerivationIndexFromSeed;
53
+ const statics = __importStar(require("@bitgo-beta/statics"));
54
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
55
+ const crypto_1 = require("crypto");
56
+ const macaroon_1 = require("macaroon");
57
+ const bs58check = __importStar(require("bs58check"));
58
+ const sdkcore = __importStar(require("@bitgo-beta/sdk-core"));
59
+ // https://github.com/lightningnetwork/lnd/blob/master/docs/remote-signing.md#the-signer-node
60
+ exports.signerMacaroonPermissions = [
61
+ {
62
+ entity: 'message',
63
+ action: 'write',
64
+ },
65
+ {
66
+ entity: 'signer',
67
+ action: 'generate',
68
+ },
69
+ {
70
+ entity: 'address',
71
+ action: 'read',
72
+ },
73
+ {
74
+ entity: 'onchain',
75
+ action: 'write',
76
+ },
77
+ ];
78
+ exports.lightningNetworkName = ['bitcoin', 'testnet'];
79
+ /**
80
+ * Checks if the coin name is a lightning coin name.
81
+ */
82
+ function isLightningCoinName(coinName) {
83
+ return coinName === 'lnbtc' || coinName === 'tlnbtc';
84
+ }
85
+ /**
86
+ * Get the utxolib network for a lightning network.
87
+ */
88
+ function getLightningNetwork(networkName) {
89
+ return utxolib.networks[networkName];
90
+ }
91
+ /**
92
+ * Get the lightning coin name for a utxolib network.
93
+ */
94
+ function getLightningCoinName(network) {
95
+ return network === utxolib.networks.bitcoin ? 'lnbtc' : 'tlnbtc';
96
+ }
97
+ /**
98
+ * Checks if the network name is a valid lightning network name.
99
+ */
100
+ function isValidLightningNetworkName(networkName) {
101
+ return exports.lightningNetworkName.includes(networkName);
102
+ }
103
+ /**
104
+ * Checks if the network is a valid lightning network.
105
+ */
106
+ function isValidLightningNetwork(network) {
107
+ return utxolib.isValidNetwork(network) && isValidLightningNetworkName(utxolib.getNetworkName(network));
108
+ }
109
+ /**
110
+ * Returns the statics network data for a lightning coin.
111
+ */
112
+ function getStaticsLightningNetwork(coinName) {
113
+ if (!isLightningCoinName(coinName)) {
114
+ throw new Error(`${coinName} is not a lightning coin`);
115
+ }
116
+ const coin = statics.coins.get(coinName);
117
+ if (!(coin instanceof statics.LightningCoin)) {
118
+ throw new Error('coin is not a lightning coin');
119
+ }
120
+ return coin.network;
121
+ }
122
+ /**
123
+ * Returns the utxolib network for a lightning coin.
124
+ */
125
+ function getUtxolibNetwork(coinName) {
126
+ const networkName = getStaticsLightningNetwork(coinName).utxolibName;
127
+ if (!isValidLightningNetworkName(networkName)) {
128
+ throw new Error('invalid lightning network');
129
+ }
130
+ return getLightningNetwork(networkName);
131
+ }
132
+ /**
133
+ * Returns coin specific data for a lightning coin.
134
+ */
135
+ function unwrapLightningCoinSpecific(obj, coinSpecificPath) {
136
+ if (coinSpecificPath !== 'lnbtc' && coinSpecificPath !== 'tlnbtc') {
137
+ throw new Error(`invalid coinSpecificPath ${coinSpecificPath} for lightning coin`);
138
+ }
139
+ if (coinSpecificPath === 'lnbtc' && 'lnbtc' in obj) {
140
+ return obj.lnbtc;
141
+ }
142
+ if (coinSpecificPath === 'tlnbtc' && 'tlnbtc' in obj) {
143
+ return obj.tlnbtc;
144
+ }
145
+ throw new Error('invalid lightning coin specific');
146
+ }
147
+ /**
148
+ * Adds an IP caveat to a macaroon and returns the modified macaroon as a Base64 string.
149
+ */
150
+ function addIPCaveatToMacaroon(macaroonBase64, ip) {
151
+ const macaroon = (0, macaroon_1.importMacaroon)(macaroonBase64);
152
+ macaroon.addFirstPartyCaveat(`ipaddr ${ip}`);
153
+ return (0, macaroon_1.bytesToBase64)(macaroon.exportBinary());
154
+ }
155
+ exports.PURPOSE_WRAPPED_P2WKH = 49;
156
+ exports.PURPOSE_P2WKH = 84;
157
+ exports.PURPOSE_P2TR = 86;
158
+ exports.PURPOSE_ALL_OTHERS = 1017;
159
+ /**
160
+ * Converts an extended public key (xpub) to the appropriate prefix (ypub, vpub, etc.) based on its purpose and network.
161
+ */
162
+ function convertXpubPrefix(xpub, purpose, isMainnet) {
163
+ if (purpose === exports.PURPOSE_P2TR || purpose === exports.PURPOSE_ALL_OTHERS) {
164
+ return xpub;
165
+ }
166
+ const data = bs58check.decode(xpub);
167
+ let versionBytes;
168
+ switch (purpose) {
169
+ case exports.PURPOSE_WRAPPED_P2WKH:
170
+ versionBytes = isMainnet ? Buffer.from([0x04, 0x9d, 0x7c, 0xb2]) : Buffer.from([0x04, 0x4a, 0x52, 0x62]); // ypub/upub for p2sh-p2wpkh
171
+ break;
172
+ case exports.PURPOSE_P2WKH:
173
+ versionBytes = isMainnet ? Buffer.from([0x04, 0xb2, 0x47, 0x46]) : Buffer.from([0x04, 0x5f, 0x1c, 0xf6]); // zpub/vpub for p2wpkh
174
+ break;
175
+ default:
176
+ throw new Error('Unsupported purpose');
177
+ }
178
+ versionBytes.copy(data, 0, 0, 4);
179
+ return bs58check.encode(data);
180
+ }
181
+ /**
182
+ * Converts a prefix related to purpose and network (ypub, vpub, etc.) to extended public key (xpub).
183
+ */
184
+ function revertXpubPrefix(xpub, purpose, isMainnet) {
185
+ // If the purpose is P2TR or ALL_OTHERS, the key is already in the standard format (xpub/tpub),
186
+ // so we return it unmodified. This is the same bypass condition.
187
+ if (purpose === exports.PURPOSE_P2TR || purpose === exports.PURPOSE_ALL_OTHERS) {
188
+ return xpub;
189
+ }
190
+ // 1. Decode the extended public key to get the raw bytes
191
+ const data = bs58check.decode(xpub);
192
+ let versionBytes;
193
+ // 2. Determine the standard prefix (xpub/tpub) based on the network
194
+ switch (purpose) {
195
+ case exports.PURPOSE_WRAPPED_P2WKH:
196
+ case exports.PURPOSE_P2WKH:
197
+ // All standard, non-SegWit-specific keys use the same prefix (xpub for mainnet, tpub for testnet)
198
+ versionBytes = isMainnet
199
+ ? Buffer.from([0x04, 0x88, 0xb2, 0x1e]) // xpub
200
+ : Buffer.from([0x04, 0x35, 0x87, 0xcf]); // tpub
201
+ break;
202
+ default:
203
+ // This case should ideally not be hit if the input key is one of the converted types
204
+ throw new Error('Unsupported purpose for reversal');
205
+ }
206
+ // 3. Overwrite the existing prefix (ypub, zpub, upub, or vpub)
207
+ // with the standard xpub or tpub prefix.
208
+ versionBytes.copy(data, 0, 0, 4);
209
+ // 4. Encode the modified byte data back to a Base58Check string
210
+ return bs58check.encode(data);
211
+ }
212
+ /**
213
+ * Derives watch-only accounts from the master HD node for the given purposes and network.
214
+ */
215
+ function deriveWatchOnlyAccounts(masterHDNode, isMainnet, params = { onlyAddressCreationAccounts: false }) {
216
+ // https://github.com/lightningnetwork/lnd/blob/master/docs/remote-signing.md#required-accounts
217
+ if (masterHDNode.isNeutered()) {
218
+ throw new Error('masterHDNode must not be neutered');
219
+ }
220
+ const purposes = params.onlyAddressCreationAccounts
221
+ ? [exports.PURPOSE_WRAPPED_P2WKH, exports.PURPOSE_P2WKH, exports.PURPOSE_P2TR]
222
+ : [exports.PURPOSE_WRAPPED_P2WKH, exports.PURPOSE_P2WKH, exports.PURPOSE_P2TR, exports.PURPOSE_ALL_OTHERS];
223
+ return purposes.flatMap((purpose) => {
224
+ const maxAccount = purpose === exports.PURPOSE_ALL_OTHERS ? 255 : 0;
225
+ const coinType = purpose !== exports.PURPOSE_ALL_OTHERS || isMainnet ? 0 : 1;
226
+ return Array.from({ length: maxAccount + 1 }, (_, account) => {
227
+ const path = `m/${purpose}'/${coinType}'/${account}'`;
228
+ const derivedNode = masterHDNode.derivePath(path);
229
+ // Ensure the node is neutered (i.e., converted to public key only)
230
+ const neuteredNode = derivedNode.neutered();
231
+ const xpub = convertXpubPrefix(neuteredNode.toBase58(), purpose, isMainnet);
232
+ return {
233
+ purpose,
234
+ coin_type: coinType,
235
+ account,
236
+ xpub,
237
+ };
238
+ });
239
+ });
240
+ }
241
+ /**
242
+ * Creates a watch-only wallet init data from the provided signer root key and network.
243
+ */
244
+ function createWatchOnly(signerRootKey, network) {
245
+ const masterHDNode = utxolib.bip32.fromBase58(signerRootKey, network);
246
+ const getCurrentUnixTimestamp = () => {
247
+ return Math.floor(Date.now() / 1000);
248
+ };
249
+ const master_key_birthday_timestamp = getCurrentUnixTimestamp().toString();
250
+ const master_key_fingerprint = masterHDNode.fingerprint.toString('hex');
251
+ const accounts = deriveWatchOnlyAccounts(masterHDNode, utxolib.isMainnet(network));
252
+ return { master_key_birthday_timestamp, master_key_fingerprint, accounts };
253
+ }
254
+ /**
255
+ * Derives the shared Elliptic Curve Diffie-Hellman (ECDH) secret between the user's auth extended private key
256
+ * and the Lightning service's public key for secure communication.
257
+ */
258
+ function deriveLightningServiceSharedSecret(coinName, userAuthXprv) {
259
+ const publicKey = Buffer.from(getStaticsLightningNetwork(coinName).lightningServicePubKey, 'hex');
260
+ const userAuthHdNode = utxolib.bip32.fromBase58(userAuthXprv);
261
+ return sdkcore.getSharedSecret(userAuthHdNode, publicKey);
262
+ }
263
+ /**
264
+ * Derives the shared secret for the middleware using a private key and the middleware's public key.
265
+ */
266
+ function deriveMiddlewareSharedSecret(coinName, xprv) {
267
+ const publicKey = Buffer.from(getStaticsLightningNetwork(coinName).middlewarePubKey, 'hex');
268
+ const userAuthHdNode = utxolib.bip32.fromBase58(xprv);
269
+ return sdkcore.getSharedSecret(userAuthHdNode, publicKey);
270
+ }
271
+ /**
272
+ * Derives the shared secret for TAT service using ta private key and the TAT public key.
273
+ */
274
+ function deriveTatSharedSecret(coinName, xprv) {
275
+ const publicKey = Buffer.from(getStaticsLightningNetwork(coinName).tatPubKey, 'hex');
276
+ const userAuthHdNode = utxolib.bip32.fromBase58(xprv);
277
+ return sdkcore.getSharedSecret(userAuthHdNode, publicKey);
278
+ }
279
+ /**
280
+ * Given a seed, compute a BIP32 derivation index.
281
+ * 0 <= index < 2147483648 (largest 31 bit number). This needs to be 2^31 - 1 so that the bip32 library
282
+ * can derive the hardened key.
283
+ * @param seed (optional) If nothing provided, we will generate one randomly
284
+ */
285
+ function computeBip32DerivationIndexFromSeed(seed) {
286
+ return ((Buffer.from(utxolib.crypto.sha256(Buffer.from(seed ?? (0, crypto_1.randomBytes)(32).toString('hex'), 'utf8'))).readUint32BE(0) %
287
+ Math.pow(2, 31)) -
288
+ 1);
289
+ }
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nVXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGlnaHRuaW5nL2xpZ2h0bmluZ1V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtDQSxrREFFQztBQUtELGtEQUVDO0FBS0Qsb0RBRUM7QUFLRCxrRUFFQztBQUtELDBEQUVDO0FBS0QsZ0VBU0M7QUFLRCw4Q0FNQztBQUtELGtFQVdDO0FBS0Qsc0RBSUM7QUE0Q0QsNENBZ0NDO0FBS0QsMERBZ0NDO0FBS0QsMENBU0M7QUFNRCxnRkFJQztBQUtELG9FQUlDO0FBS0Qsc0RBSUM7QUFRRCxrRkFNQztBQTNSRCw2REFBK0M7QUFDL0MsOERBQWdEO0FBQ2hELG1DQUFxQztBQUNyQyx1Q0FBeUQ7QUFDekQscURBQXVDO0FBQ3ZDLDhEQUFnRDtBQUdoRCw2RkFBNkY7QUFDaEYsUUFBQSx5QkFBeUIsR0FBRztJQUN2QztRQUNFLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLE1BQU0sRUFBRSxPQUFPO0tBQ2hCO0lBQ0Q7UUFDRSxNQUFNLEVBQUUsUUFBUTtRQUNoQixNQUFNLEVBQUUsVUFBVTtLQUNuQjtJQUNEO1FBQ0UsTUFBTSxFQUFFLFNBQVM7UUFDakIsTUFBTSxFQUFFLE1BQU07S0FDZjtJQUNEO1FBQ0UsTUFBTSxFQUFFLFNBQVM7UUFDakIsTUFBTSxFQUFFLE9BQU87S0FDaEI7Q0FDRixDQUFDO0FBRVcsUUFBQSxvQkFBb0IsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQVUsQ0FBQztBQUdwRTs7R0FFRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLFFBQWlCO0lBQ25ELE9BQU8sUUFBUSxLQUFLLE9BQU8sSUFBSSxRQUFRLEtBQUssUUFBUSxDQUFDO0FBQ3ZELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLFdBQWlDO0lBQ25FLE9BQU8sT0FBTyxDQUFDLFFB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Q0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzdGF0aWNzIGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBpbXBvcnRNYWNhcm9vbiwgYnl0ZXNUb0Jhc2U2NCB9IGZyb20gJ21hY2Fyb29uJztcbmltcG9ydCAqIGFzIGJzNThjaGVjayBmcm9tICdiczU4Y2hlY2snO1xuaW1wb3J0ICogYXMgc2RrY29yZSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBXYXRjaE9ubHksIFdhdGNoT25seUFjY291bnQgfSBmcm9tICcuLi9jb2RlY3MnO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbGlnaHRuaW5nbmV0d29yay9sbmQvYmxvYi9tYXN0ZXIvZG9jcy9yZW1vdGUtc2lnbmluZy5tZCN0aGUtc2lnbmVyLW5vZGVcbmV4cG9ydCBjb25zdCBzaWduZXJNYWNhcm9vblBlcm1pc3Npb25zID0gW1xuICB7XG4gICAgZW50aXR5OiAnbWVzc2FnZScsXG4gICAgYWN0aW9uOiAnd3JpdGUnLFxuICB9LFxuICB7XG4gICAgZW50aXR5OiAnc2lnbmVyJyxcbiAgICBhY3Rpb246ICdnZW5lcmF0ZScsXG4gIH0sXG4gIHtcbiAgICBlbnRpdHk6ICdhZGRyZXNzJyxcbiAgICBhY3Rpb246ICdyZWFkJyxcbiAgfSxcbiAge1xuICAgIGVudGl0eTogJ29uY2hhaW4nLFxuICAgIGFjdGlvbjogJ3dyaXRlJyxcbiAgfSxcbl07XG5cbmV4cG9ydCBjb25zdCBsaWdodG5pbmdOZXR3b3JrTmFtZSA9IFsnYml0Y29pbicsICd0ZXN0bmV0J10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBMaWdodG5pbmdOZXR3b3JrTmFtZSA9ICh0eXBlb2YgbGlnaHRuaW5nTmV0d29ya05hbWUpW251bWJlcl07XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBjb2luIG5hbWUgaXMgYSBsaWdodG5pbmcgY29pbiBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNMaWdodG5pbmdDb2luTmFtZShjb2luTmFtZTogdW5rbm93bik6IGNvaW5OYW1lIGlzICdsbmJ0YycgfCAndGxuYnRjJyB7XG4gIHJldHVybiBjb2luTmFtZSA9PT0gJ2xuYnRjJyB8fCBjb2luTmFtZSA9PT0gJ3RsbmJ0Yyc7XG59XG5cbi8qKlxuICogR2V0IHRoZSB1dHhvbGliIG5ldHdvcmsgZm9yIGEgbGlnaHRuaW5nIG5ldHdvcmsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaWdodG5pbmdOZXR3b3JrKG5ldHdvcmtOYW1lOiBMaWdodG5pbmdOZXR3b3JrTmFtZSk6IHV0eG9saWIuTmV0d29yayB7XG4gIHJldHVybiB1dHhvbGliLm5ldHdvcmtzW25ldHdvcmtOYW1lXTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGxpZ2h0bmluZyBjb2luIG5hbWUgZm9yIGEgdXR4b2xpYiBuZXR3b3JrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlnaHRuaW5nQ29pbk5hbWUobmV0d29yazogdXR4b2xpYi5OZXR3b3JrKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5ldHdvcmsgPT09IHV0eG9saWIubmV0d29ya3MuYml0Y29pbiA/ICdsbmJ0YycgOiAndGxuYnRjJztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIG5ldHdvcmsgbmFtZSBpcyBhIHZhbGlkIGxpZ2h0bmluZyBuZXR3b3JrIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkTGlnaHRuaW5nTmV0d29ya05hbWUobmV0d29ya05hbWU6IHVua25vd24pOiBuZXR3b3JrTmFtZSBpcyBMaWdodG5pbmdOZXR3b3JrTmFtZSB7XG4gIHJldHVybiBsaWdodG5pbmdOZXR3b3JrTmFtZS5pbmNsdWRlcyhuZXR3b3JrTmFtZSBhcyBMaWdodG5pbmdOZXR3b3JrTmFtZSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBuZXR3b3JrIGlzIGEgdmFsaWQgbGlnaHRuaW5nIG5ldHdvcmsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkTGlnaHRuaW5nTmV0d29yayhuZXR3b3JrOiB1bmtub3duKTogbmV0d29yayBpcyB1dHhvbGliLk5ldHdvcmsge1xuICByZXR1cm4gdXR4b2xpYi5pc1ZhbGlkTmV0d29yayhuZXR3b3JrKSAmJiBpc1ZhbGlkTGlnaHRuaW5nTmV0d29ya05hbWUodXR4b2xpYi5nZXROZXR3b3JrTmFtZShuZXR3b3JrKSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc3RhdGljcyBuZXR3b3JrIGRhdGEgZm9yIGEgbGlnaHRuaW5nIGNvaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0aWNzTGlnaHRuaW5nTmV0d29yayhjb2luTmFtZTogc3RyaW5nKTogc3RhdGljcy5MaWdodG5pbmdOZXR3b3JrIHtcbiAgaWYgKCFpc0xpZ2h0bmluZ0NvaW5OYW1lKGNvaW5OYW1lKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtjb2luTmFtZX0gaXMgbm90IGEgbGlnaHRuaW5nIGNvaW5gKTtcbiAgfVxuICBjb25zdCBjb2luID0gc3RhdGljcy5jb2lucy5nZXQoY29pbk5hbWUpO1xuICBpZiAoIShjb2luIGluc3RhbmNlb2Ygc3RhdGljcy5MaWdodG5pbmdDb2luKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignY29pbiBpcyBub3QgYSBsaWdodG5pbmcgY29pbicpO1xuICB9XG4gIHJldHVybiBjb2luLm5ldHdvcms7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgdXR4b2xpYiBuZXR3b3JrIGZvciBhIGxpZ2h0bmluZyBjb2luLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXR4b2xpYk5ldHdvcmsoY29pbk5hbWU6IHN0cmluZyk6IHV0eG9saWIuTmV0d29yayB7XG4gIGNvbnN0IG5ldHdvcmtOYW1lID0gZ2V0U3RhdGljc0xpZ2h0bmluZ05ldHdvcmsoY29pbk5hbWUpLnV0eG9saWJOYW1lO1xuICBpZiAoIWlzVmFsaWRMaWdodG5pbmdOZXR3b3JrTmFtZShuZXR3b3JrTmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgbGlnaHRuaW5nIG5ldHdvcmsnKTtcbiAgfVxuICByZXR1cm4gZ2V0TGlnaHRuaW5nTmV0d29yayhuZXR3b3JrTmFtZSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBjb2luIHNwZWNpZmljIGRhdGEgZm9yIGEgbGlnaHRuaW5nIGNvaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBMaWdodG5pbmdDb2luU3BlY2lmaWM8Vj4ob2JqOiB7IGxuYnRjOiBWIH0gfCB7IHRsbmJ0YzogViB9LCBjb2luU3BlY2lmaWNQYXRoOiBzdHJpbmcpOiBWIHtcbiAgaWYgKGNvaW5TcGVjaWZpY1BhdGggIT09ICdsbmJ0YycgJiYgY29pblNwZWNpZmljUGF0aCAhPT0gJ3RsbmJ0YycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgY29pblNwZWNpZmljUGF0aCAke2NvaW5TcGVjaWZpY1BhdGh9IGZvciBsaWdodG5pbmcgY29pbmApO1xuICB9XG4gIGlmIChjb2luU3BlY2lmaWNQYXRoID09PSAnbG5idGMnICYmICdsbmJ0YycgaW4gb2JqKSB7XG4gICAgcmV0dXJuIG9iai5sbmJ0YztcbiAgfVxuICBpZiAoY29pblNwZWNpZmljUGF0aCA9PT0gJ3RsbmJ0YycgJiYgJ3RsbmJ0YycgaW4gb2JqKSB7XG4gICAgcmV0dXJuIG9iai50bG5idGM7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGxpZ2h0bmluZyBjb2luIHNwZWNpZmljJyk7XG59XG5cbi8qKlxuICogQWRkcyBhbiBJUCBjYXZlYXQgdG8gYSBtYWNhcm9vbiBhbmQgcmV0dXJucyB0aGUgbW9kaWZpZWQgbWFjYXJvb24gYXMgYSBCYXNlNjQgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkSVBDYXZlYXRUb01hY2Fyb29uKG1hY2Fyb29uQmFzZTY0OiBzdHJpbmcsIGlwOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYWNhcm9vbiA9IGltcG9ydE1hY2Fyb29uKG1hY2Fyb29uQmFzZTY0KTtcbiAgbWFjYXJvb24uYWRkRmlyc3RQYXJ0eUNhdmVhdChgaXBhZGRyICR7aXB9YCk7XG4gIHJldHVybiBieXRlc1RvQmFzZTY0KG1hY2Fyb29uLmV4cG9ydEJpbmFyeSgpKTtcbn1cblxuZXhwb3J0IGNvbnN0IFBVUlBPU0VfV1JBUFBFRF9QMldLSCA9IDQ5O1xuZXhwb3J0IGNvbnN0IFBVUlBPU0VfUDJXS0ggPSA4NDtcbmV4cG9ydCBjb25zdCBQVVJQT1NFX1AyVFIgPSA4NjtcbmV4cG9ydCBjb25zdCBQVVJQT1NFX0FMTF9PVEhFUlMgPSAxMDE3O1xuXG5leHBvcnQgdHlwZSBFeHRlbmRlZEtleVB1cnBvc2UgPVxuICB8IHR5cGVvZiBQVVJQT1NFX1dSQVBQRURfUDJXS0hcbiAgfCB0eXBlb2YgUFVSUE9TRV9QMldLSFxuICB8IHR5cGVvZiBQVVJQT1NFX1AyVFJcbiAgfCB0eXBlb2YgUFVSUE9TRV9BTExfT1RIRVJTO1xuXG5leHBvcnQgdHlwZSBFeHRlbmRlZEtleUFkZHJlc3NQdXJwb3NlID0gdHlwZW9mIFBVUlBPU0VfV1JBUFBFRF9QMldLSCB8IHR5cGVvZiBQVVJQT1NFX1AyV0tIIHwgdHlwZW9mIFBVUlBPU0VfUDJUUjtcblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBleHRlbmRlZCBwdWJsaWMga2V5ICh4cHViKSB0byB0aGUgYXBwcm9wcmlhdGUgcHJlZml4ICh5cHViLCB2cHViLCBldGMuKSBiYXNlZCBvbiBpdHMgcHVycG9zZSBhbmQgbmV0d29yay5cbiAqL1xuZnVuY3Rpb24gY29udmVydFhwdWJQcmVmaXgoeHB1Yjogc3RyaW5nLCBwdXJwb3NlOiBFeHRlbmRlZEtleVB1cnBvc2UsIGlzTWFpbm5ldDogYm9vbGVhbik6IHN0cmluZyB7XG4gIGlmIChwdXJwb3NlID09PSBQVVJQT1NFX1AyVFIgfHwgcHVycG9zZSA9PT0gUFVSUE9TRV9BTExfT1RIRVJTKSB7XG4gICAgcmV0dXJuIHhwdWI7XG4gIH1cbiAgY29uc3QgZGF0YSA9IGJzNThjaGVjay5kZWNvZGUoeHB1Yik7XG5cbiAgbGV0IHZlcnNpb25CeXRlczogQnVmZmVyO1xuXG4gIHN3aXRjaCAocHVycG9zZSkge1xuICAgIGNhc2UgUFVSUE9TRV9XUkFQUEVEX1AyV0tIOlxuICAgICAgdmVyc2lvbkJ5dGVzID0gaXNNYWlubmV0ID8gQnVmZmVyLmZyb20oWzB4MDQsIDB4OWQsIDB4N2MsIDB4YjJdKSA6IEJ1ZmZlci5mcm9tKFsweDA0LCAweDRhLCAweDUyLCAweDYyXSk7IC8vIHlwdWIvdXB1YiBmb3IgcDJzaC1wMndwa2hcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgUFVSUE9TRV9QMldLSDpcbiAgICAgIHZlcnNpb25CeXRlcyA9IGlzTWFpbm5ldCA/IEJ1ZmZlci5mcm9tKFsweDA0LCAweGIyLCAweDQ3LCAweDQ2XSkgOiBCdWZmZXIuZnJvbShbMHgwNCwgMHg1ZiwgMHgxYywgMHhmNl0pOyAvLyB6cHViL3ZwdWIgZm9yIHAyd3BraFxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgcHVycG9zZScpO1xuICB9XG5cbiAgdmVyc2lvbkJ5dGVzLmNvcHkoZGF0YSwgMCwgMCwgNCk7XG4gIHJldHVybiBiczU4Y2hlY2suZW5jb2RlKGRhdGEpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgcHJlZml4IHJlbGF0ZWQgdG8gcHVycG9zZSBhbmQgbmV0d29yayAoeXB1YiwgdnB1YiwgZXRjLikgdG8gZXh0ZW5kZWQgcHVibGljIGtleSAoeHB1YikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXZlcnRYcHViUHJlZml4KHhwdWI6IHN0cmluZywgcHVycG9zZTogRXh0ZW5kZWRLZXlQdXJwb3NlLCBpc01haW5uZXQ6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAvLyBJZiB0aGUgcHVycG9zZSBpcyBQMlRSIG9yIEFMTF9PVEhFUlMsIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiB0aGUgc3RhbmRhcmQgZm9ybWF0ICh4cHViL3RwdWIpLFxuICAvLyBzbyB3ZSByZXR1cm4gaXQgdW5tb2RpZmllZC4gVGhpcyBpcyB0aGUgc2FtZSBieXBhc3MgY29uZGl0aW9uLlxuICBpZiAocHVycG9zZSA9PT0gUFVSUE9TRV9QMlRSIHx8IHB1cnBvc2UgPT09IFBVUlBPU0VfQUxMX09USEVSUykge1xuICAgIHJldHVybiB4cHViO1xuICB9XG5cbiAgLy8gMS4gRGVjb2RlIHRoZSBleHRlbmRlZCBwdWJsaWMga2V5IHRvIGdldCB0aGUgcmF3IGJ5dGVzXG4gIGNvbnN0IGRhdGEgPSBiczU4Y2hlY2suZGVjb2RlKHhwdWIpO1xuXG4gIGxldCB2ZXJzaW9uQnl0ZXM6IEJ1ZmZlcjtcblxuICAvLyAyLiBEZXRlcm1pbmUgdGhlIHN0YW5kYXJkIHByZWZpeCAoeHB1Yi90cHViKSBiYXNlZCBvbiB0aGUgbmV0d29ya1xuICBzd2l0Y2ggKHB1cnBvc2UpIHtcbiAgICBjYXNlIFBVUlBPU0VfV1JBUFBFRF9QMldLSDpcbiAgICBjYXNlIFBVUlBPU0VfUDJXS0g6XG4gICAgICAvLyBBbGwgc3RhbmRhcmQsIG5vbi1TZWdXaXQtc3BlY2lmaWMga2V5cyB1c2UgdGhlIHNhbWUgcHJlZml4ICh4cHViIGZvciBtYWlubmV0LCB0cHViIGZvciB0ZXN0bmV0KVxuICAgICAgdmVyc2lvbkJ5dGVzID0gaXNNYWlubmV0XG4gICAgICAgID8gQnVmZmVyLmZyb20oWzB4MDQsIDB4ODgsIDB4YjIsIDB4MWVdKSAvLyB4cHViXG4gICAgICAgIDogQnVmZmVyLmZyb20oWzB4MDQsIDB4MzUsIDB4ODcsIDB4Y2ZdKTsgLy8gdHB1YlxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFRoaXMgY2FzZSBzaG91bGQgaWRlYWxseSBub3QgYmUgaGl0IGlmIHRoZSBpbnB1dCBrZXkgaXMgb25lIG9mIHRoZSBjb252ZXJ0ZWQgdHlwZXNcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgcHVycG9zZSBmb3IgcmV2ZXJzYWwnKTtcbiAgfVxuXG4gIC8vIDMuIE92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgcHJlZml4ICh5cHViLCB6cHViLCB1cHViLCBvciB2cHViKVxuICAvLyB3aXRoIHRoZSBzdGFuZGFyZCB4cHViIG9yIHRwdWIgcHJlZml4LlxuICB2ZXJzaW9uQnl0ZXMuY29weShkYXRhLCAwLCAwLCA0KTtcblxuICAvLyA0LiBFbmNvZGUgdGhlIG1vZGlmaWVkIGJ5dGUgZGF0YSBiYWNrIHRvIGEgQmFzZTU4Q2hlY2sgc3RyaW5nXG4gIHJldHVybiBiczU4Y2hlY2suZW5jb2RlKGRhdGEpO1xufVxuXG4vKipcbiAqIERlcml2ZXMgd2F0Y2gtb25seSBhY2NvdW50cyBmcm9tIHRoZSBtYXN0ZXIgSEQgbm9kZSBmb3IgdGhlIGdpdmVuIHB1cnBvc2VzIGFuZCBuZXR3b3JrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlV2F0Y2hPbmx5QWNjb3VudHMoXG4gIG1hc3RlckhETm9kZTogdXR4b2xpYi5CSVAzMkludGVyZmFjZSxcbiAgaXNNYWlubmV0OiBib29sZWFuLFxuICBwYXJhbXM6IHsgb25seUFkZHJlc3NDcmVhdGlvbkFjY291bnRzPzogYm9vbGVhbiB9ID0geyBvbmx5QWRkcmVzc0NyZWF0aW9uQWNjb3VudHM6IGZhbHNlIH1cbik6IFdhdGNoT25seUFjY291bnRbXSB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9saWdodG5pbmduZXR3b3JrL2xuZC9ibG9iL21hc3Rlci9kb2NzL3JlbW90ZS1zaWduaW5nLm1kI3JlcXVpcmVkLWFjY291bnRzXG4gIGlmIChtYXN0ZXJIRE5vZGUuaXNOZXV0ZXJlZCgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtYXN0ZXJIRE5vZGUgbXVzdCBub3QgYmUgbmV1dGVyZWQnKTtcbiAgfVxuICBjb25zdCBwdXJwb3NlcyA9IHBhcmFtcy5vbmx5QWRkcmVzc0NyZWF0aW9uQWNjb3VudHNcbiAgICA/IChbUFVSUE9TRV9XUkFQUEVEX1AyV0tILCBQVVJQT1NFX1AyV0tILCBQVVJQT1NFX1AyVFJdIGFzIGNvbnN0KVxuICAgIDogKFtQVVJQT1NFX1dSQVBQRURfUDJXS0gsIFBVUlBPU0VfUDJXS0gsIFBVUlBPU0VfUDJUUiwgUFVSUE9TRV9BTExfT1RIRVJTXSBhcyBjb25zdCk7XG4gIHJldHVybiBwdXJwb3Nlcy5mbGF0TWFwKChwdXJwb3NlKSA9PiB7XG4gICAgY29uc3QgbWF4QWNjb3VudCA9IHB1cnBvc2UgPT09IFBVUlBPU0VfQUxMX09USEVSUyA/IDI1NSA6IDA7XG4gICAgY29uc3QgY29pblR5cGUgPSBwdXJwb3NlICE9PSBQVVJQT1NFX0FMTF9PVEhFUlMgfHwgaXNNYWlubmV0ID8gMCA6IDE7XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogbWF4QWNjb3VudCArIDEgfSwgKF8sIGFjY291bnQpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBgbS8ke3B1cnBvc2V9Jy8ke2NvaW5UeXBlfScvJHthY2NvdW50fSdgO1xuICAgICAgY29uc3QgZGVyaXZlZE5vZGUgPSBtYXN0ZXJIRE5vZGUuZGVyaXZlUGF0aChwYXRoKTtcblxuICAgICAgLy8gRW5zdXJlIHRoZSBub2RlIGlzIG5ldXRlcmVkIChpLmUuLCBjb252ZXJ0ZWQgdG8gcHVibGljIGtleSBvbmx5KVxuICAgICAgY29uc3QgbmV1dGVyZWROb2RlID0gZGVyaXZlZE5vZGUubmV1dGVyZWQoKTtcbiAgICAgIGNvbnN0IHhwdWIgPSBjb252ZXJ0WHB1YlByZWZpeChuZXV0ZXJlZE5vZGUudG9CYXNlNTgoKSwgcHVycG9zZSwgaXNNYWlubmV0KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHVycG9zZSxcbiAgICAgICAgY29pbl90eXBlOiBjb2luVHlwZSxcbiAgICAgICAgYWNjb3VudCxcbiAgICAgICAgeHB1YixcbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB3YXRjaC1vbmx5IHdhbGxldCBpbml0IGRhdGEgZnJvbSB0aGUgcHJvdmlkZWQgc2lnbmVyIHJvb3Qga2V5IGFuZCBuZXR3b3JrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2F0Y2hPbmx5KHNpZ25lclJvb3RLZXk6IHN0cmluZywgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrKTogV2F0Y2hPbmx5IHtcbiAgY29uc3QgbWFzdGVySEROb2RlID0gdXR4b2xpYi5iaXAzMi5mcm9tQmFzZTU4KHNpZ25lclJvb3RLZXksIG5ldHdvcmspO1xuICBjb25zdCBnZXRDdXJyZW50VW5peFRpbWVzdGFtcCA9ICgpID0+IHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gIH07XG4gIGNvbnN0IG1hc3Rlcl9rZXlfYmlydGhkYXlfdGltZXN0YW1wID0gZ2V0Q3VycmVudFVuaXhUaW1lc3RhbXAoKS50b1N0cmluZygpO1xuICBjb25zdCBtYXN0ZXJfa2V5X2ZpbmdlcnByaW50ID0gbWFzdGVySEROb2RlLmZpbmdlcnByaW50LnRvU3RyaW5nKCdoZXgnKTtcbiAgY29uc3QgYWNjb3VudHMgPSBkZXJpdmVXYXRjaE9ubHlBY2NvdW50cyhtYXN0ZXJIRE5vZGUsIHV0eG9saWIuaXNNYWlubmV0KG5ldHdvcmspKTtcbiAgcmV0dXJuIHsgbWFzdGVyX2tleV9iaXJ0aGRheV90aW1lc3RhbXAsIG1hc3Rlcl9rZXlfZmluZ2VycHJpbnQsIGFjY291bnRzIH07XG59XG5cbi8qKlxuICogRGVyaXZlcyB0aGUgc2hhcmVkIEVsbGlwdGljIEN1cnZlIERpZmZpZS1IZWxsbWFuIChFQ0RIKSBzZWNyZXQgYmV0d2VlbiB0aGUgdXNlcidzIGF1dGggZXh0ZW5kZWQgcHJpdmF0ZSBrZXlcbiAqIGFuZCB0aGUgTGlnaHRuaW5nIHNlcnZpY2UncyBwdWJsaWMga2V5IGZvciBzZWN1cmUgY29tbXVuaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZUxpZ2h0bmluZ1NlcnZpY2VTaGFyZWRTZWNyZXQoY29pbk5hbWU6ICdsbmJ0YycgfCAndGxuYnRjJywgdXNlckF1dGhYcHJ2OiBzdHJpbmcpOiBCdWZmZXIge1xuICBjb25zdCBwdWJsaWNLZXkgPSBCdWZmZXIuZnJvbShnZXRTdGF0aWNzTGlnaHRuaW5nTmV0d29yayhjb2luTmFtZSkubGlnaHRuaW5nU2VydmljZVB1YktleSwgJ2hleCcpO1xuICBjb25zdCB1c2VyQXV0aEhkTm9kZSA9IHV0eG9saWIuYmlwMzIuZnJvbUJhc2U1OCh1c2VyQXV0aFhwcnYpO1xuICByZXR1cm4gc2RrY29yZS5nZXRTaGFyZWRTZWNyZXQodXNlckF1dGhIZE5vZGUsIHB1YmxpY0tleSk7XG59XG5cbi8qKlxuICogRGVyaXZlcyB0aGUgc2hhcmVkIHNlY3JldCBmb3IgdGhlIG1pZGRsZXdhcmUgdXNpbmcgYSBwcml2YXRlIGtleSBhbmQgdGhlIG1pZGRsZXdhcmUncyBwdWJsaWMga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlTWlkZGxld2FyZVNoYXJlZFNlY3JldChjb2luTmFtZTogJ2xuYnRjJyB8ICd0bG5idGMnLCB4cHJ2OiBzdHJpbmcpOiBCdWZmZXIge1xuICBjb25zdCBwdWJsaWNLZXkgPSBCdWZmZXIuZnJvbShnZXRTdGF0aWNzTGlnaHRuaW5nTmV0d29yayhjb2luTmFtZSkubWlkZGxld2FyZVB1YktleSwgJ2hleCcpO1xuICBjb25zdCB1c2VyQXV0aEhkTm9kZSA9IHV0eG9saWIuYmlwMzIuZnJvbUJhc2U1OCh4cHJ2KTtcbiAgcmV0dXJuIHNka2NvcmUuZ2V0U2hhcmVkU2VjcmV0KHVzZXJBdXRoSGROb2RlLCBwdWJsaWNLZXkpO1xufVxuXG4vKipcbiAqIERlcml2ZXMgdGhlIHNoYXJlZCBzZWNyZXQgZm9yIFRBVCBzZXJ2aWNlIHVzaW5nIHRhIHByaXZhdGUga2V5IGFuZCB0aGUgVEFUIHB1YmxpYyBrZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVUYXRTaGFyZWRTZWNyZXQoY29pbk5hbWU6ICdsbmJ0YycgfCAndGxuYnRjJywgeHBydjogc3RyaW5nKTogQnVmZmVyIHtcbiAgY29uc3QgcHVibGljS2V5ID0gQnVmZmVyLmZyb20oZ2V0U3RhdGljc0xpZ2h0bmluZ05ldHdvcmsoY29pbk5hbWUpLnRhdFB1YktleSwgJ2hleCcpO1xuICBjb25zdCB1c2VyQXV0aEhkTm9kZSA9IHV0eG9saWIuYmlwMzIuZnJvbUJhc2U1OCh4cHJ2KTtcbiAgcmV0dXJuIHNka2NvcmUuZ2V0U2hhcmVkU2VjcmV0KHVzZXJBdXRoSGROb2RlLCBwdWJsaWNLZXkpO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgc2VlZCwgY29tcHV0ZSBhIEJJUDMyIGRlcml2YXRpb24gaW5kZXguXG4gKiAwIDw9IGluZGV4IDwgMjE0NzQ4MzY0OCAobGFyZ2VzdCAzMSBiaXQgbnVtYmVyKS4gVGhpcyBuZWVkcyB0byBiZSAyXjMxIC0gMSBzbyB0aGF0IHRoZSBiaXAzMiBsaWJyYXJ5XG4gKiBjYW4gZGVyaXZlIHRoZSBoYXJkZW5lZCBrZXkuXG4gKiBAcGFyYW0gc2VlZCAob3B0aW9uYWwpIElmIG5vdGhpbmcgcHJvdmlkZWQsIHdlIHdpbGwgZ2VuZXJhdGUgb25lIHJhbmRvbWx5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlQmlwMzJEZXJpdmF0aW9uSW5kZXhGcm9tU2VlZChzZWVkPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIChcbiAgICAoQnVmZmVyLmZyb20odXR4b2xpYi5jcnlwdG8uc2hhMjU2KEJ1ZmZlci5mcm9tKHNlZWQgPz8gcmFuZG9tQnl0ZXMoMzIpLnRvU3RyaW5nKCdoZXgnKSwgJ3V0ZjgnKSkpLnJlYWRVaW50MzJCRSgwKSAlXG4gICAgICBNYXRoLnBvdygyLCAzMSkpIC1cbiAgICAxXG4gICk7XG59XG4iXX0=
@@ -0,0 +1,11 @@
1
+ import * as utxolib from '@bitgo-beta/utxo-lib';
2
+ import { Psbt } from '@bitgo-beta/utxo-lib';
3
+ import { WatchOnlyAccount, WithdrawBaseOutputUTXO } from '../codecs';
4
+ import { LightningOnchainRecipient } from '@bitgo/public-types';
5
+ export declare function parsePsbtOutputs(psbt: Psbt, network: utxolib.Network): WithdrawBaseOutputUTXO<bigint>[];
6
+ export declare function verifyChangeAddress(output: WithdrawBaseOutputUTXO<bigint>, accounts: WatchOnlyAccount[], network: utxolib.Network): void;
7
+ /**
8
+ * Validates the funded psbt before creating the signatures for withdraw.
9
+ */
10
+ export declare function validatePsbtForWithdraw(psbtHex: string, network: utxolib.Network, recipients: LightningOnchainRecipient[], accounts: WatchOnlyAccount[]): void;
11
+ //# sourceMappingURL=parseWithdrawPsbt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseWithdrawPsbt.d.ts","sourceRoot":"","sources":["../../../src/lightning/parseWithdrawPsbt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAa,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AA6BhE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,sBAAsB,CAAC,MAAM,CAAC,EAAE,CA8BvG;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,sBAAsB,CAAC,MAAM,CAAC,EACtC,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,IAAI,CAiEN;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,UAAU,EAAE,yBAAyB,EAAE,EACvC,QAAQ,EAAE,gBAAgB,EAAE,GAC3B,IAAI,CAsBN"}