wao 0.41.3 → 0.41.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.
Files changed (719) hide show
  1. package/.babelrc-cjs +5 -0
  2. package/.babelrc-esm +5 -0
  3. package/.gitmodules +4 -0
  4. package/.prettierrc +6 -0
  5. package/README.md +90 -0
  6. package/app/.eslintrc.json +3 -0
  7. package/app/.mocharc.cjs +6 -0
  8. package/app/arweave.mjs +87 -0
  9. package/app/components/Footer.js +76 -0
  10. package/app/components/Global.js +1128 -0
  11. package/app/components/Header.js +306 -0
  12. package/app/components/Left.js +28 -0
  13. package/app/components/Logo.js +34 -0
  14. package/app/components/Middle.js +37 -0
  15. package/app/components/Sidebar.js +93 -0
  16. package/app/components/Tags.js +42 -0
  17. package/app/components/editor/Editor.js +322 -0
  18. package/app/components/editor/FilePath.js +42 -0
  19. package/app/components/editor/MonacoEditor.js +44 -0
  20. package/app/components/left/LeftMessages.js +85 -0
  21. package/app/components/left/LeftModules.js +86 -0
  22. package/app/components/left/LeftNetworks.js +438 -0
  23. package/app/components/left/LeftProcesses.js +98 -0
  24. package/app/components/left/LeftProjects.js +397 -0
  25. package/app/components/left/LeftTests.js +189 -0
  26. package/app/components/middle/MiddleBlocks.js +79 -0
  27. package/app/components/middle/MiddleEntity.js +16 -0
  28. package/app/components/middle/MiddleEntityAccount.js +264 -0
  29. package/app/components/middle/MiddleEntityAssignment.js +104 -0
  30. package/app/components/middle/MiddleEntityBlock.js +148 -0
  31. package/app/components/middle/MiddleEntityMessage.js +430 -0
  32. package/app/components/middle/MiddleEntityModule.js +183 -0
  33. package/app/components/middle/MiddleEntityProcess.js +323 -0
  34. package/app/components/middle/MiddleEntityTx.js +211 -0
  35. package/app/components/middle/MiddleMessages.js +87 -0
  36. package/app/components/middle/MiddleModules.js +89 -0
  37. package/app/components/middle/MiddleNetworks.js +516 -0
  38. package/app/components/middle/MiddleProcesses.js +87 -0
  39. package/app/components/middle/MiddleTests.js +134 -0
  40. package/app/components/modals/CreateFileModal.js +115 -0
  41. package/app/components/modals/CreateFolderModal.js +83 -0
  42. package/app/components/modals/CreateProjectModal.js +63 -0
  43. package/app/components/modals/FSModal.js +141 -0
  44. package/app/components/modals/ImportModal.js +105 -0
  45. package/app/components/modals/LaunchNetworkModal.js +95 -0
  46. package/app/components/modals/Modal.js +38 -0
  47. package/app/components/modals/ProxyModal.js +122 -0
  48. package/app/components/modals/RenameFileModal.js +95 -0
  49. package/app/components/styles/EditorScrollbarStyle.js +29 -0
  50. package/app/components/styles/EntityScrollbarStyle.js +29 -0
  51. package/app/components/styles/GlobalStyle.js +102 -0
  52. package/app/components/styles/XtermStyle.js +37 -0
  53. package/app/components/terminal/Terminal.js +132 -0
  54. package/app/components/terminal/Xterm.js +160 -0
  55. package/app/components/ui/avatar.jsx +49 -0
  56. package/app/components/ui/checkbox.jsx +17 -0
  57. package/app/components/ui/close-button.jsx +20 -0
  58. package/app/components/ui/color-mode.jsx +61 -0
  59. package/app/components/ui/dialog.jsx +54 -0
  60. package/app/components/ui/drawer.jsx +44 -0
  61. package/app/components/ui/field.jsx +22 -0
  62. package/app/components/ui/input-group.jsx +39 -0
  63. package/app/components/ui/popover.jsx +49 -0
  64. package/app/components/ui/provider.jsx +12 -0
  65. package/app/components/ui/radio.jsx +17 -0
  66. package/app/components/ui/slider.jsx +107 -0
  67. package/app/components/ui/toaster.jsx +69 -0
  68. package/app/components/ui/tooltip.jsx +35 -0
  69. package/app/index.js +10 -0
  70. package/app/jsconfig.json +7 -0
  71. package/app/lib/GithubCSS.js +1218 -0
  72. package/app/lib/addon-fit.js +72 -0
  73. package/app/lib/data.js +31 -0
  74. package/app/lib/github-markdown.css +1169 -0
  75. package/app/lib/global.js +1 -0
  76. package/app/lib/guide.js +82 -0
  77. package/app/lib/hub.js +109 -0
  78. package/app/lib/scripts.js +47 -0
  79. package/app/lib/store.js +34 -0
  80. package/app/lib/use.js +64 -0
  81. package/app/lib/utils.js +387 -0
  82. package/app/lib/webrtc.js +217 -0
  83. package/app/next.config.js +25 -0
  84. package/app/package.json +62 -0
  85. package/app/pages/404.js +9 -0
  86. package/app/pages/_app.js +10 -0
  87. package/app/pages/_document.js +14 -0
  88. package/app/pages/index.js +121 -0
  89. package/app/playwright.config.mjs +41 -0
  90. package/app/proxy.mjs +21 -0
  91. package/app/public/assets/cover.png +0 -0
  92. package/app/public/blueprints/apm.lua +91 -0
  93. package/app/public/blueprints/arena.lua +345 -0
  94. package/app/public/blueprints/arns.lua +318 -0
  95. package/app/public/blueprints/chat.lua +210 -0
  96. package/app/public/blueprints/chatroom.lua +56 -0
  97. package/app/public/blueprints/patch-legacy-reply.lua +13 -0
  98. package/app/public/blueprints/staking.lua +93 -0
  99. package/app/public/blueprints/token.lua +298 -0
  100. package/app/public/blueprints/voting.lua +45 -0
  101. package/app/public/favicon.ico +0 -0
  102. package/app/public/logo.png +0 -0
  103. package/cli-esm.js +55 -0
  104. package/cli.js +54 -0
  105. package/devnet/app/api.js +129 -0
  106. package/devnet/app/components/layout.js +89 -0
  107. package/devnet/app/components/pagination.js +144 -0
  108. package/devnet/app/components/search.js +159 -0
  109. package/devnet/app/components/table.js +124 -0
  110. package/devnet/app/components/tags.js +89 -0
  111. package/devnet/app/index.html +14 -0
  112. package/devnet/app/main.js +215 -0
  113. package/devnet/app/router.js +59 -0
  114. package/devnet/app/state.js +19 -0
  115. package/devnet/app/style.css +1606 -0
  116. package/devnet/app/utils.js +77 -0
  117. package/devnet/app/views/blocks.js +75 -0
  118. package/devnet/app/views/dashboard.js +127 -0
  119. package/devnet/app/views/entity.js +1473 -0
  120. package/devnet/app/views/messages.js +90 -0
  121. package/devnet/app/views/modules.js +165 -0
  122. package/devnet/app/views/processes.js +90 -0
  123. package/devnet/app/views/schedulers.js +90 -0
  124. package/devnet/app/views/transactions.js +88 -0
  125. package/devnet/migrations/0001_initial.sql +51 -0
  126. package/devnet/package.json +26 -0
  127. package/devnet/playwright.config.js +7 -0
  128. package/devnet/src/cu-worker.js +166 -0
  129. package/devnet/src/index.js +309 -0
  130. package/devnet/vite.config.js +17 -0
  131. package/devnet/vitest.config.js +10 -0
  132. package/devnet/wrangler-cu.toml +32 -0
  133. package/devnet/wrangler.toml +38 -0
  134. package/dhfs-tutorial-app/package.json +15 -0
  135. package/dist/esm/workspace/dashboard/public/favicon.png +0 -0
  136. package/dist/esm/workspace/src/counter.lua +14 -0
  137. package/dist/package.json +82 -0
  138. package/hb.sh +18 -0
  139. package/hbsig/.babelrc-cjs +5 -0
  140. package/hbsig/.babelrc-esm +5 -0
  141. package/hbsig/README.md +1 -0
  142. package/hbsig/dist/cjs/bin_to_str.js +44 -0
  143. package/hbsig/dist/cjs/collect-body-keys.js +470 -0
  144. package/hbsig/dist/cjs/commit.js +330 -0
  145. package/hbsig/dist/cjs/encode-array-item.js +110 -0
  146. package/hbsig/dist/cjs/encode-utils.js +242 -0
  147. package/hbsig/dist/cjs/encode.js +1365 -0
  148. package/hbsig/dist/cjs/erl_json.js +326 -0
  149. package/hbsig/dist/cjs/erl_str.js +1042 -0
  150. package/hbsig/dist/cjs/flat.js +279 -0
  151. package/hbsig/dist/cjs/http-message-signatures/httpbis.js +489 -0
  152. package/hbsig/dist/cjs/http-message-signatures/index.js +25 -0
  153. package/hbsig/dist/cjs/http-message-signatures/structured-header.js +129 -0
  154. package/hbsig/dist/cjs/httpsig.js +861 -0
  155. package/hbsig/dist/cjs/id.js +470 -0
  156. package/hbsig/dist/cjs/index.js +174 -0
  157. package/hbsig/dist/cjs/nocrypto.js +51 -0
  158. package/hbsig/dist/cjs/parser.js +201 -0
  159. package/hbsig/dist/cjs/send-utils.js +1231 -0
  160. package/hbsig/dist/cjs/send.js +211 -0
  161. package/hbsig/dist/cjs/signer-utils.js +494 -0
  162. package/hbsig/dist/cjs/signer.js +436 -0
  163. package/hbsig/dist/cjs/structured.js +515 -0
  164. package/hbsig/dist/cjs/test.js +12 -0
  165. package/hbsig/dist/cjs/utils.js +44 -0
  166. package/hbsig/dist/esm/bin_to_str.js +46 -0
  167. package/hbsig/dist/esm/collect-body-keys.js +436 -0
  168. package/hbsig/dist/esm/commit.js +219 -0
  169. package/hbsig/dist/esm/encode-array-item.js +112 -0
  170. package/hbsig/dist/esm/encode-utils.js +191 -0
  171. package/hbsig/dist/esm/encode.js +1256 -0
  172. package/hbsig/dist/esm/erl_json.js +292 -0
  173. package/hbsig/dist/esm/erl_str.js +1144 -0
  174. package/hbsig/dist/esm/flat.js +250 -0
  175. package/hbsig/dist/esm/http-message-signatures/httpbis.js +438 -0
  176. package/hbsig/dist/esm/http-message-signatures/index.js +4 -0
  177. package/hbsig/dist/esm/http-message-signatures/structured-header.js +105 -0
  178. package/hbsig/dist/esm/httpsig.js +866 -0
  179. package/hbsig/dist/esm/id.js +459 -0
  180. package/hbsig/dist/esm/index.js +13 -0
  181. package/hbsig/dist/esm/nocrypto.js +4 -0
  182. package/hbsig/dist/esm/package.json +3 -0
  183. package/hbsig/dist/esm/parser.js +171 -0
  184. package/hbsig/dist/esm/send-utils.js +1132 -0
  185. package/hbsig/dist/esm/send.js +142 -0
  186. package/hbsig/dist/esm/signer-utils.js +375 -0
  187. package/hbsig/dist/esm/signer.js +312 -0
  188. package/hbsig/dist/esm/structured.js +496 -0
  189. package/hbsig/dist/esm/test.js +2 -0
  190. package/hbsig/dist/esm/utils.js +29 -0
  191. package/hbsig/dist/package.json +39 -0
  192. package/hbsig/make.js +36 -0
  193. package/hbsig/package.json +39 -0
  194. package/hbsig/src/bin_to_str.js +46 -0
  195. package/hbsig/src/collect-body-keys.js +436 -0
  196. package/hbsig/src/commit.js +219 -0
  197. package/hbsig/src/encode-array-item.js +112 -0
  198. package/hbsig/src/encode-utils.js +191 -0
  199. package/hbsig/src/encode.js +1256 -0
  200. package/hbsig/src/erl_json.js +292 -0
  201. package/hbsig/src/erl_str.js +1144 -0
  202. package/hbsig/src/flat.js +250 -0
  203. package/hbsig/src/http-message-signatures/httpbis.js +438 -0
  204. package/hbsig/src/http-message-signatures/index.js +4 -0
  205. package/hbsig/src/http-message-signatures/structured-header.js +105 -0
  206. package/hbsig/src/httpsig.js +866 -0
  207. package/hbsig/src/id.js +459 -0
  208. package/hbsig/src/index.js +13 -0
  209. package/hbsig/src/nocrypto.js +4 -0
  210. package/hbsig/src/parser.js +171 -0
  211. package/hbsig/src/send-utils.js +1132 -0
  212. package/hbsig/src/send.js +142 -0
  213. package/hbsig/src/signer-utils.js +375 -0
  214. package/hbsig/src/signer.js +312 -0
  215. package/hbsig/src/structured.js +496 -0
  216. package/hbsig/src/test.js +2 -0
  217. package/hbsig/src/utils.js +29 -0
  218. package/lp/index.html +25 -0
  219. package/lp/package.json +19 -0
  220. package/lp/public/cover.png +0 -0
  221. package/lp/public/favicon.ico +0 -0
  222. package/lp/public/favicon.png +0 -0
  223. package/lp/public/images/book.jpg +0 -0
  224. package/lp/public/images/dashboard.png +0 -0
  225. package/lp/public/images/devnet.png +0 -0
  226. package/lp/public/images/hero-bg.png +0 -0
  227. package/lp/public/images/hyperadd.png +0 -0
  228. package/lp/public/images/message-flow.png +0 -0
  229. package/lp/public/images/mobile.png +0 -0
  230. package/lp/public/images/og-cover.png +0 -0
  231. package/lp/public/images/scan.png +0 -0
  232. package/lp/public/images/wao-hub.png +0 -0
  233. package/lp/public/images/wao-web.png +0 -0
  234. package/lp/public/logo.png +0 -0
  235. package/lp/src/App.jsx +29 -0
  236. package/lp/src/components/CodeBlock.jsx +37 -0
  237. package/lp/src/components/CodeBlock.module.css +89 -0
  238. package/lp/src/components/Footer.jsx +22 -0
  239. package/lp/src/components/Footer.module.css +60 -0
  240. package/lp/src/components/Nav.jsx +80 -0
  241. package/lp/src/components/Nav.module.css +177 -0
  242. package/lp/src/components/SectionWrapper.jsx +15 -0
  243. package/lp/src/hooks/useReveal.js +25 -0
  244. package/lp/src/hooks/useScrolled.js +14 -0
  245. package/lp/src/main.jsx +10 -0
  246. package/lp/src/sections/Book.jsx +60 -0
  247. package/lp/src/sections/Book.module.css +204 -0
  248. package/lp/src/sections/Browser.jsx +46 -0
  249. package/lp/src/sections/Browser.module.css +67 -0
  250. package/lp/src/sections/Devnet.jsx +55 -0
  251. package/lp/src/sections/Devnet.module.css +136 -0
  252. package/lp/src/sections/GetStarted.jsx +51 -0
  253. package/lp/src/sections/GetStarted.module.css +128 -0
  254. package/lp/src/sections/Hero.jsx +67 -0
  255. package/lp/src/sections/Hero.module.css +202 -0
  256. package/lp/src/sections/HyperADD.jsx +46 -0
  257. package/lp/src/sections/HyperADD.module.css +113 -0
  258. package/lp/src/sections/SDK.jsx +90 -0
  259. package/lp/src/sections/SDK.module.css +122 -0
  260. package/lp/src/sections/Testing.jsx +47 -0
  261. package/lp/src/sections/Testing.module.css +124 -0
  262. package/lp/src/sections/Vision.jsx +93 -0
  263. package/lp/src/sections/Vision.module.css +147 -0
  264. package/lp/src/styles/globals.css +285 -0
  265. package/lp/src/utils/scrollTo.js +4 -0
  266. package/lp/vite.config.js +7 -0
  267. package/make.js +39 -0
  268. package/package.json +17 -12
  269. package/patches/@permaweb+ao-loader+0.0.44.patch +64 -0
  270. package/plan.md +435 -0
  271. package/rebar.lock +1 -0
  272. package/src/accounts-web.js +128 -0
  273. package/src/accounts.js +124 -0
  274. package/src/adaptor-base.js +622 -0
  275. package/src/adaptor-cf.js +11 -0
  276. package/src/adaptor-web.js +11 -0
  277. package/src/adaptor.js +10 -0
  278. package/src/ao-loader.js +30660 -0
  279. package/src/ao.js +1173 -0
  280. package/src/aoconnect-base.js +1098 -0
  281. package/src/aoconnect-cf.js +9 -0
  282. package/src/aoconnect-web.js +8 -0
  283. package/src/aoconnect.js +8 -0
  284. package/src/aos_wamr.js +1 -0
  285. package/src/ar-remote.js +87 -0
  286. package/src/ar.js +276 -0
  287. package/src/armem-base.js +529 -0
  288. package/src/armem-cf.js +67 -0
  289. package/src/armem-web.js +19 -0
  290. package/src/armem.js +26 -0
  291. package/src/bao.js +141 -0
  292. package/src/bar.js +366 -0
  293. package/src/build.js +7 -0
  294. package/src/bundler.js +119 -0
  295. package/src/car.js +10 -0
  296. package/src/cf-env.js +29 -0
  297. package/src/cf.js +11 -0
  298. package/src/cli.js +561 -0
  299. package/src/compress.js +112 -0
  300. package/src/create.js +415 -0
  301. package/src/devs.js +86 -0
  302. package/src/dirname.js +1 -0
  303. package/src/dodb.js +26 -0
  304. package/src/erl_json.js +289 -0
  305. package/src/erl_str.js +1139 -0
  306. package/src/gql.js +229 -0
  307. package/src/hb.js +967 -0
  308. package/src/helpers.js +203 -0
  309. package/src/http.js +619 -0
  310. package/src/hub/bundler.js +123 -0
  311. package/src/hub/cu.js +74 -0
  312. package/src/hub/fs.js +157 -0
  313. package/src/hub/index.js +85 -0
  314. package/src/hub/utils.js +64 -0
  315. package/src/hub/ws-proxy.js +67 -0
  316. package/src/hyper-aos.js +1 -0
  317. package/src/hyperbeam-server.js +21 -0
  318. package/src/hyperbeam.js +585 -0
  319. package/src/index.js +5 -0
  320. package/src/keygen.js +47 -0
  321. package/src/lfdb.js +67 -0
  322. package/src/lua/aos.wasm +0 -0
  323. package/src/lua/aos2_0_1.js +1 -0
  324. package/src/lua/aos2_0_1.wasm +0 -0
  325. package/src/lua/aos2_0_3.js +1 -0
  326. package/src/lua/aos2_0_3.wasm +0 -0
  327. package/src/lua/aos2_0_4_32.js +1 -0
  328. package/src/lua/aos2_0_4_32.wasm +0 -0
  329. package/src/lua/aos2_0_6.wasm +0 -0
  330. package/src/lua/apm.lua +61 -0
  331. package/src/lua/llama.wasm +0 -0
  332. package/src/lua/process.wasm +0 -0
  333. package/src/lua/sqlite.js +1 -0
  334. package/src/lua/sqlite.wasm +0 -0
  335. package/src/lua/weavedb_mock.lua +44 -0
  336. package/src/lua/weavedrive.lua +53 -0
  337. package/src/run.js +25 -0
  338. package/src/server.js +173 -0
  339. package/src/storage-multi.js +183 -0
  340. package/src/tao.js +12 -0
  341. package/src/tar.js +10 -0
  342. package/src/test.js +42 -0
  343. package/src/tgql-d1.js +407 -0
  344. package/src/tgql.js +310 -0
  345. package/src/toerl.js +162 -0
  346. package/src/utils.js +777 -0
  347. package/src/wao.js +29 -0
  348. package/src/waosm/README.md +81 -0
  349. package/src/waosm/waosm.d.ts +40 -0
  350. package/src/waosm/waosm.js +240 -0
  351. package/src/waosm/waosm_bg.wasm +0 -0
  352. package/src/waosm/waosm_bg.wasm.d.ts +8 -0
  353. package/src/waosm-node/README.md +81 -0
  354. package/src/waosm-node/waosm.d.ts +8 -0
  355. package/src/waosm-node/waosm.js +4 -0
  356. package/src/waosm-node/waosm_bg.js +147 -0
  357. package/src/waosm-node/waosm_bg.wasm +0 -0
  358. package/src/waosm-node/waosm_bg.wasm.d.ts +8 -0
  359. package/src/waosm-node/waosm_bg.wasm.js +14 -0
  360. package/src/waosm-node.js +9 -0
  361. package/src/war.js +10 -0
  362. package/src/weavedrive.js +376 -0
  363. package/src/web.js +11 -0
  364. package/src/workspace/.mcp.json +8 -0
  365. package/src/workspace/CLAUDE.md +258 -0
  366. package/src/workspace/README.md +85 -0
  367. package/src/workspace/dashboard/index.html +163 -0
  368. package/src/workspace/dashboard/package.json +18 -0
  369. package/src/workspace/dashboard/public/favicon.ico +0 -0
  370. package/src/workspace/dashboard/public/favicon.png +0 -0
  371. package/src/workspace/dashboard/server.js +224 -0
  372. package/src/workspace/dashboard/src/App.jsx +2350 -0
  373. package/{cjs/workspace/frontend → src/workspace/dashboard}/vite.config.js +6 -0
  374. package/src/workspace/package.json +18 -0
  375. package/src/workspace/src/counter.lua +14 -0
  376. package/tsconfig.json +18 -0
  377. package/types/index.d.ts +329 -0
  378. package/waollama/.eslintrc.json +3 -0
  379. package/waollama/README.md +19 -0
  380. package/waollama/arweave.mjs +87 -0
  381. package/waollama/components/ui/avatar.jsx +49 -0
  382. package/waollama/components/ui/checkbox.jsx +17 -0
  383. package/waollama/components/ui/close-button.jsx +20 -0
  384. package/waollama/components/ui/color-mode.jsx +61 -0
  385. package/waollama/components/ui/dialog.jsx +54 -0
  386. package/waollama/components/ui/drawer.jsx +44 -0
  387. package/waollama/components/ui/field.jsx +22 -0
  388. package/waollama/components/ui/input-group.jsx +39 -0
  389. package/waollama/components/ui/popover.jsx +49 -0
  390. package/waollama/components/ui/provider.jsx +12 -0
  391. package/waollama/components/ui/radio.jsx +17 -0
  392. package/waollama/components/ui/slider.jsx +107 -0
  393. package/waollama/components/ui/tooltip.jsx +35 -0
  394. package/waollama/index.js +10 -0
  395. package/waollama/jsconfig.json +7 -0
  396. package/waollama/lib/ao-loader.js +30654 -0
  397. package/waollama/lib/client.js +1 -0
  398. package/waollama/lib/wasm.js +1 -0
  399. package/waollama/next.config.js +25 -0
  400. package/waollama/package.json +43 -0
  401. package/waollama/pages/404.js +9 -0
  402. package/waollama/pages/_app.js +9 -0
  403. package/waollama/pages/_document.js +14 -0
  404. package/waollama/pages/index.js +212 -0
  405. package/waollama/playwright.config.js +31 -0
  406. package/waollama/proxy.mjs +21 -0
  407. package/waollama/public/favicon.ico +0 -0
  408. package/waollama/public/human.png +0 -0
  409. package/waollama/public/llama.png +0 -0
  410. package/waosm/Cargo.toml +11 -0
  411. package/waosm/README.md +81 -0
  412. package/waosm/compress.js +112 -0
  413. package/waosm/make.js +33 -0
  414. package/waosm/package.json +10 -0
  415. package/waosm/src/lib.rs +180 -0
  416. package/waosm/test.js +16 -0
  417. package/cjs/workspace/.claude/agents/builder.md +0 -99
  418. package/cjs/workspace/.claude/agents/device-builder.md +0 -86
  419. package/cjs/workspace/.claude/agents/tester.md +0 -90
  420. package/cjs/workspace/.claude/mcp/dashboard/server.js +0 -128
  421. package/cjs/workspace/.claude/rules/deploy.md +0 -45
  422. package/cjs/workspace/.claude/rules/frontend.md +0 -69
  423. package/cjs/workspace/.claude/rules/hyperbeam.md +0 -104
  424. package/cjs/workspace/.claude/rules/lua.md +0 -108
  425. package/cjs/workspace/.claude/rules/testing.md +0 -257
  426. package/cjs/workspace/.claude/settings.json +0 -109
  427. package/cjs/workspace/.claude/skills/build/SKILL.md +0 -214
  428. package/cjs/workspace/.claude/skills/build-aos/SKILL.md +0 -129
  429. package/cjs/workspace/.claude/skills/build-device/SKILL.md +0 -192
  430. package/cjs/workspace/.claude/skills/build-frontend/SKILL.md +0 -134
  431. package/cjs/workspace/.claude/skills/build-module/SKILL.md +0 -281
  432. package/cjs/workspace/.claude/skills/create-aos/SKILL.md +0 -63
  433. package/cjs/workspace/.claude/skills/create-device/SKILL.md +0 -87
  434. package/cjs/workspace/.claude/skills/create-module/SKILL.md +0 -162
  435. package/cjs/workspace/.claude/skills/debug/SKILL.md +0 -57
  436. package/cjs/workspace/.claude/skills/deploy/SKILL.md +0 -85
  437. package/cjs/workspace/.claude/skills/dev/SKILL.md +0 -32
  438. package/cjs/workspace/.claude/skills/plan/SKILL.md +0 -176
  439. package/cjs/workspace/.claude/skills/readme/SKILL.md +0 -186
  440. package/cjs/workspace/.claude/skills/report/SKILL.md +0 -49
  441. package/cjs/workspace/.claude/skills/team/SKILL.md +0 -101
  442. package/cjs/workspace/.claude/skills/test/SKILL.md +0 -56
  443. package/cjs/workspace/.claude/skills/test-device/SKILL.md +0 -114
  444. package/cjs/workspace/.claude/skills/test-e2e/SKILL.md +0 -103
  445. package/cjs/workspace/.claude/skills/test-hb/SKILL.md +0 -76
  446. package/cjs/workspace/.claude/skills/validate/SKILL.md +0 -96
  447. package/cjs/workspace/.claude/skills/validate/scripts/check-lua.sh +0 -41
  448. package/cjs/workspace/docs/aos-lua.md +0 -428
  449. package/cjs/workspace/docs/debug.md +0 -230
  450. package/cjs/workspace/docs/hyperbeam-dev.md +0 -606
  451. package/cjs/workspace/docs/hyperbeam-devices.md +0 -618
  452. package/cjs/workspace/docs/wao-sdk.md +0 -807
  453. package/cjs/workspace/frontend/e2e/.gitkeep +0 -0
  454. package/cjs/workspace/frontend/index.html +0 -12
  455. package/cjs/workspace/frontend/package.json +0 -24
  456. package/cjs/workspace/frontend/playwright.config.js +0 -10
  457. package/cjs/workspace/frontend/src/App.jsx +0 -24
  458. package/cjs/workspace/frontend/test/.gitkeep +0 -0
  459. package/cjs/workspace/frontend/vitest.config.js +0 -10
  460. package/cjs/workspace/scripts/deploy.js +0 -140
  461. package/cjs/workspace/scripts/keygen.js +0 -52
  462. package/cjs/workspace/test/aos.test.js +0 -98
  463. package/cjs/workspace/test/hyperbeam.test.js +0 -80
  464. package/esm/compiler/native +0 -0
  465. package/esm/workspace/.claude/agents/builder.md +0 -99
  466. package/esm/workspace/.claude/agents/device-builder.md +0 -86
  467. package/esm/workspace/.claude/agents/tester.md +0 -90
  468. package/esm/workspace/.claude/mcp/dashboard/server.js +0 -128
  469. package/esm/workspace/.claude/rules/deploy.md +0 -45
  470. package/esm/workspace/.claude/rules/frontend.md +0 -69
  471. package/esm/workspace/.claude/rules/hyperbeam.md +0 -104
  472. package/esm/workspace/.claude/rules/lua.md +0 -108
  473. package/esm/workspace/.claude/rules/testing.md +0 -257
  474. package/esm/workspace/.claude/settings.json +0 -109
  475. package/esm/workspace/.claude/skills/build/SKILL.md +0 -214
  476. package/esm/workspace/.claude/skills/build-aos/SKILL.md +0 -129
  477. package/esm/workspace/.claude/skills/build-device/SKILL.md +0 -192
  478. package/esm/workspace/.claude/skills/build-frontend/SKILL.md +0 -134
  479. package/esm/workspace/.claude/skills/build-module/SKILL.md +0 -281
  480. package/esm/workspace/.claude/skills/create-aos/SKILL.md +0 -63
  481. package/esm/workspace/.claude/skills/create-device/SKILL.md +0 -87
  482. package/esm/workspace/.claude/skills/create-module/SKILL.md +0 -162
  483. package/esm/workspace/.claude/skills/debug/SKILL.md +0 -57
  484. package/esm/workspace/.claude/skills/deploy/SKILL.md +0 -85
  485. package/esm/workspace/.claude/skills/dev/SKILL.md +0 -32
  486. package/esm/workspace/.claude/skills/plan/SKILL.md +0 -176
  487. package/esm/workspace/.claude/skills/readme/SKILL.md +0 -186
  488. package/esm/workspace/.claude/skills/report/SKILL.md +0 -49
  489. package/esm/workspace/.claude/skills/team/SKILL.md +0 -101
  490. package/esm/workspace/.claude/skills/test/SKILL.md +0 -56
  491. package/esm/workspace/.claude/skills/test-device/SKILL.md +0 -114
  492. package/esm/workspace/.claude/skills/test-e2e/SKILL.md +0 -103
  493. package/esm/workspace/.claude/skills/test-hb/SKILL.md +0 -76
  494. package/esm/workspace/.claude/skills/validate/SKILL.md +0 -96
  495. package/esm/workspace/.claude/skills/validate/scripts/check-lua.sh +0 -41
  496. package/esm/workspace/docs/aos-lua.md +0 -428
  497. package/esm/workspace/docs/debug.md +0 -230
  498. package/esm/workspace/docs/hyperbeam-dev.md +0 -606
  499. package/esm/workspace/docs/hyperbeam-devices.md +0 -618
  500. package/esm/workspace/docs/wao-sdk.md +0 -807
  501. package/esm/workspace/frontend/e2e/.gitkeep +0 -0
  502. package/esm/workspace/frontend/index.html +0 -12
  503. package/esm/workspace/frontend/package.json +0 -24
  504. package/esm/workspace/frontend/playwright.config.js +0 -10
  505. package/esm/workspace/frontend/src/App.jsx +0 -24
  506. package/esm/workspace/frontend/src/main.jsx +0 -9
  507. package/esm/workspace/frontend/test/.gitkeep +0 -0
  508. package/esm/workspace/frontend/vite.config.js +0 -6
  509. package/esm/workspace/frontend/vitest.config.js +0 -10
  510. package/esm/workspace/scripts/deploy.js +0 -140
  511. package/esm/workspace/scripts/keygen.js +0 -52
  512. package/esm/workspace/test/aos.test.js +0 -98
  513. package/esm/workspace/test/hyperbeam.test.js +0 -80
  514. /package/{cjs/workspace/dashboard/public → devnet/app}/favicon.ico +0 -0
  515. /package/{cjs/workspace → dhfs-tutorial-app}/src/counter.lua +0 -0
  516. /package/{cjs → dist/cjs}/accounts-web.js +0 -0
  517. /package/{cjs → dist/cjs}/accounts.js +0 -0
  518. /package/{cjs → dist/cjs}/adaptor-base.js +0 -0
  519. /package/{cjs → dist/cjs}/adaptor-cf.js +0 -0
  520. /package/{cjs → dist/cjs}/adaptor-web.js +0 -0
  521. /package/{cjs → dist/cjs}/adaptor.js +0 -0
  522. /package/{cjs → dist/cjs}/ao-loader.js +0 -0
  523. /package/{cjs → dist/cjs}/ao.js +0 -0
  524. /package/{cjs → dist/cjs}/aoconnect-base.js +0 -0
  525. /package/{cjs → dist/cjs}/aoconnect-cf.js +0 -0
  526. /package/{cjs → dist/cjs}/aoconnect-web.js +0 -0
  527. /package/{cjs → dist/cjs}/aoconnect.js +0 -0
  528. /package/{cjs → dist/cjs}/aos_wamr.js +0 -0
  529. /package/{cjs → dist/cjs}/ar-remote.js +0 -0
  530. /package/{cjs → dist/cjs}/ar.js +0 -0
  531. /package/{cjs → dist/cjs}/armem-base.js +0 -0
  532. /package/{cjs → dist/cjs}/armem-cf.js +0 -0
  533. /package/{cjs → dist/cjs}/armem-web.js +0 -0
  534. /package/{cjs → dist/cjs}/armem.js +0 -0
  535. /package/{cjs → dist/cjs}/bao.js +0 -0
  536. /package/{cjs → dist/cjs}/bar.js +0 -0
  537. /package/{cjs → dist/cjs}/build.js +0 -0
  538. /package/{cjs → dist/cjs}/bundler.js +0 -0
  539. /package/{cjs → dist/cjs}/car.js +0 -0
  540. /package/{cjs → dist/cjs}/cf-env.js +0 -0
  541. /package/{cjs → dist/cjs}/cf.js +0 -0
  542. /package/{cjs → dist/cjs}/cli.js +0 -0
  543. /package/{cjs → dist/cjs}/compress.js +0 -0
  544. /package/{cjs → dist/cjs}/create.js +0 -0
  545. /package/{cjs → dist/cjs}/devs.js +0 -0
  546. /package/{cjs → dist/cjs}/dirname.js +0 -0
  547. /package/{cjs → dist/cjs}/dodb.js +0 -0
  548. /package/{cjs → dist/cjs}/erl_json.js +0 -0
  549. /package/{cjs → dist/cjs}/erl_str.js +0 -0
  550. /package/{cjs → dist/cjs}/gql.js +0 -0
  551. /package/{cjs → dist/cjs}/hb.js +0 -0
  552. /package/{cjs → dist/cjs}/helpers.js +0 -0
  553. /package/{cjs → dist/cjs}/http.js +0 -0
  554. /package/{cjs → dist/cjs}/hub/bundler.js +0 -0
  555. /package/{cjs → dist/cjs}/hub/cu.js +0 -0
  556. /package/{cjs → dist/cjs}/hub/fs.js +0 -0
  557. /package/{cjs → dist/cjs}/hub/index.js +0 -0
  558. /package/{cjs → dist/cjs}/hub/utils.js +0 -0
  559. /package/{cjs → dist/cjs}/hub/ws-proxy.js +0 -0
  560. /package/{cjs → dist/cjs}/hyper-aos.js +0 -0
  561. /package/{cjs → dist/cjs}/hyperbeam-server.js +0 -0
  562. /package/{cjs → dist/cjs}/hyperbeam.js +0 -0
  563. /package/{cjs → dist/cjs}/index.js +0 -0
  564. /package/{cjs → dist/cjs}/keygen.js +0 -0
  565. /package/{cjs → dist/cjs}/lfdb.js +0 -0
  566. /package/{cjs → dist/cjs}/lua/aos.wasm +0 -0
  567. /package/{cjs → dist/cjs}/lua/aos2_0_1.js +0 -0
  568. /package/{cjs → dist/cjs}/lua/aos2_0_1.wasm +0 -0
  569. /package/{cjs → dist/cjs}/lua/aos2_0_3.js +0 -0
  570. /package/{cjs → dist/cjs}/lua/aos2_0_3.wasm +0 -0
  571. /package/{cjs → dist/cjs}/lua/aos2_0_4_32.js +0 -0
  572. /package/{cjs → dist/cjs}/lua/aos2_0_4_32.wasm +0 -0
  573. /package/{cjs → dist/cjs}/lua/aos2_0_6.wasm +0 -0
  574. /package/{cjs → dist/cjs}/lua/apm.lua +0 -0
  575. /package/{cjs → dist/cjs}/lua/llama.wasm +0 -0
  576. /package/{cjs → dist/cjs}/lua/process.wasm +0 -0
  577. /package/{cjs → dist/cjs}/lua/sqlite.js +0 -0
  578. /package/{cjs → dist/cjs}/lua/sqlite.wasm +0 -0
  579. /package/{cjs → dist/cjs}/lua/weavedb_mock.lua +0 -0
  580. /package/{cjs → dist/cjs}/lua/weavedrive.lua +0 -0
  581. /package/{cjs → dist/cjs}/run.js +0 -0
  582. /package/{cjs → dist/cjs}/server.js +0 -0
  583. /package/{cjs → dist/cjs}/storage-multi.js +0 -0
  584. /package/{cjs → dist/cjs}/tao.js +0 -0
  585. /package/{cjs → dist/cjs}/tar.js +0 -0
  586. /package/{cjs → dist/cjs}/test.js +0 -0
  587. /package/{cjs → dist/cjs}/tgql-d1.js +0 -0
  588. /package/{cjs → dist/cjs}/tgql.js +0 -0
  589. /package/{cjs → dist/cjs}/toerl.js +0 -0
  590. /package/{cjs → dist/cjs}/utils.js +0 -0
  591. /package/{cjs → dist/cjs}/wao.js +0 -0
  592. /package/{cjs → dist/cjs}/waosm/waosm.js +0 -0
  593. /package/{cjs → dist/cjs}/waosm-node/waosm.js +0 -0
  594. /package/{cjs → dist/cjs}/waosm-node/waosm_bg.js +0 -0
  595. /package/{cjs → dist/cjs}/waosm-node/waosm_bg.wasm +0 -0
  596. /package/{cjs → dist/cjs}/waosm-node/waosm_bg.wasm.js +0 -0
  597. /package/{cjs → dist/cjs}/waosm-node.js +0 -0
  598. /package/{cjs → dist/cjs}/war.js +0 -0
  599. /package/{cjs → dist/cjs}/weavedrive.js +0 -0
  600. /package/{cjs → dist/cjs}/web.js +0 -0
  601. /package/{cjs → dist/cjs}/workspace/.mcp.json +0 -0
  602. /package/{cjs → dist/cjs}/workspace/CLAUDE.md +0 -0
  603. /package/{cjs → dist/cjs}/workspace/README.md +0 -0
  604. /package/{cjs → dist/cjs}/workspace/dashboard/index.html +0 -0
  605. /package/{cjs → dist/cjs}/workspace/dashboard/package.json +0 -0
  606. /package/{esm → dist/cjs}/workspace/dashboard/public/favicon.ico +0 -0
  607. /package/{cjs → dist/cjs}/workspace/dashboard/public/favicon.png +0 -0
  608. /package/{cjs → dist/cjs}/workspace/dashboard/server.js +0 -0
  609. /package/{cjs → dist/cjs}/workspace/dashboard/src/App.jsx +0 -0
  610. /package/{cjs → dist/cjs}/workspace/dashboard/src/main.jsx +0 -0
  611. /package/{cjs → dist/cjs}/workspace/dashboard/vite.config.js +0 -0
  612. /package/{cjs → dist/cjs}/workspace/package.json +0 -0
  613. /package/{esm → dist/cjs}/workspace/src/counter.lua +0 -0
  614. /package/{esm → dist/esm}/accounts-web.js +0 -0
  615. /package/{esm → dist/esm}/accounts.js +0 -0
  616. /package/{esm → dist/esm}/adaptor-base.js +0 -0
  617. /package/{esm → dist/esm}/adaptor-cf.js +0 -0
  618. /package/{esm → dist/esm}/adaptor-web.js +0 -0
  619. /package/{esm → dist/esm}/adaptor.js +0 -0
  620. /package/{esm → dist/esm}/ao-loader.js +0 -0
  621. /package/{esm → dist/esm}/ao.js +0 -0
  622. /package/{esm → dist/esm}/aoconnect-base.js +0 -0
  623. /package/{esm → dist/esm}/aoconnect-cf.js +0 -0
  624. /package/{esm → dist/esm}/aoconnect-web.js +0 -0
  625. /package/{esm → dist/esm}/aoconnect.js +0 -0
  626. /package/{esm → dist/esm}/aos_wamr.js +0 -0
  627. /package/{esm → dist/esm}/ar-remote.js +0 -0
  628. /package/{esm → dist/esm}/ar.js +0 -0
  629. /package/{esm → dist/esm}/armem-base.js +0 -0
  630. /package/{esm → dist/esm}/armem-cf.js +0 -0
  631. /package/{esm → dist/esm}/armem-web.js +0 -0
  632. /package/{esm → dist/esm}/armem.js +0 -0
  633. /package/{esm → dist/esm}/bao.js +0 -0
  634. /package/{esm → dist/esm}/bar.js +0 -0
  635. /package/{esm → dist/esm}/build.js +0 -0
  636. /package/{esm → dist/esm}/bundler.js +0 -0
  637. /package/{esm → dist/esm}/car.js +0 -0
  638. /package/{esm → dist/esm}/cf-env.js +0 -0
  639. /package/{esm → dist/esm}/cf.js +0 -0
  640. /package/{esm → dist/esm}/cli.js +0 -0
  641. /package/{esm → dist/esm}/compress.js +0 -0
  642. /package/{esm → dist/esm}/create.js +0 -0
  643. /package/{esm → dist/esm}/devs.js +0 -0
  644. /package/{esm → dist/esm}/dirname.js +0 -0
  645. /package/{esm → dist/esm}/dodb.js +0 -0
  646. /package/{esm → dist/esm}/erl_json.js +0 -0
  647. /package/{esm → dist/esm}/erl_str.js +0 -0
  648. /package/{esm → dist/esm}/gql.js +0 -0
  649. /package/{esm → dist/esm}/hb.js +0 -0
  650. /package/{esm → dist/esm}/helpers.js +0 -0
  651. /package/{esm → dist/esm}/http.js +0 -0
  652. /package/{esm → dist/esm}/hub/bundler.js +0 -0
  653. /package/{esm → dist/esm}/hub/cu.js +0 -0
  654. /package/{esm → dist/esm}/hub/fs.js +0 -0
  655. /package/{esm → dist/esm}/hub/index.js +0 -0
  656. /package/{esm → dist/esm}/hub/utils.js +0 -0
  657. /package/{esm → dist/esm}/hub/ws-proxy.js +0 -0
  658. /package/{esm → dist/esm}/hyper-aos.js +0 -0
  659. /package/{esm → dist/esm}/hyperbeam-server.js +0 -0
  660. /package/{esm → dist/esm}/hyperbeam.js +0 -0
  661. /package/{esm → dist/esm}/index.js +0 -0
  662. /package/{esm → dist/esm}/keygen.js +0 -0
  663. /package/{esm → dist/esm}/lfdb.js +0 -0
  664. /package/{esm → dist/esm}/lua/aos.wasm +0 -0
  665. /package/{esm → dist/esm}/lua/aos2_0_1.js +0 -0
  666. /package/{esm → dist/esm}/lua/aos2_0_1.wasm +0 -0
  667. /package/{esm → dist/esm}/lua/aos2_0_3.js +0 -0
  668. /package/{esm → dist/esm}/lua/aos2_0_3.wasm +0 -0
  669. /package/{esm → dist/esm}/lua/aos2_0_4_32.js +0 -0
  670. /package/{esm → dist/esm}/lua/aos2_0_4_32.wasm +0 -0
  671. /package/{esm → dist/esm}/lua/aos2_0_6.wasm +0 -0
  672. /package/{esm → dist/esm}/lua/apm.lua +0 -0
  673. /package/{esm → dist/esm}/lua/llama.wasm +0 -0
  674. /package/{esm → dist/esm}/lua/process.wasm +0 -0
  675. /package/{esm → dist/esm}/lua/sqlite.js +0 -0
  676. /package/{esm → dist/esm}/lua/sqlite.wasm +0 -0
  677. /package/{esm → dist/esm}/lua/weavedb_mock.lua +0 -0
  678. /package/{esm → dist/esm}/lua/weavedrive.lua +0 -0
  679. /package/{esm → dist/esm}/package.json +0 -0
  680. /package/{esm → dist/esm}/run.js +0 -0
  681. /package/{esm → dist/esm}/server.js +0 -0
  682. /package/{esm → dist/esm}/storage-multi.js +0 -0
  683. /package/{esm → dist/esm}/tao.js +0 -0
  684. /package/{esm → dist/esm}/tar.js +0 -0
  685. /package/{esm → dist/esm}/test.js +0 -0
  686. /package/{esm → dist/esm}/tgql-d1.js +0 -0
  687. /package/{esm → dist/esm}/tgql.js +0 -0
  688. /package/{esm → dist/esm}/toerl.js +0 -0
  689. /package/{esm → dist/esm}/utils.js +0 -0
  690. /package/{esm → dist/esm}/wao.js +0 -0
  691. /package/{esm → dist/esm}/waosm/README.md +0 -0
  692. /package/{esm → dist/esm}/waosm/waosm.d.ts +0 -0
  693. /package/{esm → dist/esm}/waosm/waosm.js +0 -0
  694. /package/{esm → dist/esm}/waosm/waosm_bg.wasm +0 -0
  695. /package/{esm → dist/esm}/waosm/waosm_bg.wasm.d.ts +0 -0
  696. /package/{esm → dist/esm}/waosm-node/README.md +0 -0
  697. /package/{esm → dist/esm}/waosm-node/waosm.d.ts +0 -0
  698. /package/{esm → dist/esm}/waosm-node/waosm.js +0 -0
  699. /package/{esm → dist/esm}/waosm-node/waosm_bg.js +0 -0
  700. /package/{esm → dist/esm}/waosm-node/waosm_bg.wasm +0 -0
  701. /package/{esm → dist/esm}/waosm-node/waosm_bg.wasm.d.ts +0 -0
  702. /package/{esm → dist/esm}/waosm-node/waosm_bg.wasm.js +0 -0
  703. /package/{esm → dist/esm}/waosm-node.js +0 -0
  704. /package/{esm → dist/esm}/war.js +0 -0
  705. /package/{esm → dist/esm}/weavedrive.js +0 -0
  706. /package/{esm → dist/esm}/web.js +0 -0
  707. /package/{esm → dist/esm}/workspace/.mcp.json +0 -0
  708. /package/{esm → dist/esm}/workspace/CLAUDE.md +0 -0
  709. /package/{esm → dist/esm}/workspace/README.md +0 -0
  710. /package/{esm → dist/esm}/workspace/dashboard/index.html +0 -0
  711. /package/{esm → dist/esm}/workspace/dashboard/package.json +0 -0
  712. /package/{esm/workspace/dashboard/public/favicon.png → dist/esm/workspace/dashboard/public/favicon.ico} +0 -0
  713. /package/{esm → dist/esm}/workspace/dashboard/server.js +0 -0
  714. /package/{esm → dist/esm}/workspace/dashboard/src/App.jsx +0 -0
  715. /package/{cjs/workspace/frontend → dist/esm/workspace/dashboard}/src/main.jsx +0 -0
  716. /package/{esm → dist/esm}/workspace/dashboard/vite.config.js +0 -0
  717. /package/{esm → dist/esm}/workspace/package.json +0 -0
  718. /package/{postinstall.cjs → dist/postinstall.cjs} +0 -0
  719. /package/{esm → src}/workspace/dashboard/src/main.jsx +0 -0
