@weaveprotocol/core 0.1.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 (430) hide show
  1. package/README.md +1106 -0
  2. package/dist/elements/auth-styles.d.ts +18 -0
  3. package/dist/elements/auth-styles.d.ts.map +1 -0
  4. package/dist/elements/auth-styles.js +150 -0
  5. package/dist/elements/auth-styles.js.map +1 -0
  6. package/dist/elements/dom.d.ts +28 -0
  7. package/dist/elements/dom.d.ts.map +1 -0
  8. package/dist/elements/dom.js +74 -0
  9. package/dist/elements/dom.js.map +1 -0
  10. package/dist/elements/index.d.ts +13 -0
  11. package/dist/elements/index.d.ts.map +1 -0
  12. package/dist/elements/index.js +11 -0
  13. package/dist/elements/index.js.map +1 -0
  14. package/dist/elements/weave-auth.d.ts +52 -0
  15. package/dist/elements/weave-auth.d.ts.map +1 -0
  16. package/dist/elements/weave-auth.js +427 -0
  17. package/dist/elements/weave-auth.js.map +1 -0
  18. package/dist/identity/account-store.d.ts +113 -0
  19. package/dist/identity/account-store.d.ts.map +1 -0
  20. package/dist/identity/account-store.js +305 -0
  21. package/dist/identity/account-store.js.map +1 -0
  22. package/dist/identity/account-vault.d.ts +199 -0
  23. package/dist/identity/account-vault.d.ts.map +1 -0
  24. package/dist/identity/account-vault.js +251 -0
  25. package/dist/identity/account-vault.js.map +1 -0
  26. package/dist/identity/agent-note.d.ts +19 -0
  27. package/dist/identity/agent-note.d.ts.map +1 -0
  28. package/dist/identity/agent-note.js +29 -0
  29. package/dist/identity/agent-note.js.map +1 -0
  30. package/dist/identity/crypto-p256.d.ts +7 -0
  31. package/dist/identity/crypto-p256.d.ts.map +1 -0
  32. package/dist/identity/crypto-p256.js +84 -0
  33. package/dist/identity/crypto-p256.js.map +1 -0
  34. package/dist/identity/device-key.d.ts +60 -0
  35. package/dist/identity/device-key.d.ts.map +1 -0
  36. package/dist/identity/device-key.js +103 -0
  37. package/dist/identity/device-key.js.map +1 -0
  38. package/dist/identity/did.d.ts +22 -0
  39. package/dist/identity/did.d.ts.map +1 -0
  40. package/dist/identity/did.js +37 -0
  41. package/dist/identity/did.js.map +1 -0
  42. package/dist/identity/folder-account.d.ts +65 -0
  43. package/dist/identity/folder-account.d.ts.map +1 -0
  44. package/dist/identity/folder-account.js +115 -0
  45. package/dist/identity/folder-account.js.map +1 -0
  46. package/dist/identity/identity-manager.d.ts +36 -0
  47. package/dist/identity/identity-manager.d.ts.map +1 -0
  48. package/dist/identity/identity-manager.js +115 -0
  49. package/dist/identity/identity-manager.js.map +1 -0
  50. package/dist/identity/index.d.ts +10 -0
  51. package/dist/identity/index.d.ts.map +1 -0
  52. package/dist/identity/index.js +10 -0
  53. package/dist/identity/index.js.map +1 -0
  54. package/dist/identity/keys.d.ts +24 -0
  55. package/dist/identity/keys.d.ts.map +1 -0
  56. package/dist/identity/keys.js +38 -0
  57. package/dist/identity/keys.js.map +1 -0
  58. package/dist/identity/pairing.d.ts +83 -0
  59. package/dist/identity/pairing.d.ts.map +1 -0
  60. package/dist/identity/pairing.js +120 -0
  61. package/dist/identity/pairing.js.map +1 -0
  62. package/dist/identity/passkey-diagnostics.d.ts +54 -0
  63. package/dist/identity/passkey-diagnostics.d.ts.map +1 -0
  64. package/dist/identity/passkey-diagnostics.js +178 -0
  65. package/dist/identity/passkey-diagnostics.js.map +1 -0
  66. package/dist/identity/recovery-code.d.ts +50 -0
  67. package/dist/identity/recovery-code.d.ts.map +1 -0
  68. package/dist/identity/recovery-code.js +116 -0
  69. package/dist/identity/recovery-code.js.map +1 -0
  70. package/dist/identity/root-signer.d.ts +59 -0
  71. package/dist/identity/root-signer.d.ts.map +1 -0
  72. package/dist/identity/root-signer.js +44 -0
  73. package/dist/identity/root-signer.js.map +1 -0
  74. package/dist/identity/ucan.d.ts +164 -0
  75. package/dist/identity/ucan.d.ts.map +1 -0
  76. package/dist/identity/ucan.js +273 -0
  77. package/dist/identity/ucan.js.map +1 -0
  78. package/dist/identity/webauthn.d.ts +87 -0
  79. package/dist/identity/webauthn.d.ts.map +1 -0
  80. package/dist/identity/webauthn.js +155 -0
  81. package/dist/identity/webauthn.js.map +1 -0
  82. package/dist/index.d.ts +116 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +85 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/network/index.d.ts +17 -0
  87. package/dist/network/index.d.ts.map +1 -0
  88. package/dist/network/index.js +10 -0
  89. package/dist/network/index.js.map +1 -0
  90. package/dist/network/introductions.d.ts +85 -0
  91. package/dist/network/introductions.d.ts.map +1 -0
  92. package/dist/network/introductions.js +94 -0
  93. package/dist/network/introductions.js.map +1 -0
  94. package/dist/network/local-transport.d.ts +22 -0
  95. package/dist/network/local-transport.d.ts.map +1 -0
  96. package/dist/network/local-transport.js +55 -0
  97. package/dist/network/local-transport.js.map +1 -0
  98. package/dist/network/mesh.d.ts +31 -0
  99. package/dist/network/mesh.d.ts.map +1 -0
  100. package/dist/network/mesh.js +332 -0
  101. package/dist/network/mesh.js.map +1 -0
  102. package/dist/network/multi-signaling.d.ts +29 -0
  103. package/dist/network/multi-signaling.d.ts.map +1 -0
  104. package/dist/network/multi-signaling.js +125 -0
  105. package/dist/network/multi-signaling.js.map +1 -0
  106. package/dist/network/network-manager.d.ts +37 -0
  107. package/dist/network/network-manager.d.ts.map +1 -0
  108. package/dist/network/network-manager.js +64 -0
  109. package/dist/network/network-manager.js.map +1 -0
  110. package/dist/network/peer-auth.d.ts +98 -0
  111. package/dist/network/peer-auth.d.ts.map +1 -0
  112. package/dist/network/peer-auth.js +86 -0
  113. package/dist/network/peer-auth.js.map +1 -0
  114. package/dist/network/rtc-transport.d.ts +18 -0
  115. package/dist/network/rtc-transport.d.ts.map +1 -0
  116. package/dist/network/rtc-transport.js +149 -0
  117. package/dist/network/rtc-transport.js.map +1 -0
  118. package/dist/network/signaling.d.ts +40 -0
  119. package/dist/network/signaling.d.ts.map +1 -0
  120. package/dist/network/signaling.js +124 -0
  121. package/dist/network/signaling.js.map +1 -0
  122. package/dist/network/transport.d.ts +50 -0
  123. package/dist/network/transport.d.ts.map +1 -0
  124. package/dist/network/transport.js +13 -0
  125. package/dist/network/transport.js.map +1 -0
  126. package/dist/network/ws-transport.d.ts +42 -0
  127. package/dist/network/ws-transport.d.ts.map +1 -0
  128. package/dist/network/ws-transport.js +194 -0
  129. package/dist/network/ws-transport.js.map +1 -0
  130. package/dist/node/actions.d.ts +62 -0
  131. package/dist/node/actions.d.ts.map +1 -0
  132. package/dist/node/actions.js +500 -0
  133. package/dist/node/actions.js.map +1 -0
  134. package/dist/node/carrier.d.ts +85 -0
  135. package/dist/node/carrier.d.ts.map +1 -0
  136. package/dist/node/carrier.js +192 -0
  137. package/dist/node/carrier.js.map +1 -0
  138. package/dist/node/copy.d.ts +38 -0
  139. package/dist/node/copy.d.ts.map +1 -0
  140. package/dist/node/copy.js +53 -0
  141. package/dist/node/copy.js.map +1 -0
  142. package/dist/node/index.d.ts +16 -0
  143. package/dist/node/index.d.ts.map +1 -0
  144. package/dist/node/index.js +11 -0
  145. package/dist/node/index.js.map +1 -0
  146. package/dist/node/node.d.ts +12 -0
  147. package/dist/node/node.d.ts.map +1 -0
  148. package/dist/node/node.js +872 -0
  149. package/dist/node/node.js.map +1 -0
  150. package/dist/node/space-runtime.d.ts +144 -0
  151. package/dist/node/space-runtime.d.ts.map +1 -0
  152. package/dist/node/space-runtime.js +1221 -0
  153. package/dist/node/space-runtime.js.map +1 -0
  154. package/dist/node/stores.d.ts +45 -0
  155. package/dist/node/stores.d.ts.map +1 -0
  156. package/dist/node/stores.js +31 -0
  157. package/dist/node/stores.js.map +1 -0
  158. package/dist/node/types.d.ts +508 -0
  159. package/dist/node/types.d.ts.map +1 -0
  160. package/dist/node/types.js +2 -0
  161. package/dist/node/types.js.map +1 -0
  162. package/dist/privacy/index.d.ts +4 -0
  163. package/dist/privacy/index.d.ts.map +1 -0
  164. package/dist/privacy/index.js +4 -0
  165. package/dist/privacy/index.js.map +1 -0
  166. package/dist/privacy/key-distribution.d.ts +42 -0
  167. package/dist/privacy/key-distribution.d.ts.map +1 -0
  168. package/dist/privacy/key-distribution.js +50 -0
  169. package/dist/privacy/key-distribution.js.map +1 -0
  170. package/dist/privacy/privacy-guard.d.ts +24 -0
  171. package/dist/privacy/privacy-guard.d.ts.map +1 -0
  172. package/dist/privacy/privacy-guard.js +87 -0
  173. package/dist/privacy/privacy-guard.js.map +1 -0
  174. package/dist/privacy/space-encryption.d.ts +48 -0
  175. package/dist/privacy/space-encryption.d.ts.map +1 -0
  176. package/dist/privacy/space-encryption.js +61 -0
  177. package/dist/privacy/space-encryption.js.map +1 -0
  178. package/dist/query/engine.d.ts +27 -0
  179. package/dist/query/engine.d.ts.map +1 -0
  180. package/dist/query/engine.js +84 -0
  181. package/dist/query/engine.js.map +1 -0
  182. package/dist/query/filter.d.ts +15 -0
  183. package/dist/query/filter.d.ts.map +1 -0
  184. package/dist/query/filter.js +207 -0
  185. package/dist/query/filter.js.map +1 -0
  186. package/dist/query/types.d.ts +144 -0
  187. package/dist/query/types.d.ts.map +1 -0
  188. package/dist/query/types.js +22 -0
  189. package/dist/query/types.js.map +1 -0
  190. package/dist/react/context.d.ts +81 -0
  191. package/dist/react/context.d.ts.map +1 -0
  192. package/dist/react/context.js +95 -0
  193. package/dist/react/context.js.map +1 -0
  194. package/dist/react/index.d.ts +40 -0
  195. package/dist/react/index.d.ts.map +1 -0
  196. package/dist/react/index.js +36 -0
  197. package/dist/react/index.js.map +1 -0
  198. package/dist/react/use-live.d.ts +16 -0
  199. package/dist/react/use-live.d.ts.map +1 -0
  200. package/dist/react/use-live.js +55 -0
  201. package/dist/react/use-live.js.map +1 -0
  202. package/dist/react/use-query.d.ts +17 -0
  203. package/dist/react/use-query.d.ts.map +1 -0
  204. package/dist/react/use-query.js +23 -0
  205. package/dist/react/use-query.js.map +1 -0
  206. package/dist/react/use-space.d.ts +29 -0
  207. package/dist/react/use-space.d.ts.map +1 -0
  208. package/dist/react/use-space.js +48 -0
  209. package/dist/react/use-space.js.map +1 -0
  210. package/dist/react/use-spaces.d.ts +19 -0
  211. package/dist/react/use-spaces.d.ts.map +1 -0
  212. package/dist/react/use-spaces.js +55 -0
  213. package/dist/react/use-spaces.js.map +1 -0
  214. package/dist/react/use-weave-auth.d.ts +10 -0
  215. package/dist/react/use-weave-auth.d.ts.map +1 -0
  216. package/dist/react/use-weave-auth.js +15 -0
  217. package/dist/react/use-weave-auth.js.map +1 -0
  218. package/dist/react/weave-auth.d.ts +17 -0
  219. package/dist/react/weave-auth.d.ts.map +1 -0
  220. package/dist/react/weave-auth.js +38 -0
  221. package/dist/react/weave-auth.js.map +1 -0
  222. package/dist/records/describe.d.ts +38 -0
  223. package/dist/records/describe.d.ts.map +1 -0
  224. package/dist/records/describe.js +101 -0
  225. package/dist/records/describe.js.map +1 -0
  226. package/dist/records/links.d.ts +14 -0
  227. package/dist/records/links.d.ts.map +1 -0
  228. package/dist/records/links.js +25 -0
  229. package/dist/records/links.js.map +1 -0
  230. package/dist/records/rules.d.ts +59 -0
  231. package/dist/records/rules.d.ts.map +1 -0
  232. package/dist/records/rules.js +118 -0
  233. package/dist/records/rules.js.map +1 -0
  234. package/dist/records/version.d.ts +54 -0
  235. package/dist/records/version.d.ts.map +1 -0
  236. package/dist/records/version.js +70 -0
  237. package/dist/records/version.js.map +1 -0
  238. package/dist/schema/collection-def.d.ts +96 -0
  239. package/dist/schema/collection-def.d.ts.map +1 -0
  240. package/dist/schema/collection-def.js +272 -0
  241. package/dist/schema/collection-def.js.map +1 -0
  242. package/dist/schema/expression.d.ts +69 -0
  243. package/dist/schema/expression.d.ts.map +1 -0
  244. package/dist/schema/expression.js +92 -0
  245. package/dist/schema/expression.js.map +1 -0
  246. package/dist/schema/index.d.ts +4 -0
  247. package/dist/schema/index.d.ts.map +1 -0
  248. package/dist/schema/index.js +4 -0
  249. package/dist/schema/index.js.map +1 -0
  250. package/dist/schema/schema-engine.d.ts +42 -0
  251. package/dist/schema/schema-engine.d.ts.map +1 -0
  252. package/dist/schema/schema-engine.js +36 -0
  253. package/dist/schema/schema-engine.js.map +1 -0
  254. package/dist/schema/signer.d.ts +27 -0
  255. package/dist/schema/signer.d.ts.map +1 -0
  256. package/dist/schema/signer.js +36 -0
  257. package/dist/schema/signer.js.map +1 -0
  258. package/dist/schemas/apps.d.ts +88 -0
  259. package/dist/schemas/apps.d.ts.map +1 -0
  260. package/dist/schemas/apps.js +168 -0
  261. package/dist/schemas/apps.js.map +1 -0
  262. package/dist/schemas/index.d.ts +410 -0
  263. package/dist/schemas/index.d.ts.map +1 -0
  264. package/dist/schemas/index.js +208 -0
  265. package/dist/schemas/index.js.map +1 -0
  266. package/dist/schemas/screens.d.ts +67 -0
  267. package/dist/schemas/screens.d.ts.map +1 -0
  268. package/dist/schemas/screens.js +242 -0
  269. package/dist/schemas/screens.js.map +1 -0
  270. package/dist/session/agent-link.d.ts +79 -0
  271. package/dist/session/agent-link.d.ts.map +1 -0
  272. package/dist/session/agent-link.js +251 -0
  273. package/dist/session/agent-link.js.map +1 -0
  274. package/dist/session/auth.d.ts +233 -0
  275. package/dist/session/auth.d.ts.map +1 -0
  276. package/dist/session/auth.js +783 -0
  277. package/dist/session/auth.js.map +1 -0
  278. package/dist/session/connect.d.ts +211 -0
  279. package/dist/session/connect.d.ts.map +1 -0
  280. package/dist/session/connect.js +355 -0
  281. package/dist/session/connect.js.map +1 -0
  282. package/dist/session/connection.d.ts +70 -0
  283. package/dist/session/connection.d.ts.map +1 -0
  284. package/dist/session/connection.js +120 -0
  285. package/dist/session/connection.js.map +1 -0
  286. package/dist/session/credentials.d.ts +44 -0
  287. package/dist/session/credentials.d.ts.map +1 -0
  288. package/dist/session/credentials.js +60 -0
  289. package/dist/session/credentials.js.map +1 -0
  290. package/dist/session/index.d.ts +25 -0
  291. package/dist/session/index.d.ts.map +1 -0
  292. package/dist/session/index.js +18 -0
  293. package/dist/session/index.js.map +1 -0
  294. package/dist/session/pairing.d.ts +59 -0
  295. package/dist/session/pairing.d.ts.map +1 -0
  296. package/dist/session/pairing.js +144 -0
  297. package/dist/session/pairing.js.map +1 -0
  298. package/dist/session/places.d.ts +62 -0
  299. package/dist/session/places.d.ts.map +1 -0
  300. package/dist/session/places.js +101 -0
  301. package/dist/session/places.js.map +1 -0
  302. package/dist/session/stay-signed-in.d.ts +37 -0
  303. package/dist/session/stay-signed-in.d.ts.map +1 -0
  304. package/dist/session/stay-signed-in.js +124 -0
  305. package/dist/session/stay-signed-in.js.map +1 -0
  306. package/dist/space/account-registry.d.ts +64 -0
  307. package/dist/space/account-registry.d.ts.map +1 -0
  308. package/dist/space/account-registry.js +66 -0
  309. package/dist/space/account-registry.js.map +1 -0
  310. package/dist/space/index.d.ts +3 -0
  311. package/dist/space/index.d.ts.map +1 -0
  312. package/dist/space/index.js +3 -0
  313. package/dist/space/index.js.map +1 -0
  314. package/dist/space/pass.d.ts +63 -0
  315. package/dist/space/pass.d.ts.map +1 -0
  316. package/dist/space/pass.js +54 -0
  317. package/dist/space/pass.js.map +1 -0
  318. package/dist/space/presets.d.ts +31 -0
  319. package/dist/space/presets.d.ts.map +1 -0
  320. package/dist/space/presets.js +24 -0
  321. package/dist/space/presets.js.map +1 -0
  322. package/dist/space/roles.d.ts +186 -0
  323. package/dist/space/roles.d.ts.map +1 -0
  324. package/dist/space/roles.js +500 -0
  325. package/dist/space/roles.js.map +1 -0
  326. package/dist/space/space-access.d.ts +80 -0
  327. package/dist/space/space-access.d.ts.map +1 -0
  328. package/dist/space/space-access.js +135 -0
  329. package/dist/space/space-access.js.map +1 -0
  330. package/dist/space/space-manager.d.ts +87 -0
  331. package/dist/space/space-manager.d.ts.map +1 -0
  332. package/dist/space/space-manager.js +187 -0
  333. package/dist/space/space-manager.js.map +1 -0
  334. package/dist/storage/directory-access.d.ts +78 -0
  335. package/dist/storage/directory-access.d.ts.map +1 -0
  336. package/dist/storage/directory-access.js +164 -0
  337. package/dist/storage/directory-access.js.map +1 -0
  338. package/dist/storage/encrypted-adapter.d.ts +49 -0
  339. package/dist/storage/encrypted-adapter.d.ts.map +1 -0
  340. package/dist/storage/encrypted-adapter.js +106 -0
  341. package/dist/storage/encrypted-adapter.js.map +1 -0
  342. package/dist/storage/folder-adapter.d.ts +105 -0
  343. package/dist/storage/folder-adapter.d.ts.map +1 -0
  344. package/dist/storage/folder-adapter.js +280 -0
  345. package/dist/storage/folder-adapter.js.map +1 -0
  346. package/dist/storage/folder-reconcile.d.ts +53 -0
  347. package/dist/storage/folder-reconcile.d.ts.map +1 -0
  348. package/dist/storage/folder-reconcile.js +65 -0
  349. package/dist/storage/folder-reconcile.js.map +1 -0
  350. package/dist/storage/index.d.ts +10 -0
  351. package/dist/storage/index.d.ts.map +1 -0
  352. package/dist/storage/index.js +9 -0
  353. package/dist/storage/index.js.map +1 -0
  354. package/dist/storage/indexeddb-adapter.d.ts +12 -0
  355. package/dist/storage/indexeddb-adapter.d.ts.map +1 -0
  356. package/dist/storage/indexeddb-adapter.js +190 -0
  357. package/dist/storage/indexeddb-adapter.js.map +1 -0
  358. package/dist/storage/mst.d.ts +121 -0
  359. package/dist/storage/mst.d.ts.map +1 -0
  360. package/dist/storage/mst.js +402 -0
  361. package/dist/storage/mst.js.map +1 -0
  362. package/dist/storage/storage-provider.d.ts +85 -0
  363. package/dist/storage/storage-provider.d.ts.map +1 -0
  364. package/dist/storage/storage-provider.js +220 -0
  365. package/dist/storage/storage-provider.js.map +1 -0
  366. package/dist/sync/anti-entropy.d.ts +49 -0
  367. package/dist/sync/anti-entropy.d.ts.map +1 -0
  368. package/dist/sync/anti-entropy.js +62 -0
  369. package/dist/sync/anti-entropy.js.map +1 -0
  370. package/dist/sync/index.d.ts +4 -0
  371. package/dist/sync/index.d.ts.map +1 -0
  372. package/dist/sync/index.js +4 -0
  373. package/dist/sync/index.js.map +1 -0
  374. package/dist/sync/sync-engine.d.ts +71 -0
  375. package/dist/sync/sync-engine.d.ts.map +1 -0
  376. package/dist/sync/sync-engine.js +309 -0
  377. package/dist/sync/sync-engine.js.map +1 -0
  378. package/dist/sync/sync-messages.d.ts +75 -0
  379. package/dist/sync/sync-messages.d.ts.map +1 -0
  380. package/dist/sync/sync-messages.js +12 -0
  381. package/dist/sync/sync-messages.js.map +1 -0
  382. package/dist/types.d.ts +243 -0
  383. package/dist/types.d.ts.map +1 -0
  384. package/dist/types.js +7 -0
  385. package/dist/types.js.map +1 -0
  386. package/dist/utils/encoding.d.ts +63 -0
  387. package/dist/utils/encoding.d.ts.map +1 -0
  388. package/dist/utils/encoding.js +130 -0
  389. package/dist/utils/encoding.js.map +1 -0
  390. package/dist/utils/errors.d.ts +43 -0
  391. package/dist/utils/errors.d.ts.map +1 -0
  392. package/dist/utils/errors.js +28 -0
  393. package/dist/utils/errors.js.map +1 -0
  394. package/dist/utils/events.d.ts +19 -0
  395. package/dist/utils/events.d.ts.map +1 -0
  396. package/dist/utils/events.js +27 -0
  397. package/dist/utils/events.js.map +1 -0
  398. package/dist/utils/hash.d.ts +23 -0
  399. package/dist/utils/hash.d.ts.map +1 -0
  400. package/dist/utils/hash.js +49 -0
  401. package/dist/utils/hash.js.map +1 -0
  402. package/dist/utils/index.d.ts +9 -0
  403. package/dist/utils/index.d.ts.map +1 -0
  404. package/dist/utils/index.js +9 -0
  405. package/dist/utils/index.js.map +1 -0
  406. package/dist/validation/capability-gate.d.ts +50 -0
  407. package/dist/validation/capability-gate.d.ts.map +1 -0
  408. package/dist/validation/capability-gate.js +71 -0
  409. package/dist/validation/capability-gate.js.map +1 -0
  410. package/dist/validation/crypto-gate.d.ts +16 -0
  411. package/dist/validation/crypto-gate.d.ts.map +1 -0
  412. package/dist/validation/crypto-gate.js +37 -0
  413. package/dist/validation/crypto-gate.js.map +1 -0
  414. package/dist/validation/index.d.ts +6 -0
  415. package/dist/validation/index.d.ts.map +1 -0
  416. package/dist/validation/index.js +6 -0
  417. package/dist/validation/index.js.map +1 -0
  418. package/dist/validation/stateful-gate.d.ts +15 -0
  419. package/dist/validation/stateful-gate.d.ts.map +1 -0
  420. package/dist/validation/stateful-gate.js +50 -0
  421. package/dist/validation/stateful-gate.js.map +1 -0
  422. package/dist/validation/structural-gate.d.ts +18 -0
  423. package/dist/validation/structural-gate.d.ts.map +1 -0
  424. package/dist/validation/structural-gate.js +54 -0
  425. package/dist/validation/structural-gate.js.map +1 -0
  426. package/dist/validation/validation-engine.d.ts +28 -0
  427. package/dist/validation/validation-engine.d.ts.map +1 -0
  428. package/dist/validation/validation-engine.js +38 -0
  429. package/dist/validation/validation-engine.js.map +1 -0
  430. package/package.json +107 -0
