@ecency/hive-tx 7.1.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 (214) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +206 -0
  3. package/dist/browser/hive-tx.min.js +3 -0
  4. package/dist/browser/hive-tx.min.js.LICENSE.txt +5 -0
  5. package/dist/browser/hive-tx.min.js.map +1 -0
  6. package/dist/cjs/Transaction.d.ts +71 -0
  7. package/dist/cjs/Transaction.d.ts.map +1 -0
  8. package/dist/cjs/Transaction.js +199 -0
  9. package/dist/cjs/Transaction.js.map +1 -0
  10. package/dist/cjs/config.d.ts +37 -0
  11. package/dist/cjs/config.d.ts.map +1 -0
  12. package/dist/cjs/config.js +54 -0
  13. package/dist/cjs/config.js.map +1 -0
  14. package/dist/cjs/helpers/Asset.d.ts +21 -0
  15. package/dist/cjs/helpers/Asset.d.ts.map +1 -0
  16. package/dist/cjs/helpers/Asset.js +74 -0
  17. package/dist/cjs/helpers/Asset.js.map +1 -0
  18. package/dist/cjs/helpers/ByteBuffer.d.ts +75 -0
  19. package/dist/cjs/helpers/ByteBuffer.d.ts.map +1 -0
  20. package/dist/cjs/helpers/ByteBuffer.js +555 -0
  21. package/dist/cjs/helpers/ByteBuffer.js.map +1 -0
  22. package/dist/cjs/helpers/HexBuffer.d.ts +10 -0
  23. package/dist/cjs/helpers/HexBuffer.d.ts.map +1 -0
  24. package/dist/cjs/helpers/HexBuffer.js +33 -0
  25. package/dist/cjs/helpers/HexBuffer.js.map +1 -0
  26. package/dist/cjs/helpers/PrivateKey.d.ts +114 -0
  27. package/dist/cjs/helpers/PrivateKey.d.ts.map +1 -0
  28. package/dist/cjs/helpers/PrivateKey.js +212 -0
  29. package/dist/cjs/helpers/PrivateKey.js.map +1 -0
  30. package/dist/cjs/helpers/PublicKey.d.ts +47 -0
  31. package/dist/cjs/helpers/PublicKey.d.ts.map +1 -0
  32. package/dist/cjs/helpers/PublicKey.js +97 -0
  33. package/dist/cjs/helpers/PublicKey.js.map +1 -0
  34. package/dist/cjs/helpers/Signature.d.ts +38 -0
  35. package/dist/cjs/helpers/Signature.d.ts.map +1 -0
  36. package/dist/cjs/helpers/Signature.js +85 -0
  37. package/dist/cjs/helpers/Signature.js.map +1 -0
  38. package/dist/cjs/helpers/aes.d.ts +15 -0
  39. package/dist/cjs/helpers/aes.d.ts.map +1 -0
  40. package/dist/cjs/helpers/aes.js +87 -0
  41. package/dist/cjs/helpers/aes.js.map +1 -0
  42. package/dist/cjs/helpers/call.d.ts +119 -0
  43. package/dist/cjs/helpers/call.d.ts.map +1 -0
  44. package/dist/cjs/helpers/call.js +498 -0
  45. package/dist/cjs/helpers/call.js.map +1 -0
  46. package/dist/cjs/helpers/deserializer.d.ts +4 -0
  47. package/dist/cjs/helpers/deserializer.d.ts.map +1 -0
  48. package/dist/cjs/helpers/deserializer.js +58 -0
  49. package/dist/cjs/helpers/deserializer.js.map +1 -0
  50. package/dist/cjs/helpers/memo.d.ts +36 -0
  51. package/dist/cjs/helpers/memo.d.ts.map +1 -0
  52. package/dist/cjs/helpers/memo.js +167 -0
  53. package/dist/cjs/helpers/memo.js.map +1 -0
  54. package/dist/cjs/helpers/serializer.d.ts +14 -0
  55. package/dist/cjs/helpers/serializer.d.ts.map +1 -0
  56. package/dist/cjs/helpers/serializer.js +639 -0
  57. package/dist/cjs/helpers/serializer.js.map +1 -0
  58. package/dist/cjs/helpers/sleep.d.ts +2 -0
  59. package/dist/cjs/helpers/sleep.d.ts.map +1 -0
  60. package/dist/cjs/helpers/sleep.js +8 -0
  61. package/dist/cjs/helpers/sleep.js.map +1 -0
  62. package/dist/cjs/helpers/utils.d.ts +122 -0
  63. package/dist/cjs/helpers/utils.d.ts.map +1 -0
  64. package/dist/cjs/helpers/utils.js +202 -0
  65. package/dist/cjs/helpers/utils.js.map +1 -0
  66. package/dist/cjs/index.d.ts +10 -0
  67. package/dist/cjs/index.d.ts.map +1 -0
  68. package/dist/cjs/index.js +60 -0
  69. package/dist/cjs/index.js.map +1 -0
  70. package/dist/cjs/type_generators/types/balance.d.ts +1096 -0
  71. package/dist/cjs/type_generators/types/balance.d.ts.map +1 -0
  72. package/dist/cjs/type_generators/types/balance.js +3 -0
  73. package/dist/cjs/type_generators/types/balance.js.map +1 -0
  74. package/dist/cjs/type_generators/types/hafah.d.ts +2154 -0
  75. package/dist/cjs/type_generators/types/hafah.d.ts.map +1 -0
  76. package/dist/cjs/type_generators/types/hafah.js +3 -0
  77. package/dist/cjs/type_generators/types/hafah.js.map +1 -0
  78. package/dist/cjs/type_generators/types/hafbe.d.ts +2121 -0
  79. package/dist/cjs/type_generators/types/hafbe.d.ts.map +1 -0
  80. package/dist/cjs/type_generators/types/hafbe.js +3 -0
  81. package/dist/cjs/type_generators/types/hafbe.js.map +1 -0
  82. package/dist/cjs/type_generators/types/hafsql.d.ts +2439 -0
  83. package/dist/cjs/type_generators/types/hafsql.d.ts.map +1 -0
  84. package/dist/cjs/type_generators/types/hafsql.js +3 -0
  85. package/dist/cjs/type_generators/types/hafsql.js.map +1 -0
  86. package/dist/cjs/type_generators/types/hivemind.d.ts +202 -0
  87. package/dist/cjs/type_generators/types/hivemind.d.ts.map +1 -0
  88. package/dist/cjs/type_generators/types/hivemind.js +3 -0
  89. package/dist/cjs/type_generators/types/hivemind.js.map +1 -0
  90. package/dist/cjs/type_generators/types/hivesense.d.ts +448 -0
  91. package/dist/cjs/type_generators/types/hivesense.d.ts.map +1 -0
  92. package/dist/cjs/type_generators/types/hivesense.js +3 -0
  93. package/dist/cjs/type_generators/types/hivesense.js.map +1 -0
  94. package/dist/cjs/type_generators/types/nft-tracker.d.ts +348 -0
  95. package/dist/cjs/type_generators/types/nft-tracker.d.ts.map +1 -0
  96. package/dist/cjs/type_generators/types/nft-tracker.js +3 -0
  97. package/dist/cjs/type_generators/types/nft-tracker.js.map +1 -0
  98. package/dist/cjs/type_generators/types/reputation.d.ts +182 -0
  99. package/dist/cjs/type_generators/types/reputation.d.ts.map +1 -0
  100. package/dist/cjs/type_generators/types/reputation.js +3 -0
  101. package/dist/cjs/type_generators/types/reputation.js.map +1 -0
  102. package/dist/cjs/type_generators/types/status.d.ts +139 -0
  103. package/dist/cjs/type_generators/types/status.d.ts.map +1 -0
  104. package/dist/cjs/type_generators/types/status.js +3 -0
  105. package/dist/cjs/type_generators/types/status.js.map +1 -0
  106. package/dist/cjs/types.d.ts +415 -0
  107. package/dist/cjs/types.d.ts.map +1 -0
  108. package/dist/cjs/types.js +3 -0
  109. package/dist/cjs/types.js.map +1 -0
  110. package/dist/esm/Transaction.d.ts +71 -0
  111. package/dist/esm/Transaction.d.ts.map +1 -0
  112. package/dist/esm/Transaction.js +195 -0
  113. package/dist/esm/Transaction.js.map +1 -0
  114. package/dist/esm/config.d.ts +37 -0
  115. package/dist/esm/config.d.ts.map +1 -0
  116. package/dist/esm/config.js +51 -0
  117. package/dist/esm/config.js.map +1 -0
  118. package/dist/esm/helpers/Asset.d.ts +21 -0
  119. package/dist/esm/helpers/Asset.d.ts.map +1 -0
  120. package/dist/esm/helpers/Asset.js +70 -0
  121. package/dist/esm/helpers/Asset.js.map +1 -0
  122. package/dist/esm/helpers/ByteBuffer.d.ts +75 -0
  123. package/dist/esm/helpers/ByteBuffer.d.ts.map +1 -0
  124. package/dist/esm/helpers/ByteBuffer.js +551 -0
  125. package/dist/esm/helpers/ByteBuffer.js.map +1 -0
  126. package/dist/esm/helpers/HexBuffer.d.ts +10 -0
  127. package/dist/esm/helpers/HexBuffer.d.ts.map +1 -0
  128. package/dist/esm/helpers/HexBuffer.js +29 -0
  129. package/dist/esm/helpers/HexBuffer.js.map +1 -0
  130. package/dist/esm/helpers/PrivateKey.d.ts +114 -0
  131. package/dist/esm/helpers/PrivateKey.d.ts.map +1 -0
  132. package/dist/esm/helpers/PrivateKey.js +205 -0
  133. package/dist/esm/helpers/PrivateKey.js.map +1 -0
  134. package/dist/esm/helpers/PublicKey.d.ts +47 -0
  135. package/dist/esm/helpers/PublicKey.d.ts.map +1 -0
  136. package/dist/esm/helpers/PublicKey.js +90 -0
  137. package/dist/esm/helpers/PublicKey.js.map +1 -0
  138. package/dist/esm/helpers/Signature.d.ts +38 -0
  139. package/dist/esm/helpers/Signature.d.ts.map +1 -0
  140. package/dist/esm/helpers/Signature.js +81 -0
  141. package/dist/esm/helpers/Signature.js.map +1 -0
  142. package/dist/esm/helpers/aes.d.ts +15 -0
  143. package/dist/esm/helpers/aes.d.ts.map +1 -0
  144. package/dist/esm/helpers/aes.js +81 -0
  145. package/dist/esm/helpers/aes.js.map +1 -0
  146. package/dist/esm/helpers/call.d.ts +119 -0
  147. package/dist/esm/helpers/call.d.ts.map +1 -0
  148. package/dist/esm/helpers/call.js +490 -0
  149. package/dist/esm/helpers/call.js.map +1 -0
  150. package/dist/esm/helpers/deserializer.d.ts +4 -0
  151. package/dist/esm/helpers/deserializer.d.ts.map +1 -0
  152. package/dist/esm/helpers/deserializer.js +55 -0
  153. package/dist/esm/helpers/deserializer.js.map +1 -0
  154. package/dist/esm/helpers/memo.d.ts +36 -0
  155. package/dist/esm/helpers/memo.d.ts.map +1 -0
  156. package/dist/esm/helpers/memo.js +128 -0
  157. package/dist/esm/helpers/memo.js.map +1 -0
  158. package/dist/esm/helpers/serializer.d.ts +14 -0
  159. package/dist/esm/helpers/serializer.d.ts.map +1 -0
  160. package/dist/esm/helpers/serializer.js +636 -0
  161. package/dist/esm/helpers/serializer.js.map +1 -0
  162. package/dist/esm/helpers/sleep.d.ts +2 -0
  163. package/dist/esm/helpers/sleep.d.ts.map +1 -0
  164. package/dist/esm/helpers/sleep.js +4 -0
  165. package/dist/esm/helpers/sleep.js.map +1 -0
  166. package/dist/esm/helpers/utils.d.ts +122 -0
  167. package/dist/esm/helpers/utils.d.ts.map +1 -0
  168. package/dist/esm/helpers/utils.js +196 -0
  169. package/dist/esm/helpers/utils.js.map +1 -0
  170. package/dist/esm/index.d.ts +10 -0
  171. package/dist/esm/index.d.ts.map +1 -0
  172. package/dist/esm/index.js +11 -0
  173. package/dist/esm/index.js.map +1 -0
  174. package/dist/esm/type_generators/types/balance.d.ts +1096 -0
  175. package/dist/esm/type_generators/types/balance.d.ts.map +1 -0
  176. package/dist/esm/type_generators/types/balance.js +2 -0
  177. package/dist/esm/type_generators/types/balance.js.map +1 -0
  178. package/dist/esm/type_generators/types/hafah.d.ts +2154 -0
  179. package/dist/esm/type_generators/types/hafah.d.ts.map +1 -0
  180. package/dist/esm/type_generators/types/hafah.js +2 -0
  181. package/dist/esm/type_generators/types/hafah.js.map +1 -0
  182. package/dist/esm/type_generators/types/hafbe.d.ts +2121 -0
  183. package/dist/esm/type_generators/types/hafbe.d.ts.map +1 -0
  184. package/dist/esm/type_generators/types/hafbe.js +2 -0
  185. package/dist/esm/type_generators/types/hafbe.js.map +1 -0
  186. package/dist/esm/type_generators/types/hafsql.d.ts +2439 -0
  187. package/dist/esm/type_generators/types/hafsql.d.ts.map +1 -0
  188. package/dist/esm/type_generators/types/hafsql.js +2 -0
  189. package/dist/esm/type_generators/types/hafsql.js.map +1 -0
  190. package/dist/esm/type_generators/types/hivemind.d.ts +202 -0
  191. package/dist/esm/type_generators/types/hivemind.d.ts.map +1 -0
  192. package/dist/esm/type_generators/types/hivemind.js +2 -0
  193. package/dist/esm/type_generators/types/hivemind.js.map +1 -0
  194. package/dist/esm/type_generators/types/hivesense.d.ts +448 -0
  195. package/dist/esm/type_generators/types/hivesense.d.ts.map +1 -0
  196. package/dist/esm/type_generators/types/hivesense.js +2 -0
  197. package/dist/esm/type_generators/types/hivesense.js.map +1 -0
  198. package/dist/esm/type_generators/types/nft-tracker.d.ts +348 -0
  199. package/dist/esm/type_generators/types/nft-tracker.d.ts.map +1 -0
  200. package/dist/esm/type_generators/types/nft-tracker.js +2 -0
  201. package/dist/esm/type_generators/types/nft-tracker.js.map +1 -0
  202. package/dist/esm/type_generators/types/reputation.d.ts +182 -0
  203. package/dist/esm/type_generators/types/reputation.d.ts.map +1 -0
  204. package/dist/esm/type_generators/types/reputation.js +2 -0
  205. package/dist/esm/type_generators/types/reputation.js.map +1 -0
  206. package/dist/esm/type_generators/types/status.d.ts +139 -0
  207. package/dist/esm/type_generators/types/status.d.ts.map +1 -0
  208. package/dist/esm/type_generators/types/status.js +2 -0
  209. package/dist/esm/type_generators/types/status.js.map +1 -0
  210. package/dist/esm/types.d.ts +415 -0
  211. package/dist/esm/types.d.ts.map +1 -0
  212. package/dist/esm/types.js +2 -0
  213. package/dist/esm/types.js.map +1 -0
  214. package/package.json +83 -0
