@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,1318 @@
1
+ // Hosts (§3): `createHost`, loading facets and the start barrier, links to children, the parent (connected again after
2
+ // a drop) and routes, the origins it relays holds for, getting and holding references as a principal, the heartbeat
3
+ // of every link, revocation (§4), presence (§19) and keep-alive counts, registries and root scopes (slice 8), reloads
4
+ // (staging, the commit, each object's fate, the report; old work and its reload cycles), closing; one batch per host,
5
+ // the backoff map and the endings new instances wait for.
6
+ import { NOOP_TELEMETRY_CONTEXT, } from "@earendil-works/pi-telemetry";
7
+ import { awaitWithContext, BACKGROUND_CONTEXT, withAbortSignal, withoutAbortSignal, withTelemetry, } from "../context/index.js";
8
+ import { contractData } from "../contracts/internal.js";
9
+ import { ChordError } from "../data/index.js";
10
+ import { asChordError, binds, canonicalJson, checkParams, identityKey, invalid, principalKey, } from "../data/internal.js";
11
+ import { binaryCodec } from "../link/index.js";
12
+ import { linkLimits } from "../link/internal.js";
13
+ import { RegistryRecord } from "../registries/internal.js";
14
+ import { HostLink, Path, RemoteObject, } from "../remote/internal.js";
15
+ import { Batch } from "../state/internal.js";
16
+ import { capped, chordMetrics, chordSpans, countingOnly, ended, hostAttribute, parentOf, untraced, } from "../telemetry.js";
17
+ import { Activity } from "./activity.js";
18
+ import { notLive } from "./attempt.js";
19
+ import { Backoff } from "./backoff.js";
20
+ import { withLinkedAbortSignal } from "./ctx.js";
21
+ import { Destination } from "./destination.js";
22
+ import { contributionOf } from "./members.js";
23
+ import { ChordObject } from "./object.js";
24
+ import { chainAttempts, OldWork } from "./old-work.js";
25
+ import { References } from "./presence.js";
26
+ import { Binding } from "./reference.js";
27
+ import { ReloadCycles } from "./reload-cycle.js";
28
+ import { RevocationKeys } from "./revocation.js";
29
+ import { RootScopes } from "./root.js";
30
+ import { Route } from "./route.js";
31
+ import { addStaged, checkPluginNames, emptyStaged, recordFactory, stagePlugin, } from "./staging.js";
32
+ import { UnboundIndex } from "./unbound.js";
33
+ import { UnboundClock } from "./unbound-clock.js";
34
+ import { uuidv7 } from "./uuid.js";
35
+ /** Creates a host. */
36
+ export function createHost(options) {
37
+ return new ChordHost(options);
38
+ }
39
+ /** No activation chain (Q5). */
40
+ const NO_CHAIN = [];
41
+ /** The params of a type with empty params, as checked: nothing, and the empty key. */
42
+ const EMPTY_PARAMS = { params: {}, key: "" };
43
+ /** What a span records for no principal. */
44
+ const NO_ATTRIBUTES = Object.freeze({});
45
+ /** The host: its served types, its objects by identity, its batch, backoff and endings. */
46
+ export class ChordHost {
47
+ batch;
48
+ timeouts;
49
+ /** Its old work during reloads (whether a context runs under it): see `old-work.ts`. */
50
+ oldWork = new OldWork();
51
+ /** The waits of old work on objects that are not live, cut at once when they cycle through their own drain. */
52
+ reloadCycles = new ReloadCycles();
53
+ backoff = new Backoff((identity) => this.#due(identity));
54
+ address;
55
+ principal;
56
+ /** This run of the host, sent in every handshake (R20). */
57
+ incarnation = uuidv7();
58
+ compression;
59
+ /** The host's store, if it has one. */
60
+ store;
61
+ /** The telemetry adapter: root spans start on it, carriers from links are extracted with it. */
62
+ telemetry;
63
+ /** The `chord.host` attribute of this host's spans: its address key, `client` without an address. */
64
+ spanHost;
65
+ /** Chord's instruments on the adapter's metrics: the host's own counts (links, holds, calls, commits). */
66
+ metrics;
67
+ /** The telemetry of this host's work under a context without a span (`#counted`); none without an adapter. */
68
+ #counting;
69
+ #activity;
70
+ #principalKey;
71
+ #principalAttributes;
72
+ #revocationKeys;
73
+ /** The presence list of each type someone asked about (`references`), by type name. */
74
+ #references = new Map();
75
+ #onError;
76
+ /** The served types by name: the published plugin set's (a reload's commit replaces it). */
77
+ #types = new Map();
78
+ /** The published plugins by name: their facet (an unchanged one is the same object), registries and contributions. */
79
+ #plugins = new Map();
80
+ /** The reloads, one after another (slice 7b §1): the last one's end, which the next one waits for. */
81
+ #reloading = Promise.resolve();
82
+ /** By identity, in the order they went live (the others where they were created). */
83
+ #objects = new Map();
84
+ /** Teardowns still running, by identity: the next instance of an identity waits for its previous ones. */
85
+ #endings = new Map();
86
+ /** The requests waiting unbound after the publication (in the index, and registry readers), reported after 5 s. */
87
+ #clock = new UnboundClock((error) => this.report(error));
88
+ /** The requests that cannot bind yet, by name: before the publication all of them, then those left unbound. */
89
+ #unbound = new UnboundIndex(this.#clock);
90
+ /** Resolved at the host's first publication (`load`'s batch), or its close. */
91
+ #publication = Promise.withResolvers();
92
+ #published = false;
93
+ /** Every open link: children, routes and the parent. */
94
+ #links = new Set();
95
+ /** Where holds go that are not served here and not routed: the parent link, across reconnects. */
96
+ #parent = new Path(() => { });
97
+ /**
98
+ * Remote references failed for a part past a link's limits: on no link's path (no reconnect holds them, no route
99
+ * resolves for them) until `ref.retry()` places them anew; ended at `close` like the others.
100
+ */
101
+ unplaced = new Path(() => { });
102
+ #routes = new Map();
103
+ #destination;
104
+ /** The downstream origins this host relays holds for, by their number on upstream links (never reused). */
105
+ relays = new Map();
106
+ #nextOrigin = 1;
107
+ /** Aborted when the host closes: the context of every route's `resolve`, and the end of waiting `host.registry`s. */
108
+ #routing = new AbortController();
109
+ #heartbeat;
110
+ /** Its registries by name, each made by its first use (a serve, a contribution or a reader). */
111
+ #registries = new Map();
112
+ #roots = new RootScopes(this);
113
+ /** The one heartbeat timer, running while the host has a link. */
114
+ #ticking;
115
+ #state = "new";
116
+ /** The one closing, which every `close` returns. */
117
+ #closing;
118
+ constructor(options) {
119
+ this.address = options.address;
120
+ this.principal = options.principal;
121
+ this.#principalKey = options.principalKey;
122
+ this.#principalAttributes = options.principalAttributes;
123
+ this.#onError = options.onError;
124
+ this.telemetry = options.telemetry ?? NOOP_TELEMETRY_CONTEXT;
125
+ this.spanHost = hostAttribute(this.address);
126
+ this.metrics = chordMetrics(this.telemetry.metrics);
127
+ const metrics = this.telemetry.metrics;
128
+ this.#counting = untraced(this.telemetry) || metrics === undefined ? undefined : countingOnly(metrics);
129
+ this.batch = new Batch((error) => this.report(error), this.telemetry.metrics);
130
+ this.compression = options.compression;
131
+ this.#activity = new Activity(this.batch);
132
+ // `revokedBy` is called with this host's principals only, the `P`s its links stamp.
133
+ this.#revocationKeys = new RevocationKeys(options.revokedBy);
134
+ const close = options.closeTimeout ?? 30_000;
135
+ const reload = Math.min(close, options.reloadDrainTimeout ?? 5_000);
136
+ this.timeouts = { close, ready: options.readyTimeout ?? 60_000, reload };
137
+ this.#heartbeat = { ping: options.heartbeat?.ping ?? 15_000, close: options.heartbeat?.close ?? 30_000 };
138
+ this.#destination = new Destination(this.address, this.#routes, this.#parent);
139
+ // Chord's own: `openStore` made it.
140
+ this.store = options.store;
141
+ this.store?.attach({ failed: (error) => this.#storageFailed(error), batch: this.batch });
142
+ }
143
+ async load(facets, context) {
144
+ this.batch.assertOutside("load");
145
+ this.#assertOpen();
146
+ if (this.#state !== "new")
147
+ throw new Error("load runs once per host");
148
+ checkPluginNames(facets);
149
+ this.#state = "loading";
150
+ const parent = context.telemetry;
151
+ if (untraced(parent))
152
+ return this.#load(facets, context);
153
+ return chordSpans(parent)("chord.load", { "chord.host": this.spanHost, plugins: facets.length }, async (span) => {
154
+ try {
155
+ const report = await this.#load(facets, withTelemetry(span, context));
156
+ span.setAttributes({ failed: report.failed.length });
157
+ return report;
158
+ }
159
+ catch (error) {
160
+ ended(span, "load_failed", error, context.abortSignal);
161
+ throw error;
162
+ }
163
+ });
164
+ }
165
+ /** `load`'s steps under its span: the setups, the publication, then the start barrier. */
166
+ async #load(facets, context) {
167
+ const staged = emptyStaged();
168
+ const loaded = new Map();
169
+ const failed = [];
170
+ // A name given twice is refused the second time whether or not the first staged.
171
+ const given = new Set();
172
+ // In the given order: of two plugins serving one name, the later is left out.
173
+ for (const plugin of facets) {
174
+ const twice = given.has(plugin.name);
175
+ given.add(plugin.name);
176
+ const error = twice ? loadedTwice(plugin.name) : this.#stageInto(staged, plugin);
177
+ if (error === undefined)
178
+ loaded.set(plugin.name, plugin.facet);
179
+ else
180
+ failed.push({ plugin: plugin.name, error });
181
+ }
182
+ this.#types = staged.types;
183
+ // The publication: the types and registries served, the facets' contributions and the first composition of
184
+ // every served registry, in one batch, before any object activates.
185
+ this.batch.commit(() => {
186
+ this.#publish(staged, loaded);
187
+ for (const record of this.#registries.values())
188
+ record.composeServed();
189
+ }, context);
190
+ // After the batch: what waited for the publication is placed (the gate lasted only for the setups).
191
+ this.#published = true;
192
+ this.#publication.resolve();
193
+ this.#reportUndeclared();
194
+ this.#unbound.wakeAll();
195
+ const objects = [...this.#types.values()]
196
+ .filter((served) => served.kind === "local" && served.hostLifetime)
197
+ .map((served) => this.#object(served, EMPTY_PARAMS, undefined, context.telemetry, context));
198
+ await Promise.all(objects.map(({ firstOutcome }) => firstOutcome));
199
+ if (this.#state === "loading")
200
+ this.#state = "loaded";
201
+ return { failed };
202
+ }
203
+ /**
204
+ * Whether a request for `Type` with `params` binds to `served` as a real bind checks it (`bind`): its kind, version
205
+ * and fingerprint, and the provider's own host address; one whose `hostAddress` throws does not.
206
+ */
207
+ #wouldBind(served, Type, params) {
208
+ if (unboundCause(served, Type.kind, Type.name, Type.version, Type.fingerprint) !== undefined)
209
+ return false;
210
+ try {
211
+ return this.#misplaced(Type, served, params) === undefined;
212
+ }
213
+ catch {
214
+ return false;
215
+ }
216
+ }
217
+ /** Whether a request for `Type` with `params` goes here; a `hostAddress` that throws: not here (it fails at bind). */
218
+ #placedHere(Type, params) {
219
+ try {
220
+ return this.#destination.placedHere(Type, params);
221
+ }
222
+ catch {
223
+ return false;
224
+ }
225
+ }
226
+ /** Stages `plugin`'s new code into `staged`: the error that refuses it (its setup, a declaration, a name served twice). */
227
+ #stageInto(staged, plugin) {
228
+ try {
229
+ return addStaged(staged, stagePlugin(plugin, this.#stagingHost()));
230
+ }
231
+ catch (error) {
232
+ return error;
233
+ }
234
+ }
235
+ reload(facets, context, options = {}) {
236
+ this.batch.assertOutside("reload");
237
+ if (this.#state === "closed")
238
+ return Promise.reject(this.#closedError());
239
+ if (this.#state !== "loaded")
240
+ throw new Error("reload runs after load");
241
+ checkPluginNames(facets);
242
+ const reload = this.#reloading.then(() => this.#reload(facets, options.failed ?? [], context));
243
+ // The tail settles to nothing: a report kept as its value would keep a rejected facet's closure (its error).
244
+ this.#reloading = reload.then(() => { }, () => { });
245
+ return reload;
246
+ }
247
+ /** One reload, after the previous one, in its span: each object's fate an event of it. */
248
+ async #reload(facets, before, context) {
249
+ const parent = context.telemetry;
250
+ if (untraced(parent))
251
+ return this.#reloadSteps(facets, before, context);
252
+ return chordSpans(parent)("chord.reload", { "chord.host": this.spanHost, plugins: facets.length }, async (span) => {
253
+ try {
254
+ const report = await this.#reloadSteps(facets, before, withTelemetry(span, context));
255
+ for (const { object, kind } of report.objects)
256
+ span.addEvent("chord.reload.fate", { object: capped(object), fate: kind });
257
+ const { added, changed, removed } = report.plugins;
258
+ const counts = { added: added.length, changed: changed.length, removed: removed.length };
259
+ span.setAttributes({ ...counts, failed: report.failed.length, fates: report.objects.length });
260
+ return report;
261
+ }
262
+ catch (error) {
263
+ ended(span, "reload_failed", error, context.abortSignal);
264
+ throw error;
265
+ }
266
+ });
267
+ }
268
+ /** One reload's steps: staging, the commit, the fates, the report. */
269
+ async #reloadSteps(facets, before, context) {
270
+ this.#assertOpen();
271
+ if (context.abortSignal?.aborted)
272
+ throw reloadAborted();
273
+ const plan = this.#stageReload(facets, before, context);
274
+ // Aborted while it staged (a setup may abort it synchronously): nothing changed.
275
+ if (context.abortSignal?.aborted)
276
+ throw reloadAborted();
277
+ const started = this.#commit(plan, context);
278
+ const { added, changed, removed, failed } = plan;
279
+ const plugins = { added, changed, removed };
280
+ const committed = { ...plugins, failed: failed.map(({ plugin }) => plugin) };
281
+ const objects = await this.#report(started, committed, context);
282
+ return { plugins, failed, objects };
283
+ }
284
+ /**
285
+ * Staging (slice 7b §2), synchronous (no request or arriving hold meets it half done), per plugin (decision "Per
286
+ * plugin at startup and reload"): a pass stages the new code (`#stagePass`); a plugin whose new code fails there
287
+ * (or failed `before`, passed as its loaded facet) keeps its old code (an added one is left out) and staging runs
288
+ * again without it; then a changed plugin whose recorded requests would not bind because of such a plugin keeps its
289
+ * old code too (`#closure`), until nothing more fails. Bounded by the number of plugins with new code.
290
+ */
291
+ #stageReload(facets, before, context) {
292
+ const failed = new Map(before.map(({ plugin, error }) => [plugin, error]));
293
+ const given = new Map();
294
+ // A name given twice: the second is refused, the first staged.
295
+ const twice = [];
296
+ for (const { name, facet } of facets) {
297
+ if (given.has(name))
298
+ twice.push({ plugin: name, error: loadedTwice(name) });
299
+ else
300
+ given.set(name, facet);
301
+ }
302
+ for (;;) {
303
+ const pass = this.#stagePass(given, failed, context);
304
+ if (pass.kind === "failed") {
305
+ for (const [name, error] of pass.failed)
306
+ failed.set(name, error);
307
+ continue;
308
+ }
309
+ const kept = this.#closure(pass.plan, pass.recorded, failed);
310
+ if (kept.size > 0) {
311
+ for (const [name, error] of kept)
312
+ failed.set(name, error);
313
+ continue;
314
+ }
315
+ const failures = [...failed].map(([plugin, error]) => ({ plugin, error }));
316
+ return { ...pass.plan, failed: [...twice, ...failures] };
317
+ }
318
+ }
319
+ /**
320
+ * One staging pass: the loaded entries of the plugins kept as they are (unchanged, or failed: their setups not run
321
+ * again) first, then every other plugin's new code in the given order (one refused by a name the table has already
322
+ * fails), then the new factory of every object of a changed or removed plugin whose type is still served (a throw
323
+ * fails the plugin serving it). Its plan, or the plugins that failed.
324
+ */
325
+ #stagePass(given, failed, context) {
326
+ const staged = emptyStaged();
327
+ const failing = new Map();
328
+ const fresh = [];
329
+ for (const [name, facet] of given) {
330
+ const loaded = this.#plugins.get(name);
331
+ if (loaded !== undefined && (loaded.facet === facet || failed.has(name)))
332
+ addStaged(staged, loaded.staged);
333
+ else if (!failed.has(name))
334
+ fresh.push({ name, facet });
335
+ }
336
+ for (const plugin of fresh) {
337
+ const error = this.#stageInto(staged, plugin);
338
+ if (error !== undefined)
339
+ failing.set(plugin.name, error);
340
+ }
341
+ if (failing.size > 0)
342
+ return { kind: "failed", failed: failing };
343
+ const applied = new Set(fresh.map(({ name }) => name));
344
+ const removed = [...this.#plugins.keys()].filter((name) => !given.has(name));
345
+ const reloaded = new Set([...applied, ...removed]);
346
+ const fates = [];
347
+ const recorded = [];
348
+ for (const object of this.#objects.values()) {
349
+ if (!reloaded.has(object.served.plugin))
350
+ continue;
351
+ const served = staged.types.get(object.served.contract.name);
352
+ if (served === undefined || served.kind !== object.served.kind) {
353
+ fates.push({ kind: "end", object });
354
+ continue;
355
+ }
356
+ try {
357
+ const declared = recordFactory(object, served, context);
358
+ recorded.push({ plugin: served.plugin, recorded: declared });
359
+ fates.push({ kind: object.reloadFate(), object, served, requests: declared.requests });
360
+ }
361
+ catch (error) {
362
+ if (!failing.has(served.plugin))
363
+ failing.set(served.plugin, error);
364
+ }
365
+ }
366
+ if (failing.size > 0)
367
+ return { kind: "failed", failed: failing };
368
+ const facets = new Map(fresh.map(({ name, facet }) => [name, facet]));
369
+ const added = fresh.filter(({ name }) => !this.#plugins.has(name)).map(({ name }) => name);
370
+ const changed = fresh.filter(({ name }) => this.#plugins.has(name)).map(({ name }) => name);
371
+ const plan = { staged, facets, added, changed, removed, failed: [], fates };
372
+ return { kind: "staged", plan, recorded };
373
+ }
374
+ /**
375
+ * The closure rule: the changed plugins (new code applied) of `plan` with a recorded request that would not bind in
376
+ * the staged table because of a plugin that failed in this reload: its name served there by such a plugin's old code,
377
+ * or not served at all while some plugin failed (what a failed setup would have served is unknown). Requests to
378
+ * another host are not checked (a rollout's rules). Each such plugin with the error it keeps its old code for.
379
+ */
380
+ #closure(plan, recorded, failed) {
381
+ const kept = new Map();
382
+ if (failed.size === 0)
383
+ return kept;
384
+ for (const { plugin, recorded: declared } of recorded) {
385
+ if (kept.has(plugin) || !plan.facets.has(plugin))
386
+ continue;
387
+ for (const request of declared.requests) {
388
+ const unbound = this.#unboundRequest(plan.staged, request, failed);
389
+ if (unbound === undefined)
390
+ continue;
391
+ kept.set(plugin, new Error(`plugin "${plugin}": ${unbound}`));
392
+ break;
393
+ }
394
+ }
395
+ return kept;
396
+ }
397
+ /**
398
+ * Why `request` (of a new factory) would not bind in `staged` because of a plugin in `failed`; `undefined`
399
+ * when it binds, is placed on another host, or does not bind for another reason (it waits as any request does).
400
+ */
401
+ #unboundRequest(staged, request, failed) {
402
+ const name = request.kind === "type" ? request.contract.name : request.registry.name;
403
+ const provider = request.kind === "type" ? staged.types.get(name)?.plugin : staged.registries.get(name)?.plugin;
404
+ if (provider !== undefined && !failed.has(provider))
405
+ return undefined;
406
+ if (request.kind === "type") {
407
+ const { contract, params } = request;
408
+ // A remote type the object reaches on another host: placed by the rollout's rules, not this host's.
409
+ if (!this.#placedHere(contract, params))
410
+ return undefined;
411
+ const served = staged.types.get(name);
412
+ if (served !== undefined && this.#wouldBind(served, contract, params))
413
+ return undefined;
414
+ return provider === undefined
415
+ ? `needs ${name} v${contract.version}, which no plugin serves now (a plugin failed)`
416
+ : `needs ${name} v${contract.version}, which plugin "${provider}" serves on its old code`;
417
+ }
418
+ const served = staged.registries.get(name);
419
+ if (served !== undefined && registryServes(served, request.registry.version))
420
+ return undefined;
421
+ return provider === undefined
422
+ ? `needs registry ${name} v${request.registry.version}, which no plugin serves now (a plugin failed)`
423
+ : `needs registry ${name} v${request.registry.version}, which plugin "${provider}" serves on its old code`;
424
+ }
425
+ /**
426
+ * The commit (slice 7b §3), one batch: the served types become the staged ones (an unchanged plugin's stay as
427
+ * they were), the removed plugins' registry providers go and the reloaded ones' are replaced, their facet
428
+ * contributions replaced by plugin, every changed registry composed once; a removed type's presence list goes.
429
+ * Then each object takes its fate (`#startFates`), host-lifetime objects of new types start, and the publication
430
+ * wakes the requests waiting for the names the reload serves.
431
+ */
432
+ #commit(plan, context) {
433
+ const { staged, changed, removed } = plan;
434
+ const published = new Set(plan.facets.keys());
435
+ // A kept plugin's types are its loaded ones, as they are: its objects are untouched.
436
+ const types = staged.types;
437
+ this.batch.commit(() => {
438
+ for (const name of [...changed, ...removed]) {
439
+ const loaded = this.#plugins.get(name);
440
+ for (const registry of loaded.staged.registries.keys()) {
441
+ if (staged.registries.get(registry)?.plugin !== name)
442
+ this.registryRecord(registry).unserve();
443
+ }
444
+ for (const contribution of loaded.contributions)
445
+ contribution.record.remove(contribution);
446
+ this.#plugins.delete(name);
447
+ }
448
+ this.#types = types;
449
+ this.#publish(staged, plan.facets);
450
+ for (const name of published) {
451
+ for (const registry of staged.plugins.get(name).registries.keys()) {
452
+ this.registryRecord(registry).composeServed();
453
+ }
454
+ }
455
+ }, context);
456
+ this.#reportUndeclared();
457
+ for (const name of this.#references.keys())
458
+ if (!types.has(name))
459
+ this.#references.delete(name);
460
+ const names = new Set();
461
+ for (const [name, served] of types)
462
+ if (published.has(served.plugin))
463
+ names.add(name);
464
+ for (const [name, { plugin }] of staged.registries)
465
+ if (published.has(plugin))
466
+ names.add(name);
467
+ const started = this.#startFates(plan.fates);
468
+ for (const type of types.values()) {
469
+ if (type.kind === "local" && type.hostLifetime) {
470
+ this.#object(type, EMPTY_PARAMS, undefined, context.telemetry, context);
471
+ }
472
+ }
473
+ this.#unbound.wake(names);
474
+ return started;
475
+ }
476
+ /**
477
+ * Starts `fates` and returns them in their order, for the report: the removals first (a dependent whose new code
478
+ * still needs a removed provider then parks, decision 4), then the restarts and retries; then the restarts'
479
+ * readiness and successors, once every object has its new served type (their requests bind against the new code).
480
+ */
481
+ #startFates(fates) {
482
+ const started = new Map();
483
+ for (const fate of fates)
484
+ if (fate.kind === "end")
485
+ started.set(fate, this.#startFate(fate));
486
+ for (const fate of fates)
487
+ if (fate.kind !== "end")
488
+ started.set(fate, this.#startFate(fate));
489
+ for (const fate of fates)
490
+ if (fate.kind === "restart")
491
+ fate.object.startSuccessor();
492
+ // Every fate started above.
493
+ return fates.map((fate) => started.get(fate));
494
+ }
495
+ /**
496
+ * Starts one object's fate after the commit: a removed type's object ends, its holders waiting `not_served`; any
497
+ * other restarts or retries on its new served type.
498
+ */
499
+ #startFate(fate) {
500
+ const { object } = fate;
501
+ if (fate.kind === "end") {
502
+ const error = new ChordError({
503
+ code: "unavailable",
504
+ message: `${object.served.contract.name} is not served here`,
505
+ });
506
+ object.remove({ kind: "waiting", error });
507
+ return { object: object.label, kind: "ended" };
508
+ }
509
+ const attempt = object.reload(fate.served, fate.kind, fate.requests);
510
+ return { object: object.label, kind: fate.kind === "restart" ? "restarted" : "retried", target: object, attempt };
511
+ }
512
+ /**
513
+ * The report, once every retry had its first dependency check (a parked one reports why); a restart reports at once
514
+ * what its readiness found (its successor's own check follows the old attempt's end). `context`'s abort ends only
515
+ * this wait (`aborted`, its `details` naming what the commit applied: `committed`).
516
+ */
517
+ async #report(started, committed, context) {
518
+ const checks = started.map(async (fate) => {
519
+ if (fate.kind === "ended")
520
+ return { object: fate.object, kind: fate.kind };
521
+ const cause = await this.#checked(fate);
522
+ return cause === undefined
523
+ ? { object: fate.object, kind: fate.kind }
524
+ : { object: fate.object, kind: "parked", cause };
525
+ });
526
+ try {
527
+ return await awaitWithContext(Promise.all(checks), context);
528
+ }
529
+ catch {
530
+ const { added, changed, removed, failed } = committed;
531
+ const details = {
532
+ committed: { added: [...added], changed: [...changed], removed: [...removed], failed: [...failed] },
533
+ };
534
+ throw new ChordError({ code: "aborted", message: "reload: aborted after its commit", details });
535
+ }
536
+ }
537
+ /**
538
+ * Why a restarted or retried object's new attempt waits, for the report: what a restart's readiness found, at once
539
+ * (its new attempt's own check follows the old attempt's end), also for a retry of an attempt that still waits for
540
+ * an open old attempt; otherwise its new attempt's first dependency check.
541
+ */
542
+ #checked(fate) {
543
+ const { target, attempt } = fate;
544
+ if (fate.kind === "restarted" || target.openOldAttempt !== undefined)
545
+ return Promise.resolve(target.readinessCause);
546
+ return attempt.checked;
547
+ }
548
+ /** This host as staging sees it: whom it acts as, its address and its presence lists. */
549
+ #stagingHost() {
550
+ // Setups get presence lists of this host's `P`; staging passes them on as they are.
551
+ const references = (Type) => this.references(Type);
552
+ return { principal: this.principal, address: this.address, references: references };
553
+ }
554
+ async get(Type, params, context, options = {}) {
555
+ const binding = await this.acquire(Type, params, this.#own(), context, options);
556
+ // The binding was built from `Type`'s members.
557
+ return binding.reference;
558
+ }
559
+ hold(Type, params, context, options = {}) {
560
+ this.batch.assertOutside("hold");
561
+ // The binding was built from `Type`'s members; it may be unbound, so `variant` may be undefined.
562
+ return this.#hold(Type, params, this.#own(), context, options).reference;
563
+ }
564
+ accept(link, options, context) {
565
+ this.#assertOpen();
566
+ this.#link(link, "child", options, context);
567
+ }
568
+ connect(link, options, context) {
569
+ this.#assertOpen();
570
+ if (this.#parent.link !== undefined)
571
+ throw new Error("connect: this host has an open parent link");
572
+ const parent = this.#link(link, "parent", options, context);
573
+ if (parent.open)
574
+ this.#parent.connected(parent);
575
+ }
576
+ route(Kind, options, context) {
577
+ this.#assertOpen();
578
+ if (this.#state !== "new")
579
+ throw new Error("route: routes are declared before load");
580
+ if (this.#routes.has(Kind.kind))
581
+ throw new Error(`route: ${Kind.kind} is routed already`);
582
+ // The parent of the route's work: its `resolve`s and the holds and calls on its links, aborted when it closes.
583
+ const routing = withAbortSignal(this.#routing.signal, context);
584
+ // A route calls `authorize` with the principals of holds on this host, `P`s, and addresses of `Kind`.
585
+ const route = new Route(Kind, options, this, routing);
586
+ this.#routes.set(Kind.kind, route);
587
+ return {
588
+ retry: (address) => route.retry(address.key),
589
+ suspend: (address) => route.suspend(address.key),
590
+ };
591
+ }
592
+ revoke(revocation, context) {
593
+ const count = this.#revoke(revocation, context);
594
+ const parent = context.telemetry;
595
+ // Recorded after the work: a revocation is synchronous, its span only says what it ended.
596
+ if (!untraced(parent)) {
597
+ const attributes = { "chord.host": this.spanHost };
598
+ void chordSpans(parent)("chord.revoke", attributes, (span) => span.setAttributes({ count }));
599
+ }
600
+ }
601
+ /** `revoke`'s work; how many objects it ended and child links it closed. */
602
+ #revoke(revocation, context) {
603
+ let count = 0;
604
+ const key = canonicalJson(revocation, context);
605
+ const revoked = (principal) => !this.#isOwn(principal, context) && this.#revocationKeys.revokes(principal, key, context);
606
+ const error = (label) => new ChordError({ code: "forbidden", reason: "revoked", message: `${label}: revoked` });
607
+ for (const object of [...this.#objects.values()]) {
608
+ if (object.principal === undefined || !revoked(object.principal))
609
+ continue;
610
+ object.end(error(object.label));
611
+ count++;
612
+ }
613
+ // Requests not bound (waiting for the publication or a provider, refused, waiting for their link) end too: nothing
614
+ // revives them.
615
+ const unbound = error("an unbound request");
616
+ this.#unbound.revoke(revoked, unbound);
617
+ for (const link of this.#links)
618
+ link.revokeUnbound(revoked, unbound);
619
+ // This host's own requests over its paths, linked or not (a route still resolving, a link down): a later link
620
+ // would hold them again (fix round 1).
621
+ for (const holder of this.#pathHolders()) {
622
+ if (holder.kind !== "remote")
623
+ continue;
624
+ const { principal } = holder.caller;
625
+ if (principal !== undefined && revoked(principal))
626
+ holder.revoke(error(holder.label));
627
+ }
628
+ // Down the route links before the child links close: a worker ends the principal's objects with the revocation's
629
+ // error before the closed origins release their holds.
630
+ for (const link of this.#links)
631
+ if (link.role === "route")
632
+ link.send({ kind: "revoke", revocation });
633
+ for (const link of [...this.#links]) {
634
+ if (link.role !== "child" || !revoked(link.principal))
635
+ continue;
636
+ link.close();
637
+ count++;
638
+ }
639
+ return count;
640
+ }
641
+ get activity() {
642
+ // Its value is an `ActivityCounts`.
643
+ return this.#activity;
644
+ }
645
+ references(Type) {
646
+ let references = this.#references.get(Type.name);
647
+ if (references === undefined) {
648
+ references = new References(this.batch);
649
+ for (const object of this.#objects.values()) {
650
+ if (object.served.contract.name !== Type.name)
651
+ continue;
652
+ for (const holder of object.holders)
653
+ if (holder.listed)
654
+ references.record(object, holder);
655
+ }
656
+ this.#references.set(Type.name, references);
657
+ }
658
+ // Entries of `Type`'s objects, acting as `P`s.
659
+ return references;
660
+ }
661
+ async registry(R, context, options = {}) {
662
+ this.batch.assertOutside("registry");
663
+ this.#assertOpen();
664
+ this.#assertLoadCalled(`registry ${R.name}`);
665
+ const timeout = options.readyTimeout ?? this.timeouts.ready;
666
+ const expired = new AbortController();
667
+ const waiting = withLinkedAbortSignal(expired.signal, context);
668
+ let last;
669
+ const deadline = setTimeout(() => expired.abort(last ?? notLive(`registry ${R.name}`, timeout)), timeout);
670
+ // The host's close ends the wait at once, `released/closed` (its timer with it).
671
+ const closing = () => expired.abort(this.#closedError());
672
+ this.#routing.signal.addEventListener("abort", closing, { once: true });
673
+ try {
674
+ await awaitWithContext(this.#publication.promise, waiting.context);
675
+ this.#assertOpen();
676
+ const value = this.registryRecord(R.name).value(R.version);
677
+ // Its values are the composition as `R`'s version has it, `V`.
678
+ const usable = () => {
679
+ const start = value.start();
680
+ if (start.kind === "value" || start.last !== undefined)
681
+ return true;
682
+ last = start.error;
683
+ return false;
684
+ };
685
+ if (!usable())
686
+ await untilUsable(value, usable, waiting.context);
687
+ return value;
688
+ }
689
+ finally {
690
+ clearTimeout(deadline);
691
+ this.#routing.signal.removeEventListener("abort", closing);
692
+ waiting.release();
693
+ }
694
+ }
695
+ async root(fn, context, options = {}) {
696
+ this.batch.assertOutside("root");
697
+ this.#assertOpen();
698
+ // The scope's ctx acts as `principal`, a `P`: an explicit `undefined` runs anonymous (an HTTP request nobody
699
+ // authenticated), only an omitted one takes the host's.
700
+ const principal = "principal" in options ? options.principal : this.principal;
701
+ const run = fn;
702
+ const trace = options.trace;
703
+ if (trace === undefined || untraced(this.telemetry))
704
+ return this.#roots.run(run, principal, this.#counted(context));
705
+ const attributes = { "chord.host": this.spanHost, ...trace.attributes };
706
+ return this.telemetry.startSpan({ name: trace.name, attributes }, async (span) => {
707
+ try {
708
+ return await this.#roots.run(run, principal, withTelemetry(span, context));
709
+ }
710
+ catch (error) {
711
+ ended(span, "trace_failed", error, context.abortSignal);
712
+ throw error;
713
+ }
714
+ });
715
+ }
716
+ principalAttributes(principal, context) {
717
+ if (principal === undefined)
718
+ return NO_ATTRIBUTES;
719
+ if (this.#principalAttributes !== undefined)
720
+ return this.#principalAttributes(principal);
721
+ return { "chord.principal": capped(principalKey(principal, context, this.#principalKey)) };
722
+ }
723
+ /**
724
+ * The names requests here wait for unbound that no plugin here serves (types and registries: `not_served`), sorted;
725
+ * a name served at another version (`version`) is not among them.
726
+ */
727
+ unservedNames() {
728
+ return this.#unbound
729
+ .names()
730
+ .filter((name) => !this.#types.has(name) && this.#registries.get(name)?.providedVersion === undefined);
731
+ }
732
+ /** How many objects here have an activation under way (`ChordObject.activating`). */
733
+ activationsUnderWay() {
734
+ let count = 0;
735
+ for (const object of this.#objects.values())
736
+ if (object.activating)
737
+ count++;
738
+ return count;
739
+ }
740
+ /** The registries with contributions here and no provider, each with the newest version contributed, by name. */
741
+ undeclaredRegistries() {
742
+ const found = [];
743
+ for (const record of this.#registries.values()) {
744
+ const version = record.newestContribution;
745
+ if (version !== undefined && record.providedVersion === undefined)
746
+ found.push({ name: record.name, version });
747
+ }
748
+ return found.sort((a, b) => (a.name < b.name ? -1 : 1));
749
+ }
750
+ /** The record of registry `name` on this host, made by its first use. */
751
+ registryRecord(name) {
752
+ let record = this.#registries.get(name);
753
+ if (record === undefined) {
754
+ record = new RegistryRecord(name, this.batch, (error) => this.report(error), this.#clock);
755
+ this.#registries.set(name, record);
756
+ }
757
+ return record;
758
+ }
759
+ async close(_context) {
760
+ this.batch.assertOutside("close");
761
+ this.#closing ??= this.#close();
762
+ return this.#closing;
763
+ }
764
+ /**
765
+ * Whether the host published its setups (`load`'s batch): until then requests made here and holds arriving wait in
766
+ * the unbound index, placed by the publication.
767
+ */
768
+ get published() {
769
+ return this.#published;
770
+ }
771
+ /**
772
+ * `request` cannot bind yet: indexed under `name` (the type or registry it waits for) until woken or ended, waiting
773
+ * for the publication (no `cause`) or for a provider that fits (`cause`).
774
+ */
775
+ index(name, request, cause) {
776
+ this.#unbound.add(name, request, cause);
777
+ }
778
+ /**
779
+ * `binding`, whose object left it (its type removed, its version no longer bound: slice 7b §6), waits unbound with
780
+ * `cause` under its type's name; a publication places it again (`params` checked as it was, under `context`).
781
+ */
782
+ rewait(binding, Type, params, cause, context) {
783
+ this.#wait(binding, Type.name, cause, () => this.#place(binding, Type, params, context));
784
+ }
785
+ /** `request` left the unbound index's wait for `name` (it ended, or a retry checks it again). */
786
+ unindex(name, request) {
787
+ this.#unbound.delete(name, request);
788
+ }
789
+ /** Whether the host closes: its objects end through `close`, not through its links. */
790
+ get closing() {
791
+ return this.#state === "closed";
792
+ }
793
+ /**
794
+ * A reference to `Type` made by `caller` (its principal, its origin's incarnation), once it is live (`host.get`,
795
+ * `ctx.get`): a hold, waited for up to the getter's one deadline, across reconnects and through `loading`,
796
+ * `failed { transient }` and `failed { waiting }`; a broken failure rejects at once, the deadline with the last
797
+ * failure's error. A getter that gives up releases its reference.
798
+ */
799
+ async acquire(Type, params, caller, context, options) {
800
+ this.batch.assertOutside("get");
801
+ const binding = this.#hold(Type, params, caller, context, options);
802
+ const timeout = options.readyTimeout ?? this.timeouts.ready;
803
+ const expired = new AbortController();
804
+ const waiting = withLinkedAbortSignal(expired.signal, context);
805
+ const deadline = setTimeout(() => expired.abort(binding.lastFailure ?? notLive(binding.label, timeout)), timeout);
806
+ try {
807
+ // Old work's getter whose target's activation waits on that work's own drain fails at once (rule 6).
808
+ const target = binding.target;
809
+ const live = binding.live(waiting.context);
810
+ await (target instanceof ChordObject ? this.waitAsOldWork(live, target, Type, context) : live);
811
+ return binding;
812
+ }
813
+ catch (error) {
814
+ binding.release();
815
+ throw error;
816
+ }
817
+ finally {
818
+ clearTimeout(deadline);
819
+ waiting.release();
820
+ }
821
+ }
822
+ /**
823
+ * `waiting` (a getter's or a gate's wait on `target`, for `contract`'s version) as `context` makes it: as old work it
824
+ * is cut at once with `unavailable/reload_cycle` when it cycles through that work's own drain (`ReloadCycles`);
825
+ * otherwise as it is.
826
+ */
827
+ waitAsOldWork(waiting, target, contract, context) {
828
+ if (!this.oldWork.of(context))
829
+ return waiting;
830
+ const chain = chainAttempts(context);
831
+ return chain.size === 0 ? waiting : this.reloadCycles.wait(waiting, target, contract, chain);
832
+ }
833
+ /** Adds `delta` to the keep-alive count of `kind` (`host.activity`), where the work happens. */
834
+ count(kind, delta) {
835
+ this.#activity.count(kind, delta);
836
+ }
837
+ /** `holder` references `object`: listed in its type's presence, if someone asked for it and it is listed. */
838
+ referenced(object, holder, context) {
839
+ if (holder.listed)
840
+ this.#references.get(object.served.contract.name)?.add(object, holder, context);
841
+ }
842
+ /** `holders` of `object` ended: gone from its type's presence. */
843
+ unreferenced(object, holders, context) {
844
+ this.#references.get(object.served.contract.name)?.remove(holders, context);
845
+ }
846
+ /** Reports a background failure to `onError`; a throwing `onError` has nowhere left to report to. */
847
+ report(error) {
848
+ try {
849
+ this.#onError(error);
850
+ }
851
+ catch {
852
+ // Nothing to do: teardowns and attempts go on.
853
+ }
854
+ }
855
+ /**
856
+ * An unbound reference to an object of `Type` made by `caller`, declared by `dependent` (`undefined` for
857
+ * `host.get`, `host.hold` and `ctx.get`).
858
+ */
859
+ reference(Type, dependent, caller, options) {
860
+ this.#assertOpen();
861
+ return this.#binding(Type, dependent, caller, options);
862
+ }
863
+ /**
864
+ * Binds `binding` to the object for (Type, params) as its principal where its host address puts it (`Destination`):
865
+ * the object here, created with its first attempt if there is none, or a remote object held over its path. Placed
866
+ * here, the check is only against the type served here: not served (or of the other kind) or not at the caller's
867
+ * version and fingerprint, the reference waits unbound, `failed { waiting }`, indexed under the type's name. Returns
868
+ * the object it bound to; throws as `Destination.reference` does (a broken refusal).
869
+ */
870
+ bind(binding, Type, params, context) {
871
+ const { principal } = binding.caller;
872
+ const placed = this.#destination.reference(Type, params.params, principal, context);
873
+ if (placed.kind === "path") {
874
+ const { caller, dependent } = binding;
875
+ const remote = new RemoteObject(this, Type, params, placed.address, caller, placed.path, dependent, context.telemetry);
876
+ placed.path.attach(remote);
877
+ binding.bind(remote);
878
+ return remote;
879
+ }
880
+ const served = this.#types.get(Type.name);
881
+ const unbound = unboundCause(served, Type.kind, Type.name, Type.version, Type.fingerprint) ??
882
+ this.#misplaced(Type, served, params.params);
883
+ if (unbound !== undefined) {
884
+ // Old work never waits for a code update (rule 2): a version the new code dropped binds the object while its
885
+ // open old attempt still serves it, and fails at once otherwise.
886
+ if (unbound.error.code === "contract_mismatch" && this.oldWork.of(context)) {
887
+ const object = this.#objects.get(this.#identity(served, params, principal, context));
888
+ if (object === undefined || !object.oldServes(Type.version, Type.fingerprint))
889
+ throw unbound.error;
890
+ binding.bind(object);
891
+ return object;
892
+ }
893
+ this.#wait(binding, Type.name, unbound, () => this.#place(binding, Type, params, context));
894
+ return undefined;
895
+ }
896
+ // An anonymous scope (an HTTP request nobody authenticated) is no principal a remote type's factory can serve
897
+ // (Opus's build review F5): refused, never bound as the host.
898
+ if (served.kind !== "local" && principal === undefined) {
899
+ throw new ChordError({
900
+ code: "forbidden",
901
+ message: `${Type.name}: an anonymous caller gets no remote object`,
902
+ });
903
+ }
904
+ // Checked above: served here at the caller's version.
905
+ const object = this.#object(served, params, principal, context.telemetry, context, NO_CHAIN, binding.dependent);
906
+ binding.bind(object);
907
+ // A getter waiting for a shared activation links to it (decision "Shared work").
908
+ const activation = object.activationSpan;
909
+ if (activation !== undefined && !untraced(context.telemetry))
910
+ context.telemetry.addLink({ context: activation });
911
+ return object;
912
+ }
913
+ /** Where a hold arriving on `link` goes (`Destination.hold`: by the address it names); `released` once the host closed. */
914
+ place(request, link, caller, context) {
915
+ this.#assertOpen();
916
+ return this.#destination.hold(request, link, caller.principal, context);
917
+ }
918
+ /**
919
+ * What a hold placed here binds to, acting as `principal`: the object, or why it waits unbound (`failed
920
+ * { waiting }`): a remote type not served here (`not_served`), not at the hold's version and fingerprint, or whose
921
+ * params put it on another host (code skew: `version`). Throws for a broken refusal: invalid params, an activation
922
+ * the hold's chain waits for (`invalid/cycle`, Q5). A new object keeps the hold's chain.
923
+ */
924
+ serving(request, params, principal, context) {
925
+ const { type, version, fingerprint, chain = NO_CHAIN } = request;
926
+ const served = this.#types.get(type);
927
+ const unbound = unboundCause(served, "remote", type, version, fingerprint);
928
+ if (unbound !== undefined)
929
+ return { kind: "waiting", cause: unbound };
930
+ // Checked above: a remote type served here.
931
+ const remote = served;
932
+ const checked = checkParams(remote.contract, params, context);
933
+ const misplaced = this.#destination.misplaced(remote.contract, checked.params);
934
+ if (misplaced !== undefined)
935
+ return { kind: "waiting", cause: { kind: "waiting", error: misplaced } };
936
+ // The hold's carrier with this host's adapter: the first trigger of an object it creates.
937
+ const trigger = parentOf(request.trace, this.telemetry);
938
+ const object = this.#object(remote, checked, principal, trigger, context, chain);
939
+ const activation = object.activationId;
940
+ if (activation !== undefined && chain.includes(activation))
941
+ throw this.cycle(chain, activation, [object.label]);
942
+ return { kind: "object", object };
943
+ }
944
+ /**
945
+ * The path a remote reference of `Type` with `params` acting as `principal` goes over now: `ref.retry()` places a
946
+ * reference failed for a part past the limits anew (a route may have forgotten its old path). Throws as
947
+ * `Destination.reference` does, and `unavailable` for a type placed here now.
948
+ */
949
+ pathOf(Type, params, principal) {
950
+ // A retry has no context of its own: its admission checks count on none.
951
+ const placed = this.#destination.reference(Type, params, principal, BACKGROUND_CONTEXT);
952
+ if (placed.kind === "path")
953
+ return placed.path;
954
+ throw new ChordError({ code: "unavailable", message: `${Type.name} is placed here now` });
955
+ }
956
+ /**
957
+ * The `invalid/cycle` error of a cycle through `chain` (Q5): its entries from the activation `id` on, by label
958
+ * where the object is on this host ("…" for other hosts'), then `closing`.
959
+ */
960
+ cycle(chain, id, closing) {
961
+ const labels = new Map([...this.#objects.values()].map((each) => [each.activationId, each.label]));
962
+ const cycle = chain.slice(chain.indexOf(id)).map((entry) => labels.get(entry) ?? "…");
963
+ return invalid("cycle", `dependency cycle: ${[...cycle, ...closing].join(" → ")}`);
964
+ }
965
+ /** A new origin number for `side`, which relays holds upstream; registered in `relays` until it closes. */
966
+ relayOrigin(side) {
967
+ const origin = this.#nextOrigin++;
968
+ this.relays.set(origin, side);
969
+ return origin;
970
+ }
971
+ /**
972
+ * A route's link, its work under the route's `context`: registered with the host and its heartbeat; one closed
973
+ * already is returned closed.
974
+ */
975
+ routeLink(link, options, context) {
976
+ return this.#link(link, "route", options, context);
977
+ }
978
+ /** A link completed its handshake: a route's address resolves again once if it drops. */
979
+ linkOpened(link) {
980
+ if (link.role !== "route")
981
+ return;
982
+ for (const route of this.#routes.values())
983
+ route.opened(link);
984
+ }
985
+ /**
986
+ * Forgets a link once it closed: the origins relaying to it, then the parent's path or its route's address are
987
+ * told; the heartbeat may stop.
988
+ */
989
+ unlink(link) {
990
+ this.#links.delete(link);
991
+ for (const relay of this.relays.values())
992
+ relay.unlinked(link);
993
+ if (this.#links.size === 0) {
994
+ clearInterval(this.#ticking);
995
+ this.#ticking = undefined;
996
+ }
997
+ if (link.role === "parent")
998
+ this.#parent.disconnected(link);
999
+ if (link.role === "route")
1000
+ for (const route of this.#routes.values())
1001
+ if (route.closed(link))
1002
+ break;
1003
+ }
1004
+ /** Moves `object` behind every object that went live before it (close ends in reverse); its backoff is over. */
1005
+ wentLive(object) {
1006
+ this.#objects.delete(object.identity);
1007
+ this.#objects.set(object.identity, object);
1008
+ this.backoff.delete(object.identity);
1009
+ }
1010
+ /** Drops an ended object (once, before a next instance of its identity exists). */
1011
+ forget(object) {
1012
+ this.#objects.delete(object.identity);
1013
+ this.backoff.ended(object.identity);
1014
+ }
1015
+ /** Records a teardown for `identity`: its next attempt waits for it and for every earlier one still running. */
1016
+ ending(identity, teardown) {
1017
+ const previous = this.#endings.get(identity);
1018
+ const ending = previous === undefined ? teardown : Promise.all([previous, teardown]).then(() => { });
1019
+ this.#endings.set(identity, ending);
1020
+ void ending.then(() => {
1021
+ if (this.#endings.get(identity) === ending)
1022
+ this.#endings.delete(identity);
1023
+ });
1024
+ }
1025
+ /** What the next attempt for `identity` waits for: its previous instances' teardowns, if any still run. */
1026
+ endingOf(identity) {
1027
+ return this.#endings.get(identity);
1028
+ }
1029
+ /**
1030
+ * A reference to `Type` made by `caller` for `host.hold` and getters: params checked at once (`invalid/params`,
1031
+ * also before `load`), then placed (`#place`); before the host's publication it waits in the unbound index,
1032
+ * `loading`, and the publication places it.
1033
+ */
1034
+ #hold(Type, params, caller, context, options) {
1035
+ this.#assertOpen();
1036
+ this.#assertLoadCalled(Type.name);
1037
+ const checked = checkParams(Type, params, context);
1038
+ const binding = this.#binding(Type, undefined, caller, options);
1039
+ const place = () => this.#place(binding, Type, checked, context);
1040
+ if (this.#published)
1041
+ place();
1042
+ else
1043
+ this.#wait(binding, Type.name, undefined, place);
1044
+ return binding;
1045
+ }
1046
+ /**
1047
+ * Places a reference (`bind`); where it cannot go (a `hostAddress` or `authorize` that throws or refuses) fails it
1048
+ * broken, until `ref.retry()` places it again. One woken after the host closed ends as the close ended the others.
1049
+ */
1050
+ #place(binding, Type, checked, context) {
1051
+ if (this.#state === "closed") {
1052
+ binding.end(this.#closedError());
1053
+ return;
1054
+ }
1055
+ try {
1056
+ this.bind(binding, Type, checked, context);
1057
+ }
1058
+ catch (error) {
1059
+ const again = () => this.#place(binding, Type, checked, context);
1060
+ binding.refuse({ kind: "broken", error: asChordError(error, Type.name) }, again);
1061
+ }
1062
+ }
1063
+ /**
1064
+ * The provider's own host-address check of a remote `Type` placed here by the consumer's contract, against the one
1065
+ * served (`invalid/host_address`, `waiting`: code skew); none when both have the same `hostAddress` (the consumer
1066
+ * computed it with the provider's function) or the type is local. A provider's `hostAddress` that throws throws.
1067
+ */
1068
+ #misplaced(Type, served, params) {
1069
+ if (served.kind !== "remote" || contractData(Type).hostAddress === contractData(served.contract).hostAddress) {
1070
+ return undefined;
1071
+ }
1072
+ const error = this.#destination.misplaced(served.contract, params);
1073
+ return error === undefined ? undefined : { kind: "waiting", error };
1074
+ }
1075
+ /** Leaves `binding` unbound in the index under `name`: `cause` (`waiting`), or none before the publication. */
1076
+ #wait(binding, name, cause, place) {
1077
+ binding.wait(cause, place, () => this.#unbound.delete(name, binding));
1078
+ this.#unbound.add(name, binding, cause);
1079
+ }
1080
+ /** A new reference's binding made by `caller`; its parked calls wait its `readyTimeout`. */
1081
+ #binding(Type, dependent, caller, options) {
1082
+ return new Binding(Type, this.batch, dependent, caller, options.readyTimeout ?? this.timeouts.ready);
1083
+ }
1084
+ /** This host as the maker of its own references: its principal and incarnation. */
1085
+ #own() {
1086
+ return { principal: this.principal, incarnation: this.incarnation };
1087
+ }
1088
+ /** Whether `principal` is this host's own (by principal key): revocation never touches it. */
1089
+ #isOwn(principal, context) {
1090
+ const own = this.principal;
1091
+ if (own === undefined)
1092
+ return false;
1093
+ // Principals on this host are `P`s: its own, and the ones its links stamp.
1094
+ return (principalKey(own, context, this.#principalKey) === principalKey(principal, context, this.#principalKey));
1095
+ }
1096
+ /**
1097
+ * `context` for work this host does under it (a link's, a root scope's): one without a span carries this host's
1098
+ * adapter's metrics (`countingOnly`), so the cost counters of that work reach the adapter (review L6).
1099
+ */
1100
+ #counted(context) {
1101
+ const counting = this.#counting;
1102
+ if (counting === undefined || context.telemetry !== NOOP_TELEMETRY_CONTEXT)
1103
+ return context;
1104
+ return withTelemetry(counting, context);
1105
+ }
1106
+ /** A new link of `role`, registered with the heartbeat while open. */
1107
+ #link(link, role, options, context) {
1108
+ const { principal, trusted = false, codec = binaryCodec } = options;
1109
+ const limits = linkLimits(trusted, options.limits);
1110
+ const made = new HostLink(this, link, { role, principal, trusted, codec, limits }, this.#counted(withoutAbortSignal(context)));
1111
+ if (!made.open)
1112
+ return made;
1113
+ this.#links.add(made);
1114
+ if (this.#ticking === undefined) {
1115
+ const { ping, close } = this.#heartbeat;
1116
+ const every = Math.min(ping, close) / 10;
1117
+ let last = Date.now();
1118
+ this.#ticking = setInterval(() => {
1119
+ const now = Date.now();
1120
+ // A tick a whole interval late is time this process did not run (a sleeping laptop, a blocked event loop).
1121
+ const late = now - last - every;
1122
+ const paused = late >= every ? late : 0;
1123
+ last = now;
1124
+ for (const each of [...this.#links])
1125
+ each.tick(now, paused, ping, close);
1126
+ }, every);
1127
+ }
1128
+ return made;
1129
+ }
1130
+ /** The identity of `served`'s object for `params` and `principal` (a remote type's includes its principal key). */
1131
+ #identity(served, params, principal, context) {
1132
+ if (served.kind === "local")
1133
+ return identityKey(served.contract, params.key);
1134
+ // A host serving remote types has a principal, which its references act as unless a link stamped its own (only
1135
+ // `P`s).
1136
+ return identityKey(served.contract, params.key, principalKey(principal, context, this.#principalKey));
1137
+ }
1138
+ /**
1139
+ * The object for `params` (checked by L1) and, for a remote type, `principal` (its key is part of the identity),
1140
+ * created if there is none; its first attempt starts at once, or when its identity's backoff window ends. A new one
1141
+ * keeps the activation chain it is created for (Q5): `chain` (a hold's), or that of `dependent`'s activation when
1142
+ * an activation declared it, so its own holds over links carry that chain on. A new one's first activation span
1143
+ * links to `trigger` (decision "Shared work").
1144
+ */
1145
+ #object(served, params, principal, trigger, context, chain = NO_CHAIN, dependent) {
1146
+ const { params: checked, key } = params;
1147
+ const identity = this.#identity(served, params, principal, context);
1148
+ let object = this.#objects.get(identity);
1149
+ if (object === undefined) {
1150
+ // Shared by every getter: one getter's cancellation does not cancel it.
1151
+ const owner = served.kind === "local" ? undefined : principal;
1152
+ const created = dependent?.activationChain() ?? chain;
1153
+ object = new ChordObject(this, served, checked, owner, key, identity, trigger, withoutAbortSignal(context), created);
1154
+ this.#objects.set(identity, object);
1155
+ if (!this.backoff.waiting(identity))
1156
+ object.attempt();
1157
+ }
1158
+ return object;
1159
+ }
1160
+ /**
1161
+ * Closes the links, then ends every object at once and tears them down one by one, the last to go live first, after
1162
+ * the endings already running.
1163
+ */
1164
+ async #close() {
1165
+ this.#state = "closed";
1166
+ this.#routing.abort(this.#closedError());
1167
+ // Links first, children, routes, then the parent: no `gone` goes out for the objects ending below.
1168
+ const links = [...this.#links];
1169
+ for (const role of ["child", "route", "parent"])
1170
+ for (const link of links)
1171
+ if (link.role === role)
1172
+ link.close();
1173
+ // Remote references end now: their parked calls reject `released`, no later link holds them.
1174
+ const closed = this.#closedError();
1175
+ // Code outside objects stops at its next use of Chord: an `fn` waiting in `sleep(ms, ctx)` ends.
1176
+ this.#roots.close(closed);
1177
+ for (const holder of this.#pathHolders())
1178
+ if (holder.kind === "remote")
1179
+ holder.lost(closed);
1180
+ // At the fence too: requests still waiting for a publication or a provider end as the others did, and gets
1181
+ // waiting for a publication that will not come fail now, not after the slow closes below (fix round 1).
1182
+ this.#unbound.close(closed);
1183
+ this.#clock.close();
1184
+ this.#publication.resolve();
1185
+ this.backoff.clear();
1186
+ // Every object is sealed before any teardown releases a reference, so none ends in the background.
1187
+ const teardowns = [...this.#objects.values()].reverse().map((object) => object.stop());
1188
+ await Promise.all(this.#endings.values());
1189
+ const failures = [];
1190
+ for (const tearDown of teardowns)
1191
+ failures.push(...(await tearDown()));
1192
+ this.#types.clear();
1193
+ // Their facets keep their factories' closures (which may keep objects' handles).
1194
+ this.#plugins.clear();
1195
+ for (const record of this.#registries.values())
1196
+ record.close();
1197
+ this.#registries.clear();
1198
+ this.store?.detach();
1199
+ if (failures.length > 0) {
1200
+ const message = `host.close: ${failures.length} native close(s) threw`;
1201
+ throw new AggregateError(failures.map(({ error }) => error), message);
1202
+ }
1203
+ }
1204
+ /** Every holder of the parent path, the unplaced one and every route's paths: this host's requests over links. */
1205
+ #pathHolders() {
1206
+ const routed = [...this.#routes.values()].flatMap((route) => route.holders());
1207
+ return [...this.#parent.holders(), ...this.unplaced.holders(), ...routed];
1208
+ }
1209
+ /** The store stopped after a backend error (it tells the host once): reported, and the host closes. */
1210
+ #storageFailed(error) {
1211
+ this.report({ kind: "storage_failed", error });
1212
+ this.#closing ??= this.#close();
1213
+ // The app's own `close` returns this closing and gets its failures.
1214
+ this.#closing.catch(() => { });
1215
+ }
1216
+ /** A backoff window ended: the identity's object is retried; without one the entry goes. */
1217
+ #due(identity) {
1218
+ const object = this.#objects.get(identity);
1219
+ if (object === undefined)
1220
+ this.backoff.delete(identity);
1221
+ else
1222
+ object.attempt();
1223
+ }
1224
+ /**
1225
+ * Publishes the staged plugins of `facets` (by name), inside the publication's batch: the registries they serve
1226
+ * served, their facet contributions entered into the tables (the types are the staged table's, set by the caller).
1227
+ */
1228
+ #publish(staged, facets) {
1229
+ for (const [name, facet] of facets) {
1230
+ const plugin = staged.plugins.get(name);
1231
+ for (const [registry, { registry: token, provider }] of plugin.registries) {
1232
+ this.registryRecord(registry).serve(token.version, provider);
1233
+ }
1234
+ const contributions = plugin.contributions.map(({ registry, value }) => contributionOf(this.registryRecord(registry.name), { plugin: name, type: undefined }, registry.version, value));
1235
+ for (const contribution of contributions)
1236
+ contribution.record.add(contribution);
1237
+ this.#plugins.set(name, { facet, staged: plugin, contributions });
1238
+ }
1239
+ }
1240
+ #assertOpen() {
1241
+ if (this.#state === "closed")
1242
+ throw this.#closedError();
1243
+ }
1244
+ /**
1245
+ * A request of this host's own (`get`, `hold`, `registry`, a root's `ctx.get`) for `name` before its first `load`
1246
+ * would wait for a publication nobody started: it throws `not_ready` at once (decision "Mistakes that wait are
1247
+ * reported at once" (a)). Holds arriving on its links before `load` still wait for the publication (a worker
1248
+ * connects first, W6).
1249
+ */
1250
+ #assertLoadCalled(name) {
1251
+ if (this.#state !== "new")
1252
+ return;
1253
+ const fix = "call host.load first (a host with nothing to load calls load([]))";
1254
+ throw new ChordError({ code: "not_ready", message: `${name}: the host has not loaded; ${fix}` });
1255
+ }
1256
+ /**
1257
+ * At each publication (`load`'s, a reload's commit), after its batch: every registry with contributions and no
1258
+ * provider here is reported `registry_undeclared`, naming its contributors; again only once they change.
1259
+ */
1260
+ #reportUndeclared() {
1261
+ for (const record of this.#registries.values())
1262
+ record.reportUndeclared();
1263
+ }
1264
+ #closedError() {
1265
+ return new ChordError({ code: "released", reason: "closed", message: "the host is closed" });
1266
+ }
1267
+ }
1268
+ /**
1269
+ * Why a reference to a type of `kind` at `version` and `fingerprint`, placed here, cannot bind to `served` (the type of
1270
+ * that name served here): not served, or as the other kind (`unavailable`); another version or fingerprint
1271
+ * (`contract_mismatch`); `undefined` when it binds. Both wait for a publication: `failed { waiting }`.
1272
+ */
1273
+ function unboundCause(served, kind, name, version, fingerprint) {
1274
+ if (served === undefined || served.kind !== kind) {
1275
+ return { kind: "waiting", error: new ChordError({ code: "unavailable", message: `${name} is not served here` }) };
1276
+ }
1277
+ const { contract } = served;
1278
+ if (binds(served.provider, version, fingerprint))
1279
+ return undefined;
1280
+ const message = `${name} v${version} does not match the served v${contract.version}`;
1281
+ return { kind: "waiting", error: new ChordError({ code: "contract_mismatch", message }) };
1282
+ }
1283
+ /**
1284
+ * Waits until `usable()` (a registry value's check, which records its last error) holds, checked at every change the
1285
+ * value tells its waiters of (after the batch that made it); rejects when `context` aborts or the value closes. It
1286
+ * waits on the value only while it runs.
1287
+ */
1288
+ async function untilUsable(value, usable, context) {
1289
+ let changed = Promise.withResolvers();
1290
+ const release = value.wait({
1291
+ dependencyMoved: () => queueMicrotask(() => changed.resolve()),
1292
+ // The value closed with its host: the wait ends with the close's error.
1293
+ closed: (error) => changed.reject(error),
1294
+ });
1295
+ try {
1296
+ while (!usable()) {
1297
+ await awaitWithContext(changed.promise, context);
1298
+ changed = Promise.withResolvers();
1299
+ }
1300
+ }
1301
+ finally {
1302
+ release();
1303
+ }
1304
+ }
1305
+ /** The `aborted` error of a reload whose context aborted before its commit: nothing changed. */
1306
+ function reloadAborted() {
1307
+ return new ChordError({ code: "aborted", message: "reload: aborted" });
1308
+ }
1309
+ /** The error of a plugin name given twice: the second is refused. */
1310
+ function loadedTwice(name) {
1311
+ return new Error(`plugin "${name}" is loaded twice`);
1312
+ }
1313
+ /** Whether registry provider `served` serves readers of `version`: its own, or an older one its `accepts` maps back. */
1314
+ function registryServes(served, version) {
1315
+ const provided = served.registry.version;
1316
+ return provided === version || (provided > version && served.provider.accepts?.[version]?.value !== undefined);
1317
+ }
1318
+ //# sourceMappingURL=host.js.map