@@ -0,0 +1,67 @@
1
+ /**
2
+ * @module schemas/screens
3
+ * Screens: an app's own UI, kept on a collection definition and run sealed.
4
+ *
5
+ * A definition may carry a `screen` — one HTML document, scripts and styles
6
+ * inline. An app that wants to show it runs it in a frame that has no network,
7
+ * no storage and no way to reach the page around it, and hands it one thing:
8
+ * a message port to a {@link createScreenBridge bridge}. Through that port the
9
+ * screen reads and writes the records of the collections its app named, in
10
+ * one space, as whoever is looking — so every rule still holds, and a screen
11
+ * can do nothing its viewer couldn't.
12
+ *
13
+ * Inside the frame, the screen finds `window.weave` (see {@link SCREEN_GUIDE}).
14
+ * The port is handed over once, when the document is written; a frame that
15
+ * navigates somewhere else leaves it behind, so a page it navigates to hears
16
+ * nothing.
17
+ */
18
+ import type { P2PNode } from '../node/types.js';
19
+ import type { Link } from '../types.js';
20
+ /** What a screen sees of a record */
21
+ export interface ScreenRecord {
22
+ readonly key: string;
23
+ /** The same as `key` — what a screen written by guessing tends to reach for */
24
+ readonly id: string;
25
+ readonly collection: string;
26
+ readonly body: unknown;
27
+ /** The same as `body` */
28
+ readonly data: unknown;
29
+ readonly links: ReadonlyArray<Link>;
30
+ /** The account that created it */
31
+ readonly createdBy: string | null;
32
+ readonly createdAt: string;
33
+ readonly updatedAt: string;
34
+ /** Whether the person looking created it */
35
+ readonly mine: boolean;
36
+ /** Written by an agent for `createdBy`'s account */
37
+ readonly viaAgent: boolean;
38
+ }
39
+ /** Who is looking */
40
+ export interface ScreenViewer {
41
+ readonly did: string;
42
+ readonly name: string;
43
+ }
44
+ /** How to write a screen — for an agent, in `apps_screen_guide`, and for people */
45
+ export declare const SCREEN_GUIDE = "A screen is one HTML document (scripts and styles inline, at most 48 KB) put on a collection definition as \"screen\".\nWhen the app is added, apps in the space can show it instead of plain lists. It runs sealed: no network (no fetch, no\nimages from URLs, no fonts from URLs), no storage, no popups, no forms that submit. Keep state in records, never in the page.\n\nInside it, window.weave is:\n weave.me { did, name } \u2014 who is looking\n weave.collections the collection names this screen may use (its app's)\n await weave.list(collection, { where? }) records, oldest first: { key, collection, body, links, createdBy, createdAt, updatedAt, mine, viaAgent }\n where: { \"link:<rel>\": \"<record key>\" } for records linking there, { field: value } for a field's value\n await weave.get(key) one record, or null\n await weave.put(collection, body, { links?, key? }) \u2192 the record written, as the person looking\n await weave.update(key, body, { links? }) \u2192 the next version\n await weave.remove(key)\n await weave.people() [{ did, name }] \u2014 everyone in the space who said their name\n weave.onChange(callback) called whenever records in the space change, here or on another device; returns a function to stop\n\nCalls may also take one object instead: weave.list({ collection, where }), weave.put({ collection, body, links, key }),\nweave.update({ key, body, links }), weave.remove({ key }). Records answer to id / data as well as key / body.\nEvery write is checked against the collection's rules, as the person looking: a refused write rejects with the reason.\nAn error the screen doesn't catch is shown to the person, so they can tell you about it.\nLinks look like { rel: \"game\", to: \"<record key>\" }, with the roles the definition declares.\nDraw everything from weave.list(...) and redraw on weave.onChange \u2014 other people's moves arrive that way.\nTwo people can write at once: design collections so that clashes resolve by the rules (onePer, creator-only edits), not by the screen.\nUse plain DOM; no libraries can be loaded. Prefer system fonts and simple, readable styling that works in light and dark.";
46
+ /** The script put in front of a screen's document: `window.weave`, over the port the host page kept for it */
47
+ export declare const SCREEN_CLIENT = "(() => {\n const given = window.__weave;\n delete window.__weave;\n if (!given) return;\n const port = given.port;\n const pending = new Map();\n const listeners = new Set();\n let next = 0;\n const call = (method, ...args) =>\n new Promise((resolve, reject) => {\n const id = ++next;\n pending.set(id, { resolve, reject });\n port.postMessage({ id, method, args });\n });\n port.onmessage = (event) => {\n const message = event.data || {};\n if (message.change) {\n for (const listener of listeners) {\n try { listener(); } catch (error) { console.error(error); }\n }\n return;\n }\n const waiting = pending.get(message.id);\n if (!waiting) return;\n pending.delete(message.id);\n if (message.ok) waiting.resolve(message.value);\n else waiting.reject(new Error(message.error));\n };\n // Shown to the person, so a screen that fails says why instead of sitting blank.\n const report = (message) => {\n let bar = document.getElementById('__weave-error');\n if (!bar) {\n bar = document.createElement('div');\n bar.id = '__weave-error';\n bar.setAttribute('role', 'alert');\n bar.style.cssText = 'position:fixed;left:8px;right:8px;bottom:8px;z-index:2147483647;padding:8px 10px;border-radius:8px;background:#fff0f0;color:#b00020;border:1px solid #f3c2c2;font:12px/1.4 system-ui,sans-serif;white-space:pre-wrap';\n (document.body || document.documentElement).appendChild(bar);\n }\n bar.textContent = 'This screen hit an error: ' + message;\n };\n addEventListener('error', (event) => report(event.message || String(event.error)));\n addEventListener('unhandledrejection', (event) => report(event.reason && event.reason.message ? event.reason.message : String(event.reason)));\n // weave.me is who is looking; calling it \u2014 weave.me() \u2014 gives the same.\n // (defineProperty, because a function's own \"name\" can't be assigned)\n const me = () => ({ did: given.me.did, name: given.me.name });\n Object.defineProperty(me, 'did', { value: given.me.did, enumerable: true });\n Object.defineProperty(me, 'name', { value: given.me.name, enumerable: true });\n window.weave = Object.freeze({\n me: Object.freeze(me),\n collections: Object.freeze(given.collections.slice()),\n list: (collection) => call('list', collection),\n get: (key) => call('get', key),\n put: (collection, body, options) => call('put', collection, body, options || {}),\n update: (key, body, options) => call('update', key, body, options || {}),\n remove: (key) => call('remove', key),\n people: () => call('people'),\n onChange: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n });\n})();";
48
+ /** The document a host page writes into its frame: the client, then the screen */
49
+ export declare function screenDocument(screen: string): string;
50
+ export interface ScreenBridge {
51
+ /** Tell the screen that records changed */
52
+ changed(): void;
53
+ /** Stop answering, and stop listening to the node */
54
+ close(): void;
55
+ }
56
+ /**
57
+ * Answers a screen's calls over `port`, for one space and these collections,
58
+ * as the node's account. Every write goes through the node like any other,
59
+ * so the collection's rules decide.
60
+ */
61
+ export declare function createScreenBridge(params: {
62
+ readonly node: P2PNode;
63
+ readonly spaceId: string;
64
+ readonly collections: ReadonlyArray<string>;
65
+ readonly port: MessagePort;
66
+ }): ScreenBridge;
67
+ //# sourceMappingURL=screens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screens.d.ts","sourceRoot":"","sources":["../../src/schemas/screens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAc,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,qCAAqC;AACrC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,kCAAkC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAqB;AACrB,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,mFAAmF;AACnF,eAAO,MAAM,YAAY,yuEAuBiG,CAAC;AAE3H,8GAA8G;AAC9G,eAAO,MAAM,aAAa,wtFA6DpB,CAAC;AAEP,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGrD;AAgCD,MAAM,WAAW,YAAY;IAC3B,2CAA2C;IAC3C,OAAO,IAAI,IAAI,CAAC;IAChB,qDAAqD;IACrD,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;CAC5B,GAAG,YAAY,CAiHf"}
@@ -0,0 +1,242 @@
1
+ /** How to write a screen — for an agent, in `apps_screen_guide`, and for people */
2
+ export const SCREEN_GUIDE = `A screen is one HTML document (scripts and styles inline, at most 48 KB) put on a collection definition as "screen".
3
+ When the app is added, apps in the space can show it instead of plain lists. It runs sealed: no network (no fetch, no
4
+ images from URLs, no fonts from URLs), no storage, no popups, no forms that submit. Keep state in records, never in the page.
5
+
6
+ Inside it, window.weave is:
7
+ weave.me { did, name } — who is looking
8
+ weave.collections the collection names this screen may use (its app's)
9
+ await weave.list(collection, { where? }) records, oldest first: { key, collection, body, links, createdBy, createdAt, updatedAt, mine, viaAgent }
10
+ where: { "link:<rel>": "<record key>" } for records linking there, { field: value } for a field's value
11
+ await weave.get(key) one record, or null
12
+ await weave.put(collection, body, { links?, key? }) → the record written, as the person looking
13
+ await weave.update(key, body, { links? }) → the next version
14
+ await weave.remove(key)
15
+ await weave.people() [{ did, name }] — everyone in the space who said their name
16
+ weave.onChange(callback) called whenever records in the space change, here or on another device; returns a function to stop
17
+
18
+ Calls may also take one object instead: weave.list({ collection, where }), weave.put({ collection, body, links, key }),
19
+ weave.update({ key, body, links }), weave.remove({ key }). Records answer to id / data as well as key / body.
20
+ Every write is checked against the collection's rules, as the person looking: a refused write rejects with the reason.
21
+ An error the screen doesn't catch is shown to the person, so they can tell you about it.
22
+ Links look like { rel: "game", to: "<record key>" }, with the roles the definition declares.
23
+ Draw everything from weave.list(...) and redraw on weave.onChange — other people's moves arrive that way.
24
+ Two people can write at once: design collections so that clashes resolve by the rules (onePer, creator-only edits), not by the screen.
25
+ Use plain DOM; no libraries can be loaded. Prefer system fonts and simple, readable styling that works in light and dark.`;
26
+ /** The script put in front of a screen's document: `window.weave`, over the port the host page kept for it */
27
+ export const SCREEN_CLIENT = `(() => {
28
+ const given = window.__weave;
29
+ delete window.__weave;
30
+ if (!given) return;
31
+ const port = given.port;
32
+ const pending = new Map();
33
+ const listeners = new Set();
34
+ let next = 0;
35
+ const call = (method, ...args) =>
36
+ new Promise((resolve, reject) => {
37
+ const id = ++next;
38
+ pending.set(id, { resolve, reject });
39
+ port.postMessage({ id, method, args });
40
+ });
41
+ port.onmessage = (event) => {
42
+ const message = event.data || {};
43
+ if (message.change) {
44
+ for (const listener of listeners) {
45
+ try { listener(); } catch (error) { console.error(error); }
46
+ }
47
+ return;
48
+ }
49
+ const waiting = pending.get(message.id);
50
+ if (!waiting) return;
51
+ pending.delete(message.id);
52
+ if (message.ok) waiting.resolve(message.value);
53
+ else waiting.reject(new Error(message.error));
54
+ };
55
+ // Shown to the person, so a screen that fails says why instead of sitting blank.
56
+ const report = (message) => {
57
+ let bar = document.getElementById('__weave-error');
58
+ if (!bar) {
59
+ bar = document.createElement('div');
60
+ bar.id = '__weave-error';
61
+ bar.setAttribute('role', 'alert');
62
+ bar.style.cssText = 'position:fixed;left:8px;right:8px;bottom:8px;z-index:2147483647;padding:8px 10px;border-radius:8px;background:#fff0f0;color:#b00020;border:1px solid #f3c2c2;font:12px/1.4 system-ui,sans-serif;white-space:pre-wrap';
63
+ (document.body || document.documentElement).appendChild(bar);
64
+ }
65
+ bar.textContent = 'This screen hit an error: ' + message;
66
+ };
67
+ addEventListener('error', (event) => report(event.message || String(event.error)));
68
+ addEventListener('unhandledrejection', (event) => report(event.reason && event.reason.message ? event.reason.message : String(event.reason)));
69
+ // weave.me is who is looking; calling it — weave.me() — gives the same.
70
+ // (defineProperty, because a function's own "name" can't be assigned)
71
+ const me = () => ({ did: given.me.did, name: given.me.name });
72
+ Object.defineProperty(me, 'did', { value: given.me.did, enumerable: true });
73
+ Object.defineProperty(me, 'name', { value: given.me.name, enumerable: true });
74
+ window.weave = Object.freeze({
75
+ me: Object.freeze(me),
76
+ collections: Object.freeze(given.collections.slice()),
77
+ list: (collection) => call('list', collection),
78
+ get: (key) => call('get', key),
79
+ put: (collection, body, options) => call('put', collection, body, options || {}),
80
+ update: (key, body, options) => call('update', key, body, options || {}),
81
+ remove: (key) => call('remove', key),
82
+ people: () => call('people'),
83
+ onChange: (listener) => {
84
+ listeners.add(listener);
85
+ return () => listeners.delete(listener);
86
+ },
87
+ });
88
+ })();`;
89
+ /** The document a host page writes into its frame: the client, then the screen */
90
+ export function screenDocument(screen) {
91
+ // Before anything the screen says, so `weave` is there when its scripts run.
92
+ return `<script>${SCREEN_CLIENT}</script>\n${screen}`;
93
+ }
94
+ const toScreen = (record, viewer) => ({
95
+ key: record.key,
96
+ id: record.key,
97
+ collection: record.collection,
98
+ body: record.body,
99
+ data: record.body,
100
+ links: record.links,
101
+ createdBy: record.createdBy,
102
+ createdAt: record.createdAt,
103
+ updatedAt: record.updatedAt,
104
+ mine: record.createdBy === viewer,
105
+ viaAgent: record.viaAgent === true,
106
+ });
107
+ /** Only plain data crosses into a screen, and only this much of it */
108
+ function plain(value, what) {
109
+ const text = JSON.stringify(value ?? null);
110
+ if (text.length > 256 * 1024)
111
+ throw new Error(`${what} is too large`);
112
+ return JSON.parse(text);
113
+ }
114
+ function linksOf(options) {
115
+ const links = options?.links;
116
+ if (links === undefined)
117
+ return {};
118
+ if (!Array.isArray(links) || !links.every((l) => typeof l?.rel === 'string' && typeof l?.to === 'string')) {
119
+ throw new Error('links must be a list of { rel, to }');
120
+ }
121
+ return { links: links.map((l) => ({ rel: l.rel, to: l.to })) };
122
+ }
123
+ /**
124
+ * Answers a screen's calls over `port`, for one space and these collections,
125
+ * as the node's account. Every write goes through the node like any other,
126
+ * so the collection's rules decide.
127
+ */
128
+ export function createScreenBridge(params) {
129
+ const { node, spaceId, port } = params;
130
+ const allowed = new Set(params.collections);
131
+ let closed = false;
132
+ const names = [...allowed].map((name) => `"${name}"`).join(', ');
133
+ const collectionOf = (name) => {
134
+ if (typeof name !== 'string')
135
+ throw new Error(`Name the collection as text, like weave.list("${[...allowed][0] ?? 'app.example.thing'}"). This screen may use ${names}.`);
136
+ if (!allowed.has(name))
137
+ throw new Error(`This screen can't use "${name}". It may use ${names}.`);
138
+ return name;
139
+ };
140
+ const ownRecord = async (key) => {
141
+ if (typeof key !== 'string')
142
+ throw new Error('Name the record by its key, as text: weave.update(record.key, body)');
143
+ const record = await node.records.get(spaceId, key);
144
+ if (!record || !allowed.has(record.collection))
145
+ throw new Error(`No record ${key} this screen can use`);
146
+ return record;
147
+ };
148
+ /** `f(a, b)` or `f({ a, b })`: a screen written by guessing may use either */
149
+ const spread = (args, keys) => {
150
+ const first = args[0];
151
+ if (first && typeof first === 'object' && !Array.isArray(first) && keys.some((k) => k in first)) {
152
+ return Object.fromEntries(keys.map((k) => [k, first[k]]));
153
+ }
154
+ return Object.fromEntries(keys.map((k, i) => [k, args[i]]));
155
+ };
156
+ /** `{ "link:game": key }` for records linking there, `{ field: value }` for a field's value */
157
+ const matches = (record, where) => {
158
+ if (!where || typeof where !== 'object')
159
+ return true;
160
+ return Object.entries(where).every(([field, value]) => field.startsWith('link:')
161
+ ? record.links.some((link) => link.rel === field.slice(5) && link.to === value)
162
+ : record.body?.[field] === value);
163
+ };
164
+ const methods = {
165
+ list: async (...args) => {
166
+ const first = args[0];
167
+ const { collection, where } = first && typeof first === 'object' ? { collection: first.collection, where: first.where } : { collection: first, where: args[1]?.where };
168
+ const records = await node.records.list(spaceId, { collection: collectionOf(collection) });
169
+ return records.filter((record) => matches(record, where)).map((record) => toScreen(record, node.did));
170
+ },
171
+ get: async (...args) => {
172
+ const { key } = spread(args, ['key']);
173
+ try {
174
+ return toScreen(await ownRecord(key), node.did);
175
+ }
176
+ catch {
177
+ return null;
178
+ }
179
+ },
180
+ put: async (...args) => {
181
+ const first = args[0];
182
+ const [collection, body, options] = first && typeof first === 'object' && 'collection' in first ? [first.collection, first.body, { links: first.links, key: first.key }] : args;
183
+ const key = options?.key;
184
+ if (key !== undefined && typeof key !== 'string')
185
+ throw new Error('key must be text');
186
+ const record = await node.records.put(spaceId, collectionOf(collection), plain(body, 'The record'), {
187
+ ...linksOf(options === null || typeof options !== 'object' || options.links === undefined ? {} : options),
188
+ ...(key !== undefined ? { key } : {}),
189
+ });
190
+ return toScreen(record, node.did);
191
+ },
192
+ update: async (...args) => {
193
+ const first = args[0];
194
+ const [key, body, options] = first && typeof first === 'object' && 'key' in first ? [first.key, first.body, { links: first.links }] : args;
195
+ const record = await ownRecord(key);
196
+ const links = options?.links === undefined ? {} : linksOf(options);
197
+ return toScreen(await node.records.update(spaceId, record.key, plain(body, 'The record'), links), node.did);
198
+ },
199
+ remove: async (...args) => {
200
+ const { key } = spread(args, ['key']);
201
+ const record = await ownRecord(key);
202
+ await node.records.delete(spaceId, record.key);
203
+ return null;
204
+ },
205
+ people: async () => (await node.spaces.profiles(spaceId)).map((profile) => ({ did: profile.did, name: profile.name })),
206
+ };
207
+ port.onmessage = (event) => {
208
+ if (closed)
209
+ return;
210
+ const message = event.data;
211
+ if (typeof message?.id !== 'number' || typeof message.method !== 'string' || !Object.hasOwn(methods, message.method))
212
+ return;
213
+ const args = Array.isArray(message.args) ? message.args : [];
214
+ methods[message.method](...args).then((value) => !closed && port.postMessage({ id: message.id, ok: true, value: plain(value, 'The answer') }), (error) => !closed && port.postMessage({ id: message.id, ok: false, error: error instanceof Error ? error.message : String(error) }));
215
+ };
216
+ // Changes arrive in bursts while syncing; one nudge per burst is enough.
217
+ let soon = null;
218
+ const changed = () => {
219
+ if (closed || soon)
220
+ return;
221
+ soon = setTimeout(() => {
222
+ soon = null;
223
+ if (!closed)
224
+ port.postMessage({ change: true });
225
+ }, 50);
226
+ };
227
+ const stop = node.subscribe((event) => {
228
+ if (event.type === 'records' && event.space === spaceId)
229
+ changed();
230
+ });
231
+ return {
232
+ changed,
233
+ close() {
234
+ closed = true;
235
+ if (soon)
236
+ clearTimeout(soon);
237
+ stop();
238
+ port.close();
239
+ },
240
+ };
241
+ }
242
+ //# sourceMappingURL=screens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screens.js","sourceRoot":"","sources":["../../src/schemas/screens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import type { PeerTransport } from '../network/transport.js';
2
+ import type { Grant } from './connect.js';
3
+ /** Who is asking, as the terminal said */
4
+ export interface AgentAsking {
5
+ /** The agent's key — the note is made out to it */
6
+ readonly did: string;
7
+ /** What the terminal calls itself, e.g. "Agent on leifs-macbook". Shown, not trusted. */
8
+ readonly name: string;
9
+ }
10
+ /** A new code: `wv_` and 128 random bits */
11
+ export declare function newAgentCode(): string;
12
+ /**
13
+ * The secret in a code, for anything a person might paste — surrounding
14
+ * spaces, quotes, the whole command.
15
+ * @throws When there is no code in it
16
+ */
17
+ export declare function readAgentCode(input: string): Uint8Array;
18
+ interface LinkNetwork {
19
+ /** Relays to meet on. The app's and the terminal's must share one. */
20
+ readonly relays: ReadonlyArray<string>;
21
+ /** A transport instead of WebRTC — for tests */
22
+ readonly transport?: (did: string) => PeerTransport;
23
+ }
24
+ export type AgentLinkStage = {
25
+ readonly kind: 'waiting';
26
+ }
27
+ /** The terminal is there. Call `allow` from a click (it opens the home), or `deny`. */
28
+ | {
29
+ readonly kind: 'asking';
30
+ readonly agent: AgentAsking;
31
+ allow(grant: Grant): Promise<void>;
32
+ deny(reason?: string): void;
33
+ } | {
34
+ readonly kind: 'connected';
35
+ readonly agent: AgentAsking;
36
+ } | {
37
+ readonly kind: 'failed';
38
+ readonly reason: string;
39
+ };
40
+ export interface AgentLinkOffer {
41
+ /** What the person pastes: `wv_…` */
42
+ readonly code: string;
43
+ /** Stops listening. The code stops working. */
44
+ stop(): void;
45
+ }
46
+ /**
47
+ * Starts offering a connection to an agent on a computer. Keep it running
48
+ * while the code is on screen; the first terminal that shows up with the code
49
+ * is the one asked about, and nobody after it.
50
+ */
51
+ export declare function offerAgentLink(network: LinkNetwork, onStage: (stage: AgentLinkStage) => void): Promise<AgentLinkOffer>;
52
+ /**
53
+ * Checks a grant the way the terminal must: a valid agent's note, from the
54
+ * account it names, made out to this key.
55
+ * @throws When it does not check out
56
+ */
57
+ export declare function checkAgentGrant(grant: Grant, audience: string): Promise<void>;
58
+ /**
59
+ * Connects this terminal as an agent, with the code from the app.
60
+ *
61
+ * @param params.did This agent's key — the note will be made out to it
62
+ * @param params.name What the person sees, e.g. "Agent on leifs-macbook"
63
+ * @param params.onWaiting Told once the app has heard, and the person is deciding
64
+ * @returns The grant, checked
65
+ * @throws When the code is wrong or stale, the person says no, or nothing answers in time
66
+ */
67
+ export declare function acceptAgentLink(params: {
68
+ readonly code: string;
69
+ readonly did: string;
70
+ readonly name: string;
71
+ readonly network: LinkNetwork;
72
+ readonly onWaiting?: () => void;
73
+ /** How long to wait for the app to answer at all. Default 60 s. */
74
+ readonly findTimeoutMs?: number;
75
+ /** How long the person has to decide. Default 10 minutes. */
76
+ readonly decideTimeoutMs?: number;
77
+ }): Promise<Grant>;
78
+ export {};
79
+ //# sourceMappingURL=agent-link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-link.d.ts","sourceRoot":"","sources":["../../src/session/agent-link.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAS7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAgB1C,0CAA0C;AAC1C,MAAM,WAAW,WAAW;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,yFAAyF;IACzF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAOD,4CAA4C;AAC5C,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAOvD;AA+BD,UAAU,WAAW;IACnB,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,gDAAgD;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,aAAa,CAAC;CACrD;AASD,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE;AAC9B,uFAAuF;GACrF;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAC3D;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,qCAAqC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,IAAI,IAAI,IAAI,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,CA4D5H;AAID;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUnF;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,mEAAmE;IACnE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,6DAA6D;IAC7D,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC,GAAG,OAAO,CAAC,KAAK,CAAC,CA6DjB"}