@@ -0,0 +1,1098 @@
1
+ import _Arweave from "arweave"
2
+ const Arweave = _Arweave.default ?? _Arweave
3
+ const arweave = Arweave.init()
4
+ import * as WarpArBundles from "warp-arbundles"
5
+ const pkg = WarpArBundles.default ?? WarpArBundles
6
+ const { DataItem } = pkg
7
+ import crypto from "crypto"
8
+ import base64url from "base64url"
9
+ import { toAddr, wait } from "./utils.js"
10
+ import AO from "./ao.js"
11
+ import { connect, createSigner } from "@permaweb/aoconnect"
12
+
13
+ import {
14
+ tags,
15
+ action,
16
+ tag,
17
+ buildTags,
18
+ isJSON,
19
+ jsonToStr,
20
+ dirname,
21
+ } from "./utils.js"
22
+ import weavedrive from "./weavedrive.js"
23
+ import {
24
+ is,
25
+ clone,
26
+ fromPairs,
27
+ map,
28
+ mergeLeft,
29
+ isNil,
30
+ dissoc,
31
+ o,
32
+ reverse,
33
+ includes,
34
+ } from "ramda"
35
+
36
+ let onRecovery = {}
37
+ let ongoing = {}
38
+
39
+ export default ({ AR, scheduler, mu, su, cu, acc, AoLoader, ArMem } = {}) => {
40
+ return (mem, { cache, log = false, extensions = {}, hb, variant, storage, d1, r2, kv, ar_url } = {}) => {
41
+ const isMem = mem?.__type__ === "mem"
42
+ if (!isMem) {
43
+ let args = { cache, storage, scheduler, d1, r2, kv, ar_url }
44
+ if (mem?.SU_URL) {
45
+ args.variant = variant
46
+ args = mergeLeft(mem, args)
47
+ }
48
+ mem = new ArMem(args)
49
+ }
50
+ const ar = new AR({ mem, log })
51
+ for (const k in extensions) extensions[k] = new extensions[k](ar).ext
52
+ extensions.WeaveDrive = new weavedrive(ar).ext
53
+
54
+ const transform = input => {
55
+ const output = { Tags: [] }
56
+ if (input.Data) output.Data = input.Data
57
+ Object.entries(input).forEach(([key, value]) => {
58
+ if (key !== "Data" && key !== "Tags" && typeof value === "string") {
59
+ output.Tags.push({ name: key, value })
60
+ }
61
+ })
62
+ input.Tags?.forEach(tag => {
63
+ const tagKey = Object.keys(tag)[0]
64
+ const tagValue = tag[tagKey]
65
+ if (typeof tagValue === "string") {
66
+ output.Tags.push({ name: tagKey, value: tagValue })
67
+ }
68
+ })
69
+
70
+ return output
71
+ }
72
+ const capitalize = __tags => {
73
+ let cap = {
74
+ authority: "Authority",
75
+ action: "Action",
76
+ "on-boot": "On-Boot",
77
+ scheduler: "Scheduler",
78
+ module: "Module",
79
+ }
80
+ for (let v of __tags) {
81
+ v.name = cap[v.name] ?? v.name
82
+ }
83
+ return __tags
84
+ }
85
+
86
+ const genMsg = async (Id, p, data, Tags, from, Owner, dry = false) => {
87
+ if (!dry) p.height += 1
88
+ let __tags = Tags?.length ? Tags : []
89
+ return {
90
+ Id,
91
+ Target: p.id,
92
+ Owner,
93
+ Data: data?.length ? data : "",
94
+ "Block-Height": (await mem.get("height")).toString(),
95
+ Timestamp: Date.now().toString(),
96
+ Module: p.module,
97
+ From: from,
98
+ Cron: false,
99
+ Tags: capitalize(__tags),
100
+ }
101
+ }
102
+
103
+ const genEnv = async ({ pid, owner = "", module = "" }) => {
104
+ return {
105
+ Process: {
106
+ Id: pid,
107
+ Tags: capitalize((await mem.getTx(pid))?.tags ?? []),
108
+ Owner: owner,
109
+ },
110
+ Module: {
111
+ Id: module,
112
+ Tags: capitalize((await mem.getTx(module))?.tags ?? []),
113
+ },
114
+ }
115
+ }
116
+
117
+ const spawn = async (opt = {}) => {
118
+ if (!opt.module) throw Error("module missing")
119
+ if (!opt.scheduler) throw Error("scheduler missing")
120
+ const { mod, wasm, format } = await mem.getWasm(opt.module, mem)
121
+ let id, owner, item, __tags
122
+ let msg_owner = mu.addr
123
+ if (ar.isHttpMsg(opt.http_msg)) {
124
+ id = opt.id ?? opt.http_msg.target
125
+ if (ongoing[id]) {
126
+ let i = 0
127
+ while (i < 30 && ongoing[id]) {
128
+ await wait(100)
129
+ i++
130
+ }
131
+ return id
132
+ } else {
133
+ ongoing[id] = true
134
+ ;({ owner, item, tags: __tags } = await ar.httpmsg(opt.http_msg, id))
135
+ opt.tags = buildTags(null, __tags)
136
+ opt.data = opt.http_msg.data
137
+ msg_owner = owner
138
+ }
139
+ } else {
140
+ opt.tags = buildTags(
141
+ null,
142
+ mergeLeft(tags(opt.tags ?? []), {
143
+ "Data-Protocol": "ao",
144
+ Variant: variant ?? "ao.TN.1",
145
+ Type: "Process",
146
+ Module: mod,
147
+ Scheduler: opt.scheduler,
148
+ "Content-Type": "text/plain",
149
+ Authority: mu.addr,
150
+ })
151
+ )
152
+ let ex = false
153
+ for (let v of opt.tags) if (v.name === "Type") ex = true
154
+ if (!ex) opt.tags.push({ name: "Type", value: "Process" })
155
+ if (opt.for) opt.tags.push({ name: "Pushed-For", value: opt.for })
156
+ ;({
157
+ id,
158
+ owner,
159
+ item,
160
+ tags: __tags,
161
+ } = await ar.dataitem({
162
+ item: opt.item,
163
+ data: opt.data,
164
+ signer: opt.signer,
165
+ tags: tags(opt.tags),
166
+ }))
167
+ opt.tags = buildTags(null, __tags)
168
+ if (opt.item) opt.data = base64url.decode(item.data)
169
+ await ar.postItems(item, su.jwk)
170
+ }
171
+
172
+ // Remote CU — delegate WASM execution to satellite CU
173
+ if (opt._cu_url) {
174
+ const _tags = tags(opt.tags)
175
+ const ext = _tags.Extension || "WeaveDrive"
176
+ let p = {
177
+ _cu_url: opt._cu_url,
178
+ extension: ext,
179
+ format,
180
+ id,
181
+ epochs: [],
182
+ module: mod,
183
+ hash: id,
184
+ memory: null,
185
+ owner,
186
+ height: 0,
187
+ results: [id],
188
+ }
189
+ try {
190
+ const cuResult = await fetch(`${opt._cu_url}/cu/evaluate`, {
191
+ method: "POST",
192
+ headers: { "Content-Type": "application/json" },
193
+ body: JSON.stringify({
194
+ message: id,
195
+ process: id,
196
+ data: opt.data ?? "",
197
+ tags: opt.tags,
198
+ from: owner,
199
+ is_spawn: true,
200
+ }),
201
+ }).then(r => r.json())
202
+ const _msg = {
203
+ ...o(dissoc("signer"), dissoc("memory"))(opt),
204
+ res: cuResult,
205
+ msg: null,
206
+ }
207
+ await mem.set(_msg, "msgs", id)
208
+ } catch (e) {
209
+ console.log("Remote CU spawn error:", e)
210
+ }
211
+ await mem.set(p, "env", id)
212
+ delete ongoing[id]
213
+ return id
214
+ }
215
+
216
+ const now = Date.now
217
+ const t = tags(opt.tags)
218
+ const ext = t.Extension || "WeaveDrive"
219
+ const wdrive = extensions[ext]
220
+ let handle = null
221
+ try {
222
+ handle = await AoLoader(wasm, {
223
+ format,
224
+ WeaveDrive: wdrive,
225
+ spawn: item, // todo: httpmsg
226
+ module: await mem.getTx(mod), // todo: httpmsg
227
+ })
228
+ } catch (e) {
229
+ console.log(mod, e)
230
+ }
231
+ if (!handle) return null
232
+ let _module = null
233
+ _module = { handle, id: mod }
234
+ Date.now = now
235
+ const _tags = tags(opt.tags)
236
+ let res = null
237
+ let memory = opt.memory ?? null
238
+ let p = {
239
+ extension: ext,
240
+ format,
241
+ id: id,
242
+ epochs: [],
243
+ handle: _module.handle,
244
+ module: _module.id,
245
+ hash: id,
246
+ memory,
247
+ owner,
248
+ height: 0,
249
+ results: [id],
250
+ }
251
+ let __msg = null
252
+ if (memory) {
253
+ // forking...
254
+ } else if (_tags["On-Boot"] || true) {
255
+ let data = ""
256
+ if (_tags["On-Boot"] === "Data") data = opt.data ?? ""
257
+ else data = (await mem.get("msgs", _tags["On-Boot"]))?.data ?? ""
258
+ let msg = await genMsg(id, p, data, opt.tags, owner, msg_owner, true)
259
+ __msg = msg
260
+ const _env = await genEnv({
261
+ pid: p.id,
262
+ owner: p.owner,
263
+ module: p.module,
264
+ })
265
+ res = await _module.handle(null, msg, _env)
266
+ p.memory = res.Memory
267
+ delete res.Memory
268
+ } else {
269
+ p.height += 1
270
+ }
271
+ const _msg = {
272
+ ...o(dissoc("signer"), dissoc("memory"))(opt),
273
+ res,
274
+ msg: __msg,
275
+ }
276
+ await mem.set(_msg, "msgs", id)
277
+ if (_tags["Cron-Interval"]) {
278
+ let [num, unit] = _tags["Cron-Interval"].split("-")
279
+ let int = 0
280
+ switch (unit.replace(/s$/, "")) {
281
+ case "millisecond":
282
+ int = num
283
+ break
284
+ case "second":
285
+ int = num * 1000
286
+ break
287
+ case "minute":
288
+ int = num * 1000 * 60
289
+ break
290
+ case "hour":
291
+ int = num * 1000 * 60 * 60
292
+ break
293
+ case "day":
294
+ int = num * 1000 * 60 * 60 * 24
295
+ break
296
+ case "month":
297
+ int = num * 1000 * 60 * 60 * 24 * 30
298
+ break
299
+ case "year":
300
+ int = num * 1000 * 60 * 60 * 24 * 365
301
+ break
302
+ }
303
+ let cronTags = []
304
+ for (const k in _tags) {
305
+ if (/^Cron-Tag-/.test(k)) {
306
+ cronTags.push({ name: k.replace(/Cron-Tag-/, ""), value: _tags[k] })
307
+ }
308
+ }
309
+ p.cronTags = cronTags
310
+ p.span = int
311
+ }
312
+ await mem.set(p, "env", id)
313
+ delete ongoing[id]
314
+ return id
315
+ }
316
+
317
+ function genHashChain(previousHash, previousMessageId = null) {
318
+ const hasher = crypto.createHash("sha256")
319
+ hasher.update(Buffer.from(previousHash, "base64"))
320
+ if (previousMessageId) {
321
+ hasher.update(Buffer.from(previousMessageId, "base64"))
322
+ }
323
+ return base64url(hasher.digest())
324
+ }
325
+
326
+ const assign = async opt => {
327
+ const p = await mem.get("env", opt.process)
328
+ if (!p || !opt.process) return null
329
+ let _opt = await mem.get("msgs", opt.message)
330
+ let hash = p.hash
331
+ try {
332
+ hash = genHashChain(p.hash, opt.message)
333
+ } catch (e) {
334
+ console.log(e)
335
+ }
336
+ p.hash = hash
337
+ opt.tags = buildTags(
338
+ null,
339
+ mergeLeft(tags(opt.tags ?? []), {
340
+ Timestamp: Date.now(),
341
+ Epoch: p.epochs.length,
342
+ Nonce: "0",
343
+ "Data-Protocol": "ao",
344
+ Variant: variant ?? "ao.TN.1",
345
+ Type: "Assignment",
346
+ "Block-Height": await mem.get("height"),
347
+ Process: opt.process,
348
+ Message: opt.message,
349
+ "Hash-Chain": hash,
350
+ })
351
+ )
352
+ p.epochs.push([opt.message])
353
+ const { id, owner, item } = await ar.dataitem({
354
+ data: opt.data,
355
+ signer: opt.signer,
356
+ tags: tags(opt.tags),
357
+ target: opt.process,
358
+ })
359
+ if (opt.message_item) {
360
+ await ar.postItems([opt.message_item, item], su.jwk)
361
+ } else {
362
+ await ar.postItems(item, su.jwk)
363
+ }
364
+
365
+ // Remote CU — delegate WASM execution to satellite CU
366
+ if (p._cu_url) {
367
+ try {
368
+ let evalData = _opt?.data ?? ""
369
+ let evalTags = _opt?.tags
370
+ let evalFrom = _opt?.from ?? opt.from
371
+ if (_opt?.item) {
372
+ const decoded = base64url.decode(_opt.item.data)
373
+ evalData = typeof decoded === "string" ? decoded : Buffer.from(decoded).toString("utf-8")
374
+ evalTags = _opt.item.tags
375
+ const t = tags(evalTags)
376
+ if (t["From-Process"]) evalFrom = t["From-Process"]
377
+ if (!evalFrom) {
378
+ evalFrom = await arweave.wallets.jwkToAddress({
379
+ kty: "RSA", n: _opt.item.owner, e: "AQAB",
380
+ })
381
+ }
382
+ }
383
+ // Cranked messages historically used MU addr as From. But AOS's
384
+ // msg.reply targets msg.From, so overwriting From to mu.addr
385
+ // breaks the X-Reference round-trip for Send().receive(). Only
386
+ // override when no explicit from is supplied by the caller.
387
+ if (_opt?.for && !_opt?.from) evalFrom = mu.addr
388
+ const cuResult = await fetch(`${p._cu_url}/cu/evaluate`, {
389
+ method: "POST",
390
+ headers: { "Content-Type": "application/json" },
391
+ body: JSON.stringify({
392
+ message: opt.message,
393
+ process: opt.process,
394
+ data: evalData,
395
+ tags: evalTags,
396
+ from: evalFrom,
397
+ }),
398
+ }).then(r => r.json())
399
+ p.results.push(opt.message)
400
+ await mem.set(p, "env", opt.process)
401
+ const _msg = { ...dissoc("signer", _opt), res: cuResult, msg: null }
402
+ await mem.set(_msg, "msgs", opt.message)
403
+ // Route outbox from CU response
404
+ for (const v of cuResult?.Messages ?? []) {
405
+ const envExists = await mem.get("env", v.Target)
406
+ if (envExists) {
407
+ await message({
408
+ for: opt.message,
409
+ process: v.Target,
410
+ tags: v.Tags,
411
+ data: v.Data,
412
+ signer: mu.signer,
413
+ from: opt.process,
414
+ target: v.Target,
415
+ })
416
+ } else if (mem._remote) {
417
+ // Forward to main AR's MU for routing
418
+ const fwdTags = buildTags(null, mergeLeft(tags(v.Tags), {
419
+ "Data-Protocol": "ao",
420
+ Variant: variant ?? "ao.TN.1",
421
+ Type: "Message",
422
+ "From-Process": opt.process,
423
+ "Pushed-For": opt.message,
424
+ }))
425
+ await record({
426
+ for: opt.message,
427
+ tags: fwdTags,
428
+ data: v.Data,
429
+ signer: mu.signer,
430
+ from: opt.process,
431
+ target: v.Target,
432
+ })
433
+ }
434
+ }
435
+ for (const v of cuResult?.Spawns ?? []) {
436
+ const __tags = tags(v.Tags)
437
+ await spawn({
438
+ for: opt.message,
439
+ module: __tags.Module,
440
+ scheduler,
441
+ tags: v.Tags,
442
+ data: v.Data,
443
+ from: __tags["From-Process"],
444
+ signer: mu.signer,
445
+ })
446
+ }
447
+ return id
448
+ } catch (e) {
449
+ console.log("Remote CU assign error:", e)
450
+ return null
451
+ }
452
+ }
453
+
454
+ try {
455
+ let data = _opt.data ?? ""
456
+ let _tags = _opt.tags
457
+ let from = _opt.from ?? opt.from ?? owner
458
+ if (_opt.item) {
459
+ data = base64url.decode(_opt.item.data)
460
+ _tags = _opt.item.tags
461
+ const t = tags(_tags)
462
+ if (t["From-Process"]) from = t["From-Process"]
463
+ if (!from) {
464
+ from = await arweave.wallets.jwkToAddress({
465
+ kty: "RSA",
466
+ n: _opt.item.owner,
467
+ e: "AQAB",
468
+ })
469
+ }
470
+ }
471
+ // Cranked messages (inter-process) historically used MU addr as
472
+ // From for AOS trust. But AOS's msg.reply uses msg.From as Target,
473
+ // so overwriting From to mu.addr breaks the X-Reference round-trip
474
+ // needed for Send().receive() coroutine resumption. Preserve the
475
+ // originating process (passed via _opt.from = opt.process from the
476
+ // outbox-dispatch loop) so replies land back on it.
477
+ if (_opt.for && !_opt.from) from = mu.addr
478
+ // check: is owner=mu.addr right?
479
+ const _owner = opt.message_item?.owner
480
+ ? toAddr(opt.message_item.owner)
481
+ : mu.addr
482
+ const msg = await genMsg(opt.message, p, data, _tags, from, _owner)
483
+ const _env = await genEnv({
484
+ pid: p.id,
485
+ owner: p.owner,
486
+ module: p.module,
487
+ })
488
+ if (!p.handle) {
489
+ const { format, mod, wasm } = await mem.getWasm(p.module)
490
+ const wdrive = extensions[p.extension]
491
+ p.handle = await AoLoader(wasm, {
492
+ format,
493
+ WeaveDrive: wdrive,
494
+ spawn: (await mem.getTx(p.id))?.item,
495
+ module: await mem.getTx(mod),
496
+ })
497
+ if (mem.env[opt.process]) mem.env[opt.process].handle = p.handle
498
+ }
499
+ if (p.compressed) {
500
+ const start = Date.now()
501
+ p.memory = mem.decompress(p.memory, p.original_size)
502
+ p.compressed = false
503
+ }
504
+ const res = await p.handle(p.memory, msg, _env)
505
+ p.memory = res.Memory
506
+ delete res.Memory
507
+ p.results.push(opt.message)
508
+ await mem.set(p, "env", opt.process)
509
+ const _msg = { ...dissoc("signer", _opt), res, msg }
510
+ await mem.set(_msg, "msgs", opt.message)
511
+ for (const v of res.Messages ?? []) {
512
+ if (await mem.get("env", v.Target)) {
513
+ await message({
514
+ for: opt.message,
515
+ process: v.Target,
516
+ tags: v.Tags,
517
+ data: v.Data,
518
+ signer: mu.signer,
519
+ from: opt.process,
520
+ target: v.Target,
521
+ })
522
+ } else {
523
+ const t = tags(v.Tags)
524
+ // this behaviour is different from AOS (temporary hack for remote tests)
525
+ if (t.__HyperBEAM__) {
526
+ let result = null
527
+ let slot = null
528
+ try {
529
+ const fetchHB = async (
530
+ path,
531
+ { json = true, params = "" } = {}
532
+ ) => {
533
+ return await fetch(
534
+ `${t.__HyperBEAM__}${path}${json ? "/serialize~json@1.0" : ""}${params ? "?" + params : ""}`
535
+ ).then(r => r[json ? "json" : "text"]())
536
+ }
537
+ const info = await fetchHB("/~meta@1.0/info")
538
+ const { request } = connect({
539
+ MODE: "mainnet",
540
+ URL: t.__HyperBEAM__,
541
+ device: "",
542
+ signer: createSigner(mu.jwk),
543
+ })
544
+ let _tags = {
545
+ ...t,
546
+ "From-Process": opt.process,
547
+ "Pushed-For": id,
548
+ method: "POST",
549
+ path: `/${v.Target}/schedule`,
550
+ scheduler: info.address,
551
+ }
552
+ ;({ slot } = await request(_tags))
553
+ const res = await fetchHB(`/${v.Target}~process@1.0/compute`, {
554
+ params: `slot=${slot}`,
555
+ })
556
+ const {
557
+ results: { data },
558
+ } = res
559
+ result = data
560
+ } catch (e) {
561
+ console.log(e)
562
+ }
563
+ if (result) {
564
+ /*
565
+ await message({
566
+ for: slot,
567
+ process: opt.process,
568
+ tags: buildTags({
569
+ "X-Reference": t.Reference,
570
+ }),
571
+ data: JSON.stringify(result),
572
+ signer: mu.signer,
573
+ from: v.Target,
574
+ target: opt.process,
575
+ })*/
576
+ }
577
+ } else if (t.__SU__) {
578
+ const sch = t.__SU__
579
+ const tar = v.Target
580
+ /*const procs =
581
+ (await fetch(sch).then(r => r.json()))?.Processes ?? []*/
582
+ const ao = await new AO({ port: sch.split(":").pop() - 2 }).init(
583
+ mu.jwk
584
+ )
585
+ try {
586
+ let _tags = {
587
+ ...t,
588
+ "From-Process": opt.process,
589
+ "Pushed-For": id,
590
+ }
591
+ const pr = (await mem.getTx(opt.process))?.tags ?? []
592
+ const module = tags(pr).Module
593
+ if (module) _tags["From-Module"] = module
594
+ const act = _tags["Action"] ?? null
595
+ delete _tags["Action"]
596
+ const { mid } = await ao.msg({
597
+ act,
598
+ pid: tar,
599
+ tags: _tags,
600
+ data: v.Data ?? "",
601
+ })
602
+ } catch (e) {
603
+ console.log(e)
604
+ }
605
+ } else if (t.__Scheduler__) {
606
+ const sch = t.__Scheduler__
607
+ const tar = v.Target
608
+ const procs =
609
+ (await fetch(sch).then(r => r.json()))?.Processes ?? []
610
+ const ao = await new AO({ port: sch.split(":").pop() - 3 }).init(
611
+ mu.jwk
612
+ )
613
+ try {
614
+ let _tags = {
615
+ ...t,
616
+ "From-Process": opt.process,
617
+ "Pushed-For": id,
618
+ }
619
+ const pr = (await mem.getTx(opt.process))?.tags ?? []
620
+ const module = tags(pr).Module
621
+ if (module) _tags["From-Module"] = module
622
+ const { mid } = await ao.msg({
623
+ act: _tags["Action"] ?? null,
624
+ pid: tar,
625
+ tags: _tags,
626
+ data: v.Data ?? "",
627
+ })
628
+ } catch (e) {
629
+ console.log(e)
630
+ }
631
+ } else if (mem._remote) {
632
+ // Remote mode: forward to main AR's MU for routing
633
+ try {
634
+ const di = await ar.dataitem({
635
+ data: v.Data ?? "",
636
+ signer: mu.signer,
637
+ tags: mergeLeft(tags(v.Tags), {
638
+ "Data-Protocol": "ao",
639
+ Variant: variant ?? "ao.TN.1",
640
+ Type: "Message",
641
+ "From-Process": opt.process,
642
+ "Pushed-For": opt.message,
643
+ }),
644
+ target: v.Target,
645
+ })
646
+ await mem._remote.postMU(di.item.getRaw())
647
+ } catch (e) {
648
+ console.log("Remote MU forward error:", e)
649
+ }
650
+ } else {
651
+ await record({
652
+ for: opt.message,
653
+ tags: v.Tags,
654
+ data: v.Data,
655
+ signer: mu.signer,
656
+ from: opt.process,
657
+ target: v.Target,
658
+ })
659
+ }
660
+ }
661
+ }
662
+ for (const v of res.Spawns ?? []) {
663
+ const __tags = tags(v.Tags)
664
+ await spawn({
665
+ for: opt.message,
666
+ module: __tags.Module,
667
+ scheduler,
668
+ tags: v.Tags,
669
+ data: v.Data,
670
+ from: __tags["From-Process"],
671
+ signer: mu.signer,
672
+ })
673
+ }
674
+ for (const v of res.Assignments ?? []) {
675
+ for (const v2 of v.Processes) {
676
+ await assign({
677
+ message: v.Message,
678
+ process: v2,
679
+ from: opt.process,
680
+ signer: mu.signer,
681
+ })
682
+ }
683
+ }
684
+ return id
685
+ } catch (e) {
686
+ console.log(e)
687
+ }
688
+ return null
689
+ }
690
+ const message = async opt => {
691
+ let id = ""
692
+ let owner = ""
693
+ let item = null
694
+ if (ar.isHttpMsg(opt.http_msg)) {
695
+ id = opt.id ?? opt.http_msg.target
696
+ const key = `${opt.process}:${id}}`
697
+ if (ongoing[key]) {
698
+ let i = 0
699
+ while (i < 30 && ongoing[key]) {
700
+ await wait(100)
701
+ i++
702
+ }
703
+ return id
704
+ } else {
705
+ ongoing[key] = true
706
+ ;({ owner, item } = await ar.httpmsg(opt.http_msg, id))
707
+ // check if process exists, and recover if necessary
708
+ const p = await mem.get("env", opt.process)
709
+ const new_slot = opt.slot * 1
710
+ const last_slot = !p ? -1 : p.results.length - 1
711
+ if (last_slot + 1 < new_slot) {
712
+ if (!hb || opt.recovery) return null
713
+ await recover(opt.process)
714
+ }
715
+ }
716
+ } else {
717
+ id = opt?.item?.id ?? ""
718
+ owner = opt.owner ?? ""
719
+ item = opt.item
720
+ }
721
+ const p = await mem.get("env", opt.process)
722
+ if (!p) return null
723
+ if (!opt.item && opt.signer) {
724
+ opt.tags = buildTags(
725
+ null,
726
+ mergeLeft(tags(opt.tags ?? []), {
727
+ "Data-Protocol": "ao",
728
+ Variant: variant ?? "ao.TN.1",
729
+ Type: "Message",
730
+ })
731
+ )
732
+ if (opt.for) {
733
+ opt.tags.push({ name: "Pushed-For", value: opt.for })
734
+ opt.tags.push({ name: "From-Process", value: opt.from })
735
+ const pr = (await mem.getTx(opt.from))?.tags ?? []
736
+ const module = tags(pr).Module
737
+ if (module) opt.tags.push({ name: "From-Module", value: module })
738
+ }
739
+ ;({ item, id, owner } = await ar.dataitem({
740
+ data: opt.data,
741
+ signer: opt.signer,
742
+ tags: tags(opt.tags),
743
+ target: opt.process,
744
+ }))
745
+ }
746
+ const _msg = dissoc("signer", opt)
747
+ await mem.set(_msg, "msgs", id)
748
+ if (ar.isHttpMsg(opt.http_msg)) {
749
+ p.epochs.push([id])
750
+ let _opt = opt
751
+ try {
752
+ // todo: not sure if this is correct
753
+ let from = _opt.from ?? opt.from ?? owner
754
+ let data = opt.http_msg.data ?? ""
755
+ let _tags = _opt.http_msg.tags
756
+ // todo: check if owner=mu.addr right?
757
+ const msg = await genMsg(opt.http_msg, p, data, _tags, from, owner)
758
+ const _env = await genEnv({
759
+ pid: p.id,
760
+ owner: p.owner,
761
+ module: p.module,
762
+ })
763
+ if (!p.handle) {
764
+ const { format, mod, wasm } = await mem.getWasm(p.module)
765
+ const wdrive = extensions[p.extension]
766
+ p.handle = await AoLoader(wasm, {
767
+ format,
768
+ WeaveDrive: wdrive,
769
+ spawn: (await mem.getTx(p.id))?.item,
770
+ module: await mem.getTx(mod),
771
+ })
772
+ if (mem.env[opt.process]) mem.env[opt.process].handle = p.handle
773
+ }
774
+ if (p.compressed) {
775
+ const start = Date.now()
776
+ p.memory = mem.decompress(p.memory, p.original_size)
777
+ p.compressed = false
778
+ }
779
+ const res = await p.handle(p.memory, msg, _env)
780
+ p.memory = res.Memory
781
+ delete res.Memory
782
+ p.results.push(id)
783
+ await mem.set(p, "env", opt.process)
784
+ const _msg = { ...dissoc("signer", _opt), res, msg }
785
+ await mem.set(_msg, "msgs", id)
786
+ } catch (e) {
787
+ console.log(e)
788
+ }
789
+ } else {
790
+ await assign({
791
+ message_item: item,
792
+ message: id,
793
+ process: opt.process,
794
+ from: owner,
795
+ signer: mu.signer,
796
+ })
797
+ }
798
+ const key = `${opt.process}:${id}}`
799
+ delete ongoing[key]
800
+ return id
801
+ }
802
+ const record = async opt => {
803
+ let id = opt?.item?.id ?? ""
804
+ let owner = opt.owner ?? ""
805
+ let item = opt.item
806
+ opt.tags = buildTags(
807
+ null,
808
+ mergeLeft(tags(opt.tags ?? []), {
809
+ "Data-Protocol": "ao",
810
+ Variant: variant ?? "ao.TN.1",
811
+ Type: "Message",
812
+ })
813
+ )
814
+ if (opt.for) {
815
+ opt.tags.push({ name: "Pushed-For", value: opt.for })
816
+ opt.tags.push({ name: "From-Process", value: opt.from })
817
+ const pr = (await mem.getTx(opt.from))?.tags ?? []
818
+ const module = tags(pr).Module
819
+ if (module) opt.tags.push({ name: "From-Module", value: module })
820
+ }
821
+ ;({ item, id, owner } = await ar.dataitem({
822
+ data: opt.data,
823
+ signer: opt.signer,
824
+ tags: tags(opt.tags),
825
+ target: opt.process,
826
+ }))
827
+ const _msg = dissoc("signer", opt)
828
+ await mem.set(_msg, "msgs", id)
829
+ await ar.postItems(item, su.jwk)
830
+ }
831
+ const recover = async (pid, next) => {
832
+ let count = 0
833
+ let success = false
834
+ if (hb) {
835
+ if (onRecovery[pid]) {
836
+ let success = false
837
+ let i = 0
838
+ while (true) {
839
+ await wait(1000)
840
+ if (!onRecovery[pid]) {
841
+ success = true
842
+ break
843
+ }
844
+ if (i > 10) break
845
+ i++
846
+ }
847
+ return { success }
848
+ } else {
849
+ onRecovery[pid] = true
850
+ try {
851
+ const p = await mem.get("env", pid)
852
+ const from = p ? p.results.length : 0
853
+ const msgs = next ? await next() : await hb.messages({ pid, from })
854
+ for (let v of msgs.edges) {
855
+ let item = {}
856
+ for (let k in v.node.message) {
857
+ item[k.toLowerCase()] = v.node.message[k]
858
+ }
859
+
860
+ item.tags.push({ name: "signature-input", value: "http-sig-" })
861
+ item.tags.push({
862
+ name: "siot",
863
+ value: Number(v.cursor).toString(),
864
+ })
865
+ item.tags.push({ name: "Owner", value: v.node.message.Owner })
866
+ // todo: why all the ids from Hyperbeam are the same?
867
+ item.tags.push({ name: "id", value: v.node.message.Id })
868
+ item.target = pid
869
+
870
+ let _tags = tags(item.tags)
871
+ if (_tags.Type === "Process") {
872
+ await spawn({
873
+ id: v.node.message.Id,
874
+ http_msg: item,
875
+ scheduler: _tags.Scheduler,
876
+ module: _tags.Module,
877
+ slot: v.cursor,
878
+ recovery: true,
879
+ })
880
+ } else {
881
+ await message({
882
+ id: v.node.message.Id,
883
+ process: pid,
884
+ http_msg: item,
885
+ slot: v.cursor,
886
+ recovery: true,
887
+ })
888
+ }
889
+ count++
890
+ }
891
+ if (msgs.next) await recover(pid, msgs.next)
892
+ } catch (e) {
893
+ console.log(e)
894
+ }
895
+ delete onRecovery[pid]
896
+ }
897
+ success = true
898
+ }
899
+ return { recovered: count, pid, success }
900
+ }
901
+
902
+ // Satellite CU evaluate: WASM execution only, no DataItem creation or AR posting.
903
+ // Used by cu_post_evaluate on remote CU workers.
904
+ const evaluate = async ({
905
+ message: msgId,
906
+ process: pid,
907
+ data,
908
+ tags: msgTags,
909
+ from,
910
+ is_spawn,
911
+ module: modId,
912
+ scheduler: sch,
913
+ }) => {
914
+ if (is_spawn) {
915
+ const mod = modId || tags(msgTags || []).Module
916
+ if (!mod) throw Error("module missing for evaluate spawn")
917
+ const { mod: resolvedMod, wasm, format } = await mem.getWasm(mod)
918
+ const _tags = tags(msgTags || [])
919
+ const ext = _tags.Extension || "WeaveDrive"
920
+ const wdrive = extensions[ext]
921
+ const spawnTx = await mem.getTx(pid)
922
+ const moduleTx = await mem.getTx(resolvedMod)
923
+ const handle = await AoLoader(wasm, {
924
+ format,
925
+ WeaveDrive: wdrive,
926
+ spawn: spawnTx?.item ?? spawnTx ?? null,
927
+ module: moduleTx,
928
+ })
929
+ const owner = from || mu.addr
930
+ let p = {
931
+ extension: ext,
932
+ format,
933
+ id: pid,
934
+ epochs: [],
935
+ handle,
936
+ module: resolvedMod,
937
+ hash: pid,
938
+ memory: null,
939
+ owner,
940
+ height: 0,
941
+ results: [pid],
942
+ }
943
+ let bootData = ""
944
+ if (_tags["On-Boot"] === "Data") bootData = data ?? ""
945
+ else bootData = data ?? ""
946
+ const msg = await genMsg(pid, p, bootData, msgTags || [], owner, owner, true)
947
+ const _env = await genEnv({ pid, owner, module: resolvedMod })
948
+ const res = await handle(null, msg, _env)
949
+ p.memory = res.Memory
950
+ delete res.Memory
951
+ await mem.set({ tags: msgTags, data, res, msg }, "msgs", pid)
952
+ await mem.set(p, "env", pid)
953
+ return res
954
+ }
955
+
956
+ // Message evaluation with state update
957
+ const p = await mem.get("env", pid)
958
+ if (!p) throw Error(`process ${pid} not found on satellite CU`)
959
+ if (!p.handle) {
960
+ const { format, mod, wasm } = await mem.getWasm(p.module)
961
+ const wdrive = extensions[p.extension]
962
+ const spawnTx = await mem.getTx(p.id)
963
+ const moduleTx = await mem.getTx(mod)
964
+ p.handle = await AoLoader(wasm, {
965
+ format,
966
+ WeaveDrive: wdrive,
967
+ spawn: spawnTx?.item ?? spawnTx ?? null,
968
+ module: moduleTx,
969
+ })
970
+ }
971
+ if (p.compressed) {
972
+ p.memory = mem.decompress(p.memory, p.original_size)
973
+ p.compressed = false
974
+ }
975
+ p.height += 1
976
+ const owner = from || mu.addr
977
+ const msg = await genMsg(msgId, p, data ?? "", msgTags || [], owner, owner)
978
+ const _env = await genEnv({ pid, owner: p.owner, module: p.module })
979
+ const res = await p.handle(p.memory, msg, _env)
980
+ p.memory = res.Memory
981
+ delete res.Memory
982
+ p.results.push(msgId)
983
+ await mem.set(p, "env", pid)
984
+ await mem.set({ tags: msgTags, data, from, res, msg }, "msgs", msgId)
985
+ return res
986
+ }
987
+
988
+ const result = async opt => {
989
+ return (await mem.get("msgs", opt.message))?.res
990
+ }
991
+
992
+ return {
993
+ message,
994
+ unmonitor: async opt => {
995
+ const p = await mem.get("env", opt.process)
996
+ try {
997
+ clearInterval(p.cron)
998
+ p.cron = null
999
+ } catch (e) {}
1000
+ },
1001
+ monitor: async opt => {
1002
+ const p = await mem.get("env", opt.process)
1003
+ if (isNil(p.cron)) {
1004
+ p.cron = setInterval(async () => {
1005
+ await message({
1006
+ tags: p.cronTags,
1007
+ process: opt.process,
1008
+ signer: mu.signer,
1009
+ from: mu.addr,
1010
+ })
1011
+ }, p.span)
1012
+ }
1013
+ },
1014
+ spawn,
1015
+ assign,
1016
+ ar,
1017
+ result,
1018
+ results: async opt => {
1019
+ const p = await mem.get("env", opt.process)
1020
+ if (!p) return { edges: [] }
1021
+ let results = p?.results || []
1022
+ const { from = null, to = null, sort = "ASC", limit = 25 } = opt || {}
1023
+
1024
+ if (sort === "DESC") results = reverse(results)
1025
+ let _res = []
1026
+ let count = 0
1027
+ let started = isNil(from)
1028
+ for (let v of results) {
1029
+ if (started) {
1030
+ _res.push({ cursor: v, node: await result({ message: v }) })
1031
+ count++
1032
+ if (!isNil(to) && v === to) break
1033
+ if (limit <= count) break
1034
+ } else if (from === v) started = true
1035
+ }
1036
+ return { edges: _res }
1037
+ },
1038
+ dryrun: async opt => {
1039
+ const p = await mem.get("env", opt.process)
1040
+ if (!p) return null
1041
+ let id = opt.id ?? ""
1042
+ let owner = opt.owner ?? mu.addr
1043
+ if (!opt.id && opt.signer) {
1044
+ ;({ id, owner } = await ar.dataitem({ ...opt, target: opt.process }))
1045
+ }
1046
+ try {
1047
+ const msg = await genMsg(
1048
+ id,
1049
+ p,
1050
+ opt.data ?? "",
1051
+ opt.tags,
1052
+ owner,
1053
+ owner,
1054
+ true
1055
+ )
1056
+ const _env = await genEnv({
1057
+ pid: p.id,
1058
+ owner: p.owner,
1059
+ module: p.module,
1060
+ })
1061
+ function cloneMemory(memory) {
1062
+ const buffer = memory.buffer.slice(0)
1063
+ return new WebAssembly.Memory({
1064
+ initial: memory.buffer.byteLength / 65536,
1065
+ maximum: memory.maximum || undefined,
1066
+ shared: memory.shared || false,
1067
+ })
1068
+ }
1069
+ if (!p.handle) {
1070
+ const { format, mod, wasm } = await mem.getWasm(p.module)
1071
+ const wdrive = extensions[p.extension]
1072
+ p.handle = await AoLoader(wasm, {
1073
+ format,
1074
+ WeaveDrive: wdrive,
1075
+ spawn: (await mem.getTx(p.id)).item,
1076
+ module: await mem.getTx(mod),
1077
+ })
1078
+ if (mem.env[opt.process]) mem.env[opt.process].handle = p.handle
1079
+ }
1080
+ if (p.compressed) {
1081
+ const start = Date.now()
1082
+ p.memory = mem.decompress(p.memory, p.original_size)
1083
+ p.compressed = false
1084
+ }
1085
+ const res = await p.handle(p.memory, msg, _env)
1086
+ delete res.Memory
1087
+ return res
1088
+ } catch (e) {
1089
+ console.log(e)
1090
+ }
1091
+ return null
1092
+ },
1093
+ recover,
1094
+ evaluate,
1095
+ mem,
1096
+ }
1097
+ }
1098
+ }