@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,513 @@
1
+ // `startServer` (slice 13 §1, §5; decisions "The app kit, point 1" to "point 5"): the server of an app built with the kit.
2
+ // It lays out the data directory, opens the server's store, creates the server host, the HTTP component and one
3
+ // workers component per worker kind, the plugins component over the app's required root and the user's root, loads
4
+ // the server's plugins with the kit's own facets (the start-data object, sessions, the owner link, pairing, files),
5
+ // and gives the app the controls it needs: the owner link, `applyChanges`, installs, export and import per address.
6
+ // After the listen, off the start's path, it builds the bases (the surfaces' base bundles, each worker kind's worker
7
+ // base) and records the base code the `base` mark compares.
8
+ import { statSync } from "node:fs";
9
+ import { join, resolve, sep } from "node:path";
10
+ import { withAbortSignal } from "../../context/index.js";
11
+ import { hostKind } from "../../contracts/index.js";
12
+ import { principalKey, samePrincipal } from "../../data/principal.js";
13
+ import { createHost } from "../../host/index.js";
14
+ import { isJsonValue } from "../../json.js";
15
+ import { openNodeSqliteDatabase } from "../../sqlite/node.js";
16
+ import { openStore, sqliteBackend } from "../../store/index.js";
17
+ import { localeChoiceFacet, themeChoiceFacet, themesFacet, translationsFacet } from "../../surfaces/index.js";
18
+ import { telemetryIngestFacet } from "../../telemetry-ingest/index.js";
19
+ import { createHttp } from "../http/index.js";
20
+ import { createPlugins, } from "../plugins/index.js";
21
+ import { processConditions, tuiSurface, WEB_PREFIX, webSurface, } from "../surfaces/index.js";
22
+ import { createWorkers, nodeBaseInputs, processLock, } from "../workers/index.js";
23
+ import { ARCHIVE_FORMAT, packData, unpackData } from "./archive.js";
24
+ import { addressParam, HostData } from "./data.js";
25
+ import { filesFacet } from "./files.js";
26
+ import { appInfoFacet } from "./info.js";
27
+ import { createLayout, defaultDataDir, openDataDir, privateStore, workerDirectory } from "./layout.js";
28
+ import { OWNER_PATH, OwnerLink, ownerFacet, ownerTokenFile } from "./owner.js";
29
+ import { Pairings, pairingFacet } from "./pairing.js";
30
+ import { secretFile } from "./secrets.js";
31
+ import { createSessions } from "./sessions.js";
32
+ /** The server's host kind: the kit's server host is `Server()`. */
33
+ export const Server = hostKind("server");
34
+ /**
35
+ * Starts the app's server (§1): resolves once its plugins are loaded and it listens. A failing plugin of the app's
36
+ * root (or a problem discovery reports there) rejects with the plugins component's `PluginError`, everything closed.
37
+ * The bases are built right after the listen, from the files as they are then (`basesBuilt`): a page request waits
38
+ * for its surface's, a worker start for its kind's.
39
+ */
40
+ export async function startServer(options, context) {
41
+ checkOwner(options.principal.owner, options.principal.server, context);
42
+ const { layout, cookieSecret, store, lock } = await openServer(resolve(options.dataDir ?? defaultDataDir(options.name)), context);
43
+ const { onError, api, limits = {} } = options;
44
+ const sessions = createSessions(cookieSecret, { maxEphemeral: limits.ephemeralSessions });
45
+ const { telemetry, principalAttributes } = options;
46
+ const host = createHost({
47
+ address: Server(),
48
+ principal: options.principal.server,
49
+ store,
50
+ telemetry,
51
+ ...(principalAttributes === undefined ? {} : { principalAttributes }),
52
+ ...options.timeouts,
53
+ onError: (error) => onError({ kind: "host", error }),
54
+ });
55
+ const http = createHttp(host, {
56
+ listen: options.listen ?? { host: "127.0.0.1", port: 0 },
57
+ links: { path: "/chord", opened: sessions.opened },
58
+ telemetry,
59
+ onError: (error) => onError({ kind: "http", error }),
60
+ }, context);
61
+ const plugins = createPlugins({
62
+ roots: [{ path: resolve(options.root ?? "plugins"), required: true }, layout.plugins],
63
+ api: { name: api.name, versions: api.versions },
64
+ kinds: Object.fromEntries(Object.entries(options.kinds).map(([name, kind]) => [
65
+ name,
66
+ { platform: kind.platform, hostPackages: hostPackagesOf(api, name, kind) },
67
+ ])),
68
+ install: options.install,
69
+ // The server's own base code, hashed now; each base bundle's record is added once built (`watchBase`).
70
+ base: (options.base ?? []).map((path) => resolve(path)),
71
+ publicPath: `${WEB_PREFIX}assets/`,
72
+ onError: (error) => onError({ kind: "plugins", error }),
73
+ }, context);
74
+ const workers = new Map();
75
+ // The address key of each worker by its principal's key: the principal its link stamps on its telemetry batches.
76
+ const workerHosts = new Map();
77
+ const link = new OwnerLink();
78
+ const { owner } = options.principal;
79
+ const core = [
80
+ { name: "chord.http", facet: http.facet },
81
+ {
82
+ name: "chord.app.info",
83
+ facet: appInfoFacet({ dataDir: layout.dataDir, name: options.name, version: api.versions[0] ?? "", owner }),
84
+ },
85
+ { name: "chord.app.sessions", facet: sessions.facet },
86
+ { name: "chord.app.owner", facet: ownerFacet(link, owner) },
87
+ {
88
+ name: "chord.app.pairing",
89
+ facet: pairingFacet(new Pairings({ maxPending: limits.pendingPairings, perAddress: limits.pairingsPerAddress }), owner),
90
+ },
91
+ { name: "chord.app.files", facet: filesFacet(join(layout.server, "files"), options.files, limits.uploads) },
92
+ { name: "chord.themes", facet: themesFacet() },
93
+ { name: "chord.themes.choice", facet: themeChoiceFacet() },
94
+ { name: "chord.translations", facet: translationsFacet() },
95
+ { name: "chord.locale.choice", facet: localeChoiceFacet() },
96
+ ];
97
+ if (telemetry !== undefined) {
98
+ const facet = telemetryIngestFacet({
99
+ target: telemetry,
100
+ workerHost: (principal) => workerHosts.get(principalKey(principal, context)),
101
+ principalAttributes: (principal) => host.principalAttributes(principal, context),
102
+ });
103
+ core.push({ name: "chord.telemetry", facet });
104
+ }
105
+ const surfaces = [];
106
+ const app = new RunningApp(host, http, workers, plugins, surfaces, { store, lock }, layout, options);
107
+ // What runs after the start reports nothing once the app closes (a build or scan finishing late).
108
+ const report = (error) => {
109
+ if (!app.closing())
110
+ onError(error);
111
+ };
112
+ try {
113
+ for (const kind of options.workers ?? []) {
114
+ workers.set(kind.kind.kind, workersOf(host, kind, options, layout, plugins, workerHosts, context));
115
+ }
116
+ for (const surface of surfacesOf(host, options, plugins)) {
117
+ surfaces.push(surface);
118
+ core.push({ name: `chord.${surface.name}`, facet: surface.surface.facet });
119
+ }
120
+ await plugins.load(host, { kind: "server", core, modules: modulesOf(api, options.kinds.server) }, context);
121
+ await ownerTokenFile(layout.ownerToken, owner, host, context);
122
+ const listening = await http.listening(context);
123
+ const bases = [
124
+ ...surfaces.map(({ name, surface }) => ({ name, build: () => surface.build() })),
125
+ ...[...workers].map(([name, each]) => ({ name, build: () => each.build() })),
126
+ ];
127
+ const compared = [];
128
+ const built = buildBases(bases, plugins, compared, report, () => app.closing());
129
+ const watching = watchBaseCode(plugins, built, compared, report, () => app.closing());
130
+ app.started(link.renew(), listening, built, watching);
131
+ }
132
+ catch (error) {
133
+ await app.close(context);
134
+ throw error;
135
+ }
136
+ return app;
137
+ }
138
+ /**
139
+ * Refuses an owner the kit could not recognize or that would act as the server (a declaration policy the types cannot
140
+ * express): sessions keep the owner as JSON, so a field `undefined` (or anything else not strict JSON) would never
141
+ * match it again; the server's principal reaches every worker's kit objects.
142
+ */
143
+ function checkOwner(owner, server, context) {
144
+ if (!isJsonValue(owner)) {
145
+ throw new Error("startServer: principal.owner must be strict JSON (no undefined fields, functions or class instances)");
146
+ }
147
+ if (samePrincipal(owner, server, context)) {
148
+ throw new Error("startServer: principal.owner must not be the server's principal");
149
+ }
150
+ }
151
+ /**
152
+ * Builds every base right after the listen, at once, from the files as they are now (owner decision "A": nothing is
153
+ * kept between starts; the server answers meanwhile, each request needing a base waits for it). A built base's record
154
+ * is added to what `plugins` compares (its first comparisons pushed to `compared`); a failed one is reported
155
+ * (`base_build`) and the server runs on. Settles once every build ended; what ends after the close is dropped.
156
+ */
157
+ async function buildBases(bases, plugins, compared, report, closed) {
158
+ await Promise.all(bases.map(async ({ name, build }) => {
159
+ const built = await build();
160
+ if (closed())
161
+ return;
162
+ if (built.kind === "failed")
163
+ report({ kind: "base_build", base: name, error: built.error });
164
+ else
165
+ compared.push(plugins.watchBase(built.inputs));
166
+ }));
167
+ }
168
+ /**
169
+ * Adds the server's own code to what `plugins` compares, once the bases are built (`built`; the scan's reads would
170
+ * contend with the builds the first requests wait for): the static graph of its entry (the start script;
171
+ * `nodeBaseInputs`; a file changed since the process started is recorded as differing, `editedSinceStart`). Best
172
+ * effort: a failed scan is reported (`server_scan`) and that code not compared. An entry under `node_modules` is
173
+ * installed code (an npm-installed app, a test runner), never compared. Settles once every record's first comparison
174
+ * did (the bases' in `compared` too: `base` knows them all). A close meanwhile ends it at its next step; a scan stalled
175
+ * on a read keeps it pending until the read ends (the close does not wait for it; its result is dropped).
176
+ */
177
+ async function watchBaseCode(plugins, built, compared, report, closed) {
178
+ await built;
179
+ if (closed())
180
+ return;
181
+ const entry = process.argv[1];
182
+ if (entry !== undefined && !entry.split(sep).includes("node_modules")) {
183
+ const conditions = processConditions(process.execArgv, process.env.NODE_OPTIONS);
184
+ const scanned = await nodeBaseInputs(entry, conditions).then((inputs) => inputs, (error) => report({ kind: "server_scan", error }));
185
+ if (closed())
186
+ return;
187
+ if (scanned !== undefined)
188
+ compared.push(plugins.watchBase(editedSinceStart(scanned)));
189
+ }
190
+ await Promise.all(compared);
191
+ }
192
+ /** What the scan records for a file changed since the process started: a hash no bytes have. */
193
+ const EDITED_SINCE_START = "changed since the server started";
194
+ /** How far in the future a file's timestamp may be and still count as an edit since the start: clock skew. */
195
+ const FUTURE_SLACK_MS = 5_000;
196
+ /**
197
+ * The scan's record `inputs` with every file changed since this process started (its mtime or ctime after
198
+ * `performance.timeOrigin`) recorded as differing: Node may have loaded other bytes than the scan read, so its first
199
+ * comparison marks `base` (until a restart: the bytes Node loaded are unknown). Conservative: an edit Node loaded
200
+ * anyway (made during the module loading, before the file was read) or a change of metadata only (ctime) marks too.
201
+ * Per timestamp: one later than now (plus `FUTURE_SLACK_MS`) is no edit since the start (a file stamped in the future,
202
+ * by a skewed clock or an archive, would mark every start until that time); a file neither of whose timestamps is in
203
+ * range keeps its hash, compared by content alone.
204
+ */
205
+ function editedSinceStart(inputs) {
206
+ const started = performance.timeOrigin;
207
+ const latest = Date.now() + FUTURE_SLACK_MS;
208
+ return new Map([...inputs].map(([path, hash]) => {
209
+ try {
210
+ const { mtimeMs, ctimeMs } = statSync(path);
211
+ const edited = [mtimeMs, ctimeMs].some((time) => time > started && time <= latest);
212
+ return [path, edited ? EDITED_SINCE_START : hash];
213
+ }
214
+ catch {
215
+ // Gone: its first comparison finds it so.
216
+ return [path, hash];
217
+ }
218
+ }));
219
+ }
220
+ /** The app's client surfaces, in order: the web's, the terminal's (their base bundles built after the listen). */
221
+ function surfacesOf(host, options, plugins) {
222
+ const surfaces = [];
223
+ if (options.web !== undefined)
224
+ surfaces.push({ name: "web", surface: webSurface(host, { ...options.web, plugins }) });
225
+ if (options.tui !== undefined)
226
+ surfaces.push({ name: "tui", surface: tuiSurface(host, { ...options.tui, plugins }) });
227
+ return surfaces;
228
+ }
229
+ /** How long a second server waits for the data directory's lock before it is refused. */
230
+ const SERVER_LOCK_MS = 1000;
231
+ /**
232
+ * The server's own part of the data directory `path`: its lock (one server per data directory, by its real path: a
233
+ * second one, also through a symbolic link, would share its stores and secrets), the layout made private, the cookie
234
+ * secret and the server's store; the lock released when the rest fails.
235
+ */
236
+ async function openServer(path, context) {
237
+ const dataDir = await openDataDir(path);
238
+ const waited = AbortSignal.timeout(SERVER_LOCK_MS);
239
+ const lock = await processLock(`chord-app:${dataDir}`, withAbortSignal(waited, context)).catch((error) => {
240
+ throw waited.aborted ? new Error(`startServer: another server runs on ${dataDir}`) : error;
241
+ });
242
+ try {
243
+ const layout = await createLayout(dataDir);
244
+ const cookieSecret = await secretFile(layout.cookieSecret);
245
+ await privateStore(layout.serverStore);
246
+ const store = await openStore(sqliteBackend(await openNodeSqliteDatabase(layout.serverStore)), context);
247
+ return { layout, cookieSecret, store, lock };
248
+ }
249
+ catch (error) {
250
+ await lock.release();
251
+ throw error;
252
+ }
253
+ }
254
+ /** The host packages of kind `name`: the API's shared and per-kind module of every version, and its packages. */
255
+ function hostPackagesOf(api, name, kind) {
256
+ const modules = api.versions.flatMap((version) => [`${api.name}/${version}`, `${api.name}/${version}/${name}`]);
257
+ return [...modules, ...Object.keys(kind.packages ?? {})];
258
+ }
259
+ /** This process's modules for a kind: the API's and the kind's packages. */
260
+ function modulesOf(api, kind) {
261
+ return { ...api.modules, ...kind?.packages };
262
+ }
263
+ /**
264
+ * The workers component of one worker kind (its base built after the listen, into the kind's directory under
265
+ * `cache/workers/`): started with the kit's part of the start data beside the app's.
266
+ */
267
+ function workersOf(host, kind, options, layout, plugins, workerHosts, context) {
268
+ const { dataDir } = layout;
269
+ const facet = kind.facet ?? "worker";
270
+ // `AppOptions` admits worker kinds only with `principal.worker`.
271
+ const worker = options.principal.worker;
272
+ const { server } = options.principal;
273
+ return createWorkers(host,
274
+ // A host kind of the app: any params; its addresses come back from its route as the kit hands them on.
275
+ kind.kind, {
276
+ kind: facet,
277
+ entry: kind.entry,
278
+ ...(kind.execArgv === undefined ? {} : { execArgv: kind.execArgv }),
279
+ ...(kind.env === undefined ? {} : { env: kind.env }),
280
+ baseDir: join(layout.workerBases, kind.kind.kind),
281
+ compileCache: layout.compileCache,
282
+ // The server reaches its workers' kit objects (`HostData`) whatever the app admits.
283
+ authorize: (principal, address) => samePrincipal(principal, server, context) || kind.authorize(principal, address),
284
+ principal: worker,
285
+ start: async (address, ctx) => {
286
+ const principal = worker(address);
287
+ workerHosts.set(principalKey(principal, ctx), address.key);
288
+ const kit = {
289
+ dir: workerDirectory(dataDir, address),
290
+ facet,
291
+ // Principals are JSON (they cross links).
292
+ principal: principal,
293
+ server: server,
294
+ files: { ...options.files },
295
+ telemetry: options.telemetry !== undefined,
296
+ ...(options.limits?.uploads === undefined ? {} : { uploads: options.limits.uploads }),
297
+ timeouts: { ...options.timeouts },
298
+ };
299
+ return { kit, app: await kind.start(address, ctx) };
300
+ },
301
+ lock: (address) => workerLock(options.name, dataDir, address),
302
+ ...(kind.idleMs === undefined ? {} : { idleMs: kind.idleMs }),
303
+ plugins,
304
+ onError: (error) => options.onError({ kind: "workers", error }),
305
+ }, context);
306
+ }
307
+ /** The process lock of the worker at `address`: its worker holds it while it runs, an export or import meanwhile. */
308
+ function workerLock(name, dataDir, address) {
309
+ return `${name}:${dataDir}:${address.key}`;
310
+ }
311
+ /** How long an export or import waits for a worker's lock: past it a worker holds it (it runs or starts). */
312
+ const ADDRESS_LOCK_MS = 2000;
313
+ /** The host of the owner link for the address listened on: loopback for a wildcard, an IPv6 address in brackets. */
314
+ function linkHost(host) {
315
+ if (host === "0.0.0.0" || host === "")
316
+ return "127.0.0.1";
317
+ if (host === "::")
318
+ return "[::1]";
319
+ return host.includes(":") ? `[${host}]` : host;
320
+ }
321
+ class RunningApp {
322
+ host;
323
+ http;
324
+ workers;
325
+ plugins;
326
+ dataDir;
327
+ ownerTokenFile;
328
+ #component;
329
+ /** The client surfaces, filled before the server's load. */
330
+ #surfaces;
331
+ #store;
332
+ #lock;
333
+ #options;
334
+ #link = "";
335
+ /** The bases' builds after the start (`buildBases`). */
336
+ #building = Promise.resolve();
337
+ /** The recording of the base code after the start (`watchBaseCode`). */
338
+ #scanning = Promise.resolve();
339
+ #closing;
340
+ /** The latest `applyChanges`, settled to nothing: the next one starts after it. */
341
+ #applying = Promise.resolve();
342
+ constructor(host, http, workers, plugins, surfaces, server, layout, options) {
343
+ this.host = host;
344
+ this.http = http;
345
+ this.workers = workers;
346
+ this.#component = plugins;
347
+ this.#surfaces = surfaces;
348
+ this.#store = server.store;
349
+ this.#lock = server.lock;
350
+ this.#options = options;
351
+ this.dataDir = layout.dataDir;
352
+ this.ownerTokenFile = layout.ownerToken;
353
+ this.plugins = {
354
+ state: plugins.state,
355
+ install: (source, context) => plugins.installPlugin(source, layout.plugins, context),
356
+ component: plugins,
357
+ };
358
+ }
359
+ /**
360
+ * The start finished: the owner link's token and the address it names (the one listened on), the bases' builds and
361
+ * the recording of the base code under way (`basesBuilt`, `baseWatched`).
362
+ */
363
+ started(token, listening, building, scanning) {
364
+ this.#link = `http://${linkHost(listening.host)}:${listening.port}${OWNER_PATH}#${token}`;
365
+ this.#building = building;
366
+ this.#scanning = scanning;
367
+ }
368
+ ownerLink() {
369
+ return this.#link;
370
+ }
371
+ get basesBuilt() {
372
+ return this.#building;
373
+ }
374
+ get baseWatched() {
375
+ return this.#scanning;
376
+ }
377
+ get web() {
378
+ return this.#surfaceBase("web");
379
+ }
380
+ get tui() {
381
+ return this.#surfaceBase("tui");
382
+ }
383
+ /** The surface `name`'s base hash once built, when the app has that surface. */
384
+ #surfaceBase(name) {
385
+ const found = this.#surfaces.find((each) => each.name === name);
386
+ if (found === undefined)
387
+ return undefined;
388
+ const { built } = found.surface;
389
+ return { base: built?.kind === "built" ? built.base : undefined };
390
+ }
391
+ applyChanges(context) {
392
+ // One build and rollout at a time: a later build rolled out before an earlier one would leave the older code
393
+ // deployed (each host applies the last set it is handed).
394
+ const applied = this.#applying.then(() => this.#applyChanges(context));
395
+ this.#applying = applied.then(() => { }, () => { });
396
+ return applied;
397
+ }
398
+ /** One build of the dirty plugins and its rollout: the server, every worker kind, then the clients. */
399
+ async #applyChanges(context) {
400
+ const plugins = this.#component;
401
+ const built = await plugins.build(plugins.state.value.dirty, context);
402
+ const steps = [
403
+ plugins.step("server", this.host),
404
+ ...[...this.workers].map(([name, each]) => each.step(name)),
405
+ ...this.#surfaces.map(({ name, surface }) => surface.step(name)),
406
+ ];
407
+ return plugins.rollout(steps, built, context);
408
+ }
409
+ async exportData(address, path, context) {
410
+ const workers = this.#workersOf(address);
411
+ const manifest = this.#manifest(address);
412
+ const target = resolve(path);
413
+ // Running: the worker packs its own store. Else the lock, unless a worker starts first: then ask it.
414
+ for (let attempt = 1;; attempt++) {
415
+ if (workers.state.value[address.key]?.status === "running") {
416
+ const data = await this.host.get(HostData, { address: addressParam(address) }, context);
417
+ try {
418
+ await data.exportTo({ path: target, manifest: JSON.stringify(manifest) }, context);
419
+ }
420
+ finally {
421
+ data.release();
422
+ }
423
+ return;
424
+ }
425
+ const lock = await this.#workerLock(address, context);
426
+ if (lock !== undefined) {
427
+ try {
428
+ await packData(workerDirectory(this.dataDir, address), manifest, target, context);
429
+ }
430
+ finally {
431
+ await lock.release();
432
+ }
433
+ return;
434
+ }
435
+ if (attempt === 5)
436
+ throw new Error(`exportData: the worker at ${address.key} keeps starting; try again`);
437
+ }
438
+ }
439
+ async importData(archive, address, context) {
440
+ this.#workersOf(address);
441
+ const { name, limits = {} } = this.#options;
442
+ const accept = (manifest) => {
443
+ // A trust boundary: an archive from anywhere.
444
+ if (manifest?.format !== ARCHIVE_FORMAT)
445
+ throw new Error(`importData: not a format ${ARCHIVE_FORMAT} archive`);
446
+ if (manifest.app !== name)
447
+ throw new Error(`importData: an archive of "${manifest.app}", not "${name}"`);
448
+ };
449
+ const lock = await this.#workerLock(address, context);
450
+ // A worker holds it: it runs, so the address has data, and nothing is overwritten.
451
+ if (lock === undefined)
452
+ throw new Error(`importData: ${address.key} has data (its worker runs)`);
453
+ try {
454
+ const bounds = { bytes: limits.importBytes, entries: limits.importEntries };
455
+ await unpackData(resolve(archive), workerDirectory(this.dataDir, address), accept, bounds, context);
456
+ }
457
+ finally {
458
+ await lock.release();
459
+ }
460
+ }
461
+ /** The process lock of the worker at `address` (the one its worker takes at start), or `undefined` while held. */
462
+ async #workerLock(address, context) {
463
+ const waited = AbortSignal.timeout(ADDRESS_LOCK_MS);
464
+ try {
465
+ return await processLock(workerLock(this.#options.name, this.dataDir, address), withAbortSignal(waited, context));
466
+ }
467
+ catch (error) {
468
+ if (waited.aborted)
469
+ return undefined;
470
+ throw error;
471
+ }
472
+ }
473
+ close(context) {
474
+ this.#closing ??= this.#close(context);
475
+ return this.#closing;
476
+ }
477
+ /** The workers of `address`'s kind. */
478
+ #workersOf(address) {
479
+ const workers = this.workers.get(address.kind);
480
+ if (workers === undefined)
481
+ throw new Error(`app: no worker kind "${address.kind}"`);
482
+ return workers;
483
+ }
484
+ /** The manifest of `address`'s archive. */
485
+ #manifest(address) {
486
+ const { name, api } = this.#options;
487
+ return {
488
+ format: ARCHIVE_FORMAT,
489
+ app: name,
490
+ api: api.versions[0] ?? "",
491
+ address: { kind: address.kind, key: address.key },
492
+ };
493
+ }
494
+ /** Whether the app is closing or closed: what runs after the start stops there. */
495
+ closing() {
496
+ return this.#closing !== undefined;
497
+ }
498
+ /**
499
+ * The close, in order: HTTP (it drains requests the host's close would seal), workers, host, store, the plugins'
500
+ * watcher, then the data directory's lock. The bases' builds and the recording of the base code are not waited for:
501
+ * what they finish after the close is dropped.
502
+ */
503
+ async #close(context) {
504
+ await this.http.close(context);
505
+ for (const workers of this.workers.values())
506
+ await workers.close(context);
507
+ await this.host.close(context);
508
+ await this.#store.close(context);
509
+ this.#component.close();
510
+ await this.#lock.release();
511
+ }
512
+ }
513
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/node/app/app.ts"],"names":[],"mappings":"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","sourcesContent":["// `startServer` (slice 13 §1, §5; decisions \"The app kit, point 1\" to \"point 5\"): the server of an app built with the kit.\n// It lays out the data directory, opens the server's store, creates the server host, the HTTP component and one\n// workers component per worker kind, the plugins component over the app's required root and the user's root, loads\n// the server's plugins with the kit's own facets (the start-data object, sessions, the owner link, pairing, files),\n// and gives the app the controls it needs: the owner link, `applyChanges`, installs, export and import per address.\n// After the listen, off the start's path, it builds the bases (the surfaces' base bundles, each worker kind's worker\n// base) and records the base code the `base` mark compares.\n\nimport { statSync } from \"node:fs\";\nimport { join, resolve, sep } from \"node:path\";\nimport type { TelemetryContext } from \"@earendil-works/pi-telemetry\";\nimport { type Context, withAbortSignal } from \"../../context/index.ts\";\nimport { type Address, type HostKind, hostKind, type KindShape } from \"../../contracts/index.ts\";\nimport type { Principal } from \"../../data/index.ts\";\nimport { principalKey, samePrincipal } from \"../../data/principal.ts\";\nimport { createHost, type Host, type HostError, type PluginFacet, type PrincipalAttributes } from \"../../host/index.ts\";\nimport { isJsonValue, type JsonValue } from \"../../json.ts\";\nimport { openNodeSqliteDatabase } from \"../../sqlite/node.ts\";\nimport { openStore, type Store, sqliteBackend } from \"../../store/index.ts\";\nimport { localeChoiceFacet, themeChoiceFacet, themesFacet, translationsFacet } from \"../../surfaces/index.ts\";\nimport { type TelemetryIngestTarget, telemetryIngestFacet } from \"../../telemetry-ingest/index.ts\";\nimport type { Watchable } from \"../../watch.ts\";\nimport { createHttp, type HttpComponent, type HttpError, type ListenAddress } from \"../http/index.ts\";\nimport {\n\ttype BaseInputs,\n\tcreatePlugins,\n\ttype HostPackages,\n\ttype InstallOptions,\n\ttype PluginSource,\n\ttype Plugins,\n\ttype PluginsError,\n\ttype PluginsState,\n\ttype RolloutResult,\n} from \"../plugins/index.ts\";\nimport {\n\tprocessConditions,\n\ttype SurfaceBuilt,\n\ttype TuiSurface,\n\ttype TuiSurfaceOptions,\n\ttuiSurface,\n\tWEB_PREFIX,\n\ttype WebSurface,\n\ttype WebSurfaceOptions,\n\twebSurface,\n} from \"../surfaces/index.ts\";\nimport {\n\tcreateWorkers,\n\tnodeBaseInputs,\n\ttype ProcessLock,\n\tprocessLock,\n\ttype Workers,\n\ttype WorkersBuilt,\n\ttype WorkersError,\n} from \"../workers/index.ts\";\nimport { ARCHIVE_FORMAT, type ArchiveManifest, packData, unpackData } from \"./archive.ts\";\nimport { addressParam, HostData } from \"./data.ts\";\nimport { type FilesCaps, filesFacet } from \"./files.ts\";\nimport { appInfoFacet } from \"./info.ts\";\nimport { type AppLayout, createLayout, defaultDataDir, openDataDir, privateStore, workerDirectory } from \"./layout.ts\";\nimport { OWNER_PATH, OwnerLink, ownerFacet, ownerTokenFile } from \"./owner.ts\";\nimport { Pairings, pairingFacet } from \"./pairing.ts\";\nimport { secretFile } from \"./secrets.ts\";\nimport { createSessions } from \"./sessions.ts\";\n\n/** The server's host kind: the kit's server host is `Server()`. */\nexport const Server = hostKind(\"server\");\n\n/**\n * The app's API (slice 12): its package name, the versions it provides (newest first) and this process's modules of\n * them by specifier (`@acme/app/v3`, `@acme/app/v3/server`).\n */\nexport type AppApi = {\n\treadonly name: string;\n\treadonly versions: readonly string[];\n\treadonly modules: HostPackages;\n};\n\n/**\n * A facet kind of the app: where its builds run, and the packages besides the API its plugins share (`react`). Its API\n * modules are named by convention: `<api>/<version>` and `<api>/<version>/<kind>` for every version.\n */\nexport type AppKind = { readonly platform: \"node\" | \"browser\"; readonly packages?: HostPackages };\n\n/** A worker kind: a host kind of the app and how its workers start (the workers component's options). */\nexport type AppWorkerKind<P extends Principal> = {\n\t/** The host kind (`hostKind(\"project\", { id: str() })`). */\n\treadonly kind: KindShape;\n\t/**\n\t * The worker's entry module (it calls `startWorker`), bundled with the base code it imports at start (every worker of\n\t * the kind runs that snapshot until the server restarts); its Node flags and environment.\n\t */\n\treadonly entry: string;\n\treadonly execArgv?: readonly string[];\n\treadonly env?: Readonly<Record<string, string>>;\n\t/** The facet kind its workers load: `worker` by default. */\n\treadonly facet?: string;\n\t/** The app's start data for the worker at `address` (JSON), before each start. */\n\treadonly start: (address: Address, context: Context) => Promise<JsonValue> | JsonValue;\n\t/** Whether `principal` may reach the worker at `address` (synchronous). */\n\treadonly authorize: (principal: P, address: Address) => boolean;\n\t/** How long a worker idles before it stops: 5 minutes by default. */\n\treadonly idleMs?: () => number;\n};\n\n/**\n * What the kit reports: from its host, its HTTP component, its workers or its plugins, a base that did not build after\n * the start (`base_build`: `base` is `web`, `tui` or the worker kind's name; the server runs on, the page answers 503,\n * the kind's workers fail their start), or a failed scan of the server's own code (`server_scan`: the server runs on,\n * that code is not compared).\n */\nexport type AppError =\n\t| { readonly kind: \"host\"; readonly error: HostError }\n\t| { readonly kind: \"http\"; readonly error: HttpError }\n\t| { readonly kind: \"workers\"; readonly error: WorkersError }\n\t| { readonly kind: \"plugins\"; readonly error: PluginsError }\n\t| { readonly kind: \"base_build\"; readonly base: string; readonly error: unknown }\n\t| { readonly kind: \"server_scan\"; readonly error: unknown };\n\n/**\n * What `startServer` takes. Worker kinds need `principal.worker`: a type error without it, also for a `workers` list\n * typed as an array (not a tuple) that is empty.\n */\nexport type AppOptions<P extends Principal> = {\n\t/** The app's name: its default data directory is `~/.<name>`, its archives carry it. */\n\treadonly name: string;\n\t/** The data directory (the start script's to decide; no environment variables): `~/.<name>` by default. */\n\treadonly dataDir?: string;\n\t/** The app's built-in plugins root (required): `plugins/` of the working directory by default. */\n\treadonly root?: string;\n\t/** Where the server listens: `127.0.0.1`, a free port by default. */\n\treadonly listen?: ListenAddress;\n\treadonly api: AppApi;\n\t/** The app's facet kinds: `server` and each worker kind's facet kind among them. */\n\treadonly kinds: Readonly<Record<string, AppKind>>;\n\t/**\n\t * The server's principal, each worker's (stamped on its link; only with worker kinds) and the owner's: whom the owner\n\t * link, the owner token file and device pairing sign in, and who approves pairings and makes invites (`AppInfo.owner`).\n\t * The owner must be strict JSON and not the server's principal (refused at start).\n\t */\n\treadonly principal: { readonly server: P; readonly worker?: (address: Address) => P; readonly owner: P };\n\t/** The worker kinds; none: a server with clients only. */\n\treadonly workers?: readonly AppWorkerKind<P>[];\n\t/** The caps of each host's files (the server's and every worker's). */\n\treadonly files?: FilesCaps;\n\t/** The bounds of what public endpoints and imports may cost. */\n\treadonly limits?: AppLimits;\n\t/** How installs run npm (slice 12's `InstallOptions`): `npm` on the `PATH` by default. */\n\treadonly install?: InstallOptions;\n\t/**\n\t * The web surface (slice 11): the app's web entry (the base bundle's), its page template, the paths serving the\n\t * page (`[\"/\"]`), whether the page is public, the conditions its packages resolve with (the server process's by\n\t * default); the `web` facet kind. None: no web surface.\n\t */\n\treadonly web?: AppWeb;\n\t/**\n\t * The terminal surface (slice 11): the app's terminal entry and the conditions its packages resolve with (the server\n\t * process's by default); the `tui` facet kind. None: no terminal clients.\n\t */\n\treadonly tui?: Pick<TuiSurfaceOptions, \"entry\" | \"conditions\">;\n\t/**\n\t * The app's telemetry store (§29; decision \"The server is the one place telemetry is stored\"): the server's host,\n\t * its HTTP requests and the kit's ingest record to it (`createSqliteTelemetry`'s store). With one, every worker\n\t * records in memory and sends its spans and metrics to the server's `WorkerTelemetry`, and pages that record\n\t * (`startPage({ telemetry: true })`) theirs to `PageTelemetry`; carriers join them into one trace. None: NOOP.\n\t */\n\treadonly telemetry?: TelemetryContext & TelemetryIngestTarget;\n\t/**\n\t * Who a span was for (`createHost`'s `principalAttributes`): the server's hook, also stamped on the spans pages\n\t * send (the principal of their link). Each worker's is its `startWorker`'s.\n\t */\n\treadonly principalAttributes?: PrincipalAttributes<P>;\n\t/**\n\t * The app's base code beside what the kit knows (files or directories: its API modules, its start script), hashed at\n\t * start: `plugins.state.base` is true while a file differs from what the server or a base bundle read (or a source\n\t * file is new in one of the directories). The kit adds every file its base bundles were built from, with the bytes\n\t * they read: the web's, the terminal's and each worker kind's.\n\t */\n\treadonly base?: readonly string[];\n\t/**\n\t * The `closeTimeout`, `readyTimeout` and `reloadDrainTimeout` of every host (the server's and each worker's): 30 s,\n\t * 60 s and 5 s by default.\n\t */\n\treadonly timeouts?: AppTimeouts;\n\treadonly onError: (error: AppError) => void;\n} & ({ readonly workers?: readonly [] } | { readonly principal: { readonly worker: (address: Address) => P } });\n\n/**\n * The bounds of what public endpoints, clients and imports may cost: live ephemeral sessions (1,000; past it the\n * oldest ends, signed out), pairings under way that anonymous clients started (100 in all, 10 per client address; past\n * them 429; the owner's own are not counted), uploads under way per `Files` object (64; past it `unavailable`, `busy`),\n * an archive's unpacked bytes (4 GiB) and entries (100,000).\n */\nexport type AppLimits = {\n\treadonly uploads?: number;\n\treadonly ephemeralSessions?: number;\n\treadonly pendingPairings?: number;\n\treadonly pairingsPerAddress?: number;\n\treadonly importBytes?: number;\n\treadonly importEntries?: number;\n};\n\n/**\n * The hosts' timeouts in milliseconds (`HostOptions.closeTimeout`, `HostOptions.readyTimeout`,\n * `HostOptions.reloadDrainTimeout`).\n */\nexport type AppTimeouts = {\n\treadonly closeTimeout?: number;\n\treadonly readyTimeout?: number;\n\treadonly reloadDrainTimeout?: number;\n};\n\n/** The kit's web surface options (`webSurface`'s, its kind `web` and plugins the kit's). */\nexport type AppWeb = Pick<WebSurfaceOptions, \"entry\" | \"page\" | \"paths\" | \"public\" | \"conditions\">;\n\n/** The plugins of a running app, for its \"apply changes\" control and its installs. */\nexport type AppPlugins = {\n\t/** The marks (`dirty`, `install`, `set`, `base`): what the app's button shows. */\n\treadonly state: Watchable<PluginsState>;\n\t/** Installs plugins from git or npm into the user's root (slice 12's `installPlugin`); their names. */\n\tinstall(source: PluginSource, context: Context): Promise<readonly string[]>;\n\t/** The plugins component itself. */\n\treadonly component: Plugins;\n};\n\n/** A running app. */\nexport interface App<P extends Principal> {\n\treadonly host: Host<P>;\n\treadonly http: HttpComponent<P>;\n\t/** The workers components, by host kind name. */\n\treadonly workers: ReadonlyMap<string, Workers<HostKind>>;\n\treadonly plugins: AppPlugins;\n\t/**\n\t * The web surface, when the app has one: its base bundle's hash once built (`basesBuilt`); `undefined` before, and\n\t * when its build failed.\n\t */\n\treadonly web: { readonly base: string | undefined } | undefined;\n\t/** The terminal surface, when the app has one: its base bundle's hash, as `web`'s. */\n\treadonly tui: { readonly base: string | undefined } | undefined;\n\t/** The data directory. */\n\treadonly dataDir: string;\n\t/** The owner link of this start (single use, 10 minutes): `http://127.0.0.1:<port>/_chord/owner#<token>`. */\n\townerLink(): string;\n\t/** The owner token file's path (a device session of the owner, mode 0600). */\n\treadonly ownerTokenFile: string;\n\t/**\n\t * Settles once every base (the web and terminal base bundles, each worker kind's worker base) was built after the\n\t * start, or failed (reported, `base_build`). Never rejects.\n\t */\n\treadonly basesBuilt: Promise<void>;\n\t/**\n\t * Settles once the base code is recorded, watched and compared once, after the start: the bases' records (after\n\t * `basesBuilt`) and the scan of the server's own code. Until then `plugins.state.base` is not known (`false` may\n\t * mean \"not compared yet\"); a file of the server's own code changed since the process started marks it until a\n\t * restart (Node may have loaded other bytes than the scan read).\n\t */\n\treadonly baseWatched: Promise<void>;\n\t/**\n\t * Builds the dirty plugins and rolls them out: the server, every worker kind, then the clients; never by itself. Calls\n\t * run one after another (a later one builds after the earlier one rolled out).\n\t */\n\tapplyChanges(context: Context): Promise<RolloutResult>;\n\t/**\n\t * Writes the data the worker at `address` created (its store and finished files) as an archive at `path`, stopping\n\t * nothing: a running worker packs its own store at one consistent point; without one the server packs it under the\n\t * worker's lock (no worker starts meanwhile).\n\t */\n\texportData(address: Address, path: string, context: Context): Promise<void>;\n\t/**\n\t * Makes the data of `address` (which must have none yet: nothing is overwritten) from the archive at `archive`,\n\t * under the worker's lock; its next hold starts it.\n\t */\n\timportData(archive: string, address: Address, context: Context): Promise<void>;\n\t/** Closes the HTTP component, the workers, the host, the store, the watcher and the data directory's lock. */\n\tclose(context: Context): Promise<void>;\n}\n\n/** What `startWorker` reads from its start data besides the app's: the kit's part. */\nexport type KitStart = {\n\treadonly dir: string;\n\treadonly facet: string;\n\treadonly principal: JsonValue;\n\treadonly server: JsonValue;\n\treadonly files: { readonly maxFile?: number; readonly maxTotal?: number };\n\t/** Whether the server has a telemetry store: the worker then sends what it records to `WorkerTelemetry`. */\n\treadonly telemetry: boolean;\n\t/** The cap of uploads under way per `Files` object (`limits.uploads`). */\n\treadonly uploads?: number;\n\t/** The app's host timeouts (`timeouts`), the worker's host takes them too. */\n\treadonly timeouts: AppTimeouts;\n};\n\n/**\n * Starts the app's server (§1): resolves once its plugins are loaded and it listens. A failing plugin of the app's\n * root (or a problem discovery reports there) rejects with the plugins component's `PluginError`, everything closed.\n * The bases are built right after the listen, from the files as they are then (`basesBuilt`): a page request waits\n * for its surface's, a worker start for its kind's.\n */\nexport async function startServer<P extends Principal>(options: AppOptions<P>, context: Context): Promise<App<P>> {\n\tcheckOwner(options.principal.owner, options.principal.server, context);\n\tconst { layout, cookieSecret, store, lock } = await openServer(\n\t\tresolve(options.dataDir ?? defaultDataDir(options.name)),\n\t\tcontext,\n\t);\n\tconst { onError, api, limits = {} } = options;\n\tconst sessions = createSessions<P>(cookieSecret, { maxEphemeral: limits.ephemeralSessions });\n\tconst { telemetry, principalAttributes } = options;\n\tconst host = createHost<P>({\n\t\taddress: Server(),\n\t\tprincipal: options.principal.server,\n\t\tstore,\n\t\ttelemetry,\n\t\t...(principalAttributes === undefined ? {} : { principalAttributes }),\n\t\t...options.timeouts,\n\t\tonError: (error) => onError({ kind: \"host\", error }),\n\t});\n\tconst http = createHttp(\n\t\thost,\n\t\t{\n\t\t\tlisten: options.listen ?? { host: \"127.0.0.1\", port: 0 },\n\t\t\tlinks: { path: \"/chord\", opened: sessions.opened },\n\t\t\ttelemetry,\n\t\t\tonError: (error) => onError({ kind: \"http\", error }),\n\t\t},\n\t\tcontext,\n\t);\n\tconst plugins = createPlugins(\n\t\t{\n\t\t\troots: [{ path: resolve(options.root ?? \"plugins\"), required: true }, layout.plugins],\n\t\t\tapi: { name: api.name, versions: api.versions },\n\t\t\tkinds: Object.fromEntries(\n\t\t\t\tObject.entries(options.kinds).map(([name, kind]) => [\n\t\t\t\t\tname,\n\t\t\t\t\t{ platform: kind.platform, hostPackages: hostPackagesOf(api, name, kind) },\n\t\t\t\t]),\n\t\t\t),\n\t\t\tinstall: options.install,\n\t\t\t// The server's own base code, hashed now; each base bundle's record is added once built (`watchBase`).\n\t\t\tbase: (options.base ?? []).map((path) => resolve(path)),\n\t\t\tpublicPath: `${WEB_PREFIX}assets/`,\n\t\t\tonError: (error) => onError({ kind: \"plugins\", error }),\n\t\t},\n\t\tcontext,\n\t);\n\tconst workers = new Map<string, Workers<HostKind>>();\n\t// The address key of each worker by its principal's key: the principal its link stamps on its telemetry batches.\n\tconst workerHosts = new Map<string, string>();\n\tconst link = new OwnerLink();\n\tconst { owner } = options.principal;\n\tconst core: PluginFacet<P>[] = [\n\t\t{ name: \"chord.http\", facet: http.facet },\n\t\t{\n\t\t\tname: \"chord.app.info\",\n\t\t\tfacet: appInfoFacet({ dataDir: layout.dataDir, name: options.name, version: api.versions[0] ?? \"\", owner }),\n\t\t},\n\t\t{ name: \"chord.app.sessions\", facet: sessions.facet },\n\t\t{ name: \"chord.app.owner\", facet: ownerFacet(link, owner) },\n\t\t{\n\t\t\tname: \"chord.app.pairing\",\n\t\t\tfacet: pairingFacet(\n\t\t\t\tnew Pairings({ maxPending: limits.pendingPairings, perAddress: limits.pairingsPerAddress }),\n\t\t\t\towner,\n\t\t\t),\n\t\t},\n\t\t{ name: \"chord.app.files\", facet: filesFacet(join(layout.server, \"files\"), options.files, limits.uploads) },\n\t\t{ name: \"chord.themes\", facet: themesFacet() },\n\t\t{ name: \"chord.themes.choice\", facet: themeChoiceFacet() },\n\t\t{ name: \"chord.translations\", facet: translationsFacet() },\n\t\t{ name: \"chord.locale.choice\", facet: localeChoiceFacet() },\n\t];\n\tif (telemetry !== undefined) {\n\t\tconst facet = telemetryIngestFacet<P>({\n\t\t\ttarget: telemetry,\n\t\t\tworkerHost: (principal) => workerHosts.get(principalKey(principal, context)),\n\t\t\tprincipalAttributes: (principal) => host.principalAttributes(principal, context),\n\t\t});\n\t\tcore.push({ name: \"chord.telemetry\", facet });\n\t}\n\tconst surfaces: Surface<P>[] = [];\n\tconst app = new RunningApp(host, http, workers, plugins, surfaces, { store, lock }, layout, options);\n\t// What runs after the start reports nothing once the app closes (a build or scan finishing late).\n\tconst report = (error: AppError): void => {\n\t\tif (!app.closing()) onError(error);\n\t};\n\ttry {\n\t\tfor (const kind of options.workers ?? []) {\n\t\t\tworkers.set(kind.kind.kind, workersOf(host, kind, options, layout, plugins, workerHosts, context));\n\t\t}\n\t\tfor (const surface of surfacesOf(host, options, plugins)) {\n\t\t\tsurfaces.push(surface);\n\t\t\tcore.push({ name: `chord.${surface.name}`, facet: surface.surface.facet });\n\t\t}\n\t\tawait plugins.load(host, { kind: \"server\", core, modules: modulesOf(api, options.kinds.server) }, context);\n\t\tawait ownerTokenFile(layout.ownerToken, owner, host, context);\n\t\tconst listening = await http.listening(context);\n\t\tconst bases = [\n\t\t\t...surfaces.map(({ name, surface }) => ({ name, build: () => surface.build() })),\n\t\t\t...[...workers].map(([name, each]) => ({ name, build: () => each.build() })),\n\t\t];\n\t\tconst compared: Promise<void>[] = [];\n\t\tconst built = buildBases(bases, plugins, compared, report, () => app.closing());\n\t\tconst watching = watchBaseCode(plugins, built, compared, report, () => app.closing());\n\t\tapp.started(link.renew(), listening, built, watching);\n\t} catch (error) {\n\t\tawait app.close(context);\n\t\tthrow error;\n\t}\n\treturn app;\n}\n\n/**\n * Refuses an owner the kit could not recognize or that would act as the server (a declaration policy the types cannot\n * express): sessions keep the owner as JSON, so a field `undefined` (or anything else not strict JSON) would never\n * match it again; the server's principal reaches every worker's kit objects.\n */\nfunction checkOwner<P extends Principal>(owner: P, server: P, context: Context): void {\n\tif (!isJsonValue(owner)) {\n\t\tthrow new Error(\n\t\t\t\"startServer: principal.owner must be strict JSON (no undefined fields, functions or class instances)\",\n\t\t);\n\t}\n\tif (samePrincipal(owner, server, context)) {\n\t\tthrow new Error(\"startServer: principal.owner must not be the server's principal\");\n\t}\n}\n\n/** A base the kit builds after the listen: its name in reports, its build. */\ntype Base = { readonly name: string; build(): Promise<SurfaceBuilt | WorkersBuilt> };\n\n/**\n * Builds every base right after the listen, at once, from the files as they are now (owner decision \"A\": nothing is\n * kept between starts; the server answers meanwhile, each request needing a base waits for it). A built base's record\n * is added to what `plugins` compares (its first comparisons pushed to `compared`); a failed one is reported\n * (`base_build`) and the server runs on. Settles once every build ended; what ends after the close is dropped.\n */\nasync function buildBases(\n\tbases: readonly Base[],\n\tplugins: Plugins,\n\tcompared: Promise<void>[],\n\treport: (error: AppError) => void,\n\tclosed: () => boolean,\n): Promise<void> {\n\tawait Promise.all(\n\t\tbases.map(async ({ name, build }) => {\n\t\t\tconst built = await build();\n\t\t\tif (closed()) return;\n\t\t\tif (built.kind === \"failed\") report({ kind: \"base_build\", base: name, error: built.error });\n\t\t\telse compared.push(plugins.watchBase(built.inputs));\n\t\t}),\n\t);\n}\n\n/**\n * Adds the server's own code to what `plugins` compares, once the bases are built (`built`; the scan's reads would\n * contend with the builds the first requests wait for): the static graph of its entry (the start script;\n * `nodeBaseInputs`; a file changed since the process started is recorded as differing, `editedSinceStart`). Best\n * effort: a failed scan is reported (`server_scan`) and that code not compared. An entry under `node_modules` is\n * installed code (an npm-installed app, a test runner), never compared. Settles once every record's first comparison\n * did (the bases' in `compared` too: `base` knows them all). A close meanwhile ends it at its next step; a scan stalled\n * on a read keeps it pending until the read ends (the close does not wait for it; its result is dropped).\n */\nasync function watchBaseCode(\n\tplugins: Plugins,\n\tbuilt: Promise<void>,\n\tcompared: Promise<void>[],\n\treport: (error: AppError) => void,\n\tclosed: () => boolean,\n): Promise<void> {\n\tawait built;\n\tif (closed()) return;\n\tconst entry = process.argv[1];\n\tif (entry !== undefined && !entry.split(sep).includes(\"node_modules\")) {\n\t\tconst conditions = processConditions(process.execArgv, process.env.NODE_OPTIONS);\n\t\tconst scanned = await nodeBaseInputs(entry, conditions).then(\n\t\t\t(inputs) => inputs,\n\t\t\t(error: unknown) => report({ kind: \"server_scan\", error }),\n\t\t);\n\t\tif (closed()) return;\n\t\tif (scanned !== undefined) compared.push(plugins.watchBase(editedSinceStart(scanned)));\n\t}\n\tawait Promise.all(compared);\n}\n\n/** What the scan records for a file changed since the process started: a hash no bytes have. */\nconst EDITED_SINCE_START = \"changed since the server started\";\n\n/** How far in the future a file's timestamp may be and still count as an edit since the start: clock skew. */\nconst FUTURE_SLACK_MS = 5_000;\n\n/**\n * The scan's record `inputs` with every file changed since this process started (its mtime or ctime after\n * `performance.timeOrigin`) recorded as differing: Node may have loaded other bytes than the scan read, so its first\n * comparison marks `base` (until a restart: the bytes Node loaded are unknown). Conservative: an edit Node loaded\n * anyway (made during the module loading, before the file was read) or a change of metadata only (ctime) marks too.\n * Per timestamp: one later than now (plus `FUTURE_SLACK_MS`) is no edit since the start (a file stamped in the future,\n * by a skewed clock or an archive, would mark every start until that time); a file neither of whose timestamps is in\n * range keeps its hash, compared by content alone.\n */\nfunction editedSinceStart(inputs: BaseInputs): BaseInputs {\n\tconst started = performance.timeOrigin;\n\tconst latest = Date.now() + FUTURE_SLACK_MS;\n\treturn new Map(\n\t\t[...inputs].map(([path, hash]) => {\n\t\t\ttry {\n\t\t\t\tconst { mtimeMs, ctimeMs } = statSync(path);\n\t\t\t\tconst edited = [mtimeMs, ctimeMs].some((time) => time > started && time <= latest);\n\t\t\t\treturn [path, edited ? EDITED_SINCE_START : hash];\n\t\t\t} catch {\n\t\t\t\t// Gone: its first comparison finds it so.\n\t\t\t\treturn [path, hash];\n\t\t\t}\n\t\t}),\n\t);\n}\n\n/** A client surface of the app and its name (`web`, `tui`). */\ntype Surface<P extends Principal> = { readonly name: \"web\" | \"tui\"; readonly surface: WebSurface<P> | TuiSurface<P> };\n\n/** The app's client surfaces, in order: the web's, the terminal's (their base bundles built after the listen). */\nfunction surfacesOf<P extends Principal>(host: Host<P>, options: AppOptions<P>, plugins: Plugins): Surface<P>[] {\n\tconst surfaces: Surface<P>[] = [];\n\tif (options.web !== undefined)\n\t\tsurfaces.push({ name: \"web\", surface: webSurface(host, { ...options.web, plugins }) });\n\tif (options.tui !== undefined)\n\t\tsurfaces.push({ name: \"tui\", surface: tuiSurface(host, { ...options.tui, plugins }) });\n\treturn surfaces;\n}\n\n/** How long a second server waits for the data directory's lock before it is refused. */\nconst SERVER_LOCK_MS = 1000;\n\n/**\n * The server's own part of the data directory `path`: its lock (one server per data directory, by its real path: a\n * second one, also through a symbolic link, would share its stores and secrets), the layout made private, the cookie\n * secret and the server's store; the lock released when the rest fails.\n */\nasync function openServer(\n\tpath: string,\n\tcontext: Context,\n): Promise<{ layout: AppLayout; cookieSecret: string; store: Store; lock: ProcessLock }> {\n\tconst dataDir = await openDataDir(path);\n\tconst waited = AbortSignal.timeout(SERVER_LOCK_MS);\n\tconst lock = await processLock(`chord-app:${dataDir}`, withAbortSignal(waited, context)).catch((error: unknown) => {\n\t\tthrow waited.aborted ? new Error(`startServer: another server runs on ${dataDir}`) : error;\n\t});\n\ttry {\n\t\tconst layout = await createLayout(dataDir);\n\t\tconst cookieSecret = await secretFile(layout.cookieSecret);\n\t\tawait privateStore(layout.serverStore);\n\t\tconst store = await openStore(sqliteBackend(await openNodeSqliteDatabase(layout.serverStore)), context);\n\t\treturn { layout, cookieSecret, store, lock };\n\t} catch (error) {\n\t\tawait lock.release();\n\t\tthrow error;\n\t}\n}\n\n/** The host packages of kind `name`: the API's shared and per-kind module of every version, and its packages. */\nfunction hostPackagesOf(api: AppApi, name: string, kind: AppKind): string[] {\n\tconst modules = api.versions.flatMap((version) => [`${api.name}/${version}`, `${api.name}/${version}/${name}`]);\n\treturn [...modules, ...Object.keys(kind.packages ?? {})];\n}\n\n/** This process's modules for a kind: the API's and the kind's packages. */\nfunction modulesOf(api: AppApi, kind: AppKind | undefined): HostPackages {\n\treturn { ...api.modules, ...kind?.packages };\n}\n\n/**\n * The workers component of one worker kind (its base built after the listen, into the kind's directory under\n * `cache/workers/`): started with the kit's part of the start data beside the app's.\n */\nfunction workersOf<P extends Principal>(\n\thost: Host<P>,\n\tkind: AppWorkerKind<P>,\n\toptions: AppOptions<P>,\n\tlayout: AppLayout,\n\tplugins: Plugins,\n\tworkerHosts: Map<string, string>,\n\tcontext: Context,\n): Workers<HostKind> {\n\tconst { dataDir } = layout;\n\tconst facet = kind.facet ?? \"worker\";\n\t// `AppOptions` admits worker kinds only with `principal.worker`.\n\tconst worker = options.principal.worker as (address: Address) => P;\n\tconst { server } = options.principal;\n\treturn createWorkers(\n\t\thost,\n\t\t// A host kind of the app: any params; its addresses come back from its route as the kit hands them on.\n\t\tkind.kind as HostKind,\n\t\t{\n\t\t\tkind: facet,\n\t\t\tentry: kind.entry,\n\t\t\t...(kind.execArgv === undefined ? {} : { execArgv: kind.execArgv }),\n\t\t\t...(kind.env === undefined ? {} : { env: kind.env }),\n\t\t\tbaseDir: join(layout.workerBases, kind.kind.kind),\n\t\t\tcompileCache: layout.compileCache,\n\t\t\t// The server reaches its workers' kit objects (`HostData`) whatever the app admits.\n\t\t\tauthorize: (principal, address) =>\n\t\t\t\tsamePrincipal(principal, server, context) || kind.authorize(principal, address),\n\t\t\tprincipal: worker,\n\t\t\tstart: async (address, ctx) => {\n\t\t\t\tconst principal = worker(address);\n\t\t\t\tworkerHosts.set(principalKey(principal, ctx), address.key);\n\t\t\t\tconst kit: KitStart = {\n\t\t\t\t\tdir: workerDirectory(dataDir, address),\n\t\t\t\t\tfacet,\n\t\t\t\t\t// Principals are JSON (they cross links).\n\t\t\t\t\tprincipal: principal as unknown as JsonValue,\n\t\t\t\t\tserver: server as unknown as JsonValue,\n\t\t\t\t\tfiles: { ...options.files },\n\t\t\t\t\ttelemetry: options.telemetry !== undefined,\n\t\t\t\t\t...(options.limits?.uploads === undefined ? {} : { uploads: options.limits.uploads }),\n\t\t\t\t\ttimeouts: { ...options.timeouts },\n\t\t\t\t};\n\t\t\t\treturn { kit, app: await kind.start(address, ctx) };\n\t\t\t},\n\t\t\tlock: (address) => workerLock(options.name, dataDir, address),\n\t\t\t...(kind.idleMs === undefined ? {} : { idleMs: kind.idleMs }),\n\t\t\tplugins,\n\t\t\tonError: (error) => options.onError({ kind: \"workers\", error }),\n\t\t},\n\t\tcontext,\n\t);\n}\n\n/** The process lock of the worker at `address`: its worker holds it while it runs, an export or import meanwhile. */\nfunction workerLock(name: string, dataDir: string, address: Address): string {\n\treturn `${name}:${dataDir}:${address.key}`;\n}\n\n/** How long an export or import waits for a worker's lock: past it a worker holds it (it runs or starts). */\nconst ADDRESS_LOCK_MS = 2000;\n\n/** The host of the owner link for the address listened on: loopback for a wildcard, an IPv6 address in brackets. */\nfunction linkHost(host: string): string {\n\tif (host === \"0.0.0.0\" || host === \"\") return \"127.0.0.1\";\n\tif (host === \"::\") return \"[::1]\";\n\treturn host.includes(\":\") ? `[${host}]` : host;\n}\n\nclass RunningApp<P extends Principal> implements App<P> {\n\treadonly host: Host<P>;\n\treadonly http: HttpComponent<P>;\n\treadonly workers: ReadonlyMap<string, Workers<HostKind>>;\n\treadonly plugins: AppPlugins;\n\treadonly dataDir: string;\n\treadonly ownerTokenFile: string;\n\treadonly #component: Plugins;\n\t/** The client surfaces, filled before the server's load. */\n\treadonly #surfaces: readonly Surface<P>[];\n\treadonly #store: Store;\n\treadonly #lock: ProcessLock;\n\treadonly #options: AppOptions<P>;\n\t#link = \"\";\n\t/** The bases' builds after the start (`buildBases`). */\n\t#building: Promise<void> = Promise.resolve();\n\t/** The recording of the base code after the start (`watchBaseCode`). */\n\t#scanning: Promise<void> = Promise.resolve();\n\t#closing: Promise<void> | undefined;\n\t/** The latest `applyChanges`, settled to nothing: the next one starts after it. */\n\t#applying: Promise<void> = Promise.resolve();\n\n\tconstructor(\n\t\thost: Host<P>,\n\t\thttp: HttpComponent<P>,\n\t\tworkers: ReadonlyMap<string, Workers<HostKind>>,\n\t\tplugins: Plugins,\n\t\tsurfaces: readonly Surface<P>[],\n\t\tserver: { readonly store: Store; readonly lock: ProcessLock },\n\t\tlayout: { readonly dataDir: string; readonly plugins: string; readonly ownerToken: string },\n\t\toptions: AppOptions<P>,\n\t) {\n\t\tthis.host = host;\n\t\tthis.http = http;\n\t\tthis.workers = workers;\n\t\tthis.#component = plugins;\n\t\tthis.#surfaces = surfaces;\n\t\tthis.#store = server.store;\n\t\tthis.#lock = server.lock;\n\t\tthis.#options = options;\n\t\tthis.dataDir = layout.dataDir;\n\t\tthis.ownerTokenFile = layout.ownerToken;\n\t\tthis.plugins = {\n\t\t\tstate: plugins.state,\n\t\t\tinstall: (source, context) => plugins.installPlugin(source, layout.plugins, context),\n\t\t\tcomponent: plugins,\n\t\t};\n\t}\n\n\t/**\n\t * The start finished: the owner link's token and the address it names (the one listened on), the bases' builds and\n\t * the recording of the base code under way (`basesBuilt`, `baseWatched`).\n\t */\n\tstarted(token: string, listening: ListenAddress, building: Promise<void>, scanning: Promise<void>): void {\n\t\tthis.#link = `http://${linkHost(listening.host)}:${listening.port}${OWNER_PATH}#${token}`;\n\t\tthis.#building = building;\n\t\tthis.#scanning = scanning;\n\t}\n\n\townerLink(): string {\n\t\treturn this.#link;\n\t}\n\n\tget basesBuilt(): Promise<void> {\n\t\treturn this.#building;\n\t}\n\n\tget baseWatched(): Promise<void> {\n\t\treturn this.#scanning;\n\t}\n\n\tget web(): { readonly base: string | undefined } | undefined {\n\t\treturn this.#surfaceBase(\"web\");\n\t}\n\n\tget tui(): { readonly base: string | undefined } | undefined {\n\t\treturn this.#surfaceBase(\"tui\");\n\t}\n\n\t/** The surface `name`'s base hash once built, when the app has that surface. */\n\t#surfaceBase(name: \"web\" | \"tui\"): { readonly base: string | undefined } | undefined {\n\t\tconst found = this.#surfaces.find((each) => each.name === name);\n\t\tif (found === undefined) return undefined;\n\t\tconst { built } = found.surface;\n\t\treturn { base: built?.kind === \"built\" ? built.base : undefined };\n\t}\n\n\tapplyChanges(context: Context): Promise<RolloutResult> {\n\t\t// One build and rollout at a time: a later build rolled out before an earlier one would leave the older code\n\t\t// deployed (each host applies the last set it is handed).\n\t\tconst applied = this.#applying.then(() => this.#applyChanges(context));\n\t\tthis.#applying = applied.then(\n\t\t\t() => {},\n\t\t\t() => {},\n\t\t);\n\t\treturn applied;\n\t}\n\n\t/** One build of the dirty plugins and its rollout: the server, every worker kind, then the clients. */\n\tasync #applyChanges(context: Context): Promise<RolloutResult> {\n\t\tconst plugins = this.#component;\n\t\tconst built = await plugins.build(plugins.state.value.dirty, context);\n\t\tconst steps = [\n\t\t\tplugins.step(\"server\", this.host),\n\t\t\t...[...this.workers].map(([name, each]) => each.step(name)),\n\t\t\t...this.#surfaces.map(({ name, surface }) => surface.step(name)),\n\t\t];\n\t\treturn plugins.rollout(steps, built, context);\n\t}\n\n\tasync exportData(address: Address, path: string, context: Context): Promise<void> {\n\t\tconst workers = this.#workersOf(address);\n\t\tconst manifest = this.#manifest(address);\n\t\tconst target = resolve(path);\n\t\t// Running: the worker packs its own store. Else the lock, unless a worker starts first: then ask it.\n\t\tfor (let attempt = 1; ; attempt++) {\n\t\t\tif (workers.state.value[address.key]?.status === \"running\") {\n\t\t\t\tconst data = await this.host.get(HostData, { address: addressParam(address) }, context);\n\t\t\t\ttry {\n\t\t\t\t\tawait data.exportTo({ path: target, manifest: JSON.stringify(manifest) }, context);\n\t\t\t\t} finally {\n\t\t\t\t\tdata.release();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst lock = await this.#workerLock(address, context);\n\t\t\tif (lock !== undefined) {\n\t\t\t\ttry {\n\t\t\t\t\tawait packData(workerDirectory(this.dataDir, address), manifest, target, context);\n\t\t\t\t} finally {\n\t\t\t\t\tawait lock.release();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (attempt === 5) throw new Error(`exportData: the worker at ${address.key} keeps starting; try again`);\n\t\t}\n\t}\n\n\tasync importData(archive: string, address: Address, context: Context): Promise<void> {\n\t\tthis.#workersOf(address);\n\t\tconst { name, limits = {} } = this.#options;\n\t\tconst accept = (manifest: ArchiveManifest): void => {\n\t\t\t// A trust boundary: an archive from anywhere.\n\t\t\tif (manifest?.format !== ARCHIVE_FORMAT) throw new Error(`importData: not a format ${ARCHIVE_FORMAT} archive`);\n\t\t\tif (manifest.app !== name) throw new Error(`importData: an archive of \"${manifest.app}\", not \"${name}\"`);\n\t\t};\n\t\tconst lock = await this.#workerLock(address, context);\n\t\t// A worker holds it: it runs, so the address has data, and nothing is overwritten.\n\t\tif (lock === undefined) throw new Error(`importData: ${address.key} has data (its worker runs)`);\n\t\ttry {\n\t\t\tconst bounds = { bytes: limits.importBytes, entries: limits.importEntries };\n\t\t\tawait unpackData(resolve(archive), workerDirectory(this.dataDir, address), accept, bounds, context);\n\t\t} finally {\n\t\t\tawait lock.release();\n\t\t}\n\t}\n\n\t/** The process lock of the worker at `address` (the one its worker takes at start), or `undefined` while held. */\n\tasync #workerLock(address: Address, context: Context): Promise<ProcessLock | undefined> {\n\t\tconst waited = AbortSignal.timeout(ADDRESS_LOCK_MS);\n\t\ttry {\n\t\t\treturn await processLock(\n\t\t\t\tworkerLock(this.#options.name, this.dataDir, address),\n\t\t\t\twithAbortSignal(waited, context),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tif (waited.aborted) return undefined;\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tclose(context: Context): Promise<void> {\n\t\tthis.#closing ??= this.#close(context);\n\t\treturn this.#closing;\n\t}\n\n\t/** The workers of `address`'s kind. */\n\t#workersOf(address: Address): Workers<HostKind> {\n\t\tconst workers = this.workers.get(address.kind);\n\t\tif (workers === undefined) throw new Error(`app: no worker kind \"${address.kind}\"`);\n\t\treturn workers;\n\t}\n\n\t/** The manifest of `address`'s archive. */\n\t#manifest(address: Address): ArchiveManifest {\n\t\tconst { name, api } = this.#options;\n\t\treturn {\n\t\t\tformat: ARCHIVE_FORMAT,\n\t\t\tapp: name,\n\t\t\tapi: api.versions[0] ?? \"\",\n\t\t\taddress: { kind: address.kind, key: address.key },\n\t\t};\n\t}\n\n\t/** Whether the app is closing or closed: what runs after the start stops there. */\n\tclosing(): boolean {\n\t\treturn this.#closing !== undefined;\n\t}\n\n\t/**\n\t * The close, in order: HTTP (it drains requests the host's close would seal), workers, host, store, the plugins'\n\t * watcher, then the data directory's lock. The bases' builds and the recording of the base code are not waited for:\n\t * what they finish after the close is dropped.\n\t */\n\tasync #close(context: Context): Promise<void> {\n\t\tawait this.http.close(context);\n\t\tfor (const workers of this.workers.values()) await workers.close(context);\n\t\tawait this.host.close(context);\n\t\tawait this.#store.close(context);\n\t\tthis.#component.close();\n\t\tawait this.#lock.release();\n\t}\n}\n"]}