wao 0.13.0 → 0.13.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/cjs/aoconnect-base.js +416 -214
- package/cjs/bao.js +13 -2
- package/cjs/bar.js +16 -7
- package/cjs/hb.js +148 -79
- package/cjs/run.js +4 -2
- package/cjs/server.js +75 -48
- package/cjs/tao.js +4 -0
- package/esm/aoconnect-base.js +90 -8
- package/esm/bao.js +5 -0
- package/esm/bar.js +8 -2
- package/esm/hb.js +29 -6
- package/esm/run.js +2 -1
- package/esm/server.js +24 -12
- package/esm/tao.js +2 -0
- package/package.json +1 -1
package/cjs/server.js
CHANGED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports["default"] = void 0;
|
|
8
8
|
var _crypto = _interopRequireDefault(require("crypto"));
|
|
9
|
+
var _hb = _interopRequireDefault(require("./hb.js"));
|
|
9
10
|
var _express = _interopRequireDefault(require("express"));
|
|
10
11
|
var _cors = _interopRequireDefault(require("cors"));
|
|
11
12
|
var _base64url = _interopRequireDefault(require("base64url"));
|
|
@@ -98,6 +99,7 @@ var Server = /*#__PURE__*/function () {
|
|
|
98
99
|
su = _ref$su === void 0 ? 4003 : _ref$su,
|
|
99
100
|
_ref$cu = _ref.cu,
|
|
100
101
|
cu = _ref$cu === void 0 ? 4004 : _ref$cu,
|
|
102
|
+
hb_url = _ref.hb_url,
|
|
101
103
|
aoconnect = _ref.aoconnect,
|
|
102
104
|
_ref$log = _ref.log,
|
|
103
105
|
log = _ref$log === void 0 ? false : _ref$log,
|
|
@@ -112,9 +114,14 @@ var Server = /*#__PURE__*/function () {
|
|
|
112
114
|
cu = port + 4;
|
|
113
115
|
aoconnect = (0, _utils.optAO)(5000);
|
|
114
116
|
}
|
|
117
|
+
var hb = null;
|
|
118
|
+
if (hb_url) hb = new _hb["default"]({
|
|
119
|
+
url: hb_url
|
|
120
|
+
});
|
|
115
121
|
var _connect = (0, _aoconnect.connect)(aoconnect, {
|
|
116
122
|
log: log,
|
|
117
|
-
cache: db
|
|
123
|
+
cache: db,
|
|
124
|
+
hb: hb
|
|
118
125
|
}),
|
|
119
126
|
_ar = _connect.ar,
|
|
120
127
|
message = _connect.message,
|
|
@@ -124,7 +131,9 @@ var Server = /*#__PURE__*/function () {
|
|
|
124
131
|
results = _connect.results,
|
|
125
132
|
mem = _connect.mem,
|
|
126
133
|
monitor = _connect.monitor,
|
|
127
|
-
unmonitor = _connect.unmonitor
|
|
134
|
+
unmonitor = _connect.unmonitor,
|
|
135
|
+
recover = _connect.recover;
|
|
136
|
+
this.recover = recover;
|
|
128
137
|
this.monitor = monitor;
|
|
129
138
|
this.unmonitor = unmonitor;
|
|
130
139
|
this.spawn = spawn;
|
|
@@ -163,7 +172,7 @@ var Server = /*#__PURE__*/function () {
|
|
|
163
172
|
}));
|
|
164
173
|
app.post("/tx", /*#__PURE__*/function () {
|
|
165
174
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(req, res) {
|
|
166
|
-
var lines, sigs, currentKey, _iterator, _step, line, trimmed, headerMatch, _key, value, input, key, verifier, isValid, item, _iterator2, _step2, v, _res2, _res3;
|
|
175
|
+
var lines, sigs, currentKey, _iterator, _step, line, trimmed, headerMatch, _key, value, input, key, verifier, id, isValid, item, _iterator2, _step2, v, _res2, _iterator3, _step3, _v, _res3;
|
|
167
176
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
168
177
|
while (1) switch (_context.prev = _context.next) {
|
|
169
178
|
case 0:
|
|
@@ -228,8 +237,9 @@ var Server = /*#__PURE__*/function () {
|
|
|
228
237
|
key: key,
|
|
229
238
|
format: "jwk"
|
|
230
239
|
}), "rsa-pss-sha512");
|
|
231
|
-
|
|
232
|
-
_context.
|
|
240
|
+
id = null;
|
|
241
|
+
_context.prev = 33;
|
|
242
|
+
_context.next = 36;
|
|
233
243
|
return verifyMessage({
|
|
234
244
|
keyLookup: function keyLookup(params) {
|
|
235
245
|
return {
|
|
@@ -241,11 +251,11 @@ var Server = /*#__PURE__*/function () {
|
|
|
241
251
|
headers: req.headers,
|
|
242
252
|
url: "http://ao.com".concat(req.headers.path)
|
|
243
253
|
});
|
|
244
|
-
case
|
|
254
|
+
case 36:
|
|
245
255
|
isValid = _context.sent;
|
|
246
256
|
item = toANS104Request(sigs).item;
|
|
247
257
|
if (!(sigs.slot === "0" || sigs.type === "Process")) {
|
|
248
|
-
_context.next =
|
|
258
|
+
_context.next = 46;
|
|
249
259
|
break;
|
|
250
260
|
}
|
|
251
261
|
_iterator2 = _createForOfIteratorHelper(item.tags);
|
|
@@ -259,43 +269,54 @@ var Server = /*#__PURE__*/function () {
|
|
|
259
269
|
} finally {
|
|
260
270
|
_iterator2.f();
|
|
261
271
|
}
|
|
262
|
-
_context.next =
|
|
272
|
+
_context.next = 43;
|
|
263
273
|
return _this.spawn({
|
|
264
274
|
http_msg: item,
|
|
265
275
|
module: sigs.module,
|
|
266
276
|
scheduler: sigs.scheduler
|
|
267
277
|
});
|
|
268
|
-
case
|
|
278
|
+
case 43:
|
|
269
279
|
_res2 = _context.sent;
|
|
270
|
-
_context.next =
|
|
280
|
+
_context.next = 52;
|
|
271
281
|
break;
|
|
272
|
-
case
|
|
282
|
+
case 46:
|
|
273
283
|
if (!(sigs.type === "Message")) {
|
|
274
|
-
_context.next =
|
|
284
|
+
_context.next = 52;
|
|
275
285
|
break;
|
|
276
286
|
}
|
|
277
|
-
|
|
287
|
+
_iterator3 = _createForOfIteratorHelper(item.tags);
|
|
288
|
+
try {
|
|
289
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
290
|
+
_v = _step3.value;
|
|
291
|
+
if (_v.name === "id") id = _v.value;
|
|
292
|
+
}
|
|
293
|
+
} catch (err) {
|
|
294
|
+
_iterator3.e(err);
|
|
295
|
+
} finally {
|
|
296
|
+
_iterator3.f();
|
|
297
|
+
}
|
|
298
|
+
_context.next = 51;
|
|
278
299
|
return _this.message({
|
|
300
|
+
slot: sigs.slot,
|
|
279
301
|
http_msg: item,
|
|
280
302
|
process: sigs.target
|
|
281
303
|
});
|
|
282
|
-
case
|
|
304
|
+
case 51:
|
|
283
305
|
_res3 = _context.sent;
|
|
284
|
-
case
|
|
285
|
-
_context.next =
|
|
306
|
+
case 52:
|
|
307
|
+
_context.next = 57;
|
|
286
308
|
break;
|
|
287
|
-
case 51:
|
|
288
|
-
_context.prev = 51;
|
|
289
|
-
_context.t1 = _context["catch"](32);
|
|
290
|
-
console.log(_context.t1, req.originalUrl);
|
|
291
309
|
case 54:
|
|
292
|
-
|
|
310
|
+
_context.prev = 54;
|
|
311
|
+
_context.t1 = _context["catch"](33);
|
|
312
|
+
console.log(_context.t1, req.originalUrl);
|
|
313
|
+
case 57:
|
|
293
314
|
return _context.abrupt("return", res.status(200).send("Success"));
|
|
294
|
-
case
|
|
315
|
+
case 58:
|
|
295
316
|
case "end":
|
|
296
317
|
return _context.stop();
|
|
297
318
|
}
|
|
298
|
-
}, _callee, null, [[7, 21, 24, 27], [
|
|
319
|
+
}, _callee, null, [[7, 21, 24, 27], [33, 54]]);
|
|
299
320
|
}));
|
|
300
321
|
return function (_x, _x2) {
|
|
301
322
|
return _ref2.apply(this, arguments);
|
|
@@ -792,14 +813,23 @@ var Server = /*#__PURE__*/function () {
|
|
|
792
813
|
});
|
|
793
814
|
var result = /*#__PURE__*/function () {
|
|
794
815
|
var _ref14 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee13(req, res) {
|
|
795
|
-
var message, process, _this5$mem$env$proces, res2;
|
|
816
|
+
var message, process, _yield$_this5$recover, success, _this5$mem$env$proces, res2;
|
|
796
817
|
return _regeneratorRuntime().wrap(function _callee13$(_context13) {
|
|
797
818
|
while (1) switch (_context13.prev = _context13.next) {
|
|
798
819
|
case 0:
|
|
799
820
|
message = req.params.mid;
|
|
800
|
-
process = req.query["process-id"];
|
|
821
|
+
process = req.query["process-id"]; // check if recovery is ongoing and
|
|
801
822
|
if (!(0, _ramda.isNil)(_this5.mem.env[process])) {
|
|
802
|
-
_context13.next =
|
|
823
|
+
_context13.next = 12;
|
|
824
|
+
break;
|
|
825
|
+
}
|
|
826
|
+
_context13.next = 5;
|
|
827
|
+
return _this5.recover(process);
|
|
828
|
+
case 5:
|
|
829
|
+
_yield$_this5$recover = _context13.sent;
|
|
830
|
+
success = _yield$_this5$recover.success;
|
|
831
|
+
if (success) {
|
|
832
|
+
_context13.next = 12;
|
|
803
833
|
break;
|
|
804
834
|
}
|
|
805
835
|
console.log("process not found:", req.query["process-id"]);
|
|
@@ -807,16 +837,13 @@ var Server = /*#__PURE__*/function () {
|
|
|
807
837
|
res.json({
|
|
808
838
|
error: "not found"
|
|
809
839
|
});
|
|
810
|
-
setTimeout(function () {
|
|
811
|
-
console.log(_this5.mem.env);
|
|
812
|
-
}, 1000);
|
|
813
840
|
return _context13.abrupt("return");
|
|
814
|
-
case
|
|
841
|
+
case 12:
|
|
815
842
|
if (!/^--[0-9a-zA-Z_-]{43,44}$/.test(message)) {
|
|
816
843
|
message = (_this5$mem$env$proces = _this5.mem.env[process]) === null || _this5$mem$env$proces === void 0 || (_this5$mem$env$proces = _this5$mem$env$proces.results) === null || _this5$mem$env$proces === void 0 ? void 0 : _this5$mem$env$proces[message];
|
|
817
844
|
}
|
|
818
845
|
if (!(0, _ramda.isNil)(message)) {
|
|
819
|
-
_context13.next =
|
|
846
|
+
_context13.next = 18;
|
|
820
847
|
break;
|
|
821
848
|
}
|
|
822
849
|
console.log("message not found", message, req.params);
|
|
@@ -825,16 +852,16 @@ var Server = /*#__PURE__*/function () {
|
|
|
825
852
|
error: "Not Found"
|
|
826
853
|
});
|
|
827
854
|
return _context13.abrupt("return");
|
|
828
|
-
case
|
|
829
|
-
_context13.next =
|
|
855
|
+
case 18:
|
|
856
|
+
_context13.next = 20;
|
|
830
857
|
return _this5.result({
|
|
831
858
|
message: message,
|
|
832
859
|
process: process
|
|
833
860
|
});
|
|
834
|
-
case
|
|
861
|
+
case 20:
|
|
835
862
|
res2 = _context13.sent;
|
|
836
863
|
res.json(res2);
|
|
837
|
-
case
|
|
864
|
+
case 22:
|
|
838
865
|
case "end":
|
|
839
866
|
return _context13.stop();
|
|
840
867
|
}
|
|
@@ -913,7 +940,7 @@ var Server = /*#__PURE__*/function () {
|
|
|
913
940
|
app.get("/results/:pid", /*#__PURE__*/function () {
|
|
914
941
|
var _ref17 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee16(req, res) {
|
|
915
942
|
var _this5$mem$env$pid$re, _this5$mem$env$pid2;
|
|
916
|
-
var pid, _req$query, _req$query$from, from, _req$query$to, to, _req$query$sort, sort, _req$query$limit, limit, results, _res, i, count, started,
|
|
943
|
+
var pid, _req$query, _req$query$from, from, _req$query$to, to, _req$query$sort, sort, _req$query$limit, limit, results, _res, i, count, started, _iterator4, _step4, v, _this5$mem$msgs$v;
|
|
917
944
|
return _regeneratorRuntime().wrap(function _callee16$(_context16) {
|
|
918
945
|
while (1) switch (_context16.prev = _context16.next) {
|
|
919
946
|
case 0:
|
|
@@ -925,15 +952,15 @@ var Server = /*#__PURE__*/function () {
|
|
|
925
952
|
i = 1;
|
|
926
953
|
count = 0;
|
|
927
954
|
started = (0, _ramda.isNil)(from);
|
|
928
|
-
|
|
955
|
+
_iterator4 = _createForOfIteratorHelper(results);
|
|
929
956
|
_context16.prev = 9;
|
|
930
|
-
|
|
957
|
+
_iterator4.s();
|
|
931
958
|
case 11:
|
|
932
|
-
if ((
|
|
959
|
+
if ((_step4 = _iterator4.n()).done) {
|
|
933
960
|
_context16.next = 26;
|
|
934
961
|
break;
|
|
935
962
|
}
|
|
936
|
-
v =
|
|
963
|
+
v = _step4.value;
|
|
937
964
|
if (!started) {
|
|
938
965
|
_context16.next = 22;
|
|
939
966
|
break;
|
|
@@ -970,10 +997,10 @@ var Server = /*#__PURE__*/function () {
|
|
|
970
997
|
case 28:
|
|
971
998
|
_context16.prev = 28;
|
|
972
999
|
_context16.t0 = _context16["catch"](9);
|
|
973
|
-
|
|
1000
|
+
_iterator4.e(_context16.t0);
|
|
974
1001
|
case 31:
|
|
975
1002
|
_context16.prev = 31;
|
|
976
|
-
|
|
1003
|
+
_iterator4.f();
|
|
977
1004
|
return _context16.finish(31);
|
|
978
1005
|
case 34:
|
|
979
1006
|
res.json({
|
|
@@ -1000,11 +1027,11 @@ var Server = /*#__PURE__*/function () {
|
|
|
1000
1027
|
var _this6 = this;
|
|
1001
1028
|
return new Promise(function (res) {
|
|
1002
1029
|
var count = 0;
|
|
1003
|
-
var
|
|
1004
|
-
|
|
1030
|
+
var _iterator5 = _createForOfIteratorHelper(_this6.servers),
|
|
1031
|
+
_step5;
|
|
1005
1032
|
try {
|
|
1006
|
-
for (
|
|
1007
|
-
var v =
|
|
1033
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
1034
|
+
var v = _step5.value;
|
|
1008
1035
|
v.close(function () {
|
|
1009
1036
|
count += 1;
|
|
1010
1037
|
if (count >= 4) {
|
|
@@ -1014,9 +1041,9 @@ var Server = /*#__PURE__*/function () {
|
|
|
1014
1041
|
});
|
|
1015
1042
|
}
|
|
1016
1043
|
} catch (err) {
|
|
1017
|
-
|
|
1044
|
+
_iterator5.e(err);
|
|
1018
1045
|
} finally {
|
|
1019
|
-
|
|
1046
|
+
_iterator5.f();
|
|
1020
1047
|
}
|
|
1021
1048
|
});
|
|
1022
1049
|
}
|
package/cjs/tao.js
CHANGED
|
@@ -8,6 +8,7 @@ exports["default"] = void 0;
|
|
|
8
8
|
var _bao = _interopRequireDefault(require("./bao.js"));
|
|
9
9
|
var _aoconnect = require("./aoconnect.js");
|
|
10
10
|
var _tar = _interopRequireDefault(require("./tar.js"));
|
|
11
|
+
var _hb = _interopRequireDefault(require("./hb.js"));
|
|
11
12
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
12
13
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
13
14
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
@@ -28,6 +29,9 @@ var AO = /*#__PURE__*/function (_BAO) {
|
|
|
28
29
|
function AO() {
|
|
29
30
|
var opt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
30
31
|
_classCallCheck(this, AO);
|
|
32
|
+
if (opt.hb_url) opt.hb = new _hb["default"]({
|
|
33
|
+
url: opt.hb_url
|
|
34
|
+
});
|
|
31
35
|
return _callSuper(this, AO, [_objectSpread(_objectSpread({}, opt), {}, {
|
|
32
36
|
connect: _aoconnect.connect,
|
|
33
37
|
AR: _tar["default"]
|
package/esm/aoconnect-base.js
CHANGED
|
@@ -3,7 +3,7 @@ const pkg = WarpArBundles.default ?? WarpArBundles
|
|
|
3
3
|
const { DataItem } = pkg
|
|
4
4
|
import crypto from "crypto"
|
|
5
5
|
import base64url from "base64url"
|
|
6
|
-
|
|
6
|
+
import { wait } from "../src/utils.js"
|
|
7
7
|
import {
|
|
8
8
|
tags,
|
|
9
9
|
action,
|
|
@@ -25,9 +25,10 @@ import {
|
|
|
25
25
|
o,
|
|
26
26
|
reverse,
|
|
27
27
|
} from "ramda"
|
|
28
|
-
|
|
28
|
+
|
|
29
|
+
let onRecovery = {}
|
|
29
30
|
export default ({ AR, scheduler, mu, su, cu, acc, AoLoader, ArMem } = {}) => {
|
|
30
|
-
return (mem, { cache, log = false, extensions = {} } = {}) => {
|
|
31
|
+
return (mem, { cache, log = false, extensions = {}, hb } = {}) => {
|
|
31
32
|
const isMem = mem?.__type__ === "mem"
|
|
32
33
|
if (!isMem) {
|
|
33
34
|
let args = { cache }
|
|
@@ -367,21 +368,30 @@ export default ({ AR, scheduler, mu, su, cu, acc, AoLoader, ArMem } = {}) => {
|
|
|
367
368
|
}
|
|
368
369
|
return null
|
|
369
370
|
}
|
|
370
|
-
|
|
371
371
|
const message = async opt => {
|
|
372
|
-
const p = await mem.get("env", opt.process)
|
|
373
|
-
if (!p) return null
|
|
374
372
|
let id = ""
|
|
375
373
|
let owner = ""
|
|
376
374
|
let item = null
|
|
377
375
|
if (ar.isHttpMsg(opt.http_msg)) {
|
|
378
|
-
;({ owner, item } = await ar.httpmsg(opt.http_msg))
|
|
379
|
-
|
|
376
|
+
;({ id, owner, item } = await ar.httpmsg(opt.http_msg))
|
|
377
|
+
// check if process exists, and recover if necessary
|
|
378
|
+
const p = await mem.get("env", opt.process)
|
|
379
|
+
const new_slot = opt.slot * 1
|
|
380
|
+
const last_slot = !p ? -1 : p.results.length - 1
|
|
381
|
+
if (last_slot + 1 !== new_slot) {
|
|
382
|
+
console.log("need process recovery from HB:", opt.process)
|
|
383
|
+
if (!hb || opt.recovery) return null
|
|
384
|
+
await recover(opt.process)
|
|
385
|
+
}
|
|
380
386
|
} else {
|
|
381
387
|
let id = opt?.item?.id ?? ""
|
|
382
388
|
let owner = opt.owner ?? ""
|
|
383
389
|
let item = opt.item
|
|
384
390
|
}
|
|
391
|
+
|
|
392
|
+
const p = await mem.get("env", opt.process)
|
|
393
|
+
if (!p) return null
|
|
394
|
+
|
|
385
395
|
if (!opt.item && opt.signer) {
|
|
386
396
|
opt.tags = buildTags(
|
|
387
397
|
null,
|
|
@@ -456,6 +466,77 @@ export default ({ AR, scheduler, mu, su, cu, acc, AoLoader, ArMem } = {}) => {
|
|
|
456
466
|
}
|
|
457
467
|
return id
|
|
458
468
|
}
|
|
469
|
+
const recover = async (pid, next) => {
|
|
470
|
+
let count = 0
|
|
471
|
+
let success = false
|
|
472
|
+
if (hb) {
|
|
473
|
+
if (onRecovery[pid]) {
|
|
474
|
+
let success = false
|
|
475
|
+
let i = 0
|
|
476
|
+
while (true) {
|
|
477
|
+
await wait(1000)
|
|
478
|
+
if (!onRecovery[pid]) {
|
|
479
|
+
success = true
|
|
480
|
+
break
|
|
481
|
+
}
|
|
482
|
+
if (i > 10) break
|
|
483
|
+
i++
|
|
484
|
+
}
|
|
485
|
+
return { success }
|
|
486
|
+
} else {
|
|
487
|
+
onRecovery[pid] = true
|
|
488
|
+
try {
|
|
489
|
+
const p = await mem.get("env", pid)
|
|
490
|
+
const from = p ? p.results.length : 0
|
|
491
|
+
const msgs = next
|
|
492
|
+
? await next()
|
|
493
|
+
: await hb.messages({ target: pid, from })
|
|
494
|
+
for (let v of msgs.edges) {
|
|
495
|
+
let item = {}
|
|
496
|
+
for (let k in v.node.message) {
|
|
497
|
+
item[k.toLowerCase()] = v.node.message[k]
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
item.tags.push({ name: "signature-input", value: "http-sig-" })
|
|
501
|
+
item.tags.push({
|
|
502
|
+
name: "siot",
|
|
503
|
+
value: Number(v.cursor).toString(),
|
|
504
|
+
})
|
|
505
|
+
item.tags.push({ name: "Owner", value: v.node.message.Owner })
|
|
506
|
+
// todo: why all the ids from Hyperbeam are the same?
|
|
507
|
+
item.tags.push({ name: "id", value: v.node.message.Id })
|
|
508
|
+
item.target = pid
|
|
509
|
+
|
|
510
|
+
let _tags = tags(item.tags)
|
|
511
|
+
if (_tags.Type === "Process") {
|
|
512
|
+
await spawn({
|
|
513
|
+
http_msg: item,
|
|
514
|
+
scheduler: _tags.Scheduler,
|
|
515
|
+
module: _tags.Module,
|
|
516
|
+
slot: v.cursor,
|
|
517
|
+
recovery: true,
|
|
518
|
+
})
|
|
519
|
+
} else {
|
|
520
|
+
await message({
|
|
521
|
+
process: pid,
|
|
522
|
+
http_msg: item,
|
|
523
|
+
slot: v.cursor,
|
|
524
|
+
recovery: true,
|
|
525
|
+
})
|
|
526
|
+
}
|
|
527
|
+
count++
|
|
528
|
+
}
|
|
529
|
+
if (msgs.next) await recover(pid, msgs.next)
|
|
530
|
+
} catch (e) {
|
|
531
|
+
console.log(e)
|
|
532
|
+
}
|
|
533
|
+
delete onRecovery[pid]
|
|
534
|
+
}
|
|
535
|
+
success = true
|
|
536
|
+
}
|
|
537
|
+
return { recovered: count, pid, success }
|
|
538
|
+
}
|
|
539
|
+
|
|
459
540
|
const result = async opt => (await mem.get("msgs", opt.message))?.res
|
|
460
541
|
return {
|
|
461
542
|
message,
|
|
@@ -552,6 +633,7 @@ export default ({ AR, scheduler, mu, su, cu, acc, AoLoader, ArMem } = {}) => {
|
|
|
552
633
|
}
|
|
553
634
|
return null
|
|
554
635
|
},
|
|
636
|
+
recover,
|
|
555
637
|
mem,
|
|
556
638
|
}
|
|
557
639
|
}
|
package/esm/bao.js
CHANGED
|
@@ -51,6 +51,7 @@ class AO extends MAO {
|
|
|
51
51
|
super({ ...opt, in_memory: true })
|
|
52
52
|
this.in_memory = true
|
|
53
53
|
this.createDataItemSigner = opt.createDataItemSigner ?? createDataItemSigner
|
|
54
|
+
this.hb = opt.hb
|
|
54
55
|
const {
|
|
55
56
|
modules,
|
|
56
57
|
results,
|
|
@@ -61,12 +62,15 @@ class AO extends MAO {
|
|
|
61
62
|
dryrun,
|
|
62
63
|
monitor,
|
|
63
64
|
unmonitor,
|
|
65
|
+
recover,
|
|
64
66
|
mem,
|
|
65
67
|
} = opt.connect(opt.mem, {
|
|
66
68
|
extensions: opt.extensions,
|
|
67
69
|
cache: opt.cache,
|
|
68
70
|
reset: opt.reset,
|
|
71
|
+
hb: this.hb,
|
|
69
72
|
})
|
|
73
|
+
this.recover = recover
|
|
70
74
|
this.assign = assign
|
|
71
75
|
this.result = async (...opt) => {
|
|
72
76
|
const res = await result(...opt)
|
|
@@ -95,6 +99,7 @@ class AO extends MAO {
|
|
|
95
99
|
async init(jwk) {
|
|
96
100
|
if (!jwk && this.acc[0]) jwk = this.acc[0].jwk
|
|
97
101
|
await this.ar.init(jwk)
|
|
102
|
+
if (this.hb) await this.hb.init(jwk)
|
|
98
103
|
return this
|
|
99
104
|
}
|
|
100
105
|
|
package/esm/bar.js
CHANGED
|
@@ -37,8 +37,13 @@ class AR extends MAR {
|
|
|
37
37
|
}
|
|
38
38
|
async httpmsg(msg) {
|
|
39
39
|
const tags = t(msg.tags)
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
let owner = null
|
|
41
|
+
try {
|
|
42
|
+
const { keyid: n } = parseSignatureInput(tags["signature-input"])
|
|
43
|
+
owner = await this.arweave.wallets.jwkToAddress({ n })
|
|
44
|
+
} catch (e) {
|
|
45
|
+
owner = tags.Owner ?? null
|
|
46
|
+
}
|
|
42
47
|
await this.mem.set(msg, "txs", msg.id)
|
|
43
48
|
return { item: msg, id: tags.id, tags, owner }
|
|
44
49
|
}
|
|
@@ -65,6 +70,7 @@ class AR extends MAR {
|
|
|
65
70
|
for (const v of buildTags(null, tags)) tx.addTag(v.name, v.value)
|
|
66
71
|
return await this.postTx(tx, jwk)
|
|
67
72
|
}
|
|
73
|
+
|
|
68
74
|
async postItems(items, jwk) {
|
|
69
75
|
let err = null
|
|
70
76
|
;({ err, jwk } = await this.checkWallet({ jwk }))
|
package/esm/hb.js
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { connect, createSigner } from "aoconnect-wao"
|
|
2
|
-
import { mergeLeft } from "ramda"
|
|
2
|
+
import { last, isNotNil, mergeLeft } from "ramda"
|
|
3
3
|
import { randomBytes } from "node:crypto"
|
|
4
4
|
import { buildTags } from "./utils.js"
|
|
5
|
+
|
|
5
6
|
class HB {
|
|
6
7
|
constructor({ url = "http://localhost:10000" } = {}) {
|
|
7
8
|
this.url = url
|
|
8
9
|
}
|
|
9
10
|
|
|
10
11
|
async metrics() {
|
|
11
|
-
const txt = await fetch(`${this.url}/metrics`).then(r =>
|
|
12
|
+
const txt = await fetch(`${this.url}/~hyperbuddy@1.0/metrics`).then(r =>
|
|
13
|
+
r.text()
|
|
14
|
+
)
|
|
12
15
|
const parts = txt.split(/\r?\n/)
|
|
13
16
|
let index = 0
|
|
14
17
|
let _metrics = {}
|
|
@@ -59,7 +62,24 @@ class HB {
|
|
|
59
62
|
return this
|
|
60
63
|
}
|
|
61
64
|
|
|
62
|
-
async
|
|
65
|
+
async messages({ target, from, to, limit } = {}) {
|
|
66
|
+
let params = `target=${target}`
|
|
67
|
+
if (isNotNil(from)) params += `&from=${from}`
|
|
68
|
+
if (isNotNil(to)) params += `&to=${to}`
|
|
69
|
+
params += `&accept=application/aos-2`
|
|
70
|
+
let res = await fetch(`${this.url}/~scheduler@1.0/schedule?${params}`).then(
|
|
71
|
+
r => r.json()
|
|
72
|
+
)
|
|
73
|
+
if (res.page_info.has_next_page) {
|
|
74
|
+
res.next = async () => {
|
|
75
|
+
const from2 = last(res.edges).cursor + 1
|
|
76
|
+
return await this.message({ target, from2, to })
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return res
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
async process({ tags = {}, data } = {}) {
|
|
63
83
|
tags = mergeLeft(tags, {
|
|
64
84
|
data,
|
|
65
85
|
Type: "Process",
|
|
@@ -74,7 +94,8 @@ class HB {
|
|
|
74
94
|
"scheduler-device": "scheduler@1.0",
|
|
75
95
|
"execution-device": "genesis-wasm@1.0",
|
|
76
96
|
})
|
|
77
|
-
|
|
97
|
+
const res = await this.post({ tags })
|
|
98
|
+
return await res.process.text()
|
|
78
99
|
}
|
|
79
100
|
|
|
80
101
|
async schedule({ tags = {}, data, process, action = "Eval" } = {}) {
|
|
@@ -96,10 +117,12 @@ class HB {
|
|
|
96
117
|
})
|
|
97
118
|
}
|
|
98
119
|
|
|
99
|
-
async dryrun({ tags = {}, process, action } = {}) {
|
|
120
|
+
async dryrun({ tags = {}, process, action, data } = {}) {
|
|
100
121
|
if (typeof action === "string") tags.Action = action
|
|
122
|
+
let json = { Tags: buildTags(tags) }
|
|
123
|
+
if (data) json.Data = data
|
|
101
124
|
return await fetch(
|
|
102
|
-
`${this.url}/~relay@1.0/call?relay-method=POST&relay-path=/dry-run?process-id=${process}/&content-type=application/json&body=${JSON.stringify(
|
|
125
|
+
`${this.url}/~relay@1.0/call?relay-method=POST&relay-path=/dry-run?process-id=${process}/&content-type=application/json&body=${JSON.stringify(json)}`
|
|
103
126
|
).then(r => r.json())
|
|
104
127
|
}
|
|
105
128
|
|
package/esm/run.js
CHANGED
|
@@ -8,6 +8,7 @@ let {
|
|
|
8
8
|
memory = false,
|
|
9
9
|
port = 4000,
|
|
10
10
|
db = ".cache",
|
|
11
|
+
hb,
|
|
11
12
|
} = yargs(process.argv.slice(2)).argv
|
|
12
13
|
db = memory ? null : resolve(process.cwd(), db)
|
|
13
14
|
if (reset) {
|
|
@@ -15,6 +16,6 @@ if (reset) {
|
|
|
15
16
|
unlinkSync(db)
|
|
16
17
|
} catch (e) {}
|
|
17
18
|
}
|
|
18
|
-
const main = async () => new Server({ log: true, port, db })
|
|
19
|
+
const main = async () => new Server({ log: true, port, db, hb_url: hb })
|
|
19
20
|
|
|
20
21
|
main()
|