@lamplitisles/dsh-nanocodex 0.1.0-beta.0

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 (276) hide show
  1. package/LICENSE +65 -0
  2. package/NOTICE +2 -0
  3. package/README.md +182 -0
  4. package/THIRD_PARTY_NOTICES.md +29 -0
  5. package/cordis.patch.yml +52 -0
  6. package/dist/index.d.ts +435 -0
  7. package/dist/index.js +3405 -0
  8. package/dist/standard-preset.d.ts +7 -0
  9. package/dist/standard-preset.js +25 -0
  10. package/engine-release.json +14 -0
  11. package/package.json +119 -0
  12. package/presets/standard/agent.cordis.yml +6 -0
  13. package/presets/standard/preset.yml +2 -0
  14. package/vendor/nanocodex/README.md +1344 -0
  15. package/vendor/nanocodex/actions/events.d.mts +10 -0
  16. package/vendor/nanocodex/actions/events.mjs +163 -0
  17. package/vendor/nanocodex/actions/index.d.mts +13 -0
  18. package/vendor/nanocodex/actions/index.mjs +35 -0
  19. package/vendor/nanocodex/actions/session.d.mts +66 -0
  20. package/vendor/nanocodex/actions/session.mjs +59 -0
  21. package/vendor/nanocodex/actions/turn.d.mts +59 -0
  22. package/vendor/nanocodex/actions/turn.mjs +37 -0
  23. package/vendor/nanocodex/actions/voice.d.mts +22 -0
  24. package/vendor/nanocodex/actions/voice.mjs +50 -0
  25. package/vendor/nanocodex/browser/Agent.d.mts +55 -0
  26. package/vendor/nanocodex/browser/Agent.mjs +11 -0
  27. package/vendor/nanocodex/browser/ChatGptSubscription.d.mts +7 -0
  28. package/vendor/nanocodex/browser/ChatGptSubscription.mjs +19 -0
  29. package/vendor/nanocodex/browser/InlineAgent.mjs +266 -0
  30. package/vendor/nanocodex/browser/Transport.d.mts +74 -0
  31. package/vendor/nanocodex/browser/Transport.mjs +61 -0
  32. package/vendor/nanocodex/browser/Voice.d.mts +71 -0
  33. package/vendor/nanocodex/browser/Voice.mjs +291 -0
  34. package/vendor/nanocodex/browser/VoiceSession.mjs +688 -0
  35. package/vendor/nanocodex/browser/WorkerAgent.d.mts +65 -0
  36. package/vendor/nanocodex/browser/WorkerAgent.mjs +1472 -0
  37. package/vendor/nanocodex/browser/agent.worker.mjs +3 -0
  38. package/vendor/nanocodex/browser/config.d.mts +36 -0
  39. package/vendor/nanocodex/browser/config.mjs +439 -0
  40. package/vendor/nanocodex/browser/engine.mjs +13 -0
  41. package/vendor/nanocodex/browser/harness.mjs +55 -0
  42. package/vendor/nanocodex/browser/host.d.mts +83 -0
  43. package/vendor/nanocodex/browser/host.mjs +555 -0
  44. package/vendor/nanocodex/browser/hostManagedWebSocket.d.mts +14 -0
  45. package/vendor/nanocodex/browser/hostManagedWebSocket.mjs +110 -0
  46. package/vendor/nanocodex/browser/index.d.mts +92 -0
  47. package/vendor/nanocodex/browser/index.mjs +23 -0
  48. package/vendor/nanocodex/browser/indexeddb-durability-store.mjs +197 -0
  49. package/vendor/nanocodex/browser/workspace.d.mts +16 -0
  50. package/vendor/nanocodex/browser/workspace.mjs +107 -0
  51. package/vendor/nanocodex/cloud/Client.d.mts +83 -0
  52. package/vendor/nanocodex/cloud/Client.mjs +231 -0
  53. package/vendor/nanocodex/cloud/Decorator.d.mts +31 -0
  54. package/vendor/nanocodex/cloud/Decorator.mjs +37 -0
  55. package/vendor/nanocodex/cloud/Dialog.d.mts +113 -0
  56. package/vendor/nanocodex/cloud/Dialog.mjs +366 -0
  57. package/vendor/nanocodex/cloud/Errors.d.mts +22 -0
  58. package/vendor/nanocodex/cloud/Errors.mjs +39 -0
  59. package/vendor/nanocodex/cloud/Principal.d.mts +26 -0
  60. package/vendor/nanocodex/cloud/Principal.mjs +88 -0
  61. package/vendor/nanocodex/cloud/RemoteProvider.mjs +88 -0
  62. package/vendor/nanocodex/cloud/Transport.d.mts +47 -0
  63. package/vendor/nanocodex/cloud/Transport.mjs +454 -0
  64. package/vendor/nanocodex/cloud/actions/account.d.mts +9 -0
  65. package/vendor/nanocodex/cloud/actions/account.mjs +19 -0
  66. package/vendor/nanocodex/cloud/actions/agent.d.mts +18 -0
  67. package/vendor/nanocodex/cloud/actions/agent.mjs +428 -0
  68. package/vendor/nanocodex/cloud/actions/connection.d.mts +133 -0
  69. package/vendor/nanocodex/cloud/actions/connection.mjs +580 -0
  70. package/vendor/nanocodex/cloud/actions/grant.d.mts +10 -0
  71. package/vendor/nanocodex/cloud/actions/grant.mjs +12 -0
  72. package/vendor/nanocodex/cloud/actions/index.d.mts +7 -0
  73. package/vendor/nanocodex/cloud/actions/index.mjs +7 -0
  74. package/vendor/nanocodex/cloud/actions/machineUsd.d.mts +23 -0
  75. package/vendor/nanocodex/cloud/actions/machineUsd.mjs +37 -0
  76. package/vendor/nanocodex/cloud/actions/model.d.mts +12 -0
  77. package/vendor/nanocodex/cloud/actions/model.mjs +50 -0
  78. package/vendor/nanocodex/cloud/actions/mpp.d.mts +28 -0
  79. package/vendor/nanocodex/cloud/actions/mpp.mjs +39 -0
  80. package/vendor/nanocodex/cloud/index.d.mts +30 -0
  81. package/vendor/nanocodex/cloud/index.mjs +9 -0
  82. package/vendor/nanocodex/cloud/internal.mjs +533 -0
  83. package/vendor/nanocodex/cloud/mercator.mjs +108 -0
  84. package/vendor/nanocodex/cloud/server/HostPrincipal.d.mts +34 -0
  85. package/vendor/nanocodex/cloud/server/HostPrincipal.mjs +202 -0
  86. package/vendor/nanocodex/cloud/server/index.d.mts +1 -0
  87. package/vendor/nanocodex/cloud/server/index.mjs +1 -0
  88. package/vendor/nanocodex/cloud/types.d.mts +211 -0
  89. package/vendor/nanocodex/cloudflare/Agent.d.mts +133 -0
  90. package/vendor/nanocodex/cloudflare/Agent.mjs +811 -0
  91. package/vendor/nanocodex/cloudflare/egress-subject.mjs +19 -0
  92. package/vendor/nanocodex/cloudflare/egress.d.mts +41 -0
  93. package/vendor/nanocodex/cloudflare/egress.mjs +119 -0
  94. package/vendor/nanocodex/cloudflare/event-socket.mjs +316 -0
  95. package/vendor/nanocodex/cloudflare/index.d.mts +7 -0
  96. package/vendor/nanocodex/cloudflare/index.mjs +6 -0
  97. package/vendor/nanocodex/host/Agent.d.mts +55 -0
  98. package/vendor/nanocodex/host/Agent.mjs +1 -0
  99. package/vendor/nanocodex/host/index.d.mts +82 -0
  100. package/vendor/nanocodex/host/index.mjs +10 -0
  101. package/vendor/nanocodex/index.d.mts +81 -0
  102. package/vendor/nanocodex/index.mjs +12 -0
  103. package/vendor/nanocodex/internal.mjs +1275 -0
  104. package/vendor/nanocodex/managed/Agent.d.mts +380 -0
  105. package/vendor/nanocodex/managed/Agent.mjs +1694 -0
  106. package/vendor/nanocodex/managed/ManagedError.d.mts +9 -0
  107. package/vendor/nanocodex/managed/ManagedError.mjs +8 -0
  108. package/vendor/nanocodex/managed/README.md +241 -0
  109. package/vendor/nanocodex/managed/Voice.mjs +202 -0
  110. package/vendor/nanocodex/managed/index.d.mts +20 -0
  111. package/vendor/nanocodex/managed/index.mjs +2 -0
  112. package/vendor/nanocodex/managed/internal.mjs +119 -0
  113. package/vendor/nanocodex/node/Agent.d.mts +50 -0
  114. package/vendor/nanocodex/node/Agent.mjs +203 -0
  115. package/vendor/nanocodex/node/ChatGptSubscription.d.mts +9 -0
  116. package/vendor/nanocodex/node/ChatGptSubscription.mjs +17 -0
  117. package/vendor/nanocodex/node/Transport.d.mts +44 -0
  118. package/vendor/nanocodex/node/Transport.mjs +46 -0
  119. package/vendor/nanocodex/node/host.mjs +731 -0
  120. package/vendor/nanocodex/node/index.d.mts +73 -0
  121. package/vendor/nanocodex/node/index.mjs +17 -0
  122. package/vendor/nanocodex/node/workspace.d.mts +10 -0
  123. package/vendor/nanocodex/node/workspace.mjs +198 -0
  124. package/vendor/nanocodex/package.json +200 -0
  125. package/vendor/nanocodex/pkg-node/nanocodex.d.ts +675 -0
  126. package/vendor/nanocodex/pkg-node/nanocodex.js +2628 -0
  127. package/vendor/nanocodex/pkg-node/nanocodex_bg.wasm.d.ts +105 -0
  128. package/vendor/nanocodex/pkg-node/package.json +1 -0
  129. package/vendor/nanocodex/pkg-web/.nanocodex-bindgen-stamp +6 -0
  130. package/vendor/nanocodex/pkg-web/nanocodex-build.json +1 -0
  131. package/vendor/nanocodex/pkg-web/nanocodex.d.ts +805 -0
  132. package/vendor/nanocodex/pkg-web/nanocodex.js +2714 -0
  133. package/vendor/nanocodex/pkg-web/nanocodex_bg.js +2615 -0
  134. package/vendor/nanocodex/pkg-web/nanocodex_bg.wasm +0 -0
  135. package/vendor/nanocodex/pkg-web/nanocodex_bg.wasm.d.ts +105 -0
  136. package/vendor/nanocodex/pkg-web/nanocodex_worker.js +9 -0
  137. package/vendor/nanocodex/pkg-web/package.json +1 -0
  138. package/vendor/nanocodex/runtime/chatgpt-subscription.mjs +212 -0
  139. package/vendor/nanocodex/runtime/cloudflare-durability-store.d.mts +26 -0
  140. package/vendor/nanocodex/runtime/cloudflare-durability-store.mjs +168 -0
  141. package/vendor/nanocodex/runtime/code-evaluator.worker.mjs +137 -0
  142. package/vendor/nanocodex/runtime/code-runtime.mjs +1 -0
  143. package/vendor/nanocodex/runtime/durability-store.d.mts +85 -0
  144. package/vendor/nanocodex/runtime/durability-store.mjs +631 -0
  145. package/vendor/nanocodex/runtime/durability.mjs +153 -0
  146. package/vendor/nanocodex/runtime/managed-transport.mjs +460 -0
  147. package/vendor/nanocodex/runtime/mcp-runtime.mjs +534 -0
  148. package/vendor/nanocodex/runtime/postgres-durability-store.d.mts +64 -0
  149. package/vendor/nanocodex/runtime/postgres-durability-store.mjs +532 -0
  150. package/vendor/nanocodex/runtime/quickjs-evaluator.d.mts +17 -0
  151. package/vendor/nanocodex/runtime/quickjs-evaluator.mjs +236 -0
  152. package/vendor/nanocodex/runtime/responses-transport.mjs +22 -0
  153. package/vendor/nanocodex/runtime/subagents.d.mts +107 -0
  154. package/vendor/nanocodex/runtime/subagents.mjs +54 -0
  155. package/vendor/nanocodex/runtime/subscription-store.d.mts +8 -0
  156. package/vendor/nanocodex/runtime/subscription-store.mjs +42 -0
  157. package/vendor/nanocodex/runtime/tempo-provider.d.mts +125 -0
  158. package/vendor/nanocodex/runtime/tempo-provider.mjs +264 -0
  159. package/vendor/nanocodex/runtime/tool-configuration.mjs +1 -0
  160. package/vendor/nanocodex/runtime/tool-router.mjs +1 -0
  161. package/vendor/nanocodex/runtime/utf8.mjs +1 -0
  162. package/vendor/nanocodex/runtime/worker-evaluator.mjs +162 -0
  163. package/vendor/nanocodex/runtime/workspace.d.mts +1 -0
  164. package/vendor/nanocodex/runtime/workspace.mjs +1 -0
  165. package/vendor/nanocodex/tools/Tools.d.mts +56 -0
  166. package/vendor/nanocodex/tools/Tools.mjs +136 -0
  167. package/vendor/nanocodex/tools/artifact.d.mts +1 -0
  168. package/vendor/nanocodex/tools/artifact.mjs +1 -0
  169. package/vendor/nanocodex/tools/attachment.mjs +1 -0
  170. package/vendor/nanocodex/tools/bash.d.mts +1 -0
  171. package/vendor/nanocodex/tools/bash.mjs +1 -0
  172. package/vendor/nanocodex/tools/browser/accountInfo.mjs +795 -0
  173. package/vendor/nanocodex/tools/browser/browserBuffer.mjs +18 -0
  174. package/vendor/nanocodex/tools/browser/browserCompiler.mjs +155 -0
  175. package/vendor/nanocodex/tools/browser/browserEgress.mjs +161 -0
  176. package/vendor/nanocodex/tools/browser/browserPython.mjs +133 -0
  177. package/vendor/nanocodex/tools/browser/browserShell.mjs +1075 -0
  178. package/vendor/nanocodex/tools/browser/browserSprintf.mjs +4 -0
  179. package/vendor/nanocodex/tools/browser/browserSsh.mjs +201 -0
  180. package/vendor/nanocodex/tools/browser/browserZlib.mjs +136 -0
  181. package/vendor/nanocodex/tools/browser/compiler.worker.mjs +160 -0
  182. package/vendor/nanocodex/tools/browser/devTunnelsSshBrowser.mjs +13 -0
  183. package/vendor/nanocodex/tools/browser/index.d.mts +209 -0
  184. package/vendor/nanocodex/tools/browser/index.mjs +174 -0
  185. package/vendor/nanocodex/tools/browser/opfsGit.mjs +248 -0
  186. package/vendor/nanocodex/tools/browser/python.worker.mjs +114 -0
  187. package/vendor/nanocodex/tools/browser/threadGit.mjs +197 -0
  188. package/vendor/nanocodex/tools/browser/unsupportedNodeRsa.mjs +5 -0
  189. package/vendor/nanocodex/tools/browser/workspace.mjs +83 -0
  190. package/vendor/nanocodex/tools/dataset.d.mts +1 -0
  191. package/vendor/nanocodex/tools/dataset.mjs +1 -0
  192. package/vendor/nanocodex/tools/datasetContract.mjs +1 -0
  193. package/vendor/nanocodex/tools/datasetEngine.mjs +1 -0
  194. package/vendor/nanocodex/tools/hostedCatalog.d.mts +1 -0
  195. package/vendor/nanocodex/tools/hostedCatalog.mjs +1 -0
  196. package/vendor/nanocodex/tools/index.d.mts +49 -0
  197. package/vendor/nanocodex/tools/index.mjs +19 -0
  198. package/vendor/nanocodex/tools/namedTool.mjs +1 -0
  199. package/vendor/nanocodex/tools/repository-workspace.d.mts +1 -0
  200. package/vendor/nanocodex/tools/repository-workspace.mjs +1 -0
  201. package/vendor/nanocodex/tools/ssh.d.mts +1 -0
  202. package/vendor/nanocodex/tools/ssh.mjs +1 -0
  203. package/vendor/nanocodex/tools/standard.mjs +1 -0
  204. package/vendor/nanocodex/tools/standardDescriptions.mjs +1 -0
  205. package/vendor/nanocodex/types.d.mts +663 -0
  206. package/vendor/nanocodex/wasm.d.mts +4 -0
  207. package/vendor/nanocodex/worker/ChatGptSubscription.d.mts +9 -0
  208. package/vendor/nanocodex/worker/ChatGptSubscription.mjs +29 -0
  209. package/vendor/nanocodex/worker/index.d.mts +18 -0
  210. package/vendor/nanocodex/worker/index.mjs +5 -0
  211. package/vendor/nanocodex-tools/README.md +65 -0
  212. package/vendor/nanocodex-tools/dist/hosted/app-tool-catalog.d.ts +7 -0
  213. package/vendor/nanocodex-tools/dist/hosted/app-tool-catalog.js +14 -0
  214. package/vendor/nanocodex-tools/dist/hosted/broker-core.d.ts +172 -0
  215. package/vendor/nanocodex-tools/dist/hosted/broker-core.js +1278 -0
  216. package/vendor/nanocodex-tools/dist/hosted/index.d.ts +3 -0
  217. package/vendor/nanocodex-tools/dist/hosted/index.js +3 -0
  218. package/vendor/nanocodex-tools/dist/hosted/protocol.d.ts +120 -0
  219. package/vendor/nanocodex-tools/dist/hosted/protocol.js +415 -0
  220. package/vendor/nanocodex-tools/dist/index.d.ts +19 -0
  221. package/vendor/nanocodex-tools/dist/index.js +14 -0
  222. package/vendor/nanocodex-tools/dist/memory.d.ts +204 -0
  223. package/vendor/nanocodex-tools/dist/memory.js +411 -0
  224. package/vendor/nanocodex-tools/dist/namespace.d.ts +87 -0
  225. package/vendor/nanocodex-tools/dist/namespace.js +338 -0
  226. package/vendor/nanocodex-tools/dist/repository-archive.d.ts +4 -0
  227. package/vendor/nanocodex-tools/dist/repository-archive.js +104 -0
  228. package/vendor/nanocodex-tools/dist/runtime.d.ts +30 -0
  229. package/vendor/nanocodex-tools/dist/runtime.js +37 -0
  230. package/vendor/nanocodex-tools/dist/session.d.ts +167 -0
  231. package/vendor/nanocodex-tools/dist/session.js +286 -0
  232. package/vendor/nanocodex-tools/dist/shell.d.ts +51 -0
  233. package/vendor/nanocodex-tools/dist/shell.js +553 -0
  234. package/vendor/nanocodex-tools/dist/ssh.d.ts +29 -0
  235. package/vendor/nanocodex-tools/dist/ssh.js +66 -0
  236. package/vendor/nanocodex-tools/dist/workspace.d.ts +45 -0
  237. package/vendor/nanocodex-tools/dist/workspace.js +237 -0
  238. package/vendor/nanocodex-tools/package.json +122 -0
  239. package/vendor/nanocodex-tools/runtime/code-runtime.mjs +817 -0
  240. package/vendor/nanocodex-tools/runtime/tool-configuration.mjs +50 -0
  241. package/vendor/nanocodex-tools/runtime/tool-router.mjs +730 -0
  242. package/vendor/nanocodex-tools/runtime/utf8.d.mts +2 -0
  243. package/vendor/nanocodex-tools/runtime/utf8.mjs +25 -0
  244. package/vendor/nanocodex-tools/tools/artifact.d.mts +69 -0
  245. package/vendor/nanocodex-tools/tools/artifact.mjs +270 -0
  246. package/vendor/nanocodex-tools/tools/attachment.mjs +603 -0
  247. package/vendor/nanocodex-tools/tools/bash.d.mts +90 -0
  248. package/vendor/nanocodex-tools/tools/bash.mjs +742 -0
  249. package/vendor/nanocodex-tools/tools/dataset.d.mts +9 -0
  250. package/vendor/nanocodex-tools/tools/dataset.mjs +47 -0
  251. package/vendor/nanocodex-tools/tools/datasetContract.mjs +54 -0
  252. package/vendor/nanocodex-tools/tools/datasetEngine.mjs +1167 -0
  253. package/vendor/nanocodex-tools/tools/execution-contract.d.mts +5 -0
  254. package/vendor/nanocodex-tools/tools/execution-contract.mjs +63 -0
  255. package/vendor/nanocodex-tools/tools/hostedCatalog.d.mts +20 -0
  256. package/vendor/nanocodex-tools/tools/hostedCatalog.mjs +67 -0
  257. package/vendor/nanocodex-tools/tools/hostedMachine.d.mts +10 -0
  258. package/vendor/nanocodex-tools/tools/hostedMachine.mjs +56 -0
  259. package/vendor/nanocodex-tools/tools/just-bash-browser.d.mts +1 -0
  260. package/vendor/nanocodex-tools/tools/just-bash-browser.mjs +1 -0
  261. package/vendor/nanocodex-tools/tools/namedTool.d.mts +3 -0
  262. package/vendor/nanocodex-tools/tools/namedTool.mjs +3 -0
  263. package/vendor/nanocodex-tools/tools/nodeProcess.d.mts +10 -0
  264. package/vendor/nanocodex-tools/tools/nodeProcess.mjs +314 -0
  265. package/vendor/nanocodex-tools/tools/processOutput.mjs +56 -0
  266. package/vendor/nanocodex-tools/tools/repository-workspace.d.mts +55 -0
  267. package/vendor/nanocodex-tools/tools/repository-workspace.mjs +397 -0
  268. package/vendor/nanocodex-tools/tools/ssh.d.mts +56 -0
  269. package/vendor/nanocodex-tools/tools/ssh.mjs +503 -0
  270. package/vendor/nanocodex-tools/tools/standard.mjs +458 -0
  271. package/vendor/nanocodex-tools/tools/standardDescriptions.mjs +3 -0
  272. package/vendor/nanocodex-tools/tools/types.d.mts +83 -0
  273. package/vendor/nanocodex-tools/tools/workspace.d.mts +25 -0
  274. package/vendor/nanocodex-tools/tools/workspace.mjs +282 -0
  275. package/vendor/nanocodex-tools/tools/x.d.mts +30 -0
  276. package/vendor/nanocodex-tools/tools/x.mjs +91 -0
