wao 0.10.1 → 0.10.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.
@@ -14,7 +14,7 @@ import {
14
14
  dirname,
15
15
  } from "./utils.js"
16
16
  import weavedrive from "./weavedrive.js"
17
- import { is, clone, fromPairs, map, mergeLeft, isNil } from "ramda"
17
+ import { is, clone, fromPairs, map, mergeLeft, isNil, dissoc, o } from "ramda"
18
18
 
19
19
  export default ({ AR, scheduler, mu, su, cu, acc, AoLoader, ArMem } = {}) => {
20
20
  return (mem, { cache, log = false, extensions = {} } = {}) => {
@@ -70,12 +70,12 @@ export default ({ AR, scheduler, mu, su, cu, acc, AoLoader, ArMem } = {}) => {
70
70
  return {
71
71
  Process: {
72
72
  Id: pid,
73
- Tags: (await mem.get("txs", pid))?.tags ?? [],
73
+ Tags: (await mem.getTx(pid))?.tags ?? [],
74
74
  Owner: owner,
75
75
  },
76
76
  Module: {
77
77
  Id: module,
78
- Tags: (await mem.get("txs", module))?.tags ?? [],
78
+ Tags: (await mem.getTx(module))?.tags ?? [],
79
79
  },
80
80
  }
81
81
  }
@@ -124,7 +124,7 @@ export default ({ AR, scheduler, mu, su, cu, acc, AoLoader, ArMem } = {}) => {
124
124
  format,
125
125
  WeaveDrive: wdrive,
126
126
  spawn: item,
127
- module: await mem.get("txs", mod),
127
+ module: await mem.getTx(mod),
128
128
  })
129
129
  } catch (e) {}
130
130
  if (!handle) return null
