@witnet/sdk 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 (149) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +103 -0
  3. package/dist/package.json +72 -0
  4. package/dist/src/bin/helpers.d.ts +91 -0
  5. package/dist/src/bin/helpers.d.ts.map +1 -0
  6. package/dist/src/bin/helpers.js +816 -0
  7. package/dist/src/index.d.ts +5 -0
  8. package/dist/src/index.d.ts.map +1 -0
  9. package/dist/src/index.js +47 -0
  10. package/dist/src/lib/crypto/account.d.ts +32 -0
  11. package/dist/src/lib/crypto/account.d.ts.map +1 -0
  12. package/dist/src/lib/crypto/account.js +106 -0
  13. package/dist/src/lib/crypto/coinbase.d.ts +10 -0
  14. package/dist/src/lib/crypto/coinbase.d.ts.map +1 -0
  15. package/dist/src/lib/crypto/coinbase.js +28 -0
  16. package/dist/src/lib/crypto/index.d.ts +8 -0
  17. package/dist/src/lib/crypto/index.d.ts.map +1 -0
  18. package/dist/src/lib/crypto/index.js +30 -0
  19. package/dist/src/lib/crypto/interfaces.d.ts +85 -0
  20. package/dist/src/lib/crypto/interfaces.d.ts.map +1 -0
  21. package/dist/src/lib/crypto/interfaces.js +3 -0
  22. package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts +55 -0
  23. package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -0
  24. package/dist/src/lib/crypto/payloads/DataRequestPayload.js +339 -0
  25. package/dist/src/lib/crypto/payloads/StakePayload.d.ts +28 -0
  26. package/dist/src/lib/crypto/payloads/StakePayload.d.ts.map +1 -0
  27. package/dist/src/lib/crypto/payloads/StakePayload.js +142 -0
  28. package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts +36 -0
  29. package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts.map +1 -0
  30. package/dist/src/lib/crypto/payloads/UnstakePayload.js +154 -0
  31. package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts +25 -0
  32. package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts.map +1 -0
  33. package/dist/src/lib/crypto/payloads/ValueTransferPayload.js +128 -0
  34. package/dist/src/lib/crypto/payloads.d.ts +57 -0
  35. package/dist/src/lib/crypto/payloads.d.ts.map +1 -0
  36. package/dist/src/lib/crypto/payloads.js +170 -0
  37. package/dist/src/lib/crypto/signer.d.ts +33 -0
  38. package/dist/src/lib/crypto/signer.d.ts.map +1 -0
  39. package/dist/src/lib/crypto/signer.js +194 -0
  40. package/dist/src/lib/crypto/transmitters/DataRequests.d.ts +15 -0
  41. package/dist/src/lib/crypto/transmitters/DataRequests.d.ts.map +1 -0
  42. package/dist/src/lib/crypto/transmitters/DataRequests.js +23 -0
  43. package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts +12 -0
  44. package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts.map +1 -0
  45. package/dist/src/lib/crypto/transmitters/StakeDeposits.js +17 -0
  46. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts +18 -0
  47. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts.map +1 -0
  48. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.js +53 -0
  49. package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts +11 -0
  50. package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts.map +1 -0
  51. package/dist/src/lib/crypto/transmitters/ValueTransfers.js +16 -0
  52. package/dist/src/lib/crypto/transmitters.d.ts +47 -0
  53. package/dist/src/lib/crypto/transmitters.d.ts.map +1 -0
  54. package/dist/src/lib/crypto/transmitters.js +416 -0
  55. package/dist/src/lib/crypto/types.d.ts +161 -0
  56. package/dist/src/lib/crypto/types.d.ts.map +1 -0
  57. package/dist/src/lib/crypto/types.js +273 -0
  58. package/dist/src/lib/crypto/utils.d.ts +21 -0
  59. package/dist/src/lib/crypto/utils.d.ts.map +1 -0
  60. package/dist/src/lib/crypto/utils.js +156 -0
  61. package/dist/src/lib/crypto/wallet.d.ts +120 -0
  62. package/dist/src/lib/crypto/wallet.d.ts.map +1 -0
  63. package/dist/src/lib/crypto/wallet.js +258 -0
  64. package/dist/src/lib/index.d.ts +5 -0
  65. package/dist/src/lib/index.d.ts.map +1 -0
  66. package/dist/src/lib/index.js +44 -0
  67. package/dist/src/lib/radon/ccdr/eth.d.ts +160 -0
  68. package/dist/src/lib/radon/ccdr/eth.d.ts.map +1 -0
  69. package/dist/src/lib/radon/ccdr/eth.js +272 -0
  70. package/dist/src/lib/radon/ccdr/index.d.ts +14 -0
  71. package/dist/src/lib/radon/ccdr/index.d.ts.map +1 -0
  72. package/dist/src/lib/radon/ccdr/index.js +39 -0
  73. package/dist/src/lib/radon/ccdr/wit.d.ts +23 -0
  74. package/dist/src/lib/radon/ccdr/wit.d.ts.map +1 -0
  75. package/dist/src/lib/radon/ccdr/wit.js +35 -0
  76. package/dist/src/lib/radon/filters.d.ts +14 -0
  77. package/dist/src/lib/radon/filters.d.ts.map +1 -0
  78. package/dist/src/lib/radon/filters.js +45 -0
  79. package/dist/src/lib/radon/index.d.ts +296 -0
  80. package/dist/src/lib/radon/index.d.ts.map +1 -0
  81. package/dist/src/lib/radon/index.js +707 -0
  82. package/dist/src/lib/radon/reducers.d.ts +29 -0
  83. package/dist/src/lib/radon/reducers.d.ts.map +1 -0
  84. package/dist/src/lib/radon/reducers.js +66 -0
  85. package/dist/src/lib/radon/types.d.ts +521 -0
  86. package/dist/src/lib/radon/types.d.ts.map +1 -0
  87. package/dist/src/lib/radon/types.js +936 -0
  88. package/dist/src/lib/radon/utils.d.ts +53 -0
  89. package/dist/src/lib/radon/utils.d.ts.map +1 -0
  90. package/dist/src/lib/radon/utils.js +153 -0
  91. package/dist/src/lib/rpc/index.d.ts +3 -0
  92. package/dist/src/lib/rpc/index.d.ts.map +1 -0
  93. package/dist/src/lib/rpc/index.js +19 -0
  94. package/dist/src/lib/rpc/nodes.d.ts +40 -0
  95. package/dist/src/lib/rpc/nodes.d.ts.map +1 -0
  96. package/dist/src/lib/rpc/nodes.js +293 -0
  97. package/dist/src/lib/rpc/provider.d.ts +88 -0
  98. package/dist/src/lib/rpc/provider.d.ts.map +1 -0
  99. package/dist/src/lib/rpc/provider.js +336 -0
  100. package/dist/src/lib/rpc/reporter.d.ts +18 -0
  101. package/dist/src/lib/rpc/reporter.d.ts.map +1 -0
  102. package/dist/src/lib/rpc/reporter.js +30 -0
  103. package/dist/src/lib/rpc/types.d.ts +409 -0
  104. package/dist/src/lib/rpc/types.d.ts.map +1 -0
  105. package/dist/src/lib/rpc/types.js +81 -0
  106. package/dist/src/lib/types.d.ts +18 -0
  107. package/dist/src/lib/types.d.ts.map +1 -0
  108. package/dist/src/lib/types.js +7 -0
  109. package/dist/src/lib/utils.d.ts +13 -0
  110. package/dist/src/lib/utils.d.ts.map +1 -0
  111. package/dist/src/lib/utils.js +97 -0
  112. package/dist/witnet/assets/index.d.ts +30 -0
  113. package/dist/witnet/assets/index.d.ts.map +1 -0
  114. package/dist/witnet/assets/index.js +6 -0
  115. package/dist/witnet/assets/modals/index.d.ts +18 -0
  116. package/dist/witnet/assets/modals/index.d.ts.map +1 -0
  117. package/dist/witnet/assets/modals/index.js +21 -0
  118. package/dist/witnet/assets/modals/web3/eth.d.ts +5 -0
  119. package/dist/witnet/assets/modals/web3/eth.d.ts.map +1 -0
  120. package/dist/witnet/assets/modals/web3/eth.js +26 -0
  121. package/dist/witnet/assets/modals/web3/wit.d.ts +4 -0
  122. package/dist/witnet/assets/modals/web3/wit.d.ts.map +1 -0
  123. package/dist/witnet/assets/modals/web3/wit.js +20 -0
  124. package/dist/witnet/assets/requests.d.ts +11 -0
  125. package/dist/witnet/assets/requests.d.ts.map +1 -0
  126. package/dist/witnet/assets/requests.js +88 -0
  127. package/dist/witnet/witnet.proto.json +1325 -0
  128. package/package.json +72 -0
  129. package/src/bin/cli/history.js +31 -0
  130. package/src/bin/cli/inspect.js +359 -0
  131. package/src/bin/cli/network.js +592 -0
  132. package/src/bin/cli/nodes.js +364 -0
  133. package/src/bin/cli/radon.js +814 -0
  134. package/src/bin/cli/wallet.js +1000 -0
  135. package/src/bin/helpers.js +829 -0
  136. package/src/bin/postinstall.js +9 -0
  137. package/src/bin/toolkit.js +294 -0
  138. package/witnet/assets/_index.js +8 -0
  139. package/witnet/assets/_requests.js +25 -0
  140. package/witnet/assets/_sources.js +36 -0
  141. package/witnet/assets/_templates.js +36 -0
  142. package/witnet/assets/index.js +4 -0
  143. package/witnet/assets/modals/index.js +25 -0
  144. package/witnet/assets/modals/web3/btc.js +0 -0
  145. package/witnet/assets/modals/web3/eth.js +29 -0
  146. package/witnet/assets/modals/web3/sol.js +0 -0
  147. package/witnet/assets/modals/web3/wit.js +23 -0
  148. package/witnet/assets/requests.js +94 -0
  149. package/witnet/witnet.proto.json +1325 -0