@@ -0,0 +1,231 @@
1
+ import { connectActions } from "./Decorator.mjs";
2
+ import { iframe } from "./Dialog.mjs";
3
+ import { connectionFromWire, connectionMatchesRequest } from "./internal.mjs";
4
+ import { create as createRemoteProvider } from "./RemoteProvider.mjs";
5
+ import { http } from "./Transport.mjs";
6
+
7
+ let sequence = 0;
8
+
9
+ export function create(parameters) {
10
+ if (!parameters || typeof parameters.appId !== "string" || parameters.appId.length === 0) {
11
+ throw new TypeError("Client.create requires appId");
12
+ }
13
+ const transport = parameters.transport ?? http();
14
+ const appOrigin = parameters.appOrigin ?? browserOrigin();
15
+ const dialog = parameters.dialog ?? iframe();
16
+ const transportInstance = transport.setup({ appId: parameters.appId });
17
+ const dialogInstance = dialog.setup({ appId: parameters.appId });
18
+ const principalInstance = parameters.principal?.setup({
19
+ appId: parameters.appId,
20
+ appOrigin,
21
+ });
22
+ const provider = parameters.provider ?? createRemoteProvider({
23
+ host: dialogInstance.host,
24
+ async target(options) {
25
+ if (!principalInstance) await dialogInstance.waitForWallet?.();
26
+ return dialogInstance.walletTarget(options);
27
+ },
28
+ });
29
+ if (!parameters.provider && !principalInstance) void provider.prepare().catch(() => undefined);
30
+ const uid = `${transport.key}:${parameters.appId}:${++sequence}`;
31
+ const sessionStorage = parameters.session === false
32
+ ? undefined
33
+ : parameters.session ?? browserSessionStorage();
34
+ const sessionStorageKey = `nanocodex:connect:${parameters.appId}:session`;
35
+ let sessionToken;
36
+
37
+ function fetchControlPlane(input, init, token = sessionToken) {
38
+ if (typeof transportInstance.fetch !== "function") {
39
+ throw new TypeError("Connect transport does not expose an HTTP fetch boundary");
40
+ }
41
+ const target = input instanceof Request
42
+ ? input
43
+ : new URL(String(input), transportInstance.baseUrl);
44
+ const targetUrl = new URL(input instanceof Request ? input.url : target);
45
+ if (targetUrl.origin !== new URL(transportInstance.baseUrl).origin) {
46
+ throw new TypeError("Connect client fetch is restricted to its configured API origin");
47
+ }
48
+ const headers = new Headers(
49
+ init?.headers ?? (input instanceof Request ? input.headers : undefined),
50
+ );
51
+ if (token) headers.set("authorization", `Bearer ${token}`);
52
+ return transportInstance.fetch(target, { ...init, headers });
53
+ }
54
+
55
+ function requestControlPlane(request, token = sessionToken) {
56
+ return transportInstance.request({
57
+ ...request,
58
+ headers: token
59
+ ? { ...request.headers, authorization: `Bearer ${token}` }
60
+ : request.headers,
61
+ });
62
+ }
63
+
64
+ const base = {
65
+ accessKey: parameters.accessKey,
66
+ appId: parameters.appId,
67
+ appOrigin,
68
+ auth: parameters.auth,
69
+ dialog: dialogInstance,
70
+ key: parameters.key ?? "connect",
71
+ name: parameters.name ?? "Nanocodex Connect",
72
+ principal: principalInstance,
73
+ provider,
74
+ fetch: fetchControlPlane,
75
+ request: requestControlPlane,
76
+ transport: Object.freeze({
77
+ key: transport.key,
78
+ name: transport.name,
79
+ type: transport.type,
80
+ baseUrl: transportInstance.baseUrl,
81
+ }),
82
+ type: "connect",
83
+ uid,
84
+ };
85
+
86
+ Object.defineProperty(base, "_setSessionToken", {
87
+ enumerable: false,
88
+ value(token) {
89
+ sessionToken = token;
90
+ },
91
+ });
92
+ Object.defineProperty(base, "_setSession", {
93
+ enumerable: false,
94
+ value(session) {
95
+ sessionToken = session.token;
96
+ writeSession(sessionStorage, sessionStorageKey, session);
97
+ },
98
+ });
99
+ Object.defineProperty(base, "_getSession", {
100
+ enumerable: false,
101
+ value() {
102
+ return readSession(sessionStorage, sessionStorageKey);
103
+ },
104
+ });
105
+ Object.defineProperty(base, "_hasSession", {
106
+ enumerable: false,
107
+ value() {
108
+ return readSession(sessionStorage, sessionStorageKey) !== undefined;
109
+ },
110
+ });
111
+ Object.defineProperty(base, "_resumeConnection", {
112
+ enumerable: false,
113
+ value(options) {
114
+ const session = readSession(sessionStorage, sessionStorageKey);
115
+ if (!session?.connection) return undefined;
116
+ try {
117
+ const connection = connectionFromWire(session.connection);
118
+ if (connection.principal) return undefined;
119
+ if (connection.grant.id.toLowerCase() !== session.grantId.toLowerCase()
120
+ || connection.grant.status !== "active"
121
+ || connection.grant.expiresAt <= Math.floor(Date.now() / 1_000)
122
+ || !connectionMatchesRequest(connection, options)) {
123
+ return undefined;
124
+ }
125
+ sessionToken = session.token;
126
+ return connection;
127
+ } catch {
128
+ return undefined;
129
+ }
130
+ },
131
+ });
132
+ Object.defineProperty(base, "_clearSession", {
133
+ enumerable: false,
134
+ value() {
135
+ sessionToken = undefined;
136
+ removeSession(sessionStorage, sessionStorageKey);
137
+ },
138
+ });
139
+ Object.defineProperty(base, "_captureSession", {
140
+ enumerable: false,
141
+ value() {
142
+ const token = sessionToken;
143
+ if (typeof token !== "string" || !token) {
144
+ throw new Error("The Connect grant session is unavailable.");
145
+ }
146
+ return Object.freeze({
147
+ token,
148
+ fetch: (input, init) => fetchControlPlane(input, init, token),
149
+ request: (request) => requestControlPlane(request, token),
150
+ });
151
+ },
152
+ });
153
+
154
+ function extend(decorator) {
155
+ if (typeof decorator !== "function") throw new TypeError("client extension must be a function");
156
+ const extension = decorator(client);
157
+ const next = Object.create(Object.getPrototypeOf(client));
158
+ Object.defineProperties(next, Object.getOwnPropertyDescriptors(client));
159
+ return Object.assign(next, extension);
160
+ }
161
+
162
+ let client = Object.assign(base, { extend });
163
+ client = client.extend(connectActions());
164
+ return Object.freeze(client);
165
+ }
166
+
167
+ function browserOrigin() {
168
+ try {
169
+ const origin = globalThis.location?.origin;
170
+ return typeof origin === "string" && origin !== "null" ? origin : undefined;
171
+ } catch {
172
+ return undefined;
173
+ }
174
+ }
175
+
176
+ function browserSessionStorage() {
177
+ try {
178
+ return globalThis.localStorage;
179
+ } catch {
180
+ return undefined;
181
+ }
182
+ }
183
+
184
+ function readSession(storage, key) {
185
+ if (!storage) return undefined;
186
+ try {
187
+ const value = JSON.parse(storage.getItem(key));
188
+ if (!value
189
+ || typeof value !== "object"
190
+ || !/^0x[0-9a-fA-F]{64}$/.test(value.grantId)
191
+ || typeof value.token !== "string"
192
+ || value.token.length === 0) {
193
+ removeSession(storage, key);
194
+ return undefined;
195
+ }
196
+ return Object.freeze({
197
+ grantId: value.grantId,
198
+ token: value.token,
199
+ ...(Array.isArray(value.resources)
200
+ && value.resources.length > 0
201
+ && value.resources.every((resource) => typeof resource === "string")
202
+ ? { resources: Object.freeze([...value.resources]) }
203
+ : {}),
204
+ ...(value.connection && typeof value.connection === "object"
205
+ ? { connection: value.connection }
206
+ : {}),
207
+ });
208
+ } catch {
209
+ removeSession(storage, key);
210
+ return undefined;
211
+ }
212
+ }
213
+
214
+ function writeSession(storage, key, session) {
215
+ if (!storage) return;
216
+ try {
217
+ storage.setItem(key, JSON.stringify(session));
218
+ } catch {
219
+ // Storage is an optional browser convenience. The in-memory grant session
220
+ // remains valid for the current page when persistence is unavailable.
221
+ }
222
+ }
223
+
224
+ function removeSession(storage, key) {
225
+ if (!storage) return;
226
+ try {
227
+ storage.removeItem(key);
228
+ } catch {
229
+ // A blocked storage implementation is equivalent to an ephemeral session.
230
+ }
231
+ }
@@ -0,0 +1,31 @@
1
+ import type { logout } from "./actions/account.mjs";
2
+ import type { create as createAgent } from "./actions/agent.mjs";
3
+ import type { connect, disconnect, reconnect } from "./actions/connection.mjs";
4
+ import type { revoke } from "./actions/grant.mjs";
5
+ import type { fund, getConfig } from "./actions/machineUsd.mjs";
6
+ import type { transport as modelTransport } from "./actions/model.mjs";
7
+ import type { charge, getBalance } from "./actions/mpp.mjs";
8
+ import type { Client } from "./Client.mjs";
9
+ import type { Connection, HostConnection } from "./types.mjs";
10
+
11
+ export type ConnectActions<connection extends Connection | HostConnection = Connection> = {
12
+ account: { logout(): logout.ReturnType };
13
+ agent: { create(options: createAgent.Options): Promise<createAgent.ReturnType> };
14
+ connection: {
15
+ connect(options: connect.Options): Promise<connection>;
16
+ disconnect(options?: disconnect.Options | undefined): disconnect.ReturnType;
17
+ reconnect(options?: reconnect.Options | undefined): Promise<connection | undefined>;
18
+ };
19
+ grant: { revoke(options: revoke.Options): revoke.ReturnType };
20
+ machineUsd: {
21
+ fund(options: fund.Options): fund.ReturnType;
22
+ getConfig(options?: getConfig.Options | undefined): getConfig.ReturnType;
23
+ };
24
+ model: { transport(options: modelTransport.Options): modelTransport.ReturnType };
25
+ mpp: {
26
+ charge(options: charge.Options): charge.ReturnType;
27
+ getBalance(options: getBalance.Options): getBalance.ReturnType;
28
+ };
29
+ };
30
+
31
+ export function connectActions(): (client: Client) => ConnectActions;
@@ -0,0 +1,37 @@
1
+ import * as account from "./actions/account.mjs";
2
+ import * as agent from "./actions/agent.mjs";
3
+ import * as connection from "./actions/connection.mjs";
4
+ import * as grant from "./actions/grant.mjs";
5
+ import * as machineUsd from "./actions/machineUsd.mjs";
6
+ import * as model from "./actions/model.mjs";
7
+ import * as mpp from "./actions/mpp.mjs";
8
+
9
+ export function connectActions() {
10
+ return (client) => ({
11
+ account: {
12
+ logout: () => account.logout(client),
13
+ },
14
+ agent: {
15
+ create: (options) => agent.create(client, options),
16
+ },
17
+ connection: {
18
+ connect: (options) => connection.connect(client, options),
19
+ disconnect: (options) => connection.disconnect(client, options),
20
+ reconnect: (options) => connection.reconnect(client, options),
21
+ },
22
+ grant: {
23
+ revoke: (options) => grant.revoke(client, options),
24
+ },
25
+ machineUsd: {
26
+ fund: (options) => machineUsd.fund(client, options),
27
+ getConfig: (options) => machineUsd.getConfig(client, options),
28
+ },
29
+ model: {
30
+ transport: (options) => model.transport(client, options),
31
+ },
32
+ mpp: {
33
+ charge: (options) => mpp.charge(client, options),
34
+ getBalance: (options) => mpp.getBalance(client, options),
35
+ },
36
+ });
37
+ }
@@ -0,0 +1,113 @@
1
+ export const DEFAULT_HOST: "https://nanocodex.gakonst.workers.dev/connect-dialog/";
2
+
3
+ export type Request = ConnectionRequest | FundingRequest;
4
+
5
+ export type ConnectionRequest = Readonly<{
6
+ id: string;
7
+ type: "connect";
8
+ app: Readonly<{ id: string; name: string; origin: string }>;
9
+ accountAddress: `0x${string}`;
10
+ auth: Readonly<{
11
+ /** EIP-4361 message whose exact bytes are bound by the access-key witness. */
12
+ message: string;
13
+ /** Connect capabilities echoed into the SIWE Resources field. */
14
+ resources: readonly string[];
15
+ }>;
16
+ permission: Readonly<{
17
+ id: string;
18
+ title: string;
19
+ description: string;
20
+ connectors: readonly Readonly<{ id: string; name: string; detail: string }>[];
21
+ }>;
22
+ accessKey: Readonly<{
23
+ address: `0x${string}`;
24
+ chainId: bigint;
25
+ keyId: `0x${string}`;
26
+ publicKey: `0x${string}`;
27
+ keyType: "secp256k1" | "p256" | "webAuthn";
28
+ witness: `0x${string}`;
29
+ expiry: number;
30
+ limits: readonly Readonly<{
31
+ token: `0x${string}`;
32
+ limit: bigint;
33
+ period?: number | undefined;
34
+ }>[];
35
+ scopes: readonly Readonly<{
36
+ address: `0x${string}`;
37
+ selector?: `0x${string}` | string | undefined;
38
+ recipients?: readonly `0x${string}`[] | undefined;
39
+ }>[];
40
+ }>;
41
+ mpp?: Readonly<{
42
+ token: `0x${string}`;
43
+ symbol: string;
44
+ limit: bigint;
45
+ period: number;
46
+ maxPerRequest: bigint;
47
+ /** Exact recipient when the delegated payment authority is recipient-bound. */
48
+ recipient?: `0x${string}` | undefined;
49
+ }> | undefined;
50
+ }>;
51
+
52
+ export type FundingRequest = Readonly<{
53
+ id: string;
54
+ type: "machineUsdFund";
55
+ accountAddress?: `0x${string}` | undefined;
56
+ grantId: `0x${string}`;
57
+ chainId: number;
58
+ apiUrl: string;
59
+ stripePublishableKey: string;
60
+ tokenAddress: `0x${string}`;
61
+ usdAmountCents: number;
62
+ }>;
63
+
64
+ export type Instance = Readonly<{
65
+ host: string;
66
+ open(request: Request): Promise<unknown>;
67
+ /** Internal WATA iframe target used by the bundled Accounts provider. */
68
+ walletTarget?(options: Readonly<{ host?: string | undefined }>): Window | null | undefined;
69
+ /** Resolves after the bundled Accounts iframe has completed navigation. */
70
+ waitForWallet?(): Promise<void>;
71
+ showWallet?(): void;
72
+ hideWallet?(): void;
73
+ /** Replaces the cached hosted wallet after account logout. */
74
+ resetWallet?(): Promise<void>;
75
+ getRequest?(): Request | undefined;
76
+ subscribe?(listener: () => void): () => void;
77
+ respond?(result: unknown): void;
78
+ reject?(error?: unknown): void;
79
+ }>;
80
+
81
+ export type Dialog<type extends string = string> = Readonly<{
82
+ key: string;
83
+ name: string;
84
+ type: type;
85
+ setup(options: Readonly<{ appId: string }>): Instance;
86
+ }>;
87
+
88
+ export function from<const type extends string>(parameters: Readonly<{
89
+ key: string;
90
+ name: string;
91
+ type: type;
92
+ setup(options: Readonly<{ appId: string }>): Instance;
93
+ }>): Dialog<type>;
94
+
95
+ export function iframe(options?: Readonly<{
96
+ host?: string | undefined;
97
+ key?: string | undefined;
98
+ name?: string | undefined;
99
+ }>): Dialog<"iframe">;
100
+
101
+ export function popup(options?: Readonly<{
102
+ host?: string | undefined;
103
+ key?: string | undefined;
104
+ name?: string | undefined;
105
+ target?: string | undefined;
106
+ features?: string | undefined;
107
+ }>): Dialog<"popup">;
108
+
109
+ export function memory(options?: Readonly<{
110
+ host?: string | undefined;
111
+ key?: string | undefined;
112
+ name?: string | undefined;
113
+ }>): Dialog<"memory">;