@pioneer-platform/maya-network 8.12.1 → 8.12.2
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.
- package/CHANGELOG.md +12 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +100 -49
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @pioneer-platform/maya-network
|
|
2
2
|
|
|
3
|
+
## 8.12.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Add dual-endpoint fallback for MayaChain broadcast and account info
|
|
8
|
+
|
|
9
|
+
- Broadcast now tries Unchained API first, falls back to direct Maya node
|
|
10
|
+
- Account info has same fallback logic for reliability
|
|
11
|
+
- Better error messages showing both endpoint results
|
|
12
|
+
- Eliminates single point of failure
|
|
13
|
+
- Logs which endpoint succeeded for debugging
|
|
14
|
+
|
|
3
15
|
## 8.12.1
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/lib/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ declare const https: any;
|
|
|
6
6
|
declare const axiosInstance: any;
|
|
7
7
|
declare const axiosRetry: any;
|
|
8
8
|
declare const UNCHAINED_API = "https://api.mayachain.shapeshift.com";
|
|
9
|
+
declare const MAYA_NODE = "https://mayanode.mayachain.info";
|
|
9
10
|
declare const MIDGARD_API = "https://midgard.mayachain.info/v2";
|
|
10
11
|
declare const BASE_MAYA = 10000000000;
|
|
11
12
|
/**********************************
|
package/lib/index.js
CHANGED
|
@@ -77,8 +77,10 @@ axiosRetry(axiosInstance, {
|
|
|
77
77
|
log.debug(TAG, "Retry ".concat(retryCount, "/2: ").concat(error.message));
|
|
78
78
|
}
|
|
79
79
|
});
|
|
80
|
-
// Unchained API endpoint
|
|
80
|
+
// Unchained API endpoint (primary)
|
|
81
81
|
var UNCHAINED_API = 'https://api.mayachain.shapeshift.com';
|
|
82
|
+
// Direct node fallback
|
|
83
|
+
var MAYA_NODE = 'https://mayanode.mayachain.info';
|
|
82
84
|
// Fallback to Midgard for pool data (not available in Unchained)
|
|
83
85
|
var MIDGARD_API = 'https://midgard.mayachain.info/v2';
|
|
84
86
|
// Base unit conversion (10 decimal places for CACAO)
|
|
@@ -162,22 +164,20 @@ var get_info = function () {
|
|
|
162
164
|
};
|
|
163
165
|
var get_account_info = function (address) {
|
|
164
166
|
return __awaiter(this, void 0, void 0, function () {
|
|
165
|
-
var tag, result, unchainedData,
|
|
167
|
+
var tag, result, unchainedData, unchainedError_1, nodeResult, nodeError_1;
|
|
166
168
|
return __generator(this, function (_a) {
|
|
167
169
|
switch (_a.label) {
|
|
168
170
|
case 0:
|
|
169
171
|
tag = TAG + " | get_account_info | ";
|
|
170
172
|
_a.label = 1;
|
|
171
173
|
case 1:
|
|
172
|
-
_a.trys.push([1, 3, ,
|
|
174
|
+
_a.trys.push([1, 3, , 8]);
|
|
173
175
|
return [4 /*yield*/, axiosInstance({
|
|
174
176
|
method: 'GET',
|
|
175
177
|
url: "".concat(UNCHAINED_API, "/api/v1/account/").concat(address),
|
|
176
178
|
timeout: 5000
|
|
177
179
|
})
|
|
178
180
|
// Unchained returns flat structure, wrap it for backward compatibility
|
|
179
|
-
// Old format: { result: { value: { account_number, sequence, ... } } }
|
|
180
|
-
// New format: { accountNumber, sequence, balance, ... }
|
|
181
181
|
];
|
|
182
182
|
case 2:
|
|
183
183
|
result = _a.sent();
|
|
@@ -192,17 +192,35 @@ var get_account_info = function (address) {
|
|
|
192
192
|
}
|
|
193
193
|
} }, unchainedData)];
|
|
194
194
|
case 3:
|
|
195
|
-
|
|
196
|
-
log.
|
|
197
|
-
|
|
198
|
-
case 4:
|
|
195
|
+
unchainedError_1 = _a.sent();
|
|
196
|
+
log.warn(tag, "Unchained API failed, trying node fallback:", unchainedError_1.message);
|
|
197
|
+
_a.label = 4;
|
|
198
|
+
case 4:
|
|
199
|
+
_a.trys.push([4, 6, , 7]);
|
|
200
|
+
return [4 /*yield*/, axiosInstance({
|
|
201
|
+
method: 'GET',
|
|
202
|
+
url: "".concat(MAYA_NODE, "/auth/accounts/").concat(address),
|
|
203
|
+
timeout: 5000
|
|
204
|
+
})
|
|
205
|
+
// Node returns nested format already
|
|
206
|
+
];
|
|
207
|
+
case 5:
|
|
208
|
+
nodeResult = _a.sent();
|
|
209
|
+
// Node returns nested format already
|
|
210
|
+
return [2 /*return*/, nodeResult.data];
|
|
211
|
+
case 6:
|
|
212
|
+
nodeError_1 = _a.sent();
|
|
213
|
+
log.error(tag, "Both endpoints failed:", nodeError_1.message);
|
|
214
|
+
throw nodeError_1;
|
|
215
|
+
case 7: return [3 /*break*/, 8];
|
|
216
|
+
case 8: return [2 /*return*/];
|
|
199
217
|
}
|
|
200
218
|
});
|
|
201
219
|
});
|
|
202
220
|
};
|
|
203
221
|
var get_balance = function (address) {
|
|
204
222
|
return __awaiter(this, void 0, void 0, function () {
|
|
205
|
-
var tag, accountInfo, balance,
|
|
223
|
+
var tag, accountInfo, balance, e_2;
|
|
206
224
|
return __generator(this, function (_a) {
|
|
207
225
|
switch (_a.label) {
|
|
208
226
|
case 0:
|
|
@@ -219,9 +237,9 @@ var get_balance = function (address) {
|
|
|
219
237
|
// Convert from base units to CACAO
|
|
220
238
|
return [2 /*return*/, balance / BASE_MAYA];
|
|
221
239
|
case 3:
|
|
222
|
-
|
|
223
|
-
log.error(tag, "Error:",
|
|
224
|
-
throw
|
|
240
|
+
e_2 = _a.sent();
|
|
241
|
+
log.error(tag, "Error:", e_2.message);
|
|
242
|
+
throw e_2;
|
|
225
243
|
case 4: return [2 /*return*/];
|
|
226
244
|
}
|
|
227
245
|
});
|
|
@@ -229,7 +247,7 @@ var get_balance = function (address) {
|
|
|
229
247
|
};
|
|
230
248
|
var get_balances = function (address) {
|
|
231
249
|
return __awaiter(this, void 0, void 0, function () {
|
|
232
|
-
var tag, accountInfo, output, cacaoBalance, _i, _a, asset,
|
|
250
|
+
var tag, accountInfo, output, cacaoBalance, _i, _a, asset, e_3;
|
|
233
251
|
return __generator(this, function (_b) {
|
|
234
252
|
switch (_b.label) {
|
|
235
253
|
case 0:
|
|
@@ -278,9 +296,9 @@ var get_balances = function (address) {
|
|
|
278
296
|
}
|
|
279
297
|
return [2 /*return*/, output];
|
|
280
298
|
case 3:
|
|
281
|
-
|
|
282
|
-
log.error(tag, "Error:",
|
|
283
|
-
throw
|
|
299
|
+
e_3 = _b.sent();
|
|
300
|
+
log.error(tag, "Error:", e_3.message);
|
|
301
|
+
throw e_3;
|
|
284
302
|
case 4: return [2 /*return*/];
|
|
285
303
|
}
|
|
286
304
|
});
|
|
@@ -288,7 +306,7 @@ var get_balances = function (address) {
|
|
|
288
306
|
};
|
|
289
307
|
var get_txs_by_address = function (address_1, cursor_1) {
|
|
290
308
|
return __awaiter(this, arguments, void 0, function (address, cursor, pageSize) {
|
|
291
|
-
var tag, params, result,
|
|
309
|
+
var tag, params, result, e_4;
|
|
292
310
|
if (pageSize === void 0) { pageSize = 50; }
|
|
293
311
|
return __generator(this, function (_a) {
|
|
294
312
|
switch (_a.label) {
|
|
@@ -310,9 +328,9 @@ var get_txs_by_address = function (address_1, cursor_1) {
|
|
|
310
328
|
result = _a.sent();
|
|
311
329
|
return [2 /*return*/, result.data];
|
|
312
330
|
case 3:
|
|
313
|
-
|
|
314
|
-
log.error(tag, "Error:",
|
|
315
|
-
throw
|
|
331
|
+
e_4 = _a.sent();
|
|
332
|
+
log.error(tag, "Error:", e_4.message);
|
|
333
|
+
throw e_4;
|
|
316
334
|
case 4: return [2 /*return*/];
|
|
317
335
|
}
|
|
318
336
|
});
|
|
@@ -339,16 +357,16 @@ var get_transaction = function (txid) {
|
|
|
339
357
|
};
|
|
340
358
|
var broadcast_transaction = function (tx) {
|
|
341
359
|
return __awaiter(this, void 0, void 0, function () {
|
|
342
|
-
var tag, output, payload, result,
|
|
343
|
-
var _a;
|
|
344
|
-
return __generator(this, function (
|
|
345
|
-
switch (
|
|
360
|
+
var tag, output, payload, result, unchainedError_2, nodeResult, nodeError, nodeError_2, nodeErrorMsg;
|
|
361
|
+
var _a, _b, _c, _d, _e;
|
|
362
|
+
return __generator(this, function (_f) {
|
|
363
|
+
switch (_f.label) {
|
|
346
364
|
case 0:
|
|
347
365
|
tag = TAG + " | broadcast_transaction | ";
|
|
348
366
|
output = { success: false };
|
|
349
|
-
|
|
367
|
+
_f.label = 1;
|
|
350
368
|
case 1:
|
|
351
|
-
|
|
369
|
+
_f.trys.push([1, 3, , 4]);
|
|
352
370
|
payload = {
|
|
353
371
|
rawTx: tx
|
|
354
372
|
};
|
|
@@ -360,32 +378,65 @@ var broadcast_transaction = function (tx) {
|
|
|
360
378
|
timeout: 10000
|
|
361
379
|
})];
|
|
362
380
|
case 2:
|
|
363
|
-
result =
|
|
364
|
-
log.info(tag, '
|
|
381
|
+
result = _f.sent();
|
|
382
|
+
log.info(tag, 'Unchained response:', result.data);
|
|
365
383
|
// Unchained returns { txid: "hash" } on success
|
|
366
384
|
if (result.data.txid || result.data.txHash) {
|
|
367
385
|
output.txid = result.data.txid || result.data.txHash;
|
|
368
386
|
output.success = true;
|
|
369
387
|
output.endpoint = 'Unchained';
|
|
370
|
-
log.info(tag, "\u2705 Broadcast SUCCESS - txid: ".concat(output.txid));
|
|
388
|
+
log.info(tag, "\u2705 Broadcast SUCCESS via Unchained - txid: ".concat(output.txid));
|
|
389
|
+
return [2 /*return*/, output];
|
|
371
390
|
}
|
|
372
391
|
else if (result.data.message) {
|
|
373
392
|
output.error = result.data.message;
|
|
374
|
-
log.
|
|
393
|
+
log.warn(tag, "Unchained returned error:", result.data.message);
|
|
375
394
|
}
|
|
376
|
-
return [
|
|
395
|
+
return [3 /*break*/, 4];
|
|
377
396
|
case 3:
|
|
378
|
-
|
|
379
|
-
log.
|
|
380
|
-
if ((_a =
|
|
381
|
-
output.error =
|
|
382
|
-
log.
|
|
397
|
+
unchainedError_2 = _f.sent();
|
|
398
|
+
log.warn(tag, "Unchained API failed:", unchainedError_2.message);
|
|
399
|
+
if ((_a = unchainedError_2.response) === null || _a === void 0 ? void 0 : _a.data) {
|
|
400
|
+
output.error = unchainedError_2.response.data.message || unchainedError_2.response.data.error || unchainedError_2.message;
|
|
401
|
+
log.debug(tag, "Unchained error details:", unchainedError_2.response.data);
|
|
383
402
|
}
|
|
384
|
-
|
|
385
|
-
|
|
403
|
+
return [3 /*break*/, 4];
|
|
404
|
+
case 4:
|
|
405
|
+
_f.trys.push([4, 6, , 7]);
|
|
406
|
+
log.info(tag, "Trying direct Maya node fallback");
|
|
407
|
+
return [4 /*yield*/, axiosInstance({
|
|
408
|
+
url: "".concat(MAYA_NODE, "/txs"),
|
|
409
|
+
method: 'POST',
|
|
410
|
+
data: {
|
|
411
|
+
tx: tx,
|
|
412
|
+
mode: 'sync'
|
|
413
|
+
},
|
|
414
|
+
timeout: 10000
|
|
415
|
+
})];
|
|
416
|
+
case 5:
|
|
417
|
+
nodeResult = _f.sent();
|
|
418
|
+
log.info(tag, 'Node response:', nodeResult.data);
|
|
419
|
+
// Node returns { txhash: "hash" } on success
|
|
420
|
+
if (nodeResult.data.txhash || nodeResult.data.hash) {
|
|
421
|
+
output.txid = nodeResult.data.txhash || nodeResult.data.hash;
|
|
422
|
+
output.success = true;
|
|
423
|
+
output.endpoint = 'MayaNode';
|
|
424
|
+
log.info(tag, "\u2705 Broadcast SUCCESS via MayaNode - txid: ".concat(output.txid));
|
|
425
|
+
return [2 /*return*/, output];
|
|
386
426
|
}
|
|
387
|
-
|
|
388
|
-
|
|
427
|
+
else if (nodeResult.data.raw_log || nodeResult.data.message) {
|
|
428
|
+
nodeError = nodeResult.data.raw_log || nodeResult.data.message;
|
|
429
|
+
output.error = "Both endpoints failed. Unchained: ".concat(output.error, ". Node: ").concat(nodeError);
|
|
430
|
+
log.error(tag, "❌ Both endpoints FAILED");
|
|
431
|
+
}
|
|
432
|
+
return [3 /*break*/, 7];
|
|
433
|
+
case 6:
|
|
434
|
+
nodeError_2 = _f.sent();
|
|
435
|
+
log.error(tag, "Node broadcast also failed:", nodeError_2.message);
|
|
436
|
+
nodeErrorMsg = ((_c = (_b = nodeError_2.response) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.raw_log) || ((_e = (_d = nodeError_2.response) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.message) || nodeError_2.message;
|
|
437
|
+
output.error = "Both endpoints failed. Unchained: ".concat(output.error, ". Node: ").concat(nodeErrorMsg);
|
|
438
|
+
return [3 /*break*/, 7];
|
|
439
|
+
case 7: return [2 /*return*/, output];
|
|
389
440
|
}
|
|
390
441
|
});
|
|
391
442
|
});
|
|
@@ -393,7 +444,7 @@ var broadcast_transaction = function (tx) {
|
|
|
393
444
|
// Pool endpoints use Midgard (not available in Unchained)
|
|
394
445
|
var get_pool = function (poolId) {
|
|
395
446
|
return __awaiter(this, void 0, void 0, function () {
|
|
396
|
-
var tag, params, result,
|
|
447
|
+
var tag, params, result, e_5;
|
|
397
448
|
return __generator(this, function (_a) {
|
|
398
449
|
switch (_a.label) {
|
|
399
450
|
case 0:
|
|
@@ -415,9 +466,9 @@ var get_pool = function (poolId) {
|
|
|
415
466
|
result = _a.sent();
|
|
416
467
|
return [2 /*return*/, result.data];
|
|
417
468
|
case 3:
|
|
418
|
-
|
|
419
|
-
log.error(tag, "Error:",
|
|
420
|
-
throw
|
|
469
|
+
e_5 = _a.sent();
|
|
470
|
+
log.error(tag, "Error:", e_5.message);
|
|
471
|
+
throw e_5;
|
|
421
472
|
case 4: return [2 /*return*/];
|
|
422
473
|
}
|
|
423
474
|
});
|
|
@@ -425,7 +476,7 @@ var get_pool = function (poolId) {
|
|
|
425
476
|
};
|
|
426
477
|
var get_pools = function () {
|
|
427
478
|
return __awaiter(this, void 0, void 0, function () {
|
|
428
|
-
var tag, result,
|
|
479
|
+
var tag, result, e_6;
|
|
429
480
|
return __generator(this, function (_a) {
|
|
430
481
|
switch (_a.label) {
|
|
431
482
|
case 0:
|
|
@@ -442,9 +493,9 @@ var get_pools = function () {
|
|
|
442
493
|
result = _a.sent();
|
|
443
494
|
return [2 /*return*/, result.data];
|
|
444
495
|
case 3:
|
|
445
|
-
|
|
446
|
-
log.error(tag, "Error:",
|
|
447
|
-
throw
|
|
496
|
+
e_6 = _a.sent();
|
|
497
|
+
log.error(tag, "Error:", e_6.message);
|
|
498
|
+
throw e_6;
|
|
448
499
|
case 4: return [2 /*return*/];
|
|
449
500
|
}
|
|
450
501
|
});
|