@@ -136,7 +136,6 @@ export default ({ AR, scheduler, mu, su, cu, acc, AoLoader, ArMem } = {}) => {
136
136
  let memory = opt.memory ?? null
137
137
  let p = {
138
138
  extension: ext,
139
- item: item?.binary,
140
139
  format,
141
140
  id: id,
142
141
  epochs: [],
@@ -146,10 +145,8 @@ export default ({ AR, scheduler, mu, su, cu, acc, AoLoader, ArMem } = {}) => {
146
145
  memory,
147
146
  owner,
148
147
  height: 0,
149
- res: { [id]: res },
148
+ //res: { [id]: res },
150
149
  results: [id],
151
- txs: [],
152
- opt,
153
150
  }
154
151
  if (memory) {
155
152
  // forking...
@@ -166,11 +163,12 @@ export default ({ AR, scheduler, mu, su, cu, acc, AoLoader, ArMem } = {}) => {
166
163
  res = await _module.handle(null, msg, _env)
167
164
  p.memory = res.Memory
168
165
  delete res.Memory
169
- p.res[id] = res
166
+ //p.res[id] = res
170
167
  } else {
171
168
  p.height += 1
172
169
  }
173
- await mem.set(opt, "msgs", id)
170
+ const _msg = { ...o(dissoc("signer"), dissoc("memory"))(opt), res }
171
+ await mem.set(_msg, "msgs", id)
174
172
  if (_tags["Cron-Interval"]) {
175
173
  let [num, unit] = _tags["Cron-Interval"].split("-")
176
174
  let int = 0
@@ -285,19 +283,19 @@ export default ({ AR, scheduler, mu, su, cu, acc, AoLoader, ArMem } = {}) => {
285
283
  p.handle = await AoLoader(wasm, {
286
284
  format,
287
285
  WeaveDrive: wdrive,
288
- spawn: new DataItem(p.item),
289
- module: await mem.get("txs", mod),
286
+ spawn: (await mem.getTx(p.id)).item,
287
+ module: await mem.getTx(mod),
290
288
  })
291
289
  mem.env[opt.process].handle = p.handle
292
290
  }
293
291
  const res = await p.handle(p.memory, msg, _env)
294
292
  p.memory = res.Memory
295
293
  delete res.Memory
296
- p.res[opt.message] = res
294
+ //p.res[opt.message] = res
297
295
  p.results.push(opt.message)
298
- p.txs.unshift({ id, ...opt })
299
296
  await mem.set(p, "env", opt.process)
300
- await mem.set(_opt, "msgs", opt.message)
297
+ const _msg = { ...dissoc("signer", _opt), res }
298
+ await mem.set(_msg, "msgs", opt.message)
301
299
  for (const v of res.Messages ?? []) {
302
300
  if (await mem.get("env", v.Target)) {
303
301
  await message({
@@ -361,7 +359,7 @@ export default ({ AR, scheduler, mu, su, cu, acc, AoLoader, ArMem } = {}) => {
361
359
  if (opt.for) {
362
360
  opt.tags.push({ name: "Pushed-For", value: opt.for })
363
361
  opt.tags.push({ name: "From-Process", value: opt.from })
364
- const pr = (await mem.get("txs", opt.from))?.tags ?? []
362
+ const pr = (await mem.getTx(opt.from))?.tags ?? []
365
363
  const module = tags(pr).Module
366
364
  if (module) opt.tags.push({ name: "From-Module", value: module })
367
365
  }
@@ -372,7 +370,8 @@ export default ({ AR, scheduler, mu, su, cu, acc, AoLoader, ArMem } = {}) => {
372
370
  target: opt.process,
373
371
  }))
374
372
  }
375
- await mem.set(opt, "msgs", id)
373
+ const _msg = dissoc("signer", opt)
374
+ await mem.set(_msg, "msgs", id)
376
375
  await assign({
377
376
  message_item: item,
378
377
  message: id,
@@ -408,20 +407,22 @@ export default ({ AR, scheduler, mu, su, cu, acc, AoLoader, ArMem } = {}) => {
408
407
  spawn,
409
408
  assign,
410
409
  ar,
411
- result: async opt =>
412
- (await mem.get("env", opt.process))?.res[opt.message],
410
+ result: async opt => (await mem.get("msgs", opt.message))?.res,
413
411
  results: async opt => {
414
412
  const p = await mem.get("env", opt.process)
415
413
  let results = []
416
414
  const limit = opt.limit ?? 25
417
415
  if (opt.sort === "DESC") {
418
416
  for (let i = p.results.length - 1; 0 < i; i--) {
419
- results.push({ cursor: p.results[i], node: p.res[p.results[i]] })
417
+ results.push({
418
+ cursor: p.results[i],
419
+ node: await this.result(p.results[i]),
420
+ })
420
421
  if (results.length >= limit) break
421
422
  }
422
423
  } else {
423
424
  for (let i = 0; i < p.results.length; i++) {
424
- results.push({ node: p.res[p.results[i]] })
425
+ results.push({ node: await this.result(p.results[i]) })
425
426
  if (results.length >= limit) break
426
427
  }
427
428
  }
@@ -464,8 +465,8 @@ export default ({ AR, scheduler, mu, su, cu, acc, AoLoader, ArMem } = {}) => {
464
465
  p.handle = await AoLoader(wasm, {
465
466
  format,
466
467
  WeaveDrive: wdrive,
467
- spawn: new DataItem(p.item),
468
- module: await mem.get("txs", mod),
468
+ spawn: (await mem.getTx(p.id)).item,
469
+ module: await mem.getTx(mod),
469
470
  })
470
471
  mem.env[opt.process].handle = p.handle
471
472
  }
package/esm/armem-base.js CHANGED
@@ -1,8 +1,10 @@
1
1
  import _Arweave from "arweave"
2
2
  const Arweave = _Arweave.default ?? _Arweave
3
+ import { Bundle } from "arbundles"
3
4
  import { compress, decompress } from "./compress.js"
4
5
  import { last, assoc, is } from "ramda"
5
6
  import { buildTags, tags } from "./utils.js"
7
+ import base64url from "base64url"
6
8
 
7
9
  export default class ArMemBase {
8
10
  constructor({
@@ -29,6 +31,11 @@ export default class ArMemBase {
29
31
  this.scheduler = scheduler
30
32
  this.SU_URL = SU_URL
31
33
  }
34
+ async owner(di) {
35
+ return base64url.encode(
36
+ Buffer.from(await crypto.subtle.digest("SHA-256", di.rawOwner)),
37
+ )
38
+ }
32
39
  getAnchor() {
33
40
  return this.blocks.length === 0
34
41
  ? "Do_Uc2Sju_ffp6Ev0AnLVdPtot15rvMjP-a9VVaA5fM"
@@ -66,9 +73,9 @@ export default class ArMemBase {
66
73
  }
67
74
  }
68
75
  initSync() {
76
+ this.items = {}
69
77
  this.addrmap = {}
70
78
  this.txs = {}
71
- this.jwks = {}
72
79
  this.blocks = []
73
80
  this.blockmap = {}
74
81
  this.env = {}
@@ -152,8 +159,8 @@ export default class ArMemBase {
152
159
  if (this.db) {
153
160
  for (const v of ["height", "blocks"]) this[v] = await this.get(v)
154
161
  for (const v of [
162
+ "items",
155
163
  "txs",
156
- "jwks",
157
164
  "env",
158
165
  "modules",
159
166
  "wasms",
@@ -191,6 +198,36 @@ export default class ArMemBase {
191
198
  }
192
199
  }
193
200
  }
201
+ async getTx(id) {
202
+ let tx = this.txs[id]
203
+ if (tx.bundle) {
204
+ try {
205
+ let bundle = new Bundle(this.txs[tx.bundle].data)
206
+ for (let di of bundle.items) {
207
+ if (id === di.id) {
208
+ const data = di.data
209
+ const data_size = Buffer.byteLength(di.rawData).toString()
210
+ let data_type = ""
211
+ for (const t of di.tags)
212
+ if (t.name === "Content-Type") data_type = t.value
213
+ const owner = await this.owner(di)
214
+ tx = {
215
+ _data: { size: data_size, type: data_type },
216
+ anchor: di.anchor,
217
+ signature: di.signature,
218
+ recipient: di.target,
219
+ id: await di.id,
220
+ item: di,
221
+ owner,
222
+ tags: di.tags,
223
+ data,
224
+ }
225
+ }
226
+ }
227
+ } catch (e) {}
228
+ }
229
+ return tx
230
+ }
194
231
  async getWasm(module) {
195
232
  let mod = module ?? this.modules.aos2_0_1
196
233
  if (!mod) throw Error("module not found")
@@ -202,7 +239,7 @@ export default class ArMemBase {
202
239
  wasm = await this._getWasm(this.wasms[mod].file)
203
240
  format = _wasm.format
204
241
  } else {
205
- const tx = await this.get("txs", mod)
242
+ const tx = await this.getTx(mod)
206
243
  if (tx) {
207
244
  wasm = Buffer.from(tx.data, "base64")
208
245
  format = tags(tx.tags)["Module-Format"]
@@ -3,7 +3,7 @@ import { buildTags, tags as t } from "./utils.js"
3
3
  import * as WarpArBundles from "warp-arbundles"
4
4
  const pkg = WarpArBundles.default ?? WarpArBundles
5
5
  const { DataItem } = pkg
6
- import { bundleAndSignData, ArweaveSigner } from "arbundles"
6
+ import { Bundle, bundleAndSignData, ArweaveSigner } from "arbundles"
7
7
  import base64url from "base64url"
8
8
  import GQL from "./tgql.js"
9
9
  import { last, is, includes, isNil } from "ramda"
@@ -18,21 +18,16 @@ class AR extends MAR {
18
18
  this.arweave = this.mem.arweave
19
19
  }
20
20
  async owner(di) {
21
- const raw_owner = di.rawOwner
22
- const hashBuffer = Buffer.from(
23
- await crypto.subtle.digest("SHA-256", raw_owner),
21
+ return base64url.encode(
22
+ Buffer.from(await crypto.subtle.digest("SHA-256", di.rawOwner)),
24
23
  )
25
- return base64url.encode(hashBuffer)
26
24
  }
27
25
  async dataitem({ target = "", data = "1984", tags = {}, signer, item }) {
28
26
  let di = item
29
27
  if (!di) {
30
- const _tags = buildTags(tags)
31
- const _item = await signer({ data, tags: _tags, target })
28
+ const _item = await signer({ data, tags: buildTags(tags), target })
32
29
  di = new DataItem(_item.raw)
33
- } else {
34
- tags = t(di.tags)
35
- }
30
+ } else tags = t(di.tags)
36
31
  const owner = await this.owner(di)
37
32
  return { id: await di.id, owner, item: di, tags }
38
33
  }
@@ -42,8 +37,7 @@ class AR extends MAR {
42
37
  ;({ err, jwk } = await this.checkWallet({ jwk }))
43
38
  if (err) return { err }
44
39
  let tx = await this.arweave.createTransaction({ data: data })
45
- let _tags = buildTags(null, tags)
46
- for (const v of _tags) tx.addTag(v.name, v.value)
40
+ for (const v of buildTags(null, tags)) tx.addTag(v.name, v.value)
47
41
  return await this.postTx(tx, jwk)
48
42
  }
49
43
 
@@ -129,7 +123,7 @@ class AR extends MAR {
129
123
  }
130
124
  block.txs.push(item.id)
131
125
  _txs.block = block.id
132
- await this.mem.set(_txs, "txs", item.id)
126
+ await this.mem.set({ bundle: tx.id }, "txs", item.id)
133
127
  }
134
128
  }
135
129
  let _tags = []
@@ -179,7 +173,7 @@ class AR extends MAR {
179
173
  }
180
174
 
181
175
  async tx(id) {
182
- return await this.mem.get("txs", id)
176
+ return await this.mem.getTx(id)
183
177
  }
184
178
 
185
179
  async data(id, _string, log) {
@@ -189,7 +183,7 @@ class AR extends MAR {
189
183
  if (!isNil(_string.decode)) decode = _string.decode
190
184
  if (!isNil(_string.string)) string = _string.string
191
185
  }
192
- let tx = await this.mem.get("txs", id)
186
+ let tx = await this.mem.getTx(id)
193
187
  let _data = tx?.data ?? null
194
188
  if (tx?.format === 2 && _data) {
195
189
  _data = Buffer.from(_data, "base64")
package/esm/lfdb.js CHANGED
@@ -4,7 +4,6 @@ import { is, keys } from "ramda"
4
4
  export default _this => {
5
5
  return {
6
6
  put: async (key, val) => {
7
- console.log(key, val)
8
7
  let _val = null
9
8
  if (typeof val === "object" && !is(Array, val)) {
10
9
  _val = {}
package/esm/server.js CHANGED
@@ -216,13 +216,13 @@ class Server {
216
216
  )
217
217
  app.get("/:pid", (req, res) => {
218
218
  const pid = req.params.pid
219
- const edges = map(v => {
220
- const tx = this.mem.txs[v.id]
219
+ const edges = map(async v => {
220
+ const tx = await this.mem.getTx(v)
221
221
  const _tags = tags(v.tags)
222
222
  const mid = _tags.Message
223
- const mtx = this.mem.txs[mid]
223
+ const mtx = await this.mem.getTx(mid)
224
224
  return {
225
- cursor: v.id,
225
+ cursor: v,
226
226
  node: {
227
227
  message: {
228
228
  id: mtx.id,
@@ -243,7 +243,7 @@ class Server {
243
243
  },
244
244
  },
245
245
  }
246
- })(reverse(this.mem.env[pid]?.txs ?? []))
246
+ })(reverse(this.mem.env[pid]?.results ?? [])) // need mod
247
247
  res.json({ page_info: { has_next_page: false }, edges })
248
248
  })
249
249
  const server = app.listen(this.ports.su, () =>
package/esm/tar.js CHANGED
@@ -1,4 +1,4 @@
1
- import BAR from "./ar-base.js"
1
+ import BAR from "./bar.js"
2
2
  import ArMem from "./armem.js"
3
3
 
4
4
  class AR extends BAR {
package/esm/tgql.js CHANGED
@@ -10,6 +10,7 @@ const subs = {
10
10
  parent: ["id"],
11
11
  bundledIn: ["id"],
12
12
  }
13
+
13
14
  const field = (key, val = true) => {
14
15
  if (includes(key, ["id", "anchor", "signature", "recipient"])) {
15
16
  return { key }
@@ -101,8 +102,7 @@ export default class GQL {
101
102
  break
102
103
  }
103
104
  if (!isNil(opt.after) && count === 0 && !after) continue
104
- let tx = this.mem.txs[v2]
105
-
105
+ let tx = await this.mem.getTx(v2)
106
106
  if (!isNil(ids) && ids.length > 0) {
107
107
  if (!includes(tx.id, ids)) continue
108
108
  }
package/esm/war.js CHANGED
@@ -1,4 +1,4 @@
1
- import BAR from "./ar-base.js"
1
+ import BAR from "./bar.js"
2
2
  import ArMem from "./armem-web.js"
3
3
 
4
4
  class AR extends BAR {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wao",
3
- "version": "0.10.1",
3
+ "version": "0.10.2",
4
4
  "bin": {
5
5
  "wao": "./cjs/cli.js",
6
6
  "wao-esm": "./esm/cli.js"