wao 0.8.3 → 0.8.5

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/cli.js CHANGED
File without changes
Binary file
package/cjs/tao.js CHANGED
@@ -87,7 +87,6 @@ var AO = /*#__PURE__*/function (_MAO) {
87
87
  monitor = _connect.monitor,
88
88
  unmonitor = _connect.unmonitor,
89
89
  mem = _connect.mem;
90
- _this.module = mem.modules.aos2_0_1;
91
90
  _this.assign = assign;
92
91
  _this.result = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
93
92
  var res,
package/cjs/utils.js CHANGED
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isData = exports.isCheckComplete = exports.getTagVal = exports.getTag = exports.dirname = exports.checkTag = exports.buildTags = exports.action = void 0;
6
+ exports.isData = exports.isCheckComplete = exports.getTagVal = exports.getTag = exports.dirname = exports.checkTag = exports.buildTags = exports.allChecked = exports.action = void 0;
7
7
  exports.isJSON = isJSON;
8
8
  exports.wait = exports.validAddress = exports.udl = exports.toGraphObj = exports.tags = exports.tagEq = exports.tag = exports.srcs = exports.searchTag = exports.optServer = exports.optAO = exports.mergeOut = exports.mergeChecks = exports.ltags = exports.jsonToStr = exports.isRegExp = exports.isOutComplete = exports.isLocalhost = void 0;
9
9
  var _graphql = require("graphql");
@@ -200,6 +200,8 @@ var isData = exports.isData = function isData(data, res) {
200
200
  try {
201
201
  if (data.test(v.Data)) return true;
202
202
  } catch (e) {}
203
+ } else if (typeof data === "function") {
204
+ return data(v.Data);
203
205
  } else {
204
206
  if (data === true || v.Data === data) return true;
205
207
  }
@@ -274,21 +276,21 @@ var modGet = function modGet(get) {
274
276
  } finally {
275
277
  _iterator4.f();
276
278
  }
277
- } else if ((0, _ramda.is)(Object, get) && (0, _ramda.isNil)(get.data) && (0, _ramda.isNil)(get.json) && (0, _ramda.isNil)(get.name) && (0, _ramda.isNil)(get.obj)) {
279
+ } else if ((0, _ramda.is)(Object, get) && (0, _ramda.isNil)(get.data) && (0, _ramda.isNil)(get.from) && (0, _ramda.isNil)(get.json) && (0, _ramda.isNil)(get.name) && (0, _ramda.isNil)(get.obj)) {
278
280
  _get = {
279
281
  obj: get
280
282
  };
281
283
  }
282
284
  return _get;
283
285
  };