@@ -0,0 +1,71 @@
1
+ import { PrivateKey } from './helpers/PrivateKey';
2
+ import { OperationName, OperationBody, TransactionType, TransactionStatus, BroadcastResult } from './types';
3
+ import { DigestData } from './types';
4
+ interface TransactionOptions {
5
+ transaction?: TransactionType | Transaction;
6
+ /**
7
+ * Transaction expiration in milliseconds (ms) - max 86400000 (24 hours)
8
+ * @default 60_000
9
+ */
10
+ expiration?: number;
11
+ }
12
+ export declare class Transaction {
13
+ transaction?: TransactionType;
14
+ expiration: number;
15
+ private txId?;
16
+ constructor(options?: TransactionOptions);
17
+ /**
18
+ * Adds an operation to the transaction. If no transaction exists, creates one first.
19
+ * @template O Operation name type for type safety
20
+ * @param operationName The name/type of the operation to add (e.g., 'transfer', 'vote', 'comment')
21
+ * @param operationBody The operation data/body for the specified operation type
22
+ * @returns Promise that resolves when the operation is added
23
+ * @throws Error if transaction creation fails or global properties cannot be retrieved
24
+ */
25
+ addOperation<O extends OperationName>(operationName: O, operationBody: OperationBody<O>): Promise<void>;
26
+ /**
27
+ * Signs the transaction with the provided key(s), supporting both single and multi-signature transactions.
28
+ * For multi-signature, you can sign with all keys at once or sign individually by calling this method multiple times.
29
+ * @param keys Single PrivateKey or array of PrivateKeys to sign the transaction with
30
+ * @returns The signed transaction
31
+ * @throws Error if no transaction exists to sign
32
+ */
33
+ sign(keys: PrivateKey | PrivateKey[]): TransactionType;
34
+ /**
35
+ * Broadcasts the signed transaction to the Hive network.
36
+ * Automatically handles retries and duplicate transaction detection.
37
+ * @param checkStatus By default (false) the transaction is not guaranteed to be included in a block.
38
+ * For example the transaction can expire while waiting in mempool.
39
+ * If you pass true here, the function will wait for the transaction to be either included or dropped
40
+ * before returning a result.
41
+ * @returns Promise resolving to broadcast result
42
+ * @throws Error if no transaction exists or transaction is not signed or transaction got rejected
43
+ */
44
+ broadcast(checkStatus?: boolean): Promise<BroadcastResult>;
45
+ /**
46
+ * Returns the transaction digest containing the transaction ID and hash.
47
+ * The digest can be used to verify signatures and for transaction identification.
48
+ * @returns DigestData containing transaction ID and hash
49
+ * @throws Error if no transaction exists
50
+ */
51
+ digest(): DigestData;
52
+ /**
53
+ * Adds a signature to an already created transaction. Useful when signing with external tools.
54
+ * Multiple signatures can be added one at a time for multi-signature transactions.
55
+ * @param signature The signature string in hex format (must be exactly 130 characters)
56
+ * @returns The transaction with the added signature
57
+ * @throws Error if no transaction exists or signature format is invalid
58
+ */
59
+ addSignature(signature: string): TransactionType;
60
+ /** Get status of this transaction. Usually called internally after broadcasting. */
61
+ checkStatus(): Promise<TransactionStatus>;
62
+ /**
63
+ * Creates the transaction structure and initializes it with blockchain data.
64
+ * Retrieves current head block information and sets up reference block data.
65
+ * @private
66
+ * @param expiration Transaction expiration in milliseconds
67
+ */
68
+ private createTransaction;
69
+ }
70
+ export {};
71
+ //# sourceMappingURL=Transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transaction.d.ts","sourceRoot":"","sources":["../../src/Transaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EACL,aAAa,EACb,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,eAAe,EAChB,MAAM,SAAS,CAAA;AAMhB,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAKpC,UAAU,kBAAkB;IAC1B,WAAW,CAAC,EAAE,eAAe,GAAG,WAAW,CAAA;IAC3C;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,qBAAa,WAAW;IACtB,WAAW,CAAC,EAAE,eAAe,CAAA;IAE7B,UAAU,EAAE,MAAM,CAAS;IAE3B,OAAO,CAAC,IAAI,CAAC,CAAQ;gBAET,OAAO,CAAC,EAAE,kBAAkB;IAexC;;;;;;;OAOG;IACG,YAAY,CAAC,CAAC,SAAS,aAAa,EACxC,aAAa,EAAE,CAAC,EAChB,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC;IAOhB;;;;;;OAMG;IACH,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,EAAE,GAAG,eAAe;IAoBtD;;;;;;;;;OASG;IACG,SAAS,CAAC,WAAW,UAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;IAgD9D;;;;;OAKG;IACH,MAAM,IAAI,UAAU;IAkBpB;;;;;;OAMG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe;IAchD,oFAAoF;IAC9E,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAU/C;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB,CAaxB;CACF"}
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Transaction = void 0;
4
+ const utils_js_1 = require("@noble/hashes/utils.js");
5
+ const ByteBuffer_1 = require("./helpers/ByteBuffer");
6
+ const serializer_1 = require("./helpers/serializer");
7
+ const sha2_js_1 = require("@noble/hashes/sha2.js");
8
+ const config_1 = require("./config");
9
+ const call_1 = require("./helpers/call");
10
+ const sleep_1 = require("./helpers/sleep");
11
+ const chainId = (0, utils_js_1.hexToBytes)(config_1.config.chain_id);
12
+ class Transaction {
13
+ constructor(options) {
14
+ this.expiration = 60000;
15
+ /**
16
+ * Creates the transaction structure and initializes it with blockchain data.
17
+ * Retrieves current head block information and sets up reference block data.
18
+ * @private
19
+ * @param expiration Transaction expiration in milliseconds
20
+ */
21
+ this.createTransaction = async (expiration) => {
22
+ const props = await (0, call_1.callRPC)('condenser_api.get_dynamic_global_properties', []);
23
+ const bytes = (0, utils_js_1.hexToBytes)(props.head_block_id);
24
+ const refBlockPrefix = Number(new Uint32Array(bytes.buffer, bytes.byteOffset + 4, 1)[0]);
25
+ const expirationIso = new Date(Date.now() + expiration).toISOString().slice(0, -5);
26
+ this.transaction = {
27
+ expiration: expirationIso,
28
+ extensions: [],
29
+ operations: [],
30
+ ref_block_num: props.head_block_number & 0xffff,
31
+ ref_block_prefix: refBlockPrefix,
32
+ signatures: []
33
+ };
34
+ };
35
+ if (options?.transaction) {
36
+ if (options.transaction instanceof Transaction) {
37
+ this.transaction = options.transaction.transaction;
38
+ this.expiration = options.transaction.expiration;
39
+ }
40
+ else {
41
+ this.transaction = options.transaction;
42
+ }
43
+ this.txId = this.digest().txId;
44
+ }
45
+ if (options?.expiration) {
46
+ this.expiration = options.expiration;
47
+ }
48
+ }
49
+ /**
50
+ * Adds an operation to the transaction. If no transaction exists, creates one first.
51
+ * @template O Operation name type for type safety
52
+ * @param operationName The name/type of the operation to add (e.g., 'transfer', 'vote', 'comment')
53
+ * @param operationBody The operation data/body for the specified operation type
54
+ * @returns Promise that resolves when the operation is added
55
+ * @throws Error if transaction creation fails or global properties cannot be retrieved
56
+ */
57
+ async addOperation(operationName, operationBody) {
58
+ if (!this.transaction) {
59
+ await this.createTransaction(this.expiration);
60
+ }
61
+ this.transaction.operations.push([operationName, operationBody]);
62
+ }
63
+ /**
64
+ * Signs the transaction with the provided key(s), supporting both single and multi-signature transactions.
65
+ * For multi-signature, you can sign with all keys at once or sign individually by calling this method multiple times.
66
+ * @param keys Single PrivateKey or array of PrivateKeys to sign the transaction with
67
+ * @returns The signed transaction
68
+ * @throws Error if no transaction exists to sign
69
+ */
70
+ sign(keys) {
71
+ if (!this.transaction) {
72
+ throw new Error('First create a transaction by .addOperation()');
73
+ }
74
+ if (this.transaction) {
75
+ const { digest, txId } = this.digest();
76
+ if (!Array.isArray(keys)) {
77
+ keys = [keys];
78
+ }
79
+ for (const key of keys) {
80
+ const signature = key.sign(digest);
81
+ this.transaction.signatures.push(signature.customToString());
82
+ }
83
+ this.txId = txId;
84
+ return this.transaction;
85
+ }
86
+ else {
87
+ throw new Error('No transaction to sign');
88
+ }
89
+ }
90
+ /**
91
+ * Broadcasts the signed transaction to the Hive network.
92
+ * Automatically handles retries and duplicate transaction detection.
93
+ * @param checkStatus By default (false) the transaction is not guaranteed to be included in a block.
94
+ * For example the transaction can expire while waiting in mempool.
95
+ * If you pass true here, the function will wait for the transaction to be either included or dropped
96
+ * before returning a result.
97
+ * @returns Promise resolving to broadcast result
98
+ * @throws Error if no transaction exists or transaction is not signed or transaction got rejected
99
+ */
100
+ async broadcast(checkStatus = false) {
101
+ if (!this.transaction) {
102
+ throw new Error('Attempted to broadcast an empty transaction. Add operations by .addOperation()');
103
+ }
104
+ if (this.transaction.signatures.length === 0) {
105
+ throw new Error('Attempted to broadcast a transaction with no signatures. Sign using .sign(keys)');
106
+ }
107
+ try {
108
+ await (0, call_1.callRPCBroadcast)('condenser_api.broadcast_transaction', [this.transaction]);
109
+ }
110
+ catch (e) {
111
+ if (e instanceof call_1.RPCError && e.message.includes('Duplicate transaction check failed')) {
112
+ // ignore duplicate transaction error as this can happen when we retry the broadcast
113
+ }
114
+ else {
115
+ throw e;
116
+ }
117
+ }
118
+ if (!this.txId) {
119
+ this.txId = this.digest().txId;
120
+ }
121
+ if (!checkStatus) {
122
+ return { tx_id: this.txId, status: 'unknown' };
123
+ }
124
+ // Poll until the transaction reaches a final state or max attempts exceeded.
125
+ // With 60 attempts: delays grow from 1.3s to 19s, total wait ~10 minutes.
126
+ const maxPollAttempts = 60;
127
+ await (0, sleep_1.sleep)(1000);
128
+ let status = await this.checkStatus();
129
+ let i = 1;
130
+ while (status?.status !== 'within_irreversible_block' &&
131
+ status?.status !== 'expired_irreversible' &&
132
+ status?.status !== 'too_old' &&
133
+ i < maxPollAttempts) {
134
+ await (0, sleep_1.sleep)(1000 + i * 300);
135
+ status = await this.checkStatus();
136
+ i++;
137
+ }
138
+ return {
139
+ tx_id: this.txId,
140
+ status: (status?.status ?? 'unknown')
141
+ };
142
+ }
143
+ /**
144
+ * Returns the transaction digest containing the transaction ID and hash.
145
+ * The digest can be used to verify signatures and for transaction identification.
146
+ * @returns DigestData containing transaction ID and hash
147
+ * @throws Error if no transaction exists
148
+ */
149
+ digest() {
150
+ if (!this.transaction) {
151
+ throw new Error('First create a transaction by .addOperation()');
152
+ }
153
+ const buffer = new ByteBuffer_1.ByteBuffer(ByteBuffer_1.ByteBuffer.DEFAULT_CAPACITY, ByteBuffer_1.ByteBuffer.LITTLE_ENDIAN);
154
+ const temp = { ...this.transaction };
155
+ try {
156
+ serializer_1.Serializer.Transaction(buffer, temp);
157
+ }
158
+ catch (cause) {
159
+ throw new Error('Unable to serialize transaction: ' + cause);
160
+ }
161
+ buffer.flip();
162
+ const transactionData = new Uint8Array(buffer.toBuffer());
163
+ const txId = (0, utils_js_1.bytesToHex)((0, sha2_js_1.sha256)(transactionData)).slice(0, 40);
164
+ const digest = (0, sha2_js_1.sha256)(new Uint8Array([...chainId, ...transactionData]));
165
+ return { digest, txId };
166
+ }
167
+ /**
168
+ * Adds a signature to an already created transaction. Useful when signing with external tools.
169
+ * Multiple signatures can be added one at a time for multi-signature transactions.
170
+ * @param signature The signature string in hex format (must be exactly 130 characters)
171
+ * @returns The transaction with the added signature
172
+ * @throws Error if no transaction exists or signature format is invalid
173
+ */
174
+ addSignature(signature) {
175
+ if (!this.transaction) {
176
+ throw new Error('First create a transaction by .create(operations)');
177
+ }
178
+ if (typeof signature !== 'string') {
179
+ throw new Error('Signature must be string');
180
+ }
181
+ if (signature.length !== 130) {
182
+ throw new Error('Signature must be 130 characters long');
183
+ }
184
+ this.transaction.signatures.push(signature);
185
+ return this.transaction;
186
+ }
187
+ /** Get status of this transaction. Usually called internally after broadcasting. */
188
+ async checkStatus() {
189
+ if (!this.txId) {
190
+ this.txId = this.digest().txId;
191
+ }
192
+ return (0, call_1.callRPC)('transaction_status_api.find_transaction', {
193
+ transaction_id: this.txId,
194
+ expiration: this.transaction?.expiration
195
+ });
196
+ }
197
+ }
198
+ exports.Transaction = Transaction;
199
+ //# sourceMappingURL=Transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transaction.js","sourceRoot":"","sources":["../../src/Transaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Configuration object for customizing hive-tx library behavior.
3
+ * Modify these values to change the default node endpoints, timeout, and other settings.
4
+ */
5
+ export declare const config: {
6
+ /**
7
+ * Array of Hive API node endpoints for load balancing and failover.
8
+ * @default Array of multiple Hive API endpoints
9
+ */
10
+ nodes: string[];
11
+ /**
12
+ * Array Hive API node endpoints that support REST APIs
13
+ * Note: Without the trailing /
14
+ */
15
+ restNodes: string[];
16
+ /**
17
+ * The Hive blockchain chain ID for transaction signing and verification.
18
+ * @default Mainnet chain ID
19
+ */
20
+ chain_id: string;
21
+ /**
22
+ * Address prefix used for public key formatting (STM for mainnet).
23
+ * @default 'STM'
24
+ */
25
+ address_prefix: string;
26
+ /**
27
+ * Timeout in milliseconds for individual API calls.
28
+ * @default 10000
29
+ */
30
+ timeout: number;
31
+ /**
32
+ * Number of retry attempts for failed API calls before throwing an error.
33
+ * @default 8
34
+ */
35
+ retry: number;
36
+ };
37
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,MAAM;IACjB;;;OAGG;;IAWH;;;OAGG;;IASH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;IAGH;;;OAGG;;CAEJ,CAAA"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ /**
5
+ * Configuration object for customizing hive-tx library behavior.
6
+ * Modify these values to change the default node endpoints, timeout, and other settings.
7
+ */
8
+ exports.config = {
9
+ /**
10
+ * Array of Hive API node endpoints for load balancing and failover.
11
+ * @default Array of multiple Hive API endpoints
12
+ */
13
+ nodes: [
14
+ 'https://api.hive.blog',
15
+ 'https://api.deathwing.me',
16
+ 'https://api.openhive.network',
17
+ 'https://rpc.mahdiyari.info',
18
+ 'https://techcoderx.com',
19
+ 'https://hiveapi.actifit.io',
20
+ 'https://api.c0ff33a.uk'
21
+ ],
22
+ /**
23
+ * Array Hive API node endpoints that support REST APIs
24
+ * Note: Without the trailing /
25
+ */
26
+ restNodes: [
27
+ 'https://api.hive.blog',
28
+ 'https://rpc.mahdiyari.info',
29
+ 'https://techcoderx.com',
30
+ 'https://hiveapi.actifit.io',
31
+ 'https://api.c0ff33a.uk'
32
+ ],
33
+ /**
34
+ * The Hive blockchain chain ID for transaction signing and verification.
35
+ * @default Mainnet chain ID
36
+ */
37
+ chain_id: 'beeab0de00000000000000000000000000000000000000000000000000000000',
38
+ /**
39
+ * Address prefix used for public key formatting (STM for mainnet).
40
+ * @default 'STM'
41
+ */
42
+ address_prefix: 'STM',
43
+ /**
44
+ * Timeout in milliseconds for individual API calls.
45
+ * @default 10000
46
+ */
47
+ timeout: 10000,
48
+ /**
49
+ * Number of retry attempts for failed API calls before throwing an error.
50
+ * @default 8
51
+ */
52
+ retry: 8
53
+ };
54
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,MAAM,GAAG;IACpB;;;OAGG;IACH,KAAK,EAAE;QACL,uBAAuB;QACvB,0BAA0B;QAC1B,8BAA8B;QAC9B,4BAA4B;QAC5B,wBAAwB;QACxB,4BAA4B;QAC5B,wBAAwB;KACzB;IAED;;;OAGG;IACH,SAAS,EAAE;QACT,uBAAuB;QACvB,4BAA4B;QAC5B,wBAAwB;QACxB,4BAA4B;QAC5B,wBAAwB;KACzB;IAED;;;OAGG;IACH,QAAQ,EAAE,kEAAkE;IAE5E;;;OAGG;IACH,cAAc,EAAE,KAAK;IAErB;;;OAGG;IACH,OAAO,EAAE,KAAM;IAEf;;;OAGG;IACH,KAAK,EAAE,CAAC;CACT,CAAA"}
@@ -0,0 +1,21 @@
1
+ /** Class representing a hive asset,
2
+ * e.g. `1.000 HIVE` or `12.112233 VESTS`. */
3
+ export declare class Asset {
4
+ amount: number;
5
+ symbol: string;
6
+ constructor(amount: number, symbol: string);
7
+ /** Create a new Asset instance from a string, e.g. `42.000 HIVE`. */
8
+ static fromString(string: string, expectedSymbol?: string | null): Asset;
9
+ /**
10
+ * Convenience to create new Asset.
11
+ * @param symbol Symbol to use when created from number. Will also be used to validate
12
+ * the asset, throws if the passed value has a different symbol than this.
13
+ */
14
+ static from(value: number | string | Asset, symbol?: string | null): Asset;
15
+ /** Return asset precision. */
16
+ getPrecision(): 3 | 6;
17
+ /** Return a string representation of this asset, e.g. `42.000 HIVE`. */
18
+ toString(): string;
19
+ toJSON(): string;
20
+ }
21
+ //# sourceMappingURL=Asset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Asset.d.ts","sourceRoot":"","sources":["../../../src/helpers/Asset.ts"],"names":[],"mappings":"AAAA;6CAC6C;AAC7C,qBAAa,KAAK;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;gBAEF,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAK1C,qEAAqE;IACrE,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,GAAE,MAAM,GAAG,IAAW,GAAG,KAAK;IAe9E;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK;IAiB1E,8BAA8B;IAC9B,YAAY;IAgBZ,wEAAwE;IACxE,QAAQ;IAIR,MAAM;CAGP"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Asset = void 0;
4
+ /** Class representing a hive asset,
5
+ * e.g. `1.000 HIVE` or `12.112233 VESTS`. */
6
+ class Asset {
7
+ constructor(amount, symbol) {
8
+ this.amount = amount;
9
+ this.symbol = symbol === 'HIVE' ? 'STEEM' : symbol === 'HBD' ? 'SBD' : symbol;
10
+ }
11
+ /** Create a new Asset instance from a string, e.g. `42.000 HIVE`. */
12
+ static fromString(string, expectedSymbol = null) {
13
+ const [amountString, symbol] = string.split(' ');
14
+ if (['STEEM', 'VESTS', 'SBD', 'TESTS', 'TBD', 'HIVE', 'HBD'].indexOf(symbol) === -1) {
15
+ throw new Error(`Invalid asset symbol: ${symbol}`);
16
+ }
17
+ if (expectedSymbol && symbol !== expectedSymbol) {
18
+ throw new Error(`Invalid asset, expected symbol: ${expectedSymbol} got: ${symbol}`);
19
+ }
20
+ const amount = Number.parseFloat(amountString);
21
+ if (!Number.isFinite(amount)) {
22
+ throw new Error(`Invalid asset amount: ${amountString}`);
23
+ }
24
+ return new Asset(amount, symbol);
25
+ }
26
+ /**
27
+ * Convenience to create new Asset.
28
+ * @param symbol Symbol to use when created from number. Will also be used to validate
29
+ * the asset, throws if the passed value has a different symbol than this.
30
+ */
31
+ static from(value, symbol) {
32
+ if (value instanceof Asset) {
33
+ if (symbol && value.symbol !== symbol) {
34
+ throw new Error(`Invalid asset, expected symbol: ${symbol} got: ${value.symbol}`);
35
+ }
36
+ return value;
37
+ }
38
+ else if (typeof value === 'number' && Number.isFinite(value)) {
39
+ return new Asset(value, symbol || 'STEEM');
40
+ }
41
+ else if (typeof value === 'string') {
42
+ return Asset.fromString(value, symbol);
43
+ }
44
+ else {
45
+ throw new Error(`Invalid asset '${String(value)}'`);
46
+ }
47
+ }
48
+ // We convert HIVE & HBD strings to STEEM & SBD because the serialization should be based on STEEM & SBD
49
+ /** Return asset precision. */
50
+ getPrecision() {
51
+ switch (this.symbol) {
52
+ case 'TESTS':
53
+ case 'TBD':
54
+ case 'STEEM':
55
+ case 'SBD':
56
+ case 'HBD':
57
+ case 'HIVE':
58
+ return 3;
59
+ case 'VESTS':
60
+ return 6;
61
+ default:
62
+ return 3;
63
+ }
64
+ }
65
+ /** Return a string representation of this asset, e.g. `42.000 HIVE`. */
66
+ toString() {
67
+ return `${this.amount.toFixed(this.getPrecision())} ${this.symbol}`;
68
+ }
69
+ toJSON() {
70
+ return this.toString();
71
+ }
72
+ }
73
+ exports.Asset = Asset;
74
+ //# sourceMappingURL=Asset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Asset.js","sourceRoot":"","sources":["../../../src/helpers/Asset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * @license bytebuffer.ts (c) 2015 Daniel Wirtz <dcode@dcode.io>
3
+ * Backing buffer: ArrayBuffer, Accessor: DataView
4
+ * Released under the Apache License, Version 2.0
5
+ * see: https://github.com/dcodeIO/bytebuffer.ts for details
6
+ * modified by @xmcl/bytebuffer
7
+ * And customized for hive-tx
8
+ */
9
+ export declare class ByteBuffer {
10
+ static LITTLE_ENDIAN: boolean;
11
+ static BIG_ENDIAN: boolean;
12
+ static DEFAULT_CAPACITY: number;
13
+ static DEFAULT_ENDIAN: boolean;
14
+ buffer: ArrayBufferLike;
15
+ view: DataView;
16
+ offset: number;
17
+ markedOffset: number;
18
+ limit: number;
19
+ littleEndian: boolean;
20
+ constructor(capacity?: number, littleEndian?: boolean);
21
+ static allocate(capacity?: number, littleEndian?: boolean): ByteBuffer;
22
+ static concat(buffers: Array<ByteBuffer | ArrayBuffer | Uint8Array | number[]>, littleEndian?: boolean): ByteBuffer;
23
+ static wrap(buffer: ByteBuffer | ArrayBuffer | Uint8Array | number[], littleEndian?: boolean): ByteBuffer;
24
+ writeBytes(source: ByteBuffer | ArrayBuffer | Uint8Array | number[], offset?: number): ByteBuffer;
25
+ writeInt8(value: number, offset?: number): ByteBuffer;
26
+ writeByte(value: number, offset?: number): ByteBuffer;
27
+ writeUint8(value: number, offset?: number): ByteBuffer;
28
+ writeUInt8(value: number, offset?: number): ByteBuffer;
29
+ readUint8(offset?: number): number;
30
+ readUInt8(offset?: number): number;
31
+ writeInt16(value: number, offset?: number): ByteBuffer;
32
+ writeShort(value: number, offset?: number): ByteBuffer;
33
+ writeUint16(value: number, offset?: number): ByteBuffer;
34
+ writeUInt16(value: number, offset?: number): ByteBuffer;
35
+ writeInt32(value: number, offset?: number): ByteBuffer;
36
+ writeInt(value: number, offset?: number): ByteBuffer;
37
+ writeUint32(value: number, offset?: number): ByteBuffer;
38
+ writeUInt32(value: number, offset?: number): ByteBuffer;
39
+ readUint32(offset?: number): number;
40
+ readUInt32: (offset?: number) => number;
41
+ append(source: ByteBuffer | ArrayBuffer | Uint8Array | number[], offset?: number): ByteBuffer;
42
+ clone(copy?: boolean): ByteBuffer;
43
+ copy(begin?: number, end?: number): ByteBuffer;
44
+ copyTo(target: ByteBuffer, targetOffset?: number, sourceOffset?: number, sourceLimit?: number): ByteBuffer;
45
+ ensureCapacity(capacity: number): ByteBuffer;
46
+ flip(): ByteBuffer;
47
+ resize(capacity: number): ByteBuffer;
48
+ skip(length: number): ByteBuffer;
49
+ writeInt64(value: number | bigint, offset?: number): ByteBuffer;
50
+ writeLong(value: number | bigint, offset?: number): ByteBuffer;
51
+ readInt64(offset?: number): bigint;
52
+ readLong(offset?: number): bigint;
53
+ writeUint64(value: number | bigint, offset?: number): ByteBuffer;
54
+ writeUInt64(value: number | bigint, offset?: number): ByteBuffer;
55
+ readUint64(offset?: number): bigint;
56
+ readUInt64(offset?: number): bigint;
57
+ toBuffer(forceCopy?: boolean): ArrayBufferLike;
58
+ toArrayBuffer(forceCopy?: boolean): ArrayBufferLike;
59
+ writeVarint32(value: number, offset?: number): ByteBuffer | number;
60
+ readVarint32(offset?: number): number | {
61
+ value: number;
62
+ length: number;
63
+ };
64
+ calculateVarint32(value: number): number;
65
+ writeVString(str: string, offset?: number): ByteBuffer | number;
66
+ readVString(offset?: number): string | {
67
+ string: string;
68
+ length: number;
69
+ };
70
+ readUTF8String(length: number, offset?: number): string | {
71
+ string: string;
72
+ length: number;
73
+ };
74
+ }
75
+ //# sourceMappingURL=ByteBuffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ByteBuffer.d.ts","sourceRoot":"","sources":["../../../src/helpers/ByteBuffer.ts"],"names":[],"mappings":"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"}