@earendil-works/chord 1.4.0 → 1.5.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 (820) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +79 -14
  3. package/dist/cell.d.ts +7 -7
  4. package/dist/cell.d.ts.map +1 -1
  5. package/dist/cell.js.map +1 -1
  6. package/dist/context/index.d.ts +1 -1
  7. package/dist/context/index.d.ts.map +1 -1
  8. package/dist/context/index.js +1 -1
  9. package/dist/context/index.js.map +1 -1
  10. package/dist/contract.d.ts +51 -52
  11. package/dist/contract.d.ts.map +1 -1
  12. package/dist/contract.js +19 -24
  13. package/dist/contract.js.map +1 -1
  14. package/dist/delta/apply-immutable-trusted.js +3 -4
  15. package/dist/delta/apply-immutable-trusted.js.map +1 -1
  16. package/dist/delta/diff.d.ts.map +1 -1
  17. package/dist/delta/diff.js +5 -3
  18. package/dist/delta/diff.js.map +1 -1
  19. package/dist/delta/index.d.ts +9 -1
  20. package/dist/delta/index.d.ts.map +1 -1
  21. package/dist/delta/index.js +15 -11
  22. package/dist/delta/index.js.map +1 -1
  23. package/dist/delta/pending.d.ts +36 -0
  24. package/dist/delta/pending.d.ts.map +1 -0
  25. package/dist/delta/pending.js +143 -0
  26. package/dist/delta/pending.js.map +1 -0
  27. package/dist/delta/tracker.d.ts +12 -0
  28. package/dist/delta/tracker.d.ts.map +1 -1
  29. package/dist/delta/tracker.js +109 -39
  30. package/dist/delta/tracker.js.map +1 -1
  31. package/dist/host.d.ts.map +1 -1
  32. package/dist/host.js +9 -7
  33. package/dist/host.js.map +1 -1
  34. package/dist/index.d.ts +1 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +1 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/next/contracts/accepts.d.ts +81 -0
  39. package/dist/next/contracts/accepts.d.ts.map +1 -0
  40. package/dist/next/contracts/accepts.js +123 -0
  41. package/dist/next/contracts/accepts.js.map +1 -0
  42. package/dist/next/contracts/contract.d.ts +121 -0
  43. package/dist/next/contracts/contract.d.ts.map +1 -0
  44. package/dist/next/contracts/contract.js +50 -0
  45. package/dist/next/contracts/contract.js.map +1 -0
  46. package/dist/next/contracts/declare.d.ts +107 -0
  47. package/dist/next/contracts/declare.d.ts.map +1 -0
  48. package/dist/next/contracts/declare.js +136 -0
  49. package/dist/next/contracts/declare.js.map +1 -0
  50. package/dist/next/contracts/evolve.d.ts +92 -0
  51. package/dist/next/contracts/evolve.d.ts.map +1 -0
  52. package/dist/next/contracts/evolve.js +179 -0
  53. package/dist/next/contracts/evolve.js.map +1 -0
  54. package/dist/next/contracts/fingerprint.d.ts +16 -0
  55. package/dist/next/contracts/fingerprint.d.ts.map +1 -0
  56. package/dist/next/contracts/fingerprint.js +50 -0
  57. package/dist/next/contracts/fingerprint.js.map +1 -0
  58. package/dist/next/contracts/history.d.ts +71 -0
  59. package/dist/next/contracts/history.d.ts.map +1 -0
  60. package/dist/next/contracts/history.js +3 -0
  61. package/dist/next/contracts/history.js.map +1 -0
  62. package/dist/next/contracts/host-kind.d.ts +40 -0
  63. package/dist/next/contracts/host-kind.d.ts.map +1 -0
  64. package/dist/next/contracts/host-kind.js +37 -0
  65. package/dist/next/contracts/host-kind.js.map +1 -0
  66. package/dist/next/contracts/index.d.ts +7 -0
  67. package/dist/next/contracts/index.d.ts.map +1 -0
  68. package/dist/next/contracts/index.js +6 -0
  69. package/dist/next/contracts/index.js.map +1 -0
  70. package/dist/next/contracts/internal.d.ts +10 -0
  71. package/dist/next/contracts/internal.d.ts.map +1 -0
  72. package/dist/next/contracts/internal.js +9 -0
  73. package/dist/next/contracts/internal.js.map +1 -0
  74. package/dist/next/contracts/names.d.ts +3 -0
  75. package/dist/next/contracts/names.d.ts.map +1 -0
  76. package/dist/next/contracts/names.js +13 -0
  77. package/dist/next/contracts/names.js.map +1 -0
  78. package/dist/next/contracts/params.d.ts +28 -0
  79. package/dist/next/contracts/params.d.ts.map +1 -0
  80. package/dist/next/contracts/params.js +50 -0
  81. package/dist/next/contracts/params.js.map +1 -0
  82. package/dist/next/contracts/schema.d.ts +102 -0
  83. package/dist/next/contracts/schema.d.ts.map +1 -0
  84. package/dist/next/contracts/schema.js +103 -0
  85. package/dist/next/contracts/schema.js.map +1 -0
  86. package/dist/next/contracts/snapshot.d.ts +16 -0
  87. package/dist/next/contracts/snapshot.d.ts.map +1 -0
  88. package/dist/next/contracts/snapshot.js +167 -0
  89. package/dist/next/contracts/snapshot.js.map +1 -0
  90. package/dist/next/data/args.d.ts +50 -0
  91. package/dist/next/data/args.d.ts.map +1 -0
  92. package/dist/next/data/args.js +83 -0
  93. package/dist/next/data/args.js.map +1 -0
  94. package/dist/next/data/errors.d.ts +73 -0
  95. package/dist/next/data/errors.d.ts.map +1 -0
  96. package/dist/next/data/errors.js +107 -0
  97. package/dist/next/data/errors.js.map +1 -0
  98. package/dist/next/data/failure.d.ts +26 -0
  99. package/dist/next/data/failure.d.ts.map +1 -0
  100. package/dist/next/data/failure.js +72 -0
  101. package/dist/next/data/failure.js.map +1 -0
  102. package/dist/next/data/index.d.ts +4 -0
  103. package/dist/next/data/index.d.ts.map +1 -0
  104. package/dist/next/data/index.js +4 -0
  105. package/dist/next/data/index.js.map +1 -0
  106. package/dist/next/data/internal.d.ts +7 -0
  107. package/dist/next/data/internal.d.ts.map +1 -0
  108. package/dist/next/data/internal.js +8 -0
  109. package/dist/next/data/internal.js.map +1 -0
  110. package/dist/next/data/params.d.ts +20 -0
  111. package/dist/next/data/params.d.ts.map +1 -0
  112. package/dist/next/data/params.js +31 -0
  113. package/dist/next/data/params.js.map +1 -0
  114. package/dist/next/data/principal.d.ts +17 -0
  115. package/dist/next/data/principal.d.ts.map +1 -0
  116. package/dist/next/data/principal.js +41 -0
  117. package/dist/next/data/principal.js.map +1 -0
  118. package/dist/next/data/validator.d.ts +12 -0
  119. package/dist/next/data/validator.d.ts.map +1 -0
  120. package/dist/next/data/validator.js +34 -0
  121. package/dist/next/data/validator.js.map +1 -0
  122. package/dist/next/documents/address-source.d.ts +20 -0
  123. package/dist/next/documents/address-source.d.ts.map +1 -0
  124. package/dist/next/documents/address-source.js +44 -0
  125. package/dist/next/documents/address-source.js.map +1 -0
  126. package/dist/next/documents/definition.d.ts +84 -0
  127. package/dist/next/documents/definition.d.ts.map +1 -0
  128. package/dist/next/documents/definition.js +73 -0
  129. package/dist/next/documents/definition.js.map +1 -0
  130. package/dist/next/documents/documents.d.ts +106 -0
  131. package/dist/next/documents/documents.d.ts.map +1 -0
  132. package/dist/next/documents/documents.js +224 -0
  133. package/dist/next/documents/documents.js.map +1 -0
  134. package/dist/next/documents/fence.d.ts +9 -0
  135. package/dist/next/documents/fence.d.ts.map +1 -0
  136. package/dist/next/documents/fence.js +15 -0
  137. package/dist/next/documents/fence.js.map +1 -0
  138. package/dist/next/documents/handles.d.ts +76 -0
  139. package/dist/next/documents/handles.d.ts.map +1 -0
  140. package/dist/next/documents/handles.js +66 -0
  141. package/dist/next/documents/handles.js.map +1 -0
  142. package/dist/next/documents/index.d.ts +4 -0
  143. package/dist/next/documents/index.d.ts.map +1 -0
  144. package/dist/next/documents/index.js +3 -0
  145. package/dist/next/documents/index.js.map +1 -0
  146. package/dist/next/documents/internal.d.ts +9 -0
  147. package/dist/next/documents/internal.d.ts.map +1 -0
  148. package/dist/next/documents/internal.js +9 -0
  149. package/dist/next/documents/internal.js.map +1 -0
  150. package/dist/next/documents/keyed-slot.d.ts +103 -0
  151. package/dist/next/documents/keyed-slot.d.ts.map +1 -0
  152. package/dist/next/documents/keyed-slot.js +395 -0
  153. package/dist/next/documents/keyed-slot.js.map +1 -0
  154. package/dist/next/documents/line.d.ts +7 -0
  155. package/dist/next/documents/line.d.ts.map +1 -0
  156. package/dist/next/documents/line.js +14 -0
  157. package/dist/next/documents/line.js.map +1 -0
  158. package/dist/next/documents/persistence.d.ts +104 -0
  159. package/dist/next/documents/persistence.d.ts.map +1 -0
  160. package/dist/next/documents/persistence.js +128 -0
  161. package/dist/next/documents/persistence.js.map +1 -0
  162. package/dist/next/documents/residency.d.ts +31 -0
  163. package/dist/next/documents/residency.d.ts.map +1 -0
  164. package/dist/next/documents/residency.js +93 -0
  165. package/dist/next/documents/residency.js.map +1 -0
  166. package/dist/next/documents/slot.d.ts +109 -0
  167. package/dist/next/documents/slot.d.ts.map +1 -0
  168. package/dist/next/documents/slot.js +181 -0
  169. package/dist/next/documents/slot.js.map +1 -0
  170. package/dist/next/documents/transaction.d.ts +133 -0
  171. package/dist/next/documents/transaction.d.ts.map +1 -0
  172. package/dist/next/documents/transaction.js +409 -0
  173. package/dist/next/documents/transaction.js.map +1 -0
  174. package/dist/next/host/activity.d.ts +31 -0
  175. package/dist/next/host/activity.d.ts.map +1 -0
  176. package/dist/next/host/activity.js +40 -0
  177. package/dist/next/host/activity.js.map +1 -0
  178. package/dist/next/host/adapted.d.ts +49 -0
  179. package/dist/next/host/adapted.d.ts.map +1 -0
  180. package/dist/next/host/adapted.js +214 -0
  181. package/dist/next/host/adapted.js.map +1 -0
  182. package/dist/next/host/attempt.d.ts +278 -0
  183. package/dist/next/host/attempt.d.ts.map +1 -0
  184. package/dist/next/host/attempt.js +1072 -0
  185. package/dist/next/host/attempt.js.map +1 -0
  186. package/dist/next/host/backoff.d.ts +29 -0
  187. package/dist/next/host/backoff.d.ts.map +1 -0
  188. package/dist/next/host/backoff.js +69 -0
  189. package/dist/next/host/backoff.js.map +1 -0
  190. package/dist/next/host/ctx.d.ts +47 -0
  191. package/dist/next/host/ctx.d.ts.map +1 -0
  192. package/dist/next/host/ctx.js +108 -0
  193. package/dist/next/host/ctx.js.map +1 -0
  194. package/dist/next/host/deadline.d.ts +12 -0
  195. package/dist/next/host/deadline.d.ts.map +1 -0
  196. package/dist/next/host/deadline.js +40 -0
  197. package/dist/next/host/deadline.js.map +1 -0
  198. package/dist/next/host/dependencies.d.ts +65 -0
  199. package/dist/next/host/dependencies.d.ts.map +1 -0
  200. package/dist/next/host/dependencies.js +115 -0
  201. package/dist/next/host/dependencies.js.map +1 -0
  202. package/dist/next/host/destination.d.ts +48 -0
  203. package/dist/next/host/destination.d.ts.map +1 -0
  204. package/dist/next/host/destination.js +101 -0
  205. package/dist/next/host/destination.js.map +1 -0
  206. package/dist/next/host/facet.d.ts +79 -0
  207. package/dist/next/host/facet.d.ts.map +1 -0
  208. package/dist/next/host/facet.js +55 -0
  209. package/dist/next/host/facet.js.map +1 -0
  210. package/dist/next/host/follow.d.ts +52 -0
  211. package/dist/next/host/follow.d.ts.map +1 -0
  212. package/dist/next/host/follow.js +207 -0
  213. package/dist/next/host/follow.js.map +1 -0
  214. package/dist/next/host/host.d.ts +495 -0
  215. package/dist/next/host/host.d.ts.map +1 -0
  216. package/dist/next/host/host.js +1075 -0
  217. package/dist/next/host/host.js.map +1 -0
  218. package/dist/next/host/index.d.ts +17 -0
  219. package/dist/next/host/index.d.ts.map +1 -0
  220. package/dist/next/host/index.js +6 -0
  221. package/dist/next/host/index.js.map +1 -0
  222. package/dist/next/host/internal.d.ts +10 -0
  223. package/dist/next/host/internal.d.ts.map +1 -0
  224. package/dist/next/host/internal.js +8 -0
  225. package/dist/next/host/internal.js.map +1 -0
  226. package/dist/next/host/members.d.ts +50 -0
  227. package/dist/next/host/members.d.ts.map +1 -0
  228. package/dist/next/host/members.js +107 -0
  229. package/dist/next/host/members.js.map +1 -0
  230. package/dist/next/host/native.d.ts +55 -0
  231. package/dist/next/host/native.d.ts.map +1 -0
  232. package/dist/next/host/native.js +92 -0
  233. package/dist/next/host/native.js.map +1 -0
  234. package/dist/next/host/object.d.ts +290 -0
  235. package/dist/next/host/object.d.ts.map +1 -0
  236. package/dist/next/host/object.js +1127 -0
  237. package/dist/next/host/object.js.map +1 -0
  238. package/dist/next/host/parked.d.ts +23 -0
  239. package/dist/next/host/parked.d.ts.map +1 -0
  240. package/dist/next/host/parked.js +79 -0
  241. package/dist/next/host/parked.js.map +1 -0
  242. package/dist/next/host/presence.d.ts +34 -0
  243. package/dist/next/host/presence.d.ts.map +1 -0
  244. package/dist/next/host/presence.js +117 -0
  245. package/dist/next/host/presence.js.map +1 -0
  246. package/dist/next/host/ref-state.d.ts +53 -0
  247. package/dist/next/host/ref-state.d.ts.map +1 -0
  248. package/dist/next/host/ref-state.js +83 -0
  249. package/dist/next/host/ref-state.js.map +1 -0
  250. package/dist/next/host/reference-keys.d.ts +36 -0
  251. package/dist/next/host/reference-keys.d.ts.map +1 -0
  252. package/dist/next/host/reference-keys.js +168 -0
  253. package/dist/next/host/reference-keys.js.map +1 -0
  254. package/dist/next/host/reference-source.d.ts +65 -0
  255. package/dist/next/host/reference-source.d.ts.map +1 -0
  256. package/dist/next/host/reference-source.js +285 -0
  257. package/dist/next/host/reference-source.js.map +1 -0
  258. package/dist/next/host/reference.d.ts +308 -0
  259. package/dist/next/host/reference.d.ts.map +1 -0
  260. package/dist/next/host/reference.js +775 -0
  261. package/dist/next/host/reference.js.map +1 -0
  262. package/dist/next/host/retry-on.d.ts +28 -0
  263. package/dist/next/host/retry-on.d.ts.map +1 -0
  264. package/dist/next/host/retry-on.js +52 -0
  265. package/dist/next/host/retry-on.js.map +1 -0
  266. package/dist/next/host/revocation.d.ts +16 -0
  267. package/dist/next/host/revocation.d.ts.map +1 -0
  268. package/dist/next/host/revocation.js +27 -0
  269. package/dist/next/host/revocation.js.map +1 -0
  270. package/dist/next/host/root.d.ts +27 -0
  271. package/dist/next/host/root.d.ts.map +1 -0
  272. package/dist/next/host/root.js +68 -0
  273. package/dist/next/host/root.js.map +1 -0
  274. package/dist/next/host/route.d.ts +64 -0
  275. package/dist/next/host/route.d.ts.map +1 -0
  276. package/dist/next/host/route.js +190 -0
  277. package/dist/next/host/route.js.map +1 -0
  278. package/dist/next/host/routines.d.ts +76 -0
  279. package/dist/next/host/routines.d.ts.map +1 -0
  280. package/dist/next/host/routines.js +350 -0
  281. package/dist/next/host/routines.js.map +1 -0
  282. package/dist/next/host/sleep.d.ts +9 -0
  283. package/dist/next/host/sleep.d.ts.map +1 -0
  284. package/dist/next/host/sleep.js +40 -0
  285. package/dist/next/host/sleep.js.map +1 -0
  286. package/dist/next/host/staging.d.ts +94 -0
  287. package/dist/next/host/staging.d.ts.map +1 -0
  288. package/dist/next/host/staging.js +302 -0
  289. package/dist/next/host/staging.js.map +1 -0
  290. package/dist/next/host/unbound.d.ts +30 -0
  291. package/dist/next/host/unbound.d.ts.map +1 -0
  292. package/dist/next/host/unbound.js +67 -0
  293. package/dist/next/host/unbound.js.map +1 -0
  294. package/dist/next/host/uuid.d.ts +3 -0
  295. package/dist/next/host/uuid.d.ts.map +1 -0
  296. package/dist/next/host/uuid.js +38 -0
  297. package/dist/next/host/uuid.js.map +1 -0
  298. package/dist/next/index.d.ts +28 -0
  299. package/dist/next/index.d.ts.map +1 -0
  300. package/dist/next/index.js +18 -0
  301. package/dist/next/index.js.map +1 -0
  302. package/dist/next/jobs/definition.d.ts +96 -0
  303. package/dist/next/jobs/definition.d.ts.map +1 -0
  304. package/dist/next/jobs/definition.js +83 -0
  305. package/dist/next/jobs/definition.js.map +1 -0
  306. package/dist/next/jobs/index.d.ts +5 -0
  307. package/dist/next/jobs/index.d.ts.map +1 -0
  308. package/dist/next/jobs/index.js +3 -0
  309. package/dist/next/jobs/index.js.map +1 -0
  310. package/dist/next/jobs/internal.d.ts +3 -0
  311. package/dist/next/jobs/internal.d.ts.map +1 -0
  312. package/dist/next/jobs/internal.js +4 -0
  313. package/dist/next/jobs/internal.js.map +1 -0
  314. package/dist/next/jobs/job.d.ts +152 -0
  315. package/dist/next/jobs/job.d.ts.map +1 -0
  316. package/dist/next/jobs/job.js +320 -0
  317. package/dist/next/jobs/job.js.map +1 -0
  318. package/dist/next/jobs/persisted.d.ts +38 -0
  319. package/dist/next/jobs/persisted.d.ts.map +1 -0
  320. package/dist/next/jobs/persisted.js +95 -0
  321. package/dist/next/jobs/persisted.js.map +1 -0
  322. package/dist/next/jobs/records.d.ts +231 -0
  323. package/dist/next/jobs/records.d.ts.map +1 -0
  324. package/dist/next/jobs/records.js +869 -0
  325. package/dist/next/jobs/records.js.map +1 -0
  326. package/dist/next/jobs/run-states.d.ts +69 -0
  327. package/dist/next/jobs/run-states.d.ts.map +1 -0
  328. package/dist/next/jobs/run-states.js +228 -0
  329. package/dist/next/jobs/run-states.js.map +1 -0
  330. package/dist/next/jobs/run.d.ts +113 -0
  331. package/dist/next/jobs/run.d.ts.map +1 -0
  332. package/dist/next/jobs/run.js +200 -0
  333. package/dist/next/jobs/run.js.map +1 -0
  334. package/dist/next/jobs/running.d.ts +44 -0
  335. package/dist/next/jobs/running.d.ts.map +1 -0
  336. package/dist/next/jobs/running.js +117 -0
  337. package/dist/next/jobs/running.js.map +1 -0
  338. package/dist/next/jobs/stored.d.ts +63 -0
  339. package/dist/next/jobs/stored.d.ts.map +1 -0
  340. package/dist/next/jobs/stored.js +55 -0
  341. package/dist/next/jobs/stored.js.map +1 -0
  342. package/dist/next/link/binary.d.ts +4 -0
  343. package/dist/next/link/binary.d.ts.map +1 -0
  344. package/dist/next/link/binary.js +534 -0
  345. package/dist/next/link/binary.js.map +1 -0
  346. package/dist/next/link/channel.d.ts +63 -0
  347. package/dist/next/link/channel.d.ts.map +1 -0
  348. package/dist/next/link/channel.js +202 -0
  349. package/dist/next/link/channel.js.map +1 -0
  350. package/dist/next/link/errors.d.ts +7 -0
  351. package/dist/next/link/errors.d.ts.map +1 -0
  352. package/dist/next/link/errors.js +21 -0
  353. package/dist/next/link/errors.js.map +1 -0
  354. package/dist/next/link/index.d.ts +8 -0
  355. package/dist/next/link/index.d.ts.map +1 -0
  356. package/dist/next/link/index.js +8 -0
  357. package/dist/next/link/index.js.map +1 -0
  358. package/dist/next/link/internal.d.ts +9 -0
  359. package/dist/next/link/internal.d.ts.map +1 -0
  360. package/dist/next/link/internal.js +10 -0
  361. package/dist/next/link/internal.js.map +1 -0
  362. package/dist/next/link/ipc.d.ts +22 -0
  363. package/dist/next/link/ipc.d.ts.map +1 -0
  364. package/dist/next/link/ipc.js +64 -0
  365. package/dist/next/link/ipc.js.map +1 -0
  366. package/dist/next/link/link.d.ts +34 -0
  367. package/dist/next/link/link.d.ts.map +1 -0
  368. package/dist/next/link/link.js +87 -0
  369. package/dist/next/link/link.js.map +1 -0
  370. package/dist/next/link/message.d.ts +249 -0
  371. package/dist/next/link/message.d.ts.map +1 -0
  372. package/dist/next/link/message.js +123 -0
  373. package/dist/next/link/message.js.map +1 -0
  374. package/dist/next/link/part.d.ts +80 -0
  375. package/dist/next/link/part.d.ts.map +1 -0
  376. package/dist/next/link/part.js +164 -0
  377. package/dist/next/link/part.js.map +1 -0
  378. package/dist/next/link/text.d.ts +6 -0
  379. package/dist/next/link/text.d.ts.map +1 -0
  380. package/dist/next/link/text.js +335 -0
  381. package/dist/next/link/text.js.map +1 -0
  382. package/dist/next/link/values.d.ts +40 -0
  383. package/dist/next/link/values.d.ts.map +1 -0
  384. package/dist/next/link/values.js +117 -0
  385. package/dist/next/link/values.js.map +1 -0
  386. package/dist/next/link/websocket.d.ts +26 -0
  387. package/dist/next/link/websocket.d.ts.map +1 -0
  388. package/dist/next/link/websocket.js +91 -0
  389. package/dist/next/link/websocket.js.map +1 -0
  390. package/dist/next/registries/contribution.d.ts +50 -0
  391. package/dist/next/registries/contribution.d.ts.map +1 -0
  392. package/dist/next/registries/contribution.js +129 -0
  393. package/dist/next/registries/contribution.js.map +1 -0
  394. package/dist/next/registries/entries.d.ts +18 -0
  395. package/dist/next/registries/entries.d.ts.map +1 -0
  396. package/dist/next/registries/entries.js +42 -0
  397. package/dist/next/registries/entries.js.map +1 -0
  398. package/dist/next/registries/index.d.ts +3 -0
  399. package/dist/next/registries/index.d.ts.map +1 -0
  400. package/dist/next/registries/index.js +5 -0
  401. package/dist/next/registries/index.js.map +1 -0
  402. package/dist/next/registries/internal.d.ts +4 -0
  403. package/dist/next/registries/internal.d.ts.map +1 -0
  404. package/dist/next/registries/internal.js +5 -0
  405. package/dist/next/registries/internal.js.map +1 -0
  406. package/dist/next/registries/record.d.ts +94 -0
  407. package/dist/next/registries/record.d.ts.map +1 -0
  408. package/dist/next/registries/record.js +253 -0
  409. package/dist/next/registries/record.js.map +1 -0
  410. package/dist/next/registries/registry.d.ts +74 -0
  411. package/dist/next/registries/registry.d.ts.map +1 -0
  412. package/dist/next/registries/registry.js +14 -0
  413. package/dist/next/registries/registry.js.map +1 -0
  414. package/dist/next/registries/value.d.ts +48 -0
  415. package/dist/next/registries/value.d.ts.map +1 -0
  416. package/dist/next/registries/value.js +199 -0
  417. package/dist/next/registries/value.js.map +1 -0
  418. package/dist/next/remote/calls.d.ts +25 -0
  419. package/dist/next/remote/calls.d.ts.map +1 -0
  420. package/dist/next/remote/calls.js +62 -0
  421. package/dist/next/remote/calls.js.map +1 -0
  422. package/dist/next/remote/consumer.d.ts +42 -0
  423. package/dist/next/remote/consumer.d.ts.map +1 -0
  424. package/dist/next/remote/consumer.js +343 -0
  425. package/dist/next/remote/consumer.js.map +1 -0
  426. package/dist/next/remote/hold.d.ts +130 -0
  427. package/dist/next/remote/hold.d.ts.map +1 -0
  428. package/dist/next/remote/hold.js +537 -0
  429. package/dist/next/remote/hold.js.map +1 -0
  430. package/dist/next/remote/host-link.d.ts +77 -0
  431. package/dist/next/remote/host-link.d.ts.map +1 -0
  432. package/dist/next/remote/host-link.js +182 -0
  433. package/dist/next/remote/host-link.js.map +1 -0
  434. package/dist/next/remote/internal.d.ts +6 -0
  435. package/dist/next/remote/internal.d.ts.map +1 -0
  436. package/dist/next/remote/internal.js +6 -0
  437. package/dist/next/remote/internal.js.map +1 -0
  438. package/dist/next/remote/path.d.ts +46 -0
  439. package/dist/next/remote/path.d.ts.map +1 -0
  440. package/dist/next/remote/path.js +73 -0
  441. package/dist/next/remote/path.js.map +1 -0
  442. package/dist/next/remote/provider.d.ts +76 -0
  443. package/dist/next/remote/provider.d.ts.map +1 -0
  444. package/dist/next/remote/provider.js +506 -0
  445. package/dist/next/remote/provider.js.map +1 -0
  446. package/dist/next/remote/relay.d.ts +58 -0
  447. package/dist/next/remote/relay.d.ts.map +1 -0
  448. package/dist/next/remote/relay.js +117 -0
  449. package/dist/next/remote/relay.js.map +1 -0
  450. package/dist/next/remote/remote-object.d.ts +133 -0
  451. package/dist/next/remote/remote-object.d.ts.map +1 -0
  452. package/dist/next/remote/remote-object.js +411 -0
  453. package/dist/next/remote/remote-object.js.map +1 -0
  454. package/dist/next/remote/replica.d.ts +59 -0
  455. package/dist/next/remote/replica.d.ts.map +1 -0
  456. package/dist/next/remote/replica.js +125 -0
  457. package/dist/next/remote/replica.js.map +1 -0
  458. package/dist/next/state/batch.d.ts +64 -0
  459. package/dist/next/state/batch.d.ts.map +1 -0
  460. package/dist/next/state/batch.js +163 -0
  461. package/dist/next/state/batch.js.map +1 -0
  462. package/dist/next/state/derive.d.ts +52 -0
  463. package/dist/next/state/derive.d.ts.map +1 -0
  464. package/dist/next/state/derive.js +182 -0
  465. package/dist/next/state/derive.js.map +1 -0
  466. package/dist/next/state/index.d.ts +6 -0
  467. package/dist/next/state/index.d.ts.map +1 -0
  468. package/dist/next/state/index.js +4 -0
  469. package/dist/next/state/index.js.map +1 -0
  470. package/dist/next/state/internal.d.ts +6 -0
  471. package/dist/next/state/internal.d.ts.map +1 -0
  472. package/dist/next/state/internal.js +8 -0
  473. package/dist/next/state/internal.js.map +1 -0
  474. package/dist/next/state/native-source.d.ts +106 -0
  475. package/dist/next/state/native-source.d.ts.map +1 -0
  476. package/dist/next/state/native-source.js +240 -0
  477. package/dist/next/state/native-source.js.map +1 -0
  478. package/dist/next/state/watchable.d.ts +114 -0
  479. package/dist/next/state/watchable.d.ts.map +1 -0
  480. package/dist/next/state/watchable.js +156 -0
  481. package/dist/next/state/watchable.js.map +1 -0
  482. package/dist/next/state/writable.d.ts +32 -0
  483. package/dist/next/state/writable.d.ts.map +1 -0
  484. package/dist/next/state/writable.js +49 -0
  485. package/dist/next/state/writable.js.map +1 -0
  486. package/dist/next/store/adapter.d.ts +67 -0
  487. package/dist/next/store/adapter.d.ts.map +1 -0
  488. package/dist/next/store/adapter.js +118 -0
  489. package/dist/next/store/adapter.js.map +1 -0
  490. package/dist/next/store/allocator.d.ts +17 -0
  491. package/dist/next/store/allocator.d.ts.map +1 -0
  492. package/dist/next/store/allocator.js +30 -0
  493. package/dist/next/store/allocator.js.map +1 -0
  494. package/dist/next/store/applier.d.ts +8 -0
  495. package/dist/next/store/applier.d.ts.map +1 -0
  496. package/dist/next/store/applier.js +375 -0
  497. package/dist/next/store/applier.js.map +1 -0
  498. package/dist/next/store/apply-batch.d.ts +12 -0
  499. package/dist/next/store/apply-batch.d.ts.map +1 -0
  500. package/dist/next/store/apply-batch.js +83 -0
  501. package/dist/next/store/apply-batch.js.map +1 -0
  502. package/dist/next/store/archive.d.ts +32 -0
  503. package/dist/next/store/archive.d.ts.map +1 -0
  504. package/dist/next/store/archive.js +129 -0
  505. package/dist/next/store/archive.js.map +1 -0
  506. package/dist/next/store/backend.d.ts +10 -0
  507. package/dist/next/store/backend.d.ts.map +1 -0
  508. package/dist/next/store/backend.js +15 -0
  509. package/dist/next/store/backend.js.map +1 -0
  510. package/dist/next/store/catalog.d.ts +24 -0
  511. package/dist/next/store/catalog.d.ts.map +1 -0
  512. package/dist/next/store/catalog.js +17 -0
  513. package/dist/next/store/catalog.js.map +1 -0
  514. package/dist/next/store/claims.d.ts +23 -0
  515. package/dist/next/store/claims.d.ts.map +1 -0
  516. package/dist/next/store/claims.js +65 -0
  517. package/dist/next/store/claims.js.map +1 -0
  518. package/dist/next/store/columns.d.ts +77 -0
  519. package/dist/next/store/columns.d.ts.map +1 -0
  520. package/dist/next/store/columns.js +77 -0
  521. package/dist/next/store/columns.js.map +1 -0
  522. package/dist/next/store/engine.d.ts +176 -0
  523. package/dist/next/store/engine.d.ts.map +1 -0
  524. package/dist/next/store/engine.js +283 -0
  525. package/dist/next/store/engine.js.map +1 -0
  526. package/dist/next/store/evaluate.d.ts +17 -0
  527. package/dist/next/store/evaluate.d.ts.map +1 -0
  528. package/dist/next/store/evaluate.js +128 -0
  529. package/dist/next/store/evaluate.js.map +1 -0
  530. package/dist/next/store/export.d.ts +17 -0
  531. package/dist/next/store/export.d.ts.map +1 -0
  532. package/dist/next/store/export.js +200 -0
  533. package/dist/next/store/export.js.map +1 -0
  534. package/dist/next/store/expression.d.ts +150 -0
  535. package/dist/next/store/expression.d.ts.map +1 -0
  536. package/dist/next/store/expression.js +268 -0
  537. package/dist/next/store/expression.js.map +1 -0
  538. package/dist/next/store/import.d.ts +10 -0
  539. package/dist/next/store/import.d.ts.map +1 -0
  540. package/dist/next/store/import.js +276 -0
  541. package/dist/next/store/import.js.map +1 -0
  542. package/dist/next/store/index.d.ts +16 -0
  543. package/dist/next/store/index.d.ts.map +1 -0
  544. package/dist/next/store/index.js +13 -0
  545. package/dist/next/store/index.js.map +1 -0
  546. package/dist/next/store/json-column.d.ts +33 -0
  547. package/dist/next/store/json-column.d.ts.map +1 -0
  548. package/dist/next/store/json-column.js +61 -0
  549. package/dist/next/store/json-column.js.map +1 -0
  550. package/dist/next/store/jsonl.d.ts +9 -0
  551. package/dist/next/store/jsonl.d.ts.map +1 -0
  552. package/dist/next/store/jsonl.js +61 -0
  553. package/dist/next/store/jsonl.js.map +1 -0
  554. package/dist/next/store/outbox.d.ts +26 -0
  555. package/dist/next/store/outbox.d.ts.map +1 -0
  556. package/dist/next/store/outbox.js +80 -0
  557. package/dist/next/store/outbox.js.map +1 -0
  558. package/dist/next/store/query.d.ts +39 -0
  559. package/dist/next/store/query.d.ts.map +1 -0
  560. package/dist/next/store/query.js +97 -0
  561. package/dist/next/store/query.js.map +1 -0
  562. package/dist/next/store/refusal.d.ts +15 -0
  563. package/dist/next/store/refusal.d.ts.map +1 -0
  564. package/dist/next/store/refusal.js +36 -0
  565. package/dist/next/store/refusal.js.map +1 -0
  566. package/dist/next/store/rows.d.ts +80 -0
  567. package/dist/next/store/rows.d.ts.map +1 -0
  568. package/dist/next/store/rows.js +183 -0
  569. package/dist/next/store/rows.js.map +1 -0
  570. package/dist/next/store/schema.d.ts +25 -0
  571. package/dist/next/store/schema.d.ts.map +1 -0
  572. package/dist/next/store/schema.js +115 -0
  573. package/dist/next/store/schema.js.map +1 -0
  574. package/dist/next/store/sql.d.ts +73 -0
  575. package/dist/next/store/sql.d.ts.map +1 -0
  576. package/dist/next/store/sql.js +234 -0
  577. package/dist/next/store/sql.js.map +1 -0
  578. package/dist/next/store/step.d.ts +48 -0
  579. package/dist/next/store/step.d.ts.map +1 -0
  580. package/dist/next/store/step.js +50 -0
  581. package/dist/next/store/step.js.map +1 -0
  582. package/dist/next/store/store.d.ts +161 -0
  583. package/dist/next/store/store.d.ts.map +1 -0
  584. package/dist/next/store/store.js +627 -0
  585. package/dist/next/store/store.js.map +1 -0
  586. package/dist/next/store/table-changes.d.ts +29 -0
  587. package/dist/next/store/table-changes.d.ts.map +1 -0
  588. package/dist/next/store/table-changes.js +102 -0
  589. package/dist/next/store/table-changes.js.map +1 -0
  590. package/dist/next/store/table-evolve.d.ts +74 -0
  591. package/dist/next/store/table-evolve.d.ts.map +1 -0
  592. package/dist/next/store/table-evolve.js +201 -0
  593. package/dist/next/store/table-evolve.js.map +1 -0
  594. package/dist/next/store/table-handle.d.ts +67 -0
  595. package/dist/next/store/table-handle.d.ts.map +1 -0
  596. package/dist/next/store/table-handle.js +101 -0
  597. package/dist/next/store/table-handle.js.map +1 -0
  598. package/dist/next/store/table-history.d.ts +75 -0
  599. package/dist/next/store/table-history.d.ts.map +1 -0
  600. package/dist/next/store/table-history.js +42 -0
  601. package/dist/next/store/table-history.js.map +1 -0
  602. package/dist/next/store/table-migration.d.ts +16 -0
  603. package/dist/next/store/table-migration.d.ts.map +1 -0
  604. package/dist/next/store/table-migration.js +202 -0
  605. package/dist/next/store/table-migration.js.map +1 -0
  606. package/dist/next/store/table-writes.d.ts +125 -0
  607. package/dist/next/store/table-writes.d.ts.map +1 -0
  608. package/dist/next/store/table-writes.js +165 -0
  609. package/dist/next/store/table-writes.js.map +1 -0
  610. package/dist/next/store/table.d.ts +80 -0
  611. package/dist/next/store/table.d.ts.map +1 -0
  612. package/dist/next/store/table.js +103 -0
  613. package/dist/next/store/table.js.map +1 -0
  614. package/dist/next/store/text.d.ts +14 -0
  615. package/dist/next/store/text.d.ts.map +1 -0
  616. package/dist/next/store/text.js +51 -0
  617. package/dist/next/store/text.js.map +1 -0
  618. package/dist/next/store/writes.d.ts +5 -0
  619. package/dist/next/store/writes.d.ts.map +1 -0
  620. package/dist/next/store/writes.js +4 -0
  621. package/dist/next/store/writes.js.map +1 -0
  622. package/dist/next-node/compression.d.ts +7 -0
  623. package/dist/next-node/compression.d.ts.map +1 -0
  624. package/dist/next-node/compression.js +24 -0
  625. package/dist/next-node/compression.js.map +1 -0
  626. package/dist/next-node/http/admission.d.ts +63 -0
  627. package/dist/next-node/http/admission.d.ts.map +1 -0
  628. package/dist/next-node/http/admission.js +134 -0
  629. package/dist/next-node/http/admission.js.map +1 -0
  630. package/dist/next-node/http/authenticate.d.ts +21 -0
  631. package/dist/next-node/http/authenticate.d.ts.map +1 -0
  632. package/dist/next-node/http/authenticate.js +34 -0
  633. package/dist/next-node/http/authenticate.js.map +1 -0
  634. package/dist/next-node/http/cookies.d.ts +24 -0
  635. package/dist/next-node/http/cookies.d.ts.map +1 -0
  636. package/dist/next-node/http/cookies.js +62 -0
  637. package/dist/next-node/http/cookies.js.map +1 -0
  638. package/dist/next-node/http/file.d.ts +23 -0
  639. package/dist/next-node/http/file.d.ts.map +1 -0
  640. package/dist/next-node/http/file.js +94 -0
  641. package/dist/next-node/http/file.js.map +1 -0
  642. package/dist/next-node/http/headers.d.ts +37 -0
  643. package/dist/next-node/http/headers.d.ts.map +1 -0
  644. package/dist/next-node/http/headers.js +129 -0
  645. package/dist/next-node/http/headers.js.map +1 -0
  646. package/dist/next-node/http/http.d.ts +100 -0
  647. package/dist/next-node/http/http.d.ts.map +1 -0
  648. package/dist/next-node/http/http.js +462 -0
  649. package/dist/next-node/http/http.js.map +1 -0
  650. package/dist/next-node/http/incoming.d.ts +19 -0
  651. package/dist/next-node/http/incoming.d.ts.map +1 -0
  652. package/dist/next-node/http/incoming.js +31 -0
  653. package/dist/next-node/http/incoming.js.map +1 -0
  654. package/dist/next-node/http/index.d.ts +11 -0
  655. package/dist/next-node/http/index.d.ts.map +1 -0
  656. package/dist/next-node/http/index.js +12 -0
  657. package/dist/next-node/http/index.js.map +1 -0
  658. package/dist/next-node/http/node.d.ts +78 -0
  659. package/dist/next-node/http/node.d.ts.map +1 -0
  660. package/dist/next-node/http/node.js +291 -0
  661. package/dist/next-node/http/node.js.map +1 -0
  662. package/dist/next-node/http/request.d.ts +54 -0
  663. package/dist/next-node/http/request.d.ts.map +1 -0
  664. package/dist/next-node/http/request.js +116 -0
  665. package/dist/next-node/http/request.js.map +1 -0
  666. package/dist/next-node/http/response.d.ts +63 -0
  667. package/dist/next-node/http/response.d.ts.map +1 -0
  668. package/dist/next-node/http/response.js +202 -0
  669. package/dist/next-node/http/response.js.map +1 -0
  670. package/dist/next-node/http/router.d.ts +114 -0
  671. package/dist/next-node/http/router.d.ts.map +1 -0
  672. package/dist/next-node/http/router.js +261 -0
  673. package/dist/next-node/http/router.js.map +1 -0
  674. package/dist/next-node/http/upgrades.d.ts +58 -0
  675. package/dist/next-node/http/upgrades.d.ts.map +1 -0
  676. package/dist/next-node/http/upgrades.js +184 -0
  677. package/dist/next-node/http/upgrades.js.map +1 -0
  678. package/dist/next-node/plugins/build.d.ts +57 -0
  679. package/dist/next-node/plugins/build.d.ts.map +1 -0
  680. package/dist/next-node/plugins/build.js +334 -0
  681. package/dist/next-node/plugins/build.js.map +1 -0
  682. package/dist/next-node/plugins/discover.d.ts +36 -0
  683. package/dist/next-node/plugins/discover.d.ts.map +1 -0
  684. package/dist/next-node/plugins/discover.js +91 -0
  685. package/dist/next-node/plugins/discover.js.map +1 -0
  686. package/dist/next-node/plugins/evaluate.d.ts +33 -0
  687. package/dist/next-node/plugins/evaluate.d.ts.map +1 -0
  688. package/dist/next-node/plugins/evaluate.js +98 -0
  689. package/dist/next-node/plugins/evaluate.js.map +1 -0
  690. package/dist/next-node/plugins/index.d.ts +9 -0
  691. package/dist/next-node/plugins/index.d.ts.map +1 -0
  692. package/dist/next-node/plugins/index.js +11 -0
  693. package/dist/next-node/plugins/index.js.map +1 -0
  694. package/dist/next-node/plugins/install.d.ts +13 -0
  695. package/dist/next-node/plugins/install.d.ts.map +1 -0
  696. package/dist/next-node/plugins/install.js +37 -0
  697. package/dist/next-node/plugins/install.js.map +1 -0
  698. package/dist/next-node/plugins/plugins.d.ts +135 -0
  699. package/dist/next-node/plugins/plugins.d.ts.map +1 -0
  700. package/dist/next-node/plugins/plugins.js +206 -0
  701. package/dist/next-node/plugins/plugins.js.map +1 -0
  702. package/dist/next-node/plugins/runtime.d.ts +41 -0
  703. package/dist/next-node/plugins/runtime.d.ts.map +1 -0
  704. package/dist/next-node/plugins/runtime.js +136 -0
  705. package/dist/next-node/plugins/runtime.js.map +1 -0
  706. package/dist/next-node/plugins/stack.d.ts +16 -0
  707. package/dist/next-node/plugins/stack.d.ts.map +1 -0
  708. package/dist/next-node/plugins/stack.js +61 -0
  709. package/dist/next-node/plugins/stack.js.map +1 -0
  710. package/dist/next-node/plugins/watcher.d.ts +58 -0
  711. package/dist/next-node/plugins/watcher.d.ts.map +1 -0
  712. package/dist/next-node/plugins/watcher.js +281 -0
  713. package/dist/next-node/plugins/watcher.js.map +1 -0
  714. package/dist/next-node/workers/control.d.ts +83 -0
  715. package/dist/next-node/workers/control.d.ts.map +1 -0
  716. package/dist/next-node/workers/control.js +77 -0
  717. package/dist/next-node/workers/control.js.map +1 -0
  718. package/dist/next-node/workers/index.d.ts +5 -0
  719. package/dist/next-node/workers/index.d.ts.map +1 -0
  720. package/dist/next-node/workers/index.js +7 -0
  721. package/dist/next-node/workers/index.js.map +1 -0
  722. package/dist/next-node/workers/lock.d.ts +21 -0
  723. package/dist/next-node/workers/lock.d.ts.map +1 -0
  724. package/dist/next-node/workers/lock.js +137 -0
  725. package/dist/next-node/workers/lock.js.map +1 -0
  726. package/dist/next-node/workers/main.d.ts +46 -0
  727. package/dist/next-node/workers/main.d.ts.map +1 -0
  728. package/dist/next-node/workers/main.js +230 -0
  729. package/dist/next-node/workers/main.js.map +1 -0
  730. package/dist/next-node/workers/process.d.ts +42 -0
  731. package/dist/next-node/workers/process.d.ts.map +1 -0
  732. package/dist/next-node/workers/process.js +125 -0
  733. package/dist/next-node/workers/process.js.map +1 -0
  734. package/dist/next-node/workers/workers.d.ts +80 -0
  735. package/dist/next-node/workers/workers.d.ts.map +1 -0
  736. package/dist/next-node/workers/workers.js +572 -0
  737. package/dist/next-node/workers/workers.js.map +1 -0
  738. package/dist/object.d.ts +4 -4
  739. package/dist/object.d.ts.map +1 -1
  740. package/dist/object.js +3 -4
  741. package/dist/object.js.map +1 -1
  742. package/dist/output.d.ts +1 -1
  743. package/dist/output.d.ts.map +1 -1
  744. package/dist/output.js +4 -2
  745. package/dist/output.js.map +1 -1
  746. package/dist/remote.d.ts.map +1 -1
  747. package/dist/remote.js +2 -2
  748. package/dist/remote.js.map +1 -1
  749. package/dist/schema.d.ts +8 -4
  750. package/dist/schema.d.ts.map +1 -1
  751. package/dist/schema.js +180 -5
  752. package/dist/schema.js.map +1 -1
  753. package/dist/sqlite/cloudflare.d.ts +2 -0
  754. package/dist/sqlite/cloudflare.d.ts.map +1 -1
  755. package/dist/sqlite/cloudflare.js +10 -0
  756. package/dist/sqlite/cloudflare.js.map +1 -1
  757. package/dist/sqlite/database.d.ts +5 -2
  758. package/dist/sqlite/database.d.ts.map +1 -1
  759. package/dist/sqlite/database.js.map +1 -1
  760. package/dist/sqlite/node.d.ts +4 -1
  761. package/dist/sqlite/node.d.ts.map +1 -1
  762. package/dist/sqlite/node.js +22 -5
  763. package/dist/sqlite/node.js.map +1 -1
  764. package/dist/watch.d.ts +194 -0
  765. package/dist/watch.d.ts.map +1 -0
  766. package/dist/watch.js +383 -0
  767. package/dist/watch.js.map +1 -0
  768. package/dist/wire.d.ts +174 -193
  769. package/dist/wire.d.ts.map +1 -1
  770. package/dist/wire.js +81 -80
  771. package/dist/wire.js.map +1 -1
  772. package/docs/guide.md +15 -15
  773. package/docs/next/benchmarks.md +959 -0
  774. package/docs/next/decisions.md +2957 -0
  775. package/docs/next/dependencies/book.md +1671 -0
  776. package/docs/next/dependencies/index.html +2641 -0
  777. package/docs/next/dependencies/model.md +330 -0
  778. package/docs/next/design.md +2554 -0
  779. package/docs/next/durable-observers/book.md +432 -0
  780. package/docs/next/durable-observers/index.html +517 -0
  781. package/docs/next/flow-control/book.md +333 -0
  782. package/docs/next/flow-control/fold/index.html +265 -0
  783. package/docs/next/flow-control/index.html +548 -0
  784. package/docs/next/flow-control/window/index.html +228 -0
  785. package/docs/next/guide-plugins-hosts/book.md +607 -0
  786. package/docs/next/guide-plugins-hosts/index.html +652 -0
  787. package/docs/next/http-workers/book.md +378 -0
  788. package/docs/next/http-workers/index.html +515 -0
  789. package/docs/next/layer-1.md +311 -0
  790. package/docs/next/layer-2.md +216 -0
  791. package/docs/next/plugin-model/book.md +186 -0
  792. package/docs/next/plugin-model/index.html +310 -0
  793. package/docs/next/plugin-primer/book.md +273 -0
  794. package/docs/next/plugin-primer/index.html +430 -0
  795. package/docs/next/slice-1.md +236 -0
  796. package/docs/next/slice-10.md +285 -0
  797. package/docs/next/slice-11.md +93 -0
  798. package/docs/next/slice-2.md +174 -0
  799. package/docs/next/slice-3a.md +296 -0
  800. package/docs/next/slice-3b.md +197 -0
  801. package/docs/next/slice-4.md +146 -0
  802. package/docs/next/slice-4a.md +418 -0
  803. package/docs/next/slice-4b.md +208 -0
  804. package/docs/next/slice-5.md +281 -0
  805. package/docs/next/slice-6a.md +676 -0
  806. package/docs/next/slice-6b.md +332 -0
  807. package/docs/next/slice-7a.md +130 -0
  808. package/docs/next/slice-7b/book.md +608 -0
  809. package/docs/next/slice-7b/index.html +842 -0
  810. package/docs/next/slice-7b.md +255 -0
  811. package/docs/next/slice-7c.md +165 -0
  812. package/docs/next/slice-8.md +194 -0
  813. package/docs/next/slices.md +230 -0
  814. package/docs/next/store/book.md +665 -0
  815. package/docs/next/store/index.html +861 -0
  816. package/docs/next/store/walkthrough.md +193 -0
  817. package/docs/spec.md +9 -9
  818. package/docs/tutorial.md +26 -25
  819. package/package.json +22 -6
  820. package/src/delta/README.md +69 -0
