@earendil-works/chord 1.4.0 → 1.5.1

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 (1299) hide show
  1. package/CHANGELOG.md +92 -0
  2. package/README.md +115 -90
  3. package/dist/context/index.d.ts +1 -1
  4. package/dist/context/index.d.ts.map +1 -1
  5. package/dist/context/index.js +1 -1
  6. package/dist/context/index.js.map +1 -1
  7. package/dist/contracts/accepts.d.ts +81 -0
  8. package/dist/contracts/accepts.d.ts.map +1 -0
  9. package/dist/contracts/accepts.js +123 -0
  10. package/dist/contracts/accepts.js.map +1 -0
  11. package/dist/contracts/contract.d.ts +121 -0
  12. package/dist/contracts/contract.d.ts.map +1 -0
  13. package/dist/contracts/contract.js +50 -0
  14. package/dist/contracts/contract.js.map +1 -0
  15. package/dist/contracts/declare.d.ts +107 -0
  16. package/dist/contracts/declare.d.ts.map +1 -0
  17. package/dist/contracts/declare.js +136 -0
  18. package/dist/contracts/declare.js.map +1 -0
  19. package/dist/contracts/evolve.d.ts +92 -0
  20. package/dist/contracts/evolve.d.ts.map +1 -0
  21. package/dist/contracts/evolve.js +179 -0
  22. package/dist/contracts/evolve.js.map +1 -0
  23. package/dist/contracts/fingerprint.d.ts +16 -0
  24. package/dist/contracts/fingerprint.d.ts.map +1 -0
  25. package/dist/contracts/fingerprint.js +50 -0
  26. package/dist/contracts/fingerprint.js.map +1 -0
  27. package/dist/contracts/history.d.ts +71 -0
  28. package/dist/contracts/history.d.ts.map +1 -0
  29. package/dist/contracts/history.js +3 -0
  30. package/dist/contracts/history.js.map +1 -0
  31. package/dist/contracts/host-kind.d.ts +40 -0
  32. package/dist/contracts/host-kind.d.ts.map +1 -0
  33. package/dist/contracts/host-kind.js +37 -0
  34. package/dist/contracts/host-kind.js.map +1 -0
  35. package/dist/contracts/index.d.ts +7 -0
  36. package/dist/contracts/index.d.ts.map +1 -0
  37. package/dist/contracts/index.js +6 -0
  38. package/dist/contracts/index.js.map +1 -0
  39. package/dist/contracts/internal.d.ts +10 -0
  40. package/dist/contracts/internal.d.ts.map +1 -0
  41. package/dist/contracts/internal.js +9 -0
  42. package/dist/contracts/internal.js.map +1 -0
  43. package/dist/contracts/names.d.ts +3 -0
  44. package/dist/contracts/names.d.ts.map +1 -0
  45. package/dist/contracts/names.js +13 -0
  46. package/dist/contracts/names.js.map +1 -0
  47. package/dist/contracts/params.d.ts +28 -0
  48. package/dist/contracts/params.d.ts.map +1 -0
  49. package/dist/contracts/params.js +50 -0
  50. package/dist/contracts/params.js.map +1 -0
  51. package/dist/contracts/schema.d.ts +102 -0
  52. package/dist/contracts/schema.d.ts.map +1 -0
  53. package/dist/contracts/schema.js +103 -0
  54. package/dist/contracts/schema.js.map +1 -0
  55. package/dist/contracts/snapshot.d.ts +16 -0
  56. package/dist/contracts/snapshot.d.ts.map +1 -0
  57. package/dist/contracts/snapshot.js +167 -0
  58. package/dist/contracts/snapshot.js.map +1 -0
  59. package/dist/data/args.d.ts +50 -0
  60. package/dist/data/args.d.ts.map +1 -0
  61. package/dist/data/args.js +83 -0
  62. package/dist/data/args.js.map +1 -0
  63. package/dist/data/errors.d.ts +80 -0
  64. package/dist/data/errors.d.ts.map +1 -0
  65. package/dist/data/errors.js +116 -0
  66. package/dist/data/errors.js.map +1 -0
  67. package/dist/data/failure.d.ts +26 -0
  68. package/dist/data/failure.d.ts.map +1 -0
  69. package/dist/data/failure.js +77 -0
  70. package/dist/data/failure.js.map +1 -0
  71. package/dist/data/index.d.ts +4 -0
  72. package/dist/data/index.d.ts.map +1 -0
  73. package/dist/data/index.js +5 -0
  74. package/dist/data/index.js.map +1 -0
  75. package/dist/data/internal.d.ts +7 -0
  76. package/dist/data/internal.d.ts.map +1 -0
  77. package/dist/data/internal.js +8 -0
  78. package/dist/data/internal.js.map +1 -0
  79. package/dist/data/params.d.ts +20 -0
  80. package/dist/data/params.d.ts.map +1 -0
  81. package/dist/data/params.js +31 -0
  82. package/dist/data/params.js.map +1 -0
  83. package/dist/data/principal.d.ts +22 -0
  84. package/dist/data/principal.d.ts.map +1 -0
  85. package/dist/data/principal.js +49 -0
  86. package/dist/data/principal.js.map +1 -0
  87. package/dist/data/validator.d.ts +12 -0
  88. package/dist/data/validator.d.ts.map +1 -0
  89. package/dist/data/validator.js +35 -0
  90. package/dist/data/validator.js.map +1 -0
  91. package/dist/delta/apply-immutable-trusted.js +3 -4
  92. package/dist/delta/apply-immutable-trusted.js.map +1 -1
  93. package/dist/delta/diff.d.ts.map +1 -1
  94. package/dist/delta/diff.js +5 -3
  95. package/dist/delta/diff.js.map +1 -1
  96. package/dist/delta/index.d.ts +9 -1
  97. package/dist/delta/index.d.ts.map +1 -1
  98. package/dist/delta/index.js +15 -11
  99. package/dist/delta/index.js.map +1 -1
  100. package/dist/delta/pending.d.ts +36 -0
  101. package/dist/delta/pending.d.ts.map +1 -0
  102. package/dist/delta/pending.js +143 -0
  103. package/dist/delta/pending.js.map +1 -0
  104. package/dist/delta/tracker.d.ts +12 -0
  105. package/dist/delta/tracker.d.ts.map +1 -1
  106. package/dist/delta/tracker.js +109 -39
  107. package/dist/delta/tracker.js.map +1 -1
  108. package/dist/documents/address-source.d.ts +20 -0
  109. package/dist/documents/address-source.d.ts.map +1 -0
  110. package/dist/documents/address-source.js +44 -0
  111. package/dist/documents/address-source.js.map +1 -0
  112. package/dist/documents/definition.d.ts +84 -0
  113. package/dist/documents/definition.d.ts.map +1 -0
  114. package/dist/documents/definition.js +74 -0
  115. package/dist/documents/definition.js.map +1 -0
  116. package/dist/documents/documents.d.ts +126 -0
  117. package/dist/documents/documents.d.ts.map +1 -0
  118. package/dist/documents/documents.js +248 -0
  119. package/dist/documents/documents.js.map +1 -0
  120. package/dist/documents/fence.d.ts +9 -0
  121. package/dist/documents/fence.d.ts.map +1 -0
  122. package/dist/documents/fence.js +15 -0
  123. package/dist/documents/fence.js.map +1 -0
  124. package/dist/documents/handles.d.ts +76 -0
  125. package/dist/documents/handles.d.ts.map +1 -0
  126. package/dist/documents/handles.js +66 -0
  127. package/dist/documents/handles.js.map +1 -0
  128. package/dist/documents/index.d.ts +4 -0
  129. package/dist/documents/index.d.ts.map +1 -0
  130. package/dist/documents/index.js +3 -0
  131. package/dist/documents/index.js.map +1 -0
  132. package/dist/documents/internal.d.ts +9 -0
  133. package/dist/documents/internal.d.ts.map +1 -0
  134. package/dist/documents/internal.js +9 -0
  135. package/dist/documents/internal.js.map +1 -0
  136. package/dist/documents/keyed-slot.d.ts +103 -0
  137. package/dist/documents/keyed-slot.d.ts.map +1 -0
  138. package/dist/documents/keyed-slot.js +395 -0
  139. package/dist/documents/keyed-slot.js.map +1 -0
  140. package/dist/documents/line.d.ts +7 -0
  141. package/dist/documents/line.d.ts.map +1 -0
  142. package/dist/documents/line.js +14 -0
  143. package/dist/documents/line.js.map +1 -0
  144. package/dist/documents/persistence.d.ts +104 -0
  145. package/dist/documents/persistence.d.ts.map +1 -0
  146. package/dist/documents/persistence.js +129 -0
  147. package/dist/documents/persistence.js.map +1 -0
  148. package/dist/documents/residency.d.ts +31 -0
  149. package/dist/documents/residency.d.ts.map +1 -0
  150. package/dist/documents/residency.js +93 -0
  151. package/dist/documents/residency.js.map +1 -0
  152. package/dist/documents/slot.d.ts +109 -0
  153. package/dist/documents/slot.d.ts.map +1 -0
  154. package/dist/documents/slot.js +181 -0
  155. package/dist/documents/slot.js.map +1 -0
  156. package/dist/documents/transaction.d.ts +143 -0
  157. package/dist/documents/transaction.d.ts.map +1 -0
  158. package/dist/documents/transaction.js +442 -0
  159. package/dist/documents/transaction.js.map +1 -0
  160. package/dist/host/activity.d.ts +31 -0
  161. package/dist/host/activity.d.ts.map +1 -0
  162. package/dist/host/activity.js +40 -0
  163. package/dist/host/activity.js.map +1 -0
  164. package/dist/host/adapted.d.ts +49 -0
  165. package/dist/host/adapted.d.ts.map +1 -0
  166. package/dist/host/adapted.js +214 -0
  167. package/dist/host/adapted.js.map +1 -0
  168. package/dist/host/attempt.d.ts +308 -0
  169. package/dist/host/attempt.d.ts.map +1 -0
  170. package/dist/host/attempt.js +1199 -0
  171. package/dist/host/attempt.js.map +1 -0
  172. package/dist/host/backoff.d.ts +29 -0
  173. package/dist/host/backoff.d.ts.map +1 -0
  174. package/dist/host/backoff.js +69 -0
  175. package/dist/host/backoff.js.map +1 -0
  176. package/dist/host/ctx.d.ts +94 -0
  177. package/dist/host/ctx.d.ts.map +1 -0
  178. package/dist/host/ctx.js +200 -0
  179. package/dist/host/ctx.js.map +1 -0
  180. package/dist/host/deadline.d.ts +12 -0
  181. package/dist/host/deadline.d.ts.map +1 -0
  182. package/dist/host/deadline.js +40 -0
  183. package/dist/host/deadline.js.map +1 -0
  184. package/dist/host/dependencies.d.ts +65 -0
  185. package/dist/host/dependencies.d.ts.map +1 -0
  186. package/dist/host/dependencies.js +115 -0
  187. package/dist/host/dependencies.js.map +1 -0
  188. package/dist/host/destination.d.ts +48 -0
  189. package/dist/host/destination.d.ts.map +1 -0
  190. package/dist/host/destination.js +101 -0
  191. package/dist/host/destination.js.map +1 -0
  192. package/dist/host/facet.d.ts +84 -0
  193. package/dist/host/facet.d.ts.map +1 -0
  194. package/dist/host/facet.js +55 -0
  195. package/dist/host/facet.js.map +1 -0
  196. package/dist/host/follow.d.ts +52 -0
  197. package/dist/host/follow.d.ts.map +1 -0
  198. package/dist/host/follow.js +207 -0
  199. package/dist/host/follow.js.map +1 -0
  200. package/dist/host/host.d.ts +571 -0
  201. package/dist/host/host.d.ts.map +1 -0
  202. package/dist/host/host.js +1318 -0
  203. package/dist/host/host.js.map +1 -0
  204. package/dist/host/index.d.ts +17 -0
  205. package/dist/host/index.d.ts.map +1 -0
  206. package/dist/host/index.js +6 -0
  207. package/dist/host/index.js.map +1 -0
  208. package/dist/host/internal.d.ts +11 -0
  209. package/dist/host/internal.d.ts.map +1 -0
  210. package/dist/host/internal.js +9 -0
  211. package/dist/host/internal.js.map +1 -0
  212. package/dist/host/members.d.ts +50 -0
  213. package/dist/host/members.d.ts.map +1 -0
  214. package/dist/host/members.js +107 -0
  215. package/dist/host/members.js.map +1 -0
  216. package/dist/host/native.d.ts +64 -0
  217. package/dist/host/native.d.ts.map +1 -0
  218. package/dist/host/native.js +126 -0
  219. package/dist/host/native.js.map +1 -0
  220. package/dist/host/object.d.ts +331 -0
  221. package/dist/host/object.d.ts.map +1 -0
  222. package/dist/host/object.js +1296 -0
  223. package/dist/host/object.js.map +1 -0
  224. package/dist/host/old-work.d.ts +34 -0
  225. package/dist/host/old-work.d.ts.map +1 -0
  226. package/dist/host/old-work.js +52 -0
  227. package/dist/host/old-work.js.map +1 -0
  228. package/dist/host/parked.d.ts +23 -0
  229. package/dist/host/parked.d.ts.map +1 -0
  230. package/dist/host/parked.js +79 -0
  231. package/dist/host/parked.js.map +1 -0
  232. package/dist/host/presence.d.ts +34 -0
  233. package/dist/host/presence.d.ts.map +1 -0
  234. package/dist/host/presence.js +117 -0
  235. package/dist/host/presence.js.map +1 -0
  236. package/dist/host/readiness.d.ts +27 -0
  237. package/dist/host/readiness.d.ts.map +1 -0
  238. package/dist/host/readiness.js +134 -0
  239. package/dist/host/readiness.js.map +1 -0
  240. package/dist/host/ref-state.d.ts +53 -0
  241. package/dist/host/ref-state.d.ts.map +1 -0
  242. package/dist/host/ref-state.js +83 -0
  243. package/dist/host/ref-state.js.map +1 -0
  244. package/dist/host/reference-keys.d.ts +36 -0
  245. package/dist/host/reference-keys.d.ts.map +1 -0
  246. package/dist/host/reference-keys.js +168 -0
  247. package/dist/host/reference-keys.js.map +1 -0
  248. package/dist/host/reference-source.d.ts +65 -0
  249. package/dist/host/reference-source.d.ts.map +1 -0
  250. package/dist/host/reference-source.js +285 -0
  251. package/dist/host/reference-source.js.map +1 -0
  252. package/dist/host/reference.d.ts +321 -0
  253. package/dist/host/reference.d.ts.map +1 -0
  254. package/dist/host/reference.js +797 -0
  255. package/dist/host/reference.js.map +1 -0
  256. package/dist/host/reload-cycle.d.ts +16 -0
  257. package/dist/host/reload-cycle.d.ts.map +1 -0
  258. package/dist/host/reload-cycle.js +81 -0
  259. package/dist/host/reload-cycle.js.map +1 -0
  260. package/dist/host/retry-on.d.ts +28 -0
  261. package/dist/host/retry-on.d.ts.map +1 -0
  262. package/dist/host/retry-on.js +52 -0
  263. package/dist/host/retry-on.js.map +1 -0
  264. package/dist/host/revocation.d.ts +16 -0
  265. package/dist/host/revocation.d.ts.map +1 -0
  266. package/dist/host/revocation.js +27 -0
  267. package/dist/host/revocation.js.map +1 -0
  268. package/dist/host/root.d.ts +37 -0
  269. package/dist/host/root.d.ts.map +1 -0
  270. package/dist/host/root.js +68 -0
  271. package/dist/host/root.js.map +1 -0
  272. package/dist/host/route.d.ts +64 -0
  273. package/dist/host/route.d.ts.map +1 -0
  274. package/dist/host/route.js +227 -0
  275. package/dist/host/route.js.map +1 -0
  276. package/dist/host/routines.d.ts +78 -0
  277. package/dist/host/routines.d.ts.map +1 -0
  278. package/dist/host/routines.js +398 -0
  279. package/dist/host/routines.js.map +1 -0
  280. package/dist/host/sleep.d.ts +9 -0
  281. package/dist/host/sleep.d.ts.map +1 -0
  282. package/dist/host/sleep.js +40 -0
  283. package/dist/host/sleep.js.map +1 -0
  284. package/dist/host/staging.d.ts +94 -0
  285. package/dist/host/staging.d.ts.map +1 -0
  286. package/dist/host/staging.js +304 -0
  287. package/dist/host/staging.js.map +1 -0
  288. package/dist/host/unbound-clock.d.ts +23 -0
  289. package/dist/host/unbound-clock.d.ts.map +1 -0
  290. package/dist/host/unbound-clock.js +58 -0
  291. package/dist/host/unbound-clock.js.map +1 -0
  292. package/dist/host/unbound.d.ts +37 -0
  293. package/dist/host/unbound.d.ts.map +1 -0
  294. package/dist/host/unbound.js +88 -0
  295. package/dist/host/unbound.js.map +1 -0
  296. package/dist/host/uuid.d.ts +3 -0
  297. package/dist/host/uuid.d.ts.map +1 -0
  298. package/dist/host/uuid.js +38 -0
  299. package/dist/host/uuid.js.map +1 -0
  300. package/dist/index.d.ts +29 -18
  301. package/dist/index.d.ts.map +1 -1
  302. package/dist/index.js +20 -9
  303. package/dist/index.js.map +1 -1
  304. package/dist/jobs/definition.d.ts +96 -0
  305. package/dist/jobs/definition.d.ts.map +1 -0
  306. package/dist/jobs/definition.js +83 -0
  307. package/dist/jobs/definition.js.map +1 -0
  308. package/dist/jobs/index.d.ts +5 -0
  309. package/dist/jobs/index.d.ts.map +1 -0
  310. package/dist/jobs/index.js +3 -0
  311. package/dist/jobs/index.js.map +1 -0
  312. package/dist/jobs/internal.d.ts +3 -0
  313. package/dist/jobs/internal.d.ts.map +1 -0
  314. package/dist/jobs/internal.js +4 -0
  315. package/dist/jobs/internal.js.map +1 -0
  316. package/dist/jobs/job.d.ts +149 -0
  317. package/dist/jobs/job.d.ts.map +1 -0
  318. package/dist/jobs/job.js +387 -0
  319. package/dist/jobs/job.js.map +1 -0
  320. package/dist/jobs/persisted.d.ts +38 -0
  321. package/dist/jobs/persisted.d.ts.map +1 -0
  322. package/dist/jobs/persisted.js +95 -0
  323. package/dist/jobs/persisted.js.map +1 -0
  324. package/dist/jobs/records.d.ts +231 -0
  325. package/dist/jobs/records.d.ts.map +1 -0
  326. package/dist/jobs/records.js +871 -0
  327. package/dist/jobs/records.js.map +1 -0
  328. package/dist/jobs/run-states.d.ts +69 -0
  329. package/dist/jobs/run-states.d.ts.map +1 -0
  330. package/dist/jobs/run-states.js +228 -0
  331. package/dist/jobs/run-states.js.map +1 -0
  332. package/dist/jobs/run.d.ts +117 -0
  333. package/dist/jobs/run.d.ts.map +1 -0
  334. package/dist/jobs/run.js +204 -0
  335. package/dist/jobs/run.js.map +1 -0
  336. package/dist/jobs/running.d.ts +44 -0
  337. package/dist/jobs/running.d.ts.map +1 -0
  338. package/dist/jobs/running.js +117 -0
  339. package/dist/jobs/running.js.map +1 -0
  340. package/dist/jobs/stored.d.ts +63 -0
  341. package/dist/jobs/stored.d.ts.map +1 -0
  342. package/dist/jobs/stored.js +55 -0
  343. package/dist/jobs/stored.js.map +1 -0
  344. package/dist/link/binary.d.ts +4 -0
  345. package/dist/link/binary.d.ts.map +1 -0
  346. package/dist/link/binary.js +544 -0
  347. package/dist/link/binary.js.map +1 -0
  348. package/dist/link/channel.d.ts +68 -0
  349. package/dist/link/channel.d.ts.map +1 -0
  350. package/dist/link/channel.js +215 -0
  351. package/dist/link/channel.js.map +1 -0
  352. package/dist/link/errors.d.ts +7 -0
  353. package/dist/link/errors.d.ts.map +1 -0
  354. package/dist/link/errors.js +21 -0
  355. package/dist/link/errors.js.map +1 -0
  356. package/dist/link/index.d.ts +8 -0
  357. package/dist/link/index.d.ts.map +1 -0
  358. package/dist/link/index.js +8 -0
  359. package/dist/link/index.js.map +1 -0
  360. package/dist/link/internal.d.ts +9 -0
  361. package/dist/link/internal.d.ts.map +1 -0
  362. package/dist/link/internal.js +10 -0
  363. package/dist/link/internal.js.map +1 -0
  364. package/dist/link/ipc.d.ts +22 -0
  365. package/dist/link/ipc.d.ts.map +1 -0
  366. package/dist/link/ipc.js +64 -0
  367. package/dist/link/ipc.js.map +1 -0
  368. package/dist/link/link.d.ts +34 -0
  369. package/dist/link/link.d.ts.map +1 -0
  370. package/dist/link/link.js +87 -0
  371. package/dist/link/link.js.map +1 -0
  372. package/dist/link/message.d.ts +262 -0
  373. package/dist/link/message.d.ts.map +1 -0
  374. package/dist/link/message.js +156 -0
  375. package/dist/link/message.js.map +1 -0
  376. package/dist/link/part.d.ts +80 -0
  377. package/dist/link/part.d.ts.map +1 -0
  378. package/dist/link/part.js +165 -0
  379. package/dist/link/part.js.map +1 -0
  380. package/dist/link/text.d.ts +6 -0
  381. package/dist/link/text.d.ts.map +1 -0
  382. package/dist/link/text.js +355 -0
  383. package/dist/link/text.js.map +1 -0
  384. package/dist/link/values.d.ts +40 -0
  385. package/dist/link/values.d.ts.map +1 -0
  386. package/dist/link/values.js +121 -0
  387. package/dist/link/values.js.map +1 -0
  388. package/dist/link/websocket.d.ts +26 -0
  389. package/dist/link/websocket.d.ts.map +1 -0
  390. package/dist/link/websocket.js +91 -0
  391. package/dist/link/websocket.js.map +1 -0
  392. package/dist/node/app/app.d.ts +269 -0
  393. package/dist/node/app/app.d.ts.map +1 -0
  394. package/dist/node/app/app.js +513 -0
  395. package/dist/node/app/app.js.map +1 -0
  396. package/dist/node/app/archive.d.ts +37 -0
  397. package/dist/node/app/archive.d.ts.map +1 -0
  398. package/dist/node/app/archive.js +204 -0
  399. package/dist/node/app/archive.js.map +1 -0
  400. package/dist/node/app/blobs.d.ts +23 -0
  401. package/dist/node/app/blobs.d.ts.map +1 -0
  402. package/dist/node/app/blobs.js +64 -0
  403. package/dist/node/app/blobs.js.map +1 -0
  404. package/dist/node/app/data.d.ts +35 -0
  405. package/dist/node/app/data.d.ts.map +1 -0
  406. package/dist/node/app/data.js +44 -0
  407. package/dist/node/app/data.js.map +1 -0
  408. package/dist/node/app/ephemeral-sessions.d.ts +20 -0
  409. package/dist/node/app/ephemeral-sessions.d.ts.map +1 -0
  410. package/dist/node/app/ephemeral-sessions.js +69 -0
  411. package/dist/node/app/ephemeral-sessions.js.map +1 -0
  412. package/dist/node/app/ephemeral.d.ts +11 -0
  413. package/dist/node/app/ephemeral.d.ts.map +1 -0
  414. package/dist/node/app/ephemeral.js +34 -0
  415. package/dist/node/app/ephemeral.js.map +1 -0
  416. package/dist/node/app/files-copy.d.ts +13 -0
  417. package/dist/node/app/files-copy.d.ts.map +1 -0
  418. package/dist/node/app/files-copy.js +86 -0
  419. package/dist/node/app/files-copy.js.map +1 -0
  420. package/dist/node/app/files-entry.d.ts +4 -0
  421. package/dist/node/app/files-entry.d.ts.map +1 -0
  422. package/dist/node/app/files-entry.js +7 -0
  423. package/dist/node/app/files-entry.js.map +1 -0
  424. package/dist/node/app/files-index.d.ts +180 -0
  425. package/dist/node/app/files-index.d.ts.map +1 -0
  426. package/dist/node/app/files-index.js +535 -0
  427. package/dist/node/app/files-index.js.map +1 -0
  428. package/dist/node/app/files.d.ts +363 -0
  429. package/dist/node/app/files.d.ts.map +1 -0
  430. package/dist/node/app/files.js +368 -0
  431. package/dist/node/app/files.js.map +1 -0
  432. package/dist/node/app/folder-views.d.ts +21 -0
  433. package/dist/node/app/folder-views.d.ts.map +1 -0
  434. package/dist/node/app/folder-views.js +55 -0
  435. package/dist/node/app/folder-views.js.map +1 -0
  436. package/dist/node/app/index.d.ts +12 -0
  437. package/dist/node/app/index.d.ts.map +1 -0
  438. package/dist/node/app/index.js +15 -0
  439. package/dist/node/app/index.js.map +1 -0
  440. package/dist/node/app/info.d.ts +66 -0
  441. package/dist/node/app/info.d.ts.map +1 -0
  442. package/dist/node/app/info.js +37 -0
  443. package/dist/node/app/info.js.map +1 -0
  444. package/dist/node/app/invite.d.ts +5 -0
  445. package/dist/node/app/invite.d.ts.map +1 -0
  446. package/dist/node/app/invite.js +64 -0
  447. package/dist/node/app/invite.js.map +1 -0
  448. package/dist/node/app/layout.d.ts +36 -0
  449. package/dist/node/app/layout.d.ts.map +1 -0
  450. package/dist/node/app/layout.js +87 -0
  451. package/dist/node/app/layout.js.map +1 -0
  452. package/dist/node/app/owner.d.ts +31 -0
  453. package/dist/node/app/owner.d.ts.map +1 -0
  454. package/dist/node/app/owner.js +104 -0
  455. package/dist/node/app/owner.js.map +1 -0
  456. package/dist/node/app/pairing.d.ts +55 -0
  457. package/dist/node/app/pairing.d.ts.map +1 -0
  458. package/dist/node/app/pairing.js +183 -0
  459. package/dist/node/app/pairing.js.map +1 -0
  460. package/dist/node/app/secrets.d.ts +16 -0
  461. package/dist/node/app/secrets.d.ts.map +1 -0
  462. package/dist/node/app/secrets.js +72 -0
  463. package/dist/node/app/secrets.js.map +1 -0
  464. package/dist/node/app/sessions.d.ts +72 -0
  465. package/dist/node/app/sessions.d.ts.map +1 -0
  466. package/dist/node/app/sessions.js +222 -0
  467. package/dist/node/app/sessions.js.map +1 -0
  468. package/dist/node/app/tar.d.ts +24 -0
  469. package/dist/node/app/tar.d.ts.map +1 -0
  470. package/dist/node/app/tar.js +167 -0
  471. package/dist/node/app/tar.js.map +1 -0
  472. package/dist/node/app/uploads.d.ts +37 -0
  473. package/dist/node/app/uploads.d.ts.map +1 -0
  474. package/dist/node/app/uploads.js +157 -0
  475. package/dist/node/app/uploads.js.map +1 -0
  476. package/dist/node/app/users.d.ts +37 -0
  477. package/dist/node/app/users.d.ts.map +1 -0
  478. package/dist/node/app/users.js +62 -0
  479. package/dist/node/app/users.js.map +1 -0
  480. package/dist/node/app/worker.d.ts +18 -0
  481. package/dist/node/app/worker.d.ts.map +1 -0
  482. package/dist/node/app/worker.js +84 -0
  483. package/dist/node/app/worker.js.map +1 -0
  484. package/dist/node/compression.d.ts +7 -0
  485. package/dist/node/compression.d.ts.map +1 -0
  486. package/dist/node/compression.js +25 -0
  487. package/dist/node/compression.js.map +1 -0
  488. package/dist/node/http/admission.d.ts +63 -0
  489. package/dist/node/http/admission.d.ts.map +1 -0
  490. package/dist/node/http/admission.js +134 -0
  491. package/dist/node/http/admission.js.map +1 -0
  492. package/dist/node/http/authenticate.d.ts +21 -0
  493. package/dist/node/http/authenticate.d.ts.map +1 -0
  494. package/dist/node/http/authenticate.js +34 -0
  495. package/dist/node/http/authenticate.js.map +1 -0
  496. package/dist/node/http/cookies.d.ts +32 -0
  497. package/dist/node/http/cookies.d.ts.map +1 -0
  498. package/dist/node/http/cookies.js +70 -0
  499. package/dist/node/http/cookies.js.map +1 -0
  500. package/dist/node/http/file.d.ts +23 -0
  501. package/dist/node/http/file.d.ts.map +1 -0
  502. package/dist/node/http/file.js +94 -0
  503. package/dist/node/http/file.js.map +1 -0
  504. package/dist/node/http/headers.d.ts +37 -0
  505. package/dist/node/http/headers.d.ts.map +1 -0
  506. package/dist/node/http/headers.js +136 -0
  507. package/dist/node/http/headers.js.map +1 -0
  508. package/dist/node/http/http.d.ts +111 -0
  509. package/dist/node/http/http.d.ts.map +1 -0
  510. package/dist/node/http/http.js +524 -0
  511. package/dist/node/http/http.js.map +1 -0
  512. package/dist/node/http/incoming.d.ts +19 -0
  513. package/dist/node/http/incoming.d.ts.map +1 -0
  514. package/dist/node/http/incoming.js +31 -0
  515. package/dist/node/http/incoming.js.map +1 -0
  516. package/dist/node/http/index.d.ts +11 -0
  517. package/dist/node/http/index.d.ts.map +1 -0
  518. package/dist/node/http/index.js +12 -0
  519. package/dist/node/http/index.js.map +1 -0
  520. package/dist/node/http/node.d.ts +78 -0
  521. package/dist/node/http/node.d.ts.map +1 -0
  522. package/dist/node/http/node.js +291 -0
  523. package/dist/node/http/node.js.map +1 -0
  524. package/dist/node/http/request.d.ts +60 -0
  525. package/dist/node/http/request.d.ts.map +1 -0
  526. package/dist/node/http/request.js +118 -0
  527. package/dist/node/http/request.js.map +1 -0
  528. package/dist/node/http/response.d.ts +63 -0
  529. package/dist/node/http/response.d.ts.map +1 -0
  530. package/dist/node/http/response.js +202 -0
  531. package/dist/node/http/response.js.map +1 -0
  532. package/dist/node/http/router.d.ts +132 -0
  533. package/dist/node/http/router.d.ts.map +1 -0
  534. package/dist/node/http/router.js +267 -0
  535. package/dist/node/http/router.js.map +1 -0
  536. package/dist/node/http/upgrades.d.ts +61 -0
  537. package/dist/node/http/upgrades.d.ts.map +1 -0
  538. package/dist/node/http/upgrades.js +192 -0
  539. package/dist/node/http/upgrades.js.map +1 -0
  540. package/dist/node/plugins/base-inputs.d.ts +14 -0
  541. package/dist/node/plugins/base-inputs.d.ts.map +1 -0
  542. package/dist/node/plugins/base-inputs.js +33 -0
  543. package/dist/node/plugins/base-inputs.js.map +1 -0
  544. package/dist/node/plugins/build.d.ts +77 -0
  545. package/dist/node/plugins/build.d.ts.map +1 -0
  546. package/dist/node/plugins/build.js +576 -0
  547. package/dist/node/plugins/build.js.map +1 -0
  548. package/dist/node/plugins/css-modules.d.ts +13 -0
  549. package/dist/node/plugins/css-modules.d.ts.map +1 -0
  550. package/dist/node/plugins/css-modules.js +58 -0
  551. package/dist/node/plugins/css-modules.js.map +1 -0
  552. package/dist/node/plugins/discover.d.ts +67 -0
  553. package/dist/node/plugins/discover.d.ts.map +1 -0
  554. package/dist/node/plugins/discover.js +369 -0
  555. package/dist/node/plugins/discover.js.map +1 -0
  556. package/dist/node/plugins/evaluate.d.ts +33 -0
  557. package/dist/node/plugins/evaluate.d.ts.map +1 -0
  558. package/dist/node/plugins/evaluate.js +121 -0
  559. package/dist/node/plugins/evaluate.js.map +1 -0
  560. package/dist/node/plugins/index.d.ts +11 -0
  561. package/dist/node/plugins/index.d.ts.map +1 -0
  562. package/dist/node/plugins/index.js +13 -0
  563. package/dist/node/plugins/index.js.map +1 -0
  564. package/dist/node/plugins/install.d.ts +38 -0
  565. package/dist/node/plugins/install.d.ts.map +1 -0
  566. package/dist/node/plugins/install.js +213 -0
  567. package/dist/node/plugins/install.js.map +1 -0
  568. package/dist/node/plugins/plugins.d.ts +162 -0
  569. package/dist/node/plugins/plugins.d.ts.map +1 -0
  570. package/dist/node/plugins/plugins.js +244 -0
  571. package/dist/node/plugins/plugins.js.map +1 -0
  572. package/dist/node/plugins/runtime.d.ts +57 -0
  573. package/dist/node/plugins/runtime.d.ts.map +1 -0
  574. package/dist/node/plugins/runtime.js +92 -0
  575. package/dist/node/plugins/runtime.js.map +1 -0
  576. package/dist/node/plugins/stack.d.ts +16 -0
  577. package/dist/node/plugins/stack.d.ts.map +1 -0
  578. package/dist/node/plugins/stack.js +61 -0
  579. package/dist/node/plugins/stack.js.map +1 -0
  580. package/dist/node/plugins/testing.d.ts +58 -0
  581. package/dist/node/plugins/testing.d.ts.map +1 -0
  582. package/dist/node/plugins/testing.js +210 -0
  583. package/dist/node/plugins/testing.js.map +1 -0
  584. package/dist/node/plugins/watcher.d.ts +69 -0
  585. package/dist/node/plugins/watcher.d.ts.map +1 -0
  586. package/dist/node/plugins/watcher.js +622 -0
  587. package/dist/node/plugins/watcher.js.map +1 -0
  588. package/dist/node/surfaces/bundle.d.ts +31 -0
  589. package/dist/node/surfaces/bundle.d.ts.map +1 -0
  590. package/dist/node/surfaces/bundle.js +118 -0
  591. package/dist/node/surfaces/bundle.js.map +1 -0
  592. package/dist/node/surfaces/current.d.ts +17 -0
  593. package/dist/node/surfaces/current.d.ts.map +1 -0
  594. package/dist/node/surfaces/current.js +54 -0
  595. package/dist/node/surfaces/current.js.map +1 -0
  596. package/dist/node/surfaces/index.d.ts +6 -0
  597. package/dist/node/surfaces/index.d.ts.map +1 -0
  598. package/dist/node/surfaces/index.js +6 -0
  599. package/dist/node/surfaces/index.js.map +1 -0
  600. package/dist/node/surfaces/published.d.ts +27 -0
  601. package/dist/node/surfaces/published.d.ts.map +1 -0
  602. package/dist/node/surfaces/published.js +142 -0
  603. package/dist/node/surfaces/published.js.map +1 -0
  604. package/dist/node/surfaces/served.d.ts +15 -0
  605. package/dist/node/surfaces/served.d.ts.map +1 -0
  606. package/dist/node/surfaces/served.js +42 -0
  607. package/dist/node/surfaces/served.js.map +1 -0
  608. package/dist/node/surfaces/surface-build.d.ts +53 -0
  609. package/dist/node/surfaces/surface-build.d.ts.map +1 -0
  610. package/dist/node/surfaces/surface-build.js +105 -0
  611. package/dist/node/surfaces/surface-build.js.map +1 -0
  612. package/dist/node/surfaces/tui.d.ts +40 -0
  613. package/dist/node/surfaces/tui.d.ts.map +1 -0
  614. package/dist/node/surfaces/tui.js +55 -0
  615. package/dist/node/surfaces/tui.js.map +1 -0
  616. package/dist/node/surfaces/web.d.ts +56 -0
  617. package/dist/node/surfaces/web.d.ts.map +1 -0
  618. package/dist/node/surfaces/web.js +108 -0
  619. package/dist/node/surfaces/web.js.map +1 -0
  620. package/dist/node/tui/actions.d.ts +49 -0
  621. package/dist/node/tui/actions.d.ts.map +1 -0
  622. package/dist/node/tui/actions.js +195 -0
  623. package/dist/node/tui/actions.js.map +1 -0
  624. package/dist/node/tui/credentials.d.ts +17 -0
  625. package/dist/node/tui/credentials.d.ts.map +1 -0
  626. package/dist/node/tui/credentials.js +54 -0
  627. package/dist/node/tui/credentials.js.map +1 -0
  628. package/dist/node/tui/filter.d.ts +5 -0
  629. package/dist/node/tui/filter.d.ts.map +1 -0
  630. package/dist/node/tui/filter.js +79 -0
  631. package/dist/node/tui/filter.js.map +1 -0
  632. package/dist/node/tui/index.d.ts +6 -0
  633. package/dist/node/tui/index.d.ts.map +1 -0
  634. package/dist/node/tui/index.js +6 -0
  635. package/dist/node/tui/index.js.map +1 -0
  636. package/dist/node/tui/launcher.d.ts +40 -0
  637. package/dist/node/tui/launcher.d.ts.map +1 -0
  638. package/dist/node/tui/launcher.js +439 -0
  639. package/dist/node/tui/launcher.js.map +1 -0
  640. package/dist/node/tui/pipe.d.ts +18 -0
  641. package/dist/node/tui/pipe.d.ts.map +1 -0
  642. package/dist/node/tui/pipe.js +134 -0
  643. package/dist/node/tui/pipe.js.map +1 -0
  644. package/dist/node/tui/sandbox.d.ts +54 -0
  645. package/dist/node/tui/sandbox.d.ts.map +1 -0
  646. package/dist/node/tui/sandbox.js +431 -0
  647. package/dist/node/tui/sandbox.js.map +1 -0
  648. package/dist/node/workers/base.d.ts +30 -0
  649. package/dist/node/workers/base.d.ts.map +1 -0
  650. package/dist/node/workers/base.js +255 -0
  651. package/dist/node/workers/base.js.map +1 -0
  652. package/dist/node/workers/child.d.ts +4 -0
  653. package/dist/node/workers/child.d.ts.map +1 -0
  654. package/dist/node/workers/child.js +6 -0
  655. package/dist/node/workers/child.js.map +1 -0
  656. package/dist/node/workers/control.d.ts +83 -0
  657. package/dist/node/workers/control.d.ts.map +1 -0
  658. package/dist/node/workers/control.js +77 -0
  659. package/dist/node/workers/control.js.map +1 -0
  660. package/dist/node/workers/index.d.ts +4 -0
  661. package/dist/node/workers/index.d.ts.map +1 -0
  662. package/dist/node/workers/index.js +7 -0
  663. package/dist/node/workers/index.js.map +1 -0
  664. package/dist/node/workers/lock.d.ts +30 -0
  665. package/dist/node/workers/lock.d.ts.map +1 -0
  666. package/dist/node/workers/lock.js +180 -0
  667. package/dist/node/workers/lock.js.map +1 -0
  668. package/dist/node/workers/main.d.ts +46 -0
  669. package/dist/node/workers/main.d.ts.map +1 -0
  670. package/dist/node/workers/main.js +230 -0
  671. package/dist/node/workers/main.js.map +1 -0
  672. package/dist/node/workers/process.d.ts +42 -0
  673. package/dist/node/workers/process.d.ts.map +1 -0
  674. package/dist/node/workers/process.js +125 -0
  675. package/dist/node/workers/process.js.map +1 -0
  676. package/dist/node/workers/workers.d.ts +122 -0
  677. package/dist/node/workers/workers.d.ts.map +1 -0
  678. package/dist/node/workers/workers.js +677 -0
  679. package/dist/node/workers/workers.js.map +1 -0
  680. package/dist/output.d.ts +1 -1
  681. package/dist/output.d.ts.map +1 -1
  682. package/dist/output.js +4 -2
  683. package/dist/output.js.map +1 -1
  684. package/dist/react/hooks.d.ts +43 -0
  685. package/dist/react/hooks.d.ts.map +1 -0
  686. package/dist/react/hooks.js +82 -0
  687. package/dist/react/hooks.js.map +1 -0
  688. package/dist/react/index.d.ts +3 -0
  689. package/dist/react/index.d.ts.map +1 -0
  690. package/dist/react/index.js +4 -0
  691. package/dist/react/index.js.map +1 -0
  692. package/dist/react/stores.d.ts +9 -0
  693. package/dist/react/stores.d.ts.map +1 -0
  694. package/dist/react/stores.js +37 -0
  695. package/dist/react/stores.js.map +1 -0
  696. package/dist/registries/contribution.d.ts +50 -0
  697. package/dist/registries/contribution.d.ts.map +1 -0
  698. package/dist/registries/contribution.js +129 -0
  699. package/dist/registries/contribution.js.map +1 -0
  700. package/dist/registries/entries.d.ts +18 -0
  701. package/dist/registries/entries.d.ts.map +1 -0
  702. package/dist/registries/entries.js +42 -0
  703. package/dist/registries/entries.js.map +1 -0
  704. package/dist/registries/index.d.ts +3 -0
  705. package/dist/registries/index.d.ts.map +1 -0
  706. package/dist/registries/index.js +5 -0
  707. package/dist/registries/index.js.map +1 -0
  708. package/dist/registries/internal.d.ts +4 -0
  709. package/dist/registries/internal.d.ts.map +1 -0
  710. package/dist/registries/internal.js +5 -0
  711. package/dist/registries/internal.js.map +1 -0
  712. package/dist/registries/record.d.ts +115 -0
  713. package/dist/registries/record.d.ts.map +1 -0
  714. package/dist/registries/record.js +283 -0
  715. package/dist/registries/record.js.map +1 -0
  716. package/dist/registries/registry.d.ts +74 -0
  717. package/dist/registries/registry.d.ts.map +1 -0
  718. package/dist/registries/registry.js +14 -0
  719. package/dist/registries/registry.js.map +1 -0
  720. package/dist/registries/value.d.ts +48 -0
  721. package/dist/registries/value.d.ts.map +1 -0
  722. package/dist/registries/value.js +224 -0
  723. package/dist/registries/value.js.map +1 -0
  724. package/dist/remote/calls.d.ts +25 -0
  725. package/dist/remote/calls.d.ts.map +1 -0
  726. package/dist/remote/calls.js +62 -0
  727. package/dist/remote/calls.js.map +1 -0
  728. package/dist/remote/consumer.d.ts +43 -0
  729. package/dist/remote/consumer.d.ts.map +1 -0
  730. package/dist/remote/consumer.js +350 -0
  731. package/dist/remote/consumer.js.map +1 -0
  732. package/dist/remote/hold.d.ts +141 -0
  733. package/dist/remote/hold.d.ts.map +1 -0
  734. package/dist/remote/hold.js +579 -0
  735. package/dist/remote/hold.js.map +1 -0
  736. package/dist/remote/host-link.d.ts +77 -0
  737. package/dist/remote/host-link.d.ts.map +1 -0
  738. package/dist/remote/host-link.js +184 -0
  739. package/dist/remote/host-link.js.map +1 -0
  740. package/dist/remote/internal.d.ts +6 -0
  741. package/dist/remote/internal.d.ts.map +1 -0
  742. package/dist/remote/internal.js +6 -0
  743. package/dist/remote/internal.js.map +1 -0
  744. package/dist/remote/path.d.ts +46 -0
  745. package/dist/remote/path.d.ts.map +1 -0
  746. package/dist/remote/path.js +73 -0
  747. package/dist/remote/path.js.map +1 -0
  748. package/dist/remote/provider.d.ts +89 -0
  749. package/dist/remote/provider.d.ts.map +1 -0
  750. package/dist/remote/provider.js +597 -0
  751. package/dist/remote/provider.js.map +1 -0
  752. package/dist/remote/relay.d.ts +69 -0
  753. package/dist/remote/relay.d.ts.map +1 -0
  754. package/dist/remote/relay.js +219 -0
  755. package/dist/remote/relay.js.map +1 -0
  756. package/dist/remote/remote-object.d.ts +138 -0
  757. package/dist/remote/remote-object.d.ts.map +1 -0
  758. package/dist/remote/remote-object.js +492 -0
  759. package/dist/remote/remote-object.js.map +1 -0
  760. package/dist/remote/replica.d.ts +59 -0
  761. package/dist/remote/replica.d.ts.map +1 -0
  762. package/dist/remote/replica.js +125 -0
  763. package/dist/remote/replica.js.map +1 -0
  764. package/dist/sqlite/cloudflare.d.ts +2 -0
  765. package/dist/sqlite/cloudflare.d.ts.map +1 -1
  766. package/dist/sqlite/cloudflare.js +10 -0
  767. package/dist/sqlite/cloudflare.js.map +1 -1
  768. package/dist/sqlite/database.d.ts +5 -2
  769. package/dist/sqlite/database.d.ts.map +1 -1
  770. package/dist/sqlite/database.js.map +1 -1
  771. package/dist/sqlite/node.d.ts +13 -2
  772. package/dist/sqlite/node.d.ts.map +1 -1
  773. package/dist/sqlite/node.js +31 -8
  774. package/dist/sqlite/node.js.map +1 -1
  775. package/dist/state/batch.d.ts +64 -0
  776. package/dist/state/batch.d.ts.map +1 -0
  777. package/dist/state/batch.js +164 -0
  778. package/dist/state/batch.js.map +1 -0
  779. package/dist/state/derive.d.ts +52 -0
  780. package/dist/state/derive.d.ts.map +1 -0
  781. package/dist/state/derive.js +182 -0
  782. package/dist/state/derive.js.map +1 -0
  783. package/dist/state/index.d.ts +6 -0
  784. package/dist/state/index.d.ts.map +1 -0
  785. package/dist/state/index.js +4 -0
  786. package/dist/state/index.js.map +1 -0
  787. package/dist/state/internal.d.ts +6 -0
  788. package/dist/state/internal.d.ts.map +1 -0
  789. package/dist/state/internal.js +8 -0
  790. package/dist/state/internal.js.map +1 -0
  791. package/dist/state/native-source.d.ts +106 -0
  792. package/dist/state/native-source.d.ts.map +1 -0
  793. package/dist/state/native-source.js +240 -0
  794. package/dist/state/native-source.js.map +1 -0
  795. package/dist/state/watchable.d.ts +114 -0
  796. package/dist/state/watchable.d.ts.map +1 -0
  797. package/dist/state/watchable.js +156 -0
  798. package/dist/state/watchable.js.map +1 -0
  799. package/dist/state/writable.d.ts +32 -0
  800. package/dist/state/writable.d.ts.map +1 -0
  801. package/dist/state/writable.js +49 -0
  802. package/dist/state/writable.js.map +1 -0
  803. package/dist/store/adapter.d.ts +67 -0
  804. package/dist/store/adapter.d.ts.map +1 -0
  805. package/dist/store/adapter.js +118 -0
  806. package/dist/store/adapter.js.map +1 -0
  807. package/dist/store/allocator.d.ts +17 -0
  808. package/dist/store/allocator.d.ts.map +1 -0
  809. package/dist/store/allocator.js +30 -0
  810. package/dist/store/allocator.js.map +1 -0
  811. package/dist/store/applier.d.ts +8 -0
  812. package/dist/store/applier.d.ts.map +1 -0
  813. package/dist/store/applier.js +375 -0
  814. package/dist/store/applier.js.map +1 -0
  815. package/dist/store/apply-batch.d.ts +12 -0
  816. package/dist/store/apply-batch.d.ts.map +1 -0
  817. package/dist/store/apply-batch.js +83 -0
  818. package/dist/store/apply-batch.js.map +1 -0
  819. package/dist/store/archive.d.ts +32 -0
  820. package/dist/store/archive.d.ts.map +1 -0
  821. package/dist/store/archive.js +130 -0
  822. package/dist/store/archive.js.map +1 -0
  823. package/dist/store/backend.d.ts +10 -0
  824. package/dist/store/backend.d.ts.map +1 -0
  825. package/dist/store/backend.js +15 -0
  826. package/dist/store/backend.js.map +1 -0
  827. package/dist/store/catalog.d.ts +24 -0
  828. package/dist/store/catalog.d.ts.map +1 -0
  829. package/dist/store/catalog.js +17 -0
  830. package/dist/store/catalog.js.map +1 -0
  831. package/dist/store/claims.d.ts +23 -0
  832. package/dist/store/claims.d.ts.map +1 -0
  833. package/dist/store/claims.js +65 -0
  834. package/dist/store/claims.js.map +1 -0
  835. package/dist/store/columns.d.ts +77 -0
  836. package/dist/store/columns.d.ts.map +1 -0
  837. package/dist/store/columns.js +77 -0
  838. package/dist/store/columns.js.map +1 -0
  839. package/dist/store/engine.d.ts +176 -0
  840. package/dist/store/engine.d.ts.map +1 -0
  841. package/dist/store/engine.js +283 -0
  842. package/dist/store/engine.js.map +1 -0
  843. package/dist/store/evaluate.d.ts +17 -0
  844. package/dist/store/evaluate.d.ts.map +1 -0
  845. package/dist/store/evaluate.js +128 -0
  846. package/dist/store/evaluate.js.map +1 -0
  847. package/dist/store/export.d.ts +17 -0
  848. package/dist/store/export.d.ts.map +1 -0
  849. package/dist/store/export.js +200 -0
  850. package/dist/store/export.js.map +1 -0
  851. package/dist/store/expression.d.ts +150 -0
  852. package/dist/store/expression.d.ts.map +1 -0
  853. package/dist/store/expression.js +268 -0
  854. package/dist/store/expression.js.map +1 -0
  855. package/dist/store/import.d.ts +10 -0
  856. package/dist/store/import.d.ts.map +1 -0
  857. package/dist/store/import.js +276 -0
  858. package/dist/store/import.js.map +1 -0
  859. package/dist/store/index.d.ts +16 -0
  860. package/dist/store/index.d.ts.map +1 -0
  861. package/dist/store/index.js +13 -0
  862. package/dist/store/index.js.map +1 -0
  863. package/dist/store/json-column.d.ts +33 -0
  864. package/dist/store/json-column.d.ts.map +1 -0
  865. package/dist/store/json-column.js +62 -0
  866. package/dist/store/json-column.js.map +1 -0
  867. package/dist/store/jsonl.d.ts +9 -0
  868. package/dist/store/jsonl.d.ts.map +1 -0
  869. package/dist/store/jsonl.js +61 -0
  870. package/dist/store/jsonl.js.map +1 -0
  871. package/dist/store/live-query.d.ts +108 -0
  872. package/dist/store/live-query.d.ts.map +1 -0
  873. package/dist/store/live-query.js +254 -0
  874. package/dist/store/live-query.js.map +1 -0
  875. package/dist/store/outbox.d.ts +26 -0
  876. package/dist/store/outbox.d.ts.map +1 -0
  877. package/dist/store/outbox.js +80 -0
  878. package/dist/store/outbox.js.map +1 -0
  879. package/dist/store/query.d.ts +39 -0
  880. package/dist/store/query.d.ts.map +1 -0
  881. package/dist/store/query.js +97 -0
  882. package/dist/store/query.js.map +1 -0
  883. package/dist/store/refusal.d.ts +15 -0
  884. package/dist/store/refusal.d.ts.map +1 -0
  885. package/dist/store/refusal.js +36 -0
  886. package/dist/store/refusal.js.map +1 -0
  887. package/dist/store/rows.d.ts +80 -0
  888. package/dist/store/rows.d.ts.map +1 -0
  889. package/dist/store/rows.js +183 -0
  890. package/dist/store/rows.js.map +1 -0
  891. package/dist/store/schema.d.ts +25 -0
  892. package/dist/store/schema.d.ts.map +1 -0
  893. package/dist/store/schema.js +115 -0
  894. package/dist/store/schema.js.map +1 -0
  895. package/dist/store/sql.d.ts +73 -0
  896. package/dist/store/sql.d.ts.map +1 -0
  897. package/dist/store/sql.js +234 -0
  898. package/dist/store/sql.js.map +1 -0
  899. package/dist/store/step.d.ts +50 -0
  900. package/dist/store/step.d.ts.map +1 -0
  901. package/dist/store/step.js +52 -0
  902. package/dist/store/step.js.map +1 -0
  903. package/dist/store/store.d.ts +171 -0
  904. package/dist/store/store.d.ts.map +1 -0
  905. package/dist/store/store.js +818 -0
  906. package/dist/store/store.js.map +1 -0
  907. package/dist/store/table-changes.d.ts +29 -0
  908. package/dist/store/table-changes.d.ts.map +1 -0
  909. package/dist/store/table-changes.js +102 -0
  910. package/dist/store/table-changes.js.map +1 -0
  911. package/dist/store/table-evolve.d.ts +74 -0
  912. package/dist/store/table-evolve.d.ts.map +1 -0
  913. package/dist/store/table-evolve.js +201 -0
  914. package/dist/store/table-evolve.js.map +1 -0
  915. package/dist/store/table-handle.d.ts +73 -0
  916. package/dist/store/table-handle.d.ts.map +1 -0
  917. package/dist/store/table-handle.js +101 -0
  918. package/dist/store/table-handle.js.map +1 -0
  919. package/dist/store/table-history.d.ts +75 -0
  920. package/dist/store/table-history.d.ts.map +1 -0
  921. package/dist/store/table-history.js +42 -0
  922. package/dist/store/table-history.js.map +1 -0
  923. package/dist/store/table-migration.d.ts +16 -0
  924. package/dist/store/table-migration.d.ts.map +1 -0
  925. package/dist/store/table-migration.js +202 -0
  926. package/dist/store/table-migration.js.map +1 -0
  927. package/dist/store/table-writes.d.ts +125 -0
  928. package/dist/store/table-writes.d.ts.map +1 -0
  929. package/dist/store/table-writes.js +170 -0
  930. package/dist/store/table-writes.js.map +1 -0
  931. package/dist/store/table.d.ts +80 -0
  932. package/dist/store/table.d.ts.map +1 -0
  933. package/dist/store/table.js +103 -0
  934. package/dist/store/table.js.map +1 -0
  935. package/dist/store/text.d.ts +14 -0
  936. package/dist/store/text.d.ts.map +1 -0
  937. package/dist/store/text.js +51 -0
  938. package/dist/store/text.js.map +1 -0
  939. package/dist/store/writes.d.ts +5 -0
  940. package/dist/store/writes.d.ts.map +1 -0
  941. package/dist/store/writes.js +4 -0
  942. package/dist/store/writes.js.map +1 -0
  943. package/dist/surfaces/active-language.d.ts +20 -0
  944. package/dist/surfaces/active-language.d.ts.map +1 -0
  945. package/dist/surfaces/active-language.js +78 -0
  946. package/dist/surfaces/active-language.js.map +1 -0
  947. package/dist/surfaces/active-theme.d.ts +16 -0
  948. package/dist/surfaces/active-theme.d.ts.map +1 -0
  949. package/dist/surfaces/active-theme.js +47 -0
  950. package/dist/surfaces/active-theme.js.map +1 -0
  951. package/dist/surfaces/client.d.ts +96 -0
  952. package/dist/surfaces/client.d.ts.map +1 -0
  953. package/dist/surfaces/client.js +264 -0
  954. package/dist/surfaces/client.js.map +1 -0
  955. package/dist/surfaces/connection.d.ts +49 -0
  956. package/dist/surfaces/connection.d.ts.map +1 -0
  957. package/dist/surfaces/connection.js +142 -0
  958. package/dist/surfaces/connection.js.map +1 -0
  959. package/dist/surfaces/format.d.ts +5 -0
  960. package/dist/surfaces/format.d.ts.map +1 -0
  961. package/dist/surfaces/format.js +37 -0
  962. package/dist/surfaces/format.js.map +1 -0
  963. package/dist/surfaces/index.d.ts +15 -0
  964. package/dist/surfaces/index.d.ts.map +1 -0
  965. package/dist/surfaces/index.js +18 -0
  966. package/dist/surfaces/index.js.map +1 -0
  967. package/dist/surfaces/language.d.ts +53 -0
  968. package/dist/surfaces/language.d.ts.map +1 -0
  969. package/dist/surfaces/language.js +74 -0
  970. package/dist/surfaces/language.js.map +1 -0
  971. package/dist/surfaces/loaded.d.ts +42 -0
  972. package/dist/surfaces/loaded.d.ts.map +1 -0
  973. package/dist/surfaces/loaded.js +116 -0
  974. package/dist/surfaces/loaded.js.map +1 -0
  975. package/dist/surfaces/locale-choice.d.ts +25 -0
  976. package/dist/surfaces/locale-choice.d.ts.map +1 -0
  977. package/dist/surfaces/locale-choice.js +14 -0
  978. package/dist/surfaces/locale-choice.js.map +1 -0
  979. package/dist/surfaces/messages.d.ts +67 -0
  980. package/dist/surfaces/messages.d.ts.map +1 -0
  981. package/dist/surfaces/messages.js +112 -0
  982. package/dist/surfaces/messages.js.map +1 -0
  983. package/dist/surfaces/page-state.d.ts +14 -0
  984. package/dist/surfaces/page-state.d.ts.map +1 -0
  985. package/dist/surfaces/page-state.js +43 -0
  986. package/dist/surfaces/page-state.js.map +1 -0
  987. package/dist/surfaces/preference.d.ts +32 -0
  988. package/dist/surfaces/preference.d.ts.map +1 -0
  989. package/dist/surfaces/preference.js +72 -0
  990. package/dist/surfaces/preference.js.map +1 -0
  991. package/dist/surfaces/registered.d.ts +33 -0
  992. package/dist/surfaces/registered.d.ts.map +1 -0
  993. package/dist/surfaces/registered.js +51 -0
  994. package/dist/surfaces/registered.js.map +1 -0
  995. package/dist/surfaces/scripts.d.ts +84 -0
  996. package/dist/surfaces/scripts.d.ts.map +1 -0
  997. package/dist/surfaces/scripts.js +28 -0
  998. package/dist/surfaces/scripts.js.map +1 -0
  999. package/dist/surfaces/theme-choice.d.ts +31 -0
  1000. package/dist/surfaces/theme-choice.d.ts.map +1 -0
  1001. package/dist/surfaces/theme-choice.js +18 -0
  1002. package/dist/surfaces/theme-choice.js.map +1 -0
  1003. package/dist/surfaces/themes.d.ts +43 -0
  1004. package/dist/surfaces/themes.d.ts.map +1 -0
  1005. package/dist/surfaces/themes.js +110 -0
  1006. package/dist/surfaces/themes.js.map +1 -0
  1007. package/dist/surfaces/translations.d.ts +29 -0
  1008. package/dist/surfaces/translations.d.ts.map +1 -0
  1009. package/dist/surfaces/translations.js +57 -0
  1010. package/dist/surfaces/translations.js.map +1 -0
  1011. package/dist/sync/batch.d.ts +18 -0
  1012. package/dist/sync/batch.d.ts.map +1 -0
  1013. package/dist/sync/batch.js +125 -0
  1014. package/dist/sync/batch.js.map +1 -0
  1015. package/dist/sync/client.d.ts +166 -0
  1016. package/dist/sync/client.d.ts.map +1 -0
  1017. package/dist/sync/client.js +438 -0
  1018. package/dist/sync/client.js.map +1 -0
  1019. package/dist/sync/files.d.ts +46 -0
  1020. package/dist/sync/files.d.ts.map +1 -0
  1021. package/dist/sync/files.js +13 -0
  1022. package/dist/sync/files.js.map +1 -0
  1023. package/dist/sync/filesystem.d.ts +37 -0
  1024. package/dist/sync/filesystem.d.ts.map +1 -0
  1025. package/dist/sync/filesystem.js +185 -0
  1026. package/dist/sync/filesystem.js.map +1 -0
  1027. package/dist/sync/index.d.ts +8 -0
  1028. package/dist/sync/index.d.ts.map +1 -0
  1029. package/dist/sync/index.js +9 -0
  1030. package/dist/sync/index.js.map +1 -0
  1031. package/dist/sync/lines.d.ts +18 -0
  1032. package/dist/sync/lines.d.ts.map +1 -0
  1033. package/dist/sync/lines.js +46 -0
  1034. package/dist/sync/lines.js.map +1 -0
  1035. package/dist/sync/remote.d.ts +130 -0
  1036. package/dist/sync/remote.d.ts.map +1 -0
  1037. package/dist/sync/remote.js +46 -0
  1038. package/dist/sync/remote.js.map +1 -0
  1039. package/dist/sync/state.d.ts +17 -0
  1040. package/dist/sync/state.d.ts.map +1 -0
  1041. package/dist/sync/state.js +40 -0
  1042. package/dist/sync/state.js.map +1 -0
  1043. package/dist/telemetry-ingest/batch.d.ts +70 -0
  1044. package/dist/telemetry-ingest/batch.d.ts.map +1 -0
  1045. package/dist/telemetry-ingest/batch.js +110 -0
  1046. package/dist/telemetry-ingest/batch.js.map +1 -0
  1047. package/dist/telemetry-ingest/facet.d.ts +21 -0
  1048. package/dist/telemetry-ingest/facet.d.ts.map +1 -0
  1049. package/dist/telemetry-ingest/facet.js +96 -0
  1050. package/dist/telemetry-ingest/facet.js.map +1 -0
  1051. package/dist/telemetry-ingest/index.d.ts +5 -0
  1052. package/dist/telemetry-ingest/index.d.ts.map +1 -0
  1053. package/dist/telemetry-ingest/index.js +8 -0
  1054. package/dist/telemetry-ingest/index.js.map +1 -0
  1055. package/dist/telemetry-ingest/recorder.d.ts +50 -0
  1056. package/dist/telemetry-ingest/recorder.d.ts.map +1 -0
  1057. package/dist/telemetry-ingest/recorder.js +298 -0
  1058. package/dist/telemetry-ingest/recorder.js.map +1 -0
  1059. package/dist/telemetry-ingest/sender.d.ts +14 -0
  1060. package/dist/telemetry-ingest/sender.d.ts.map +1 -0
  1061. package/dist/telemetry-ingest/sender.js +64 -0
  1062. package/dist/telemetry-ingest/sender.js.map +1 -0
  1063. package/dist/telemetry-sqlite/index.d.ts +13 -4
  1064. package/dist/telemetry-sqlite/index.d.ts.map +1 -1
  1065. package/dist/telemetry-sqlite/index.js +81 -241
  1066. package/dist/telemetry-sqlite/index.js.map +1 -1
  1067. package/dist/telemetry-sqlite/node.d.ts +13 -0
  1068. package/dist/telemetry-sqlite/node.d.ts.map +1 -0
  1069. package/dist/telemetry-sqlite/node.js +27 -0
  1070. package/dist/telemetry-sqlite/node.js.map +1 -0
  1071. package/dist/telemetry-sqlite/schema.d.ts +9 -0
  1072. package/dist/telemetry-sqlite/schema.d.ts.map +1 -0
  1073. package/dist/telemetry-sqlite/schema.js +61 -0
  1074. package/dist/telemetry-sqlite/schema.js.map +1 -0
  1075. package/dist/telemetry-sqlite/store.d.ts +3 -0
  1076. package/dist/telemetry-sqlite/store.d.ts.map +1 -1
  1077. package/dist/telemetry-sqlite/store.js +24 -13
  1078. package/dist/telemetry-sqlite/store.js.map +1 -1
  1079. package/dist/telemetry.d.ts +937 -0
  1080. package/dist/telemetry.d.ts.map +1 -0
  1081. package/dist/telemetry.js +470 -0
  1082. package/dist/telemetry.js.map +1 -0
  1083. package/dist/tui/bridge.d.ts +112 -0
  1084. package/dist/tui/bridge.d.ts.map +1 -0
  1085. package/dist/tui/bridge.js +9 -0
  1086. package/dist/tui/bridge.js.map +1 -0
  1087. package/dist/tui/channel.d.ts +44 -0
  1088. package/dist/tui/channel.d.ts.map +1 -0
  1089. package/dist/tui/channel.js +150 -0
  1090. package/dist/tui/channel.js.map +1 -0
  1091. package/dist/tui/frames.d.ts +5 -0
  1092. package/dist/tui/frames.d.ts.map +1 -0
  1093. package/dist/tui/frames.js +52 -0
  1094. package/dist/tui/frames.js.map +1 -0
  1095. package/dist/tui/index.d.ts +7 -0
  1096. package/dist/tui/index.d.ts.map +1 -0
  1097. package/dist/tui/index.js +8 -0
  1098. package/dist/tui/index.js.map +1 -0
  1099. package/dist/tui/runtime.d.ts +46 -0
  1100. package/dist/tui/runtime.d.ts.map +1 -0
  1101. package/dist/tui/runtime.js +101 -0
  1102. package/dist/tui/runtime.js.map +1 -0
  1103. package/dist/tui/scope.d.ts +46 -0
  1104. package/dist/tui/scope.d.ts.map +1 -0
  1105. package/dist/tui/scope.js +141 -0
  1106. package/dist/tui/scope.js.map +1 -0
  1107. package/dist/tui/terminal.d.ts +15 -0
  1108. package/dist/tui/terminal.d.ts.map +1 -0
  1109. package/dist/tui/terminal.js +37 -0
  1110. package/dist/tui/terminal.js.map +1 -0
  1111. package/dist/tui/theme.d.ts +17 -0
  1112. package/dist/tui/theme.d.ts.map +1 -0
  1113. package/dist/tui/theme.js +38 -0
  1114. package/dist/tui/theme.js.map +1 -0
  1115. package/dist/watch.d.ts +194 -0
  1116. package/dist/watch.d.ts.map +1 -0
  1117. package/dist/watch.js +383 -0
  1118. package/dist/watch.js.map +1 -0
  1119. package/dist/web/environment.d.ts +4 -0
  1120. package/dist/web/environment.d.ts.map +1 -0
  1121. package/dist/web/environment.js +37 -0
  1122. package/dist/web/environment.js.map +1 -0
  1123. package/dist/web/index.d.ts +5 -0
  1124. package/dist/web/index.d.ts.map +1 -0
  1125. package/dist/web/index.js +7 -0
  1126. package/dist/web/index.js.map +1 -0
  1127. package/dist/web/language.d.ts +7 -0
  1128. package/dist/web/language.d.ts.map +1 -0
  1129. package/dist/web/language.js +21 -0
  1130. package/dist/web/language.js.map +1 -0
  1131. package/dist/web/page.d.ts +29 -0
  1132. package/dist/web/page.d.ts.map +1 -0
  1133. package/dist/web/page.js +92 -0
  1134. package/dist/web/page.js.map +1 -0
  1135. package/dist/web/scripts.d.ts +23 -0
  1136. package/dist/web/scripts.d.ts.map +1 -0
  1137. package/dist/web/scripts.js +50 -0
  1138. package/dist/web/scripts.js.map +1 -0
  1139. package/dist/web/styles.d.ts +17 -0
  1140. package/dist/web/styles.d.ts.map +1 -0
  1141. package/dist/web/styles.js +218 -0
  1142. package/dist/web/styles.js.map +1 -0
  1143. package/dist/web/themes.d.ts +6 -0
  1144. package/dist/web/themes.d.ts.map +1 -0
  1145. package/dist/web/themes.js +31 -0
  1146. package/dist/web/themes.js.map +1 -0
  1147. package/docs/benchmarks.md +1036 -0
  1148. package/docs/decisions.md +3436 -0
  1149. package/docs/dependencies/book.md +1671 -0
  1150. package/docs/dependencies/index.html +2641 -0
  1151. package/docs/dependencies/model.md +330 -0
  1152. package/docs/design.md +3065 -0
  1153. package/docs/durable-observers/book.md +432 -0
  1154. package/docs/durable-observers/index.html +517 -0
  1155. package/docs/flow-control/book.md +333 -0
  1156. package/docs/flow-control/fold/index.html +265 -0
  1157. package/docs/flow-control/index.html +548 -0
  1158. package/docs/flow-control/window/index.html +228 -0
  1159. package/docs/guide-plugins-hosts/book.md +957 -0
  1160. package/docs/guide-plugins-hosts/index.html +952 -0
  1161. package/docs/http-workers/book.md +378 -0
  1162. package/docs/http-workers/index.html +515 -0
  1163. package/docs/i18n/book.md +217 -0
  1164. package/docs/i18n/index.html +344 -0
  1165. package/docs/layer-1.md +311 -0
  1166. package/docs/layer-2.md +216 -0
  1167. package/docs/p3-features/README.md +6 -0
  1168. package/docs/p3-features/book.md +478 -0
  1169. package/docs/plugin-authoring.md +276 -0
  1170. package/docs/plugin-model/book.md +186 -0
  1171. package/docs/plugin-model/index.html +310 -0
  1172. package/docs/plugin-primer/book.md +273 -0
  1173. package/docs/plugin-primer/index.html +430 -0
  1174. package/docs/slice-1.md +236 -0
  1175. package/docs/slice-10.md +288 -0
  1176. package/docs/slice-11.md +114 -0
  1177. package/docs/slice-12.md +132 -0
  1178. package/docs/slice-13.md +121 -0
  1179. package/docs/slice-2.md +174 -0
  1180. package/docs/slice-3a.md +296 -0
  1181. package/docs/slice-3b.md +197 -0
  1182. package/docs/slice-4.md +146 -0
  1183. package/docs/slice-4a.md +418 -0
  1184. package/docs/slice-4b.md +208 -0
  1185. package/docs/slice-5.md +281 -0
  1186. package/docs/slice-6a.md +676 -0
  1187. package/docs/slice-6b.md +332 -0
  1188. package/docs/slice-7a.md +130 -0
  1189. package/docs/slice-7b/book.md +608 -0
  1190. package/docs/slice-7b/index.html +842 -0
  1191. package/docs/slice-7b.md +255 -0
  1192. package/docs/slice-7c.md +165 -0
  1193. package/docs/slice-8.md +194 -0
  1194. package/docs/slice-9.md +110 -0
  1195. package/docs/slices.md +241 -0
  1196. package/docs/store/book.md +670 -0
  1197. package/docs/store/index.html +861 -0
  1198. package/docs/store/walkthrough.md +193 -0
  1199. package/docs/theming/book.md +223 -0
  1200. package/docs/theming/index.html +371 -0
  1201. package/docs/tutorial/book.md +2169 -0
  1202. package/docs/tutorial/index.html +2112 -0
  1203. package/docs/tutorial/screens/click-after.png +0 -0
  1204. package/docs/tutorial/screens/click-before.png +0 -0
  1205. package/docs/tutorial/screens/edited.png +0 -0
  1206. package/docs/tutorial/screens/french.png +0 -0
  1207. package/docs/tutorial/screens/harbor.png +0 -0
  1208. package/docs/tutorial/screens/page.png +0 -0
  1209. package/docs/tutorial/screens/traces-ada.png +0 -0
  1210. package/docs/tutorial/screens/traces.png +0 -0
  1211. package/package.json +114 -20
  1212. package/src/delta/README.md +69 -0
  1213. package/dist/cell.d.ts +0 -122
  1214. package/dist/cell.d.ts.map +0 -1
  1215. package/dist/cell.js +0 -356
  1216. package/dist/cell.js.map +0 -1
  1217. package/dist/cluster.d.ts +0 -27
  1218. package/dist/cluster.d.ts.map +0 -1
  1219. package/dist/cluster.js +0 -230
  1220. package/dist/cluster.js.map +0 -1
  1221. package/dist/connection.d.ts +0 -270
  1222. package/dist/connection.d.ts.map +0 -1
  1223. package/dist/connection.js +0 -1216
  1224. package/dist/connection.js.map +0 -1
  1225. package/dist/contract.d.ts +0 -208
  1226. package/dist/contract.d.ts.map +0 -1
  1227. package/dist/contract.js +0 -246
  1228. package/dist/contract.js.map +0 -1
  1229. package/dist/declare.d.ts +0 -33
  1230. package/dist/declare.d.ts.map +0 -1
  1231. package/dist/declare.js +0 -2
  1232. package/dist/declare.js.map +0 -1
  1233. package/dist/errors.d.ts +0 -28
  1234. package/dist/errors.d.ts.map +0 -1
  1235. package/dist/errors.js +0 -59
  1236. package/dist/errors.js.map +0 -1
  1237. package/dist/host.d.ts +0 -348
  1238. package/dist/host.d.ts.map +0 -1
  1239. package/dist/host.js +0 -1000
  1240. package/dist/host.js.map +0 -1
  1241. package/dist/link.d.ts +0 -107
  1242. package/dist/link.d.ts.map +0 -1
  1243. package/dist/link.js +0 -355
  1244. package/dist/link.js.map +0 -1
  1245. package/dist/loader.d.ts +0 -4
  1246. package/dist/loader.d.ts.map +0 -1
  1247. package/dist/loader.js +0 -73
  1248. package/dist/loader.js.map +0 -1
  1249. package/dist/manager.d.ts +0 -115
  1250. package/dist/manager.d.ts.map +0 -1
  1251. package/dist/manager.js +0 -345
  1252. package/dist/manager.js.map +0 -1
  1253. package/dist/node.d.ts +0 -4
  1254. package/dist/node.d.ts.map +0 -1
  1255. package/dist/node.js +0 -4
  1256. package/dist/node.js.map +0 -1
  1257. package/dist/object.d.ts +0 -438
  1258. package/dist/object.d.ts.map +0 -1
  1259. package/dist/object.js +0 -1571
  1260. package/dist/object.js.map +0 -1
  1261. package/dist/publish.d.ts +0 -5
  1262. package/dist/publish.d.ts.map +0 -1
  1263. package/dist/publish.js +0 -40
  1264. package/dist/publish.js.map +0 -1
  1265. package/dist/registry.d.ts +0 -25
  1266. package/dist/registry.d.ts.map +0 -1
  1267. package/dist/registry.js +0 -6
  1268. package/dist/registry.js.map +0 -1
  1269. package/dist/reload.d.ts +0 -126
  1270. package/dist/reload.d.ts.map +0 -1
  1271. package/dist/reload.js +0 -653
  1272. package/dist/reload.js.map +0 -1
  1273. package/dist/remote.d.ts +0 -165
  1274. package/dist/remote.d.ts.map +0 -1
  1275. package/dist/remote.js +0 -612
  1276. package/dist/remote.js.map +0 -1
  1277. package/dist/schema.d.ts +0 -21
  1278. package/dist/schema.d.ts.map +0 -1
  1279. package/dist/schema.js +0 -228
  1280. package/dist/schema.js.map +0 -1
  1281. package/dist/state.d.ts +0 -92
  1282. package/dist/state.d.ts.map +0 -1
  1283. package/dist/state.js +0 -287
  1284. package/dist/state.js.map +0 -1
  1285. package/dist/types.d.ts +0 -88
  1286. package/dist/types.d.ts.map +0 -1
  1287. package/dist/types.js +0 -2
  1288. package/dist/types.js.map +0 -1
  1289. package/dist/websocket.d.ts +0 -15
  1290. package/dist/websocket.d.ts.map +0 -1
  1291. package/dist/websocket.js +0 -16
  1292. package/dist/websocket.js.map +0 -1
  1293. package/dist/wire.d.ts +0 -216
  1294. package/dist/wire.d.ts.map +0 -1
  1295. package/dist/wire.js +0 -165
  1296. package/dist/wire.js.map +0 -1
  1297. package/docs/guide.md +0 -814
  1298. package/docs/spec.md +0 -288
  1299. package/docs/tutorial.md +0 -931