@@ -0,0 +1,161 @@
1
+ import { Balance, Epoch, Hash, HexString, UtxoMetadata } from "../types";
2
+ export declare class Coins {
3
+ protected coins: bigint;
4
+ static fromBalance(balance: Balance): Coins;
5
+ static fromNanowits(nanowits: bigint): Coins;
6
+ static fromPedros(pedros: bigint): Coins;
7
+ static fromWits(wits: number): Coins;
8
+ static zero(): Coins;
9
+ constructor(pedros: bigint);
10
+ get pedros(): bigint;
11
+ get nanowits(): bigint;
12
+ get wits(): number;
13
+ toString(decimals?: number): string;
14
+ }
15
+ export type KeyPath = Array<number>;
16
+ export type KeyedSignature = {
17
+ signature: {
18
+ Secp256k1: {
19
+ der: Array<number>;
20
+ };
21
+ };
22
+ public_key: {
23
+ bytes: Array<number>;
24
+ compressed: number;
25
+ };
26
+ };
27
+ export type PublicKeyHashString = HexString;
28
+ interface Key {
29
+ bytes: Uint8Array;
30
+ }
31
+ export interface PrivateKey extends Key {
32
+ type: "private";
33
+ }
34
+ export interface PublicKey extends Key {
35
+ type: "public";
36
+ }
37
+ export type TransactionCallback = (receipt: TransactionReceipt, error?: any) => any;
38
+ export type TransactionParams = {
39
+ deadline?: Epoch;
40
+ fees?: TransactionPriority | Coins;
41
+ };
42
+ export declare enum TransactionPriority {
43
+ Stinky = "stinky",
44
+ Low = "low",
45
+ Medium = "medium",
46
+ High = "high",
47
+ Opulent = "opulent"
48
+ }
49
+ export type TransactionReceipt = {
50
+ authorization?: HexString;
51
+ blockEpoch?: Epoch;
52
+ blockHash?: Hash;
53
+ blockMiner?: PublicKeyHashString;
54
+ blockTimestamp?: number;
55
+ confirmations?: number;
56
+ change?: Coins;
57
+ droHash?: Hash;
58
+ error?: Error;
59
+ fees: Coins;
60
+ from?: Array<PublicKeyHashString> | PublicKeyHashString;
61
+ hash: Hash;
62
+ outputLock?: number;
63
+ radArgs?: any;
64
+ radHash?: HexString;
65
+ recipients?: Array<[PublicKeyHashString, Coins]>;
66
+ status: string;
67
+ timestamp: number;
68
+ type: string;
69
+ tx?: any;
70
+ validator?: PublicKeyHashString;
71
+ value?: Coins;
72
+ weight: number;
73
+ withdrawer?: PublicKeyHashString;
74
+ witnesses?: number | Record<PublicKeyHashString, Coins>;
75
+ };
76
+ export type TransactionStatus = "signed" | "pending" | "relayed" | "removed" | "mined" | "confirmed" | "finalized";
77
+ export type Transmission = {
78
+ bytecode?: Uint8Array;
79
+ hash?: Hash;
80
+ message: any;
81
+ };
82
+ export type Utxo = UtxoMetadata & {
83
+ signer: PublicKeyHashString;
84
+ };
85
+ export type UtxoCacheInfo = {
86
+ expendable: bigint;
87
+ size: number;
88
+ timelock: number;
89
+ };
90
+ export type UtxoPointer = {
91
+ transaction_id: Hash;
92
+ output_index: number;
93
+ };
94
+ export declare enum UtxoSelectionStrategy {
95
+ BigFirst = "big-first",
96
+ Random = "random",
97
+ SlimFit = "slim-fit",
98
+ SmallFirst = "small-first"
99
+ }
100
+ export declare class PublicKey implements Key {
101
+ readonly compressed: number;
102
+ readonly bytes: Uint8Array;
103
+ static fromProtobuf(protobuf: {
104
+ compressed: number;
105
+ bytes: Array<number>;
106
+ }): PublicKey;
107
+ static fromUint8Array(uint8Array: Uint8Array): PublicKey;
108
+ static recoverFrom(recoverable: any, msg: Uint8Array): PublicKey;
109
+ constructor(compressed: number, bytes: Uint8Array);
110
+ equals(pubKey: PublicKey): boolean;
111
+ hash(): PublicKeyHash;
112
+ toString(): string;
113
+ toUint8Array(): Uint8Array;
114
+ }
115
+ export declare class PublicKeyHash {
116
+ static fromHash(hash: Uint8Array): PublicKeyHash;
117
+ static fromHexString(hash: HexString): PublicKeyHash;
118
+ static fromPublicKey(pk: PublicKey): PublicKeyHash;
119
+ static fromBech32(pkh: string): PublicKeyHash;
120
+ protected words: number[];
121
+ constructor(words: number[]);
122
+ toBech32(network?: string): string;
123
+ toBytes20(): Uint8Array;
124
+ toBytes32(): Uint8Array;
125
+ toHexString(): string;
126
+ }
127
+ export declare class Signature {
128
+ static fromHexString(hex: string): Signature;
129
+ readonly bytes: Uint8Array;
130
+ constructor(bytes: Uint8Array);
131
+ toHexString(): string;
132
+ }
133
+ export declare class RecoverableSignature extends Signature {
134
+ static from(recoverable: any, msg: Uint8Array): RecoverableSignature;
135
+ static fromKeyedSignature(ks: KeyedSignature, msg: Uint8Array): RecoverableSignature;
136
+ readonly message: Uint8Array;
137
+ readonly pubKey: PublicKey;
138
+ readonly recoveryId: number;
139
+ constructor(pubKey: PublicKey, bytes: Uint8Array, msg: Uint8Array);
140
+ toHexString(): string;
141
+ toKeyedSignature(): any;
142
+ toProtobuf(): any;
143
+ }
144
+ declare abstract class TransactionError extends Error {
145
+ readonly receipt: TransactionReceipt;
146
+ constructor(receipt: TransactionReceipt, message?: string);
147
+ }
148
+ export declare class MempoolError extends TransactionError {
149
+ constructor(receipt: TransactionReceipt, message?: string);
150
+ }
151
+ export declare class TimeoutError extends TransactionError {
152
+ readonly msecs: number;
153
+ constructor(msecs: number, receipt: TransactionReceipt, message?: string);
154
+ }
155
+ export declare class TransmissionError extends Error {
156
+ readonly error?: any;
157
+ readonly inFlight: Transmission;
158
+ constructor(inFlight: Transmission, error?: any);
159
+ }
160
+ export {};
161
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/crypto/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,273 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TransmissionError = exports.TimeoutError = exports.MempoolError = exports.RecoverableSignature = exports.Signature = exports.PublicKeyHash = exports.PublicKey = exports.UtxoSelectionStrategy = exports.TransactionPriority = exports.Coins = void 0;
4
+ const secp256k1 = require('secp256k1');
5
+ const bech32_1 = require("bech32");
6
+ const helpers_1 = require("../../bin/helpers");
7
+ const utils_1 = require("./utils");
8
+ class Coins {
9
+ static fromBalance(balance) {
10
+ return Coins.fromPedros(balance.locked
11
+ + balance.staked
12
+ + balance.unlocked);
13
+ }
14
+ static fromNanowits(nanowits) {
15
+ return new Coins(nanowits);
16
+ }
17
+ static fromPedros(pedros) {
18
+ return new Coins(pedros);
19
+ }
20
+ static fromWits(wits) {
21
+ if (wits > Number.MAX_SAFE_INTEGER) {
22
+ throw new TypeError(`${this.constructor.name}: internal error: too many wits: ${wits} > ${Number.MAX_SAFE_INTEGER}`);
23
+ }
24
+ return new Coins(BigInt(Math.floor(wits)) * 10n ** 9n
25
+ + BigInt(Math.floor((wits - Math.floor(wits)) * 1000000000)));
26
+ }
27
+ static zero() {
28
+ return new Coins(0n);
29
+ }
30
+ constructor(pedros) {
31
+ this.coins = pedros;
32
+ }
33
+ get pedros() {
34
+ return this.coins;
35
+ }
36
+ get nanowits() {
37
+ return this.coins;
38
+ }
39
+ get wits() {
40
+ const quotient = BigInt(this.coins) / 1000000000n;
41
+ if (Number(quotient) > Number.MAX_SAFE_INTEGER) {
42
+ throw new TypeError(`${this.constructor.name}: internal error: too many coins: ${quotient.toString()} > ${Number.MAX_SAFE_INTEGER}`);
43
+ }
44
+ const rest = Number(BigInt(this.coins) - quotient * 1000000000n) / 1000000000;
45
+ // console.log("wits() =>", this.coins.toString(), quotient.toString(), rest, Number(quotient) + rest)
46
+ return Number(quotient) + rest;
47
+ }
48
+ toString(decimals = 9) {
49
+ return (0, helpers_1.whole_wits)(this.coins, decimals);
50
+ }
51
+ }
52
+ exports.Coins = Coins;
53
+ var TransactionPriority;
54
+ (function (TransactionPriority) {
55
+ TransactionPriority["Stinky"] = "stinky";
56
+ TransactionPriority["Low"] = "low";
57
+ TransactionPriority["Medium"] = "medium";
58
+ TransactionPriority["High"] = "high";
59
+ TransactionPriority["Opulent"] = "opulent";
60
+ })(TransactionPriority || (exports.TransactionPriority = TransactionPriority = {}));
61
+ var UtxoSelectionStrategy;
62
+ (function (UtxoSelectionStrategy) {
63
+ UtxoSelectionStrategy["BigFirst"] = "big-first";
64
+ UtxoSelectionStrategy["Random"] = "random";
65
+ UtxoSelectionStrategy["SlimFit"] = "slim-fit";
66
+ UtxoSelectionStrategy["SmallFirst"] = "small-first";
67
+ })(UtxoSelectionStrategy || (exports.UtxoSelectionStrategy = UtxoSelectionStrategy = {}));
68
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
69
+ /// EXPORTED CLASSES
70
+ /// ===================================================================================================================
71
+ class PublicKey {
72
+ static fromProtobuf(protobuf) {
73
+ return new PublicKey(protobuf.compressed, Uint8Array.from(protobuf.bytes));
74
+ }
75
+ static fromUint8Array(uint8Array) {
76
+ return new PublicKey(uint8Array[0], uint8Array.slice(1));
77
+ }
78
+ static recoverFrom(recoverable, msg) {
79
+ let bytes;
80
+ if ((0, helpers_1.isHexString)(recoverable)) {
81
+ bytes = (0, helpers_1.fromHexString)(recoverable);
82
+ }
83
+ else if (recoverable instanceof Buffer) {
84
+ bytes = Uint8Array.from(recoverable.buffer);
85
+ }
86
+ else if (recoverable instanceof Uint8Array) {
87
+ bytes = recoverable;
88
+ }
89
+ else {
90
+ throw new TypeError(`PublicKey: unsupported recoverable signature format: ${recoverable}`);
91
+ }
92
+ if (bytes.length !== 65) {
93
+ throw new TypeError(`PublicKey: expected recoverable signature with length 65: ${(0, helpers_1.toHexString)(bytes)}`);
94
+ }
95
+ const [recoveryId, signature] = [bytes[0], bytes.slice(1)];
96
+ return PublicKey.fromUint8Array(secp256k1.ecdsaRecover(signature, recoveryId, msg));
97
+ }
98
+ constructor(compressed, bytes) {
99
+ this.compressed = compressed;
100
+ this.bytes = bytes;
101
+ }
102
+ equals(pubKey) {
103
+ return pubKey.compressed === this.compressed && matchingUint8Arrays(pubKey.bytes, pubKey.bytes);
104
+ }
105
+ hash() {
106
+ return PublicKeyHash.fromPublicKey(this);
107
+ }
108
+ toString() {
109
+ return (0, helpers_1.toHexString)([this.compressed, ...this.bytes]);
110
+ }
111
+ toUint8Array() {
112
+ return Uint8Array.from([this.compressed, ...this.bytes]);
113
+ }
114
+ }
115
+ exports.PublicKey = PublicKey;
116
+ ;
117
+ /// ===================================================================================================================
118
+ class PublicKeyHash {
119
+ static fromHash(hash) {
120
+ return new PublicKeyHash(bech32_1.bech32.toWords(hash));
121
+ }
122
+ static fromHexString(hash) {
123
+ return PublicKeyHash.fromHash((0, helpers_1.fromHexString)(hash));
124
+ }
125
+ static fromPublicKey(pk) {
126
+ return PublicKeyHash.fromHash((0, utils_1.sha256)(Buffer.from([pk.compressed, ...pk.bytes])).subarray(0, 20));
127
+ }
128
+ static fromBech32(pkh) {
129
+ try {
130
+ pkh = pkh.toLowerCase();
131
+ if (pkh.startsWith('wit')) {
132
+ return new PublicKeyHash(bech32_1.bech32.decode(pkh, 66).words);
133
+ }
134
+ else if (pkh.startsWith('twit')) {
135
+ return new PublicKeyHash(bech32_1.bech32.decode(pkh, 67).words);
136
+ }
137
+ else {
138
+ throw new TypeError(`PublicKeyHash: invalid bech32 string: ${pkh}`);
139
+ }
140
+ }
141
+ catch {
142
+ throw new TypeError(`PublicKeyHash: invalid bech32 string: ${pkh}`);
143
+ }
144
+ }
145
+ constructor(words) {
146
+ this.words = words;
147
+ }
148
+ toBech32(network = "mainnet") {
149
+ return network === "mainnet" ? bech32_1.bech32.encode('wit', this.words, 66) : bech32_1.bech32.encode('twit', this.words, 67);
150
+ }
151
+ toBytes20() {
152
+ return Uint8Array.from(bech32_1.bech32.fromWords(this.words).slice(0, 20));
153
+ }
154
+ toBytes32() {
155
+ return Uint8Array.from([
156
+ ...bech32_1.bech32.fromWords(this.words).slice(0, 20),
157
+ ...new Array(12).fill(0),
158
+ ]);
159
+ }
160
+ toHexString() {
161
+ return (0, helpers_1.toHexString)(this.toBytes20());
162
+ }
163
+ }
164
+ exports.PublicKeyHash = PublicKeyHash;
165
+ /// ===================================================================================================================
166
+ class Signature {
167
+ static fromHexString(hex) {
168
+ return new Signature((0, helpers_1.fromHexString)(hex));
169
+ }
170
+ constructor(bytes) {
171
+ this.bytes = bytes;
172
+ }
173
+ toHexString() {
174
+ return (0, helpers_1.toHexString)(this.bytes);
175
+ }
176
+ }
177
+ exports.Signature = Signature;
178
+ /// ===================================================================================================================
179
+ class RecoverableSignature extends Signature {
180
+ static from(recoverable, msg) {
181
+ let bytes;
182
+ if ((0, helpers_1.isHexString)(recoverable)) {
183
+ bytes = (0, helpers_1.fromHexString)(recoverable).slice(1);
184
+ }
185
+ else if (recoverable instanceof Buffer) {
186
+ bytes = Uint8Array.from(recoverable.buffer).slice(1);
187
+ }
188
+ else if (recoverable instanceof Uint8Array) {
189
+ bytes = recoverable.slice(1);
190
+ }
191
+ else {
192
+ throw new TypeError(`RecoverableSignature: unsupported recoverable signature format: ${recoverable}`);
193
+ }
194
+ if (bytes.length !== 64) {
195
+ throw new TypeError(`RecoverableSignatre: expected recoverable signature with length 65: ${(0, helpers_1.toHexString)(bytes)}`);
196
+ }
197
+ return new RecoverableSignature(PublicKey.recoverFrom(recoverable, msg), bytes, msg);
198
+ }
199
+ static fromKeyedSignature(ks, msg) {
200
+ return new RecoverableSignature(PublicKey.fromProtobuf(ks.public_key), secp256k1.signatureImport(Uint8Array.from(ks.signature.Secp256k1.der)), msg);
201
+ }
202
+ constructor(pubKey, bytes, msg) {
203
+ super(bytes);
204
+ const pubKeyRaw = pubKey.toUint8Array();
205
+ let recoveryId;
206
+ for (recoveryId = 0; recoveryId < 4; recoveryId++) {
207
+ let recovered;
208
+ try {
209
+ recovered = secp256k1.ecdsaRecover(bytes, recoveryId, msg);
210
+ if (matchingUint8Arrays(recovered, pubKeyRaw))
211
+ break;
212
+ }
213
+ catch { }
214
+ }
215
+ this.message = msg;
216
+ this.pubKey = pubKey;
217
+ this.recoveryId = recoveryId;
218
+ }
219
+ toHexString() {
220
+ return (0, helpers_1.toHexString)([this.recoveryId, ...this.bytes]);
221
+ }
222
+ toKeyedSignature() {
223
+ return {
224
+ signature: { Secp256k1: { der: Array.from(secp256k1.signatureExport(this.bytes)) } },
225
+ public_key: {
226
+ bytes: Array.from(this.pubKey.bytes),
227
+ compressed: this.pubKey.compressed,
228
+ }
229
+ };
230
+ }
231
+ toProtobuf() {
232
+ return {
233
+ signature: { Secp256k1: { der: Array.from(secp256k1.signatureExport(this.bytes)) } },
234
+ publicKey: { publicKey: Array.from([this.pubKey.compressed, ...this.pubKey.bytes]) },
235
+ };
236
+ }
237
+ }
238
+ exports.RecoverableSignature = RecoverableSignature;
239
+ /// ===================================================================================================================
240
+ class TransactionError extends Error {
241
+ constructor(receipt, message) {
242
+ super(message);
243
+ this.receipt = receipt;
244
+ }
245
+ }
246
+ class MempoolError extends TransactionError {
247
+ constructor(receipt, message) {
248
+ super(receipt, message);
249
+ }
250
+ }
251
+ exports.MempoolError = MempoolError;
252
+ class TimeoutError extends TransactionError {
253
+ constructor(msecs, receipt, message) {
254
+ super(receipt, message);
255
+ this.msecs = msecs;
256
+ }
257
+ }
258
+ exports.TimeoutError = TimeoutError;
259
+ class TransmissionError extends Error {
260
+ constructor(inFlight, error) {
261
+ super(JSON.stringify(error));
262
+ delete error?.stack;
263
+ this.error = error;
264
+ this.inFlight = inFlight;
265
+ }
266
+ }
267
+ exports.TransmissionError = TransmissionError;
268
+ /// -------------------------------------------------------------------------------------------------------------------
269
+ /// --- Internal functions
270
+ function matchingUint8Arrays(a, b) {
271
+ return a.length === b.length && a.every((value, index) => value === b[index]);
272
+ }
273
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NyeXB0by90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7QUFDdEMsbUNBQStCO0FBRy9CLCtDQUF1RjtBQUN2RixtQ0FBZ0M7QUFFaEMsTUFBYSxLQUFLO0lBRVAsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFnQjtRQUN0QyxPQUFPLEtBQUssQ0FBQyxVQUFVLENBQ25CLE9BQU8sQ0FBQyxNQUFNO2NBQ1IsT0FBTyxDQUFDLE1BQU07Y0FDZCxPQUFPLENBQUMsUUFBUSxDQUN6QixDQUFBO0lBQ0wsQ0FBQztJQUNNLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBZ0I7UUFDdkMsT0FBTyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUM5QixDQUFDO0lBQ00sTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFjO1FBQ25DLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDNUIsQ0FBQztJQUNNLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBWTtRQUMvQixJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksU0FBUyxDQUNmLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLG9DQUFvQyxJQUFJLE1BQU0sTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQ2xHLENBQUE7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLEtBQUssQ0FDWixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFO2NBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FB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QU8sR0FBRyxPQUFPLENBQUE7SUFDMUIsQ0FBQztDQUNKO0FBQ0QsTUFBYSxZQUFhLFNBQVEsZ0JBQWdCO0lBQzlDLFlBQVksT0FBMkIsRUFBRSxPQUFnQjtRQUNyRCxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzNCLENBQUM7Q0FDSjtBQUpELG9DQUlDO0FBRUQsTUFBYSxZQUFhLFNBQVEsZ0JBQWdCO0lBRTlDLFlBQWEsS0FBYSxFQUFFLE9BQTJCLEVBQUUsT0FBZ0I7UUFDckUsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtJQUN0QixDQUFDO0NBQ0o7QUFORCxvQ0FNQztBQUdELE1BQWEsaUJBQWtCLFNBQVEsS0FBSztJQUd4QyxZQUFZLFFBQXNCLEVBQUUsS0FBVztRQUMzQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQzVCLE9BQU8sS0FBSyxFQUFFLEtBQUssQ0FBQTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtJQUM1QixDQUFDO0NBQ0o7QUFURCw4Q0FTQztBQUdELHVIQUF1SDtBQUN2SCwyQkFBMkI7QUFFM0IsU0FBUyxtQkFBbUIsQ0FBQyxDQUFhLEVBQUUsQ0FBYTtJQUNyRCxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0FBQ2pGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBzZWNwMjU2azEgPSByZXF1aXJlKCdzZWNwMjU2azEnKVxyXG5pbXBvcnQgeyBiZWNoMzIgfSBmcm9tICdiZWNoMzInXHJcbmltcG9ydCB7IEJhbGFuY2UsIEVwb2NoLCBIYXNoLCBIZXhTdHJpbmcsIFV0eG9NZXRhZGF0YSB9IGZyb20gXCIuLi90eXBlc1wiXHJcblxyXG5pbXBvcnQgeyBmcm9tSGV4U3RyaW5nLCBpc0hleFN0cmluZywgdG9IZXhTdHJpbmcsIHdob2xlX3dpdHMgfSBmcm9tIFwiLi4vLi4vYmluL2hlbHBlcnNcIlxyXG5pbXBvcnQgeyBzaGEyNTYgfSBmcm9tIFwiLi91dGlsc1wiXHJcblxyXG5leHBvcnQgY2xhc3MgQ29pbnMge1xyXG4gICAgcHJvdGVjdGVkIGNvaW5zOiBiaWdpbnQ7XHJcbiAgICBwdWJsaWMgc3RhdGljIGZyb21CYWxhbmNlKGJhbGFuY2U6IEJhbGFuY2UpOiBDb2lucyB7XHJcbiAgICAgICAgcmV0dXJuIENvaW5zLmZyb21QZWRyb3MoXHJcbiAgICAgICAgICAgIGJhbGFuY2UubG9ja2VkXHJcbiAgICAgICAgICAgICAgICArIGJhbGFuY2Uuc3Rha2VkXHJcbiAgICAgICAgICAgICAgICArIGJhbGFuY2UudW5sb2NrZWRcclxuICAgICAgICApXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGZyb21OYW5vd2l0cyhuYW5vd2l0czogYmlnaW50KTogQ29pbnMge1xyXG4gICAgICAgIHJldHVybiBuZXcgQ29pbnMobmFub3dpdHMpXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGZyb21QZWRyb3MocGVkcm9zOiBiaWdpbnQpOiBDb2lucyB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBDb2lucyhwZWRyb3MpXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGZyb21XaXRzKHdpdHM6IG51bWJlcik6IENvaW5zIHtcclxuICAgICAgICBpZiAod2l0cyA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnRlcm5hbCBlcnJvcjogdG9vIG1hbnkgd2l0czogJHt3aXRzfSA+ICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgQ29pbnMoXHJcbiAgICAgICAgICAgIEJpZ0ludChNYXRoLmZsb29yKHdpdHMpKSAqIDEwbiAqKiA5blxyXG4gICAgICAgICAgICAgICAgKyBCaWdJbnQoTWF0aC5mbG9vcigod2l0cyAtIE1hdGguZmxvb3Iod2l0cykpICogMTAwMDAwMDAwMCkpXHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyB6ZXJvKCk6IENvaW5zIHtcclxuICAgICAgICByZXR1cm4gbmV3IENvaW5zKDBuKVxyXG4gICAgfVxyXG4gICAgY29uc3RydWN0b3IgKHBlZHJvczogYmlnaW50KSB7XHJcbiAgICAgICAgdGhpcy5jb2lucyA9IHBlZHJvc1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBwZWRyb3MoKTogYmlnaW50IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb2luc1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBuYW5vd2l0cygpOiBiaWdpbnQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvaW5zXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHdpdHMoKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBxdW90aWVudCA9IEJpZ0ludCh0aGlzLmNvaW5zKSAvIDEwMDAwMDAwMDBuXHJcbiAgICAgICAgaWYgKE51bWJlcihxdW90aWVudCkgPiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxyXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW50ZXJuYWwgZXJyb3I6IHRvbyBtYW55IGNvaW5zOiAke3F1b3RpZW50LnRvU3RyaW5nKCl9ID4gJHtOdW1iZXIuTUFYX1NBRkVfSU5URUdFUn1gXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzdCA9IE51bWJlcihCaWdJbnQodGhpcy5jb2lucykgLSBxdW90aWVudCAqIDEwMDAwMDAwMDBuKSAvIDEwMDAwMDAwMDBcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIndpdHMoKSA9PlwiLCB0aGlzLmNvaW5zLnRvU3RyaW5nKCksIHF1b3RpZW50LnRvU3RyaW5nKCksIHJlc3QsIE51bWJlcihxdW90aWVudCkgKyByZXN0KVxyXG4gICAgICAgIHJldHVybiBOdW1iZXIocXVvdGllbnQpICsgcmVzdFxyXG4gICAgfVxyXG4gICAgcHVibGljIHRvU3RyaW5nKGRlY2ltYWxzID0gOSk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHdob2xlX3dpdHModGhpcy5jb2lucywgZGVjaW1hbHMpXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEtleVBhdGggPSBBcnJheTxudW1iZXI+XHJcblxyXG5leHBvcnQgdHlwZSBLZXllZFNpZ25hdHVyZSA9IHtcclxuICAgIHNpZ25hdHVyZTogeyBTZWNwMjU2azE6IHsgZGVyOiBBcnJheTxudW1iZXI+IH19LFxyXG4gICAgcHVibGljX2tleToge1xyXG4gICAgICAgIGJ5dGVzOiBBcnJheTxudW1iZXI+O1xyXG4gICAgICAgIGNvbXByZXNzZWQ6IG51bWJlcixcclxuICAgIH0sXHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBQdWJsaWNLZXlIYXNoU3RyaW5nID0gSGV4U3RyaW5nXHJcblxyXG5pbnRlcmZhY2UgS2V5IHtcclxuICAgIGJ5dGVzOiBVaW50OEFycmF5O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFByaXZhdGVLZXkgZXh0ZW5kcyBLZXkge1xyXG4gICAgdHlwZTogXCJwcml2YXRlXCI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5IGV4dGVuZHMgS2V5IHtcclxuICAgIHR5cGU6IFwicHVibGljXCI7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFRyYW5zYWN0aW9uQ2FsbGJhY2sgPSAocmVjZWlwdDogVHJhbnNhY3Rpb25SZWNlaXB0LCBlcnJvcj86IGFueSkgPT4gYW55XHJcblxyXG5leHBvcnQgdHlwZSBUcmFuc2FjdGlvblBhcmFtcyA9IHtcclxuICAgIGRlYWRsaW5lPzogRXBvY2gsXHJcbiAgICBmZWVzPzogVHJhbnNhY3Rpb25Qcmlvcml0eSB8IENvaW5zLFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBUcmFuc2FjdGlvblByaW9yaXR5IHtcclxuICAgIFN0aW5reSA9IFwic3Rpbmt5XCIsXHJcbiAgICBMb3cgPSBcImxvd1wiLFxyXG4gICAgTWVkaXVtID0gXCJtZWRpdW1cIixcclxuICAgIEhpZ2ggPSBcImhpZ2hcIixcclxuICAgIE9wdWxlbnQgPSBcIm9wdWxlbnRcIixcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb25SZWNlaXB0ID0ge1xyXG4gICAgYXV0aG9yaXphdGlvbj86IEhleFN0cmluZztcclxuICAgIGJsb2NrRXBvY2g/OiBFcG9jaCxcclxuICAgIGJsb2NrSGFzaD86IEhhc2gsXHJcbiAgICBibG9ja01pbmVyPzogUHVibGljS2V5SGFzaFN0cmluZyxcclxuICAgIGJsb2NrVGltZXN0YW1wPzogbnVtYmVyLFxyXG4gICAgY29uZmlybWF0aW9ucz86IG51bWJlcjtcclxuICAgIGNoYW5nZT86IENvaW5zO1xyXG4gICAgZHJvSGFzaD86IEhhc2g7XHJcbiAgICBlcnJvcj86IEVycm9yLFxyXG4gICAgZmVlczogQ29pbnM7XHJcbiAgICBmcm9tPzogQXJyYXk8UHVibGljS2V5SGFzaFN0cmluZz4gfCBQdWJsaWNLZXlIYXNoU3RyaW5nO1xyXG4gICAgaGFzaDogSGFzaDtcclxuICAgIG91dHB1dExvY2s/OiBudW1iZXI7XHJcbiAgICByYWRBcmdzPzogYW55O1xyXG4gICAgcmFkSGFzaD86IEhleFN0cmluZztcclxuICAgIHJlY2lwaWVudHM/OiBBcnJheTxbUHVibGljS2V5SGFzaFN0cmluZywgQ29pbnNdPjtcclxuICAgIHN0YXR1czogc3RyaW5nO1xyXG4gICAgdGltZXN0YW1wOiBudW1iZXI7XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICB0eD86IGFueTtcclxuICAgIHZhbGlkYXRvcj86IFB1YmxpY0tleUhhc2hTdHJpbmc7XHJcbiAgICB2YWx1ZT86IENvaW5zO1xyXG4gICAgd2VpZ2h0OiBudW1iZXI7XHJcbiAgICB3aXRoZHJhd2VyPzogUHVibGljS2V5SGFzaFN0cmluZztcclxuICAgIHdpdG5lc3Nlcz86IG51bWJlciB8IFJlY29yZDxQdWJsaWNLZXlIYXNoU3RyaW5nLCBDb2lucz47XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFRyYW5zYWN0aW9uU3RhdHVzID0gXCJzaWduZWRcIiB8IFwicGVuZGluZ1wiIHwgXCJyZWxheWVkXCIgfCBcInJlbW92ZWRcIiB8IFwibWluZWRcIiB8IFwiY29uZmlybWVkXCIgfCBcImZpbmFsaXplZFwiO1xyXG5cclxuZXhwb3J0IHR5cGUgVHJhbnNtaXNzaW9uID0ge1xyXG4gICAgYnl0ZWNvZGU/OiBVaW50OEFycmF5LFxyXG4gICAgaGFzaD86IEhhc2g7XHJcbiAgICBtZXNzYWdlOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFV0eG8gPSBVdHhvTWV0YWRhdGEgJiB7IHNpZ25lcjogUHVibGljS2V5SGFzaFN0cmluZyB9XHJcblxyXG5leHBvcnQgdHlwZSBVdHhvQ2FjaGVJbmZvID0ge1xyXG4gICAgLy8gdG90YWwgYW1vdW50IG9mIGV4cGVuZGFibGUgZnVuZHMgd2l0aCBjdXJyZW50bHkgY2FjaGVkIFVUWE9zXHJcbiAgICBleHBlbmRhYmxlOiBiaWdpbnQsIFxyXG4gICAgLy8gbnVtYmVyIG9mIGNhY2hlZCBVVFhPc1xyXG4gICAgc2l6ZTogbnVtYmVyLCBcclxuICAgIC8vIGVhcmxpZXN0IG9mIGFsbCB0aW1lbG9ja3MgaW4gdGhlIGNhY2jDqVxyXG4gICAgdGltZWxvY2s6IG51bWJlcixcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVXR4b1BvaW50ZXIgPSB7XHJcbiAgICAvLyB0cmFuc2FjdGlvbiBpZGVudGlmaWVyXHJcbiAgICB0cmFuc2FjdGlvbl9pZDogSGFzaDtcclxuICAgIC8vIG91dHB1dCBpbmRleCB3aXRoaW4gcmVmZXJyZWQgdHJhbnNhY3Rpb25cclxuICAgIG91dHB1dF9pbmRleDogbnVtYmVyO1xyXG59O1xyXG5cclxuZXhwb3J0IGVudW0gVXR4b1NlbGVjdGlvblN0cmF0ZWd5IHtcclxuICAgIEJpZ0ZpcnN0ID0gXCJiaWctZmlyc3RcIixcclxuICAgIFJhbmRvbSA9IFwicmFuZG9tXCIsXHJcbiAgICBTbGltRml0ID0gXCJzbGltLWZpdFwiLFxyXG4gICAgU21hbGxGaXJzdCA9IFwic21hbGwtZmlyc3RcIixcclxufVxyXG5cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbi8vLyBFWFBPUlRFRCBDTEFTU0VTIFxyXG5cclxuLy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuZXhwb3J0IGNsYXNzIFB1YmxpY0tleSBpbXBsZW1lbnRzIEtleSB7XHJcbiAgICBcclxuICAgIHB1YmxpYyByZWFkb25seSBjb21wcmVzc2VkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgYnl0ZXM6IFVpbnQ4QXJyYXk7XHJcblxyXG4gICAgc3RhdGljIGZyb21Qcm90b2J1Zihwcm90b2J1ZjogeyBjb21wcmVzc2VkOiBudW1iZXIsIGJ5dGVzOiBBcnJheTxudW1iZXI+IH0pOiBQdWJsaWNLZXkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHVibGljS2V5KHByb3RvYnVmLmNvbXByZXNzZWQsIFVpbnQ4QXJyYXkuZnJvbShwcm90b2J1Zi5ieXRlcykpXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21VaW50OEFycmF5KHVpbnQ4QXJyYXk6IFVpbnQ4QXJyYXkpOiBQdWJsaWNLZXkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHVibGljS2V5KFxyXG4gICAgICAgICAgICB1aW50OEFycmF5WzBdLFxyXG4gICAgICAgICAgICB1aW50OEFycmF5LnNsaWNlKDEpLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHJlY292ZXJGcm9tKHJlY292ZXJhYmxlOiBhbnksIG1zZzogVWludDhBcnJheSk6IFB1YmxpY0tleSB7XHJcbiAgICAgICAgbGV0IGJ5dGVzXHJcbiAgICAgICAgaWYgKGlzSGV4U3RyaW5nKHJlY292ZXJhYmxlKSkge1xyXG4gICAgICAgICAgICBieXRlcyA9IGZyb21IZXhTdHJpbmcocmVjb3ZlcmFibGUpXHJcbiAgICAgICAgfSBlbHNlIGlmIChyZWNvdmVyYWJsZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xyXG4gICAgICAgICAgICBieXRlcyA9IFVpbnQ4QXJyYXkuZnJvbShyZWNvdmVyYWJsZS5idWZmZXIpXHJcbiAgICAgICAgfSBlbHNlIGlmIChyZWNvdmVyYWJsZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcclxuICAgICAgICAgICAgYnl0ZXMgPSByZWNvdmVyYWJsZVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFB1YmxpY0tleTogdW5zdXBwb3J0ZWQgcmVjb3ZlcmFibGUgc2lnbmF0dXJlIGZvcm1hdDogJHtyZWNvdmVyYWJsZX1gKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYnl0ZXMubGVuZ3RoICE9PSA2NSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBQdWJsaWNLZXk6IGV4cGVjdGVkIHJlY292ZXJhYmxlIHNpZ25hdHVyZSB3aXRoIGxlbmd0aCA2NTogJHt0b0hleFN0cmluZyhieXRlcyl9YClcclxuICAgICAgICB9IFxyXG4gICAgICAgIGNvbnN0IFsgcmVjb3ZlcnlJZCwgc2lnbmF0dXJlIF0gPSBbIGJ5dGVzWzBdLCBieXRlcy5zbGljZSgxKSBdXHJcbiAgICAgICAgcmV0dXJuIFB1YmxpY0tleS5mcm9tVWludDhBcnJheShzZWNwMjU2azEuZWNkc2FSZWNvdmVyKHNpZ25hdHVyZSwgcmVjb3ZlcnlJZCwgbXNnKSlcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihjb21wcmVzc2VkOiBudW1iZXIsIGJ5dGVzOiBVaW50OEFycmF5KSB7XHJcbiAgICAgICAgdGhpcy5jb21wcmVzc2VkID0gY29tcHJlc3NlZFxyXG4gICAgICAgIHRoaXMuYnl0ZXMgPSBieXRlc1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlcXVhbHMocHViS2V5OiBQdWJsaWNLZXkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcHViS2V5LmNvbXByZXNzZWQgPT09IHRoaXMuY29tcHJlc3NlZCAmJiBtYXRjaGluZ1VpbnQ4QXJyYXlzKHB1YktleS5ieXRlcywgcHViS2V5LmJ5dGVzKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYXNoKCk6IFB1YmxpY0tleUhhc2gge1xyXG4gICAgICAgIHJldHVybiBQdWJsaWNLZXlIYXNoLmZyb21QdWJsaWNLZXkodGhpcylcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdG9IZXhTdHJpbmcoW3RoaXMuY29tcHJlc3NlZCwgLi4udGhpcy5ieXRlc10pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvVWludDhBcnJheSgpOiBVaW50OEFycmF5IHtcclxuICAgICAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKFt0aGlzLmNvbXByZXNzZWQsIC4uLnRoaXMuYnl0ZXNdKVxyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbmV4cG9ydCBjbGFzcyBQdWJsaWNLZXlIYXNoIHtcclxuXHJcbiAgICBzdGF0aWMgZnJvbUhhc2goaGFzaDogVWludDhBcnJheSk6IFB1YmxpY0tleUhhc2gge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHVibGljS2V5SGFzaChiZWNoMzIudG9Xb3JkcyhoYXNoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21IZXhTdHJpbmcoaGFzaDogSGV4U3RyaW5nKTogUHVibGljS2V5SGFzaCB7XHJcbiAgICAgICAgcmV0dXJuIFB1YmxpY0tleUhhc2guZnJvbUhhc2goZnJvbUhleFN0cmluZyhoYXNoKSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGZyb21QdWJsaWNLZXkocGs6IFB1YmxpY0tleSk6IFB1YmxpY0tleUhhc2gge1xyXG4gICAgICAgIHJldHVybiBQdWJsaWNLZXlIYXNoLmZyb21IYXNoKFxyXG4gICAgICAgICAgICBzaGEyNTYoXHJcbiAgICAgICAgICAgICAgICBCdWZmZXIuZnJvbShbcGsuY29tcHJlc3NlZCwgLi4ucGsuYnl0ZXNdKVxyXG4gICAgICAgICAgICApLnN1YmFycmF5KDAsIDIwKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBmcm9tQmVjaDMyKHBraDogc3RyaW5nKTogUHVibGljS2V5SGFzaCB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcGtoID0gcGtoLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgaWYgKHBraC5zdGFydHNXaXRoKCd3aXQnKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQdWJsaWNLZXlIYXNoKGJlY2gzMi5kZWNvZGUocGtoLCA2Nikud29yZHMpXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGtoLnN0YXJ0c1dpdGgoJ3R3aXQnKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQdWJsaWNLZXlIYXNoKGJlY2gzMi5kZWNvZGUocGtoLCA2Nykud29yZHMpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBQdWJsaWNLZXlIYXNoOiBpbnZhbGlkIGJlY2gzMiBzdHJpbmc6ICR7cGtofWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFB1YmxpY0tleUhhc2g6IGludmFsaWQgYmVjaDMyIHN0cmluZzogJHtwa2h9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB3b3JkczogbnVtYmVyW107XHJcbiAgICBcclxuICAgIGNvbnN0cnVjdG9yKHdvcmRzOiBudW1iZXJbXSkge1xyXG4gICAgICAgIHRoaXMud29yZHMgPSB3b3Jkc1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b0JlY2gzMihuZXR3b3JrID0gXCJtYWlubmV0XCIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBuZXR3b3JrID09PSBcIm1haW5uZXRcIiA/IGJlY2gzMi5lbmNvZGUoJ3dpdCcsIHRoaXMud29yZHMsIDY2KSA6IGJlY2gzMi5lbmNvZGUoJ3R3aXQnLCB0aGlzLndvcmRzLCA2Nyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvQnl0ZXMyMCgpOiBVaW50OEFycmF5IHtcclxuICAgICAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKGJlY2gzMi5mcm9tV29yZHModGhpcy53b3Jkcykuc2xpY2UoMCwgMjApKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b0J5dGVzMzIoKTogVWludDhBcnJheSB7XHJcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShbXHJcbiAgICAgICAgICAgIC4uLmJlY2gzMi5mcm9tV29yZHModGhpcy53b3Jkcykuc2xpY2UoMCwgMjApLFxyXG4gICAgICAgICAgICAuLi5uZXcgQXJyYXkoMTIpLmZpbGwoMCksXHJcbiAgICAgICAgXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvSGV4U3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRvSGV4U3RyaW5nKHRoaXMudG9CeXRlczIwKCkpXHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4vLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5leHBvcnQgY2xhc3MgU2lnbmF0dXJlIHtcclxuXHJcbiAgICBzdGF0aWMgZnJvbUhleFN0cmluZyhoZXg6IHN0cmluZyk6IFNpZ25hdHVyZSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTaWduYXR1cmUoZnJvbUhleFN0cmluZyhoZXgpKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWFkb25seSBieXRlczogVWludDhBcnJheTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciAoYnl0ZXM6IFVpbnQ4QXJyYXkpIHtcclxuICAgICAgICB0aGlzLmJ5dGVzID0gYnl0ZXNcclxuICAgIH1cclxuICAgIFxyXG4gICAgcHVibGljIHRvSGV4U3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRvSGV4U3RyaW5nKHRoaXMuYnl0ZXMpXHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4vLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5leHBvcnQgY2xhc3MgUmVjb3ZlcmFibGVTaWduYXR1cmUgZXh0ZW5kcyBTaWduYXR1cmUge1xyXG5cclxuICAgIHN0YXRpYyBmcm9tKHJlY292ZXJhYmxlOiBhbnksIG1zZzogVWludDhBcnJheSk6IFJlY292ZXJhYmxlU2lnbmF0dXJlIHtcclxuICAgICAgICBsZXQgYnl0ZXNcclxuICAgICAgICBpZiAoaXNIZXhTdHJpbmcocmVjb3ZlcmFibGUpKSB7XHJcbiAgICAgICAgICAgIGJ5dGVzID0gZnJvbUhleFN0cmluZyhyZWNvdmVyYWJsZSkuc2xpY2UoMSlcclxuICAgICAgICB9IGVsc2UgaWYgKHJlY292ZXJhYmxlIGluc3RhbmNlb2YgQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIGJ5dGVzID0gVWludDhBcnJheS5mcm9tKHJlY292ZXJhYmxlLmJ1ZmZlcikuc2xpY2UoMSlcclxuICAgICAgICB9IGVsc2UgaWYgKHJlY292ZXJhYmxlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xyXG4gICAgICAgICAgICBieXRlcyA9IHJlY292ZXJhYmxlLnNsaWNlKDEpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgUmVjb3ZlcmFibGVTaWduYXR1cmU6IHVuc3VwcG9ydGVkIHJlY292ZXJhYmxlIHNpZ25hdHVyZSBmb3JtYXQ6ICR7cmVjb3ZlcmFibGV9YClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGJ5dGVzLmxlbmd0aCAhPT0gNjQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgUmVjb3ZlcmFibGVTaWduYXRyZTogZXhwZWN0ZWQgcmVjb3ZlcmFibGUgc2lnbmF0dXJlIHdpdGggbGVuZ3RoIDY1OiAke3RvSGV4U3RyaW5nKGJ5dGVzKX1gKVxyXG4gICAgICAgIH0gXHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZWNvdmVyYWJsZVNpZ25hdHVyZShQdWJsaWNLZXkucmVjb3ZlckZyb20ocmVjb3ZlcmFibGUsIG1zZyksIGJ5dGVzLCBtc2cpXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21LZXllZFNpZ25hdHVyZShrczogS2V5ZWRTaWduYXR1cmUsIG1zZzogVWludDhBcnJheSk6IFJlY292ZXJhYmxlU2lnbmF0dXJlIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlY292ZXJhYmxlU2lnbmF0dXJlKFxyXG4gICAgICAgICAgICBQdWJsaWNLZXkuZnJvbVByb3RvYnVmKGtzLnB1YmxpY19rZXkpLFxyXG4gICAgICAgICAgICBzZWNwMjU2azEuc2lnbmF0dXJlSW1wb3J0KFVpbnQ4QXJyYXkuZnJvbShrcy5zaWduYXR1cmUuU2VjcDI1NmsxLmRlcikpLFxyXG4gICAgICAgICAgICBtc2dcclxuICAgICAgICApICAgXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlYWRvbmx5IG1lc3NhZ2U6IFVpbnQ4QXJyYXlcclxuICAgIHB1YmxpYyByZWFkb25seSBwdWJLZXk6IFB1YmxpY0tleVxyXG4gICAgcHVibGljIHJlYWRvbmx5IHJlY292ZXJ5SWQ6IG51bWJlclxyXG4gICAgXHJcbiAgICBjb25zdHJ1Y3RvciAocHViS2V5OiBQdWJsaWNLZXksIGJ5dGVzOiBVaW50OEFycmF5LCBtc2c6IFVpbnQ4QXJyYXkpIHtcclxuICAgICAgICBzdXBlcihieXRlcylcclxuICAgICAgICBjb25zdCBwdWJLZXlSYXcgPSBwdWJLZXkudG9VaW50OEFycmF5KClcclxuICAgICAgICBsZXQgcmVjb3ZlcnlJZDogbnVtYmVyO1xyXG4gICAgICAgIGZvciAocmVjb3ZlcnlJZCA9IDA7IHJlY292ZXJ5SWQgPCA0OyByZWNvdmVyeUlkICsrKSB7XHJcbiAgICAgICAgICAgIGxldCByZWNvdmVyZWQgXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgcmVjb3ZlcmVkID0gc2VjcDI1NmsxLmVjZHNhUmVjb3ZlcihieXRlcywgcmVjb3ZlcnlJZCwgbXNnKVxyXG4gICAgICAgICAgICAgIGlmIChtYXRjaGluZ1VpbnQ4QXJyYXlzKHJlY292ZXJlZCwgcHViS2V5UmF3KSkgYnJlYWs7XHJcbiAgICAgICAgICAgIH0gY2F0Y2gge31cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbXNnXHJcbiAgICAgICAgdGhpcy5wdWJLZXkgPSBwdWJLZXlcclxuICAgICAgICB0aGlzLnJlY292ZXJ5SWQgPSByZWNvdmVyeUlkXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvSGV4U3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRvSGV4U3RyaW5nKFt0aGlzLnJlY292ZXJ5SWQsIC4uLnRoaXMuYnl0ZXNdKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b0tleWVkU2lnbmF0dXJlKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc2lnbmF0dXJlOiB7IFNlY3AyNTZrMTogeyBkZXI6IEFycmF5LmZyb20oc2VjcDI1NmsxLnNpZ25hdHVyZUV4cG9ydCh0aGlzLmJ5dGVzKSkgfX0sXHJcbiAgICAgICAgICAgIHB1YmxpY19rZXk6IHtcclxuICAgICAgICAgICAgICAgIGJ5dGVzOiBBcnJheS5mcm9tKHRoaXMucHViS2V5LmJ5dGVzKSxcclxuICAgICAgICAgICAgICAgIGNvbXByZXNzZWQ6IHRoaXMucHViS2V5LmNvbXByZXNzZWQsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvUHJvdG9idWYoKTogYW55IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBzaWduYXR1cmU6IHsgU2VjcDI1NmsxOiB7IGRlcjogQXJyYXkuZnJvbShzZWNwMjU2azEuc2lnbmF0dXJlRXhwb3J0KHRoaXMuYnl0ZXMpKSB9fSxcclxuICAgICAgICAgICAgcHVibGljS2V5OiB7IHB1YmxpY0tleTogQXJyYXkuZnJvbShbIHRoaXMucHViS2V5LmNvbXByZXNzZWQsIC4uLnRoaXMucHViS2V5LmJ5dGVzIF0pIH0sXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5cclxuLy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbmFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICByZWFkb25seSByZWNlaXB0OiBUcmFuc2FjdGlvblJlY2VpcHRcclxuICAgIGNvbnN0cnVjdG9yKHJlY2VpcHQ6IFRyYW5zYWN0aW9uUmVjZWlwdCwgbWVzc2FnZT86IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpXHJcbiAgICAgICAgdGhpcy5yZWNlaXB0ID0gcmVjZWlwdFxyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBNZW1wb29sRXJyb3IgZXh0ZW5kcyBUcmFuc2FjdGlvbkVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHJlY2VpcHQ6IFRyYW5zYWN0aW9uUmVjZWlwdCwgbWVzc2FnZT86IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKHJlY2VpcHQsIG1lc3NhZ2UpXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBUcmFuc2FjdGlvbkVycm9yIHtcclxuICAgIHJlYWRvbmx5IG1zZWNzOiBudW1iZXI7XHJcbiAgICBjb25zdHJ1Y3RvciAobXNlY3M6IG51bWJlciwgcmVjZWlwdDogVHJhbnNhY3Rpb25SZWNlaXB0LCBtZXNzYWdlPzogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIocmVjZWlwdCwgbWVzc2FnZSlcclxuICAgICAgICB0aGlzLm1zZWNzID0gbXNlY3NcclxuICAgIH1cclxufVxyXG4gICAgXHJcblxyXG5leHBvcnQgY2xhc3MgVHJhbnNtaXNzaW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICByZWFkb25seSBlcnJvcj86IGFueTtcclxuICAgIHJlYWRvbmx5IGluRmxpZ2h0OiBUcmFuc21pc3Npb247XHJcbiAgICBjb25zdHJ1Y3RvcihpbkZsaWdodDogVHJhbnNtaXNzaW9uLCBlcnJvcj86IGFueSkge1xyXG4gICAgICAgIHN1cGVyKEpTT04uc3RyaW5naWZ5KGVycm9yKSlcclxuICAgICAgICBkZWxldGUgZXJyb3I/LnN0YWNrXHJcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yXHJcbiAgICAgICAgdGhpcy5pbkZsaWdodCA9IGluRmxpZ2h0XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4vLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLy8gLS0tIEludGVybmFsIGZ1bmN0aW9ucyBcclxuXHJcbmZ1bmN0aW9uIG1hdGNoaW5nVWludDhBcnJheXMoYTogVWludDhBcnJheSwgYjogVWludDhBcnJheSkge1xyXG4gICAgcmV0dXJuIGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJiBhLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IHZhbHVlID09PSBiW2luZGV4XSlcclxufVxyXG4iXX0=
@@ -0,0 +1,21 @@
1
+ import { Balance } from '../types';
2
+ import { Coins, Utxo, UtxoSelectionStrategy } from './types';
3
+ export { bech32 } from 'bech32';
4
+ export { PrivateKey, PublicKey, PublicKeyHash, KeyedSignature, RecoverableSignature, Signature } from "./types";
5
+ export declare const BigMath: {
6
+ max(value: bigint, ...values: bigint[]): bigint;
7
+ };
8
+ export declare function decipherXprv(slip32: string, passwd: string): string;
9
+ export declare const parseXprv: (slip32: string) => {
10
+ chainCode: Uint8Array;
11
+ keyPath: Array<number>;
12
+ privateKey: Uint8Array;
13
+ };
14
+ export declare function selectUtxos(specs: {
15
+ utxos: Array<Utxo>;
16
+ value?: Coins;
17
+ strategy?: UtxoSelectionStrategy;
18
+ }): Array<Utxo>;
19
+ export declare function sha256(buffer: any): Buffer<ArrayBufferLike>;
20
+ export declare function totalCoins(balance: Balance): Coins;
21
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/lib/crypto/utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAClC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAE/G,eAAO,MAAM,OAAO;eACL,MAAM,aAAa,MAAM,EAAE,GAAG,MAAM;CAKlD,CAAA;AAqBD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAcnE;AAED,eAAO,MAAM,SAAS,WAAY,MAAM,KAAG;IACvC,SAAS,EAAE,UAAU,CAAC;IACtB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,UAAU,EAAE,UAAU,CAAC;CAyD1B,CAAC;AAEF,wBAAgB,WAAW,CAAC,KAAK,EAAE;IAC/B,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CACpC,GAAG,KAAK,CAAC,IAAI,CAAC,CA6Cd;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,GAAG,2BAIjC;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,CAMlD"}