@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 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/records/rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @module records/version
3
+ * What makes one version of a record newer than another — without a clock.
4
+ *
5
+ * A record keeps one `key` for life. Every change is a new signed version
6
+ * carrying `seq` (one more than the version it replaces), `prev` (that
7
+ * version's hash) and `genesis` (the hash of the record's first version).
8
+ *
9
+ * **The ordering rule: higher `seq` wins; on a tie, the lower id wins.** Every
10
+ * node applies it to the same data and reaches the same answer, and `createdAt`
11
+ * — which is whatever the writer typed — decides nothing. So a replayed old
12
+ * version loses to the current one, a delete (a version with a higher `seq`)
13
+ * stays deleted, and two devices that edited the same record while apart agree
14
+ * on the same winner.
15
+ *
16
+ * The rule is load-bearing forever: nodes running two versions of it would
17
+ * disagree about which version is current. It is pinned by tests.
18
+ */
19
+ import type { Expression } from '../types.js';
20
+ /** How many access changes a version may say it saw — normally one or two */
21
+ export declare const MAX_SEEN = 64;
22
+ /** Keys a caller may choose: `profile`, `collection:app.todo.item`, `space:b7…` */
23
+ export declare const RECORD_KEY_PATTERN: RegExp;
24
+ /** A fresh key: 128 random bits. Random rather than time-based, so it says nothing about when. */
25
+ export declare function newRecordKey(): string;
26
+ /** The parts of a version the ordering rule looks at */
27
+ export interface Versioned {
28
+ readonly id: string;
29
+ readonly seq: number;
30
+ }
31
+ /**
32
+ * Whether `a` supersedes `b`. Higher `seq` first, then the lower id.
33
+ * Never looks at a timestamp.
34
+ */
35
+ export declare function supersedes(a: Versioned, b: Versioned): boolean;
36
+ /** Sorts newest first by the ordering rule. */
37
+ export declare function byVersion(a: Versioned, b: Versioned): number;
38
+ /** The version fields for the next change to a record, given its current version. */
39
+ export declare function nextVersion(current: Pick<Expression, 'id' | 'key' | 'seq' | 'genesis'>): {
40
+ key: string;
41
+ seq: number;
42
+ prev: string;
43
+ genesis: string;
44
+ };
45
+ /**
46
+ * Why a version is malformed on its own, or null when it is not.
47
+ *
48
+ * Only what can be seen in this one version. Whether `prev` exists, whether
49
+ * `seq` is exactly one past it, whether the collection matches earlier versions
50
+ * — each depends on what else a node happens to hold, and a check that depends
51
+ * on that makes nodes disagree forever. Those are applied when reading.
52
+ */
53
+ export declare function checkVersionShape(expression: Partial<Expression>): string | null;
54
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/records/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,6EAA6E;AAC7E,eAAO,MAAM,QAAQ,KAAK,CAAC;AAE3B,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,QAA0B,CAAC;AAE1D,kGAAkG;AAClG,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wDAAwD;AACxD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,OAAO,CAE9D;AAED,+CAA+C;AAC/C,wBAAgB,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CAG5D;AAED,qFAAqF;AACrF,wBAAgB,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC,GAAG;IACxF,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAOA;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,IAAI,CAkBhF"}
@@ -0,0 +1,70 @@
1
+ import { base32Encode } from '../utils/hash.js';
2
+ import { checkLinks } from './links.js';
3
+ /** How many access changes a version may say it saw — normally one or two */
4
+ export const MAX_SEEN = 64;
5
+ /** Keys a caller may choose: `profile`, `collection:app.todo.item`, `space:b7…` */
6
+ export const RECORD_KEY_PATTERN = /^[a-z0-9:._-]{1,128}$/;
7
+ /** A fresh key: 128 random bits. Random rather than time-based, so it says nothing about when. */
8
+ export function newRecordKey() {
9
+ return base32Encode(globalThis.crypto.getRandomValues(new Uint8Array(16)));
10
+ }
11
+ /**
12
+ * Whether `a` supersedes `b`. Higher `seq` first, then the lower id.
13
+ * Never looks at a timestamp.
14
+ */
15
+ export function supersedes(a, b) {
16
+ return a.seq > b.seq || (a.seq === b.seq && a.id < b.id);
17
+ }
18
+ /** Sorts newest first by the ordering rule. */
19
+ export function byVersion(a, b) {
20
+ if (a.id === b.id)
21
+ return 0;
22
+ return supersedes(a, b) ? -1 : 1;
23
+ }
24
+ /** The version fields for the next change to a record, given its current version. */
25
+ export function nextVersion(current) {
26
+ return {
27
+ key: current.key,
28
+ seq: current.seq + 1,
29
+ prev: current.id,
30
+ genesis: current.seq === 0 ? current.id : (current.genesis ?? current.id),
31
+ };
32
+ }
33
+ /**
34
+ * Why a version is malformed on its own, or null when it is not.
35
+ *
36
+ * Only what can be seen in this one version. Whether `prev` exists, whether
37
+ * `seq` is exactly one past it, whether the collection matches earlier versions
38
+ * — each depends on what else a node happens to hold, and a check that depends
39
+ * on that makes nodes disagree forever. Those are applied when reading.
40
+ */
41
+ export function checkVersionShape(expression) {
42
+ const { key, seq, prev, genesis, deleted, retain, body, seen } = expression;
43
+ if (typeof key !== 'string' || !RECORD_KEY_PATTERN.test(key))
44
+ return 'Record key is missing or malformed';
45
+ if (!Number.isSafeInteger(seq) || seq < 0)
46
+ return 'Version number must be a whole number from 0';
47
+ if (seq === 0) {
48
+ if (prev !== undefined || genesis !== undefined)
49
+ return 'A first version cannot name a previous one';
50
+ }
51
+ else {
52
+ if (typeof prev !== 'string' || typeof genesis !== 'string')
53
+ return 'A later version must name its previous and first versions';
54
+ if (prev === expression.id || genesis === expression.id)
55
+ return 'A version cannot name itself';
56
+ }
57
+ if (seen !== undefined && (!Array.isArray(seen) || seen.length > MAX_SEEN || !seen.every((id) => typeof id === 'string' && id.length > 0 && id.length <= 128))) {
58
+ return `seen must be a list of at most ${MAX_SEEN} version ids`;
59
+ }
60
+ if (deleted !== undefined && deleted !== true)
61
+ return 'deleted must be true when present';
62
+ if (retain !== undefined && retain !== true)
63
+ return 'retain must be true when present';
64
+ if (deleted && body !== null)
65
+ return 'A delete carries no body';
66
+ if (expression.links !== undefined)
67
+ return checkLinks(expression.links);
68
+ return null;
69
+ }
70
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/records/version.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ import type { StandardJSONSchemaV1, StandardSchemaV1 } from '../types.js';
2
+ import type { LinkDeclaration } from '../records/links.js';
3
+ import type { DefineCollection } from '../node/types.js';
4
+ import { type CollectionRules } from '../records/rules.js';
5
+ export type JsonSchema = {
6
+ readonly [keyword: string]: unknown;
7
+ };
8
+ /**
9
+ * A collection definition, kept exactly as written: its validator's type
10
+ * comes along, so querying or writing with it is typed, and its rules stay
11
+ * the literals `define` expects.
12
+ *
13
+ * ```ts
14
+ * const polls = collection({ name: 'app.poll', schema: Poll, rules: { edit: 'creator' } });
15
+ * await node.collections.define(space.id, polls);
16
+ * const { records } = await node.records.query(space.id, { collection: polls }); // bodies are z.infer<typeof Poll>
17
+ * ```
18
+ */
19
+ export declare function collection<const C extends DefineCollection>(definition: C): C;
20
+ /**
21
+ * The JSON Schema to store for a definition's schema: plain JSON Schema as
22
+ * it is, or what a Standard JSON Schema validator (a Zod object, say) says it
23
+ * accepts. The result is checked like any other — a validator feature that
24
+ * has no stored equivalent, like a regex, is refused with the reason.
25
+ */
26
+ export declare function toJsonSchema(schema: JsonSchema | StandardJSONSchemaV1): JsonSchema;
27
+ /** A collection, as a space describes it to whoever opens it. */
28
+ export interface StoredCollection {
29
+ /** Reverse-DNS, like `app.todo.item`. `sys.*` is the protocol's own. */
30
+ readonly name: string;
31
+ readonly title?: string;
32
+ readonly description?: string;
33
+ /** JSON Schema for a record's body */
34
+ readonly schema: JsonSchema;
35
+ /** Bumped when the shape changes; records keep the version they were written under */
36
+ readonly version: number;
37
+ /**
38
+ * Whether edits to its records keep old versions. `latest` (the default)
39
+ * keeps current state only; `all` keeps every version, hash-linked, as a
40
+ * verifiable history. Read by writers, who mark each version accordingly.
41
+ */
42
+ readonly history?: 'latest' | 'all';
43
+ /**
44
+ * The link roles its records may carry, and what each may point at. An agent
45
+ * reading the catalogue learns from these how the space's things connect.
46
+ */
47
+ readonly links?: Readonly<Record<string, LinkDeclaration>>;
48
+ /**
49
+ * The permissions its rules may name, in its own words: `moderate`. A role
50
+ * holds one as `<collection>/<permission>` — `app.poll/moderate` — so two
51
+ * apps in one space never clash.
52
+ */
53
+ readonly permissions?: ReadonlyArray<string>;
54
+ /**
55
+ * Who may create, edit and delete its records, what must be unique, which
56
+ * fields are fixed. A version is judged by the definition in force as of
57
+ * the access changes it saw, on every peer.
58
+ */
59
+ readonly rules?: CollectionRules;
60
+ /**
61
+ * A screen for its records: one HTML document, scripts and styles inline,
62
+ * that an app may run in a sealed frame instead of drawing the records
63
+ * itself. It reaches the records only through what the app hands it, as
64
+ * whoever is looking, under these rules. Kept on the definition, so only
65
+ * someone allowed to define collections — never an agent — puts one in a
66
+ * space, and what they approved is exactly what runs.
67
+ */
68
+ readonly screen?: string;
69
+ }
70
+ /** The largest screen a definition may carry, in bytes of UTF-8 — it travels with every copy of the definition */
71
+ export declare const MAX_SCREEN_BYTES: number;
72
+ /** The reserved collection that collection definitions live in. */
73
+ export declare const CATALOG_COLLECTION = "sys.collection";
74
+ /**
75
+ * Why a schema may not be published, or null when it may.
76
+ * @param schema The candidate schema
77
+ * @param path Where in the schema, for the message
78
+ */
79
+ export declare function checkPublishableSchema(schema: unknown, path?: string): string | null;
80
+ /**
81
+ * Why a definition may not be published, or null when it may.
82
+ */
83
+ export declare function checkStoredCollection(definition: unknown): string | null;
84
+ export interface SchemaIssue {
85
+ /** Where in the value, as a JSON pointer: `/items/0/text` */
86
+ readonly path: string;
87
+ readonly message: string;
88
+ }
89
+ /**
90
+ * Validates a value against a stored schema.
91
+ * @returns The issues; empty when it conforms
92
+ */
93
+ export declare function validateJsonSchema(schema: JsonSchema, value: unknown): ReadonlyArray<SchemaIssue>;
94
+ /** Wraps a stored schema as a Standard Schema, so gates and engines take it unchanged. */
95
+ export declare function asStandardSchema(schema: JsonSchema): StandardSchemaV1;
96
+ //# sourceMappingURL=collection-def.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection-def.d.ts","sourceRoot":"","sources":["../../src/schema/collection-def.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAkC,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3F,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAEjE;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,gBAAgB,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,CAE7E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,oBAAoB,GAAG,UAAU,CAYlF;AAED,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,sCAAsC;IACtC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,sFAAsF;IACtF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAC3D;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;IACjC;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,kHAAkH;AAClH,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAE1C,mEAAmE;AACnE,eAAO,MAAM,kBAAkB,mBAAmB,CAAC;AAyBnD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,SAAW,GAAG,MAAM,GAAG,IAAI,CAwEtF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAwCxE;AAED,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,aAAa,CAAC,WAAW,CAAC,CAUjG;AAED,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,gBAAgB,CAarE"}
@@ -0,0 +1,272 @@
1
+ /**
2
+ * @module collection-def
3
+ * Collections a space describes itself, as data.
4
+ *
5
+ * `StandardSchemaV1` is a runtime object carrying a function — it cannot be
6
+ * written into a space and read by another app. So a space stores **JSON
7
+ * Schema**, and Standard Schema becomes the adapter that runs it locally.
8
+ * A validator that can describe itself as JSON Schema (Standard JSON Schema:
9
+ * Zod 4.2+, ArkType, Valibot) can be handed to a definition directly —
10
+ * {@link toJsonSchema} turns it into what gets stored.
11
+ *
12
+ * Only a small, fixed subset may be *published*, so every app in any language
13
+ * agrees on what a stored schema means:
14
+ *
15
+ * type · properties · required · items · enum · minimum · maximum ·
16
+ * minLength · maxLength · minItems · maxItems · additionalProperties
17
+ * (boolean) · title · description
18
+ *
19
+ * plus two ways to say what a value *means*, so any app can show it well:
20
+ *
21
+ * - `oneOf: [{ const, title }]` — fixed choices with labels, the standard
22
+ * JSON Schema way (`enum` has no labels).
23
+ * - `x-choicesFrom: { rel, field }` — the value picks from a list in another
24
+ * record: the one this record links to as `rel`, in its field `field`. A
25
+ * vote's `choice` picks from the `options` of the poll it is `about`. A
26
+ * number is a position in that list; anything else is the option itself.
27
+ * Not checked when validating — the other record may not be here yet.
28
+ *
29
+ * Anything else is refused at publish time — loudly, where the author can fix
30
+ * it. At validation time unknown keywords are ignored instead, so a space
31
+ * written by a newer app that allows more stays readable by an older one.
32
+ */
33
+ import { Validator } from '@cfworker/json-schema';
34
+ import { checkRules, PERMISSION_PATTERN } from '../records/rules.js';
35
+ /**
36
+ * A collection definition, kept exactly as written: its validator's type
37
+ * comes along, so querying or writing with it is typed, and its rules stay
38
+ * the literals `define` expects.
39
+ *
40
+ * ```ts
41
+ * const polls = collection({ name: 'app.poll', schema: Poll, rules: { edit: 'creator' } });
42
+ * await node.collections.define(space.id, polls);
43
+ * const { records } = await node.records.query(space.id, { collection: polls }); // bodies are z.infer<typeof Poll>
44
+ * ```
45
+ */
46
+ export function collection(definition) {
47
+ return definition;
48
+ }
49
+ /**
50
+ * The JSON Schema to store for a definition's schema: plain JSON Schema as
51
+ * it is, or what a Standard JSON Schema validator (a Zod object, say) says it
52
+ * accepts. The result is checked like any other — a validator feature that
53
+ * has no stored equivalent, like a regex, is refused with the reason.
54
+ */
55
+ export function toJsonSchema(schema) {
56
+ const standard = schema['~standard'];
57
+ if (!standard)
58
+ return schema;
59
+ if (typeof standard.jsonSchema?.input !== 'function') {
60
+ throw new Error(`This ${standard.vendor ?? ''} schema can't describe itself as JSON Schema, which is what a space stores. ` +
61
+ 'Use Zod 4.2+, ArkType 2.1.28+, Valibot with toStandardJsonSchema, or plain JSON Schema.');
62
+ }
63
+ // What was accepted is what gets stored; the dialect marker adds nothing.
64
+ const { $schema: _dialect, ...json } = standard.jsonSchema.input({ target: 'draft-2020-12' });
65
+ return json;
66
+ }
67
+ /** The largest screen a definition may carry, in bytes of UTF-8 — it travels with every copy of the definition */
68
+ export const MAX_SCREEN_BYTES = 48 * 1024;
69
+ /** The reserved collection that collection definitions live in. */
70
+ export const CATALOG_COLLECTION = 'sys.collection';
71
+ const KEYWORDS = new Set([
72
+ 'type',
73
+ 'properties',
74
+ 'required',
75
+ 'items',
76
+ 'enum',
77
+ 'minimum',
78
+ 'maximum',
79
+ 'minLength',
80
+ 'maxLength',
81
+ 'minItems',
82
+ 'maxItems',
83
+ 'additionalProperties',
84
+ 'title',
85
+ 'description',
86
+ 'oneOf',
87
+ 'const',
88
+ 'x-choicesFrom',
89
+ ]);
90
+ const LINK_REL = /^[a-z][a-zA-Z0-9]{0,63}$/;
91
+ const TYPES = new Set(['object', 'array', 'string', 'number', 'integer', 'boolean', 'null']);
92
+ const NAME = /^[a-z][a-z0-9-]*(\.[a-z][a-z0-9-]*)+$/;
93
+ /**
94
+ * Why a schema may not be published, or null when it may.
95
+ * @param schema The candidate schema
96
+ * @param path Where in the schema, for the message
97
+ */
98
+ export function checkPublishableSchema(schema, path = 'schema') {
99
+ if (typeof schema !== 'object' || schema === null || Array.isArray(schema))
100
+ return `${path} must be an object`;
101
+ for (const [keyword, value] of Object.entries(schema)) {
102
+ const at = `${path}.${keyword}`;
103
+ if (!KEYWORDS.has(keyword)) {
104
+ return `${at} is not supported. Stored schemas may use: ${[...KEYWORDS].join(', ')}`;
105
+ }
106
+ switch (keyword) {
107
+ case 'type': {
108
+ const types = Array.isArray(value) ? value : [value];
109
+ if (types.length === 0 || !types.every((t) => typeof t === 'string' && TYPES.has(t))) {
110
+ return `${at} must be one of ${[...TYPES].join(', ')}`;
111
+ }
112
+ break;
113
+ }
114
+ case 'properties': {
115
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
116
+ return `${at} must be an object`;
117
+ for (const [property, sub] of Object.entries(value)) {
118
+ const problem = checkPublishableSchema(sub, `${at}.${property}`);
119
+ if (problem)
120
+ return problem;
121
+ }
122
+ break;
123
+ }
124
+ case 'items': {
125
+ const problem = checkPublishableSchema(value, at);
126
+ if (problem)
127
+ return problem;
128
+ break;
129
+ }
130
+ case 'required':
131
+ if (!Array.isArray(value) || !value.every((v) => typeof v === 'string'))
132
+ return `${at} must be a list of property names`;
133
+ break;
134
+ case 'enum':
135
+ if (!Array.isArray(value) || value.length === 0)
136
+ return `${at} must be a non-empty list`;
137
+ break;
138
+ case 'minimum':
139
+ case 'maximum':
140
+ case 'minLength':
141
+ case 'maxLength':
142
+ case 'minItems':
143
+ case 'maxItems':
144
+ if (typeof value !== 'number' || !Number.isFinite(value))
145
+ return `${at} must be a number`;
146
+ break;
147
+ case 'additionalProperties':
148
+ if (typeof value !== 'boolean')
149
+ return `${at} must be true or false`;
150
+ break;
151
+ case 'title':
152
+ case 'description':
153
+ if (typeof value !== 'string')
154
+ return `${at} must be text`;
155
+ break;
156
+ case 'oneOf': {
157
+ // Only labelled choices: [{ const, title? }]. Not general composition.
158
+ if (!Array.isArray(value) || value.length === 0)
159
+ return `${at} must be a non-empty list of { const, title }`;
160
+ for (const [i, choice] of value.entries()) {
161
+ if (typeof choice !== 'object' || choice === null || !('const' in choice))
162
+ return `${at}[${i}] must be { const, title }`;
163
+ const extra = Object.keys(choice).find((k) => k !== 'const' && k !== 'title' && k !== 'description');
164
+ if (extra)
165
+ return `${at}[${i}].${extra}: oneOf is only for labelled choices — { const, title, description }`;
166
+ if ('title' in choice && typeof choice.title !== 'string')
167
+ return `${at}[${i}].title must be text`;
168
+ }
169
+ break;
170
+ }
171
+ case 'const':
172
+ break;
173
+ case 'x-choicesFrom': {
174
+ const from = value;
175
+ if (typeof from !== 'object' || from === null || typeof from.rel !== 'string' || !LINK_REL.test(from.rel) || typeof from.field !== 'string' || !from.field) {
176
+ return `${at} must be { "rel": "<link role>", "field": "<list field in the linked record>" }`;
177
+ }
178
+ break;
179
+ }
180
+ }
181
+ }
182
+ return null;
183
+ }
184
+ /**
185
+ * Why a definition may not be published, or null when it may.
186
+ */
187
+ export function checkStoredCollection(definition) {
188
+ const d = definition;
189
+ if (typeof d !== 'object' || d === null)
190
+ return 'A collection definition must be an object';
191
+ if (typeof d.name !== 'string' || !NAME.test(d.name)) {
192
+ return 'name must be reverse-DNS, lower case, with at least one dot — e.g. "app.todo.item"';
193
+ }
194
+ if (d.name.startsWith('sys.'))
195
+ return '"sys.*" collections belong to the protocol';
196
+ if (!Number.isInteger(d.version) || d.version < 1)
197
+ return 'version must be a whole number from 1';
198
+ if (d.title !== undefined && typeof d.title !== 'string')
199
+ return 'title must be text';
200
+ if (d.description !== undefined && typeof d.description !== 'string')
201
+ return 'description must be text';
202
+ if (d.history !== undefined && d.history !== 'latest' && d.history !== 'all')
203
+ return 'history must be "latest" or "all"';
204
+ if (d.links !== undefined) {
205
+ if (typeof d.links !== 'object' || d.links === null || Array.isArray(d.links))
206
+ return 'links must be an object of roles';
207
+ for (const [rel, declaration] of Object.entries(d.links)) {
208
+ if (!/^[a-z][a-zA-Z0-9]{0,63}$/.test(rel))
209
+ return `Link role "${rel}" must be lower camel case, like "about"`;
210
+ const decl = declaration;
211
+ if (typeof decl !== 'object' || decl === null)
212
+ return `links.${rel} must be an object`;
213
+ const to = decl.to;
214
+ if (to !== '*' && !(Array.isArray(to) && to.length > 0 && to.every((c) => typeof c === 'string'))) {
215
+ return `links.${rel}.to must be "*" or a list of collection names`;
216
+ }
217
+ if (decl.cardinality !== undefined && decl.cardinality !== 'one' && decl.cardinality !== 'many') {
218
+ return `links.${rel}.cardinality must be "one" or "many"`;
219
+ }
220
+ if (decl.description !== undefined && typeof decl.description !== 'string')
221
+ return `links.${rel}.description must be text`;
222
+ }
223
+ }
224
+ if (d.permissions !== undefined) {
225
+ if (!Array.isArray(d.permissions) || !d.permissions.every((p) => typeof p === 'string' && PERMISSION_PATTERN.test(p))) {
226
+ return 'permissions must be a list of names in lower camel case, like "moderate"';
227
+ }
228
+ }
229
+ const rules = checkRules(d.rules, 'rules', d.permissions ?? []);
230
+ if (rules)
231
+ return rules;
232
+ if (d.screen !== undefined) {
233
+ if (typeof d.screen !== 'string' || !d.screen.trim())
234
+ return 'screen must be an HTML document, as text';
235
+ const bytes = new TextEncoder().encode(d.screen).length;
236
+ if (bytes > MAX_SCREEN_BYTES)
237
+ return `screen is ${Math.ceil(bytes / 1024)} KB; at most ${MAX_SCREEN_BYTES / 1024} KB`;
238
+ }
239
+ return checkPublishableSchema(d.schema);
240
+ }
241
+ /**
242
+ * Validates a value against a stored schema.
243
+ * @returns The issues; empty when it conforms
244
+ */
245
+ export function validateJsonSchema(schema, value) {
246
+ const result = new Validator(schema, '2020-12', false).validate(value);
247
+ if (result.valid)
248
+ return [];
249
+ // The validator reports the wrapping keywords too ("properties" failed
250
+ // because "text" did); the leaves are the useful part.
251
+ const leaves = result.errors.filter((error) => error.keyword !== 'properties' && error.keyword !== 'items');
252
+ return (leaves.length ? leaves : result.errors).map((error) => ({
253
+ path: error.instanceLocation.replace(/^#/, '') || '/',
254
+ message: error.error,
255
+ }));
256
+ }
257
+ /** Wraps a stored schema as a Standard Schema, so gates and engines take it unchanged. */
258
+ export function asStandardSchema(schema) {
259
+ return {
260
+ '~standard': {
261
+ version: 1,
262
+ vendor: 'weave/json-schema',
263
+ validate(value) {
264
+ const issues = validateJsonSchema(schema, value);
265
+ return issues.length
266
+ ? { issues: issues.map((issue) => ({ message: issue.path === '/' ? issue.message : `${issue.path}: ${issue.message}` })) }
267
+ : { value };
268
+ },
269
+ },
270
+ };
271
+ }
272
+ //# sourceMappingURL=collection-def.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection-def.js","sourceRoot":"","sources":["../../src/schema/collection-def.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import type { Expression, Link, UnsignedExpression } from '../types.js';
2
+ /**
3
+ * Parameters for creating a new expression.
4
+ */
5
+ export interface CreateExpressionParams<T> {
6
+ readonly author: string;
7
+ readonly collection: string;
8
+ readonly body: T;
9
+ readonly createdAt?: string;
10
+ /** Space this expression belongs to */
11
+ readonly space?: string;
12
+ /** Encoded UCAN authorizing this author, when signing with a delegated key */
13
+ readonly proof?: string;
14
+ /** The record this is a version of. Default: a new record, with a fresh key, at seq 0. */
15
+ readonly version?: {
16
+ readonly key: string;
17
+ readonly seq: number;
18
+ readonly prev?: string;
19
+ readonly genesis?: string;
20
+ };
21
+ readonly retain?: boolean;
22
+ readonly deleted?: boolean;
23
+ /** The latest access changes the writer knew of */
24
+ readonly seen?: ReadonlyArray<string>;
25
+ /** Links in the clear — public spaces only; a private space seals them in the body */
26
+ readonly links?: ReadonlyArray<Link>;
27
+ }
28
+ /**
29
+ * Deterministically serializes an object into a JSON string with sorted keys.
30
+ * Recursively processes nested objects.
31
+ *
32
+ * @param obj The object to canonicalize
33
+ * @returns Deterministic JSON string representation
34
+ */
35
+ export declare function canonicalize(obj: unknown): string;
36
+ /**
37
+ * Creates an unsigned expression with a generated timestamp (if not provided).
38
+ * @param params Parameters to create the expression
39
+ * @returns Unsigned expression object
40
+ */
41
+ export declare function createExpression<T>(params: CreateExpressionParams<T>): UnsignedExpression<T>;
42
+ /**
43
+ * What the author signed and the id hashes: everything but the id and the
44
+ * signature. Both checks — id and signature — must drop exactly these, or a
45
+ * field added later is hashed on one side and not the other.
46
+ * @param expression A signed expression
47
+ * @returns Its unsigned payload
48
+ */
49
+ export declare function signedPart<T>(expression: Expression<T>): UnsignedExpression<T>;
50
+ /**
51
+ * Computes the CID for an unsigned expression by hashing its canonical serialization.
52
+ * @param expr The unsigned expression
53
+ * @returns Promise resolving to the CID string
54
+ */
55
+ export declare function getExpressionId(expr: UnsignedExpression): Promise<string>;
56
+ /**
57
+ * Serializes an Expression to canonical JSON bytes.
58
+ * @param expr The expression to serialize
59
+ * @returns Uint8Array containing canonical JSON bytes
60
+ */
61
+ export declare function serializeExpression(expr: Expression): Uint8Array;
62
+ /**
63
+ * Parses an Expression from canonical JSON bytes.
64
+ * Note: Does not verify signature or ID.
65
+ * @param bytes The bytes to deserialize
66
+ * @returns Parsed Expression
67
+ */
68
+ export declare function deserializeExpression(bytes: Uint8Array): Expression;
69
+ //# sourceMappingURL=expression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../src/schema/expression.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAKxE;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,0FAA0F;IAC1F,QAAQ,CAAC,OAAO,CAAC,EAAE;QACjB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,sFAAsF;IACtF,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;CACtC;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAkBjD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAiB5F;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAG9E;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAI/E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAGhE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAInE"}