@@ -0,0 +1,524 @@
1
+ // The HTTP component (slice 10 §2; decisions "The HTTP core is a fetch handler", "The HTTP server is a native object",
2
+ // "The HTTP component's security baseline", "Settings are arguments, extensions are registries"): `createHttp` takes
3
+ // the app's settings (where to listen, the links endpoint, the close bound) and builds one Web-standard handler,
4
+ // `fetch`, from the registries its facet serves (`Http`, `Authenticators`), an upgrade adapter for Node (`upgrade`), and
5
+ // the facet, whose host-lifetime listener object is Chord's own Node server. Every request is admitted (provenance), routed,
6
+ // checked for foreign origins, authenticated unless foreign, and served in one `host.root` scope with its principal
7
+ // that lasts until its body is delivered (a routed one in a `chord.http` span with an adapter, slice 9); every answer
8
+ // carries the default headers.
9
+ import { awaitWithContext, withAbortSignal, withoutAbortSignal, withTelemetry, } from "../../context/index.js";
10
+ import { local } from "../../contracts/index.js";
11
+ import { isChordError } from "../../data/index.js";
12
+ import { defineFacet } from "../../host/index.js";
13
+ import { hostAttribute, OpenSpan, parentOf, spanFailed, untraced } from "../../telemetry.js";
14
+ import { admit, isForeign, isNavigation, originAccepted, refused, } from "./admission.js";
15
+ import { Authenticators, authenticate, composeAuthenticators } from "./authenticate.js";
16
+ import { DefaultHeaders, Nonces } from "./headers.js";
17
+ import { webIncoming } from "./incoming.js";
18
+ import { connectionOf, NodeIncoming, NodeListener } from "./node.js";
19
+ import { HttpFailure, WebRequest } from "./request.js";
20
+ import { answerOf, errorAnswer, webResponse } from "./response.js";
21
+ import { composeRouter, Http } from "./router.js";
22
+ import { Upgrades } from "./upgrades.js";
23
+ /** Builds the HTTP component on `host` (a request's scope is a `host.root` with its principal). */
24
+ export function createHttp(host, options, context) {
25
+ return new Component(host, options, context);
26
+ }
27
+ /** The listener: a host-lifetime object of plugin `chord.http` whose native is Chord's own Node server. */
28
+ export const HttpListener = local("chord.http.listener", { version: 1, params: {}, members: {} });
29
+ /** `close`'s bound unless `closeTimeout` says otherwise: 30 s. */
30
+ const CLOSE_TIMEOUT = 30_000;
31
+ /** Who threw out of a route itself (no wrap). */
32
+ const ROUTE = { kind: "route" };
33
+ class Component {
34
+ facet;
35
+ upgrade;
36
+ #host;
37
+ #options;
38
+ /** The `chord.host` of its `chord.http` spans: its host's. */
39
+ #spanHost;
40
+ #onError;
41
+ #context;
42
+ /** The component's context without its cancellation: each request's scope adds its own signal. */
43
+ #base;
44
+ #defaults = new DefaultHeaders();
45
+ #nonces = new Nonces();
46
+ #upgrades = new Upgrades();
47
+ #running = new Set();
48
+ /** The registries while they resolve (once; again after a failed try), then the values themselves. */
49
+ #resolving;
50
+ #registries;
51
+ /** Aborted at `close`: the router's watch. */
52
+ #closing = new AbortController();
53
+ #closed;
54
+ #listening = Promise.withResolvers();
55
+ constructor(host, options, context) {
56
+ this.#host = host;
57
+ this.#options = options;
58
+ this.#spanHost = hostAttribute(host.address);
59
+ this.#onError = options.onError;
60
+ this.#context = context;
61
+ this.#base = withoutAbortSignal(context);
62
+ this.#listening.promise.catch(() => { });
63
+ this.upgrade = (message, socket, head) => {
64
+ socket.on("error", () => socket.destroy());
65
+ void this.#upgrade(message, socket, head).catch(() => socket.destroy());
66
+ };
67
+ const { listen } = options;
68
+ this.facet = defineFacet((facet) => {
69
+ facet.serve(Http, { compose: composeRouter });
70
+ facet.serve(Authenticators, { compose: composeAuthenticators });
71
+ if (listen === undefined)
72
+ return;
73
+ facet.serve(HttpListener, (_params, self) => {
74
+ self.open((opening) => this.#listen(listen, opening), async (listener, _reason, closing) => {
75
+ listener.stop();
76
+ await this.close(closing);
77
+ await listener.closed();
78
+ });
79
+ return {};
80
+ });
81
+ });
82
+ }
83
+ async fetch(request, connection = {}) {
84
+ const { answer, finished } = await this.serve(webIncoming(request), connection);
85
+ // A whole body is out of the component's hands once its `Response` is; a pulled one ends when it is read.
86
+ if (answer.body instanceof ReadableStream)
87
+ return webResponse({ ...answer, body: tracked(answer.body, finished) });
88
+ finished();
89
+ return webResponse(answer);
90
+ }
91
+ listening(context) {
92
+ return awaitWithContext(this.#listening.promise, context);
93
+ }
94
+ close(context) {
95
+ this.#closed ??= this.#close(context);
96
+ return this.#closed;
97
+ }
98
+ /**
99
+ * Serves `request`: its answer, and what its consumer calls once the body is written or abandoned. Never throws:
100
+ * whatever fails answers (503 before the host's `load` or while closing, 403, 404, 500 reported).
101
+ */
102
+ async serve(request, connection) {
103
+ const controller = new AbortController();
104
+ const finished = Promise.withResolvers();
105
+ const running = { controller, done: finished.promise };
106
+ this.#running.add(running);
107
+ request.cancelled((reason) => controller.abort(reason));
108
+ let answer;
109
+ try {
110
+ const served = await this.#serve(request, connection, controller, finished.promise);
111
+ answer = served.answer;
112
+ // The request is over once its consumer finished and its scope (if it got one) ended.
113
+ if (served.scope !== undefined)
114
+ running.done = Promise.all([finished.promise, served.scope]);
115
+ }
116
+ catch {
117
+ answer = this.refusal(500);
118
+ }
119
+ void running.done.then(() => this.#running.delete(running));
120
+ return { answer, finished: () => finished.resolve() };
121
+ }
122
+ /** The answer for a refused or failed request, outside any scope, with the default headers. */
123
+ refusal(status, admitted, router, head = false) {
124
+ return errorAnswer(status, this.#defaults.of(admitted, router, this.#nonces.next()), undefined, head);
125
+ }
126
+ /** The steps of `serve`: closing, the registries, admission, the route, origins, the principal, then the scope. */
127
+ async #serve(request, connection, controller, finished) {
128
+ const head = request.method === "HEAD";
129
+ if (this.#closing.signal.aborted)
130
+ return { answer: this.refusal(503, undefined, undefined, head) };
131
+ let registries;
132
+ try {
133
+ registries = this.#registries ?? (await this.#resolve());
134
+ }
135
+ catch {
136
+ return { answer: this.refusal(503, undefined, undefined, head) };
137
+ }
138
+ if (this.#closing.signal.aborted)
139
+ return { answer: this.refusal(503, undefined, undefined, head) };
140
+ const router = registries.router.value;
141
+ const admission = admit(request, connection, router.hosts, router.relays);
142
+ if (refused(admission)) {
143
+ if (admission.failed !== undefined)
144
+ this.#hookFailed("relay", admission.failed.relay, admission.failed.error);
145
+ return { answer: this.refusal(403, undefined, router, head) };
146
+ }
147
+ // A fresh script nonce per response (decision "A CSP nonce per response").
148
+ const webRequest = new WebRequest(request, admission, this.#nonces.next(), connection.remoteAddress);
149
+ const match = router.route(request.method, webRequest.path);
150
+ if (match === "bad_path" || match === undefined) {
151
+ return { answer: this.refusal(match === undefined ? 404 : 400, admission, router, head) };
152
+ }
153
+ webRequest.params = match.params;
154
+ const foreign = isForeign(request);
155
+ if (!match.crossSite && !originAccepted(request.method, request, admission.origin)) {
156
+ return { answer: this.refusal(403, admission, router, head) };
157
+ }
158
+ let principal;
159
+ // Foreign requests are never authenticated but a top-level navigation to a page; a cross-site route never is.
160
+ const authenticators = registries.authenticators.value;
161
+ if (authenticators.length > 0 &&
162
+ !match.crossSite &&
163
+ (!foreign || (match.page && isNavigation(request.method, request)))) {
164
+ principal = await this.#principal(registries, webRequest, controller.signal);
165
+ if (this.#closing.signal.aborted || controller.signal.aborted) {
166
+ return { answer: this.refusal(503, admission, router, head) };
167
+ }
168
+ }
169
+ // Deny by default (decision "The app kit, point 3"): no plugin code runs for nobody unless the route is public.
170
+ if (principal === undefined && !match.public)
171
+ return { answer: this.refusal(401, admission, router, head) };
172
+ const answered = Promise.withResolvers();
173
+ const span = this.#span(request, match, admission);
174
+ const base = withAbortSignal(controller.signal, this.#base);
175
+ const scope = this.#host
176
+ .root(async (ctx) => {
177
+ answered.resolve(await this.#run(request, webRequest, match, admission, router, foreign, ctx));
178
+ // The scope lasts until the body is written or abandoned (a `bytes` body reads in it).
179
+ await finished;
180
+ }, span === undefined ? base : withTelemetry(span.span, base), { principal })
181
+ .catch(() => {
182
+ // The scope was sealed (a disconnect, `close`) before it answered: the request is over.
183
+ answered.resolve(this.refusal(503, admission, router, head));
184
+ });
185
+ const answer = await answered.promise;
186
+ if (span !== undefined) {
187
+ span.span.setAttributes({ status: answer.status });
188
+ if (answer.status >= 500)
189
+ spanFailed(span.span, "http_failed", `status ${answer.status}`);
190
+ void scope.then(() => span.end());
191
+ }
192
+ return { answer, scope };
193
+ }
194
+ /**
195
+ * A routed request's `chord.http` span (its method and route pattern; its path never: it may carry ids or secrets):
196
+ * a root of the adapter, or the child of a W3C `traceparent` (and its `tracestate`) of a request a contributed relay
197
+ * verified, never a browser's; none without an adapter that records.
198
+ */
199
+ #span(request, match, admission) {
200
+ const adapter = this.#options.telemetry;
201
+ if (adapter === undefined || untraced(adapter))
202
+ return undefined;
203
+ const attributes = { "chord.host": this.#spanHost, method: request.method, route: match.pattern };
204
+ const traceparent = admission.provenance.kind === "relayed" ? traceHeader(request, "traceparent") : undefined;
205
+ if (traceparent === undefined)
206
+ return new OpenSpan(adapter, "chord.http", attributes);
207
+ const tracestate = traceHeader(request, "tracestate");
208
+ const carrier = tracestate === undefined ? { traceparent } : { traceparent, tracestate };
209
+ return new OpenSpan(parentOf(carrier, adapter), "chord.http", attributes);
210
+ }
211
+ /** Runs the wraps and the route in the request's scope `ctx`, and makes its answer (a failure: a reported 500). */
212
+ async #run(incoming, request, match, admitted, router, foreign, ctx) {
213
+ let response;
214
+ try {
215
+ response = await chainOf(match, ctx)(request);
216
+ }
217
+ catch (error) {
218
+ response = this.#failure(error, match);
219
+ }
220
+ // Downloads are never another site's to take (rule 6).
221
+ if (response.kind === "bytes" && foreign)
222
+ response = { kind: "error", status: 403 };
223
+ const failed = (error) => this.#onError({ kind: "response_failed", pattern: match.pattern, error });
224
+ try {
225
+ return answerOf(response, incoming, this.#defaults.of(admitted, router, request.nonce), ctx, failed);
226
+ }
227
+ catch (error) {
228
+ failed(error);
229
+ return this.refusal(500, admitted, router, request.method === "HEAD");
230
+ }
231
+ }
232
+ /** What an error escaping the chain answers: its `HttpFailure`'s status, else a reported 500 without its message. */
233
+ #failure(error, match) {
234
+ const thrown = error instanceof Thrown ? error : new Thrown(ROUTE, match.plugin, error);
235
+ if (thrown.cause instanceof HttpFailure)
236
+ return { kind: "error", status: thrown.cause.status };
237
+ // Chord refused the caller (an anonymous scope's remote object, a route's `authorize`): no failure of the route.
238
+ if (isChordError(thrown.cause, "forbidden"))
239
+ return { kind: "error", status: 403 };
240
+ if (thrown.by.kind === "route") {
241
+ this.#onError({ kind: "route_failed", pattern: match.pattern, plugin: thrown.plugin, error: thrown.cause });
242
+ }
243
+ else {
244
+ this.#onError({ kind: "wrap_failed", name: thrown.by.name, plugin: thrown.plugin, error: thrown.cause });
245
+ }
246
+ return { kind: "error", status: 500 };
247
+ }
248
+ /**
249
+ * The principal the authenticators give `request`; one that throws is reported and skipped. Raced against `signal`
250
+ * (a disconnect, `close`'s seal): an authenticator ignoring it no longer holds the request; the caller sees the
251
+ * abort and answers 503.
252
+ */
253
+ async #principal(registries, request, signal) {
254
+ const failed = (plugin, error) => this.#hookFailed("authenticate", plugin, error);
255
+ const context = withAbortSignal(signal, this.#base);
256
+ const authenticating = authenticate(registries.authenticators.value, request, failed, context);
257
+ // The registry's values are typed by no principal type: an app's authenticators return its principals.
258
+ return (await awaitWithContext(authenticating, context).catch(() => undefined));
259
+ }
260
+ #hookFailed(hook, plugin, error) {
261
+ this.#onError({ kind: "hook_failed", hook, ...(plugin === undefined ? {} : { plugin }), error });
262
+ }
263
+ /** The registries: resolved once, after the host's `load` (`not_ready` before it); a failed try is tried again later. */
264
+ #resolve() {
265
+ this.#resolving ??= Promise.all([
266
+ this.#host.registry(Http, this.#context),
267
+ this.#host.registry(Authenticators, this.#context),
268
+ ]).then(([router, authenticators]) => {
269
+ this.#registries = { router, authenticators };
270
+ // A close may come first: nothing to follow then (Astra's recheck R4: the stopped watch threw unhandled).
271
+ this.#follow(router).catch(() => { });
272
+ return this.#registries;
273
+ }, (error) => {
274
+ this.#resolving = undefined;
275
+ throw error;
276
+ });
277
+ return this.#resolving;
278
+ }
279
+ /** Follows the router until `close`: connections its changes no longer admit are terminated. */
280
+ async #follow(router) {
281
+ if (this.#closing.signal.aborted)
282
+ return;
283
+ const watch = await router.watch(withAbortSignal(this.#closing.signal, this.#base));
284
+ if (this.#closing.signal.aborted)
285
+ return;
286
+ watch.start(async (call) => {
287
+ if (call.kind === "value")
288
+ this.#upgrades.revoke(call.value);
289
+ });
290
+ }
291
+ /** One upgrade, tracked from its arrival: refused while closing, else admitted and checked, then handed out. */
292
+ async #upgrade(message, stream, head) {
293
+ const controller = new AbortController();
294
+ // A client gone while its upgrade authenticates aborts that work (Astra's recheck R1, Sol's N5).
295
+ const gone = () => controller.abort(new Error("http: the client disconnected"));
296
+ if (stream.destroyed)
297
+ gone();
298
+ else {
299
+ // A clean disconnect (FIN) is seen only by reading: nothing reads a detached upgrade socket, so start it
300
+ // (Fable's second recheck: `end()` while authenticating went unnoticed).
301
+ stream.once("close", gone);
302
+ stream.once("end", gone);
303
+ stream.read(0);
304
+ }
305
+ const running = { controller, done: Promise.resolve() };
306
+ const work = this.#upgradeSteps(message, stream, head, controller.signal);
307
+ running.done = work;
308
+ this.#running.add(running);
309
+ try {
310
+ await work;
311
+ }
312
+ finally {
313
+ stream.removeListener("close", gone);
314
+ stream.removeListener("end", gone);
315
+ this.#running.delete(running);
316
+ }
317
+ }
318
+ /** The steps of an upgrade (the same rules as a request's; a socket needs a principal), checked again at hand-out. */
319
+ async #upgradeSteps(message, stream, head, signal) {
320
+ if (this.#closing.signal.aborted)
321
+ return refuse(stream, 503);
322
+ const request = NodeIncoming.of(message);
323
+ if (!(request instanceof NodeIncoming))
324
+ return refuse(stream, request.status);
325
+ let registries;
326
+ try {
327
+ registries = this.#registries ?? (await this.#resolve());
328
+ }
329
+ catch {
330
+ return refuse(stream, 503);
331
+ }
332
+ if (this.#closing.signal.aborted || signal.aborted)
333
+ return refuse(stream, 503);
334
+ const before = registries.router.value;
335
+ const connection = connectionOf(message);
336
+ const admission = admit(request, connection, before.hosts, before.relays);
337
+ if (refused(admission)) {
338
+ if (admission.failed !== undefined)
339
+ this.#hookFailed("relay", admission.failed.relay, admission.failed.error);
340
+ return refuse(stream, 403);
341
+ }
342
+ const sent = request.header("origin");
343
+ if (isForeign(request) || (sent !== null && sent !== admission.origin))
344
+ return refuse(stream, 403);
345
+ const webRequest = new WebRequest(request, admission, this.#nonces.next(), connection.remoteAddress);
346
+ const principal = await this.#principal(registries, webRequest, signal);
347
+ if (this.#closing.signal.aborted || signal.aborted)
348
+ return refuse(stream, 503);
349
+ // The router now: a host, a relay or a socket removed while authenticating refuses the upgrade.
350
+ const router = registries.router.value;
351
+ const { allowed, relay } = admission;
352
+ if ((allowed !== undefined && !router.hosts.has(allowed)) ||
353
+ (relay !== undefined && !router.relays.includes(relay))) {
354
+ return refuse(stream, 403);
355
+ }
356
+ const { links } = this.#options;
357
+ if (links !== undefined && webRequest.path === links.path) {
358
+ // The links endpoint always needs a principal: a link acts as one.
359
+ if (principal === undefined)
360
+ return refuse(stream, 401);
361
+ let options;
362
+ try {
363
+ options =
364
+ (typeof links.options === "function" ? links.options(webRequest, principal) : links.options) ?? {};
365
+ }
366
+ catch (error) {
367
+ this.#hookFailed("links.options", undefined, error);
368
+ return refuse(stream, 403);
369
+ }
370
+ const admitted = { allowed, relay, principal, ...options };
371
+ const opened = () => {
372
+ try {
373
+ return links.opened?.(webRequest, principal);
374
+ }
375
+ catch (error) {
376
+ this.#hookFailed("links.opened", undefined, error);
377
+ return undefined;
378
+ }
379
+ };
380
+ return this.#upgrades.link(message, stream, head, admitted, this.#host, this.#context, opened);
381
+ }
382
+ const match = router.socket(webRequest.path);
383
+ if (match === "bad_path")
384
+ return refuse(stream, 400);
385
+ if (match === undefined)
386
+ return refuse(stream, 404);
387
+ if (principal === undefined && !match.public)
388
+ return refuse(stream, 401);
389
+ webRequest.params = match.params;
390
+ const fail = ({ pattern, plugin, error }) => this.#onError({ kind: "socket_failed", pattern, plugin, error });
391
+ const admitted = { allowed, relay, principal, match, request: webRequest };
392
+ this.#upgrades.socket(message, stream, head, admitted, this.#host, this.#context, fail);
393
+ }
394
+ /** The listener's open: Chord's own Node server listening at `listen`. */
395
+ async #listen(listen, context) {
396
+ const listener = await NodeListener.listen(this, listen, context);
397
+ this.#listening.resolve(listener.address);
398
+ return listener;
399
+ }
400
+ /** `close`: refuses from now on, then waits for sockets and running requests until the deadline, then seals. */
401
+ async #close(context) {
402
+ this.#closing.abort();
403
+ this.#listening.reject(new Error("http: closed"));
404
+ const timeout = this.#options.closeTimeout ?? CLOSE_TIMEOUT;
405
+ const signal = context.abortSignal;
406
+ let timer;
407
+ let aborted;
408
+ const deadline = new Promise((resolve) => {
409
+ // Already aborted: no wait at all (Sol's recheck N9).
410
+ if (signal?.aborted)
411
+ return resolve();
412
+ timer = setTimeout(resolve, timeout);
413
+ aborted = () => resolve();
414
+ signal?.addEventListener("abort", aborted, { once: true });
415
+ });
416
+ const running = Promise.all([...this.#running].map(({ done }) => done));
417
+ await Promise.race([Promise.all([this.#upgrades.close(deadline), running]), deadline]);
418
+ clearTimeout(timer);
419
+ if (aborted !== undefined)
420
+ signal?.removeEventListener("abort", aborted);
421
+ for (const { controller } of this.#running)
422
+ controller.abort(new Error("http: closed"));
423
+ }
424
+ }
425
+ /**
426
+ * `stream` as read by its consumer, `finished` called once it is read to its end, failed or cancelled (a mounted
427
+ * handler's `bytes` body: the request's scope lasts until then).
428
+ */
429
+ function tracked(stream, finished) {
430
+ const reader = stream.getReader();
431
+ // The owned stream ending (read whole, or errored by the scope's seal) ends the request too, whether or not its
432
+ // consumer pulls again (Sol's second recheck B: an aborted `Response` nobody touched kept its request and scope).
433
+ reader.closed.then(finished, finished);
434
+ return new ReadableStream({
435
+ pull: async (controller) => {
436
+ try {
437
+ const next = await reader.read();
438
+ if (next.done) {
439
+ controller.close();
440
+ finished();
441
+ }
442
+ else {
443
+ controller.enqueue(next.value);
444
+ }
445
+ }
446
+ catch (error) {
447
+ controller.error(error);
448
+ finished();
449
+ }
450
+ },
451
+ cancel: async (reason) => {
452
+ finished();
453
+ await reader.cancel(reason);
454
+ },
455
+ }, { highWaterMark: 0 });
456
+ }
457
+ /**
458
+ * The longest W3C trace header taken from a relayed request (`traceparent` is 55 characters, `tracestate` at most 512):
459
+ * the relay forwards what the browser sent unless it strips them, so they are bounded as a link's carrier is (review L2).
460
+ */
461
+ const TRACE_HEADERS = { traceparent: 256, tracestate: 512 };
462
+ /** Printable ASCII, as a link's carrier. */
463
+ const PRINTABLE = /^[\x20-\x7e]*$/;
464
+ /** A W3C trace header of `request`, when present, within its bound and printable; otherwise none (ignored). */
465
+ function traceHeader(request, name) {
466
+ const value = request.header(name);
467
+ if (value === null || value.length > TRACE_HEADERS[name] || !PRINTABLE.test(value))
468
+ return undefined;
469
+ return value;
470
+ }
471
+ /** Refuses an upgrade with `status` and closes its connection. */
472
+ function refuse(stream, status) {
473
+ stream.end(`HTTP/1.1 ${status} ${STATUS[status] ?? ""}\r\nConnection: close\r\nContent-Length: 0\r\n\r\n`);
474
+ }
475
+ /** The reason phrases of the statuses an upgrade is refused with. */
476
+ const STATUS = {
477
+ 400: "Bad Request",
478
+ 401: "Unauthorized",
479
+ 403: "Forbidden",
480
+ 404: "Not Found",
481
+ 501: "Not Implemented",
482
+ 503: "Service Unavailable",
483
+ };
484
+ /** Who threw out of a request's chain: the route, or a wrap (by name), with its plugin. */
485
+ class Thrown extends Error {
486
+ by;
487
+ plugin;
488
+ constructor(by, plugin, cause) {
489
+ super("thrown", { cause });
490
+ this.by = by;
491
+ this.plugin = plugin;
492
+ }
493
+ }
494
+ /** The route of `match` inside its wraps (outermost first), each throw tagged with who threw it. */
495
+ function chainOf(match, ctx) {
496
+ let next = tagged(match.handler, match.plugin, ctx);
497
+ for (let index = match.wraps.length - 1; index >= 0; index--) {
498
+ const { wrap, plugin } = match.wraps[index];
499
+ const inner = next;
500
+ next = async (request) => {
501
+ try {
502
+ return await wrap.wrap(request, inner, ctx);
503
+ }
504
+ catch (error) {
505
+ if (error instanceof Thrown)
506
+ throw error;
507
+ throw new Thrown({ kind: "wrap", name: wrap.name }, plugin, error);
508
+ }
509
+ };
510
+ }
511
+ return next;
512
+ }
513
+ /** `route` with its throws tagged as the route's. */
514
+ function tagged(route, plugin, ctx) {
515
+ return async (request) => {
516
+ try {
517
+ return await route(request, ctx);
518
+ }
519
+ catch (error) {
520
+ throw new Thrown(ROUTE, plugin, error);
521
+ }
522
+ };
523
+ }
524
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/node/http/http.ts"],"names":[],"mappings":"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","sourcesContent":["// The HTTP component (slice 10 §2; decisions \"The HTTP core is a fetch handler\", \"The HTTP server is a native object\",\n// \"The HTTP component's security baseline\", \"Settings are arguments, extensions are registries\"): `createHttp` takes\n// the app's settings (where to listen, the links endpoint, the close bound) and builds one Web-standard handler,\n// `fetch`, from the registries its facet serves (`Http`, `Authenticators`), an upgrade adapter for Node (`upgrade`), and\n// the facet, whose host-lifetime listener object is Chord's own Node server. Every request is admitted (provenance), routed,\n// checked for foreign origins, authenticated unless foreign, and served in one `host.root` scope with its principal\n// that lasts until its body is delivered (a routed one in a `chord.http` span with an adapter, slice 9); every answer\n// carries the default headers.\n\nimport type { IncomingMessage } from \"node:http\";\nimport type { Duplex } from \"node:stream\";\nimport type { TelemetryCarrier, TelemetryContext } from \"@earendil-works/pi-telemetry\";\nimport {\n\tawaitWithContext,\n\ttype Context,\n\twithAbortSignal,\n\twithoutAbortSignal,\n\twithTelemetry,\n} from \"../../context/index.ts\";\nimport { local } from \"../../contracts/index.ts\";\nimport { isChordError, type Principal } from \"../../data/index.ts\";\nimport { type Ctx, defineFacet, type Facet, type Host } from \"../../host/index.ts\";\nimport type { RegistryValue } from \"../../registries/index.ts\";\nimport { hostAttribute, OpenSpan, parentOf, spanFailed, untraced } from \"../../telemetry.ts\";\nimport {\n\ttype Admitted,\n\tadmit,\n\ttype Connection,\n\tisForeign,\n\tisNavigation,\n\toriginAccepted,\n\trefused,\n} from \"./admission.ts\";\nimport { type AuthenticatorEntry, Authenticators, authenticate, composeAuthenticators } from \"./authenticate.ts\";\nimport { DefaultHeaders, Nonces } from \"./headers.ts\";\nimport { type Incoming, webIncoming } from \"./incoming.ts\";\nimport { connectionOf, type Handler, type ListenAddress, NodeIncoming, NodeListener, type Served } from \"./node.ts\";\nimport { HttpFailure, type HttpRequest, WebRequest } from \"./request.ts\";\nimport { type Answer, answerOf, errorAnswer, type HttpResponse, webResponse } from \"./response.ts\";\nimport { composeRouter, Http, type HttpRoute, type RouteMatch, type Router } from \"./router.ts\";\nimport { type LinkOptions, Upgrades } from \"./upgrades.ts\";\n\n/** What `createHttp` takes: the app's settings, fixed for the component's life (changing one is a restart). */\nexport type HttpOptions = {\n\t/** Where Chord's own listener listens; none: no listener (an app mounting `fetch`). Port 0 picks one. */\n\treadonly listen?: ListenAddress;\n\t/** The links endpoint: its path, and each socket's options, a value or per request and principal. */\n\treadonly links?: LinksOptions;\n\t/** How long `close` waits for running requests and closing sockets: 30 s by default. */\n\treadonly closeTimeout?: number;\n\t/**\n\t * The telemetry adapter (the host's): each routed request is a `chord.http` root span, its scope's `ctx` under it; a\n\t * W3C `traceparent` is extracted only from a request a contributed relay verified. NOOP by default.\n\t */\n\treadonly telemetry?: TelemetryContext;\n\treadonly onError: (error: HttpError) => void;\n};\n\n/** The links endpoint's path and what it gives each socket (`maxPayload` 1 MiB by default). */\nexport type LinksOptions = {\n\treadonly path: string;\n\treadonly options?: LinkOptions | ((request: HttpRequest, principal: Principal) => LinkOptions);\n\t/**\n\t * Called when a link is accepted, with its request and principal; what it returns is called when that link closes\n\t * (the app tracking its clients' links: the kit ends an ephemeral session with its last link).\n\t */\n\treadonly opened?: (request: HttpRequest, principal: Principal) => (() => void) | undefined;\n};\n\n/** What the component reports. */\nexport type HttpError =\n\t| { readonly kind: \"route_failed\"; readonly pattern: string; readonly plugin: string; readonly error: unknown }\n\t| { readonly kind: \"wrap_failed\"; readonly name: string; readonly plugin: string; readonly error: unknown }\n\t| { readonly kind: \"socket_failed\"; readonly pattern: string; readonly plugin: string; readonly error: unknown }\n\t/** A response that could not be made (an invalid header, no JSON) or read whole (a `bytes` read that threw). */\n\t| { readonly kind: \"response_failed\"; readonly pattern: string; readonly error: unknown }\n\t/** A contributed hook threw (`plugin`), or the app's `links.options` (no plugin). */\n\t| { readonly kind: \"hook_failed\"; readonly hook: HookName; readonly plugin?: string; readonly error: unknown };\n\n/** The hooks the component calls. */\nexport type HookName = \"authenticate\" | \"relay\" | \"links.options\" | \"links.opened\";\n\n/** The running component. */\nexport interface HttpComponent<P extends Principal> {\n\t/**\n\t * Its facet (plugin `chord.http`): serves `Http` and `Authenticators`, and with `listen` the listener, a\n\t * host-lifetime object. The app loads it among its core facets, the same object at every reload.\n\t */\n\treadonly facet: Facet<P>;\n\t/**\n\t * Answers a Web `Request` (an app's own server mounts it: `hono.all(\"/*\", (c) => http.fetch(c.req.raw, …))`);\n\t * `connection` is what the server knows of the socket: without `localAddress` and `localPort` no request is local.\n\t * Requests before the host's `load` answer 503 at once (its `host.registry` throws `not_ready` then).\n\t */\n\tfetch(request: Request, connection?: Connection): Promise<Response>;\n\t/** Node's upgrade adapter (`server.on(\"upgrade\", http.upgrade)`): the links endpoint and plugin sockets. */\n\treadonly upgrade: (message: IncomingMessage, socket: Duplex, head: Buffer) => void;\n\t/** Where the listener listens, once it does (the real port when `listen.port` was 0). */\n\tlistening(context: Context): Promise<ListenAddress>;\n\t/**\n\t * Refuses new requests and upgrades (503), closes sockets and links (1001, terminated at `closeTimeout`), waits for\n\t * running requests up to `closeTimeout` (an aborted `context`: not at all), then seals them. Run it before\n\t * `host.close`, which seals every request's scope at once (the listener's close runs it then, too late to drain).\n\t */\n\tclose(context: Context): Promise<void>;\n}\n\n/** Builds the HTTP component on `host` (a request's scope is a `host.root` with its principal). */\nexport function createHttp<P extends Principal>(\n\thost: Host<P>,\n\toptions: HttpOptions,\n\tcontext: Context,\n): HttpComponent<P> {\n\treturn new Component(host, options, context);\n}\n\n/** The listener: a host-lifetime object of plugin `chord.http` whose native is Chord's own Node server. */\nexport const HttpListener = local(\"chord.http.listener\", { version: 1, params: {}, members: {} });\n\n/** The registries a request reads, resolved once. */\ntype Registries = {\n\treadonly router: RegistryValue<Router>;\n\treadonly authenticators: RegistryValue<readonly AuthenticatorEntry[]>;\n};\n\n/** A request or an upgrade from its arrival to its end: what `close` waits for, then seals. */\ntype Running = { readonly controller: AbortController; done: Promise<unknown> };\n\n/** `close`'s bound unless `closeTimeout` says otherwise: 30 s. */\nconst CLOSE_TIMEOUT = 30_000;\n\n/** Who threw out of a route itself (no wrap). */\nconst ROUTE = { kind: \"route\" } as const;\n\nclass Component<P extends Principal> implements HttpComponent<P>, Handler {\n\treadonly facet: Facet<P>;\n\treadonly upgrade: (message: IncomingMessage, socket: Duplex, head: Buffer) => void;\n\treadonly #host: Host<P>;\n\treadonly #options: HttpOptions;\n\t/** The `chord.host` of its `chord.http` spans: its host's. */\n\treadonly #spanHost: string;\n\treadonly #onError: (error: HttpError) => void;\n\treadonly #context: Context;\n\t/** The component's context without its cancellation: each request's scope adds its own signal. */\n\treadonly #base: Context;\n\treadonly #defaults = new DefaultHeaders();\n\treadonly #nonces = new Nonces();\n\treadonly #upgrades = new Upgrades();\n\treadonly #running = new Set<Running>();\n\t/** The registries while they resolve (once; again after a failed try), then the values themselves. */\n\t#resolving: Promise<Registries> | undefined;\n\t#registries: Registries | undefined;\n\t/** Aborted at `close`: the router's watch. */\n\treadonly #closing = new AbortController();\n\t#closed: Promise<void> | undefined;\n\treadonly #listening = Promise.withResolvers<ListenAddress>();\n\n\tconstructor(host: Host<P>, options: HttpOptions, context: Context) {\n\t\tthis.#host = host;\n\t\tthis.#options = options;\n\t\tthis.#spanHost = hostAttribute(host.address);\n\t\tthis.#onError = options.onError;\n\t\tthis.#context = context;\n\t\tthis.#base = withoutAbortSignal(context);\n\t\tthis.#listening.promise.catch(() => {});\n\t\tthis.upgrade = (message, socket, head) => {\n\t\t\tsocket.on(\"error\", () => socket.destroy());\n\t\t\tvoid this.#upgrade(message, socket, head).catch(() => socket.destroy());\n\t\t};\n\t\tconst { listen } = options;\n\t\tthis.facet = defineFacet<P>((facet) => {\n\t\t\tfacet.serve(Http, { compose: composeRouter });\n\t\t\tfacet.serve(Authenticators, { compose: composeAuthenticators });\n\t\t\tif (listen === undefined) return;\n\t\t\tfacet.serve(HttpListener, (_params, self) => {\n\t\t\t\tself.open(\n\t\t\t\t\t(opening) => this.#listen(listen, opening),\n\t\t\t\t\tasync (listener, _reason, closing) => {\n\t\t\t\t\t\tlistener.stop();\n\t\t\t\t\t\tawait this.close(closing);\n\t\t\t\t\t\tawait listener.closed();\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\treturn {};\n\t\t\t});\n\t\t});\n\t}\n\n\tasync fetch(request: Request, connection: Connection = {}): Promise<Response> {\n\t\tconst { answer, finished } = await this.serve(webIncoming(request), connection);\n\t\t// A whole body is out of the component's hands once its `Response` is; a pulled one ends when it is read.\n\t\tif (answer.body instanceof ReadableStream)\n\t\t\treturn webResponse({ ...answer, body: tracked(answer.body, finished) });\n\t\tfinished();\n\t\treturn webResponse(answer);\n\t}\n\n\tlistening(context: Context): Promise<ListenAddress> {\n\t\treturn awaitWithContext(this.#listening.promise, context);\n\t}\n\n\tclose(context: Context): Promise<void> {\n\t\tthis.#closed ??= this.#close(context);\n\t\treturn this.#closed;\n\t}\n\n\t/**\n\t * Serves `request`: its answer, and what its consumer calls once the body is written or abandoned. Never throws:\n\t * whatever fails answers (503 before the host's `load` or while closing, 403, 404, 500 reported).\n\t */\n\tasync serve(request: Incoming, connection: Connection): Promise<Served> {\n\t\tconst controller = new AbortController();\n\t\tconst finished = Promise.withResolvers<void>();\n\t\tconst running: Running = { controller, done: finished.promise };\n\t\tthis.#running.add(running);\n\t\trequest.cancelled((reason) => controller.abort(reason));\n\t\tlet answer: Answer;\n\t\ttry {\n\t\t\tconst served = await this.#serve(request, connection, controller, finished.promise);\n\t\t\tanswer = served.answer;\n\t\t\t// The request is over once its consumer finished and its scope (if it got one) ended.\n\t\t\tif (served.scope !== undefined) running.done = Promise.all([finished.promise, served.scope]);\n\t\t} catch {\n\t\t\tanswer = this.refusal(500);\n\t\t}\n\t\tvoid running.done.then(() => this.#running.delete(running));\n\t\treturn { answer, finished: () => finished.resolve() };\n\t}\n\n\t/** The answer for a refused or failed request, outside any scope, with the default headers. */\n\trefusal(status: number, admitted?: Admitted, router?: Router, head = false): Answer {\n\t\treturn errorAnswer(status, this.#defaults.of(admitted, router, this.#nonces.next()), undefined, head);\n\t}\n\n\t/** The steps of `serve`: closing, the registries, admission, the route, origins, the principal, then the scope. */\n\tasync #serve(\n\t\trequest: Incoming,\n\t\tconnection: Connection,\n\t\tcontroller: AbortController,\n\t\tfinished: Promise<void>,\n\t): Promise<{ readonly answer: Answer; readonly scope?: Promise<void> }> {\n\t\tconst head = request.method === \"HEAD\";\n\t\tif (this.#closing.signal.aborted) return { answer: this.refusal(503, undefined, undefined, head) };\n\t\tlet registries: Registries;\n\t\ttry {\n\t\t\tregistries = this.#registries ?? (await this.#resolve());\n\t\t} catch {\n\t\t\treturn { answer: this.refusal(503, undefined, undefined, head) };\n\t\t}\n\t\tif (this.#closing.signal.aborted) return { answer: this.refusal(503, undefined, undefined, head) };\n\t\tconst router = registries.router.value;\n\t\tconst admission = admit(request, connection, router.hosts, router.relays);\n\t\tif (refused(admission)) {\n\t\t\tif (admission.failed !== undefined) this.#hookFailed(\"relay\", admission.failed.relay, admission.failed.error);\n\t\t\treturn { answer: this.refusal(403, undefined, router, head) };\n\t\t}\n\t\t// A fresh script nonce per response (decision \"A CSP nonce per response\").\n\t\tconst webRequest = new WebRequest(request, admission, this.#nonces.next(), connection.remoteAddress);\n\t\tconst match = router.route(request.method, webRequest.path);\n\t\tif (match === \"bad_path\" || match === undefined) {\n\t\t\treturn { answer: this.refusal(match === undefined ? 404 : 400, admission, router, head) };\n\t\t}\n\t\twebRequest.params = match.params;\n\t\tconst foreign = isForeign(request);\n\t\tif (!match.crossSite && !originAccepted(request.method, request, admission.origin)) {\n\t\t\treturn { answer: this.refusal(403, admission, router, head) };\n\t\t}\n\t\tlet principal: P | undefined;\n\t\t// Foreign requests are never authenticated but a top-level navigation to a page; a cross-site route never is.\n\t\tconst authenticators = registries.authenticators.value;\n\t\tif (\n\t\t\tauthenticators.length > 0 &&\n\t\t\t!match.crossSite &&\n\t\t\t(!foreign || (match.page && isNavigation(request.method, request)))\n\t\t) {\n\t\t\tprincipal = await this.#principal(registries, webRequest, controller.signal);\n\t\t\tif (this.#closing.signal.aborted || controller.signal.aborted) {\n\t\t\t\treturn { answer: this.refusal(503, admission, router, head) };\n\t\t\t}\n\t\t}\n\t\t// Deny by default (decision \"The app kit, point 3\"): no plugin code runs for nobody unless the route is public.\n\t\tif (principal === undefined && !match.public) return { answer: this.refusal(401, admission, router, head) };\n\t\tconst answered = Promise.withResolvers<Answer>();\n\t\tconst span = this.#span(request, match, admission);\n\t\tconst base = withAbortSignal(controller.signal, this.#base);\n\t\tconst scope = this.#host\n\t\t\t.root(\n\t\t\t\tasync (ctx) => {\n\t\t\t\t\tanswered.resolve(await this.#run(request, webRequest, match, admission, router, foreign, ctx));\n\t\t\t\t\t// The scope lasts until the body is written or abandoned (a `bytes` body reads in it).\n\t\t\t\t\tawait finished;\n\t\t\t\t},\n\t\t\t\tspan === undefined ? base : withTelemetry(span.span, base),\n\t\t\t\t{ principal },\n\t\t\t)\n\t\t\t.catch(() => {\n\t\t\t\t// The scope was sealed (a disconnect, `close`) before it answered: the request is over.\n\t\t\t\tanswered.resolve(this.refusal(503, admission, router, head));\n\t\t\t});\n\t\tconst answer = await answered.promise;\n\t\tif (span !== undefined) {\n\t\t\tspan.span.setAttributes({ status: answer.status });\n\t\t\tif (answer.status >= 500) spanFailed(span.span, \"http_failed\", `status ${answer.status}`);\n\t\t\tvoid scope.then(() => span.end());\n\t\t}\n\t\treturn { answer, scope };\n\t}\n\n\t/**\n\t * A routed request's `chord.http` span (its method and route pattern; its path never: it may carry ids or secrets):\n\t * a root of the adapter, or the child of a W3C `traceparent` (and its `tracestate`) of a request a contributed relay\n\t * verified, never a browser's; none without an adapter that records.\n\t */\n\t#span(request: Incoming, match: RouteMatch, admission: Admitted): OpenSpan<\"chord.http\"> | undefined {\n\t\tconst adapter = this.#options.telemetry;\n\t\tif (adapter === undefined || untraced(adapter)) return undefined;\n\t\tconst attributes = { \"chord.host\": this.#spanHost, method: request.method, route: match.pattern };\n\t\tconst traceparent = admission.provenance.kind === \"relayed\" ? traceHeader(request, \"traceparent\") : undefined;\n\t\tif (traceparent === undefined) return new OpenSpan(adapter, \"chord.http\", attributes);\n\t\tconst tracestate = traceHeader(request, \"tracestate\");\n\t\tconst carrier: TelemetryCarrier = tracestate === undefined ? { traceparent } : { traceparent, tracestate };\n\t\treturn new OpenSpan(parentOf(carrier, adapter), \"chord.http\", attributes);\n\t}\n\n\t/** Runs the wraps and the route in the request's scope `ctx`, and makes its answer (a failure: a reported 500). */\n\tasync #run(\n\t\tincoming: Incoming,\n\t\trequest: WebRequest,\n\t\tmatch: RouteMatch,\n\t\tadmitted: Admitted,\n\t\trouter: Router,\n\t\tforeign: boolean,\n\t\tctx: Ctx<P>,\n\t): Promise<Answer> {\n\t\tlet response: HttpResponse;\n\t\ttry {\n\t\t\tresponse = await chainOf(match, ctx)(request);\n\t\t} catch (error) {\n\t\t\tresponse = this.#failure(error, match);\n\t\t}\n\t\t// Downloads are never another site's to take (rule 6).\n\t\tif (response.kind === \"bytes\" && foreign) response = { kind: \"error\", status: 403 };\n\t\tconst failed = (error: unknown): void =>\n\t\t\tthis.#onError({ kind: \"response_failed\", pattern: match.pattern, error });\n\t\ttry {\n\t\t\treturn answerOf(response, incoming, this.#defaults.of(admitted, router, request.nonce), ctx, failed);\n\t\t} catch (error) {\n\t\t\tfailed(error);\n\t\t\treturn this.refusal(500, admitted, router, request.method === \"HEAD\");\n\t\t}\n\t}\n\n\t/** What an error escaping the chain answers: its `HttpFailure`'s status, else a reported 500 without its message. */\n\t#failure(error: unknown, match: RouteMatch): HttpResponse {\n\t\tconst thrown = error instanceof Thrown ? error : new Thrown(ROUTE, match.plugin, error);\n\t\tif (thrown.cause instanceof HttpFailure) return { kind: \"error\", status: thrown.cause.status };\n\t\t// Chord refused the caller (an anonymous scope's remote object, a route's `authorize`): no failure of the route.\n\t\tif (isChordError(thrown.cause, \"forbidden\")) return { kind: \"error\", status: 403 };\n\t\tif (thrown.by.kind === \"route\") {\n\t\t\tthis.#onError({ kind: \"route_failed\", pattern: match.pattern, plugin: thrown.plugin, error: thrown.cause });\n\t\t} else {\n\t\t\tthis.#onError({ kind: \"wrap_failed\", name: thrown.by.name, plugin: thrown.plugin, error: thrown.cause });\n\t\t}\n\t\treturn { kind: \"error\", status: 500 };\n\t}\n\n\t/**\n\t * The principal the authenticators give `request`; one that throws is reported and skipped. Raced against `signal`\n\t * (a disconnect, `close`'s seal): an authenticator ignoring it no longer holds the request; the caller sees the\n\t * abort and answers 503.\n\t */\n\tasync #principal(registries: Registries, request: HttpRequest, signal: AbortSignal): Promise<P | undefined> {\n\t\tconst failed = (plugin: string, error: unknown): void => this.#hookFailed(\"authenticate\", plugin, error);\n\t\tconst context = withAbortSignal(signal, this.#base);\n\t\tconst authenticating = authenticate(registries.authenticators.value, request, failed, context);\n\t\t// The registry's values are typed by no principal type: an app's authenticators return its principals.\n\t\treturn (await awaitWithContext(authenticating, context).catch(() => undefined)) as P | undefined;\n\t}\n\n\t#hookFailed(hook: HookName, plugin: string | undefined, error: unknown): void {\n\t\tthis.#onError({ kind: \"hook_failed\", hook, ...(plugin === undefined ? {} : { plugin }), error });\n\t}\n\n\t/** The registries: resolved once, after the host's `load` (`not_ready` before it); a failed try is tried again later. */\n\t#resolve(): Promise<Registries> {\n\t\tthis.#resolving ??= Promise.all([\n\t\t\tthis.#host.registry(Http, this.#context),\n\t\t\tthis.#host.registry(Authenticators, this.#context),\n\t\t]).then(\n\t\t\t([router, authenticators]) => {\n\t\t\t\tthis.#registries = { router, authenticators };\n\t\t\t\t// A close may come first: nothing to follow then (Astra's recheck R4: the stopped watch threw unhandled).\n\t\t\t\tthis.#follow(router).catch(() => {});\n\t\t\t\treturn this.#registries;\n\t\t\t},\n\t\t\t(error: unknown) => {\n\t\t\t\tthis.#resolving = undefined;\n\t\t\t\tthrow error;\n\t\t\t},\n\t\t);\n\t\treturn this.#resolving;\n\t}\n\n\t/** Follows the router until `close`: connections its changes no longer admit are terminated. */\n\tasync #follow(router: RegistryValue<Router>): Promise<void> {\n\t\tif (this.#closing.signal.aborted) return;\n\t\tconst watch = await router.watch(withAbortSignal(this.#closing.signal, this.#base));\n\t\tif (this.#closing.signal.aborted) return;\n\t\twatch.start(async (call) => {\n\t\t\tif (call.kind === \"value\") this.#upgrades.revoke(call.value);\n\t\t});\n\t}\n\n\t/** One upgrade, tracked from its arrival: refused while closing, else admitted and checked, then handed out. */\n\tasync #upgrade(message: IncomingMessage, stream: Duplex, head: Buffer): Promise<void> {\n\t\tconst controller = new AbortController();\n\t\t// A client gone while its upgrade authenticates aborts that work (Astra's recheck R1, Sol's N5).\n\t\tconst gone = (): void => controller.abort(new Error(\"http: the client disconnected\"));\n\t\tif (stream.destroyed) gone();\n\t\telse {\n\t\t\t// A clean disconnect (FIN) is seen only by reading: nothing reads a detached upgrade socket, so start it\n\t\t\t// (Fable's second recheck: `end()` while authenticating went unnoticed).\n\t\t\tstream.once(\"close\", gone);\n\t\t\tstream.once(\"end\", gone);\n\t\t\tstream.read(0);\n\t\t}\n\t\tconst running: Running = { controller, done: Promise.resolve() };\n\t\tconst work = this.#upgradeSteps(message, stream, head, controller.signal);\n\t\trunning.done = work;\n\t\tthis.#running.add(running);\n\t\ttry {\n\t\t\tawait work;\n\t\t} finally {\n\t\t\tstream.removeListener(\"close\", gone);\n\t\t\tstream.removeListener(\"end\", gone);\n\t\t\tthis.#running.delete(running);\n\t\t}\n\t}\n\n\t/** The steps of an upgrade (the same rules as a request's; a socket needs a principal), checked again at hand-out. */\n\tasync #upgradeSteps(message: IncomingMessage, stream: Duplex, head: Buffer, signal: AbortSignal): Promise<void> {\n\t\tif (this.#closing.signal.aborted) return refuse(stream, 503);\n\t\tconst request = NodeIncoming.of(message);\n\t\tif (!(request instanceof NodeIncoming)) return refuse(stream, request.status);\n\t\tlet registries: Registries;\n\t\ttry {\n\t\t\tregistries = this.#registries ?? (await this.#resolve());\n\t\t} catch {\n\t\t\treturn refuse(stream, 503);\n\t\t}\n\t\tif (this.#closing.signal.aborted || signal.aborted) return refuse(stream, 503);\n\t\tconst before = registries.router.value;\n\t\tconst connection = connectionOf(message);\n\t\tconst admission = admit(request, connection, before.hosts, before.relays);\n\t\tif (refused(admission)) {\n\t\t\tif (admission.failed !== undefined) this.#hookFailed(\"relay\", admission.failed.relay, admission.failed.error);\n\t\t\treturn refuse(stream, 403);\n\t\t}\n\t\tconst sent = request.header(\"origin\");\n\t\tif (isForeign(request) || (sent !== null && sent !== admission.origin)) return refuse(stream, 403);\n\t\tconst webRequest = new WebRequest(request, admission, this.#nonces.next(), connection.remoteAddress);\n\t\tconst principal = await this.#principal(registries, webRequest, signal);\n\t\tif (this.#closing.signal.aborted || signal.aborted) return refuse(stream, 503);\n\t\t// The router now: a host, a relay or a socket removed while authenticating refuses the upgrade.\n\t\tconst router = registries.router.value;\n\t\tconst { allowed, relay } = admission;\n\t\tif (\n\t\t\t(allowed !== undefined && !router.hosts.has(allowed)) ||\n\t\t\t(relay !== undefined && !router.relays.includes(relay))\n\t\t) {\n\t\t\treturn refuse(stream, 403);\n\t\t}\n\t\tconst { links } = this.#options;\n\t\tif (links !== undefined && webRequest.path === links.path) {\n\t\t\t// The links endpoint always needs a principal: a link acts as one.\n\t\t\tif (principal === undefined) return refuse(stream, 401);\n\t\t\tlet options: LinkOptions;\n\t\t\ttry {\n\t\t\t\toptions =\n\t\t\t\t\t(typeof links.options === \"function\" ? links.options(webRequest, principal) : links.options) ?? {};\n\t\t\t} catch (error) {\n\t\t\t\tthis.#hookFailed(\"links.options\", undefined, error);\n\t\t\t\treturn refuse(stream, 403);\n\t\t\t}\n\t\t\tconst admitted = { allowed, relay, principal, ...options };\n\t\t\tconst opened = (): (() => void) | undefined => {\n\t\t\t\ttry {\n\t\t\t\t\treturn links.opened?.(webRequest, principal);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.#hookFailed(\"links.opened\", undefined, error);\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn this.#upgrades.link(message, stream, head, admitted, this.#host, this.#context, opened);\n\t\t}\n\t\tconst match = router.socket(webRequest.path);\n\t\tif (match === \"bad_path\") return refuse(stream, 400);\n\t\tif (match === undefined) return refuse(stream, 404);\n\t\tif (principal === undefined && !match.public) return refuse(stream, 401);\n\t\twebRequest.params = match.params;\n\t\tconst fail = ({ pattern, plugin, error }: { pattern: string; plugin: string; error: unknown }) =>\n\t\t\tthis.#onError({ kind: \"socket_failed\", pattern, plugin, error });\n\t\tconst admitted = { allowed, relay, principal, match, request: webRequest };\n\t\tthis.#upgrades.socket(message, stream, head, admitted, this.#host, this.#context, fail);\n\t}\n\n\t/** The listener's open: Chord's own Node server listening at `listen`. */\n\tasync #listen(listen: ListenAddress, context: Context): Promise<NodeListener> {\n\t\tconst listener = await NodeListener.listen(this, listen, context);\n\t\tthis.#listening.resolve(listener.address);\n\t\treturn listener;\n\t}\n\n\t/** `close`: refuses from now on, then waits for sockets and running requests until the deadline, then seals. */\n\tasync #close(context: Context): Promise<void> {\n\t\tthis.#closing.abort();\n\t\tthis.#listening.reject(new Error(\"http: closed\"));\n\t\tconst timeout = this.#options.closeTimeout ?? CLOSE_TIMEOUT;\n\t\tconst signal = context.abortSignal;\n\t\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\t\tlet aborted: (() => void) | undefined;\n\t\tconst deadline = new Promise<void>((resolve) => {\n\t\t\t// Already aborted: no wait at all (Sol's recheck N9).\n\t\t\tif (signal?.aborted) return resolve();\n\t\t\ttimer = setTimeout(resolve, timeout);\n\t\t\taborted = () => resolve();\n\t\t\tsignal?.addEventListener(\"abort\", aborted, { once: true });\n\t\t});\n\t\tconst running = Promise.all([...this.#running].map(({ done }) => done));\n\t\tawait Promise.race([Promise.all([this.#upgrades.close(deadline), running]), deadline]);\n\t\tclearTimeout(timer);\n\t\tif (aborted !== undefined) signal?.removeEventListener(\"abort\", aborted);\n\t\tfor (const { controller } of this.#running) controller.abort(new Error(\"http: closed\"));\n\t}\n}\n\n/**\n * `stream` as read by its consumer, `finished` called once it is read to its end, failed or cancelled (a mounted\n * handler's `bytes` body: the request's scope lasts until then).\n */\nfunction tracked(stream: ReadableStream<Uint8Array>, finished: () => void): ReadableStream<Uint8Array> {\n\tconst reader = stream.getReader();\n\t// The owned stream ending (read whole, or errored by the scope's seal) ends the request too, whether or not its\n\t// consumer pulls again (Sol's second recheck B: an aborted `Response` nobody touched kept its request and scope).\n\treader.closed.then(finished, finished);\n\treturn new ReadableStream<Uint8Array>(\n\t\t{\n\t\t\tpull: async (controller) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst next = await reader.read();\n\t\t\t\t\tif (next.done) {\n\t\t\t\t\t\tcontroller.close();\n\t\t\t\t\t\tfinished();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontroller.enqueue(next.value);\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tcontroller.error(error);\n\t\t\t\t\tfinished();\n\t\t\t\t}\n\t\t\t},\n\t\t\tcancel: async (reason) => {\n\t\t\t\tfinished();\n\t\t\t\tawait reader.cancel(reason);\n\t\t\t},\n\t\t},\n\t\t{ highWaterMark: 0 },\n\t);\n}\n\n/**\n * The longest W3C trace header taken from a relayed request (`traceparent` is 55 characters, `tracestate` at most 512):\n * the relay forwards what the browser sent unless it strips them, so they are bounded as a link's carrier is (review L2).\n */\nconst TRACE_HEADERS = { traceparent: 256, tracestate: 512 } as const;\n\n/** Printable ASCII, as a link's carrier. */\nconst PRINTABLE = /^[\\x20-\\x7e]*$/;\n\n/** A W3C trace header of `request`, when present, within its bound and printable; otherwise none (ignored). */\nfunction traceHeader(request: Incoming, name: keyof typeof TRACE_HEADERS): string | undefined {\n\tconst value = request.header(name);\n\tif (value === null || value.length > TRACE_HEADERS[name] || !PRINTABLE.test(value)) return undefined;\n\treturn value;\n}\n\n/** Refuses an upgrade with `status` and closes its connection. */\nfunction refuse(stream: Duplex, status: number): void {\n\tstream.end(`HTTP/1.1 ${status} ${STATUS[status] ?? \"\"}\\r\\nConnection: close\\r\\nContent-Length: 0\\r\\n\\r\\n`);\n}\n\n/** The reason phrases of the statuses an upgrade is refused with. */\nconst STATUS: Readonly<Record<number, string>> = {\n\t400: \"Bad Request\",\n\t401: \"Unauthorized\",\n\t403: \"Forbidden\",\n\t404: \"Not Found\",\n\t501: \"Not Implemented\",\n\t503: \"Service Unavailable\",\n};\n\n/** Who threw out of a request's chain: the route, or a wrap (by name), with its plugin. */\nclass Thrown extends Error {\n\treadonly by: { readonly kind: \"route\" } | { readonly kind: \"wrap\"; readonly name: string };\n\treadonly plugin: string;\n\n\tconstructor(by: Thrown[\"by\"], plugin: string, cause: unknown) {\n\t\tsuper(\"thrown\", { cause });\n\t\tthis.by = by;\n\t\tthis.plugin = plugin;\n\t}\n}\n\n/** The route of `match` inside its wraps (outermost first), each throw tagged with who threw it. */\nfunction chainOf(match: RouteMatch, ctx: Ctx): (request: HttpRequest) => Promise<HttpResponse> {\n\tlet next: (request: HttpRequest) => Promise<HttpResponse> = tagged(match.handler, match.plugin, ctx);\n\tfor (let index = match.wraps.length - 1; index >= 0; index--) {\n\t\tconst { wrap, plugin } = match.wraps[index]!;\n\t\tconst inner = next;\n\t\tnext = async (request) => {\n\t\t\ttry {\n\t\t\t\treturn await wrap.wrap(request, inner, ctx);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof Thrown) throw error;\n\t\t\t\tthrow new Thrown({ kind: \"wrap\", name: wrap.name }, plugin, error);\n\t\t\t}\n\t\t};\n\t}\n\treturn next;\n}\n\n/** `route` with its throws tagged as the route's. */\nfunction tagged(route: HttpRoute, plugin: string, ctx: Ctx): (request: HttpRequest) => Promise<HttpResponse> {\n\treturn async (request) => {\n\t\ttry {\n\t\t\treturn await route(request, ctx);\n\t\t} catch (error) {\n\t\t\tthrow new Thrown(ROUTE, plugin, error);\n\t\t}\n\t};\n}\n"]}