wao 0.8.4 → 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/ao.js +259 -322
- package/cjs/aoconnect.js +167 -84
- package/cjs/lua/aos1_x.wasm +0 -0
- package/cjs/utils.js +132 -18
- package/esm/.db/766288/data/ppl/bob.json +1 -0
- package/esm/ao.js +71 -136
- package/esm/aoconnect.js +12 -1
- package/esm/lua/aos1_x.wasm +0 -0
- package/esm/utils.js +106 -17
- package/package.json +1 -1
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,
|
|
@@ -379,11 +381,42 @@ class AO {
|
|
|
379
381
|
tags = {},
|
|
380
382
|
check = [],
|
|
381
383
|
get,
|
|
382
|
-
timeout =
|
|
384
|
+
timeout = 0,
|
|
383
385
|
}) {
|
|
384
386
|
let err = null
|
|
385
387
|
;({ jwk, err } = await this.ar.checkWallet({ jwk }))
|
|
386
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
|
+
}
|
|
387
420
|
let [res, out, mid, results] = [null, null, null, []]
|
|
388
421
|
let _tags = buildTags(act, tags)
|
|
389
422
|
let start = Date.now()
|
|
@@ -394,108 +427,51 @@ class AO {
|
|
|
394
427
|
tags: _tags,
|
|
395
428
|
data: jsonToStr(data),
|
|
396
429
|
})
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
fields: ["id", "recipient", "tags", { owner: ["address"] }],
|
|
413
|
-
})
|
|
414
|
-
ex = exRef(ref, txs)
|
|
415
|
-
}
|
|
416
|
-
if (ex) return txs
|
|
417
|
-
if (this.in_memory) await wait(1)
|
|
418
|
-
return Date.now() - start < timeout ? await getRef(ref) : []
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
let [cache, checks, isOK] = [[], [], false]
|
|
422
|
-
const getResult = async mid => {
|
|
423
|
-
const res = await this.result({ process: pid, message: mid })
|
|
424
|
-
results.push({ mid, res })
|
|
425
|
-
let err = null
|
|
426
|
-
if (res.Error) err = res.Error
|
|
427
|
-
else {
|
|
428
|
-
if (!is(Array, check)) check = [check]
|
|
429
|
-
let i = 0
|
|
430
|
-
for (const v of check) {
|
|
431
|
-
let _checks = checks[i] ?? null
|
|
432
|
-
if (isRegExp(v) || includes(typeof v)(["string", "boolean"])) {
|
|
433
|
-
_checks = mergeChecks(_checks, isData(v, res), v)
|
|
434
|
-
} else {
|
|
435
|
-
const checks2 = {}
|
|
436
|
-
for (const k in v ?? {}) {
|
|
437
|
-
checks2[k] = checkTag(res, k, v[k])
|
|
438
|
-
}
|
|
439
|
-
_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 })
|
|
440
445
|
}
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
if (isCheckComplete(checks, check)) isOK = true
|
|
445
|
-
if (!isNil(get) && !isOutComplete(out, get)) {
|
|
446
|
-
out = mergeOut(out, getTagVal(get, res), get)
|
|
446
|
+
_txmap[v.id].res = _res
|
|
447
|
+
checked = allChecked(check, _res, v.from)
|
|
448
|
+
if (checked) break
|
|
447
449
|
}
|
|
448
450
|
}
|
|
449
|
-
if (
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
for (const v2 of txs) {
|
|
464
|
-
const _ltags2 = ltags(v2.tags)
|
|
465
|
-
if (
|
|
466
|
-
_ltags2.type === "Message" &&
|
|
467
|
-
_ltags2["x-reference"] === _ltags.reference
|
|
468
|
-
) {
|
|
469
|
-
const {
|
|
470
|
-
res: _res,
|
|
471
|
-
out: _out,
|
|
472
|
-
err: _err,
|
|
473
|
-
ok: _ok,
|
|
474
|
-
} = await getResult(v2.id)
|
|
475
|
-
if (_err) {
|
|
476
|
-
err = _err
|
|
477
|
-
break
|
|
478
|
-
}
|
|
479
|
-
if (!isOutComplete(out, get) && _out)
|
|
480
|
-
out = mergeOut(out, _out, get)
|
|
481
|
-
if (isOutComplete(out, get) && isOK) break
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
if (isOutComplete(out, get) && isOK) break
|
|
485
|
-
}
|
|
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)
|
|
486
465
|
}
|
|
487
466
|
}
|
|
488
|
-
return { res, err }
|
|
489
467
|
}
|
|
490
|
-
;({ res, err } = await getResult(mid))
|
|
491
|
-
if (!isOK && !err) err = "something went wrong!"
|
|
492
468
|
} catch (e) {
|
|
493
469
|
err = e
|
|
494
470
|
}
|
|
495
471
|
return { mid, res, err, out, results }
|
|
496
472
|
}
|
|
497
473
|
|
|
498
|
-
async asgn({ pid, mid, jwk, check, get }) {
|
|
474
|
+
async asgn({ pid, mid, jwk, check = [], get }) {
|
|
499
475
|
let err = null
|
|
500
476
|
;({ jwk, err } = await this.ar.checkWallet({ jwk }))
|
|
501
477
|
if (err) return { err }
|
|
@@ -509,28 +485,11 @@ class AO {
|
|
|
509
485
|
})
|
|
510
486
|
res = await this.result({ process: pid, message: mid })
|
|
511
487
|
if (!res) err = "something went wrong"
|
|
512
|
-
|
|
513
488
|
if (res.Error) err = res.Error
|
|
514
489
|
else {
|
|
515
|
-
let checks = []
|
|
516
490
|
if (!is(Array, check)) check = [check]
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
let _checks = checks[i] ?? null
|
|
520
|
-
if (isRegExp(v) || includes(typeof v)(["string", "boolean"])) {
|
|
521
|
-
_checks = mergeChecks(_checks, isData(v, res), v)
|
|
522
|
-
} else {
|
|
523
|
-
const checks2 = {}
|
|
524
|
-
for (const k in v ?? {}) {
|
|
525
|
-
checks2[k] = checkTag(res, k, v[k])
|
|
526
|
-
}
|
|
527
|
-
_checks = mergeChecks(_checks, checks2, v)
|
|
528
|
-
}
|
|
529
|
-
checks[i] = _checks
|
|
530
|
-
i++
|
|
531
|
-
}
|
|
532
|
-
if (!isCheckComplete(checks, check)) err = "something went wrong"
|
|
533
|
-
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
|
|
534
493
|
}
|
|
535
494
|
} catch (e) {
|
|
536
495
|
err = e
|
|
@@ -538,16 +497,7 @@ class AO {
|
|
|
538
497
|
return { mid, res, err, out }
|
|
539
498
|
}
|
|
540
499
|
|
|
541
|
-
async dry({
|
|
542
|
-
pid,
|
|
543
|
-
jwk,
|
|
544
|
-
data,
|
|
545
|
-
act = "Eval",
|
|
546
|
-
tags = {},
|
|
547
|
-
check,
|
|
548
|
-
get,
|
|
549
|
-
timeout = 10000,
|
|
550
|
-
}) {
|
|
500
|
+
async dry({ pid, jwk, data, act = "Eval", tags = {}, check = [], get }) {
|
|
551
501
|
let err = null
|
|
552
502
|
;({ jwk, err } = await this.ar.checkWallet({ jwk }))
|
|
553
503
|
if (err) return { err }
|
|
@@ -563,22 +513,7 @@ class AO {
|
|
|
563
513
|
res = _res
|
|
564
514
|
let checks = []
|
|
565
515
|
if (!is(Array, check)) check = [check]
|
|
566
|
-
|
|
567
|
-
for (const v of check) {
|
|
568
|
-
let _checks = checks[i] ?? null
|
|
569
|
-
if (isRegExp(v) || includes(typeof v)(["string", "boolean"])) {
|
|
570
|
-
_checks = mergeChecks(_checks, isData(v, res), v)
|
|
571
|
-
} else {
|
|
572
|
-
const checks2 = {}
|
|
573
|
-
for (const k in v ?? {}) {
|
|
574
|
-
checks2[k] = checkTag(res, k, v[k])
|
|
575
|
-
}
|
|
576
|
-
_checks = mergeChecks(_checks, checks2, v)
|
|
577
|
-
}
|
|
578
|
-
checks[i] = _checks
|
|
579
|
-
i++
|
|
580
|
-
}
|
|
581
|
-
if (!isCheckComplete(checks, check)) err = "something went wrong"
|
|
516
|
+
if (!allChecked(check, res)) err = "something went wrong"
|
|
582
517
|
if (!err && !isNil(get)) out = getTagVal(get, res)
|
|
583
518
|
} catch (e) {
|
|
584
519
|
err = e
|
package/esm/aoconnect.js
CHANGED
|
@@ -105,6 +105,7 @@ export const connect = (mem, { cache, log = false, extensions = {} } = {}) => {
|
|
|
105
105
|
let ex = false
|
|
106
106
|
for (let v of opt.tags) if (v.name === "Type") ex = true
|
|
107
107
|
if (!ex) opt.tags.push({ name: "Type", value: "Process" })
|
|
108
|
+
if (opt.for) opt.tags.push({ name: "Pushed-For", value: opt.for })
|
|
108
109
|
const {
|
|
109
110
|
id,
|
|
110
111
|
owner,
|
|
@@ -306,6 +307,7 @@ export const connect = (mem, { cache, log = false, extensions = {} } = {}) => {
|
|
|
306
307
|
for (const v of res.Messages ?? []) {
|
|
307
308
|
if (await mem.get("env", v.Target)) {
|
|
308
309
|
await message({
|
|
310
|
+
for: opt.message,
|
|
309
311
|
process: v.Target,
|
|
310
312
|
tags: v.Tags,
|
|
311
313
|
data: v.Data,
|
|
@@ -317,6 +319,7 @@ export const connect = (mem, { cache, log = false, extensions = {} } = {}) => {
|
|
|
317
319
|
for (const v of res.Spawns ?? []) {
|
|
318
320
|
const __tags = tags(v.Tags)
|
|
319
321
|
await spawn({
|
|
322
|
+
for: opt.message,
|
|
320
323
|
module: __tags.Module,
|
|
321
324
|
scheduler,
|
|
322
325
|
tags: v.Tags,
|
|
@@ -361,6 +364,14 @@ export const connect = (mem, { cache, log = false, extensions = {} } = {}) => {
|
|
|
361
364
|
SDK: "aoconnect",
|
|
362
365
|
}),
|
|
363
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
|
+
|
|
364
375
|
;({ item, id, owner } = await ar.dataitem({
|
|
365
376
|
data: opt.data,
|
|
366
377
|
signer: opt.signer,
|
|
@@ -404,7 +415,7 @@ export const connect = (mem, { cache, log = false, extensions = {} } = {}) => {
|
|
|
404
415
|
spawn,
|
|
405
416
|
assign,
|
|
406
417
|
ar,
|
|
407
|
-
result: async opt => (await mem.get("env", opt.process))
|
|
418
|
+
result: async opt => (await mem.get("env", opt.process))?.res[opt.message],
|
|
408
419
|
results: async opt => {
|
|
409
420
|
const p = await mem.get("env", opt.process)
|
|
410
421
|
let results = []
|
|
Binary file
|
package/esm/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { graphql, parse, validate, buildSchema } from "graphql"
|
|
2
2
|
|
|
3
|
-
import { clone, is, includes, fromPairs, map, isNil } from "ramda"
|
|
3
|
+
import { clone, is, includes, fromPairs, map, isNil, equals } from "ramda"
|
|
4
4
|
|
|
5
5
|
const allows = [
|
|
6
6
|
{ key: "allowed", val: "Allowed" },
|
|
@@ -86,6 +86,8 @@ const isData = (data, res) => {
|
|
|
86
86
|
try {
|
|
87
87
|
if (data.test(v.Data)) return true
|
|
88
88
|
} catch (e) {}
|
|
89
|
+
} else if (typeof data === "function") {
|
|
90
|
+
return data(v.Data)
|
|
89
91
|
} else {
|
|
90
92
|
if (data === true || v.Data === data) return true
|
|
91
93
|
}
|
|
@@ -149,6 +151,7 @@ const modGet = get => {
|
|
|
149
151
|
} else if (
|
|
150
152
|
is(Object, get) &&
|
|
151
153
|
isNil(get.data) &&
|
|
154
|
+
isNil(get.from) &&
|
|
152
155
|
isNil(get.json) &&
|
|
153
156
|
isNil(get.name) &&
|
|
154
157
|
isNil(get.obj)
|
|
@@ -158,23 +161,32 @@ const modGet = get => {
|
|
|
158
161
|
return _get
|
|
159
162
|
}
|
|
160
163
|
|
|
161
|
-
const _getTagVal = (get, res) => {
|
|
164
|
+
const _getTagVal = (get, res, from) => {
|
|
162
165
|
let out = null
|
|
163
166
|
const _get = modGet(get)
|
|
164
167
|
if (typeof _get === "object" && _get.obj) {
|
|
165
168
|
out = {}
|
|
166
|
-
for (const k in _get.obj ?? {}) out[k] = _getTagVal(_get.obj[k], res)
|
|
169
|
+
for (const k in _get.obj ?? {}) out[k] = _getTagVal(_get.obj[k], res, from)
|
|
167
170
|
} else {
|
|
168
171
|
for (const v of res.Messages ?? []) {
|
|
172
|
+
if (typeof _get === "object" && isNil(_get.name) && isNil(_get.data)) {
|
|
173
|
+
_get.data = true
|
|
174
|
+
}
|
|
169
175
|
if (
|
|
170
176
|
(typeof _get === "object" && _get.data) ||
|
|
171
177
|
typeof _get === "boolean"
|
|
172
178
|
) {
|
|
179
|
+
let _from = null
|
|
180
|
+
if (is(Object, _get) && _get.from) _from = _get.from
|
|
181
|
+
if (_from && _from !== from) break
|
|
173
182
|
if (v.Data) out = v.Data
|
|
174
183
|
try {
|
|
175
184
|
if (_get.json || _get === true) out = JSON.parse(out)
|
|
176
185
|
} catch (e) {}
|
|
177
186
|
} else if (typeof _get === "object" && typeof _get.name === "string") {
|
|
187
|
+
let _from = null
|
|
188
|
+
if (is(Object, _get) && _get.from) _from = _get.from
|
|
189
|
+
if (_from && _from !== from) break
|
|
178
190
|
out = getTag(v.Tags ?? [], _get.name)
|
|
179
191
|
try {
|
|
180
192
|
if (_get.json) out = JSON.parse(out)
|
|
@@ -186,9 +198,9 @@ const _getTagVal = (get, res) => {
|
|
|
186
198
|
return out
|
|
187
199
|
}
|
|
188
200
|
|
|
189
|
-
const getTagVal = (get, res) => {
|
|
201
|
+
const getTagVal = (get, res, from) => {
|
|
190
202
|
const _get = modGet(get)
|
|
191
|
-
return _getTagVal(_get, res)
|
|
203
|
+
return _getTagVal(_get, res, from)
|
|
192
204
|
}
|
|
193
205
|
|
|
194
206
|
const srcs = {
|
|
@@ -218,7 +230,7 @@ const buildTags = (act, tags) => {
|
|
|
218
230
|
|
|
219
231
|
const mergeOut = (out, out2, get) => {
|
|
220
232
|
const _get = modGet(get)
|
|
221
|
-
if (_get
|
|
233
|
+
if (_get?.obj) {
|
|
222
234
|
for (const k in out2 ?? {}) {
|
|
223
235
|
if (isNil(out?.[k])) {
|
|
224
236
|
if (!out) out = {}
|
|
@@ -243,27 +255,20 @@ const isOutComplete = (out, get) => {
|
|
|
243
255
|
if (isNil(get)) return true
|
|
244
256
|
if (isNil(out)) return false
|
|
245
257
|
const _get = modGet(get)
|
|
246
|
-
if (_get.obj) {
|
|
247
|
-
for (const k in out ?? {}) {
|
|
248
|
-
if (isNil(out[k])) return false
|
|
249
|
-
}
|
|
250
|
-
}
|
|
258
|
+
if (_get.obj) for (const k in out ?? {}) if (isNil(out[k])) return false
|
|
251
259
|
return true
|
|
252
260
|
}
|
|
253
261
|
|
|
254
262
|
const isCheckComplete = (checks, check) => {
|
|
255
263
|
let i = 0
|
|
256
|
-
for (const v of checks) {
|
|
264
|
+
for (const v of checks || []) {
|
|
265
|
+
if (!v) return false
|
|
257
266
|
if (
|
|
258
267
|
isRegExp(check[i]) ||
|
|
259
268
|
includes(typeof check[i])(["string", "boolean"])
|
|
260
269
|
) {
|
|
261
270
|
if (!v) return false
|
|
262
|
-
} else
|
|
263
|
-
for (const k in v) {
|
|
264
|
-
if (!v[k]) return false
|
|
265
|
-
}
|
|
266
|
-
}
|
|
271
|
+
} else for (const k in v) if (!v[k]) return false
|
|
267
272
|
i++
|
|
268
273
|
}
|
|
269
274
|
return true
|
|
@@ -534,7 +539,91 @@ const optServer = port => {
|
|
|
534
539
|
return { ar: port, mu: port + 2, su: port + 3, cu: port + 4 }
|
|
535
540
|
}
|
|
536
541
|
|
|
542
|
+
const allChecked = (check, res, from) => {
|
|
543
|
+
let checks = []
|
|
544
|
+
let i = 0
|
|
545
|
+
for (let v of check || []) {
|
|
546
|
+
let _checks = checks[i] ?? null
|
|
547
|
+
if (isRegExp(v) || includes(typeof v)(["string", "boolean", "function"])) {
|
|
548
|
+
_checks = isData(v, res)
|
|
549
|
+
} else {
|
|
550
|
+
const _checkVal = (val, data) => {
|
|
551
|
+
if (isRegExp(val)) {
|
|
552
|
+
try {
|
|
553
|
+
if (val.test(data)) return true
|
|
554
|
+
} catch (e) {}
|
|
555
|
+
} else if (typeof val === "function") {
|
|
556
|
+
return val(data)
|
|
557
|
+
} else if (typeof val === "object" && !isNil(val.json)) {
|
|
558
|
+
try {
|
|
559
|
+
data = JSON.parse(data)
|
|
560
|
+
if (typeof val.json === "function") {
|
|
561
|
+
return val.json(data)
|
|
562
|
+
} else if (typeof val.json === "object") {
|
|
563
|
+
if (val.eq) return equals(data, val.json)
|
|
564
|
+
let ok = true
|
|
565
|
+
for (let k in val.json) {
|
|
566
|
+
if (!_checkVal(val.json[k], data[k])) {
|
|
567
|
+
ok = false
|
|
568
|
+
break
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
return ok
|
|
572
|
+
} else if (val.json === true) {
|
|
573
|
+
return true
|
|
574
|
+
}
|
|
575
|
+
} catch (e) {
|
|
576
|
+
return false
|
|
577
|
+
}
|
|
578
|
+
} else {
|
|
579
|
+
if (val === true || data === val) return true
|
|
580
|
+
}
|
|
581
|
+
return false
|
|
582
|
+
}
|
|
583
|
+
const checkVal = (res, val, name) => {
|
|
584
|
+
for (let v of res.Messages || []) {
|
|
585
|
+
let data = v.Data
|
|
586
|
+
if (!isNil(name)) {
|
|
587
|
+
const t = tags(v.Tags || [])
|
|
588
|
+
data = t[name]
|
|
589
|
+
}
|
|
590
|
+
if (isNil(data)) return false
|
|
591
|
+
return _checkVal(val, data)
|
|
592
|
+
}
|
|
593
|
+
return false
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
if (typeof v === "object") {
|
|
597
|
+
if (!isNil(v.json)) {
|
|
598
|
+
const _from = v.from
|
|
599
|
+
v = { data: v, from: _from }
|
|
600
|
+
} else if (isNil(v.tags) && isNil(v.data) && isNil(v.from)) {
|
|
601
|
+
v = { tags: v }
|
|
602
|
+
}
|
|
603
|
+
const _from = v.from ?? null
|
|
604
|
+
let checks2 = {}
|
|
605
|
+
if (!isNil(v.from) && v.from !== from) {
|
|
606
|
+
_checks = false
|
|
607
|
+
} else {
|
|
608
|
+
let ok = true
|
|
609
|
+
if (!isNil(v.data)) {
|
|
610
|
+
if (!checkVal(res, v.data)) ok = false
|
|
611
|
+
}
|
|
612
|
+
for (const k in v.tags ?? {}) {
|
|
613
|
+
if (!checkVal(res, v.tags[k], k)) ok = false
|
|
614
|
+
}
|
|
615
|
+
_checks = ok
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
checks[i] = _checks
|
|
620
|
+
i++
|
|
621
|
+
}
|
|
622
|
+
return isCheckComplete(checks, check)
|
|
623
|
+
}
|
|
624
|
+
|
|
537
625
|
export {
|
|
626
|
+
allChecked,
|
|
538
627
|
optAO,
|
|
539
628
|
optServer,
|
|
540
629
|
toGraphObj,
|