@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
@@ -1,273 +1,113 @@
1
- import { NOOP_TELEMETRY_CONTEXT, } from "@earendil-works/pi-telemetry";
2
- import { applySqliteMigrations } from "../sqlite/index.js";
1
+ // The SQLite telemetry store (`@earendil-works/chord/telemetry-sqlite`, decision "Telemetry store", §29): a recorder
2
+ // (`TelemetryRecorder`) whose batches are written every second, settled spans one row each (events and links inline,
3
+ // times in microseconds) and metrics per series per 10 s, with retention; spans and metrics other processes recorded
4
+ // join the same batches (`ingest`, never overwriting a stored span); and the `TelemetryStore` reads over it.
5
+ import { seriesKey, sortedAttributes, TelemetryRecorder } from "../telemetry-ingest/recorder.js";
6
+ import { migrateTelemetryStore } from "./schema.js";
3
7
  import { findMetrics, findTraces, getTrace } from "./store.js";
4
- const identities = new WeakMap();
5
- const carrierKey = "pi-sqlite-span";
6
- const traceKey = "pi-sqlite-trace";
7
- const intervalMs = 10_000;
8
- function copyAttributes(attributes) {
9
- return Object.fromEntries(Object.entries(attributes ?? {})
10
- .filter(([, value]) => value !== undefined)
11
- .map(([key, value]) => [key, Array.isArray(value) ? [...value] : value]));
8
+ /** `ms` in whole microseconds, as the store keeps span times. */
9
+ function micros(ms) {
10
+ return Math.round(ms * 1000);
12
11
  }
13
- function copyLink(link) {
14
- const identity = identities.get(link.context);
15
- return identity
16
- ? { trace_id: identity.traceId, span_id: identity.id, attributes: copyAttributes(link.attributes) }
17
- : undefined;
18
- }
19
- class Recorder {
20
- propagation = this;
21
- metrics = {
22
- counter: (name, options) => ({ add: this.measurement("counter", name, options) }),
23
- upDownCounter: (name, options) => ({ add: this.measurement("upDownCounter", name, options) }),
24
- histogram: (name, options) => ({ record: this.measurement("histogram", name, options) }),
25
- };
26
- droppedSpans = 0;
27
- droppedMeasurements = 0;
28
- db;
29
- retention;
30
- capacity;
31
- scope = crypto.randomUUID();
32
- sequence = 0;
33
- spans = [];
34
- measurements = new Map();
35
- inFlightMeasurements = 0;
36
- timer;
37
- stopped = false;
38
- failed = false;
39
- failure;
40
- writing;
41
- closing;
12
+ class Store {
13
+ #recorder;
14
+ #db;
15
+ #retention;
16
+ #timer;
17
+ #failed = false;
18
+ #failure;
19
+ #writing;
20
+ #closing;
42
21
  constructor(db, retention, capacity) {
43
- this.db = db;
44
- this.retention = retention;
45
- this.capacity = capacity;
46
- this.timer = setInterval(() => {
47
- if (!this.writing)
22
+ this.#db = db;
23
+ this.#retention = retention;
24
+ const scope = crypto.randomUUID();
25
+ this.#recorder = new TelemetryRecorder(() => scope, capacity);
26
+ this.#timer = setInterval(() => {
27
+ if (!this.#writing)
48
28
  void this.flush().catch(() => { });
49
29
  }, 1000);
50
- this.timer.unref?.();
30
+ this.#timer.unref?.();
51
31
  }
52
- startSpan(options, callback) {
53
- return this.start(undefined, options, callback);
32
+ get metrics() {
33
+ return this.#recorder.metrics;
54
34
  }
55
- inject(context) {
56
- const identity = identities.get(context);
57
- return identity ? { [carrierKey]: identity.id, [traceKey]: identity.traceId } : undefined;
35
+ get propagation() {
36
+ return this.#recorder;
58
37
  }
59
- extract(carrier) {
60
- const id = carrier?.[carrierKey];
61
- const traceId = carrier?.[traceKey];
62
- if (typeof id !== "string" || typeof traceId !== "string")
63
- return this;
64
- const identity = { id, traceId };
65
- const parent = {
66
- metrics: this.metrics,
67
- propagation: this,
68
- startSpan: (options, callback) => this.start(identity, options, callback),
69
- };
70
- identities.set(parent, identity);
71
- return parent;
38
+ get droppedSpans() {
39
+ return this.#recorder.droppedSpans;
72
40
  }
73
- inert(options, callback) {
74
- return NOOP_TELEMETRY_CONTEXT.startSpan(options, (noop) => callback({
75
- ...noop,
76
- metrics: this.metrics,
77
- propagation: this,
78
- startSpan: (options, callback) => this.inert(options, callback),
79
- }));
41
+ get droppedMeasurements() {
42
+ return this.#recorder.droppedMeasurements;
80
43
  }
81
- async start(parent, options, callback) {
82
- if (this.stopped)
83
- return this.inert(options, callback);
84
- const name = options.name;
85
- let attributes = copyAttributes(options.attributes);
86
- const links = [];
87
- for (const link of options.links ?? []) {
88
- const copied = copyLink(link);
89
- if (copied)
90
- links.push(copied);
91
- }
92
- const id = `${this.scope}:${++this.sequence}`;
93
- const identity = { id, traceId: parent?.traceId ?? id };
94
- const started = Date.now();
95
- const clock = performance.now();
96
- const events = [];
97
- let status = { status: "ok" };
98
- let explicit = false;
99
- let settled = false;
100
- const record = (action) => {
101
- if (!settled && !this.stopped)
102
- action();
103
- };
104
- const span = {
105
- metrics: this.metrics,
106
- propagation: this,
107
- startSpan: (options, callback) => settled ? this.inert(options, callback) : this.start(identity, options, callback),
108
- addLink: (link) => record(() => {
109
- const copied = copyLink(link);
110
- if (copied)
111
- links.push(copied);
112
- }),
113
- addEvent: (name, attrs) => record(() => {
114
- events.push({ name, time_ms: performance.now() - clock, attributes: copyAttributes(attrs) });
115
- }),
116
- setAttributes: (attrs) => record(() => {
117
- attributes = { ...attributes, ...copyAttributes(attrs) };
118
- }),
119
- setStatus: (value) => record(() => {
120
- status =
121
- value.status === "error" && value.error
122
- ? { status: "error", error: { ...value.error } }
123
- : { status: value.status };
124
- explicit = true;
125
- }),
126
- };
127
- identities.set(span, identity);
128
- try {
129
- return await callback(span);
130
- }
131
- catch (error) {
132
- if (!explicit)
133
- status =
134
- error instanceof Error
135
- ? { status: "error", error: { name: error.name, message: error.message } }
136
- : { status: "error" };
137
- throw error;
138
- }
139
- finally {
140
- settled = true;
141
- if (!this.stopped) {
142
- if (this.spans.length >= this.capacity)
143
- this.droppedSpans++;
144
- else
145
- this.spans.push([
146
- id,
147
- identity.traceId,
148
- parent?.id ?? null,
149
- name,
150
- started,
151
- started + performance.now() - clock,
152
- JSON.stringify(attributes),
153
- JSON.stringify(events),
154
- JSON.stringify(links),
155
- JSON.stringify(status),
156
- ]);
157
- }
158
- }
159
- }
160
- measurement(kind, name, options) {
161
- const unit = options?.unit ?? null;
162
- return (value, attributes) => {
163
- if (this.stopped)
164
- return;
165
- const copied = copyAttributes(attributes);
166
- const encoded = JSON.stringify(Object.fromEntries(Object.keys(copied)
167
- .sort()
168
- .map((key) => [key, copied[key]])));
169
- const key = JSON.stringify([name, kind, unit, encoded]);
170
- const interval = Math.floor(Date.now() / intervalMs) * intervalMs;
171
- const pendingKey = `${interval}:${key}`;
172
- const previous = this.measurements.get(pendingKey);
173
- if (!previous && this.measurements.size + this.inFlightMeasurements >= this.capacity) {
174
- this.droppedMeasurements++;
175
- return;
176
- }
177
- this.measurements.set(pendingKey, {
178
- interval,
179
- key,
180
- name,
181
- kind,
182
- unit,
183
- attributes: encoded,
184
- count: (previous?.count ?? 0) + 1,
185
- sum: (previous?.sum ?? 0) + value,
186
- min: Math.min(previous?.min ?? value, value),
187
- max: Math.max(previous?.max ?? value, value),
188
- });
189
- };
44
+ startSpan = (options, callback) => this.#recorder.startSpan(options, callback);
45
+ ingest(batch) {
46
+ return this.#recorder.ingest(batch);
190
47
  }
191
48
  /** Readers use committed rows only; flush first to include newly settled spans. */
192
- getTrace = (traceId) => getTrace(this.db, traceId);
193
- findTraces = (query) => findTraces(this.db, query);
194
- findMetrics = (query) => findMetrics(this.db, query);
49
+ getTrace = (traceId) => getTrace(this.#db, traceId);
50
+ findTraces = (query) => findTraces(this.#db, query);
51
+ findMetrics = (query) => findMetrics(this.#db, query);
195
52
  flush() {
196
- return this.closing ?? this.drain(false);
53
+ return this.#closing ?? this.#drain(false);
197
54
  }
198
55
  close() {
199
- if (!this.closing) {
200
- this.stopped = true;
201
- clearInterval(this.timer);
202
- this.closing = this.drain(true);
56
+ if (!this.#closing) {
57
+ this.#recorder.stop("keep");
58
+ clearInterval(this.#timer);
59
+ this.#closing = this.#drain(true);
203
60
  }
204
- return this.closing;
61
+ return this.#closing;
205
62
  }
206
- async drain(partial) {
207
- while (this.writing)
208
- await this.writing;
209
- if (this.failed)
210
- throw this.failure;
211
- const spans = this.spans.slice();
212
- const metrics = [];
213
- const completed = Math.floor(Date.now() / intervalMs) * intervalMs;
214
- for (const [key, metric] of this.measurements) {
215
- if (!partial && metric.interval >= completed)
216
- continue;
217
- metrics.push(metric);
218
- this.measurements.delete(key);
219
- }
220
- this.inFlightMeasurements = metrics.length;
221
- this.writing = Promise.resolve()
222
- .then(() => this.db.transaction(async (tx) => {
223
- for (const span of spans)
224
- await tx.run("INSERT INTO telemetry_spans VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", ...span);
225
- for (const metric of metrics)
226
- await tx.run(`INSERT INTO telemetry_metrics VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
227
- ON CONFLICT(interval_ms, series_key) DO UPDATE SET count = count + excluded.count,
228
- sum = sum + excluded.sum, min = min(min, excluded.min), max = max(max, excluded.max)`, metric.interval, metric.key, metric.name, metric.kind, metric.unit, metric.attributes, metric.count, metric.sum, metric.min, metric.max);
229
- const cutoff = Date.now() - this.retention;
230
- await tx.run("DELETE FROM telemetry_spans WHERE ended_ms < ?", cutoff);
63
+ async #drain(partial) {
64
+ while (this.#writing)
65
+ await this.#writing;
66
+ if (this.#failed)
67
+ throw this.#failure;
68
+ const batch = this.#recorder.take(partial);
69
+ this.#writing = Promise.resolve()
70
+ .then(() => this.#db.transaction(async (tx) => {
71
+ for (const span of batch.spans)
72
+ await writeSpan(tx, span);
73
+ for (const metric of batch.metrics)
74
+ await writeMetric(tx, metric);
75
+ const cutoff = Date.now() - this.#retention;
76
+ await tx.run("DELETE FROM telemetry_spans WHERE ended_us < ?", cutoff * 1000);
231
77
  await tx.run("DELETE FROM telemetry_metrics WHERE interval_ms < ?", cutoff);
232
78
  }))
233
- .then(() => {
234
- this.spans.splice(0, spans.length);
235
- })
236
79
  .catch((error) => {
237
- this.failed = this.stopped = true;
238
- this.failure = error;
239
- this.spans.length = 0;
240
- this.measurements.clear();
241
- clearInterval(this.timer);
80
+ this.#failed = true;
81
+ this.#failure = error;
82
+ this.#recorder.stop("discard");
83
+ clearInterval(this.#timer);
242
84
  throw error;
243
85
  })
244
86
  .finally(() => {
245
- this.writing = undefined;
246
- this.inFlightMeasurements = 0;
87
+ this.#writing = undefined;
88
+ this.#recorder.release();
247
89
  });
248
- await this.writing;
90
+ await this.#writing;
249
91
  }
250
92
  }
93
+ /** Writes `span`, unless a span of its id is stored already (an ingested span never replaces one). */
94
+ function writeSpan(tx, span) {
95
+ return tx.run("INSERT OR IGNORE INTO telemetry_spans VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", span.id, span.traceId, span.parentId ?? null, span.name, micros(span.startedMs), micros(span.endedMs), JSON.stringify(span.attributes), JSON.stringify(span.events.map(({ name, timeMs, attributes }) => ({ name, time_ms: timeMs, attributes }))), JSON.stringify(span.links.map(({ traceId, spanId, attributes }) => ({ trace_id: traceId, span_id: spanId, attributes }))), JSON.stringify(span.status));
96
+ }
97
+ /** Adds `metric` to its series' row of its interval. */
98
+ function writeMetric(tx, metric) {
99
+ return tx.run(`INSERT INTO telemetry_metrics VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
100
+ ON CONFLICT(interval_ms, series_key) DO UPDATE SET count = count + excluded.count,
101
+ sum = sum + excluded.sum, min = min(min, excluded.min), max = max(max, excluded.max)`, metric.intervalMs, seriesKey(metric), metric.name, metric.kind, metric.unit ?? null, JSON.stringify(sortedAttributes(metric.attributes)), metric.count, metric.sum, metric.min, metric.max);
102
+ }
251
103
  /** Portable, buffered SQLite recorder. Recording never performs SQL; flush runs every second.
252
- * Only settled spans are stored. Metrics aggregate count/sum/min/max per ten-second interval.
253
- * A write failure permanently stops recording and is reported by flush and close. */
104
+ * Only settled spans are stored, their times in microseconds (`telemetryNow`). Metrics aggregate count/sum/min/max per
105
+ * ten-second interval. A store of an older version in `db` is migrated (version 2: span times from milliseconds to
106
+ * microseconds, rows kept). A write failure permanently stops recording and is reported by flush and close. */
254
107
  export async function createSqliteTelemetry(db, options = {}) {
255
108
  const retention = options.retentionMs ?? 7 * 24 * 60 * 60 * 1000;
256
109
  const capacity = options.maxQueuedSpans ?? 10_000;
257
- await applySqliteMigrations(db, [
258
- {
259
- version: 1,
260
- statements: [
261
- `CREATE TABLE telemetry_spans (id TEXT PRIMARY KEY, trace_id TEXT NOT NULL, parent_id TEXT, name TEXT, started_ms REAL,
262
- ended_ms REAL NOT NULL, attributes TEXT, events TEXT, links TEXT, status TEXT)`,
263
- "CREATE INDEX telemetry_spans_ended_ms ON telemetry_spans(ended_ms)",
264
- "CREATE INDEX telemetry_spans_trace_started ON telemetry_spans(trace_id, started_ms)",
265
- "CREATE INDEX telemetry_spans_started_ms ON telemetry_spans(started_ms)",
266
- `CREATE TABLE telemetry_metrics (interval_ms INTEGER, series_key TEXT, name TEXT, kind TEXT,
267
- unit TEXT, attributes TEXT, count INTEGER, sum REAL, min REAL, max REAL, PRIMARY KEY(interval_ms, series_key))`,
268
- ],
269
- },
270
- ], { table: "telemetry_schema" });
271
- return new Recorder(db, retention, capacity);
110
+ await migrateTelemetryStore(db);
111
+ return new Store(db, retention, capacity);
272
112
  }
273
113
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry-sqlite/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype InstrumentOptions,\n\tNOOP_TELEMETRY_CONTEXT,\n\ttype SpanAttributes,\n\ttype SpanLink,\n\ttype SpanOptions,\n\ttype SpanStatus,\n\ttype TelemetryCarrier,\n\ttype TelemetryContext,\n\ttype TelemetryMetrics,\n\ttype TelemetryPropagation,\n\ttype TelemetrySpan,\n\ttype TelemetryStore,\n} from \"@earendil-works/pi-telemetry\";\nimport { applySqliteMigrations, type SqliteDatabase, type SqliteValue } from \"../sqlite/index.ts\";\nimport { findMetrics, findTraces, getTrace } from \"./store.ts\";\n\nexport interface SqliteTelemetryOptions {\n\t/** Retain seven days by default. Cleanup runs in the flush transaction. */\n\treadonly retentionMs?: number;\n\t/** Settled spans awaiting commit, including the in-flight batch. Defaults to 10,000.\n\t * Also bounds pending metric interval/series pairs independently. */\n\treadonly maxQueuedSpans?: number;\n}\n\nexport interface SqliteTelemetry extends TelemetryContext, TelemetryStore {\n\treadonly metrics: TelemetryMetrics;\n\treadonly propagation: TelemetryPropagation;\n\treadonly droppedSpans: number;\n\treadonly droppedMeasurements: number;\n\t/** Persist settled spans and completed ten-second metric intervals. */\n\tflush(): Promise<void>;\n\t/** Stop recording and drain, including partial metric intervals. Does not close the database. */\n\tclose(): Promise<void>;\n}\n\ntype Identity = { id: string; traceId: string };\ntype Link = { trace_id: string; span_id: string; attributes?: SpanAttributes };\ntype Metric = {\n\tinterval: number;\n\tkey: string;\n\tname: string;\n\tkind: \"counter\" | \"upDownCounter\" | \"histogram\";\n\tunit: string | null;\n\tattributes: string;\n\tcount: number;\n\tsum: number;\n\tmin: number;\n\tmax: number;\n};\nconst identities = new WeakMap<TelemetryContext, Identity>();\nconst carrierKey = \"pi-sqlite-span\";\nconst traceKey = \"pi-sqlite-trace\";\nconst intervalMs = 10_000;\n\nfunction copyAttributes(attributes?: SpanAttributes): SpanAttributes {\n\treturn Object.fromEntries(\n\t\tObject.entries(attributes ?? {})\n\t\t\t.filter(([, value]) => value !== undefined)\n\t\t\t.map(([key, value]) => [key, Array.isArray(value) ? [...value] : value]),\n\t);\n}\n\nfunction copyLink(link: SpanLink): Link | undefined {\n\tconst identity = identities.get(link.context);\n\treturn identity\n\t\t? { trace_id: identity.traceId, span_id: identity.id, attributes: copyAttributes(link.attributes) }\n\t\t: undefined;\n}\n\nclass Recorder implements SqliteTelemetry, TelemetryPropagation {\n\treadonly propagation: TelemetryPropagation = this;\n\treadonly metrics: TelemetryMetrics = {\n\t\tcounter: (name, options) => ({ add: this.measurement(\"counter\", name, options) }),\n\t\tupDownCounter: (name, options) => ({ add: this.measurement(\"upDownCounter\", name, options) }),\n\t\thistogram: (name, options) => ({ record: this.measurement(\"histogram\", name, options) }),\n\t};\n\tdroppedSpans = 0;\n\tdroppedMeasurements = 0;\n\tprivate readonly db: SqliteDatabase;\n\tprivate readonly retention: number;\n\tprivate readonly capacity: number;\n\tprivate readonly scope = crypto.randomUUID();\n\tprivate sequence = 0;\n\tprivate readonly spans: SqliteValue[][] = [];\n\tprivate readonly measurements = new Map<string, Metric>();\n\tprivate inFlightMeasurements = 0;\n\tprivate readonly timer: ReturnType<typeof setInterval>;\n\tprivate stopped = false;\n\tprivate failed = false;\n\tprivate failure: unknown;\n\tprivate writing?: Promise<void>;\n\tprivate closing?: Promise<void>;\n\n\tconstructor(db: SqliteDatabase, retention: number, capacity: number) {\n\t\tthis.db = db;\n\t\tthis.retention = retention;\n\t\tthis.capacity = capacity;\n\t\tthis.timer = setInterval(() => {\n\t\t\tif (!this.writing) void this.flush().catch(() => {});\n\t\t}, 1000);\n\t\tthis.timer.unref?.();\n\t}\n\n\tstartSpan<T>(options: SpanOptions, callback: (span: TelemetrySpan) => T | Promise<T>): Promise<T> {\n\t\treturn this.start(undefined, options, callback);\n\t}\n\n\tinject(context: TelemetryContext): TelemetryCarrier | undefined {\n\t\tconst identity = identities.get(context);\n\t\treturn identity ? { [carrierKey]: identity.id, [traceKey]: identity.traceId } : undefined;\n\t}\n\n\textract(carrier: TelemetryCarrier | undefined): TelemetryContext {\n\t\tconst id = carrier?.[carrierKey];\n\t\tconst traceId = carrier?.[traceKey];\n\t\tif (typeof id !== \"string\" || typeof traceId !== \"string\") return this;\n\t\tconst identity = { id, traceId };\n\t\tconst parent: TelemetryContext = {\n\t\t\tmetrics: this.metrics,\n\t\t\tpropagation: this,\n\t\t\tstartSpan: (options, callback) => this.start(identity, options, callback),\n\t\t};\n\t\tidentities.set(parent, identity);\n\t\treturn parent;\n\t}\n\n\tprivate inert<T>(options: SpanOptions, callback: (span: TelemetrySpan) => T | Promise<T>): Promise<T> {\n\t\treturn NOOP_TELEMETRY_CONTEXT.startSpan(options, (noop) =>\n\t\t\tcallback({\n\t\t\t\t...noop,\n\t\t\t\tmetrics: this.metrics,\n\t\t\t\tpropagation: this,\n\t\t\t\tstartSpan: (options, callback) => this.inert(options, callback),\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate async start<T>(\n\t\tparent: Identity | undefined,\n\t\toptions: SpanOptions,\n\t\tcallback: (span: TelemetrySpan) => T | Promise<T>,\n\t): Promise<T> {\n\t\tif (this.stopped) return this.inert(options, callback);\n\t\tconst name = options.name;\n\t\tlet attributes = copyAttributes(options.attributes);\n\t\tconst links: Link[] = [];\n\t\tfor (const link of options.links ?? []) {\n\t\t\tconst copied = copyLink(link);\n\t\t\tif (copied) links.push(copied);\n\t\t}\n\t\tconst id = `${this.scope}:${++this.sequence}`;\n\t\tconst identity = { id, traceId: parent?.traceId ?? id };\n\t\tconst started = Date.now();\n\t\tconst clock = performance.now();\n\t\tconst events: { name: string; time_ms: number; attributes: SpanAttributes }[] = [];\n\t\tlet status: SpanStatus = { status: \"ok\" };\n\t\tlet explicit = false;\n\t\tlet settled = false;\n\t\tconst record = (action: () => void): void => {\n\t\t\tif (!settled && !this.stopped) action();\n\t\t};\n\t\tconst span: TelemetrySpan = {\n\t\t\tmetrics: this.metrics,\n\t\t\tpropagation: this,\n\t\t\tstartSpan: (options, callback) =>\n\t\t\t\tsettled ? this.inert(options, callback) : this.start(identity, options, callback),\n\t\t\taddLink: (link) =>\n\t\t\t\trecord(() => {\n\t\t\t\t\tconst copied = copyLink(link);\n\t\t\t\t\tif (copied) links.push(copied);\n\t\t\t\t}),\n\t\t\taddEvent: (name, attrs) =>\n\t\t\t\trecord(() => {\n\t\t\t\t\tevents.push({ name, time_ms: performance.now() - clock, attributes: copyAttributes(attrs) });\n\t\t\t\t}),\n\t\t\tsetAttributes: (attrs) =>\n\t\t\t\trecord(() => {\n\t\t\t\t\tattributes = { ...attributes, ...copyAttributes(attrs) };\n\t\t\t\t}),\n\t\t\tsetStatus: (value) =>\n\t\t\t\trecord(() => {\n\t\t\t\t\tstatus =\n\t\t\t\t\t\tvalue.status === \"error\" && value.error\n\t\t\t\t\t\t\t? { status: \"error\", error: { ...value.error } }\n\t\t\t\t\t\t\t: { status: value.status };\n\t\t\t\t\texplicit = true;\n\t\t\t\t}),\n\t\t};\n\t\tidentities.set(span, identity);\n\t\ttry {\n\t\t\treturn await callback(span);\n\t\t} catch (error) {\n\t\t\tif (!explicit)\n\t\t\t\tstatus =\n\t\t\t\t\terror instanceof Error\n\t\t\t\t\t\t? { status: \"error\", error: { name: error.name, message: error.message } }\n\t\t\t\t\t\t: { status: \"error\" };\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tsettled = true;\n\t\t\tif (!this.stopped) {\n\t\t\t\tif (this.spans.length >= this.capacity) this.droppedSpans++;\n\t\t\t\telse\n\t\t\t\t\tthis.spans.push([\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tidentity.traceId,\n\t\t\t\t\t\tparent?.id ?? null,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tstarted,\n\t\t\t\t\t\tstarted + performance.now() - clock,\n\t\t\t\t\t\tJSON.stringify(attributes),\n\t\t\t\t\t\tJSON.stringify(events),\n\t\t\t\t\t\tJSON.stringify(links),\n\t\t\t\t\t\tJSON.stringify(status),\n\t\t\t\t\t]);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate measurement(\n\t\tkind: Metric[\"kind\"],\n\t\tname: string,\n\t\toptions?: InstrumentOptions,\n\t): (value: number, attributes?: SpanAttributes) => void {\n\t\tconst unit = options?.unit ?? null;\n\t\treturn (value, attributes) => {\n\t\t\tif (this.stopped) return;\n\t\t\tconst copied = copyAttributes(attributes);\n\t\t\tconst encoded = JSON.stringify(\n\t\t\t\tObject.fromEntries(\n\t\t\t\t\tObject.keys(copied)\n\t\t\t\t\t\t.sort()\n\t\t\t\t\t\t.map((key) => [key, copied[key]]),\n\t\t\t\t),\n\t\t\t);\n\t\t\tconst key = JSON.stringify([name, kind, unit, encoded]);\n\t\t\tconst interval = Math.floor(Date.now() / intervalMs) * intervalMs;\n\t\t\tconst pendingKey = `${interval}:${key}`;\n\t\t\tconst previous = this.measurements.get(pendingKey);\n\t\t\tif (!previous && this.measurements.size + this.inFlightMeasurements >= this.capacity) {\n\t\t\t\tthis.droppedMeasurements++;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.measurements.set(pendingKey, {\n\t\t\t\tinterval,\n\t\t\t\tkey,\n\t\t\t\tname,\n\t\t\t\tkind,\n\t\t\t\tunit,\n\t\t\t\tattributes: encoded,\n\t\t\t\tcount: (previous?.count ?? 0) + 1,\n\t\t\t\tsum: (previous?.sum ?? 0) + value,\n\t\t\t\tmin: Math.min(previous?.min ?? value, value),\n\t\t\t\tmax: Math.max(previous?.max ?? value, value),\n\t\t\t});\n\t\t};\n\t}\n\n\t/** Readers use committed rows only; flush first to include newly settled spans. */\n\treadonly getTrace: TelemetryStore[\"getTrace\"] = (traceId) => getTrace(this.db, traceId);\n\treadonly findTraces: TelemetryStore[\"findTraces\"] = (query) => findTraces(this.db, query);\n\treadonly findMetrics: TelemetryStore[\"findMetrics\"] = (query) => findMetrics(this.db, query);\n\n\tflush(): Promise<void> {\n\t\treturn this.closing ?? this.drain(false);\n\t}\n\n\tclose(): Promise<void> {\n\t\tif (!this.closing) {\n\t\t\tthis.stopped = true;\n\t\t\tclearInterval(this.timer);\n\t\t\tthis.closing = this.drain(true);\n\t\t}\n\t\treturn this.closing;\n\t}\n\n\tprivate async drain(partial: boolean): Promise<void> {\n\t\twhile (this.writing) await this.writing;\n\t\tif (this.failed) throw this.failure;\n\t\tconst spans = this.spans.slice();\n\t\tconst metrics: Metric[] = [];\n\t\tconst completed = Math.floor(Date.now() / intervalMs) * intervalMs;\n\t\tfor (const [key, metric] of this.measurements) {\n\t\t\tif (!partial && metric.interval >= completed) continue;\n\t\t\tmetrics.push(metric);\n\t\t\tthis.measurements.delete(key);\n\t\t}\n\t\tthis.inFlightMeasurements = metrics.length;\n\t\tthis.writing = Promise.resolve()\n\t\t\t.then(() =>\n\t\t\t\tthis.db.transaction(async (tx) => {\n\t\t\t\t\tfor (const span of spans)\n\t\t\t\t\t\tawait tx.run(\"INSERT INTO telemetry_spans VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\", ...span);\n\t\t\t\t\tfor (const metric of metrics)\n\t\t\t\t\t\tawait tx.run(\n\t\t\t\t\t\t\t`INSERT INTO telemetry_metrics VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\t\t\tON CONFLICT(interval_ms, series_key) DO UPDATE SET count = count + excluded.count,\n\t\t\t\tsum = sum + excluded.sum, min = min(min, excluded.min), max = max(max, excluded.max)`,\n\t\t\t\t\t\t\tmetric.interval,\n\t\t\t\t\t\t\tmetric.key,\n\t\t\t\t\t\t\tmetric.name,\n\t\t\t\t\t\t\tmetric.kind,\n\t\t\t\t\t\t\tmetric.unit,\n\t\t\t\t\t\t\tmetric.attributes,\n\t\t\t\t\t\t\tmetric.count,\n\t\t\t\t\t\t\tmetric.sum,\n\t\t\t\t\t\t\tmetric.min,\n\t\t\t\t\t\t\tmetric.max,\n\t\t\t\t\t\t);\n\t\t\t\t\tconst cutoff = Date.now() - this.retention;\n\t\t\t\t\tawait tx.run(\"DELETE FROM telemetry_spans WHERE ended_ms < ?\", cutoff);\n\t\t\t\t\tawait tx.run(\"DELETE FROM telemetry_metrics WHERE interval_ms < ?\", cutoff);\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.then(() => {\n\t\t\t\tthis.spans.splice(0, spans.length);\n\t\t\t})\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tthis.failed = this.stopped = true;\n\t\t\t\tthis.failure = error;\n\t\t\t\tthis.spans.length = 0;\n\t\t\t\tthis.measurements.clear();\n\t\t\t\tclearInterval(this.timer);\n\t\t\t\tthrow error;\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis.writing = undefined;\n\t\t\t\tthis.inFlightMeasurements = 0;\n\t\t\t});\n\t\tawait this.writing;\n\t}\n}\n\n/** Portable, buffered SQLite recorder. Recording never performs SQL; flush runs every second.\n * Only settled spans are stored. Metrics aggregate count/sum/min/max per ten-second interval.\n * A write failure permanently stops recording and is reported by flush and close. */\nexport async function createSqliteTelemetry(\n\tdb: SqliteDatabase,\n\toptions: SqliteTelemetryOptions = {},\n): Promise<SqliteTelemetry> {\n\tconst retention = options.retentionMs ?? 7 * 24 * 60 * 60 * 1000;\n\tconst capacity = options.maxQueuedSpans ?? 10_000;\n\tawait applySqliteMigrations(\n\t\tdb,\n\t\t[\n\t\t\t{\n\t\t\t\tversion: 1,\n\t\t\t\tstatements: [\n\t\t\t\t\t`CREATE TABLE telemetry_spans (id TEXT PRIMARY KEY, trace_id TEXT NOT NULL, parent_id TEXT, name TEXT, started_ms REAL,\n\t\t\tended_ms REAL NOT NULL, attributes TEXT, events TEXT, links TEXT, status TEXT)`,\n\t\t\t\t\t\"CREATE INDEX telemetry_spans_ended_ms ON telemetry_spans(ended_ms)\",\n\t\t\t\t\t\"CREATE INDEX telemetry_spans_trace_started ON telemetry_spans(trace_id, started_ms)\",\n\t\t\t\t\t\"CREATE INDEX telemetry_spans_started_ms ON telemetry_spans(started_ms)\",\n\t\t\t\t\t`CREATE TABLE telemetry_metrics (interval_ms INTEGER, series_key TEXT, name TEXT, kind TEXT,\n\t\t\tunit TEXT, attributes TEXT, count INTEGER, sum REAL, min REAL, max REAL, PRIMARY KEY(interval_ms, series_key))`,\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\t{ table: \"telemetry_schema\" },\n\t);\n\treturn new Recorder(db, retention, capacity);\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry-sqlite/index.ts"],"names":[],"mappings":"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","sourcesContent":["// The SQLite telemetry store (`@earendil-works/chord/telemetry-sqlite`, decision \"Telemetry store\", §29): a recorder\n// (`TelemetryRecorder`) whose batches are written every second, settled spans one row each (events and links inline,\n// times in microseconds) and metrics per series per 10 s, with retention; spans and metrics other processes recorded\n// join the same batches (`ingest`, never overwriting a stored span); and the `TelemetryStore` reads over it.\n\nimport type {\n\tStoredMetric,\n\tStoredSpan,\n\tTelemetryContext,\n\tTelemetryMetrics,\n\tTelemetryPropagation,\n\tTelemetryStore,\n} from \"@earendil-works/pi-telemetry\";\nimport type { SqliteDatabase, SqliteExecutor } from \"../sqlite/index.ts\";\nimport { seriesKey, sortedAttributes, type TelemetryBatch, TelemetryRecorder } from \"../telemetry-ingest/recorder.ts\";\nimport { migrateTelemetryStore } from \"./schema.ts\";\nimport { findMetrics, findTraces, getTrace } from \"./store.ts\";\n\nexport type { TelemetryBatch } from \"../telemetry-ingest/recorder.ts\";\n\nexport interface SqliteTelemetryOptions {\n\t/** Retain seven days by default. Cleanup runs in the flush transaction. */\n\treadonly retentionMs?: number;\n\t/** Settled spans awaiting commit, including the in-flight batch. Defaults to 10,000.\n\t * Also bounds pending metric interval/series pairs independently. */\n\treadonly maxQueuedSpans?: number;\n}\n\nexport interface SqliteTelemetry extends TelemetryContext, TelemetryStore {\n\treadonly metrics: TelemetryMetrics;\n\treadonly propagation: TelemetryPropagation;\n\treadonly droppedSpans: number;\n\treadonly droppedMeasurements: number;\n\t/**\n\t * Queues finished spans and metric rows another process recorded, written with the next flush (a span whose id is\n\t * stored already is kept as it was); within the queue's bound, the rest dropped and counted. Returns how many\n\t * spans it queued. Callers check what they pass: the store writes it as it is.\n\t */\n\tingest(batch: TelemetryBatch): number;\n\t/** Persist settled spans and completed ten-second metric intervals. */\n\tflush(): Promise<void>;\n\t/** Stop recording and drain, including partial metric intervals. Does not close the database. */\n\tclose(): Promise<void>;\n}\n\n/** `ms` in whole microseconds, as the store keeps span times. */\nfunction micros(ms: number): number {\n\treturn Math.round(ms * 1000);\n}\n\nclass Store implements SqliteTelemetry {\n\treadonly #recorder: TelemetryRecorder;\n\treadonly #db: SqliteDatabase;\n\treadonly #retention: number;\n\treadonly #timer: ReturnType<typeof setInterval>;\n\t#failed = false;\n\t#failure: unknown;\n\t#writing?: Promise<void>;\n\t#closing?: Promise<void>;\n\n\tconstructor(db: SqliteDatabase, retention: number, capacity: number) {\n\t\tthis.#db = db;\n\t\tthis.#retention = retention;\n\t\tconst scope = crypto.randomUUID();\n\t\tthis.#recorder = new TelemetryRecorder(() => scope, capacity);\n\t\tthis.#timer = setInterval(() => {\n\t\t\tif (!this.#writing) void this.flush().catch(() => {});\n\t\t}, 1000);\n\t\tthis.#timer.unref?.();\n\t}\n\n\tget metrics(): TelemetryMetrics {\n\t\treturn this.#recorder.metrics;\n\t}\n\n\tget propagation(): TelemetryPropagation {\n\t\treturn this.#recorder;\n\t}\n\n\tget droppedSpans(): number {\n\t\treturn this.#recorder.droppedSpans;\n\t}\n\n\tget droppedMeasurements(): number {\n\t\treturn this.#recorder.droppedMeasurements;\n\t}\n\n\treadonly startSpan: TelemetryContext[\"startSpan\"] = (options, callback) =>\n\t\tthis.#recorder.startSpan(options, callback);\n\n\tingest(batch: TelemetryBatch): number {\n\t\treturn this.#recorder.ingest(batch);\n\t}\n\n\t/** Readers use committed rows only; flush first to include newly settled spans. */\n\treadonly getTrace: TelemetryStore[\"getTrace\"] = (traceId) => getTrace(this.#db, traceId);\n\treadonly findTraces: TelemetryStore[\"findTraces\"] = (query) => findTraces(this.#db, query);\n\treadonly findMetrics: TelemetryStore[\"findMetrics\"] = (query) => findMetrics(this.#db, query);\n\n\tflush(): Promise<void> {\n\t\treturn this.#closing ?? this.#drain(false);\n\t}\n\n\tclose(): Promise<void> {\n\t\tif (!this.#closing) {\n\t\t\tthis.#recorder.stop(\"keep\");\n\t\t\tclearInterval(this.#timer);\n\t\t\tthis.#closing = this.#drain(true);\n\t\t}\n\t\treturn this.#closing;\n\t}\n\n\tasync #drain(partial: boolean): Promise<void> {\n\t\twhile (this.#writing) await this.#writing;\n\t\tif (this.#failed) throw this.#failure;\n\t\tconst batch = this.#recorder.take(partial);\n\t\tthis.#writing = Promise.resolve()\n\t\t\t.then(() =>\n\t\t\t\tthis.#db.transaction(async (tx) => {\n\t\t\t\t\tfor (const span of batch.spans) await writeSpan(tx, span);\n\t\t\t\t\tfor (const metric of batch.metrics) await writeMetric(tx, metric);\n\t\t\t\t\tconst cutoff = Date.now() - this.#retention;\n\t\t\t\t\tawait tx.run(\"DELETE FROM telemetry_spans WHERE ended_us < ?\", cutoff * 1000);\n\t\t\t\t\tawait tx.run(\"DELETE FROM telemetry_metrics WHERE interval_ms < ?\", cutoff);\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tthis.#failed = true;\n\t\t\t\tthis.#failure = error;\n\t\t\t\tthis.#recorder.stop(\"discard\");\n\t\t\t\tclearInterval(this.#timer);\n\t\t\t\tthrow error;\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis.#writing = undefined;\n\t\t\t\tthis.#recorder.release();\n\t\t\t});\n\t\tawait this.#writing;\n\t}\n}\n\n/** Writes `span`, unless a span of its id is stored already (an ingested span never replaces one). */\nfunction writeSpan(tx: SqliteExecutor, span: StoredSpan): Promise<void> {\n\treturn tx.run(\n\t\t\"INSERT OR IGNORE INTO telemetry_spans VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\",\n\t\tspan.id,\n\t\tspan.traceId,\n\t\tspan.parentId ?? null,\n\t\tspan.name,\n\t\tmicros(span.startedMs),\n\t\tmicros(span.endedMs),\n\t\tJSON.stringify(span.attributes),\n\t\tJSON.stringify(span.events.map(({ name, timeMs, attributes }) => ({ name, time_ms: timeMs, attributes }))),\n\t\tJSON.stringify(\n\t\t\tspan.links.map(({ traceId, spanId, attributes }) => ({ trace_id: traceId, span_id: spanId, attributes })),\n\t\t),\n\t\tJSON.stringify(span.status),\n\t);\n}\n\n/** Adds `metric` to its series' row of its interval. */\nfunction writeMetric(tx: SqliteExecutor, metric: StoredMetric): Promise<void> {\n\treturn tx.run(\n\t\t`INSERT INTO telemetry_metrics VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(interval_ms, series_key) DO UPDATE SET count = count + excluded.count,\n\t\tsum = sum + excluded.sum, min = min(min, excluded.min), max = max(max, excluded.max)`,\n\t\tmetric.intervalMs,\n\t\tseriesKey(metric),\n\t\tmetric.name,\n\t\tmetric.kind,\n\t\tmetric.unit ?? null,\n\t\tJSON.stringify(sortedAttributes(metric.attributes)),\n\t\tmetric.count,\n\t\tmetric.sum,\n\t\tmetric.min,\n\t\tmetric.max,\n\t);\n}\n\n/** Portable, buffered SQLite recorder. Recording never performs SQL; flush runs every second.\n * Only settled spans are stored, their times in microseconds (`telemetryNow`). Metrics aggregate count/sum/min/max per\n * ten-second interval. A store of an older version in `db` is migrated (version 2: span times from milliseconds to\n * microseconds, rows kept). A write failure permanently stops recording and is reported by flush and close. */\nexport async function createSqliteTelemetry(\n\tdb: SqliteDatabase,\n\toptions: SqliteTelemetryOptions = {},\n): Promise<SqliteTelemetry> {\n\tconst retention = options.retentionMs ?? 7 * 24 * 60 * 60 * 1000;\n\tconst capacity = options.maxQueuedSpans ?? 10_000;\n\tawait migrateTelemetryStore(db);\n\treturn new Store(db, retention, capacity);\n}\n"]}
@@ -0,0 +1,13 @@
1
+ import type { TelemetryStore } from "@earendil-works/pi-telemetry";
2
+ /** A telemetry store opened for reads: the store's reads, and the close of its file. */
3
+ export interface SqliteTelemetryStore extends TelemetryStore {
4
+ /** Closes the file; reads after it reject. */
5
+ close(): Promise<void>;
6
+ }
7
+ /**
8
+ * Opens the telemetry store at `path` read-only (SQLite's read-only mode: it never writes the file, never migrates it,
9
+ * never creates it), while recorders of other processes write it or after. Rejects for a file that holds no store or
10
+ * a store of another version (a recorder, `createSqliteTelemetry`, migrates an older one).
11
+ */
12
+ export declare function openTelemetryStore(path: string): Promise<SqliteTelemetryStore>;
13
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/telemetry-sqlite/node.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAKnE,wFAAwF;AACxF,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC3D,8CAA8C;IAC9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAcpF"}
@@ -0,0 +1,27 @@
1
+ // The SQLite telemetry store read-only, on Node (`@earendil-works/chord/telemetry-sqlite/node`): a store file that
2
+ // recorders of other processes write, opened for its reads (`TelemetryStore`) only.
3
+ import { openNodeSqliteDatabase } from "../sqlite/node.js";
4
+ import { assertTelemetryStore } from "./schema.js";
5
+ import { findMetrics, findTraces, getTrace } from "./store.js";
6
+ /**
7
+ * Opens the telemetry store at `path` read-only (SQLite's read-only mode: it never writes the file, never migrates it,
8
+ * never creates it), while recorders of other processes write it or after. Rejects for a file that holds no store or
9
+ * a store of another version (a recorder, `createSqliteTelemetry`, migrates an older one).
10
+ */
11
+ export async function openTelemetryStore(path) {
12
+ const db = await openNodeSqliteDatabase(path, { mode: "read-only" });
13
+ try {
14
+ await assertTelemetryStore(db);
15
+ }
16
+ catch (error) {
17
+ await db.close();
18
+ throw error;
19
+ }
20
+ return {
21
+ getTrace: (traceId) => getTrace(db, traceId),
22
+ findTraces: (query) => findTraces(db, query),
23
+ findMetrics: (query) => findMetrics(db, query),
24
+ close: () => db.close(),
25
+ };
26
+ }
27
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/telemetry-sqlite/node.ts"],"names":[],"mappings":"AAAA,mHAAmH;AACnH,oFAAoF;AAGpF,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQ/D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY;IACpD,MAAM,EAAE,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IACrE,IAAI,CAAC;QACJ,MAAM,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,KAAK,CAAC;IACb,CAAC;IACD,OAAO;QACN,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;QAC5C,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC;QAC5C,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC;QAC9C,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE;KACvB,CAAC;AACH,CAAC","sourcesContent":["// The SQLite telemetry store read-only, on Node (`@earendil-works/chord/telemetry-sqlite/node`): a store file that\n// recorders of other processes write, opened for its reads (`TelemetryStore`) only.\n\nimport type { TelemetryStore } from \"@earendil-works/pi-telemetry\";\nimport { openNodeSqliteDatabase } from \"../sqlite/node.ts\";\nimport { assertTelemetryStore } from \"./schema.ts\";\nimport { findMetrics, findTraces, getTrace } from \"./store.ts\";\n\n/** A telemetry store opened for reads: the store's reads, and the close of its file. */\nexport interface SqliteTelemetryStore extends TelemetryStore {\n\t/** Closes the file; reads after it reject. */\n\tclose(): Promise<void>;\n}\n\n/**\n * Opens the telemetry store at `path` read-only (SQLite's read-only mode: it never writes the file, never migrates it,\n * never creates it), while recorders of other processes write it or after. Rejects for a file that holds no store or\n * a store of another version (a recorder, `createSqliteTelemetry`, migrates an older one).\n */\nexport async function openTelemetryStore(path: string): Promise<SqliteTelemetryStore> {\n\tconst db = await openNodeSqliteDatabase(path, { mode: \"read-only\" });\n\ttry {\n\t\tawait assertTelemetryStore(db);\n\t} catch (error) {\n\t\tawait db.close();\n\t\tthrow error;\n\t}\n\treturn {\n\t\tgetTrace: (traceId) => getTrace(db, traceId),\n\t\tfindTraces: (query) => findTraces(db, query),\n\t\tfindMetrics: (query) => findMetrics(db, query),\n\t\tclose: () => db.close(),\n\t};\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import { type SqliteDatabase } from "../sqlite/index.ts";
2
+ /** Brings the store in `db` to this version (made when absent; one of an older version migrated, its rows kept). */
3
+ export declare function migrateTelemetryStore(db: SqliteDatabase): Promise<void>;
4
+ /**
5
+ * Throws unless `db` holds a store of this version: a reader cannot migrate (a recorder of this version, opened on the
6
+ * file once, does).
7
+ */
8
+ export declare function assertTelemetryStore(db: SqliteDatabase): Promise<void>;
9
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/telemetry-sqlite/schema.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyB,KAAK,cAAc,EAAwB,MAAM,oBAAoB,CAAC;AAuCtG,oHAAoH;AACpH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvE;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB5E"}
@@ -0,0 +1,61 @@
1
+ // The SQLite telemetry store's tables and their versions: the migrations a recorder applies, and the check a reader
2
+ // makes that a file holds a store of this version.
3
+ import { applySqliteMigrations } from "../sqlite/index.js";
4
+ /** The table that records the store's version. */
5
+ const VERSION_TABLE = "telemetry_schema";
6
+ /**
7
+ * The store's versions. 1: spans with their start and end in milliseconds (`started_ms`, `ended_ms`, whole
8
+ * milliseconds at the start); 2: in whole microseconds (`started_us`, `ended_us`, integers), the rows of 1 kept,
9
+ * their times multiplied.
10
+ */
11
+ const MIGRATIONS = [
12
+ {
13
+ version: 1,
14
+ statements: [
15
+ `CREATE TABLE telemetry_spans (id TEXT PRIMARY KEY, trace_id TEXT NOT NULL, parent_id TEXT, name TEXT, started_ms REAL,
16
+ ended_ms REAL NOT NULL, attributes TEXT, events TEXT, links TEXT, status TEXT)`,
17
+ "CREATE INDEX telemetry_spans_ended_ms ON telemetry_spans(ended_ms)",
18
+ "CREATE INDEX telemetry_spans_trace_started ON telemetry_spans(trace_id, started_ms)",
19
+ "CREATE INDEX telemetry_spans_started_ms ON telemetry_spans(started_ms)",
20
+ `CREATE TABLE telemetry_metrics (interval_ms INTEGER, series_key TEXT, name TEXT, kind TEXT,
21
+ unit TEXT, attributes TEXT, count INTEGER, sum REAL, min REAL, max REAL, PRIMARY KEY(interval_ms, series_key))`,
22
+ ],
23
+ },
24
+ {
25
+ version: 2,
26
+ statements: [
27
+ `CREATE TABLE telemetry_spans_us (id TEXT PRIMARY KEY, trace_id TEXT NOT NULL, parent_id TEXT, name TEXT,
28
+ started_us INTEGER, ended_us INTEGER NOT NULL, attributes TEXT, events TEXT, links TEXT, status TEXT)`,
29
+ `INSERT INTO telemetry_spans_us SELECT id, trace_id, parent_id, name, CAST(round(started_ms * 1000) AS INTEGER),
30
+ CAST(round(ended_ms * 1000) AS INTEGER), attributes, events, links, status FROM telemetry_spans`,
31
+ "DROP TABLE telemetry_spans",
32
+ "ALTER TABLE telemetry_spans_us RENAME TO telemetry_spans",
33
+ "CREATE INDEX telemetry_spans_ended_us ON telemetry_spans(ended_us)",
34
+ "CREATE INDEX telemetry_spans_trace_started ON telemetry_spans(trace_id, started_us)",
35
+ "CREATE INDEX telemetry_spans_started_us ON telemetry_spans(started_us)",
36
+ ],
37
+ },
38
+ ];
39
+ /** Brings the store in `db` to this version (made when absent; one of an older version migrated, its rows kept). */
40
+ export function migrateTelemetryStore(db) {
41
+ return applySqliteMigrations(db, MIGRATIONS, { table: VERSION_TABLE });
42
+ }
43
+ /**
44
+ * Throws unless `db` holds a store of this version: a reader cannot migrate (a recorder of this version, opened on the
45
+ * file once, does).
46
+ */
47
+ export async function assertTelemetryStore(db) {
48
+ const expected = MIGRATIONS.at(-1).version;
49
+ // The file is the trust boundary here: any file may be named, a store or not.
50
+ const tables = await db.all("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?", VERSION_TABLE);
51
+ if (tables.length === 0)
52
+ throw new Error("not a telemetry store: no telemetry_schema table");
53
+ const row = await db.get(`SELECT version FROM ${VERSION_TABLE} WHERE singleton = 1`);
54
+ const version = row?.version ?? 0;
55
+ if (version > expected)
56
+ throw new Error(`telemetry store version ${version} is newer than this reader's ${expected}`);
57
+ if (version < expected) {
58
+ throw new Error(`telemetry store version ${version}, not ${expected}: a recorder (createSqliteTelemetry) migrates it`);
59
+ }
60
+ }
61
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/telemetry-sqlite/schema.ts"],"names":[],"mappings":"AAAA,oHAAoH;AACpH,mDAAmD;AAEnD,OAAO,EAAE,qBAAqB,EAA6C,MAAM,oBAAoB,CAAC;AAEtG,kDAAkD;AAClD,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAEzC;;;;GAIG;AACH,MAAM,UAAU,GAA+B;IAC9C;QACC,OAAO,EAAE,CAAC;QACV,UAAU,EAAE;YACX;kFAC+E;YAC/E,oEAAoE;YACpE,qFAAqF;YACrF,wEAAwE;YACxE;kHAC+G;SAC/G;KACD;IACD;QACC,OAAO,EAAE,CAAC;QACV,UAAU,EAAE;YACX;yGACsG;YACtG;mGACgG;YAChG,4BAA4B;YAC5B,0DAA0D;YAC1D,oEAAoE;YACpE,qFAAqF;YACrF,wEAAwE;SACxE;KACD;CACD,CAAC;AAEF,oHAAoH;AACpH,MAAM,UAAU,qBAAqB,CAAC,EAAkB;IACvD,OAAO,qBAAqB,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,EAAkB;IAC5D,MAAM,QAAQ,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC;IAC5C,8EAA8E;IAC9E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,CAC1B,kEAAkE,EAClE,aAAa,CACb,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAC7F,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,GAAG,CAAsB,uBAAuB,aAAa,sBAAsB,CAAC,CAAC;IAC1G,MAAM,OAAO,GAAG,GAAG,EAAE,OAAO,IAAI,CAAC,CAAC;IAClC,IAAI,OAAO,GAAG,QAAQ;QACrB,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,gCAAgC,QAAQ,EAAE,CAAC,CAAC;IAC/F,IAAI,OAAO,GAAG,QAAQ,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACd,2BAA2B,OAAO,SAAS,QAAQ,kDAAkD,CACrG,CAAC;IACH,CAAC;AACF,CAAC","sourcesContent":["// The SQLite telemetry store's tables and their versions: the migrations a recorder applies, and the check a reader\n// makes that a file holds a store of this version.\n\nimport { applySqliteMigrations, type SqliteDatabase, type SqliteMigration } from \"../sqlite/index.ts\";\n\n/** The table that records the store's version. */\nconst VERSION_TABLE = \"telemetry_schema\";\n\n/**\n * The store's versions. 1: spans with their start and end in milliseconds (`started_ms`, `ended_ms`, whole\n * milliseconds at the start); 2: in whole microseconds (`started_us`, `ended_us`, integers), the rows of 1 kept,\n * their times multiplied.\n */\nconst MIGRATIONS: readonly SqliteMigration[] = [\n\t{\n\t\tversion: 1,\n\t\tstatements: [\n\t\t\t`CREATE TABLE telemetry_spans (id TEXT PRIMARY KEY, trace_id TEXT NOT NULL, parent_id TEXT, name TEXT, started_ms REAL,\n\t\t\tended_ms REAL NOT NULL, attributes TEXT, events TEXT, links TEXT, status TEXT)`,\n\t\t\t\"CREATE INDEX telemetry_spans_ended_ms ON telemetry_spans(ended_ms)\",\n\t\t\t\"CREATE INDEX telemetry_spans_trace_started ON telemetry_spans(trace_id, started_ms)\",\n\t\t\t\"CREATE INDEX telemetry_spans_started_ms ON telemetry_spans(started_ms)\",\n\t\t\t`CREATE TABLE telemetry_metrics (interval_ms INTEGER, series_key TEXT, name TEXT, kind TEXT,\n\t\t\tunit TEXT, attributes TEXT, count INTEGER, sum REAL, min REAL, max REAL, PRIMARY KEY(interval_ms, series_key))`,\n\t\t],\n\t},\n\t{\n\t\tversion: 2,\n\t\tstatements: [\n\t\t\t`CREATE TABLE telemetry_spans_us (id TEXT PRIMARY KEY, trace_id TEXT NOT NULL, parent_id TEXT, name TEXT,\n\t\t\tstarted_us INTEGER, ended_us INTEGER NOT NULL, attributes TEXT, events TEXT, links TEXT, status TEXT)`,\n\t\t\t`INSERT INTO telemetry_spans_us SELECT id, trace_id, parent_id, name, CAST(round(started_ms * 1000) AS INTEGER),\n\t\t\tCAST(round(ended_ms * 1000) AS INTEGER), attributes, events, links, status FROM telemetry_spans`,\n\t\t\t\"DROP TABLE telemetry_spans\",\n\t\t\t\"ALTER TABLE telemetry_spans_us RENAME TO telemetry_spans\",\n\t\t\t\"CREATE INDEX telemetry_spans_ended_us ON telemetry_spans(ended_us)\",\n\t\t\t\"CREATE INDEX telemetry_spans_trace_started ON telemetry_spans(trace_id, started_us)\",\n\t\t\t\"CREATE INDEX telemetry_spans_started_us ON telemetry_spans(started_us)\",\n\t\t],\n\t},\n];\n\n/** Brings the store in `db` to this version (made when absent; one of an older version migrated, its rows kept). */\nexport function migrateTelemetryStore(db: SqliteDatabase): Promise<void> {\n\treturn applySqliteMigrations(db, MIGRATIONS, { table: VERSION_TABLE });\n}\n\n/**\n * Throws unless `db` holds a store of this version: a reader cannot migrate (a recorder of this version, opened on the\n * file once, does).\n */\nexport async function assertTelemetryStore(db: SqliteDatabase): Promise<void> {\n\tconst expected = MIGRATIONS.at(-1)!.version;\n\t// The file is the trust boundary here: any file may be named, a store or not.\n\tconst tables = await db.all<{ name: string }>(\n\t\t\"SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?\",\n\t\tVERSION_TABLE,\n\t);\n\tif (tables.length === 0) throw new Error(\"not a telemetry store: no telemetry_schema table\");\n\tconst row = await db.get<{ version: number }>(`SELECT version FROM ${VERSION_TABLE} WHERE singleton = 1`);\n\tconst version = row?.version ?? 0;\n\tif (version > expected)\n\t\tthrow new Error(`telemetry store version ${version} is newer than this reader's ${expected}`);\n\tif (version < expected) {\n\t\tthrow new Error(\n\t\t\t`telemetry store version ${version}, not ${expected}: a recorder (createSqliteTelemetry) migrates it`,\n\t\t);\n\t}\n}\n"]}
@@ -1,9 +1,12 @@
1
1
  import type { MetricQuery, StoredMetric, StoredTrace, TraceQuery } from "@earendil-works/pi-telemetry";
2
2
  import type { SqliteDatabase } from "../sqlite/index.ts";
3
+ /** The spans of trace `traceId` in start order; `undefined` when none is stored. */
3
4
  export declare function getTrace(db: SqliteDatabase, traceId: string): Promise<StoredTrace | undefined>;
5
+ /** Complete traces matching `query`, newest first, paged by an opaque cursor. */
4
6
  export declare function findTraces(db: SqliteDatabase, query?: TraceQuery): Promise<{
5
7
  traces: readonly StoredTrace[];
6
8
  cursor?: string;
7
9
  }>;
10
+ /** The stored metric rows (per series and 10 s interval) matching `query`. */
8
11
  export declare function findMetrics(db: SqliteDatabase, query: MetricQuery): Promise<readonly StoredMetric[]>;
9
12
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/telemetry-sqlite/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,WAAW,EAGX,YAAY,EAEZ,WAAW,EACX,UAAU,EACV,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,oBAAoB,CAAC;AAwDtE,wBAAsB,QAAQ,CAAC,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAMpG;AAED,wBAAsB,UAAU,CAC/B,EAAE,EAAE,cAAc,EAClB,KAAK,GAAE,UAAe,GACpB,OAAO,CAAC;IAAE,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA0D9D;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAkC1G"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/telemetry-sqlite/store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACX,WAAW,EAGX,YAAY,EAEZ,WAAW,EACX,UAAU,EACV,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,oBAAoB,CAAC;AA+DtE,oFAAoF;AACpF,wBAAsB,QAAQ,CAAC,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAMpG;AAED,iFAAiF;AACjF,wBAAsB,UAAU,CAC/B,EAAE,EAAE,cAAc,EAClB,KAAK,GAAE,UAAe,GACpB,OAAO,CAAC;IAAE,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA0D9D;AAED,8EAA8E;AAC9E,wBAAsB,WAAW,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAkC1G"}