@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,498 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.callWithQuorum = exports.callRPCBroadcast = exports.callRPC = exports.RPCError = void 0;
4
+ exports.callREST = callREST;
5
+ const config_1 = require("../config");
6
+ const sleep_1 = require("./sleep");
7
+ // ── Error Types ─────────────────────────────────────────────────────────────
8
+ class RPCError extends Error {
9
+ constructor(rpcError) {
10
+ super(rpcError.message);
11
+ this.name = 'RPCError';
12
+ this.stack = undefined;
13
+ this.code = rpcError.code;
14
+ if ('data' in rpcError) {
15
+ this.data = rpcError.data;
16
+ }
17
+ }
18
+ }
19
+ exports.RPCError = RPCError;
20
+ /**
21
+ * Transport-level error thrown by jsonRPCCall for HTTP status errors (429, 503).
22
+ * Carries node identity and rate-limit info so callers can record health
23
+ * exactly once without double-counting.
24
+ */
25
+ class NodeError extends Error {
26
+ constructor(node, message, rateLimitMs = 0) {
27
+ super(message);
28
+ this.node = node;
29
+ this.rateLimitMs = rateLimitMs;
30
+ }
31
+ }
32
+ /** Errors that indicate the request definitely never reached the server. */
33
+ const PRE_CONNECTION_ERRORS = ['ECONNREFUSED', 'ENOTFOUND', 'EHOSTUNREACH', 'EAI_AGAIN'];
34
+ /**
35
+ * Check if an error is a pre-connection error (request never reached server).
36
+ *
37
+ * Node.js fetch wraps connection failures as TypeError('fetch failed') with
38
+ * the real error code nested in the cause chain: e.cause.code, e.cause.cause.code, etc.
39
+ * We walk up to 5 levels deep to find the actual code.
40
+ */
41
+ function isPreConnectionError(e) {
42
+ if (!e)
43
+ return false;
44
+ const parts = [String(e.message || ''), String(e.code || '')];
45
+ let cause = e.cause;
46
+ for (let depth = 0; cause && depth < 5; depth++) {
47
+ parts.push(String(cause.code || ''), String(cause.message || ''));
48
+ cause = cause.cause;
49
+ }
50
+ const combined = parts.join(' ');
51
+ return PRE_CONNECTION_ERRORS.some((code) => combined.includes(code));
52
+ }
53
+ class NodeHealthTracker {
54
+ constructor() {
55
+ this.health = new Map();
56
+ }
57
+ getOrCreate(node) {
58
+ let h = this.health.get(node);
59
+ if (!h) {
60
+ h = { consecutiveFailures: 0, lastFailureTime: 0, rateLimitedUntil: 0 };
61
+ this.health.set(node, h);
62
+ }
63
+ return h;
64
+ }
65
+ recordSuccess(node) {
66
+ const h = this.getOrCreate(node);
67
+ h.consecutiveFailures = 0;
68
+ }
69
+ recordFailure(node) {
70
+ const h = this.getOrCreate(node);
71
+ h.consecutiveFailures++;
72
+ h.lastFailureTime = Date.now();
73
+ }
74
+ recordRateLimit(node, retryAfterMs = 10000) {
75
+ const h = this.getOrCreate(node);
76
+ h.rateLimitedUntil = Date.now() + retryAfterMs;
77
+ h.consecutiveFailures++;
78
+ h.lastFailureTime = Date.now();
79
+ }
80
+ isNodeHealthy(node) {
81
+ const h = this.health.get(node);
82
+ if (!h)
83
+ return true; // unknown nodes assumed healthy
84
+ // Rate-limited and cooldown hasn't expired
85
+ if (h.rateLimitedUntil > Date.now())
86
+ return false;
87
+ // Too many consecutive failures within the last 30 seconds
88
+ if (h.consecutiveFailures >= 3 && Date.now() - h.lastFailureTime < 30000)
89
+ return false;
90
+ return true;
91
+ }
92
+ /** Return nodes sorted: healthy first (preserving order), unhealthy appended. */
93
+ getOrderedNodes(nodes) {
94
+ const healthy = [];
95
+ const unhealthy = [];
96
+ for (const node of nodes) {
97
+ if (this.isNodeHealthy(node)) {
98
+ healthy.push(node);
99
+ }
100
+ else {
101
+ unhealthy.push(node);
102
+ }
103
+ }
104
+ return [...healthy, ...unhealthy];
105
+ }
106
+ }
107
+ const rpcHealthTracker = new NodeHealthTracker();
108
+ const restHealthTracker = new NodeHealthTracker();
109
+ // ── Internal helpers ────────────────────────────────────────────────────────
110
+ /** Record a caught error on the health tracker (handles NodeError to avoid double-counting). */
111
+ function recordError(tracker, node, e) {
112
+ if (e instanceof NodeError) {
113
+ if (e.rateLimitMs > 0) {
114
+ tracker.recordRateLimit(node, e.rateLimitMs);
115
+ }
116
+ else {
117
+ tracker.recordFailure(node);
118
+ }
119
+ }
120
+ else {
121
+ tracker.recordFailure(node);
122
+ }
123
+ }
124
+ /**
125
+ * Low-level JSON-RPC call to a single node. No failover.
126
+ * Throws RPCError for blockchain rejections, NodeError for HTTP 429/503,
127
+ * and generic Error for other transport failures.
128
+ * @param shouldRetry - If true, retries once on the same node for transient errors.
129
+ */
130
+ const jsonRPCCall = async (url, method, params, timeout = config_1.config.timeout, shouldRetry = false) => {
131
+ const id = Math.floor(Math.random() * 100000000);
132
+ const body = {
133
+ jsonrpc: '2.0',
134
+ method,
135
+ params,
136
+ id
137
+ };
138
+ try {
139
+ const res = await fetch(url, {
140
+ method: 'POST',
141
+ body: JSON.stringify(body),
142
+ headers: { 'Content-Type': 'application/json' },
143
+ signal: AbortSignal.timeout(timeout)
144
+ });
145
+ // Handle HTTP-level errors before parsing JSON.
146
+ // Throw NodeError so callers can record health exactly once.
147
+ if (res.status === 429) {
148
+ const retryAfter = res.headers.get('Retry-After');
149
+ const cooldownMs = retryAfter ? parseInt(retryAfter, 10) * 1000 : 10000;
150
+ throw new NodeError(url, `HTTP 429 Rate Limited`, cooldownMs);
151
+ }
152
+ if (res.status === 503) {
153
+ throw new NodeError(url, `HTTP 503 Service Unavailable`);
154
+ }
155
+ const result = (await res.json());
156
+ if (!result ||
157
+ typeof result.id === 'undefined' ||
158
+ result.id !== id ||
159
+ result.jsonrpc !== '2.0') {
160
+ throw new Error('JSONRPC id mismatch');
161
+ }
162
+ if ('result' in result) {
163
+ return result.result;
164
+ }
165
+ if ('error' in result) {
166
+ const e = result.error;
167
+ if ('message' in e && 'code' in e) {
168
+ throw new RPCError(e);
169
+ }
170
+ throw result.error;
171
+ }
172
+ // No result and no error?
173
+ throw result;
174
+ }
175
+ catch (e) {
176
+ if (e instanceof RPCError) {
177
+ throw e;
178
+ }
179
+ // NodeError should not be retried on the same node - it's an HTTP status issue
180
+ if (e instanceof NodeError) {
181
+ throw e;
182
+ }
183
+ if (shouldRetry) {
184
+ return jsonRPCCall(url, method, params, timeout, false);
185
+ }
186
+ throw e;
187
+ }
188
+ };
189
+ /** Small jitter delay between failover attempts to prevent thundering herd. */
190
+ function jitterDelay() {
191
+ return (0, sleep_1.sleep)(50 + Math.random() * 50);
192
+ }
193
+ // ── Public API: callRPC ─────────────────────────────────────────────────────
194
+ /**
195
+ * Makes API calls to Hive blockchain nodes with automatic retry and failover support.
196
+ * Uses per-request retry counters, node health tracking, jitter between retries,
197
+ * and HTTP status awareness (429 rate limiting, 503).
198
+ *
199
+ * If the current node fails, it will automatically try the next healthy node.
200
+ * When all nodes have been tried, wraps around to give earlier nodes another chance
201
+ * until the full retry budget (config.retry) is exhausted.
202
+ * RPCErrors (valid blockchain rejections) are never retried.
203
+ *
204
+ * @param method - The API method name (e.g., 'condenser_api.get_accounts')
205
+ * @param params - Parameters for the API method as array or object
206
+ * @param timeout - Request timeout in milliseconds (default: config.timeout)
207
+ * @param retry - Maximum number of retry attempts (default: config.retry)
208
+ * @returns Promise resolving to the API response
209
+ * @throws {RPCError} On blockchain-level errors (bad params, missing authority, etc.)
210
+ * @throws {Error} If all retry attempts fail
211
+ *
212
+ * @example
213
+ * ```typescript
214
+ * import { callRPC } from 'hive-tx'
215
+ *
216
+ * // Get account information
217
+ * const accounts = await callRPC('condenser_api.get_accounts', [['alice']])
218
+ *
219
+ * // Custom timeout and retry settings
220
+ * const data = await callRPC('condenser_api.get_content', ['alice', 'test-post'], 10_000, 5)
221
+ * ```
222
+ */
223
+ const callRPC = async (method, params = [], timeout = config_1.config.timeout, retry = config_1.config.retry) => {
224
+ if (!Array.isArray(config_1.config.nodes)) {
225
+ throw new Error('config.nodes is not an array');
226
+ }
227
+ if (config_1.config.nodes.length === 0) {
228
+ throw new Error('config.nodes is empty');
229
+ }
230
+ // Track nodes tried in the current round. When all nodes have been tried,
231
+ // clear the set to allow a second round (wrap-around) using the retry budget.
232
+ const triedInRound = new Set();
233
+ let lastError;
234
+ for (let attempt = 0; attempt <= retry; attempt++) {
235
+ // Re-evaluate node order each attempt so health changes are respected.
236
+ const orderedNodes = rpcHealthTracker.getOrderedNodes(config_1.config.nodes);
237
+ // Pick the healthiest untried node. If all tried, start a new round.
238
+ let node = orderedNodes.find((n) => !triedInRound.has(n));
239
+ if (!node) {
240
+ triedInRound.clear();
241
+ node = orderedNodes[0];
242
+ }
243
+ triedInRound.add(node);
244
+ try {
245
+ const res = await jsonRPCCall(node, method, params, timeout);
246
+ rpcHealthTracker.recordSuccess(node);
247
+ return res;
248
+ }
249
+ catch (e) {
250
+ // RPCErrors are valid blockchain rejections - never retry
251
+ if (e instanceof RPCError) {
252
+ throw e;
253
+ }
254
+ recordError(rpcHealthTracker, node, e);
255
+ lastError = e;
256
+ // Add jitter before trying next node
257
+ if (attempt < retry) {
258
+ await jitterDelay();
259
+ }
260
+ }
261
+ }
262
+ throw lastError;
263
+ };
264
+ exports.callRPC = callRPC;
265
+ // ── Public API: callRPC for broadcasts ──────────────────────────────────────
266
+ /**
267
+ * Broadcast-safe RPC call. Only retries on pre-connection errors where the
268
+ * request definitively never reached the server (ECONNREFUSED, ENOTFOUND, etc.).
269
+ * On timeouts, HTTP errors, or any ambiguous failure, throws immediately to
270
+ * prevent double-broadcasting transactions.
271
+ *
272
+ * Tries each node once (no wrap-around) since broadcast retries are dangerous.
273
+ *
274
+ * @internal Used by Transaction.broadcast()
275
+ */
276
+ const callRPCBroadcast = async (method, params = [], timeout = config_1.config.timeout) => {
277
+ if (!Array.isArray(config_1.config.nodes)) {
278
+ throw new Error('config.nodes is not an array');
279
+ }
280
+ if (config_1.config.nodes.length === 0) {
281
+ throw new Error('config.nodes is empty');
282
+ }
283
+ // Track which nodes we've already tried - broadcasts must never retry the same node
284
+ const triedNodes = new Set();
285
+ let lastError;
286
+ for (let attempt = 0; attempt < config_1.config.nodes.length; attempt++) {
287
+ // Re-evaluate order each attempt so health changes are respected
288
+ const orderedNodes = rpcHealthTracker.getOrderedNodes(config_1.config.nodes);
289
+ const node = orderedNodes.find((n) => !triedNodes.has(n));
290
+ if (!node)
291
+ break;
292
+ triedNodes.add(node);
293
+ try {
294
+ const res = await jsonRPCCall(node, method, params, timeout);
295
+ rpcHealthTracker.recordSuccess(node);
296
+ return res;
297
+ }
298
+ catch (e) {
299
+ // RPCErrors are valid blockchain rejections - never retry
300
+ if (e instanceof RPCError) {
301
+ throw e;
302
+ }
303
+ recordError(rpcHealthTracker, node, e);
304
+ lastError = e;
305
+ // Only retry broadcasts on pre-connection errors where the request
306
+ // definitely never reached the server. On timeouts or HTTP errors,
307
+ // the server may have received and processed the transaction.
308
+ if (!isPreConnectionError(e)) {
309
+ throw e;
310
+ }
311
+ }
312
+ }
313
+ throw lastError;
314
+ };
315
+ exports.callRPCBroadcast = callRPCBroadcast;
316
+ // ── Public API: callREST ────────────────────────────────────────────────────
317
+ const apiMethods = {
318
+ balance: '/balance-api',
319
+ hafah: '/hafah-api',
320
+ hafbe: '/hafbe-api',
321
+ hivemind: '/hivemind-api',
322
+ hivesense: '/hivesense-api',
323
+ reputation: '/reputation-api',
324
+ 'nft-tracker': '/nft-tracker-api',
325
+ hafsql: '/hafsql',
326
+ status: '/status-api'
327
+ };
328
+ /**
329
+ * Makes REST API calls to Hive blockchain REST endpoints with automatic retry and failover support.
330
+ * Uses per-request retry counters, node health tracking, and timeout support.
331
+ * Wraps around the node list to honor the full retry budget.
332
+ *
333
+ * @template Api - The REST API method type (e.g., 'balance', 'hafah', 'hivemind', etc.)
334
+ * @template P - The endpoint path type for the specified API
335
+ *
336
+ * @param api - The REST API method name to call
337
+ * @param endpoint - The specific endpoint path within the API
338
+ * @param params - Optional parameters for path and query string replacement
339
+ * @param timeout - Request timeout in milliseconds (default: config.timeout)
340
+ * @param retry - Number of retry attempts before throwing an error (default: config.retry)
341
+ *
342
+ * @returns Promise resolving to the API response data with proper typing
343
+ * @throws Error if all retry attempts fail
344
+ *
345
+ * @example
346
+ * ```typescript
347
+ * import { callREST } from 'hive-tx'
348
+ *
349
+ * // Get account balance
350
+ * const balance = await callREST('balance', '/accounts/{account-name}/balances', { "account-name": 'alice' })
351
+ *
352
+ * // Custom timeout and retry settings
353
+ * const data = await callREST('status', '/status', undefined, 10_000, 3)
354
+ * ```
355
+ */
356
+ async function callREST(api, endpoint, params, timeout = config_1.config.timeout, retry = config_1.config.retry) {
357
+ if (!Array.isArray(config_1.config.restNodes)) {
358
+ throw new Error('config.restNodes is not an array');
359
+ }
360
+ if (config_1.config.restNodes.length === 0) {
361
+ throw new Error('config.restNodes is empty');
362
+ }
363
+ const triedInRound = new Set();
364
+ let lastError;
365
+ // Track whether the error was already recorded by the HTTP status handler
366
+ let alreadyRecorded = false;
367
+ for (let attempt = 0; attempt <= retry; attempt++) {
368
+ // Re-evaluate node order each attempt so health changes are respected.
369
+ const orderedNodes = restHealthTracker.getOrderedNodes(config_1.config.restNodes);
370
+ let node = orderedNodes.find((n) => !triedInRound.has(n));
371
+ if (!node) {
372
+ triedInRound.clear();
373
+ node = orderedNodes[0];
374
+ }
375
+ triedInRound.add(node);
376
+ const baseUrl = node + apiMethods[api];
377
+ let path = endpoint;
378
+ const paramObj = params || {};
379
+ const processedPathParams = new Set();
380
+ // Replace path params ONLY
381
+ Object.entries(paramObj).forEach(([key, value]) => {
382
+ if (path.includes(`{${key}}`)) {
383
+ path = path.replace(`{${key}}`, encodeURIComponent(String(value)));
384
+ processedPathParams.add(key);
385
+ }
386
+ });
387
+ const url = new URL(baseUrl + path);
388
+ // Add ONLY remaining params as query (if any)
389
+ Object.entries(paramObj).forEach(([key, value]) => {
390
+ if (!processedPathParams.has(key)) {
391
+ if (Array.isArray(value)) {
392
+ value.forEach((v) => url.searchParams.append(key, String(v)));
393
+ }
394
+ else {
395
+ url.searchParams.set(key, String(value));
396
+ }
397
+ }
398
+ });
399
+ alreadyRecorded = false;
400
+ try {
401
+ const response = await fetch(url.toString(), {
402
+ signal: AbortSignal.timeout(timeout)
403
+ });
404
+ if (response.status === 404) {
405
+ throw new Error('HTTP 404 - Hint: can happen on wrong params');
406
+ }
407
+ if (response.status === 429) {
408
+ const retryAfter = response.headers.get('Retry-After');
409
+ const cooldownMs = retryAfter ? parseInt(retryAfter, 10) * 1000 : 10000;
410
+ restHealthTracker.recordRateLimit(node, cooldownMs);
411
+ alreadyRecorded = true;
412
+ throw new Error(`HTTP 429 Rate Limited by ${node}`);
413
+ }
414
+ if (response.status === 503) {
415
+ restHealthTracker.recordFailure(node);
416
+ alreadyRecorded = true;
417
+ throw new Error(`HTTP 503 Service Unavailable from ${node}`);
418
+ }
419
+ restHealthTracker.recordSuccess(node);
420
+ return response.json();
421
+ }
422
+ catch (e) {
423
+ // 404 is not a node issue, don't failover
424
+ if (e?.message?.includes('HTTP 404')) {
425
+ throw e;
426
+ }
427
+ // Only record if not already recorded by 429/503 handler above
428
+ if (!alreadyRecorded) {
429
+ restHealthTracker.recordFailure(node);
430
+ }
431
+ lastError = e;
432
+ if (attempt < retry) {
433
+ await jitterDelay();
434
+ }
435
+ }
436
+ }
437
+ throw lastError;
438
+ }
439
+ // ── Public API: callWithQuorum ───────────────────────────────────────────────
440
+ /**
441
+ * Make a JSONRPC call with quorum. The method will cross-check the result
442
+ * with `quorum` number of nodes before returning the result.
443
+ * @param method - The API method name (e.g., 'condenser_api.get_accounts')
444
+ * @param params - Parameters for the API method as array or object
445
+ * @param quorum - Default: 2 (recommended)
446
+ */
447
+ const callWithQuorum = async (method, params = [], quorum = 2) => {
448
+ if (!Array.isArray(config_1.config.nodes)) {
449
+ throw new Error('config.nodes is not an Array');
450
+ }
451
+ if (quorum > config_1.config.nodes.length) {
452
+ throw new Error('quorum > config.nodes.length');
453
+ }
454
+ // We call random nodes for better security
455
+ const shuffleNodes = (arr) => [...arr].sort(() => Math.random() - 0.5);
456
+ let allNodes = shuffleNodes(config_1.config.nodes);
457
+ let currentBatchSize = Math.min(quorum, allNodes.length);
458
+ let allResults = [];
459
+ while (currentBatchSize > 0 && allNodes.length > 0) {
460
+ // Take next batch of nodes
461
+ const batchNodes = allNodes.splice(0, currentBatchSize);
462
+ const promises = [];
463
+ const batchResults = [];
464
+ // Launch batch calls in parallel
465
+ for (let i = 0; i < batchNodes.length; i++) {
466
+ promises.push(jsonRPCCall(batchNodes[i], method, params, undefined, true)
467
+ .then((data) => batchResults.push(data))
468
+ .catch(() => { }));
469
+ }
470
+ await Promise.all(promises);
471
+ allResults.push(...batchResults);
472
+ // Check for consensus in successful results
473
+ const consensusResult = findConsensus(allResults, quorum);
474
+ if (consensusResult) {
475
+ return consensusResult;
476
+ }
477
+ // Prepare next batch
478
+ currentBatchSize = Math.min(quorum, allNodes.length);
479
+ if (currentBatchSize === 0) {
480
+ throw new Error('No more nodes available.');
481
+ }
482
+ }
483
+ throw new Error("Couldn't reach quorum.");
484
+ };
485
+ exports.callWithQuorum = callWithQuorum;
486
+ function findConsensus(results, quorum) {
487
+ const resultGroups = new Map();
488
+ for (const result of results) {
489
+ const key = JSON.stringify(result);
490
+ if (!resultGroups.has(key)) {
491
+ resultGroups.set(key, []);
492
+ }
493
+ resultGroups.get(key).push(result);
494
+ }
495
+ const consensusGroup = Array.from(resultGroups.values()).find((group) => group.length >= quorum);
496
+ return consensusGroup ? consensusGroup[0] : null;
497
+ }
498
+ //# sourceMappingURL=call.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call.js","sourceRoot":"","sources":["../../../src/helpers/call.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const Deserializer: {
2
+ Memo: (buf: Uint8Array) => any;
3
+ };
4
+ //# sourceMappingURL=deserializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deserializer.d.ts","sourceRoot":"","sources":["../../../src/helpers/deserializer.ts"],"names":[],"mappings":"AAyDA,eAAO,MAAM,YAAY;gBAlCmC,UAAU;CAoCrE,CAAA"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Deserializer = void 0;
4
+ const ByteBuffer_1 = require("./ByteBuffer");
5
+ const PublicKey_1 = require("./PublicKey");
6
+ const PublicKeyDeserializer = (buf) => {
7
+ const c = fixedBuf(buf, 33);
8
+ return new PublicKey_1.PublicKey(c);
9
+ };
10
+ const UInt64Deserializer = (b) => {
11
+ return b.readUint64();
12
+ };
13
+ const UInt32Deserializer = (b) => {
14
+ return b.readUint32();
15
+ };
16
+ const BinaryDeserializer = (b) => {
17
+ const len = b.readVarint32();
18
+ const bCopy = b.copy(b.offset, b.offset + len);
19
+ b.skip(len);
20
+ return new Uint8Array(bCopy.toBuffer());
21
+ };
22
+ const BufferDeserializer = (keyDeserializers) => (buf) => {
23
+ const obj = {};
24
+ const buffer = new ByteBuffer_1.ByteBuffer(ByteBuffer_1.ByteBuffer.DEFAULT_CAPACITY, ByteBuffer_1.ByteBuffer.LITTLE_ENDIAN);
25
+ buffer.append(buf);
26
+ buffer.flip();
27
+ for (const [key, deserializer] of keyDeserializers) {
28
+ try {
29
+ obj[key] = deserializer(buffer);
30
+ }
31
+ catch (error) {
32
+ error.message = `${key}: ${error.message}`;
33
+ throw error;
34
+ }
35
+ }
36
+ return obj;
37
+ };
38
+ function fixedBuf(b, len) {
39
+ if (!b) {
40
+ throw Error('No buffer found on first parameter');
41
+ }
42
+ else {
43
+ const bCopy = b.copy(b.offset, b.offset + len);
44
+ b.skip(len);
45
+ return new Uint8Array(bCopy.toBuffer());
46
+ }
47
+ }
48
+ const EncryptedMemoDeserializer = BufferDeserializer([
49
+ ['from', PublicKeyDeserializer],
50
+ ['to', PublicKeyDeserializer],
51
+ ['nonce', UInt64Deserializer],
52
+ ['check', UInt32Deserializer],
53
+ ['encrypted', BinaryDeserializer]
54
+ ]);
55
+ exports.Deserializer = {
56
+ Memo: EncryptedMemoDeserializer
57
+ };
58
+ //# sourceMappingURL=deserializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deserializer.js","sourceRoot":"","sources":["../../../src/helpers/deserializer.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AACzC,2CAAuC;AAEvC,MAAM,qBAAqB,GAAG,CAAC,GAAe,EAAE,EAAE;IAChD,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC3B,OAAO,IAAI,qBAAS,CAAC,CAAC,CAAC,CAAA;AACzB,CAAC,CAAA;AAED,MAAM,kBAAkB,GAAG,CAAC,CAAa,EAAE,EAAE;IAC3C,OAAO,CAAC,CAAC,UAAU,EAAE,CAAA;AACvB,CAAC,CAAA;AAED,MAAM,kBAAkB,GAAG,CAAC,CAAa,EAAE,EAAE;IAC3C,OAAO,CAAC,CAAC,UAAU,EAAE,CAAA;AACvB,CAAC,CAAA;AAED,MAAM,kBAAkB,GAAG,CAAC,CAAa,EAAE,EAAE;IAC3C,MAAM,GAAG,GAAW,CAAC,CAAC,YAAY,EAAE,CAAA;IACpC,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAA;IAC9C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACX,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;AACzC,CAAC,CAAA;AAED,MAAM,kBAAkB,GAAG,CAAC,gBAAqB,EAAE,EAAE,CAAC,CAAC,GAAe,EAAE,EAAE;IACxE,MAAM,GAAG,GAAQ,EAAE,CAAA;IACnB,MAAM,MAAM,GAAG,IAAI,uBAAU,CAAC,uBAAU,CAAC,gBAAgB,EAAE,uBAAU,CAAC,aAAa,CAAC,CAAA;IACpF,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAClB,MAAM,CAAC,IAAI,EAAE,CAAA;IACb,KAAK,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACnD,IAAI,CAAC;YACH,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;QACjC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,KAAK,CAAC,OAAO,GAAG,GAAG,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAA;YAC1C,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,SAAS,QAAQ,CAAC,CAAa,EAAE,GAAW;IAC1C,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,KAAK,CAAC,oCAAoC,CAAC,CAAA;IACnD,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAA;QAC9C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACX,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;IACzC,CAAC;AACH,CAAC;AAED,MAAM,yBAAyB,GAAG,kBAAkB,CAAC;IACnD,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAC/B,CAAC,IAAI,EAAE,qBAAqB,CAAC;IAC7B,CAAC,OAAO,EAAE,kBAAkB,CAAC;IAC7B,CAAC,OAAO,EAAE,kBAAkB,CAAC;IAC7B,CAAC,WAAW,EAAE,kBAAkB,CAAC;CAClC,CAAC,CAAA;AAEW,QAAA,YAAY,GAAG;IAC1B,IAAI,EAAE,yBAAyB;CAChC,CAAA"}
@@ -0,0 +1,36 @@
1
+ import { PrivateKey } from './PrivateKey';
2
+ import { PublicKey } from './PublicKey';
3
+ export type Memo = {
4
+ /**
5
+ * Encrypts a memo for secure private messaging
6
+ */
7
+ encode(privateKey: string | PrivateKey, publicKey: string | PublicKey, memo: string, testNonce?: any): string;
8
+ /**
9
+ * Decrypts a memo message
10
+ */
11
+ decode(privateKey: string | PrivateKey, memo: string): string;
12
+ };
13
+ /**
14
+ * Memo utilities for encrypting and decrypting private messages between Hive users.
15
+ * Uses AES encryption with ECDH key exchange for secure communication.
16
+ *
17
+ * Messages must start with '#' to be encrypted/decrypted.
18
+ * Plain text messages (without '#') are returned unchanged.
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * import { Memo, PrivateKey, PublicKey } from 'hive-tx'
23
+ *
24
+ * // Encrypt a message
25
+ * const encrypted = Memo.encode(senderPrivateKey, recipientPublicKey, '#Hello World')
26
+ *
27
+ * // Decrypt a message
28
+ * const decrypted = Memo.decode(recipientPrivateKey, encrypted)
29
+ * console.log(decrypted) // '#Hello World'
30
+ * ```
31
+ */
32
+ export declare const Memo: {
33
+ decode: (privateKey: string | PrivateKey, memo: string) => string;
34
+ encode: (privateKey: string | PrivateKey, publicKey: string | PublicKey, memo: string, testNonce?: any) => string;
35
+ };
36
+ //# sourceMappingURL=memo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memo.d.ts","sourceRoot":"","sources":["../../../src/helpers/memo.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGvC,MAAM,MAAM,IAAI,GAAG;IACjB;;OAEG;IACH,MAAM,CACJ,UAAU,EAAE,MAAM,GAAG,UAAU,EAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,GAAG,GACd,MAAM,CAAA;IAET;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAC9D,CAAA;AA0GD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,IAAI;yBAzEW,MAAM,GAAG,UAAU,QAAQ,MAAM,KAAG,MAAM;yBAtCxD,MAAM,GAAG,UAAU,aACpB,MAAM,GAAG,SAAS,QACvB,MAAM,cACA,GAAG,KACd,MAAM;CA8GR,CAAA"}