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.
- package/.babelrc-cjs +5 -0
- package/.babelrc-esm +5 -0
- package/.gitmodules +4 -0
- package/.prettierrc +6 -0
- package/README.md +90 -0
- package/app/.eslintrc.json +3 -0
- package/app/.mocharc.cjs +6 -0
- package/app/arweave.mjs +87 -0
- package/app/components/Footer.js +76 -0
- package/app/components/Global.js +1128 -0
- package/app/components/Header.js +306 -0
- package/app/components/Left.js +28 -0
- package/app/components/Logo.js +34 -0
- package/app/components/Middle.js +37 -0
- package/app/components/Sidebar.js +93 -0
- package/app/components/Tags.js +42 -0
- package/app/components/editor/Editor.js +322 -0
- package/app/components/editor/FilePath.js +42 -0
- package/app/components/editor/MonacoEditor.js +44 -0
- package/app/components/left/LeftMessages.js +85 -0
- package/app/components/left/LeftModules.js +86 -0
- package/app/components/left/LeftNetworks.js +438 -0
- package/app/components/left/LeftProcesses.js +98 -0
- package/app/components/left/LeftProjects.js +397 -0
- package/app/components/left/LeftTests.js +189 -0
- package/app/components/middle/MiddleBlocks.js +79 -0
- package/app/components/middle/MiddleEntity.js +16 -0
- package/app/components/middle/MiddleEntityAccount.js +264 -0
- package/app/components/middle/MiddleEntityAssignment.js +104 -0
- package/app/components/middle/MiddleEntityBlock.js +148 -0
- package/app/components/middle/MiddleEntityMessage.js +430 -0
- package/app/components/middle/MiddleEntityModule.js +183 -0
- package/app/components/middle/MiddleEntityProcess.js +323 -0
- package/app/components/middle/MiddleEntityTx.js +211 -0
- package/app/components/middle/MiddleMessages.js +87 -0
- package/app/components/middle/MiddleModules.js +89 -0
- package/app/components/middle/MiddleNetworks.js +516 -0
- package/app/components/middle/MiddleProcesses.js +87 -0
- package/app/components/middle/MiddleTests.js +134 -0
- package/app/components/modals/CreateFileModal.js +115 -0
- package/app/components/modals/CreateFolderModal.js +83 -0
- package/app/components/modals/CreateProjectModal.js +63 -0
- package/app/components/modals/FSModal.js +141 -0
- package/app/components/modals/ImportModal.js +105 -0
- package/app/components/modals/LaunchNetworkModal.js +95 -0
- package/app/components/modals/Modal.js +38 -0
- package/app/components/modals/ProxyModal.js +122 -0
- package/app/components/modals/RenameFileModal.js +95 -0
- package/app/components/styles/EditorScrollbarStyle.js +29 -0
- package/app/components/styles/EntityScrollbarStyle.js +29 -0
- package/app/components/styles/GlobalStyle.js +102 -0
- package/app/components/styles/XtermStyle.js +37 -0
- package/app/components/terminal/Terminal.js +132 -0
- package/app/components/terminal/Xterm.js +160 -0
- package/app/components/ui/avatar.jsx +49 -0
- package/app/components/ui/checkbox.jsx +17 -0
- package/app/components/ui/close-button.jsx +20 -0
- package/app/components/ui/color-mode.jsx +61 -0
- package/app/components/ui/dialog.jsx +54 -0
- package/app/components/ui/drawer.jsx +44 -0
- package/app/components/ui/field.jsx +22 -0
- package/app/components/ui/input-group.jsx +39 -0
- package/app/components/ui/popover.jsx +49 -0
- package/app/components/ui/provider.jsx +12 -0
- package/app/components/ui/radio.jsx +17 -0
- package/app/components/ui/slider.jsx +107 -0
- package/app/components/ui/toaster.jsx +69 -0
- package/app/components/ui/tooltip.jsx +35 -0
- package/app/index.js +10 -0
- package/app/jsconfig.json +7 -0
- package/app/lib/GithubCSS.js +1218 -0
- package/app/lib/addon-fit.js +72 -0
- package/app/lib/data.js +31 -0
- package/app/lib/github-markdown.css +1169 -0
- package/app/lib/global.js +1 -0
- package/app/lib/guide.js +82 -0
- package/app/lib/hub.js +109 -0
- package/app/lib/scripts.js +47 -0
- package/app/lib/store.js +34 -0
- package/app/lib/use.js +64 -0
- package/app/lib/utils.js +387 -0
- package/app/lib/webrtc.js +217 -0
- package/app/next.config.js +25 -0
- package/app/package.json +62 -0
- package/app/pages/404.js +9 -0
- package/app/pages/_app.js +10 -0
- package/app/pages/_document.js +14 -0
- package/app/pages/index.js +121 -0
- package/app/playwright.config.mjs +41 -0
- package/app/proxy.mjs +21 -0
- package/app/public/assets/cover.png +0 -0
- package/app/public/blueprints/apm.lua +91 -0
- package/app/public/blueprints/arena.lua +345 -0
- package/app/public/blueprints/arns.lua +318 -0
- package/app/public/blueprints/chat.lua +210 -0
- package/app/public/blueprints/chatroom.lua +56 -0
- package/app/public/blueprints/patch-legacy-reply.lua +13 -0
- package/app/public/blueprints/staking.lua +93 -0
- package/app/public/blueprints/token.lua +298 -0
- package/app/public/blueprints/voting.lua +45 -0
- package/app/public/favicon.ico +0 -0
- package/app/public/logo.png +0 -0
- package/cli-esm.js +55 -0
- package/cli.js +54 -0
- package/devnet/app/api.js +129 -0
- package/devnet/app/components/layout.js +89 -0
- package/devnet/app/components/pagination.js +144 -0
- package/devnet/app/components/search.js +159 -0
- package/devnet/app/components/table.js +124 -0
- package/devnet/app/components/tags.js +89 -0
- package/devnet/app/index.html +14 -0
- package/devnet/app/main.js +215 -0
- package/devnet/app/router.js +59 -0
- package/devnet/app/state.js +19 -0
- package/devnet/app/style.css +1606 -0
- package/devnet/app/utils.js +77 -0
- package/devnet/app/views/blocks.js +75 -0
- package/devnet/app/views/dashboard.js +127 -0
- package/devnet/app/views/entity.js +1473 -0
- package/devnet/app/views/messages.js +90 -0
- package/devnet/app/views/modules.js +165 -0
- package/devnet/app/views/processes.js +90 -0
- package/devnet/app/views/schedulers.js +90 -0
- package/devnet/app/views/transactions.js +88 -0
- package/devnet/migrations/0001_initial.sql +51 -0
- package/devnet/package.json +26 -0
- package/devnet/playwright.config.js +7 -0
- package/devnet/src/cu-worker.js +166 -0
- package/devnet/src/index.js +309 -0
- package/devnet/vite.config.js +17 -0
- package/devnet/vitest.config.js +10 -0
- package/devnet/wrangler-cu.toml +32 -0
- package/devnet/wrangler.toml +38 -0
- package/dhfs-tutorial-app/package.json +15 -0
- package/dist/esm/workspace/dashboard/public/favicon.png +0 -0
- package/dist/esm/workspace/src/counter.lua +14 -0
- package/dist/package.json +82 -0
- package/hb.sh +18 -0
- package/hbsig/.babelrc-cjs +5 -0
- package/hbsig/.babelrc-esm +5 -0
- package/hbsig/README.md +1 -0
- package/hbsig/dist/cjs/bin_to_str.js +44 -0
- package/hbsig/dist/cjs/collect-body-keys.js +470 -0
- package/hbsig/dist/cjs/commit.js +330 -0
- package/hbsig/dist/cjs/encode-array-item.js +110 -0
- package/hbsig/dist/cjs/encode-utils.js +242 -0
- package/hbsig/dist/cjs/encode.js +1365 -0
- package/hbsig/dist/cjs/erl_json.js +326 -0
- package/hbsig/dist/cjs/erl_str.js +1042 -0
- package/hbsig/dist/cjs/flat.js +279 -0
- package/hbsig/dist/cjs/http-message-signatures/httpbis.js +489 -0
- package/hbsig/dist/cjs/http-message-signatures/index.js +25 -0
- package/hbsig/dist/cjs/http-message-signatures/structured-header.js +129 -0
- package/hbsig/dist/cjs/httpsig.js +861 -0
- package/hbsig/dist/cjs/id.js +470 -0
- package/hbsig/dist/cjs/index.js +174 -0
- package/hbsig/dist/cjs/nocrypto.js +51 -0
- package/hbsig/dist/cjs/parser.js +201 -0
- package/hbsig/dist/cjs/send-utils.js +1231 -0
- package/hbsig/dist/cjs/send.js +211 -0
- package/hbsig/dist/cjs/signer-utils.js +494 -0
- package/hbsig/dist/cjs/signer.js +436 -0
- package/hbsig/dist/cjs/structured.js +515 -0
- package/hbsig/dist/cjs/test.js +12 -0
- package/hbsig/dist/cjs/utils.js +44 -0
- package/hbsig/dist/esm/bin_to_str.js +46 -0
- package/hbsig/dist/esm/collect-body-keys.js +436 -0
- package/hbsig/dist/esm/commit.js +219 -0
- package/hbsig/dist/esm/encode-array-item.js +112 -0
- package/hbsig/dist/esm/encode-utils.js +191 -0
- package/hbsig/dist/esm/encode.js +1256 -0
- package/hbsig/dist/esm/erl_json.js +292 -0
- package/hbsig/dist/esm/erl_str.js +1144 -0
- package/hbsig/dist/esm/flat.js +250 -0
- package/hbsig/dist/esm/http-message-signatures/httpbis.js +438 -0
- package/hbsig/dist/esm/http-message-signatures/index.js +4 -0
- package/hbsig/dist/esm/http-message-signatures/structured-header.js +105 -0
- package/hbsig/dist/esm/httpsig.js +866 -0
- package/hbsig/dist/esm/id.js +459 -0
- package/hbsig/dist/esm/index.js +13 -0
- package/hbsig/dist/esm/nocrypto.js +4 -0
- package/hbsig/dist/esm/package.json +3 -0
- package/hbsig/dist/esm/parser.js +171 -0
- package/hbsig/dist/esm/send-utils.js +1132 -0
- package/hbsig/dist/esm/send.js +142 -0
- package/hbsig/dist/esm/signer-utils.js +375 -0
- package/hbsig/dist/esm/signer.js +312 -0
- package/hbsig/dist/esm/structured.js +496 -0
- package/hbsig/dist/esm/test.js +2 -0
- package/hbsig/dist/esm/utils.js +29 -0
- package/hbsig/dist/package.json +39 -0
- package/hbsig/make.js +36 -0
- package/hbsig/package.json +39 -0
- package/hbsig/src/bin_to_str.js +46 -0
- package/hbsig/src/collect-body-keys.js +436 -0
- package/hbsig/src/commit.js +219 -0
- package/hbsig/src/encode-array-item.js +112 -0
- package/hbsig/src/encode-utils.js +191 -0
- package/hbsig/src/encode.js +1256 -0
- package/hbsig/src/erl_json.js +292 -0
- package/hbsig/src/erl_str.js +1144 -0
- package/hbsig/src/flat.js +250 -0
- package/hbsig/src/http-message-signatures/httpbis.js +438 -0
- package/hbsig/src/http-message-signatures/index.js +4 -0
- package/hbsig/src/http-message-signatures/structured-header.js +105 -0
- package/hbsig/src/httpsig.js +866 -0
- package/hbsig/src/id.js +459 -0
- package/hbsig/src/index.js +13 -0
- package/hbsig/src/nocrypto.js +4 -0
- package/hbsig/src/parser.js +171 -0
- package/hbsig/src/send-utils.js +1132 -0
- package/hbsig/src/send.js +142 -0
- package/hbsig/src/signer-utils.js +375 -0
- package/hbsig/src/signer.js +312 -0
- package/hbsig/src/structured.js +496 -0
- package/hbsig/src/test.js +2 -0
- package/hbsig/src/utils.js +29 -0
- package/lp/index.html +25 -0
- package/lp/package.json +19 -0
- package/lp/public/cover.png +0 -0
- package/lp/public/favicon.ico +0 -0
- package/lp/public/favicon.png +0 -0
- package/lp/public/images/book.jpg +0 -0
- package/lp/public/images/dashboard.png +0 -0
- package/lp/public/images/devnet.png +0 -0
- package/lp/public/images/hero-bg.png +0 -0
- package/lp/public/images/hyperadd.png +0 -0
- package/lp/public/images/message-flow.png +0 -0
- package/lp/public/images/mobile.png +0 -0
- package/lp/public/images/og-cover.png +0 -0
- package/lp/public/images/scan.png +0 -0
- package/lp/public/images/wao-hub.png +0 -0
- package/lp/public/images/wao-web.png +0 -0
- package/lp/public/logo.png +0 -0
- package/lp/src/App.jsx +29 -0
- package/lp/src/components/CodeBlock.jsx +37 -0
- package/lp/src/components/CodeBlock.module.css +89 -0
- package/lp/src/components/Footer.jsx +22 -0
- package/lp/src/components/Footer.module.css +60 -0
- package/lp/src/components/Nav.jsx +80 -0
- package/lp/src/components/Nav.module.css +177 -0
- package/lp/src/components/SectionWrapper.jsx +15 -0
- package/lp/src/hooks/useReveal.js +25 -0
- package/lp/src/hooks/useScrolled.js +14 -0
- package/lp/src/main.jsx +10 -0
- package/lp/src/sections/Book.jsx +60 -0
- package/lp/src/sections/Book.module.css +204 -0
- package/lp/src/sections/Browser.jsx +46 -0
- package/lp/src/sections/Browser.module.css +67 -0
- package/lp/src/sections/Devnet.jsx +55 -0
- package/lp/src/sections/Devnet.module.css +136 -0
- package/lp/src/sections/GetStarted.jsx +51 -0
- package/lp/src/sections/GetStarted.module.css +128 -0
- package/lp/src/sections/Hero.jsx +67 -0
- package/lp/src/sections/Hero.module.css +202 -0
- package/lp/src/sections/HyperADD.jsx +46 -0
- package/lp/src/sections/HyperADD.module.css +113 -0
- package/lp/src/sections/SDK.jsx +90 -0
- package/lp/src/sections/SDK.module.css +122 -0
- package/lp/src/sections/Testing.jsx +47 -0
- package/lp/src/sections/Testing.module.css +124 -0
- package/lp/src/sections/Vision.jsx +93 -0
- package/lp/src/sections/Vision.module.css +147 -0
- package/lp/src/styles/globals.css +285 -0
- package/lp/src/utils/scrollTo.js +4 -0
- package/lp/vite.config.js +7 -0
- package/make.js +39 -0
- package/package.json +17 -12
- package/patches/@permaweb+ao-loader+0.0.44.patch +64 -0
- package/plan.md +435 -0
- package/rebar.lock +1 -0
- package/src/accounts-web.js +128 -0
- package/src/accounts.js +124 -0
- package/src/adaptor-base.js +622 -0
- package/src/adaptor-cf.js +11 -0
- package/src/adaptor-web.js +11 -0
- package/src/adaptor.js +10 -0
- package/src/ao-loader.js +30660 -0
- package/src/ao.js +1173 -0
- package/src/aoconnect-base.js +1098 -0
- package/src/aoconnect-cf.js +9 -0
- package/src/aoconnect-web.js +8 -0
- package/src/aoconnect.js +8 -0
- package/src/aos_wamr.js +1 -0
- package/src/ar-remote.js +87 -0
- package/src/ar.js +276 -0
- package/src/armem-base.js +529 -0
- package/src/armem-cf.js +67 -0
- package/src/armem-web.js +19 -0
- package/src/armem.js +26 -0
- package/src/bao.js +141 -0
- package/src/bar.js +366 -0
- package/src/build.js +7 -0
- package/src/bundler.js +119 -0
- package/src/car.js +10 -0
- package/src/cf-env.js +29 -0
- package/src/cf.js +11 -0
- package/src/cli.js +561 -0
- package/src/compress.js +112 -0
- package/src/create.js +415 -0
- package/src/devs.js +86 -0
- package/src/dirname.js +1 -0
- package/src/dodb.js +26 -0
- package/src/erl_json.js +289 -0
- package/src/erl_str.js +1139 -0
- package/src/gql.js +229 -0
- package/src/hb.js +967 -0
- package/src/helpers.js +203 -0
- package/src/http.js +619 -0
- package/src/hub/bundler.js +123 -0
- package/src/hub/cu.js +74 -0
- package/src/hub/fs.js +157 -0
- package/src/hub/index.js +85 -0
- package/src/hub/utils.js +64 -0
- package/src/hub/ws-proxy.js +67 -0
- package/src/hyper-aos.js +1 -0
- package/src/hyperbeam-server.js +21 -0
- package/src/hyperbeam.js +585 -0
- package/src/index.js +5 -0
- package/src/keygen.js +47 -0
- package/src/lfdb.js +67 -0
- package/src/lua/aos.wasm +0 -0
- package/src/lua/aos2_0_1.js +1 -0
- package/src/lua/aos2_0_1.wasm +0 -0
- package/src/lua/aos2_0_3.js +1 -0
- package/src/lua/aos2_0_3.wasm +0 -0
- package/src/lua/aos2_0_4_32.js +1 -0
- package/src/lua/aos2_0_4_32.wasm +0 -0
- package/src/lua/aos2_0_6.wasm +0 -0
- package/src/lua/apm.lua +61 -0
- package/src/lua/llama.wasm +0 -0
- package/src/lua/process.wasm +0 -0
- package/src/lua/sqlite.js +1 -0
- package/src/lua/sqlite.wasm +0 -0
- package/src/lua/weavedb_mock.lua +44 -0
- package/src/lua/weavedrive.lua +53 -0
- package/src/run.js +25 -0
- package/src/server.js +173 -0
- package/src/storage-multi.js +183 -0
- package/src/tao.js +12 -0
- package/src/tar.js +10 -0
- package/src/test.js +42 -0
- package/src/tgql-d1.js +407 -0
- package/src/tgql.js +310 -0
- package/src/toerl.js +162 -0
- package/src/utils.js +777 -0
- package/src/wao.js +29 -0
- package/src/waosm/README.md +81 -0
- package/src/waosm/waosm.d.ts +40 -0
- package/src/waosm/waosm.js +240 -0
- package/src/waosm/waosm_bg.wasm +0 -0
- package/src/waosm/waosm_bg.wasm.d.ts +8 -0
- package/src/waosm-node/README.md +81 -0
- package/src/waosm-node/waosm.d.ts +8 -0
- package/src/waosm-node/waosm.js +4 -0
- package/src/waosm-node/waosm_bg.js +147 -0
- package/src/waosm-node/waosm_bg.wasm +0 -0
- package/src/waosm-node/waosm_bg.wasm.d.ts +8 -0
- package/src/waosm-node/waosm_bg.wasm.js +14 -0
- package/src/waosm-node.js +9 -0
- package/src/war.js +10 -0
- package/src/weavedrive.js +376 -0
- package/src/web.js +11 -0
- package/src/workspace/.mcp.json +8 -0
- package/src/workspace/CLAUDE.md +258 -0
- package/src/workspace/README.md +85 -0
- package/src/workspace/dashboard/index.html +163 -0
- package/src/workspace/dashboard/package.json +18 -0
- package/src/workspace/dashboard/public/favicon.ico +0 -0
- package/src/workspace/dashboard/public/favicon.png +0 -0
- package/src/workspace/dashboard/server.js +224 -0
- package/src/workspace/dashboard/src/App.jsx +2350 -0
- package/{cjs/workspace/frontend → src/workspace/dashboard}/vite.config.js +6 -0
- package/src/workspace/package.json +18 -0
- package/src/workspace/src/counter.lua +14 -0
- package/tsconfig.json +18 -0
- package/types/index.d.ts +329 -0
- package/waollama/.eslintrc.json +3 -0
- package/waollama/README.md +19 -0
- package/waollama/arweave.mjs +87 -0
- package/waollama/components/ui/avatar.jsx +49 -0
- package/waollama/components/ui/checkbox.jsx +17 -0
- package/waollama/components/ui/close-button.jsx +20 -0
- package/waollama/components/ui/color-mode.jsx +61 -0
- package/waollama/components/ui/dialog.jsx +54 -0
- package/waollama/components/ui/drawer.jsx +44 -0
- package/waollama/components/ui/field.jsx +22 -0
- package/waollama/components/ui/input-group.jsx +39 -0
- package/waollama/components/ui/popover.jsx +49 -0
- package/waollama/components/ui/provider.jsx +12 -0
- package/waollama/components/ui/radio.jsx +17 -0
- package/waollama/components/ui/slider.jsx +107 -0
- package/waollama/components/ui/tooltip.jsx +35 -0
- package/waollama/index.js +10 -0
- package/waollama/jsconfig.json +7 -0
- package/waollama/lib/ao-loader.js +30654 -0
- package/waollama/lib/client.js +1 -0
- package/waollama/lib/wasm.js +1 -0
- package/waollama/next.config.js +25 -0
- package/waollama/package.json +43 -0
- package/waollama/pages/404.js +9 -0
- package/waollama/pages/_app.js +9 -0
- package/waollama/pages/_document.js +14 -0
- package/waollama/pages/index.js +212 -0
- package/waollama/playwright.config.js +31 -0
- package/waollama/proxy.mjs +21 -0
- package/waollama/public/favicon.ico +0 -0
- package/waollama/public/human.png +0 -0
- package/waollama/public/llama.png +0 -0
- package/waosm/Cargo.toml +11 -0
- package/waosm/README.md +81 -0
- package/waosm/compress.js +112 -0
- package/waosm/make.js +33 -0
- package/waosm/package.json +10 -0
- package/waosm/src/lib.rs +180 -0
- package/waosm/test.js +16 -0
- package/cjs/workspace/.claude/agents/builder.md +0 -99
- package/cjs/workspace/.claude/agents/device-builder.md +0 -86
- package/cjs/workspace/.claude/agents/tester.md +0 -90
- package/cjs/workspace/.claude/mcp/dashboard/server.js +0 -128
- package/cjs/workspace/.claude/rules/deploy.md +0 -45
- package/cjs/workspace/.claude/rules/frontend.md +0 -69
- package/cjs/workspace/.claude/rules/hyperbeam.md +0 -104
- package/cjs/workspace/.claude/rules/lua.md +0 -108
- package/cjs/workspace/.claude/rules/testing.md +0 -257
- package/cjs/workspace/.claude/settings.json +0 -109
- package/cjs/workspace/.claude/skills/build/SKILL.md +0 -214
- package/cjs/workspace/.claude/skills/build-aos/SKILL.md +0 -129
- package/cjs/workspace/.claude/skills/build-device/SKILL.md +0 -192
- package/cjs/workspace/.claude/skills/build-frontend/SKILL.md +0 -134
- package/cjs/workspace/.claude/skills/build-module/SKILL.md +0 -281
- package/cjs/workspace/.claude/skills/create-aos/SKILL.md +0 -63
- package/cjs/workspace/.claude/skills/create-device/SKILL.md +0 -87
- package/cjs/workspace/.claude/skills/create-module/SKILL.md +0 -162
- package/cjs/workspace/.claude/skills/debug/SKILL.md +0 -57
- package/cjs/workspace/.claude/skills/deploy/SKILL.md +0 -85
- package/cjs/workspace/.claude/skills/dev/SKILL.md +0 -32
- package/cjs/workspace/.claude/skills/plan/SKILL.md +0 -176
- package/cjs/workspace/.claude/skills/readme/SKILL.md +0 -186
- package/cjs/workspace/.claude/skills/report/SKILL.md +0 -49
- package/cjs/workspace/.claude/skills/team/SKILL.md +0 -101
- package/cjs/workspace/.claude/skills/test/SKILL.md +0 -56
- package/cjs/workspace/.claude/skills/test-device/SKILL.md +0 -114
- package/cjs/workspace/.claude/skills/test-e2e/SKILL.md +0 -103
- package/cjs/workspace/.claude/skills/test-hb/SKILL.md +0 -76
- package/cjs/workspace/.claude/skills/validate/SKILL.md +0 -96
- package/cjs/workspace/.claude/skills/validate/scripts/check-lua.sh +0 -41
- package/cjs/workspace/docs/aos-lua.md +0 -428
- package/cjs/workspace/docs/debug.md +0 -230
- package/cjs/workspace/docs/hyperbeam-dev.md +0 -606
- package/cjs/workspace/docs/hyperbeam-devices.md +0 -618
- package/cjs/workspace/docs/wao-sdk.md +0 -807
- package/cjs/workspace/frontend/e2e/.gitkeep +0 -0
- package/cjs/workspace/frontend/index.html +0 -12
- package/cjs/workspace/frontend/package.json +0 -24
- package/cjs/workspace/frontend/playwright.config.js +0 -10
- package/cjs/workspace/frontend/src/App.jsx +0 -24
- package/cjs/workspace/frontend/test/.gitkeep +0 -0
- package/cjs/workspace/frontend/vitest.config.js +0 -10
- package/cjs/workspace/scripts/deploy.js +0 -140
- package/cjs/workspace/scripts/keygen.js +0 -52
- package/cjs/workspace/test/aos.test.js +0 -98
- package/cjs/workspace/test/hyperbeam.test.js +0 -80
- package/esm/compiler/native +0 -0
- package/esm/workspace/.claude/agents/builder.md +0 -99
- package/esm/workspace/.claude/agents/device-builder.md +0 -86
- package/esm/workspace/.claude/agents/tester.md +0 -90
- package/esm/workspace/.claude/mcp/dashboard/server.js +0 -128
- package/esm/workspace/.claude/rules/deploy.md +0 -45
- package/esm/workspace/.claude/rules/frontend.md +0 -69
- package/esm/workspace/.claude/rules/hyperbeam.md +0 -104
- package/esm/workspace/.claude/rules/lua.md +0 -108
- package/esm/workspace/.claude/rules/testing.md +0 -257
- package/esm/workspace/.claude/settings.json +0 -109
- package/esm/workspace/.claude/skills/build/SKILL.md +0 -214
- package/esm/workspace/.claude/skills/build-aos/SKILL.md +0 -129
- package/esm/workspace/.claude/skills/build-device/SKILL.md +0 -192
- package/esm/workspace/.claude/skills/build-frontend/SKILL.md +0 -134
- package/esm/workspace/.claude/skills/build-module/SKILL.md +0 -281
- package/esm/workspace/.claude/skills/create-aos/SKILL.md +0 -63
- package/esm/workspace/.claude/skills/create-device/SKILL.md +0 -87
- package/esm/workspace/.claude/skills/create-module/SKILL.md +0 -162
- package/esm/workspace/.claude/skills/debug/SKILL.md +0 -57
- package/esm/workspace/.claude/skills/deploy/SKILL.md +0 -85
- package/esm/workspace/.claude/skills/dev/SKILL.md +0 -32
- package/esm/workspace/.claude/skills/plan/SKILL.md +0 -176
- package/esm/workspace/.claude/skills/readme/SKILL.md +0 -186
- package/esm/workspace/.claude/skills/report/SKILL.md +0 -49
- package/esm/workspace/.claude/skills/team/SKILL.md +0 -101
- package/esm/workspace/.claude/skills/test/SKILL.md +0 -56
- package/esm/workspace/.claude/skills/test-device/SKILL.md +0 -114
- package/esm/workspace/.claude/skills/test-e2e/SKILL.md +0 -103
- package/esm/workspace/.claude/skills/test-hb/SKILL.md +0 -76
- package/esm/workspace/.claude/skills/validate/SKILL.md +0 -96
- package/esm/workspace/.claude/skills/validate/scripts/check-lua.sh +0 -41
- package/esm/workspace/docs/aos-lua.md +0 -428
- package/esm/workspace/docs/debug.md +0 -230
- package/esm/workspace/docs/hyperbeam-dev.md +0 -606
- package/esm/workspace/docs/hyperbeam-devices.md +0 -618
- package/esm/workspace/docs/wao-sdk.md +0 -807
- package/esm/workspace/frontend/e2e/.gitkeep +0 -0
- package/esm/workspace/frontend/index.html +0 -12
- package/esm/workspace/frontend/package.json +0 -24
- package/esm/workspace/frontend/playwright.config.js +0 -10
- package/esm/workspace/frontend/src/App.jsx +0 -24
- package/esm/workspace/frontend/src/main.jsx +0 -9
- package/esm/workspace/frontend/test/.gitkeep +0 -0
- package/esm/workspace/frontend/vite.config.js +0 -6
- package/esm/workspace/frontend/vitest.config.js +0 -10
- package/esm/workspace/scripts/deploy.js +0 -140
- package/esm/workspace/scripts/keygen.js +0 -52
- package/esm/workspace/test/aos.test.js +0 -98
- package/esm/workspace/test/hyperbeam.test.js +0 -80
- /package/{cjs/workspace/dashboard/public → devnet/app}/favicon.ico +0 -0
- /package/{cjs/workspace → dhfs-tutorial-app}/src/counter.lua +0 -0
- /package/{cjs → dist/cjs}/accounts-web.js +0 -0
- /package/{cjs → dist/cjs}/accounts.js +0 -0
- /package/{cjs → dist/cjs}/adaptor-base.js +0 -0
- /package/{cjs → dist/cjs}/adaptor-cf.js +0 -0
- /package/{cjs → dist/cjs}/adaptor-web.js +0 -0
- /package/{cjs → dist/cjs}/adaptor.js +0 -0
- /package/{cjs → dist/cjs}/ao-loader.js +0 -0
- /package/{cjs → dist/cjs}/ao.js +0 -0
- /package/{cjs → dist/cjs}/aoconnect-base.js +0 -0
- /package/{cjs → dist/cjs}/aoconnect-cf.js +0 -0
- /package/{cjs → dist/cjs}/aoconnect-web.js +0 -0
- /package/{cjs → dist/cjs}/aoconnect.js +0 -0
- /package/{cjs → dist/cjs}/aos_wamr.js +0 -0
- /package/{cjs → dist/cjs}/ar-remote.js +0 -0
- /package/{cjs → dist/cjs}/ar.js +0 -0
- /package/{cjs → dist/cjs}/armem-base.js +0 -0
- /package/{cjs → dist/cjs}/armem-cf.js +0 -0
- /package/{cjs → dist/cjs}/armem-web.js +0 -0
- /package/{cjs → dist/cjs}/armem.js +0 -0
- /package/{cjs → dist/cjs}/bao.js +0 -0
- /package/{cjs → dist/cjs}/bar.js +0 -0
- /package/{cjs → dist/cjs}/build.js +0 -0
- /package/{cjs → dist/cjs}/bundler.js +0 -0
- /package/{cjs → dist/cjs}/car.js +0 -0
- /package/{cjs → dist/cjs}/cf-env.js +0 -0
- /package/{cjs → dist/cjs}/cf.js +0 -0
- /package/{cjs → dist/cjs}/cli.js +0 -0
- /package/{cjs → dist/cjs}/compress.js +0 -0
- /package/{cjs → dist/cjs}/create.js +0 -0
- /package/{cjs → dist/cjs}/devs.js +0 -0
- /package/{cjs → dist/cjs}/dirname.js +0 -0
- /package/{cjs → dist/cjs}/dodb.js +0 -0
- /package/{cjs → dist/cjs}/erl_json.js +0 -0
- /package/{cjs → dist/cjs}/erl_str.js +0 -0
- /package/{cjs → dist/cjs}/gql.js +0 -0
- /package/{cjs → dist/cjs}/hb.js +0 -0
- /package/{cjs → dist/cjs}/helpers.js +0 -0
- /package/{cjs → dist/cjs}/http.js +0 -0
- /package/{cjs → dist/cjs}/hub/bundler.js +0 -0
- /package/{cjs → dist/cjs}/hub/cu.js +0 -0
- /package/{cjs → dist/cjs}/hub/fs.js +0 -0
- /package/{cjs → dist/cjs}/hub/index.js +0 -0
- /package/{cjs → dist/cjs}/hub/utils.js +0 -0
- /package/{cjs → dist/cjs}/hub/ws-proxy.js +0 -0
- /package/{cjs → dist/cjs}/hyper-aos.js +0 -0
- /package/{cjs → dist/cjs}/hyperbeam-server.js +0 -0
- /package/{cjs → dist/cjs}/hyperbeam.js +0 -0
- /package/{cjs → dist/cjs}/index.js +0 -0
- /package/{cjs → dist/cjs}/keygen.js +0 -0
- /package/{cjs → dist/cjs}/lfdb.js +0 -0
- /package/{cjs → dist/cjs}/lua/aos.wasm +0 -0
- /package/{cjs → dist/cjs}/lua/aos2_0_1.js +0 -0
- /package/{cjs → dist/cjs}/lua/aos2_0_1.wasm +0 -0
- /package/{cjs → dist/cjs}/lua/aos2_0_3.js +0 -0
- /package/{cjs → dist/cjs}/lua/aos2_0_3.wasm +0 -0
- /package/{cjs → dist/cjs}/lua/aos2_0_4_32.js +0 -0
- /package/{cjs → dist/cjs}/lua/aos2_0_4_32.wasm +0 -0
- /package/{cjs → dist/cjs}/lua/aos2_0_6.wasm +0 -0
- /package/{cjs → dist/cjs}/lua/apm.lua +0 -0
- /package/{cjs → dist/cjs}/lua/llama.wasm +0 -0
- /package/{cjs → dist/cjs}/lua/process.wasm +0 -0
- /package/{cjs → dist/cjs}/lua/sqlite.js +0 -0
- /package/{cjs → dist/cjs}/lua/sqlite.wasm +0 -0
- /package/{cjs → dist/cjs}/lua/weavedb_mock.lua +0 -0
- /package/{cjs → dist/cjs}/lua/weavedrive.lua +0 -0
- /package/{cjs → dist/cjs}/run.js +0 -0
- /package/{cjs → dist/cjs}/server.js +0 -0
- /package/{cjs → dist/cjs}/storage-multi.js +0 -0
- /package/{cjs → dist/cjs}/tao.js +0 -0
- /package/{cjs → dist/cjs}/tar.js +0 -0
- /package/{cjs → dist/cjs}/test.js +0 -0
- /package/{cjs → dist/cjs}/tgql-d1.js +0 -0
- /package/{cjs → dist/cjs}/tgql.js +0 -0
- /package/{cjs → dist/cjs}/toerl.js +0 -0
- /package/{cjs → dist/cjs}/utils.js +0 -0
- /package/{cjs → dist/cjs}/wao.js +0 -0
- /package/{cjs → dist/cjs}/waosm/waosm.js +0 -0
- /package/{cjs → dist/cjs}/waosm-node/waosm.js +0 -0
- /package/{cjs → dist/cjs}/waosm-node/waosm_bg.js +0 -0
- /package/{cjs → dist/cjs}/waosm-node/waosm_bg.wasm +0 -0
- /package/{cjs → dist/cjs}/waosm-node/waosm_bg.wasm.js +0 -0
- /package/{cjs → dist/cjs}/waosm-node.js +0 -0
- /package/{cjs → dist/cjs}/war.js +0 -0
- /package/{cjs → dist/cjs}/weavedrive.js +0 -0
- /package/{cjs → dist/cjs}/web.js +0 -0
- /package/{cjs → dist/cjs}/workspace/.mcp.json +0 -0
- /package/{cjs → dist/cjs}/workspace/CLAUDE.md +0 -0
- /package/{cjs → dist/cjs}/workspace/README.md +0 -0
- /package/{cjs → dist/cjs}/workspace/dashboard/index.html +0 -0
- /package/{cjs → dist/cjs}/workspace/dashboard/package.json +0 -0
- /package/{esm → dist/cjs}/workspace/dashboard/public/favicon.ico +0 -0
- /package/{cjs → dist/cjs}/workspace/dashboard/public/favicon.png +0 -0
- /package/{cjs → dist/cjs}/workspace/dashboard/server.js +0 -0
- /package/{cjs → dist/cjs}/workspace/dashboard/src/App.jsx +0 -0
- /package/{cjs → dist/cjs}/workspace/dashboard/src/main.jsx +0 -0
- /package/{cjs → dist/cjs}/workspace/dashboard/vite.config.js +0 -0
- /package/{cjs → dist/cjs}/workspace/package.json +0 -0
- /package/{esm → dist/cjs}/workspace/src/counter.lua +0 -0
- /package/{esm → dist/esm}/accounts-web.js +0 -0
- /package/{esm → dist/esm}/accounts.js +0 -0
- /package/{esm → dist/esm}/adaptor-base.js +0 -0
- /package/{esm → dist/esm}/adaptor-cf.js +0 -0
- /package/{esm → dist/esm}/adaptor-web.js +0 -0
- /package/{esm → dist/esm}/adaptor.js +0 -0
- /package/{esm → dist/esm}/ao-loader.js +0 -0
- /package/{esm → dist/esm}/ao.js +0 -0
- /package/{esm → dist/esm}/aoconnect-base.js +0 -0
- /package/{esm → dist/esm}/aoconnect-cf.js +0 -0
- /package/{esm → dist/esm}/aoconnect-web.js +0 -0
- /package/{esm → dist/esm}/aoconnect.js +0 -0
- /package/{esm → dist/esm}/aos_wamr.js +0 -0
- /package/{esm → dist/esm}/ar-remote.js +0 -0
- /package/{esm → dist/esm}/ar.js +0 -0
- /package/{esm → dist/esm}/armem-base.js +0 -0
- /package/{esm → dist/esm}/armem-cf.js +0 -0
- /package/{esm → dist/esm}/armem-web.js +0 -0
- /package/{esm → dist/esm}/armem.js +0 -0
- /package/{esm → dist/esm}/bao.js +0 -0
- /package/{esm → dist/esm}/bar.js +0 -0
- /package/{esm → dist/esm}/build.js +0 -0
- /package/{esm → dist/esm}/bundler.js +0 -0
- /package/{esm → dist/esm}/car.js +0 -0
- /package/{esm → dist/esm}/cf-env.js +0 -0
- /package/{esm → dist/esm}/cf.js +0 -0
- /package/{esm → dist/esm}/cli.js +0 -0
- /package/{esm → dist/esm}/compress.js +0 -0
- /package/{esm → dist/esm}/create.js +0 -0
- /package/{esm → dist/esm}/devs.js +0 -0
- /package/{esm → dist/esm}/dirname.js +0 -0
- /package/{esm → dist/esm}/dodb.js +0 -0
- /package/{esm → dist/esm}/erl_json.js +0 -0
- /package/{esm → dist/esm}/erl_str.js +0 -0
- /package/{esm → dist/esm}/gql.js +0 -0
- /package/{esm → dist/esm}/hb.js +0 -0
- /package/{esm → dist/esm}/helpers.js +0 -0
- /package/{esm → dist/esm}/http.js +0 -0
- /package/{esm → dist/esm}/hub/bundler.js +0 -0
- /package/{esm → dist/esm}/hub/cu.js +0 -0
- /package/{esm → dist/esm}/hub/fs.js +0 -0
- /package/{esm → dist/esm}/hub/index.js +0 -0
- /package/{esm → dist/esm}/hub/utils.js +0 -0
- /package/{esm → dist/esm}/hub/ws-proxy.js +0 -0
- /package/{esm → dist/esm}/hyper-aos.js +0 -0
- /package/{esm → dist/esm}/hyperbeam-server.js +0 -0
- /package/{esm → dist/esm}/hyperbeam.js +0 -0
- /package/{esm → dist/esm}/index.js +0 -0
- /package/{esm → dist/esm}/keygen.js +0 -0
- /package/{esm → dist/esm}/lfdb.js +0 -0
- /package/{esm → dist/esm}/lua/aos.wasm +0 -0
- /package/{esm → dist/esm}/lua/aos2_0_1.js +0 -0
- /package/{esm → dist/esm}/lua/aos2_0_1.wasm +0 -0
- /package/{esm → dist/esm}/lua/aos2_0_3.js +0 -0
- /package/{esm → dist/esm}/lua/aos2_0_3.wasm +0 -0
- /package/{esm → dist/esm}/lua/aos2_0_4_32.js +0 -0
- /package/{esm → dist/esm}/lua/aos2_0_4_32.wasm +0 -0
- /package/{esm → dist/esm}/lua/aos2_0_6.wasm +0 -0
- /package/{esm → dist/esm}/lua/apm.lua +0 -0
- /package/{esm → dist/esm}/lua/llama.wasm +0 -0
- /package/{esm → dist/esm}/lua/process.wasm +0 -0
- /package/{esm → dist/esm}/lua/sqlite.js +0 -0
- /package/{esm → dist/esm}/lua/sqlite.wasm +0 -0
- /package/{esm → dist/esm}/lua/weavedb_mock.lua +0 -0
- /package/{esm → dist/esm}/lua/weavedrive.lua +0 -0
- /package/{esm → dist/esm}/package.json +0 -0
- /package/{esm → dist/esm}/run.js +0 -0
- /package/{esm → dist/esm}/server.js +0 -0
- /package/{esm → dist/esm}/storage-multi.js +0 -0
- /package/{esm → dist/esm}/tao.js +0 -0
- /package/{esm → dist/esm}/tar.js +0 -0
- /package/{esm → dist/esm}/test.js +0 -0
- /package/{esm → dist/esm}/tgql-d1.js +0 -0
- /package/{esm → dist/esm}/tgql.js +0 -0
- /package/{esm → dist/esm}/toerl.js +0 -0
- /package/{esm → dist/esm}/utils.js +0 -0
- /package/{esm → dist/esm}/wao.js +0 -0
- /package/{esm → dist/esm}/waosm/README.md +0 -0
- /package/{esm → dist/esm}/waosm/waosm.d.ts +0 -0
- /package/{esm → dist/esm}/waosm/waosm.js +0 -0
- /package/{esm → dist/esm}/waosm/waosm_bg.wasm +0 -0
- /package/{esm → dist/esm}/waosm/waosm_bg.wasm.d.ts +0 -0
- /package/{esm → dist/esm}/waosm-node/README.md +0 -0
- /package/{esm → dist/esm}/waosm-node/waosm.d.ts +0 -0
- /package/{esm → dist/esm}/waosm-node/waosm.js +0 -0
- /package/{esm → dist/esm}/waosm-node/waosm_bg.js +0 -0
- /package/{esm → dist/esm}/waosm-node/waosm_bg.wasm +0 -0
- /package/{esm → dist/esm}/waosm-node/waosm_bg.wasm.d.ts +0 -0
- /package/{esm → dist/esm}/waosm-node/waosm_bg.wasm.js +0 -0
- /package/{esm → dist/esm}/waosm-node.js +0 -0
- /package/{esm → dist/esm}/war.js +0 -0
- /package/{esm → dist/esm}/weavedrive.js +0 -0
- /package/{esm → dist/esm}/web.js +0 -0
- /package/{esm → dist/esm}/workspace/.mcp.json +0 -0
- /package/{esm → dist/esm}/workspace/CLAUDE.md +0 -0
- /package/{esm → dist/esm}/workspace/README.md +0 -0
- /package/{esm → dist/esm}/workspace/dashboard/index.html +0 -0
- /package/{esm → dist/esm}/workspace/dashboard/package.json +0 -0
- /package/{esm/workspace/dashboard/public/favicon.png → dist/esm/workspace/dashboard/public/favicon.ico} +0 -0
- /package/{esm → dist/esm}/workspace/dashboard/server.js +0 -0
- /package/{esm → dist/esm}/workspace/dashboard/src/App.jsx +0 -0
- /package/{cjs/workspace/frontend → dist/esm/workspace/dashboard}/src/main.jsx +0 -0
- /package/{esm → dist/esm}/workspace/dashboard/vite.config.js +0 -0
- /package/{esm → dist/esm}/workspace/package.json +0 -0
- /package/{postinstall.cjs → dist/postinstall.cjs} +0 -0
- /package/{esm → src}/workspace/dashboard/src/main.jsx +0 -0
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
local json = require('json')
|
|
2
|
+
|
|
3
|
+
-- Constants
|
|
4
|
+
-- Used to determine when to require name resolution
|
|
5
|
+
ID_TTL_MS = 24 * 60 * 60 * 1000 -- 24 hours by default
|
|
6
|
+
DATA_TTL_MS = 24 * 60 * 60 * 1000 -- 24 hours by default
|
|
7
|
+
OWNER_TTL_MS = 24 * 60 * 60 * 1000 -- 24 hours by default
|
|
8
|
+
|
|
9
|
+
-- URL configurations
|
|
10
|
+
SW_CACHE_URL = "https://api.arns.app/v1/contract/"
|
|
11
|
+
|
|
12
|
+
-- Process IDs for interacting with other services or processes
|
|
13
|
+
ARNS_PROCESS_ID = "TyduW6spZTr3gkdIsdktduJhgtilaR_ex5JukK8gI9o"
|
|
14
|
+
_0RBIT_SEND_PROCESS_ID = "BaMK1dfayo75s3q1ow6AO64UDpD9SEFbeE8xYrY2fyQ"
|
|
15
|
+
_0RBIT_RECEIVE_PROCESS_ID = "8aE3_6NJ_MU_q3fbhz2S6dA8PKQOSCe95Gt7suQ3j7U"
|
|
16
|
+
|
|
17
|
+
-- Initialize the NAMES and ID_NAME_MAPPING tables
|
|
18
|
+
NAMES = NAMES or {}
|
|
19
|
+
ID_NAME_MAPPING = ID_NAME_MAPPING or {}
|
|
20
|
+
Now = Now or 0
|
|
21
|
+
|
|
22
|
+
--- Splits a string into two parts based on the last underscore character, intended to separate ARNS names into undername and rootname components.
|
|
23
|
+
-- @param str The string to be split.
|
|
24
|
+
-- @return Two strings: the rootname (before the last underscore) and the undername (after the last underscore).
|
|
25
|
+
-- If no underscore is found, returns the original string and nil.
|
|
26
|
+
function splitIntoTwoNames(str)
|
|
27
|
+
-- Pattern explanation:
|
|
28
|
+
-- (.-) captures any character as few times as possible up to the last underscore
|
|
29
|
+
-- _ captures the underscore itself
|
|
30
|
+
-- ([^_]+)$ captures one or more characters that are not underscores at the end of the string
|
|
31
|
+
local underName, rootName = str:match("(.-)_([^_]+)$")
|
|
32
|
+
|
|
33
|
+
if underName and rootName then
|
|
34
|
+
return tostring(rootName), tostring(underName)
|
|
35
|
+
else
|
|
36
|
+
-- If the pattern does not match (e.g., there's no underscore in the string),
|
|
37
|
+
-- return the original string as the first chunk and nil as the second
|
|
38
|
+
return str, nil
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
local arnsMeta = {
|
|
43
|
+
__index = function(t, key)
|
|
44
|
+
if key == "resolve" then
|
|
45
|
+
return function(name)
|
|
46
|
+
name = string.lower(name)
|
|
47
|
+
ao.send({ Target = ARNS_PROCESS_ID, Action = "Get-Record", Name = name })
|
|
48
|
+
return "Getting information for name: " .. name
|
|
49
|
+
end
|
|
50
|
+
elseif key == "data" then
|
|
51
|
+
return function(name)
|
|
52
|
+
name = string.lower(name)
|
|
53
|
+
local rootName, underName = splitIntoTwoNames(name)
|
|
54
|
+
if NAMES[rootName] == nil then
|
|
55
|
+
ao.send({ Target = ARNS_PROCESS_ID, Action = "Get-Record", Name = rootName })
|
|
56
|
+
print(name .. ' has not been resolved yet. Resolving now...')
|
|
57
|
+
return nil
|
|
58
|
+
elseif rootName and underName == nil then
|
|
59
|
+
if NAMES[rootName].process and NAMES[rootName].process.records['@'] then
|
|
60
|
+
if Now - NAMES[rootName].process.lastUpdated >= DATA_TTL_MS then
|
|
61
|
+
ao.send({ Target = ARNS_PROCESS_ID, Action = "Get-Record", Name = name })
|
|
62
|
+
print(name .. ' is stale. Refreshing name process now...')
|
|
63
|
+
return nil
|
|
64
|
+
else
|
|
65
|
+
return NAMES[rootName].process.records['@'].transactionId
|
|
66
|
+
end
|
|
67
|
+
elseif NAMES[rootName].contract and NAMES[rootName].contract.records['@'] then
|
|
68
|
+
if Now - NAMES[rootName].contract.lastUpdated >= DATA_TTL_MS then
|
|
69
|
+
ao.send({ Target = ARNS_PROCESS_ID, Action = "Get-Record", Name = name })
|
|
70
|
+
print(name .. ' is stale. Refreshing name contract now...')
|
|
71
|
+
return nil
|
|
72
|
+
else
|
|
73
|
+
return NAMES[rootName].contract.records['@'].transactionId or
|
|
74
|
+
NAMES[rootName].contract.records['@'] or
|
|
75
|
+
nil
|
|
76
|
+
-- NAMES[rootName].contract.records['@'] is used to capture old ANT contracts
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
elseif rootName and underName then
|
|
80
|
+
if NAMES[rootName].process and NAMES[rootName].process.records[underName] then
|
|
81
|
+
if Now - NAMES[rootName].process.lastUpdated >= DATA_TTL_MS then
|
|
82
|
+
ao.send({ Target = ARNS_PROCESS_ID, Action = "Get-Record", Name = name })
|
|
83
|
+
print(name .. ' is stale. Refreshing name process now...')
|
|
84
|
+
return nil
|
|
85
|
+
else
|
|
86
|
+
return NAMES[rootName].process.records[underName].transactionId
|
|
87
|
+
end
|
|
88
|
+
elseif NAMES[rootName].contract and NAMES[rootName].contract.records[underName] then
|
|
89
|
+
if Now - NAMES[rootName].contract.lastUpdated >= DATA_TTL_MS then
|
|
90
|
+
ao.send({ Target = ARNS_PROCESS_ID, Action = "Get-Record", Name = name })
|
|
91
|
+
print(name .. ' is stale. Refreshing name contract now...')
|
|
92
|
+
return nil
|
|
93
|
+
else
|
|
94
|
+
return NAMES[rootName].contract.records[underName].transactionId or
|
|
95
|
+
NAMES[rootName].contract.records[underName]
|
|
96
|
+
-- NAMES[rootName].contract.records[underName] is used to capture old ANT contracts
|
|
97
|
+
end
|
|
98
|
+
else
|
|
99
|
+
return nil
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
elseif key == "owner" then
|
|
104
|
+
return function(name)
|
|
105
|
+
name = string.lower(name)
|
|
106
|
+
local rootName, underName = splitIntoTwoNames(name)
|
|
107
|
+
if NAMES[rootName] == nil then
|
|
108
|
+
ao.send({ Target = ARNS_PROCESS_ID, Action = "Get-Record", Name = rootName })
|
|
109
|
+
print(name .. ' has not been resolved yet. Cannot get owner. Resolving now...')
|
|
110
|
+
return nil
|
|
111
|
+
elseif NAMES[rootName].process and NAMES[rootName].process.owner then
|
|
112
|
+
if Now - NAMES[rootName].process.lastUpdated >= OWNER_TTL_MS then
|
|
113
|
+
ao.send({ Target = ARNS_PROCESS_ID, Action = "Get-Record", Name = name })
|
|
114
|
+
print(name .. ' is stale. Refreshing name process now...')
|
|
115
|
+
return nil
|
|
116
|
+
else
|
|
117
|
+
return NAMES[rootName].process.owner
|
|
118
|
+
end
|
|
119
|
+
elseif NAMES[rootName].contract and NAMES[rootName].contract.owner then
|
|
120
|
+
if Now - NAMES[rootName].contract.lastUpdated >= OWNER_TTL_MS then
|
|
121
|
+
ao.send({ Target = ARNS_PROCESS_ID, Action = "Get-Record", Name = name })
|
|
122
|
+
print(name .. ' is stale. Refreshing name contract now...')
|
|
123
|
+
return nil
|
|
124
|
+
else
|
|
125
|
+
return NAMES[rootName].contract.owner
|
|
126
|
+
end
|
|
127
|
+
else
|
|
128
|
+
return nil
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
elseif key == "id" then
|
|
132
|
+
return function(name)
|
|
133
|
+
name = string.lower(name)
|
|
134
|
+
local rootName, underName = splitIntoTwoNames(name)
|
|
135
|
+
if NAMES[rootName] == nil then
|
|
136
|
+
ao.send({ Target = ARNS_PROCESS_ID, Action = "Get-Record", Name = name })
|
|
137
|
+
print(name .. ' has not been resolved yet. Cannot get id. Resolving now...')
|
|
138
|
+
return nil
|
|
139
|
+
elseif Now - NAMES[rootName].lastUpdated >= ID_TTL_MS then
|
|
140
|
+
ao.send({ Target = ARNS_PROCESS_ID, Action = "Get-Record", Name = name })
|
|
141
|
+
print(name .. ' is stale. Refreshing name data now...')
|
|
142
|
+
return nil
|
|
143
|
+
else
|
|
144
|
+
return NAMES[rootName].processId or NAMES[rootName].contractTxId or nil
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
elseif key == "clear" then
|
|
148
|
+
NAMES = {}
|
|
149
|
+
return 'ArNS local name cache cleared.'
|
|
150
|
+
else
|
|
151
|
+
return nil
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
ARNS = setmetatable({}, arnsMeta)
|
|
157
|
+
|
|
158
|
+
--- Requests JSON data from a specified URL via the Orbit process, an external service.
|
|
159
|
+
-- @param url The URL from which JSON data is to be fetched.
|
|
160
|
+
function fetchJsonDataFromOrbit(url)
|
|
161
|
+
-- Validate URL to prevent sending invalid requests
|
|
162
|
+
if type(url) ~= "string" or url == "" then
|
|
163
|
+
print("Invalid URL provided for fetching JSON data.")
|
|
164
|
+
return
|
|
165
|
+
end
|
|
166
|
+
-- Send a request to the Orbit process with the specified URL.
|
|
167
|
+
ao.send({ Target = _0RBIT_SEND_PROCESS_ID, Action = "Get-Real-Data", Url = url })
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
--- Determines if a given message is a record response from the ARNS process.
|
|
171
|
+
-- @param msg The message to evaluate.
|
|
172
|
+
-- @return boolean True if the message is from the ARNS process and action is 'Record-Resolved', otherwise false.
|
|
173
|
+
function isArNSGetRecordMessage(msg)
|
|
174
|
+
if msg.From == ARNS_PROCESS_ID and msg.Action == "Record-Resolved" then
|
|
175
|
+
return true
|
|
176
|
+
else
|
|
177
|
+
return false
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
--- Determines if a message is an 'Info' message from an ANT or related process.
|
|
182
|
+
-- Checks if the sender's ID exists within the ID_NAME_MAPPING.
|
|
183
|
+
-- @param msg The message object to check.
|
|
184
|
+
-- @return boolean True if the sender's ID is recognized, false otherwise.
|
|
185
|
+
function isANTInfoMessage(msg)
|
|
186
|
+
if ID_NAME_MAPPING[msg.From] then
|
|
187
|
+
return true
|
|
188
|
+
else
|
|
189
|
+
return false
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
--- Determines if a message is from the 0RBIT process with a 'Receive-data-feed' action.
|
|
194
|
+
-- @param msg The message object to check.
|
|
195
|
+
-- @return boolean True if the message is from the 0RBIT process and has the specified action, false otherwise.
|
|
196
|
+
function is0rbitMessage(msg)
|
|
197
|
+
if msg.From == _0RBIT_RECEIVE_PROCESS_ID and msg.Action == 'Receive-data-feed' then
|
|
198
|
+
return true
|
|
199
|
+
else
|
|
200
|
+
return false
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
Handlers.prepend(
|
|
205
|
+
"ArNS-Timers",
|
|
206
|
+
function(msg)
|
|
207
|
+
return "continue"
|
|
208
|
+
end,
|
|
209
|
+
function(msg)
|
|
210
|
+
Now = msg.Timestamp
|
|
211
|
+
end
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
--- Handles received ArNS "Record-Resolved" messages by updating the local NAMES table.
|
|
215
|
+
-- Updates or initializes the record for the given name with the latest information.
|
|
216
|
+
-- Fetches additional information from SmartWeave Cache or ANT-AO process if necessary.
|
|
217
|
+
Handlers.add("ReceiveArNSGetRecordMessage", isArNSGetRecordMessage, function(msg)
|
|
218
|
+
local data, err = json.decode(msg.Data)
|
|
219
|
+
if not data or err then
|
|
220
|
+
print("Error decoding JSON data: ", err)
|
|
221
|
+
return
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
-- Update or initialize the record with the latest information.
|
|
225
|
+
NAMES[msg.Tags.Name] = NAMES[msg.Tags.Name] or {
|
|
226
|
+
lastUpdated = msg.Timestamp,
|
|
227
|
+
contractTxId = data.contractTxId,
|
|
228
|
+
-- Assuming these fields are placeholders for future updates.
|
|
229
|
+
contractOwner = nil,
|
|
230
|
+
contract = nil,
|
|
231
|
+
processOwner = nil,
|
|
232
|
+
process = nil
|
|
233
|
+
}
|
|
234
|
+
NAMES[msg.Tags.Name].processId = data.processId
|
|
235
|
+
NAMES[msg.Tags.Name].record = data
|
|
236
|
+
NAMES[msg.Tags.Name].lastUpdated = msg.Timestamp
|
|
237
|
+
|
|
238
|
+
print("Updated " .. msg.Tags.Name .. " with the latest ArNS-AO Registry info!")
|
|
239
|
+
|
|
240
|
+
-- Fetch additional information if contractTxId is provided.
|
|
241
|
+
if data.contractTxId then
|
|
242
|
+
local url = SW_CACHE_URL .. data.contractTxId
|
|
243
|
+
print("...fetching more info from SmartWeave Cache (via 0rbit): " .. url)
|
|
244
|
+
fetchJsonDataFromOrbit(url)
|
|
245
|
+
ID_NAME_MAPPING[data.contractTxId] = msg.Tags.Name
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
-- Request more information if processId is provided and not empty.
|
|
249
|
+
if data.processId then
|
|
250
|
+
print("...fetching more info from ANT-AO process: " .. data.processId)
|
|
251
|
+
ID_NAME_MAPPING[data.processId] = msg.Tags.Name
|
|
252
|
+
ao.send({ Target = data.processId, Action = "Info" })
|
|
253
|
+
end
|
|
254
|
+
end)
|
|
255
|
+
|
|
256
|
+
--- Updates stored information with the latest data from ANT-AO process "Info-Notice" messages.
|
|
257
|
+
-- @param msg The received message object containing updated process info.
|
|
258
|
+
Handlers.add("ReceiveANTProcessInfoMessage", isANTInfoMessage, function(msg)
|
|
259
|
+
if msg.Action == 'Info-Notice' and NAMES[ID_NAME_MAPPING[msg.From]] then
|
|
260
|
+
local nameKey = ID_NAME_MAPPING[msg.From]
|
|
261
|
+
local updatedInfo = NAMES[nameKey]
|
|
262
|
+
|
|
263
|
+
-- Attempt to decode the JSON data from the message.
|
|
264
|
+
local processInfo, err = json.decode(msg.Data)
|
|
265
|
+
if err then
|
|
266
|
+
print("Error decoding process info: ", err)
|
|
267
|
+
return
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
-- Ensure the decoded data is a valid table before updating.
|
|
271
|
+
if type(processInfo) == "table" then
|
|
272
|
+
updatedInfo.process = processInfo
|
|
273
|
+
updatedInfo.process.owner = msg.Tags.ProcessOwner
|
|
274
|
+
updatedInfo.process.lastUpdated = msg.Timestamp
|
|
275
|
+
NAMES[nameKey] = updatedInfo
|
|
276
|
+
print("Updated " .. nameKey .. " with the latest ANT-AO process info!")
|
|
277
|
+
else
|
|
278
|
+
print("Invalid process info format received from " .. nameKey)
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
-- Clear the mapping after updating to prevent redundant updates.
|
|
282
|
+
ID_NAME_MAPPING[msg.From] = nil
|
|
283
|
+
end
|
|
284
|
+
end)
|
|
285
|
+
|
|
286
|
+
--- Processes messages from the 0rbit process to update contract information stored in NAMES.
|
|
287
|
+
-- @param msg The message object received from the 0rbit process.
|
|
288
|
+
Handlers.add("Receive0rbitMessage", is0rbitMessage, function(msg)
|
|
289
|
+
-- Decode the JSON data from the message.
|
|
290
|
+
local data, err = json.decode(msg.Data)
|
|
291
|
+
if err then
|
|
292
|
+
print("Error decoding data from 0rbit message: ", err)
|
|
293
|
+
return
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
-- Validate that the decoded data contains a contractTxId that is currently being tracked.
|
|
297
|
+
local nameKey = ID_NAME_MAPPING[data.contractTxId]
|
|
298
|
+
if nameKey and NAMES[nameKey] then
|
|
299
|
+
local updatedInfo = NAMES[nameKey]
|
|
300
|
+
|
|
301
|
+
-- Ensure the data contains 'state' information for the contract before updating.
|
|
302
|
+
if type(data.state) == "table" then
|
|
303
|
+
updatedInfo.contract = data.state
|
|
304
|
+
updatedInfo.contract.owner = data.state.owner
|
|
305
|
+
updatedInfo.contract.lastUpdated = msg.Timestamp
|
|
306
|
+
NAMES[nameKey] = updatedInfo
|
|
307
|
+
print("Updated " .. nameKey .. " with the latest info from SmartWeave Cache (via 0rbit)!")
|
|
308
|
+
else
|
|
309
|
+
print("Received 0rbit message with invalid or missing 'state' information for contractTxId: " ..
|
|
310
|
+
tostring(data.contractTxId))
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
-- Clear the mapping to prevent repeated updates for the same contractTxId.
|
|
314
|
+
ID_NAME_MAPPING[data.contractTxId] = nil
|
|
315
|
+
else
|
|
316
|
+
print("Received 0rbit message for an untracked or invalid contractTxId: " .. tostring(data.contractTxId))
|
|
317
|
+
end
|
|
318
|
+
end)
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
DevChat = {}
|
|
2
|
+
|
|
3
|
+
DevChat.Router = "8MGp9kOU4JYxAlPT1AyL7O3cedd97y-w8X4ciBsf_Xo"
|
|
4
|
+
DevChat.InitRoom = "6I1JBBc9SOMtqFxlX7OoYgsMh7QeZk2fFwUCHTUqshg"
|
|
5
|
+
DevChat.LastSend = DevChat.LastSend or DevChat.InitRoom
|
|
6
|
+
|
|
7
|
+
DevChat.LastReceive = {
|
|
8
|
+
Room = DevChat.InitRoom,
|
|
9
|
+
Sender = nil
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
DevChat.InitRooms = { [DevChat.InitRoom] = "Getting-Started" }
|
|
13
|
+
DevChat.Rooms = DevChat.Rooms or DevChat.InitRooms
|
|
14
|
+
|
|
15
|
+
DevChat.Confirmations = DevChat.Confirmations or true
|
|
16
|
+
|
|
17
|
+
-- Helper function to go from roomName => address
|
|
18
|
+
DevChat.findRoom =
|
|
19
|
+
function(target)
|
|
20
|
+
for address, name in pairs(DevChat.Rooms) do
|
|
21
|
+
if target == name then
|
|
22
|
+
return address
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
DevChat.add =
|
|
28
|
+
function(...)
|
|
29
|
+
local arg = {...}
|
|
30
|
+
ao.send({
|
|
31
|
+
Target = DevChat.Router,
|
|
32
|
+
Action = "Register",
|
|
33
|
+
Name = arg[1] or Name,
|
|
34
|
+
Address = arg[2] or ao.id
|
|
35
|
+
})
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
List =
|
|
39
|
+
function()
|
|
40
|
+
ao.send({ Target = DevChat.Router, Action = "Get-List" })
|
|
41
|
+
return(Colors.gray .. "Getting the room list from the DevChat index..." .. Colors.reset)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
Join =
|
|
45
|
+
function(id, ...)
|
|
46
|
+
local arg = {...}
|
|
47
|
+
local addr = DevChat.findRoom(id) or id
|
|
48
|
+
local nick = arg[1] or ao.id
|
|
49
|
+
ao.send({ Target = addr, Action = "Register", Nickname = nick or Name })
|
|
50
|
+
return(
|
|
51
|
+
Colors.gray ..
|
|
52
|
+
"Registering with room " ..
|
|
53
|
+
Colors.blue .. id ..
|
|
54
|
+
Colors.gray .. "..." .. Colors.reset)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
Say =
|
|
58
|
+
function(text, ...)
|
|
59
|
+
local arg = {...}
|
|
60
|
+
local id = arg[1]
|
|
61
|
+
if id ~= nil then
|
|
62
|
+
-- Remember the new room for next time.
|
|
63
|
+
DevChat.LastSend = DevChat.findRoom(id) or id
|
|
64
|
+
end
|
|
65
|
+
local name = DevChat.Rooms[DevChat.LastSend] or id
|
|
66
|
+
ao.send({ Target = DevChat.LastSend, Action = "Broadcast", Data = text })
|
|
67
|
+
if DevChat.Confirmations then
|
|
68
|
+
return(Colors.gray .. "Broadcasting to " .. Colors.blue ..
|
|
69
|
+
name .. Colors.gray .. "..." .. Colors.reset)
|
|
70
|
+
else
|
|
71
|
+
return ""
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
Tip =
|
|
76
|
+
function(...) -- Recipient, Target, Qty
|
|
77
|
+
local arg = {...}
|
|
78
|
+
local room = arg[2] or DevChat.LastReceive.Room
|
|
79
|
+
local roomName = DevChat.Rooms[room] or room
|
|
80
|
+
local qty = tostring(arg[3] or 1)
|
|
81
|
+
local recipient = arg[1] or DevChat.LastReceive.Sender
|
|
82
|
+
ao.send({
|
|
83
|
+
Action = "Transfer",
|
|
84
|
+
Target = room,
|
|
85
|
+
Recipient = recipient,
|
|
86
|
+
Quantity = qty
|
|
87
|
+
})
|
|
88
|
+
return(Colors.gray .. "Sent tip of " ..
|
|
89
|
+
Colors.green .. qty .. Colors.gray ..
|
|
90
|
+
" to " .. Colors.red .. recipient .. Colors.gray ..
|
|
91
|
+
" in room " .. Colors.blue .. roomName .. Colors.gray ..
|
|
92
|
+
"."
|
|
93
|
+
)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
Replay =
|
|
97
|
+
function(...) -- depth, room
|
|
98
|
+
local arg = {...}
|
|
99
|
+
local room = nil
|
|
100
|
+
if arg[1] then
|
|
101
|
+
room = DevChat.findRoom(arg[2]) or arg[2]
|
|
102
|
+
else
|
|
103
|
+
room = DevChat.LastReceive.Room
|
|
104
|
+
end
|
|
105
|
+
local roomName = DevChat.Rooms[room] or room
|
|
106
|
+
local depth = arg[1] or 3
|
|
107
|
+
|
|
108
|
+
ao.send({
|
|
109
|
+
Target = room,
|
|
110
|
+
Action = "Replay",
|
|
111
|
+
Depth = tostring(depth)
|
|
112
|
+
})
|
|
113
|
+
return(
|
|
114
|
+
Colors.gray ..
|
|
115
|
+
"Requested replay of the last " ..
|
|
116
|
+
Colors.green .. depth ..
|
|
117
|
+
Colors.gray .. " messages from " .. Colors.blue ..
|
|
118
|
+
roomName .. Colors.reset .. ".")
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
Leave =
|
|
122
|
+
function(id)
|
|
123
|
+
local addr = DevChat.findRoom(id) or id
|
|
124
|
+
ao.send({ Target = addr, Action = "Unregister" })
|
|
125
|
+
return(
|
|
126
|
+
Colors.gray ..
|
|
127
|
+
"Leaving room " ..
|
|
128
|
+
Colors.blue .. id ..
|
|
129
|
+
Colors.gray .. "..." .. Colors.reset)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
Handlers.add(
|
|
134
|
+
"DevChat-Broadcasted",
|
|
135
|
+
Handlers.utils.hasMatchingTag("Action", "Broadcasted"),
|
|
136
|
+
function (m)
|
|
137
|
+
local shortRoom = DevChat.Rooms[m.From] or string.sub(m.From, 1, 6)
|
|
138
|
+
if m.Broadcaster == ao.id then
|
|
139
|
+
if DevChat.Confirmations == true then
|
|
140
|
+
print(
|
|
141
|
+
Colors.gray .. "[Received confirmation of your broadcast in "
|
|
142
|
+
.. Colors.blue .. shortRoom .. Colors.gray .. ".]"
|
|
143
|
+
.. Colors.reset)
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
local nick = string.sub(m.Nickname, 1, 10)
|
|
147
|
+
if m.Broadcaster ~= m.Nickname then
|
|
148
|
+
nick = nick .. Colors.gray .. "#" .. string.sub(m.Broadcaster, 1, 3)
|
|
149
|
+
end
|
|
150
|
+
print(
|
|
151
|
+
"[" .. Colors.red .. nick .. Colors.reset
|
|
152
|
+
.. "@" .. Colors.blue .. shortRoom .. Colors.reset
|
|
153
|
+
.. "]> " .. Colors.green .. m.Data .. Colors.reset)
|
|
154
|
+
|
|
155
|
+
DevChat.LastReceive.Room = m.From
|
|
156
|
+
DevChat.LastReceive.Sender = m.Broadcaster
|
|
157
|
+
end
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
Handlers.add(
|
|
161
|
+
"DevChat-List",
|
|
162
|
+
function(m)
|
|
163
|
+
if m.Action == "Room-List" and m.From == DevChat.Router then
|
|
164
|
+
return true
|
|
165
|
+
end
|
|
166
|
+
return false
|
|
167
|
+
end,
|
|
168
|
+
function(m)
|
|
169
|
+
local intro = "👋 The following rooms are currently available on DevChat:\n\n"
|
|
170
|
+
local rows = ""
|
|
171
|
+
DevChat.Rooms = DevChat.InitRooms
|
|
172
|
+
|
|
173
|
+
for i = 1, #m.TagArray do
|
|
174
|
+
local filterPrefix = "Room-" -- All of our room tags start with this
|
|
175
|
+
local tagPrefix = string.sub(m.TagArray[i].name, 1, #filterPrefix)
|
|
176
|
+
local name = string.sub(m.TagArray[i].name, #filterPrefix + 1, #m.TagArray[i].name)
|
|
177
|
+
local address = m.TagArray[i].value
|
|
178
|
+
|
|
179
|
+
if tagPrefix == filterPrefix then
|
|
180
|
+
rows = rows .. Colors.blue .. " " .. name .. Colors.reset .. "\n"
|
|
181
|
+
DevChat.Rooms[address] = name
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
print(
|
|
186
|
+
intro .. rows .. "\nJoin a chat by running `Join(\"chatName\"[, \"yourNickname\"])`! You can leave chats with `Leave(\"name\")`.")
|
|
187
|
+
end
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
if DevChatRegistered == nil then
|
|
191
|
+
DevChatRegistered = true
|
|
192
|
+
Join(DevChat.InitRoom)
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
function help()
|
|
196
|
+
return(
|
|
197
|
+
Colors.blue .. "\n\nWelcome to ao DevChat v0.1!\n\n" .. Colors.reset ..
|
|
198
|
+
"DevChat is a simple service that helps the ao community communicate as we build our new computer.\n" ..
|
|
199
|
+
"The interface is simple. Run...\n\n" ..
|
|
200
|
+
Colors.green .. "\t\t`List()`" .. Colors.reset .. " to see which rooms are available.\n" ..
|
|
201
|
+
Colors.green .. "\t\t`Join(\"RoomName\")`" .. Colors.reset .. " to join a room.\n" ..
|
|
202
|
+
Colors.green .. "\t\t`Say(\"Msg\", \"RoomName\") or Say(\"Msg\", \"RoomName1\", \"RoomName2\")`" .. Colors.reset .. " to post to a room (remembering your last choice for next time).\n" ..
|
|
203
|
+
Colors.green .. "\t\t`Replay(Count, \"RoomName\") e.g. Replay(1, \"Getting-Started\")`" .. Colors.reset .. " to reprint the most recent messages from a chat.\n" ..
|
|
204
|
+
Colors.green .. "\t\t`Leave(\"RoomName\")`" .. Colors.reset .. " at any time to unsubscribe from a chat.\n" ..
|
|
205
|
+
Colors.green .. "\t\t`Tip([\"Recipient\"])`" .. Colors.reset .. " to send a token from the chatroom to the sender of the last message.\n\n" ..
|
|
206
|
+
"You have already been registered to the " .. Colors.blue .. DevChat.Rooms[DevChat.InitRoom] .. Colors.reset .. ".\n" ..
|
|
207
|
+
"Have fun, be respectful, and remember: Cypherpunks ship code! 🫡")
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
return help()
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
Members = Members or {}
|
|
2
|
+
|
|
3
|
+
Handlers.add(
|
|
4
|
+
"register",
|
|
5
|
+
"Register",
|
|
6
|
+
function (msg)
|
|
7
|
+
local found = false
|
|
8
|
+
for _, member in ipairs(Members) do
|
|
9
|
+
if member == msg.From then
|
|
10
|
+
found = true
|
|
11
|
+
break
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
if not found then
|
|
16
|
+
table.insert(Members, msg.From)
|
|
17
|
+
Handlers.utils.reply("Registered.")(msg)
|
|
18
|
+
else
|
|
19
|
+
Handlers.utils.reply("Already registered.")(msg)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
Handlers.add(
|
|
25
|
+
"unregister",
|
|
26
|
+
"Unregister",
|
|
27
|
+
function (msg)
|
|
28
|
+
local found = false
|
|
29
|
+
for i, v in ipairs(Members) do
|
|
30
|
+
if v == msg.From then
|
|
31
|
+
table.remove(Members, i)
|
|
32
|
+
Handlers.utils.reply("Unregistered")(msg)
|
|
33
|
+
found = true
|
|
34
|
+
break
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
if not found then
|
|
38
|
+
Handlers.utils.reply("Not registered")(msg)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
Handlers.add(
|
|
44
|
+
"broadcast",
|
|
45
|
+
"Broadcast",
|
|
46
|
+
function (msg)
|
|
47
|
+
local haveSentRecords = {}
|
|
48
|
+
for _, recipient in ipairs(Members) do
|
|
49
|
+
if not haveSentRecords[recipient] then
|
|
50
|
+
ao.send({Target = recipient, Action = "Broadcast-Notice", Data = msg.Data})
|
|
51
|
+
haveSentRecords[recipient] = true
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
Handlers.utils.reply("Broadcasted.")(msg)
|
|
55
|
+
end
|
|
56
|
+
)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
local function patchReply(msg)
|
|
2
|
+
if not msg.reply then
|
|
3
|
+
msg.reply = function (replyMsg)
|
|
4
|
+
replyMsg.Target = msg["Reply-To"] or (replyMsg.Target or msg.From)
|
|
5
|
+
replyMsg["X-Reference"] = msg["X-Reference"] or msg.Reference or ""
|
|
6
|
+
replyMsg["X-Origin"] = msg["X-Origin"] or ""
|
|
7
|
+
|
|
8
|
+
return ao.send(replyMsg)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
Handlers.prepend("_patch_reply", function (msg) return "continue" end, patchReply)
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Variant = "0.0.4"
|
|
2
|
+
Stakers = Stakers or {}
|
|
3
|
+
Unstaking = Unstaking or {}
|
|
4
|
+
UnstakeDelay = UnstakeDelay or 670
|
|
5
|
+
local bint = require('.bint')(256)
|
|
6
|
+
|
|
7
|
+
--[[
|
|
8
|
+
utils helper functions to remove the bint complexity.
|
|
9
|
+
]]
|
|
10
|
+
--
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
local utils = {
|
|
14
|
+
add = function (a,b)
|
|
15
|
+
return tostring(bint(a) + bint(b))
|
|
16
|
+
end,
|
|
17
|
+
subtract = function (a,b)
|
|
18
|
+
return tostring(bint(a) - bint(b))
|
|
19
|
+
end
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
-- Stake Action Handler
|
|
23
|
+
Handlers.stake = function(msg)
|
|
24
|
+
local quantity = bint(msg.Tags.Quantity)
|
|
25
|
+
local height = tonumber(msg['Block-Height'])
|
|
26
|
+
assert(Balances[msg.From] and bint(Balances[msg.From]) >= quantity, "Insufficient balance to stake")
|
|
27
|
+
Balances[msg.From] = utils.subtract(Balances[msg.From], msg.Tags.Quantity)
|
|
28
|
+
Stakers[msg.From] = Stakers[msg.From] or { amount = "0" }
|
|
29
|
+
Stakers[msg.From].amount = utils.add(Stakers[msg.From].amount, msg.Tags.Quantity)
|
|
30
|
+
Stakers[msg.From].unstake_at = height + UnstakeDelay
|
|
31
|
+
print("Successfully Staked " .. msg.Tags.Quantity)
|
|
32
|
+
if msg.reply then
|
|
33
|
+
msg.reply({ Data = "Successfully Staked " .. msg.Tags.Quantity})
|
|
34
|
+
else
|
|
35
|
+
Send({Target = msg.From, Data = "Successfully Staked " .. msg.Tags.Quantity })
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
-- Unstake Action Handler
|
|
40
|
+
Handlers.unstake = function(msg)
|
|
41
|
+
local stakerInfo = Stakers[msg.From]
|
|
42
|
+
assert(stakerInfo and bint(stakerInfo.amount) >= bint(msg.Tags.Quantity), "Insufficient staked amount")
|
|
43
|
+
stakerInfo.amount = utils.subtract(stakerInfo.amount, msg.Tags.Quantity)
|
|
44
|
+
Unstaking[msg.From] = {
|
|
45
|
+
amount = msg.Tags.Quantity,
|
|
46
|
+
release_at = stakerInfo.unstake_at
|
|
47
|
+
}
|
|
48
|
+
if msg.reply then
|
|
49
|
+
msg.reply({ Data = "Successfully unstaked " .. msg.Tags.Quantity})
|
|
50
|
+
else
|
|
51
|
+
Send({Target = msg.From, Data = "Successfully unstaked " .. msg.Tags.Quantity })
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
-- Finalization Handler
|
|
56
|
+
local finalizationHandler = function(msg)
|
|
57
|
+
local currentHeight = tonumber(msg['Block-Height'])
|
|
58
|
+
-- Process unstaking
|
|
59
|
+
for address, unstakeInfo in pairs(Unstaking) do
|
|
60
|
+
if unstakeInfo.release_at == nil or currentHeight >= unstakeInfo.release_at then
|
|
61
|
+
Balances[address] = utils.add(Balances[address] or "0", unstakeInfo.amount)
|
|
62
|
+
Unstaking[address] = nil
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
-- wrap function to continue handler flow
|
|
68
|
+
local function continue(fn)
|
|
69
|
+
return function (msg)
|
|
70
|
+
local result = fn(msg)
|
|
71
|
+
if (result) == -1 then
|
|
72
|
+
return "continue"
|
|
73
|
+
end
|
|
74
|
+
return result
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
Handlers.add('staking.balances', Handlers.utils.hasMatchingTag("Action", 'Stakers'),
|
|
79
|
+
function(msg)
|
|
80
|
+
if msg.reply then
|
|
81
|
+
msg.reply({ Data = require('json').encode(Stakers) })
|
|
82
|
+
else
|
|
83
|
+
Send({Target = msg.From, Data = require('json').encode(Stakers) })
|
|
84
|
+
end
|
|
85
|
+
end)
|
|
86
|
+
-- Registering Handlers
|
|
87
|
+
Handlers.add("staking.stake",
|
|
88
|
+
continue(Handlers.utils.hasMatchingTag("Action", "Stake")), Handlers.stake)
|
|
89
|
+
Handlers.add("staking.unstake",
|
|
90
|
+
continue(Handlers.utils.hasMatchingTag("Action", "Unstake")), Handlers.unstake)
|
|
91
|
+
-- Finalization handler should be called for every message
|
|
92
|
+
-- changed to continue to let messages pass-through
|
|
93
|
+
Handlers.prepend("staking.finalize", function (msg) return "continue" end, finalizationHandler)
|