284
- var _getTagVal2 = function _getTagVal(get, res) {
286
+ var _getTagVal2 = function _getTagVal(get, res, from) {
285
287
  var out = null;
286
288
  var _get = modGet(get);
287
289
  if (_typeof(_get) === "object" && _get.obj) {
288
290
  out = {};
289
291
  for (var k in (_get$obj = _get.obj) !== null && _get$obj !== void 0 ? _get$obj : {}) {
290
292
  var _get$obj;
291
- out[k] = _getTagVal2(_get.obj[k], res);
293
+ out[k] = _getTagVal2(_get.obj[k], res, from);
292
294
  }
293
295
  } else {
294
296
  var _res$Messages2;
@@ -298,13 +300,22 @@ var _getTagVal2 = function _getTagVal(get, res) {
298
300
  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
299
301
  var _v$Tags2;
300
302
  var v = _step5.value;
303
+ if (_typeof(_get) === "object" && (0, _ramda.isNil)(_get.name) && (0, _ramda.isNil)(_get.data)) {
304
+ _get.data = true;
305
+ }
301
306
  if (_typeof(_get) === "object" && _get.data || typeof _get === "boolean") {
307
+ var _from = null;
308
+ if ((0, _ramda.is)(Object, _get) && _get.from) _from = _get.from;
309
+ if (_from && _from !== from) break;
302
310
  if (v.Data) out = v.Data;
303
311
  try {
304
312
  if (_get.json || _get === true) out = JSON.parse(out);
305
313
  } catch (e) {}
306
314
  } else if (_typeof(_get) === "object" && typeof _get.name === "string") {
307
315
  var _v$Tags;
316
+ var _from2 = null;
317
+ if ((0, _ramda.is)(Object, _get) && _get.from) _from2 = _get.from;
318
+ if (_from2 && _from2 !== from) break;
308
319
  out = getTag((_v$Tags = v.Tags) !== null && _v$Tags !== void 0 ? _v$Tags : [], _get.name);
309
320
  try {
310
321
  if (_get.json) out = JSON.parse(out);
@@ -320,16 +331,19 @@ var _getTagVal2 = function _getTagVal(get, res) {
320
331
  }
321
332
  return out;
322
333
  };
323
- var getTagVal = exports.getTagVal = function getTagVal(get, res) {
334
+ var getTagVal = exports.getTagVal = function getTagVal(get, res, from) {
324
335
  var _get = modGet(get);
325
- return _getTagVal2(_get, res);
336
+ return _getTagVal2(_get, res, from);
326
337
  };
327
338
  var srcs = exports.srcs = {
328
339
  module: "cNlipBptaF9JeFAf4wUmpi43EojNanIBos3EfNrEOWo",
329
340
  module_sqlite: "ghSkge2sIUD_F00ym5sEimC63BDBuBrq4b5OcwxOjiw",
330
341
  module_aos2: "Do_Uc2Sju_ffp6Ev0AnLVdPtot15rvMjP-a9VVaA5fM",
331
342
  scheduler: "_GQ33BkPtZrqxA84vM8Zk-N2aO0toNNu_C-l-rawrBA",
332
- authority: "fcoN_xJeisVsPXA-trzVAuIiqO3ydLQxM-L4XbrQKzY"
343
+ authority: "fcoN_xJeisVsPXA-trzVAuIiqO3ydLQxM-L4XbrQKzY",
344
+ module_wao: "Do_Uc2Sju_ffp6Ev0AnLVdPtot15rvMjP-a9VVaA5fM",
345
+ scheduler_wao: "_GQ33BkPtZrqxA84vM8Zk-N2aO0toNNu_C-l-rawrBA",
346
+ authority_wao: "eNaLJLsMiWCSWvQKNbk_YT-9ydeWl9lrWwXxLVp9kcg"
333
347
  };
334
348
  var buildTags = exports.buildTags = function buildTags(act, tags) {
335
349
  var _tags = [];
@@ -358,7 +372,7 @@ var buildTags = exports.buildTags = function buildTags(act, tags) {
358
372
  };
359
373
  var mergeOut = exports.mergeOut = function mergeOut(out, out2, get) {
360
374
  var _get = modGet(get);
361
- if (_get.obj) {
375
+ if (_get !== null && _get !== void 0 && _get.obj) {
362
376
  for (var k in out2 !== null && out2 !== void 0 ? out2 : {}) {
363
377
  var _out;
364
378
  if ((0, _ramda.isNil)((_out = out) === null || _out === void 0 ? void 0 : _out[k])) {
@@ -382,27 +396,20 @@ var isOutComplete = exports.isOutComplete = function isOutComplete(out, get) {
382
396
  if ((0, _ramda.isNil)(get)) return true;
383
397
  if ((0, _ramda.isNil)(out)) return false;
384
398
  var _get = modGet(get);
385
- if (_get.obj) {
386
- for (var k in out !== null && out !== void 0 ? out : {}) {
387
- if ((0, _ramda.isNil)(out[k])) return false;
388
- }
389
- }
399
+ if (_get.obj) for (var k in out !== null && out !== void 0 ? out : {}) if ((0, _ramda.isNil)(out[k])) return false;
390
400
  return true;
391
401
  };
392
402
  var isCheckComplete = exports.isCheckComplete = function isCheckComplete(checks, check) {
393
403
  var i = 0;
394
- var _iterator7 = _createForOfIteratorHelper(checks),
404
+ var _iterator7 = _createForOfIteratorHelper(checks || []),
395
405
  _step7;
396
406
  try {
397
407
  for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
398
408
  var v = _step7.value;
409
+ if (!v) return false;
399
410
  if (isRegExp(check[i]) || (0, _ramda.includes)(_typeof(check[i]))(["string", "boolean"])) {
400
411
  if (!v) return false;
401
- } else {
402
- for (var k in v) {
403
- if (!v[k]) return false;
404
- }
405
- }
412
+ } else for (var k in v) if (!v[k]) return false;
406
413
  i++;
407
414
  }
408
415
  } catch (err) {
@@ -611,4 +618,114 @@ var optServer = exports.optServer = function optServer(port) {
611
618
  su: port + 3,
612
619
  cu: port + 4
613
620
  };
621
+ };
622
+ var allChecked = exports.allChecked = function allChecked(check, res, from) {
623
+ var checks = [];
624
+ var i = 0;
625
+ var _iterator11 = _createForOfIteratorHelper(check || []),
626
+ _step11;
627
+ try {
628
+ var _loop = function _loop() {
629
+ var _checks$i;
630
+ var v = _step11.value;
631
+ var _checks = (_checks$i = checks[i]) !== null && _checks$i !== void 0 ? _checks$i : null;
632
+ if (isRegExp(v) || (0, _ramda.includes)(_typeof(v))(["string", "boolean", "function"])) {
633
+ _checks = isData(v, res);
634
+ } else {
635
+ var _checkVal2 = function _checkVal(val, data) {
636
+ if (isRegExp(val)) {
637
+ try {
638
+ if (val.test(data)) return true;
639
+ } catch (e) {}
640
+ } else if (typeof val === "function") {
641
+ return val(data);
642
+ } else if (_typeof(val) === "object" && !(0, _ramda.isNil)(val.json)) {
643
+ try {
644
+ data = JSON.parse(data);
645
+ if (typeof val.json === "function") {
646
+ return val.json(data);
647
+ } else if (_typeof(val.json) === "object") {
648
+ if (val.eq) return (0, _ramda.equals)(data, val.json);
649
+ var ok = true;
650
+ for (var k in val.json) {
651
+ if (!_checkVal2(val.json[k], data[k])) {
652
+ ok = false;
653
+ break;
654
+ }
655
+ }
656
+ return ok;
657
+ } else if (val.json === true) {
658
+ return true;
659
+ }
660
+ } catch (e) {
661
+ return false;
662
+ }
663
+ } else {
664
+ if (val === true || data === val) return true;
665
+ }
666
+ return false;
667
+ };
668
+ var checkVal = function checkVal(res, val, name) {
669
+ var _iterator12 = _createForOfIteratorHelper(res.Messages || []),
670
+ _step12;
671
+ try {
672
+ for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
673
+ var _v2 = _step12.value;
674
+ var data = _v2.Data;
675
+ if (!(0, _ramda.isNil)(name)) {
676
+ var t = tags(_v2.Tags || []);
677
+ data = t[name];
678
+ }
679
+ if ((0, _ramda.isNil)(data)) return false;
680
+ return _checkVal2(val, data);
681
+ }
682
+ } catch (err) {
683
+ _iterator12.e(err);
684
+ } finally {
685
+ _iterator12.f();
686
+ }
687
+ return false;
688
+ };
689
+ if (_typeof(v) === "object") {
690
+ var _v$from;
691
+ if (!(0, _ramda.isNil)(v.json)) {
692
+ var _from3 = v.from;
693
+ v = {
694
+ data: v,
695
+ from: _from3
696
+ };
697
+ } else if ((0, _ramda.isNil)(v.tags) && (0, _ramda.isNil)(v.data) && (0, _ramda.isNil)(v.from)) {
698
+ v = {
699
+ tags: v
700
+ };
701
+ }
702
+ var _from = (_v$from = v.from) !== null && _v$from !== void 0 ? _v$from : null;
703
+ var checks2 = {};
704
+ if (!(0, _ramda.isNil)(v.from) && v.from !== from) {
705
+ _checks = false;
706
+ } else {
707
+ var ok = true;
708
+ if (!(0, _ramda.isNil)(v.data)) {
709
+ if (!checkVal(res, v.data)) ok = false;
710
+ }
711
+ for (var k in (_v$tags = v.tags) !== null && _v$tags !== void 0 ? _v$tags : {}) {
712
+ var _v$tags;
713
+ if (!checkVal(res, v.tags[k], k)) ok = false;
714
+ }
715
+ _checks = ok;
716
+ }
717
+ }
718
+ }
719
+ checks[i] = _checks;
720
+ i++;
721
+ };
722
+ for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
723
+ _loop();
724
+ }
725
+ } catch (err) {
726
+ _iterator11.e(err);
727
+ } finally {
728
+ _iterator11.f();
729
+ }
730
+ return isCheckComplete(checks, check);
614
731
  };
@@ -0,0 +1 @@
1
+ {"name":"Bob","age":40}
package/esm/ao.js CHANGED
@@ -17,6 +17,7 @@ import {
17
17
  } from "@permaweb/aoconnect"
18
18
 
19
19
  import {
20
+ equals,
20
21
  concat,
21
22
  is,
22
23
  mergeLeft,
@@ -29,6 +30,7 @@ import {
29
30
  } from "ramda"
30
31
 
31
32
  import {
33
+ allChecked,
32
34
  searchTag,
33
35
  checkTag,
34
36
  wait,
@@ -78,10 +80,11 @@ class AO {
78
80
  in_memory = false,
79
81
  port,
80
82
  } = opt
81
-
82
83
  if (!_port && port) _port = port
83
84
  if (!aoconnect && _port) aoconnect = optAO(_port)
84
85
  if (!ar && _port) ar = { port: _port }
86
+ this.wao = opt.wao
87
+ if (isNil(this.wao)) this.wao = in_memory || !isNil(ar?.port)
85
88
  if (!module) {
86
89
  switch (module_type) {
87
90
  case "sqlite":
@@ -130,9 +133,15 @@ class AO {
130
133
  this.monitor = monitor
131
134
  this.unmonitor = unmonitor
132
135
  }
133
- this.module = module
134
- this.scheduler = scheduler
135
- this.authority = authority
136
+ if (this.wao) {
137
+ this.module = srcs.module_wao
138
+ this.scheduler = srcs.scheduler_wao
139
+ this.authority = srcs.authority_wao
140
+ } else {
141
+ this.module = module
142
+ this.scheduler = scheduler
143
+ this.authority = authority
144
+ }
136
145
  }
137
146
 
138
147
  async init(jwk) {
@@ -372,11 +381,42 @@ class AO {
372
381
  tags = {},
373
382
  check = [],
374
383
  get,
375
- timeout = 10000,
384
+ timeout = 0,
376
385
  }) {
377
386
  let err = null
378
387
  ;({ jwk, err } = await this.ar.checkWallet({ jwk }))
379
388
  if (err) return { err }
389
+ const getNewTxs = async (pid, _txs, _txmap) => {
390
+ const txs = await this.ar.gql.txs({
391
+ recipient: pid,
392
+ fields: ["id", "recipient", "tags", { owner: ["address"] }],
393
+ })
394
+ for (const v of txs) {
395
+ if (isNil(_txmap[v.id])) {
396
+ const t = ltags(v.tags)
397
+ if (t.type === "Message") {
398
+ v.from = t["from-process"] ?? v.owner?.address
399
+ _txs.unshift(v)
400
+ _txmap[v.id] = { checked: false, ref: t["x-reference"] }
401
+ }
402
+ }
403
+ }
404
+ }
405
+ const checkOut = async (get, _txs, _txmap) => {
406
+ let out = null
407
+ for (let v of _txs) {
408
+ if (isNil(_txmap[v.id].res)) {
409
+ const res = await this.result({ process: pid, message: v.id })
410
+ _txmap[v.id].res = res
411
+ }
412
+ if (!isNil(_txmap[v.id].res) && _txmap[v.id].out !== true) {
413
+ _txmap[v.id].out = true
414
+ out = getTagVal(get, _txmap[v.id].res, v.from)
415
+ if (out) break
416
+ }
417
+ }
418
+ return out
419
+ }
380
420
  let [res, out, mid, results] = [null, null, null, []]
381
421
  let _tags = buildTags(act, tags)
382
422
  let start = Date.now()
@@ -387,108 +427,51 @@ class AO {
387
427
  tags: _tags,
388
428
  data: jsonToStr(data),
389
429
  })
390
-
391
- const exRef = (ref, txs) => {
392
- for (const v2 of txs ?? []) {
393
- const t = ltags(v2.tags)
394
- if (t.type === "Message" && t["x-reference"] === ref) return true
395
- }
396
- return false
397
- }
398
-
399
- const getRef = async (ref, txs = []) => {
400
- let ex = exRef(ref, txs)
401
- if (!ex) {
402
- if (!this.in_memory) await wait(1000)
403
- txs = await this.ar.gql.txs({
404
- recipient: pid,
405
- fields: ["id", "recipient", "tags", { owner: ["address"] }],
406
- })
407
- ex = exRef(ref, txs)
408
- }
409
- if (ex) return txs
410
- if (this.in_memory) await wait(1)
411
- return Date.now() - start < timeout ? await getRef(ref) : []
412
- }
413
-
414
- let [cache, checks, isOK] = [[], [], false]
415
- const getResult = async mid => {
416
- const res = await this.result({ process: pid, message: mid })
417
- results.push({ mid, res })
418
- let err = null
419
- if (res.Error) err = res.Error
420
- else {
421
- if (!is(Array, check)) check = [check]
422
- let i = 0
423
- for (const v of check) {
424
- let _checks = checks[i] ?? null
425
- if (isRegExp(v) || includes(typeof v)(["string", "boolean"])) {
426
- _checks = mergeChecks(_checks, isData(v, res), v)
427
- } else {
428
- const checks2 = {}
429
- for (const k in v ?? {}) {
430
- checks2[k] = checkTag(res, k, v[k])
431
- }
432
- _checks = mergeChecks(_checks, checks2, v)
430
+ if (!is(Array, check)) check = [check]
431
+ let _txs = [{ id: mid, from: await this.ar.toAddr(jwk) }]
432
+ let _txmap = {}
433
+ const t = ltags(_tags)
434
+ let checked = false
435
+ _txmap[mid] = { checked: false, ref: t["x-reference"] }
436
+ do {
437
+ for (let v of _txs) {
438
+ if (!_txmap[v.id].checked) {
439
+ _txmap[v.id].checked = true
440
+ const _res = await this.result({ process: pid, message: v.id })
441
+ if (isNil(res)) {
442
+ res = _res
443
+ mid = v.id
444
+ results.push({ mid, res })
433
445
  }
434
- checks[i] = _checks
435
- i++
436
- }
437
- if (isCheckComplete(checks, check)) isOK = true
438
- if (!isNil(get) && !isOutComplete(out, get)) {
439
- out = mergeOut(out, getTagVal(get, res), get)
446
+ _txmap[v.id].res = _res
447
+ checked = allChecked(check, _res, v.from)
448
+ if (checked) break
440
449
  }
441
450
  }
442
- if ((!isOutComplete(out, get) || !isOK) && !err) {
443
- let refs = []
444
- for (const v of res.Messages) {
445
- const _ltags = ltags(v.Tags)
446
- if (_ltags.type === "Message" && _ltags.reference) {
447
- refs.push(_ltags.reference)
448
- }
449
- }
450
-
451
- for (const v of res.Messages) {
452
- const _ltags = ltags(v.Tags)
453
- if (_ltags.type === "Message" && _ltags.reference) {
454
- const txs = await getRef(_ltags.reference, cache)
455
- cache = o(uniqBy(prop("id")), concat(cache))(txs)
456
- for (const v2 of txs) {
457
- const _ltags2 = ltags(v2.tags)
458
- if (
459
- _ltags2.type === "Message" &&
460
- _ltags2["x-reference"] === _ltags.reference
461
- ) {
462
- const {
463
- res: _res,
464
- out: _out,
465
- err: _err,
466
- ok: _ok,
467
- } = await getResult(v2.id)
468
- if (_err) {
469
- err = _err
470
- break
471
- }
472
- if (!isOutComplete(out, get) && _out)
473
- out = mergeOut(out, _out, get)
474
- if (isOutComplete(out, get) && isOK) break
475
- }
476
- }
477
- if (isOutComplete(out, get) && isOK) break
478
- }
451
+ if (checked) break
452
+ await wait(1000)
453
+ await getNewTxs(pid, _txs, _txmap)
454
+ } while (Date.now() - start < timeout)
455
+ if (!checked) {
456
+ err = "something went wrong!"
457
+ } else {
458
+ out = mergeOut(out, await checkOut(get, _txs, _txmap), get)
459
+ if (!isOutComplete(out, get) && !isNil(get)) {
460
+ while (Date.now() - start < timeout) {
461
+ await getNewTxs(pid, _txs, _txmap)
462
+ out = mergeOut(out, await checkOut(get, _txs, _txmap), get)
463
+ if (isOutComplete(out, get)) break
464
+ await wait(1000)
479
465
  }
480
466
  }
481
- return { res, err }
482
467
  }
483
- ;({ res, err } = await getResult(mid))
484
- if (!isOK && !err) err = "something went wrong!"
485
468
  } catch (e) {
486
469
  err = e
487
470
  }
488
471
  return { mid, res, err, out, results }
489
472
  }
490
473
 
491
- async asgn({ pid, mid, jwk, check, get }) {
474
+ async asgn({ pid, mid, jwk, check = [], get }) {
492
475
  let err = null
493
476
  ;({ jwk, err } = await this.ar.checkWallet({ jwk }))
494
477
  if (err) return { err }
@@ -502,28 +485,11 @@ class AO {
502
485
  })
503
486
  res = await this.result({ process: pid, message: mid })
504
487
  if (!res) err = "something went wrong"
505
-
506
488
  if (res.Error) err = res.Error
507
489
  else {
508
- let checks = []
509
490
  if (!is(Array, check)) check = [check]
510
- let i = 0
511
- for (const v of check) {
512
- let _checks = checks[i] ?? null
513
- if (isRegExp(v) || includes(typeof v)(["string", "boolean"])) {
514
- _checks = mergeChecks(_checks, isData(v, res), v)
515
- } else {
516
- const checks2 = {}
517
- for (const k in v ?? {}) {
518
- checks2[k] = checkTag(res, k, v[k])
519
- }
520
- _checks = mergeChecks(_checks, checks2, v)
521
- }
522
- checks[i] = _checks
523
- i++
524
- }
525
- if (!isCheckComplete(checks, check)) err = "something went wrong"
526
- if (!err && !isNil(get)) out = getTagVal(get, res)
491
+ if (!allChecked(check, res)) err = "something went wrong"
492
+ if (!err && !isNil(get)) out = getTagVal(get, res) // todo: from
527
493
  }
528
494
  } catch (e) {
529
495
  err = e
@@ -531,16 +497,7 @@ class AO {
531
497
  return { mid, res, err, out }
532
498
  }
533
499
 
534
- async dry({
535
- pid,
536
- jwk,
537
- data,
538
- act = "Eval",
539
- tags = {},
540
- check,
541
- get,
542
- timeout = 10000,
543
- }) {
500
+ async dry({ pid, jwk, data, act = "Eval", tags = {}, check = [], get }) {
544
501
  let err = null
545
502
  ;({ jwk, err } = await this.ar.checkWallet({ jwk }))
546
503
  if (err) return { err }
@@ -556,22 +513,7 @@ class AO {
556
513
  res = _res
557
514
  let checks = []
558
515
  if (!is(Array, check)) check = [check]
559
- let i = 0
560
- for (const v of check) {
561
- let _checks = checks[i] ?? null
562
- if (isRegExp(v) || includes(typeof v)(["string", "boolean"])) {
563
- _checks = mergeChecks(_checks, isData(v, res), v)
564
- } else {
565
- const checks2 = {}
566
- for (const k in v ?? {}) {
567
- checks2[k] = checkTag(res, k, v[k])
568
- }
569
- _checks = mergeChecks(_checks, checks2, v)
570
- }
571
- checks[i] = _checks
572
- i++
573
- }
574
- if (!isCheckComplete(checks, check)) err = "something went wrong"
516
+ if (!allChecked(check, res)) err = "something went wrong"
575
517
  if (!err && !isNil(get)) out = getTagVal(get, res)
576
518
  } catch (e) {
577
519
  err = e
package/esm/aoconnect.js CHANGED
@@ -72,25 +72,16 @@ export const connect = (mem, { cache, log = false, extensions = {} } = {}) => {
72
72
  }
73
73
  }
74
74
 
75
- const genEnv = ({ pid, owner = "", module = "", auth = "" }) => {
75
+ const genEnv = async ({ pid, owner = "", module = "" }) => {
76
76
  return {
77
77
  Process: {
78
78
  Id: pid,
79
- Tags: [
80
- { name: "Data-Protocol", value: "ao" },
81
- { name: "Variant", value: "ao.TN.1" },
82
- { name: "Type", value: "Process" },
83
- { name: "Authority", value: auth },
84
- ],
79
+ Tags: (await mem.get("txs", pid))?.tags ?? [],
85
80
  Owner: owner,
86
81
  },
87
82
  Module: {
88
83
  Id: module,
89
- Tags: [
90
- { name: "Data-Protocol", value: "ao" },
91
- { name: "Variant", value: "ao.TN.1" },
92
- { name: "Type", value: "Module" },
93
- ],
84
+ Tags: (await mem.get("txs", module))?.tags ?? [],
94
85
  },
95
86
  }
96
87
  }
@@ -108,11 +99,13 @@ export const connect = (mem, { cache, log = false, extensions = {} } = {}) => {
108
99
  Module: mod,
109
100
  Scheduler: opt.scheduler,
110
101
  "Content-Type": "text/plain",
102
+ Authority: mu.addr,
111
103
  }),
112
104
  )
113
105
  let ex = false
114
106
  for (let v of opt.tags) if (v.name === "Type") ex = true
115
107
  if (!ex) opt.tags.push({ name: "Type", value: "Process" })
108
+ if (opt.for) opt.tags.push({ name: "Pushed-For", value: opt.for })
116
109
  const {
117
110
  id,
118
111
  owner,
@@ -171,11 +164,10 @@ export const connect = (mem, { cache, log = false, extensions = {} } = {}) => {
171
164
  if (_tags["On-Boot"] === "Data") data = opt.data ?? ""
172
165
  else data = (await mem.get("msgs", _tags["On-Boot"]))?.data ?? ""
173
166
  let msg = await genMsg(id, p, data, opt.tags, owner, mu.addr, true)
174
- const _env = genEnv({
167
+ const _env = await genEnv({
175
168
  pid: p.id,
176
169
  owner: p.owner,
177
170
  module: p.module,
178
- auth: mu.addr,
179
171
  })
180
172
  res = await _module.handle(null, msg, _env)
181
173
  p.memory = res.Memory
@@ -288,11 +280,10 @@ export const connect = (mem, { cache, log = false, extensions = {} } = {}) => {
288
280
  }
289
281
  // check: is owner=mu.addr right?
290
282
  const msg = await genMsg(opt.message, p, data, _tags, from, mu.addr)
291
- const _env = genEnv({
283
+ const _env = await genEnv({
292
284
  pid: p.id,
293
285
  owner: p.owner,
294
286
  module: p.module,
295
- auth: mu.addr,
296
287
  })
297
288
  if (!p.handle) {
298
289
  const { format, mod, wasm } = await mem.getWasm(p.modulea)
@@ -316,6 +307,7 @@ export const connect = (mem, { cache, log = false, extensions = {} } = {}) => {
316
307
  for (const v of res.Messages ?? []) {
317
308
  if (await mem.get("env", v.Target)) {
318
309
  await message({
310
+ for: opt.message,
319
311
  process: v.Target,
320
312
  tags: v.Tags,
321
313
  data: v.Data,
@@ -327,6 +319,7 @@ export const connect = (mem, { cache, log = false, extensions = {} } = {}) => {
327
319
  for (const v of res.Spawns ?? []) {
328
320
  const __tags = tags(v.Tags)
329
321
  await spawn({
322
+ for: opt.message,
330
323
  module: __tags.Module,
331
324
  scheduler,
332
325
  tags: v.Tags,
@@ -371,6 +364,14 @@ export const connect = (mem, { cache, log = false, extensions = {} } = {}) => {
371
364
  SDK: "aoconnect",
372
365
  }),
373
366
  )
367
+ if (opt.for) {
368
+ opt.tags.push({ name: "Pushed-For", value: opt.for })
369
+ opt.tags.push({ name: "From-Process", value: opt.from })
370
+ const pr = (await mem.get("txs", opt.from))?.tags ?? []
371
+ const module = tags(pr).Module
372
+ if (module) opt.tags.push({ name: "From-Module", value: module })
373
+ }
374
+
374
375
  ;({ item, id, owner } = await ar.dataitem({
375
376
  data: opt.data,
376
377
  signer: opt.signer,
@@ -414,7 +415,7 @@ export const connect = (mem, { cache, log = false, extensions = {} } = {}) => {
414
415
  spawn,
415
416
  assign,
416
417
  ar,
417
- result: async opt => (await mem.get("env", opt.process)).res[opt.message],
418
+ result: async opt => (await mem.get("env", opt.process))?.res[opt.message],
418
419
  results: async opt => {
419
420
  const p = await mem.get("env", opt.process)
420
421
  let results = []
@@ -450,11 +451,10 @@ export const connect = (mem, { cache, log = false, extensions = {} } = {}) => {
450
451
  mu.addr,
451
452
  true,
452
453
  )
453
- const _env = genEnv({
454
+ const _env = await genEnv({
454
455
  pid: p.id,
455
456
  owner: p.owner,
456
457
  module: p.module,
457
- auth: mu.addr,
458
458
  })
459
459
  function cloneMemory(memory) {
460
460
  const buffer = memory.buffer.slice(0)
package/esm/cli.js CHANGED
File without changes
Binary file