@@ -0,0 +1,94 @@
1
+ // File responses (slice 10 §2; decision "Slice 10 fix round, three small points" (1)): a file as a `bytes` response.
2
+ // `fileResponse` stats the file at once (with a `root`, its real path must lie inside it); the file handle is opened by
3
+ // the first `read` and closed when the request's scope seals (its signal aborts), so a response nobody writes (`HEAD`,
4
+ // a 416, a disconnect, a wrap that replaced it) opens nothing and leaks nothing.
5
+ import { open, realpath, stat } from "node:fs/promises";
6
+ import { basename, extname, sep } from "node:path";
7
+ import { HttpFailure } from "./request.js";
8
+ /**
9
+ * The file at `path` as a `bytes` response; `HttpFailure` 404 for a missing one (anyone may ask for one: no failure
10
+ * of the route, Fable's recheck N1), 403 for one outside `root`; throws what else `stat` throws.
11
+ */
12
+ export async function fileResponse(given, options = {}) {
13
+ let path;
14
+ let size;
15
+ try {
16
+ path = options.root === undefined ? given : await inside(given, options.root);
17
+ ({ size } = await stat(path));
18
+ }
19
+ catch (error) {
20
+ const code = error.code;
21
+ if (code === "ENOENT" || code === "ENOTDIR")
22
+ throw new HttpFailure(404, "no such file");
23
+ throw error;
24
+ }
25
+ let handle;
26
+ const read = async (offset, length, context) => {
27
+ handle ??= opened(path, context);
28
+ const file = await handle;
29
+ // Only the bytes read are handed out.
30
+ const buffer = Buffer.allocUnsafe(length);
31
+ const { bytesRead } = await file.read(buffer, 0, length, offset);
32
+ return buffer.subarray(0, bytesRead);
33
+ };
34
+ return {
35
+ kind: "bytes",
36
+ mime: options.mime ?? mimeOf(path),
37
+ size,
38
+ read,
39
+ ...(options.download === undefined ? {} : { download: options.download }),
40
+ ...(options.inline === undefined ? {} : { inline: options.inline }),
41
+ ...(options.ranges === undefined ? {} : { ranges: options.ranges }),
42
+ };
43
+ }
44
+ /** The real path of `path` when it lies inside `root`'s real path; `HttpFailure` 403 otherwise. */
45
+ async function inside(path, root) {
46
+ const [real, base] = await Promise.all([realpath(path), realpath(root)]);
47
+ if (real !== base && !real.startsWith(base.endsWith(sep) ? base : base + sep)) {
48
+ throw new HttpFailure(403, "the file lies outside its root");
49
+ }
50
+ return real;
51
+ }
52
+ /** Opens `path`, closed when `context` (the request's scope) aborts; at once when it aborted already. */
53
+ async function opened(path, context) {
54
+ const file = await open(path, "r");
55
+ const close = () => void file.close().catch(() => { });
56
+ const signal = context.abortSignal;
57
+ if (signal === undefined)
58
+ throw new Error(`fileResponse(${basename(path)}): read outside a request's scope`);
59
+ if (signal.aborted)
60
+ close();
61
+ else
62
+ signal.addEventListener("abort", close, { once: true });
63
+ return file;
64
+ }
65
+ const MIME = {
66
+ ".txt": "text/plain; charset=utf-8",
67
+ ".log": "text/plain; charset=utf-8",
68
+ ".md": "text/markdown; charset=utf-8",
69
+ ".csv": "text/csv; charset=utf-8",
70
+ ".json": "application/json",
71
+ ".png": "image/png",
72
+ ".jpg": "image/jpeg",
73
+ ".jpeg": "image/jpeg",
74
+ ".gif": "image/gif",
75
+ ".webp": "image/webp",
76
+ ".avif": "image/avif",
77
+ ".mp3": "audio/mpeg",
78
+ ".m4a": "audio/mp4",
79
+ ".ogg": "audio/ogg",
80
+ ".opus": "audio/ogg",
81
+ ".wav": "audio/wav",
82
+ ".flac": "audio/flac",
83
+ ".mp4": "video/mp4",
84
+ ".webm": "video/webm",
85
+ ".mov": "video/quicktime",
86
+ };
87
+ /**
88
+ * The type of `path` by its extension: text, images, audio and video only. Active types (HTML, SVG) never come from
89
+ * here: a route serving one names it (`mime`).
90
+ */
91
+ function mimeOf(path) {
92
+ return MIME[extname(path).toLowerCase()] ?? "application/octet-stream";
93
+ }
94
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/next-node/http/file.ts"],"names":[],"mappings":"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","sourcesContent":["// File responses (slice 10 §2; decision \"Slice 10 fix round, three small points\" (1)): a file as a `bytes` response.\n// `fileResponse` stats the file at once (with a `root`, its real path must lie inside it); the file handle is opened by\n// the first `read` and closed when the request's scope seals (its signal aborts), so a response nobody writes (`HEAD`,\n// a 416, a disconnect, a wrap that replaced it) opens nothing and leaks nothing.\n\nimport { type FileHandle, open, realpath, stat } from \"node:fs/promises\";\nimport { basename, extname, sep } from \"node:path\";\nimport type { Context } from \"../../context/index.ts\";\nimport { HttpFailure } from \"./request.ts\";\nimport type { HttpResponse } from \"./response.ts\";\n\n/** What `fileResponse` takes besides the path. */\nexport type FileResponseOptions = {\n\t/** Saved under this name. */\n\treadonly download?: string;\n\t/** Shown in the browser instead of saved (an image, a video), with a `sandbox` CSP. */\n\treadonly inline?: true;\n\t/**\n\t * The directory the file must lie in once its symbolic links are resolved: one outside it (a link out) is refused\n\t * 403. Without it the path is trusted (a plugin's own file).\n\t */\n\treadonly root?: string;\n\t/** Whether a single range is answered 206 (audio and video seek with it). */\n\treadonly ranges?: boolean;\n\t/** The type; by default from the extension (text, images, audio, video), else `application/octet-stream`. */\n\treadonly mime?: string;\n};\n\n/**\n * The file at `path` as a `bytes` response; `HttpFailure` 404 for a missing one (anyone may ask for one: no failure\n * of the route, Fable's recheck N1), 403 for one outside `root`; throws what else `stat` throws.\n */\nexport async function fileResponse(given: string, options: FileResponseOptions = {}): Promise<HttpResponse> {\n\tlet path: string;\n\tlet size: number;\n\ttry {\n\t\tpath = options.root === undefined ? given : await inside(given, options.root);\n\t\t({ size } = await stat(path));\n\t} catch (error) {\n\t\tconst code = (error as NodeJS.ErrnoException).code;\n\t\tif (code === \"ENOENT\" || code === \"ENOTDIR\") throw new HttpFailure(404, \"no such file\");\n\t\tthrow error;\n\t}\n\tlet handle: Promise<FileHandle> | undefined;\n\tconst read = async (offset: number, length: number, context: Context): Promise<Uint8Array> => {\n\t\thandle ??= opened(path, context);\n\t\tconst file = await handle;\n\t\t// Only the bytes read are handed out.\n\t\tconst buffer = Buffer.allocUnsafe(length);\n\t\tconst { bytesRead } = await file.read(buffer, 0, length, offset);\n\t\treturn buffer.subarray(0, bytesRead);\n\t};\n\treturn {\n\t\tkind: \"bytes\",\n\t\tmime: options.mime ?? mimeOf(path),\n\t\tsize,\n\t\tread,\n\t\t...(options.download === undefined ? {} : { download: options.download }),\n\t\t...(options.inline === undefined ? {} : { inline: options.inline }),\n\t\t...(options.ranges === undefined ? {} : { ranges: options.ranges }),\n\t};\n}\n\n/** The real path of `path` when it lies inside `root`'s real path; `HttpFailure` 403 otherwise. */\nasync function inside(path: string, root: string): Promise<string> {\n\tconst [real, base] = await Promise.all([realpath(path), realpath(root)]);\n\tif (real !== base && !real.startsWith(base.endsWith(sep) ? base : base + sep)) {\n\t\tthrow new HttpFailure(403, \"the file lies outside its root\");\n\t}\n\treturn real;\n}\n\n/** Opens `path`, closed when `context` (the request's scope) aborts; at once when it aborted already. */\nasync function opened(path: string, context: Context): Promise<FileHandle> {\n\tconst file = await open(path, \"r\");\n\tconst close = (): void => void file.close().catch(() => {});\n\tconst signal = context.abortSignal;\n\tif (signal === undefined) throw new Error(`fileResponse(${basename(path)}): read outside a request's scope`);\n\tif (signal.aborted) close();\n\telse signal.addEventListener(\"abort\", close, { once: true });\n\treturn file;\n}\n\nconst MIME: Readonly<Record<string, string>> = {\n\t\".txt\": \"text/plain; charset=utf-8\",\n\t\".log\": \"text/plain; charset=utf-8\",\n\t\".md\": \"text/markdown; charset=utf-8\",\n\t\".csv\": \"text/csv; charset=utf-8\",\n\t\".json\": \"application/json\",\n\t\".png\": \"image/png\",\n\t\".jpg\": \"image/jpeg\",\n\t\".jpeg\": \"image/jpeg\",\n\t\".gif\": \"image/gif\",\n\t\".webp\": \"image/webp\",\n\t\".avif\": \"image/avif\",\n\t\".mp3\": \"audio/mpeg\",\n\t\".m4a\": \"audio/mp4\",\n\t\".ogg\": \"audio/ogg\",\n\t\".opus\": \"audio/ogg\",\n\t\".wav\": \"audio/wav\",\n\t\".flac\": \"audio/flac\",\n\t\".mp4\": \"video/mp4\",\n\t\".webm\": \"video/webm\",\n\t\".mov\": \"video/quicktime\",\n};\n\n/**\n * The type of `path` by its extension: text, images, audio and video only. Active types (HTML, SVG) never come from\n * here: a route serving one names it (`mime`).\n */\nfunction mimeOf(path: string): string {\n\treturn MIME[extname(path).toLowerCase()] ?? \"application/octet-stream\";\n}\n"]}
@@ -0,0 +1,37 @@
1
+ import type { Admitted } from "./admission.ts";
2
+ import type { Router } from "./router.ts";
3
+ /** A response's headers as the component builds them: by lowercased name, each value checked when set. */
4
+ export declare class AnswerHeaders {
5
+ #private;
6
+ /** The values of `name` joined with `", "`, or `null`. */
7
+ get(name: string): string | null;
8
+ has(name: string): boolean;
9
+ /**
10
+ * Sets `name` to `value` (several values: one header line each, as `Set-Cookie` needs), replacing a same-named one;
11
+ * throws `TypeError` for a name or value HTTP cannot carry.
12
+ */
13
+ set(name: string, value: string | readonly string[]): void;
14
+ delete(name: string): void;
15
+ /** Each header line as `[name as set, value]`. */
16
+ lines(): IterableIterator<readonly [string, string]>;
17
+ }
18
+ /** Fresh script nonces, one per response: 16 random bytes each, base64, cut from a pool filled 4 KiB at a time. */
19
+ export declare class Nonces {
20
+ #private;
21
+ /** The next nonce (never one handed out before). */
22
+ next(): string;
23
+ }
24
+ /**
25
+ * The default headers of one component's responses. The CSP around the nonce is kept per router and origin for local
26
+ * and allowed-host requests (a bounded set: the hosts contributions name); a relayed request's origins come from its
27
+ * relay and are never kept (Fable's and Opus's rechecks: a cache growing with each relayed origin).
28
+ */
29
+ export declare class DefaultHeaders {
30
+ #private;
31
+ /**
32
+ * The default headers of a response to a request admitted as `admitted` (none: refused before admission), with
33
+ * `router`'s framers and CSP sources (none before the router is resolved), its CSP allowing scripts with `nonce`.
34
+ */
35
+ of(admitted: Admitted | undefined, router: Router | undefined, nonce: string): AnswerHeaders;
36
+ }
37
+ //# sourceMappingURL=headers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../../src/next-node/http/headers.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,0GAA0G;AAC1G,qBAAa,aAAa;;IAIzB,0DAA0D;IAC1D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE/B;IAED,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzB;IAED;;;OAGG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,CAOzD;IAED,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEzB;IAED,kDAAkD;IACjD,KAAK,IAAI,gBAAgB,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAEpD;CACD;AAQD,mHAAmH;AACnH,qBAAa,MAAM;;IAIlB,oDAAoD;IACpD,IAAI,IAAI,MAAM,CASb;CACD;AAED;;;;GAIG;AACH,qBAAa,cAAc;;IAI1B;;;OAGG;IACH,EAAE,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAU3F;CAiBD"}
@@ -0,0 +1,129 @@
1
+ // The default headers (decision "The HTTP component's security baseline" (4), "A CSP nonce per response"): on every
2
+ // response, the component's own included: no caching, no sniffing, no referrer, no framing but by the contributed
3
+ // framers, and a CSP with the response's own script nonce. A response's own headers replace same-named ones (a route
4
+ // widens its own CSP); they are validated as they are set, so a CR or LF never reaches the wire.
5
+ import { randomFillSync } from "node:crypto";
6
+ /** A response's headers as the component builds them: by lowercased name, each value checked when set. */
7
+ export class AnswerHeaders {
8
+ /** By lowercased name: the name as set and its values (several only for a header sent more than once). */
9
+ #entries = new Map();
10
+ /** The values of `name` joined with `", "`, or `null`. */
11
+ get(name) {
12
+ return this.#entries.get(name.toLowerCase())?.values.join(", ") ?? null;
13
+ }
14
+ has(name) {
15
+ return this.#entries.has(name.toLowerCase());
16
+ }
17
+ /**
18
+ * Sets `name` to `value` (several values: one header line each, as `Set-Cookie` needs), replacing a same-named one;
19
+ * throws `TypeError` for a name or value HTTP cannot carry.
20
+ */
21
+ set(name, value) {
22
+ if (!TOKEN.test(name))
23
+ throw new TypeError(`header: invalid name ${JSON.stringify(name)}`);
24
+ const values = typeof value === "string" ? [value] : value;
25
+ for (const each of values) {
26
+ if (!FIELD_VALUE.test(each))
27
+ throw new TypeError(`header ${name}: invalid value ${JSON.stringify(each)}`);
28
+ }
29
+ this.#entries.set(name.toLowerCase(), { name, values });
30
+ }
31
+ delete(name) {
32
+ this.#entries.delete(name.toLowerCase());
33
+ }
34
+ /** Each header line as `[name as set, value]`. */
35
+ *lines() {
36
+ for (const { name, values } of this.#entries.values())
37
+ for (const value of values)
38
+ yield [name, value];
39
+ }
40
+ }
41
+ /** A header name: an HTTP token. */
42
+ const TOKEN = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;
43
+ /** A header value: visible Latin-1, spaces and tabs; no CR, LF or NUL. */
44
+ const FIELD_VALUE = /^[\t\x20-\x7e\x80-\xff]*$/;
45
+ /** Fresh script nonces, one per response: 16 random bytes each, base64, cut from a pool filled 4 KiB at a time. */
46
+ export class Nonces {
47
+ #pool = Buffer.allocUnsafe(4096);
48
+ #at = 4096;
49
+ /** The next nonce (never one handed out before). */
50
+ next() {
51
+ // One `randomFillSync` per 256 nonces: `randomBytes(16)` per response costs 1.6 µs.
52
+ if (this.#at === this.#pool.length) {
53
+ randomFillSync(this.#pool);
54
+ this.#at = 0;
55
+ }
56
+ const nonce = this.#pool.toString("base64", this.#at, this.#at + 16);
57
+ this.#at += 16;
58
+ return nonce;
59
+ }
60
+ }
61
+ /**
62
+ * The default headers of one component's responses. The CSP around the nonce is kept per router and origin for local
63
+ * and allowed-host requests (a bounded set: the hosts contributions name); a relayed request's origins come from its
64
+ * relay and are never kept (Fable's and Opus's rechecks: a cache growing with each relayed origin).
65
+ */
66
+ export class DefaultHeaders {
67
+ /** By router (its change makes new ones), then by origin: the CSP's text before and after the nonce. */
68
+ #policies = new WeakMap();
69
+ /**
70
+ * The default headers of a response to a request admitted as `admitted` (none: refused before admission), with
71
+ * `router`'s framers and CSP sources (none before the router is resolved), its CSP allowing scripts with `nonce`.
72
+ */
73
+ of(admitted, router, nonce) {
74
+ const headers = new AnswerHeaders();
75
+ headers.set("Cache-Control", "no-store");
76
+ headers.set("X-Content-Type-Options", "nosniff");
77
+ headers.set("Referrer-Policy", "no-referrer");
78
+ // `X-Frame-Options` names no origin: with framers, only `frame-ancestors` speaks.
79
+ if ((router?.framers.size ?? 0) === 0 && admitted?.framer === undefined)
80
+ headers.set("X-Frame-Options", "DENY");
81
+ const [before, after] = this.#policy(admitted, router);
82
+ headers.set("Content-Security-Policy", `${before}${nonce}${after}`);
83
+ return headers;
84
+ }
85
+ /** The CSP's text around the nonce for `admitted` under `router`. */
86
+ #policy(admitted, router) {
87
+ if (router === undefined || admitted === undefined || admitted.relay !== undefined)
88
+ return csp(admitted, router);
89
+ let policies = this.#policies.get(router);
90
+ if (policies === undefined) {
91
+ policies = new Map();
92
+ this.#policies.set(router, policies);
93
+ }
94
+ let policy = policies.get(admitted.origin);
95
+ if (policy === undefined) {
96
+ policy = csp(admitted, router);
97
+ policies.set(admitted.origin, policy);
98
+ }
99
+ return policy;
100
+ }
101
+ }
102
+ /**
103
+ * The CSP's text before and after the nonce: nothing by default, scripts from this origin or with the nonce,
104
+ * connections to it and its WebSocket, framing by the framers, plus contributed sources.
105
+ */
106
+ function csp(admitted, router) {
107
+ const framers = [...(router?.framers ?? [])];
108
+ if (admitted?.framer !== undefined)
109
+ framers.push(admitted.framer);
110
+ const directives = new Map([
111
+ ["default-src", ["'none'"]],
112
+ ["script-src", ["'self'", NONCE]],
113
+ ["connect-src", ["'self'", ...(admitted === undefined ? [] : [admitted.origin.replace(/^http/, "ws")])]],
114
+ ["base-uri", ["'none'"]],
115
+ ["form-action", ["'self'"]],
116
+ ["frame-ancestors", framers.length === 0 ? ["'none'"] : framers],
117
+ ]);
118
+ for (const [directive, sources] of router?.csp ?? []) {
119
+ const current = directives.get(directive);
120
+ // A directive the baseline sets to 'none' is replaced by the sources given for it.
121
+ directives.set(directive, current === undefined || current[0] === "'none'" ? [...sources] : [...current, ...sources]);
122
+ }
123
+ const text = [...directives].map(([directive, sources]) => `${directive} ${sources.join(" ")}`).join("; ");
124
+ const at = text.indexOf(NONCE);
125
+ return [`${text.slice(0, at)}'nonce-`, `'${text.slice(at + NONCE.length)}`];
126
+ }
127
+ /** Where the nonce goes in the CSP's text while it is made. */
128
+ const NONCE = "\0nonce\0";
129
+ //# sourceMappingURL=headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headers.js","sourceRoot":"","sources":["../../../src/next-node/http/headers.ts"],"names":[],"mappings":"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","sourcesContent":["// The default headers (decision \"The HTTP component's security baseline\" (4), \"A CSP nonce per response\"): on every\n// response, the component's own included: no caching, no sniffing, no referrer, no framing but by the contributed\n// framers, and a CSP with the response's own script nonce. A response's own headers replace same-named ones (a route\n// widens its own CSP); they are validated as they are set, so a CR or LF never reaches the wire.\n\nimport { randomFillSync } from \"node:crypto\";\nimport type { Admitted } from \"./admission.ts\";\nimport type { Router } from \"./router.ts\";\n\n/** A response's headers as the component builds them: by lowercased name, each value checked when set. */\nexport class AnswerHeaders {\n\t/** By lowercased name: the name as set and its values (several only for a header sent more than once). */\n\treadonly #entries = new Map<string, { readonly name: string; readonly values: readonly string[] }>();\n\n\t/** The values of `name` joined with `\", \"`, or `null`. */\n\tget(name: string): string | null {\n\t\treturn this.#entries.get(name.toLowerCase())?.values.join(\", \") ?? null;\n\t}\n\n\thas(name: string): boolean {\n\t\treturn this.#entries.has(name.toLowerCase());\n\t}\n\n\t/**\n\t * Sets `name` to `value` (several values: one header line each, as `Set-Cookie` needs), replacing a same-named one;\n\t * throws `TypeError` for a name or value HTTP cannot carry.\n\t */\n\tset(name: string, value: string | readonly string[]): void {\n\t\tif (!TOKEN.test(name)) throw new TypeError(`header: invalid name ${JSON.stringify(name)}`);\n\t\tconst values = typeof value === \"string\" ? [value] : value;\n\t\tfor (const each of values) {\n\t\t\tif (!FIELD_VALUE.test(each)) throw new TypeError(`header ${name}: invalid value ${JSON.stringify(each)}`);\n\t\t}\n\t\tthis.#entries.set(name.toLowerCase(), { name, values });\n\t}\n\n\tdelete(name: string): void {\n\t\tthis.#entries.delete(name.toLowerCase());\n\t}\n\n\t/** Each header line as `[name as set, value]`. */\n\t*lines(): IterableIterator<readonly [string, string]> {\n\t\tfor (const { name, values } of this.#entries.values()) for (const value of values) yield [name, value];\n\t}\n}\n\n/** A header name: an HTTP token. */\nconst TOKEN = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/;\n\n/** A header value: visible Latin-1, spaces and tabs; no CR, LF or NUL. */\nconst FIELD_VALUE = /^[\\t\\x20-\\x7e\\x80-\\xff]*$/;\n\n/** Fresh script nonces, one per response: 16 random bytes each, base64, cut from a pool filled 4 KiB at a time. */\nexport class Nonces {\n\treadonly #pool = Buffer.allocUnsafe(4096);\n\t#at = 4096;\n\n\t/** The next nonce (never one handed out before). */\n\tnext(): string {\n\t\t// One `randomFillSync` per 256 nonces: `randomBytes(16)` per response costs 1.6 µs.\n\t\tif (this.#at === this.#pool.length) {\n\t\t\trandomFillSync(this.#pool);\n\t\t\tthis.#at = 0;\n\t\t}\n\t\tconst nonce = this.#pool.toString(\"base64\", this.#at, this.#at + 16);\n\t\tthis.#at += 16;\n\t\treturn nonce;\n\t}\n}\n\n/**\n * The default headers of one component's responses. The CSP around the nonce is kept per router and origin for local\n * and allowed-host requests (a bounded set: the hosts contributions name); a relayed request's origins come from its\n * relay and are never kept (Fable's and Opus's rechecks: a cache growing with each relayed origin).\n */\nexport class DefaultHeaders {\n\t/** By router (its change makes new ones), then by origin: the CSP's text before and after the nonce. */\n\treadonly #policies = new WeakMap<Router, Map<string, readonly [string, string]>>();\n\n\t/**\n\t * The default headers of a response to a request admitted as `admitted` (none: refused before admission), with\n\t * `router`'s framers and CSP sources (none before the router is resolved), its CSP allowing scripts with `nonce`.\n\t */\n\tof(admitted: Admitted | undefined, router: Router | undefined, nonce: string): AnswerHeaders {\n\t\tconst headers = new AnswerHeaders();\n\t\theaders.set(\"Cache-Control\", \"no-store\");\n\t\theaders.set(\"X-Content-Type-Options\", \"nosniff\");\n\t\theaders.set(\"Referrer-Policy\", \"no-referrer\");\n\t\t// `X-Frame-Options` names no origin: with framers, only `frame-ancestors` speaks.\n\t\tif ((router?.framers.size ?? 0) === 0 && admitted?.framer === undefined) headers.set(\"X-Frame-Options\", \"DENY\");\n\t\tconst [before, after] = this.#policy(admitted, router);\n\t\theaders.set(\"Content-Security-Policy\", `${before}${nonce}${after}`);\n\t\treturn headers;\n\t}\n\n\t/** The CSP's text around the nonce for `admitted` under `router`. */\n\t#policy(admitted: Admitted | undefined, router: Router | undefined): readonly [string, string] {\n\t\tif (router === undefined || admitted === undefined || admitted.relay !== undefined) return csp(admitted, router);\n\t\tlet policies = this.#policies.get(router);\n\t\tif (policies === undefined) {\n\t\t\tpolicies = new Map();\n\t\t\tthis.#policies.set(router, policies);\n\t\t}\n\t\tlet policy = policies.get(admitted.origin);\n\t\tif (policy === undefined) {\n\t\t\tpolicy = csp(admitted, router);\n\t\t\tpolicies.set(admitted.origin, policy);\n\t\t}\n\t\treturn policy;\n\t}\n}\n\n/**\n * The CSP's text before and after the nonce: nothing by default, scripts from this origin or with the nonce,\n * connections to it and its WebSocket, framing by the framers, plus contributed sources.\n */\nfunction csp(admitted: Admitted | undefined, router: Router | undefined): readonly [string, string] {\n\tconst framers = [...(router?.framers ?? [])];\n\tif (admitted?.framer !== undefined) framers.push(admitted.framer);\n\tconst directives = new Map<string, string[]>([\n\t\t[\"default-src\", [\"'none'\"]],\n\t\t[\"script-src\", [\"'self'\", NONCE]],\n\t\t[\"connect-src\", [\"'self'\", ...(admitted === undefined ? [] : [admitted.origin.replace(/^http/, \"ws\")])]],\n\t\t[\"base-uri\", [\"'none'\"]],\n\t\t[\"form-action\", [\"'self'\"]],\n\t\t[\"frame-ancestors\", framers.length === 0 ? [\"'none'\"] : framers],\n\t]);\n\tfor (const [directive, sources] of router?.csp ?? []) {\n\t\tconst current = directives.get(directive);\n\t\t// A directive the baseline sets to 'none' is replaced by the sources given for it.\n\t\tdirectives.set(\n\t\t\tdirective,\n\t\t\tcurrent === undefined || current[0] === \"'none'\" ? [...sources] : [...current, ...sources],\n\t\t);\n\t}\n\tconst text = [...directives].map(([directive, sources]) => `${directive} ${sources.join(\" \")}`).join(\"; \");\n\tconst at = text.indexOf(NONCE);\n\treturn [`${text.slice(0, at)}'nonce-`, `'${text.slice(at + NONCE.length)}`];\n}\n\n/** Where the nonce goes in the CSP's text while it is made. */\nconst NONCE = \"\\0nonce\\0\";\n"]}
@@ -0,0 +1,100 @@
1
+ import type { IncomingMessage } from "node:http";
2
+ import type { Duplex } from "node:stream";
3
+ import { type Context } from "../../context/index.ts";
4
+ import { type Principal } from "../../next/data/index.ts";
5
+ import { type Facet, type Host } from "../../next/host/index.ts";
6
+ import { type Connection } from "./admission.ts";
7
+ import { type ListenAddress } from "./node.ts";
8
+ import { type HttpRequest } from "./request.ts";
9
+ import { type LinkOptions } from "./upgrades.ts";
10
+ /** What `createHttp` takes: the app's settings, fixed for the component's life (changing one is a restart). */
11
+ export type HttpOptions = {
12
+ /** Where Chord's own listener listens; none: no listener (an app mounting `fetch`). Port 0 picks one. */
13
+ readonly listen?: ListenAddress;
14
+ /** The links endpoint: its path, and each socket's options, a value or per request and principal. */
15
+ readonly links?: LinksOptions;
16
+ /** How long `close` waits for running requests and closing sockets: 30 s by default. */
17
+ readonly closeTimeout?: number;
18
+ readonly onError: (error: HttpError) => void;
19
+ };
20
+ /** The links endpoint's path and what it gives each socket (`maxPayload` 1 MiB by default). */
21
+ export type LinksOptions = {
22
+ readonly path: string;
23
+ readonly options?: LinkOptions | ((request: HttpRequest, principal: Principal) => LinkOptions);
24
+ };
25
+ /** What the component reports. */
26
+ export type HttpError = {
27
+ readonly kind: "route_failed";
28
+ readonly pattern: string;
29
+ readonly plugin: string;
30
+ readonly error: unknown;
31
+ } | {
32
+ readonly kind: "wrap_failed";
33
+ readonly name: string;
34
+ readonly plugin: string;
35
+ readonly error: unknown;
36
+ } | {
37
+ readonly kind: "socket_failed";
38
+ readonly pattern: string;
39
+ readonly plugin: string;
40
+ readonly error: unknown;
41
+ }
42
+ /** A response that could not be made (an invalid header, no JSON) or read whole (a `bytes` read that threw). */
43
+ | {
44
+ readonly kind: "response_failed";
45
+ readonly pattern: string;
46
+ readonly error: unknown;
47
+ }
48
+ /** A contributed hook threw (`plugin`), or the app's `links.options` (no plugin). */
49
+ | {
50
+ readonly kind: "hook_failed";
51
+ readonly hook: HookName;
52
+ readonly plugin?: string;
53
+ readonly error: unknown;
54
+ };
55
+ /** The hooks the component calls. */
56
+ export type HookName = "authenticate" | "relay" | "links.options";
57
+ /** The running component. */
58
+ export interface HttpComponent<P extends Principal> {
59
+ /**
60
+ * Its facet (plugin `chord.http`): serves `Http` and `Authenticators`, and with `listen` the listener, a
61
+ * host-lifetime object. The app loads it among its core facets, the same object at every reload.
62
+ */
63
+ readonly facet: Facet<P>;
64
+ /**
65
+ * Answers a Web `Request` (an app's own server mounts it: `hono.all("/*", (c) => http.fetch(c.req.raw, …))`);
66
+ * `connection` is what the server knows of the socket: without `localAddress` and `localPort` no request is local.
67
+ * Requests before the publication wait for it (503 past the host's `readyTimeout`).
68
+ */
69
+ fetch(request: Request, connection?: Connection): Promise<Response>;
70
+ /** Node's upgrade adapter (`server.on("upgrade", http.upgrade)`): the links endpoint and plugin sockets. */
71
+ readonly upgrade: (message: IncomingMessage, socket: Duplex, head: Buffer) => void;
72
+ /** Where the listener listens, once it does (the real port when `listen.port` was 0). */
73
+ listening(context: Context): Promise<ListenAddress>;
74
+ /**
75
+ * Refuses new requests and upgrades (503), closes sockets and links (1001, terminated at `closeTimeout`), waits for
76
+ * running requests up to `closeTimeout` (an aborted `context`: not at all), then seals them. Run it before
77
+ * `host.close`, which seals every request's scope at once (the listener's close runs it then, too late to drain).
78
+ */
79
+ close(context: Context): Promise<void>;
80
+ }
81
+ /** Builds the HTTP component on `host` (a request's scope is a `host.root` with its principal). */
82
+ export declare function createHttp<P extends Principal>(host: Host<P>, options: HttpOptions, context: Context): HttpComponent<P>;
83
+ /** The listener: a host-lifetime object of plugin `chord.http` whose native is Chord's own Node server. */
84
+ export declare const HttpListener: import("../../next/contracts/contract.ts").Contract<{
85
+ kind: "local";
86
+ name: "chord.http.listener";
87
+ params: {};
88
+ history: [{
89
+ version: "1";
90
+ variants: {
91
+ members: {
92
+ state: {};
93
+ methods: {};
94
+ keyed: {};
95
+ };
96
+ };
97
+ changes: never;
98
+ }];
99
+ }>;
100
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/next-node/http/http.ts"],"names":[],"mappings":"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"}