@agentshouse/mdruntime 0.1.0-cd50a4607cb7d → 0.1.0-cd574a610e9c8

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 (401) hide show
  1. package/README.md +24 -19
  2. package/dist/acceptance.d.ts +3 -0
  3. package/dist/acceptance.d.ts.map +1 -0
  4. package/dist/acceptance.js +299 -0
  5. package/dist/act-lanes.d.ts +30 -0
  6. package/dist/act-lanes.d.ts.map +1 -0
  7. package/dist/act-lanes.js +225 -0
  8. package/dist/actions.d.ts +26 -0
  9. package/dist/actions.d.ts.map +1 -0
  10. package/dist/actions.js +302 -0
  11. package/dist/adapter.d.ts +226 -117
  12. package/dist/adapter.d.ts.map +1 -1
  13. package/dist/attached-model.d.ts +6 -10
  14. package/dist/attached-model.d.ts.map +1 -1
  15. package/dist/attached-model.js +35 -41
  16. package/dist/authored.d.ts +88 -0
  17. package/dist/authored.d.ts.map +1 -0
  18. package/dist/authored.js +345 -0
  19. package/dist/binary.d.ts +0 -5
  20. package/dist/binary.d.ts.map +1 -1
  21. package/dist/binary.js +1 -1
  22. package/dist/bootstrap.d.ts +31 -11
  23. package/dist/bootstrap.d.ts.map +1 -1
  24. package/dist/bootstrap.js +309 -109
  25. package/dist/cell.d.ts +6 -0
  26. package/dist/cell.d.ts.map +1 -0
  27. package/dist/cell.js +9 -0
  28. package/dist/chain.d.ts +12 -0
  29. package/dist/chain.d.ts.map +1 -0
  30. package/dist/chain.js +64 -0
  31. package/dist/change-set.d.ts +13 -16
  32. package/dist/change-set.d.ts.map +1 -1
  33. package/dist/change-set.js +17 -88
  34. package/dist/change.d.ts +36 -1
  35. package/dist/change.d.ts.map +1 -1
  36. package/dist/change.js +17 -3
  37. package/dist/chat-types.d.ts +3 -0
  38. package/dist/chat-types.d.ts.map +1 -0
  39. package/dist/chat-types.js +11 -0
  40. package/dist/client.d.ts +45 -25
  41. package/dist/client.d.ts.map +1 -1
  42. package/dist/client.js +132 -27
  43. package/dist/collection.d.ts +32 -21
  44. package/dist/collection.d.ts.map +1 -1
  45. package/dist/collection.js +53 -288
  46. package/dist/column.d.ts +5 -0
  47. package/dist/column.d.ts.map +1 -0
  48. package/dist/column.js +9 -0
  49. package/dist/compile.d.ts +18 -0
  50. package/dist/compile.d.ts.map +1 -0
  51. package/dist/compile.js +723 -0
  52. package/dist/connection.d.ts +7 -118
  53. package/dist/connection.d.ts.map +1 -1
  54. package/dist/connection.js +111 -2975
  55. package/dist/context.d.ts +2 -0
  56. package/dist/context.d.ts.map +1 -0
  57. package/dist/{chat/context.js → context.js} +2 -5
  58. package/dist/conversation-live.d.ts +150 -0
  59. package/dist/conversation-live.d.ts.map +1 -0
  60. package/dist/conversation-live.js +259 -0
  61. package/dist/conversation-row.d.ts +40 -0
  62. package/dist/conversation-row.d.ts.map +1 -0
  63. package/dist/conversation-row.js +66 -0
  64. package/dist/conversation.d.ts +85 -48
  65. package/dist/conversation.d.ts.map +1 -1
  66. package/dist/conversation.js +1095 -688
  67. package/dist/declaration.d.ts +10 -0
  68. package/dist/declaration.d.ts.map +1 -0
  69. package/dist/declaration.js +24 -0
  70. package/dist/digest.d.ts +7 -0
  71. package/dist/digest.d.ts.map +1 -0
  72. package/dist/digest.js +113 -0
  73. package/dist/discovery.d.ts +10 -0
  74. package/dist/discovery.d.ts.map +1 -0
  75. package/dist/discovery.js +150 -0
  76. package/dist/durability.d.ts +23 -1
  77. package/dist/durability.d.ts.map +1 -1
  78. package/dist/durability.js +9 -0
  79. package/dist/entry.d.ts +5 -2
  80. package/dist/entry.d.ts.map +1 -1
  81. package/dist/entry.js +33 -28
  82. package/dist/expectation.d.ts +26 -13
  83. package/dist/expectation.d.ts.map +1 -1
  84. package/dist/expectation.js +72 -19
  85. package/dist/failure.d.ts +3 -0
  86. package/dist/failure.d.ts.map +1 -1
  87. package/dist/failure.js +6 -0
  88. package/dist/figures.d.ts +49 -0
  89. package/dist/figures.d.ts.map +1 -0
  90. package/dist/figures.js +199 -0
  91. package/dist/file.d.ts +2 -19
  92. package/dist/file.d.ts.map +1 -1
  93. package/dist/file.js +8 -122
  94. package/dist/holdings.d.ts +29 -0
  95. package/dist/holdings.d.ts.map +1 -0
  96. package/dist/holdings.js +95 -0
  97. package/dist/host.d.ts +27 -4
  98. package/dist/host.d.ts.map +1 -1
  99. package/dist/host.js +177 -27
  100. package/dist/identity.d.ts +0 -2
  101. package/dist/identity.d.ts.map +1 -1
  102. package/dist/identity.js +0 -6
  103. package/dist/index.d.ts +41 -14
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.js +19 -3
  106. package/dist/install.d.ts +60 -0
  107. package/dist/install.d.ts.map +1 -0
  108. package/dist/install.js +537 -0
  109. package/dist/lifecycle.d.ts +7 -0
  110. package/dist/lifecycle.d.ts.map +1 -0
  111. package/dist/lifecycle.js +282 -0
  112. package/dist/listing.d.ts +52 -0
  113. package/dist/listing.d.ts.map +1 -0
  114. package/dist/listing.js +152 -0
  115. package/dist/live.d.ts +25 -0
  116. package/dist/live.d.ts.map +1 -0
  117. package/dist/live.js +206 -0
  118. package/dist/loaded.d.ts +5 -0
  119. package/dist/loaded.d.ts.map +1 -0
  120. package/dist/loaded.js +40 -0
  121. package/dist/locks.d.ts +7 -0
  122. package/dist/locks.d.ts.map +1 -0
  123. package/dist/locks.js +32 -0
  124. package/dist/lost.d.ts +5 -0
  125. package/dist/lost.d.ts.map +1 -0
  126. package/dist/lost.js +49 -0
  127. package/dist/media.d.ts +13 -0
  128. package/dist/media.d.ts.map +1 -0
  129. package/dist/media.js +269 -0
  130. package/dist/memory.d.ts +25 -7
  131. package/dist/memory.d.ts.map +1 -1
  132. package/dist/memory.js +320 -110
  133. package/dist/messages.d.ts +58 -0
  134. package/dist/messages.d.ts.map +1 -0
  135. package/dist/messages.js +160 -0
  136. package/dist/model.d.ts +11 -13
  137. package/dist/model.d.ts.map +1 -1
  138. package/dist/model.js +7 -24
  139. package/dist/models.d.ts +10 -0
  140. package/dist/models.d.ts.map +1 -0
  141. package/dist/models.js +153 -0
  142. package/dist/name.d.ts +4 -0
  143. package/dist/name.d.ts.map +1 -0
  144. package/dist/name.js +122 -0
  145. package/dist/observation.d.ts +40 -10
  146. package/dist/observation.d.ts.map +1 -1
  147. package/dist/observation.js +233 -39
  148. package/dist/opened.d.ts +22 -0
  149. package/dist/opened.d.ts.map +1 -0
  150. package/dist/opened.js +107 -0
  151. package/dist/opening.d.ts +4 -0
  152. package/dist/opening.d.ts.map +1 -0
  153. package/dist/opening.js +53 -0
  154. package/dist/outcome.d.ts +62 -9
  155. package/dist/outcome.d.ts.map +1 -1
  156. package/dist/outcome.js +72 -0
  157. package/dist/overlay.d.ts +9 -6
  158. package/dist/overlay.d.ts.map +1 -1
  159. package/dist/overlay.js +129 -166
  160. package/dist/page-metadata.d.ts +8 -0
  161. package/dist/page-metadata.d.ts.map +1 -0
  162. package/dist/page-metadata.js +19 -0
  163. package/dist/parts.d.ts +4 -0
  164. package/dist/parts.d.ts.map +1 -0
  165. package/dist/parts.js +13 -0
  166. package/dist/paths.d.ts +2 -0
  167. package/dist/paths.d.ts.map +1 -1
  168. package/dist/paths.js +26 -0
  169. package/dist/preparation.d.ts +41 -0
  170. package/dist/preparation.d.ts.map +1 -0
  171. package/dist/preparation.js +314 -0
  172. package/dist/presence.d.ts +58 -0
  173. package/dist/presence.d.ts.map +1 -0
  174. package/dist/presence.js +231 -0
  175. package/dist/queries.d.ts +16 -0
  176. package/dist/queries.d.ts.map +1 -0
  177. package/dist/queries.js +308 -0
  178. package/dist/query.d.ts +27 -186
  179. package/dist/query.d.ts.map +1 -1
  180. package/dist/query.js +3 -464
  181. package/dist/{chat/questions.d.ts → questions.d.ts} +6 -7
  182. package/dist/questions.d.ts.map +1 -0
  183. package/dist/{chat/questions.js → questions.js} +12 -7
  184. package/dist/queue.d.ts +40 -0
  185. package/dist/queue.d.ts.map +1 -0
  186. package/dist/queue.js +480 -0
  187. package/dist/reach.d.ts +20 -7
  188. package/dist/reach.d.ts.map +1 -1
  189. package/dist/reach.js +360 -98
  190. package/dist/react.d.ts +22 -5
  191. package/dist/react.d.ts.map +1 -1
  192. package/dist/react.js +40 -18
  193. package/dist/{chat/read.d.ts → read.d.ts} +2 -0
  194. package/dist/read.d.ts.map +1 -0
  195. package/dist/{chat/read.js → read.js} +4 -0
  196. package/dist/readiness.d.ts +55 -0
  197. package/dist/readiness.d.ts.map +1 -0
  198. package/dist/readiness.js +25 -0
  199. package/dist/reads.d.ts +39 -0
  200. package/dist/reads.d.ts.map +1 -0
  201. package/dist/reads.js +178 -0
  202. package/dist/recovery.d.ts +5 -2
  203. package/dist/recovery.d.ts.map +1 -1
  204. package/dist/recovery.js +65 -8
  205. package/dist/refresh.d.ts +17 -14
  206. package/dist/refresh.d.ts.map +1 -1
  207. package/dist/refresh.js +145 -54
  208. package/dist/refusal.d.ts +5 -0
  209. package/dist/refusal.d.ts.map +1 -0
  210. package/dist/refusal.js +55 -0
  211. package/dist/replica.d.ts +50 -33
  212. package/dist/replica.d.ts.map +1 -1
  213. package/dist/replica.js +340 -191
  214. package/dist/retried.d.ts +30 -0
  215. package/dist/retried.d.ts.map +1 -0
  216. package/dist/retried.js +72 -0
  217. package/dist/room-draft.d.ts +66 -12
  218. package/dist/room-draft.d.ts.map +1 -1
  219. package/dist/room-draft.js +416 -122
  220. package/dist/room-drafts.d.ts +24 -0
  221. package/dist/room-drafts.d.ts.map +1 -0
  222. package/dist/room-drafts.js +220 -0
  223. package/dist/room-list.d.ts +10 -0
  224. package/dist/room-list.d.ts.map +1 -0
  225. package/dist/room-list.js +45 -0
  226. package/dist/rows.d.ts +32 -29
  227. package/dist/rows.d.ts.map +1 -1
  228. package/dist/rows.js +60 -118
  229. package/dist/runtime.d.ts +34 -0
  230. package/dist/runtime.d.ts.map +1 -0
  231. package/dist/runtime.js +1 -0
  232. package/dist/save.d.ts +43 -48
  233. package/dist/save.d.ts.map +1 -1
  234. package/dist/save.js +751 -303
  235. package/dist/saves.d.ts +34 -0
  236. package/dist/saves.d.ts.map +1 -0
  237. package/dist/saves.js +437 -0
  238. package/dist/search.d.ts +15 -77
  239. package/dist/search.d.ts.map +1 -1
  240. package/dist/search.js +10 -186
  241. package/dist/seed.d.ts +25 -0
  242. package/dist/seed.d.ts.map +1 -0
  243. package/dist/seed.js +145 -0
  244. package/dist/shared.d.ts +6 -7
  245. package/dist/shared.d.ts.map +1 -1
  246. package/dist/shared.js +75 -104
  247. package/dist/shown.d.ts +33 -0
  248. package/dist/shown.d.ts.map +1 -0
  249. package/dist/shown.js +309 -0
  250. package/dist/socket/admission.d.ts +7 -0
  251. package/dist/socket/admission.d.ts.map +1 -0
  252. package/dist/socket/admission.js +39 -0
  253. package/dist/socket/answers.d.ts +6 -0
  254. package/dist/socket/answers.d.ts.map +1 -0
  255. package/dist/socket/answers.js +20 -0
  256. package/dist/socket/lanes.d.ts +28 -0
  257. package/dist/socket/lanes.d.ts.map +1 -0
  258. package/dist/socket/lanes.js +103 -0
  259. package/dist/socket/reads.d.ts +10 -0
  260. package/dist/socket/reads.d.ts.map +1 -0
  261. package/dist/socket/reads.js +31 -0
  262. package/dist/socket/session.d.ts +38 -0
  263. package/dist/socket/session.d.ts.map +1 -0
  264. package/dist/socket/session.js +23 -0
  265. package/dist/socket.d.ts +67 -0
  266. package/dist/socket.d.ts.map +1 -0
  267. package/dist/socket.js +164 -0
  268. package/dist/source.d.ts +59 -0
  269. package/dist/source.d.ts.map +1 -0
  270. package/dist/source.js +93 -0
  271. package/dist/status.d.ts +4 -5
  272. package/dist/status.d.ts.map +1 -1
  273. package/dist/status.js +3 -7
  274. package/dist/store/installs.d.ts +30 -0
  275. package/dist/store/installs.d.ts.map +1 -0
  276. package/dist/store/installs.js +40 -0
  277. package/dist/store/readiness.d.ts +11 -0
  278. package/dist/store/readiness.d.ts.map +1 -0
  279. package/dist/store/readiness.js +68 -0
  280. package/dist/store/records.d.ts +223 -0
  281. package/dist/store/records.d.ts.map +1 -0
  282. package/dist/store/records.js +465 -0
  283. package/dist/store/room-held.d.ts +8 -0
  284. package/dist/store/room-held.d.ts.map +1 -0
  285. package/dist/store/room-held.js +17 -0
  286. package/dist/store/rooms-shown.d.ts +8 -0
  287. package/dist/store/rooms-shown.d.ts.map +1 -0
  288. package/dist/store/rooms-shown.js +13 -0
  289. package/dist/store/space.d.ts +11 -0
  290. package/dist/store/space.d.ts.map +1 -0
  291. package/dist/store/space.js +41 -0
  292. package/dist/store/watchers.d.ts +17 -0
  293. package/dist/store/watchers.d.ts.map +1 -0
  294. package/dist/store/watchers.js +56 -0
  295. package/dist/store/writes.d.ts +24 -0
  296. package/dist/store/writes.d.ts.map +1 -0
  297. package/dist/store/writes.js +125 -0
  298. package/dist/store.d.ts +114 -141
  299. package/dist/store.d.ts.map +1 -1
  300. package/dist/store.js +163 -687
  301. package/dist/stored.d.ts +167 -0
  302. package/dist/stored.d.ts.map +1 -0
  303. package/dist/stored.js +700 -0
  304. package/dist/surface.d.ts +90 -0
  305. package/dist/surface.d.ts.map +1 -0
  306. package/dist/surface.js +225 -0
  307. package/dist/sync.d.ts +19 -0
  308. package/dist/sync.d.ts.map +1 -0
  309. package/dist/sync.js +536 -0
  310. package/dist/tables.d.ts +376 -0
  311. package/dist/tables.d.ts.map +1 -0
  312. package/dist/tables.js +499 -0
  313. package/dist/tallies.d.ts +18 -0
  314. package/dist/tallies.d.ts.map +1 -0
  315. package/dist/tallies.js +128 -0
  316. package/dist/transfer.d.ts +0 -5
  317. package/dist/transfer.d.ts.map +1 -1
  318. package/dist/turn.d.ts +5 -3
  319. package/dist/turn.d.ts.map +1 -1
  320. package/dist/turn.js +51 -21
  321. package/dist/validation.d.ts +29 -0
  322. package/dist/validation.d.ts.map +1 -0
  323. package/dist/validation.js +98 -0
  324. package/dist/windows.d.ts +11 -0
  325. package/dist/windows.d.ts.map +1 -0
  326. package/dist/windows.js +16 -0
  327. package/dist/wire.d.ts +230 -36
  328. package/dist/wire.d.ts.map +1 -1
  329. package/dist/wire.js +77 -33
  330. package/package.json +19 -19
  331. package/AGENTS.md +0 -296
  332. package/dist/attempt.d.ts +0 -16
  333. package/dist/attempt.d.ts.map +0 -1
  334. package/dist/attempt.js +0 -70
  335. package/dist/chat/acts.d.ts +0 -33
  336. package/dist/chat/acts.d.ts.map +0 -1
  337. package/dist/chat/acts.js +0 -36
  338. package/dist/chat/context.d.ts +0 -3
  339. package/dist/chat/context.d.ts.map +0 -1
  340. package/dist/chat/input.d.ts +0 -9
  341. package/dist/chat/input.d.ts.map +0 -1
  342. package/dist/chat/input.js +0 -99
  343. package/dist/chat/kit.d.ts +0 -60
  344. package/dist/chat/kit.d.ts.map +0 -1
  345. package/dist/chat/kit.js +0 -123
  346. package/dist/chat/lasting.d.ts +0 -6
  347. package/dist/chat/lasting.d.ts.map +0 -1
  348. package/dist/chat/lasting.js +0 -19
  349. package/dist/chat/list.d.ts +0 -26
  350. package/dist/chat/list.d.ts.map +0 -1
  351. package/dist/chat/list.js +0 -62
  352. package/dist/chat/markdown.d.ts +0 -20
  353. package/dist/chat/markdown.d.ts.map +0 -1
  354. package/dist/chat/markdown.js +0 -188
  355. package/dist/chat/message.d.ts +0 -6
  356. package/dist/chat/message.d.ts.map +0 -1
  357. package/dist/chat/message.js +0 -192
  358. package/dist/chat/messages.d.ts +0 -21
  359. package/dist/chat/messages.d.ts.map +0 -1
  360. package/dist/chat/messages.js +0 -151
  361. package/dist/chat/name.d.ts +0 -6
  362. package/dist/chat/name.d.ts.map +0 -1
  363. package/dist/chat/name.js +0 -37
  364. package/dist/chat/opened.d.ts +0 -11
  365. package/dist/chat/opened.d.ts.map +0 -1
  366. package/dist/chat/opened.js +0 -17
  367. package/dist/chat/overlay.d.ts +0 -31
  368. package/dist/chat/overlay.d.ts.map +0 -1
  369. package/dist/chat/overlay.js +0 -97
  370. package/dist/chat/parts.d.ts +0 -57
  371. package/dist/chat/parts.d.ts.map +0 -1
  372. package/dist/chat/parts.js +0 -119
  373. package/dist/chat/process.d.ts +0 -20
  374. package/dist/chat/process.d.ts.map +0 -1
  375. package/dist/chat/process.js +0 -32
  376. package/dist/chat/provider.d.ts +0 -63
  377. package/dist/chat/provider.d.ts.map +0 -1
  378. package/dist/chat/provider.js +0 -620
  379. package/dist/chat/question.d.ts +0 -9
  380. package/dist/chat/question.d.ts.map +0 -1
  381. package/dist/chat/question.js +0 -80
  382. package/dist/chat/questions.d.ts.map +0 -1
  383. package/dist/chat/read.d.ts.map +0 -1
  384. package/dist/chat/ready.d.ts +0 -33
  385. package/dist/chat/ready.d.ts.map +0 -1
  386. package/dist/chat/ready.js +0 -91
  387. package/dist/chat/style.d.ts +0 -4
  388. package/dist/chat/style.d.ts.map +0 -1
  389. package/dist/chat/style.js +0 -302
  390. package/dist/chat.d.ts +0 -14
  391. package/dist/chat.d.ts.map +0 -1
  392. package/dist/chat.js +0 -8
  393. package/dist/fence.d.ts +0 -6
  394. package/dist/fence.d.ts.map +0 -1
  395. package/dist/fence.js +0 -10
  396. package/dist/log.d.ts +0 -5
  397. package/dist/log.d.ts.map +0 -1
  398. package/dist/log.js +0 -14
  399. package/dist/read-side.d.ts +0 -25
  400. package/dist/read-side.d.ts.map +0 -1
  401. package/dist/read-side.js +0 -639
@@ -0,0 +1,67 @@
1
+ import type { Adapter, Authorization, ConversationEvent, Discovery, HeldRoom, RoomStreamEvent, ServiceMode } from './adapter.js';
2
+ import type { Reads } from './bootstrap.js';
3
+ import type { Cell } from './cell.js';
4
+ import type { Retries } from './retried.js';
5
+ import { type Admission } from './socket/admission.js';
6
+ import { type Answers } from './socket/answers.js';
7
+ import { type Lanes } from './socket/lanes.js';
8
+ import { type Session } from './socket/session.js';
9
+ export type { KeptSender, Live } from './socket/lanes.js';
10
+ export type { ConnectionRefusal, ConnectionRefusalCode, Moving, RefusalReason, } from './socket/session.js';
11
+ type SocketEvent = {
12
+ readonly kind: 'opened';
13
+ } | {
14
+ readonly kind: 'discovered';
15
+ readonly discovery: Discovery;
16
+ readonly missed: boolean;
17
+ } | {
18
+ readonly kind: 'closed';
19
+ readonly revoked: boolean;
20
+ readonly lost: boolean;
21
+ readonly opened: boolean;
22
+ } | Exclude<RoomStreamEvent, {
23
+ kind: 'opened' | 'discovered' | 'closed';
24
+ }>;
25
+ export type RuntimeSocket = Admission & Answers & {
26
+ readonly reads: Reads;
27
+ readonly streamed: boolean;
28
+ readonly session: Cell<Session>;
29
+ readonly lanes: Lanes;
30
+ readonly ready: Promise<void>;
31
+ readonly firstDiscovery: Promise<void>;
32
+ conversations(): Adapter['conversations'];
33
+ search(): Adapter['search'];
34
+ discover(authorized: Authorization): ReturnType<NonNullable<Adapter['discover']>> | undefined;
35
+ follows: Adapter['follows'];
36
+ mutate: Adapter['mutate'];
37
+ binary: Adapter['binary'];
38
+ link: Adapter['link'];
39
+ attach: Adapter['attach'];
40
+ history: Adapter['history'];
41
+ action: Adapter['action'];
42
+ authorize(): Promise<void>;
43
+ observe(listen: (event: SocketEvent) => void): void;
44
+ observeConversations(listen: (event: ConversationEvent) => void): void;
45
+ observeServiceMode(listen: (mode: ServiceMode) => void): void;
46
+ close(): void;
47
+ readyFromStore(): void;
48
+ notifyReady(): void;
49
+ closed(): boolean;
50
+ stopping(): boolean;
51
+ continuing(): boolean;
52
+ reached(): boolean;
53
+ writesHeld(): boolean;
54
+ haltedSince(opens: number): boolean;
55
+ isOpen(): boolean;
56
+ isAnnounced(): boolean;
57
+ isHanded(): boolean;
58
+ generation(): number;
59
+ naming(): boolean;
60
+ hand(rooms: readonly HeldRoom[]): void;
61
+ name(room: HeldRoom): void;
62
+ named(): void;
63
+ abortReads(): void;
64
+ stopReads(): void;
65
+ };
66
+ export declare function createSocket(adapter: Adapter, retries: Retries, authorization: Authorization | undefined): RuntimeSocket;
67
+ //# sourceMappingURL=socket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../src/socket.ts"],"names":[],"mappings":"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"}
package/dist/socket.js ADDED
@@ -0,0 +1,164 @@
1
+ import { createAdmission } from './socket/admission.js';
2
+ import { createAnswers } from './socket/answers.js';
3
+ import { createLanes } from './socket/lanes.js';
4
+ import { createReads } from './socket/reads.js';
5
+ import { createSession } from './socket/session.js';
6
+ export function createSocket(adapter, retries, authorization) {
7
+ const held = createReads(adapter);
8
+ const admission = createAdmission();
9
+ const answers = createAnswers();
10
+ const session = createSession(authorization);
11
+ let readyFromStore = () => { };
12
+ const ready = new Promise((resolve) => {
13
+ readyFromStore = resolve;
14
+ });
15
+ let notifyDiscovered = () => { };
16
+ const firstDiscovery = new Promise((resolve) => {
17
+ notifyDiscovered = resolve;
18
+ });
19
+ let withdrawStream;
20
+ let withdrawConversations;
21
+ let withdrawServiceMode;
22
+ let socketOpen = false;
23
+ let announced = false;
24
+ let missedChange = false;
25
+ let handed = false;
26
+ let naming = 0;
27
+ let generation = 0;
28
+ function closed() {
29
+ return session.now().closed;
30
+ }
31
+ function continuing() {
32
+ const { closed, paused } = session.now();
33
+ return !closed && !paused;
34
+ }
35
+ function received(event, listen) {
36
+ if (event.kind === 'opened') {
37
+ socketOpen = true;
38
+ announced = false;
39
+ handed = false;
40
+ naming = 0;
41
+ generation += 1;
42
+ listen(event);
43
+ }
44
+ else if (event.kind === 'discovered') {
45
+ if (!socketOpen)
46
+ return;
47
+ announced = true;
48
+ const missed = missedChange;
49
+ missedChange = false;
50
+ listen({ ...event, missed });
51
+ }
52
+ else if (event.kind === 'closed') {
53
+ const opened = announced;
54
+ socketOpen = false;
55
+ announced = false;
56
+ missedChange ||= event.authorityChanged;
57
+ handed = false;
58
+ naming = 0;
59
+ listen({ kind: 'closed', revoked: event.revoked, lost: event.lost, opened });
60
+ }
61
+ else
62
+ listen(event);
63
+ }
64
+ return {
65
+ ...admission,
66
+ ...answers,
67
+ reads: held.reads,
68
+ streamed: adapter.roomStream !== undefined,
69
+ session,
70
+ lanes: createLanes({
71
+ generation: () => generation,
72
+ continuing,
73
+ stopping: () => session.now().stopping,
74
+ failed: (locator, error) => retries.failed('download', locator, error),
75
+ }),
76
+ ready,
77
+ firstDiscovery,
78
+ conversations: () => adapter.conversations,
79
+ search: () => adapter.search,
80
+ discover: (authorized) => adapter.discover?.(authorized),
81
+ follows: (locator, roomVersion, next) => adapter.follows(locator, roomVersion, next),
82
+ mutate: (authorized, request, keepUpload) => adapter.mutate(authorized, request, keepUpload),
83
+ binary: (authorized, request) => adapter.binary(authorized, request),
84
+ link: (authorized, request) => adapter.link(authorized, request),
85
+ attach: (authorized, request) => adapter.attach(authorized, request),
86
+ history: (authorized, request) => adapter.history(authorized, request),
87
+ action: (authorized, request) => adapter.action(authorized, request),
88
+ async authorize() {
89
+ if (session.now().authorization !== undefined)
90
+ return;
91
+ session.set({ authorization: await adapter.authorize() });
92
+ },
93
+ observe(listen) {
94
+ const stream = adapter.roomStream;
95
+ if (stream === undefined)
96
+ return;
97
+ withdrawStream = stream.observe((event) => {
98
+ const { closed, stopping } = session.now();
99
+ if (!closed && !stopping)
100
+ received(event, listen);
101
+ });
102
+ },
103
+ observeConversations(listen) {
104
+ const stream = adapter.conversations;
105
+ if (stream === undefined)
106
+ return;
107
+ withdrawConversations = stream.observe(listen);
108
+ },
109
+ observeServiceMode(listen) {
110
+ withdrawServiceMode = adapter.serviceMode?.observe(listen);
111
+ },
112
+ close() {
113
+ session.set({ closed: true });
114
+ notifyDiscovered();
115
+ withdrawStream?.();
116
+ withdrawStream = undefined;
117
+ withdrawConversations?.();
118
+ withdrawConversations = undefined;
119
+ withdrawServiceMode?.();
120
+ },
121
+ readyFromStore: () => readyFromStore(),
122
+ notifyReady() {
123
+ notifyDiscovered();
124
+ readyFromStore();
125
+ },
126
+ closed,
127
+ stopping: () => session.now().stopping,
128
+ continuing,
129
+ reached() {
130
+ const { moving, refusal } = session.now();
131
+ return (socketOpen || !moving.providerUnreachable) && refusal === null;
132
+ },
133
+ writesHeld() {
134
+ const { serviceMode, haltedRefusal } = session.now();
135
+ return serviceMode === 'write-halted' || haltedRefusal;
136
+ },
137
+ haltedSince(opens) {
138
+ const { serviceMode, openSignals } = session.now();
139
+ if (serviceMode === 'open' && openSignals !== opens)
140
+ return false;
141
+ session.set({ haltedRefusal: true });
142
+ return true;
143
+ },
144
+ isOpen: () => socketOpen,
145
+ isAnnounced: () => announced,
146
+ isHanded: () => handed,
147
+ generation: () => generation,
148
+ naming: () => naming !== 0,
149
+ hand(rooms) {
150
+ naming += 1;
151
+ adapter.roomStream?.hold(rooms);
152
+ handed = true;
153
+ },
154
+ name(room) {
155
+ naming += 1;
156
+ adapter.roomStream?.hold([room]);
157
+ },
158
+ named() {
159
+ naming = Math.max(0, naming - 1);
160
+ },
161
+ abortReads: held.abort,
162
+ stopReads: held.stop,
163
+ };
164
+ }
@@ -0,0 +1,59 @@
1
+ export type RequestAnswer = 'at_once' | 'ask_me' | 'off';
2
+ export type HouseSource = {
3
+ readonly kind: 'request';
4
+ readonly request: string;
5
+ readonly agentFunction: RequestAgentFunction | null;
6
+ readonly requester: {
7
+ readonly name: string;
8
+ readonly room: boolean;
9
+ };
10
+ readonly room: {
11
+ readonly ref: string;
12
+ readonly handle: string;
13
+ readonly name: string;
14
+ };
15
+ readonly sent: string;
16
+ readonly instruction: string | null;
17
+ readonly answer: RequestAnswer | null;
18
+ readonly approved: string | null;
19
+ } | {
20
+ readonly kind: 'mail';
21
+ readonly request: string;
22
+ readonly room: string;
23
+ readonly report: boolean;
24
+ readonly agent: string;
25
+ readonly owner: string;
26
+ readonly approved: string | null;
27
+ readonly declined: string | null;
28
+ } | {
29
+ readonly kind: 'trigger';
30
+ readonly customer: boolean;
31
+ readonly trigger: string;
32
+ readonly room: {
33
+ readonly ref: string;
34
+ readonly name: string;
35
+ };
36
+ } | {
37
+ readonly kind: 'conversation';
38
+ readonly conversation: {
39
+ readonly id: string;
40
+ readonly name: string;
41
+ };
42
+ readonly agent: string;
43
+ } | {
44
+ readonly kind: 'declined';
45
+ readonly agent: string;
46
+ readonly owner: string;
47
+ };
48
+ export type ChatRequest = {
49
+ readonly request: string;
50
+ readonly room: string;
51
+ readonly message?: string;
52
+ };
53
+ type RequestAgentFunction = {
54
+ readonly name: string;
55
+ readonly version: number;
56
+ };
57
+ export declare function sourceOf(value: unknown, sender: string | null): HouseSource | null;
58
+ export {};
59
+ //# sourceMappingURL=source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;AAIzD,MAAM,MAAM,WAAW,GACnB;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC;IACtE,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAChE,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAElF,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AA+ChF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,CA6ClF"}
package/dist/source.js ADDED
@@ -0,0 +1,93 @@
1
+ import { record, text } from './read.js';
2
+ const ANSWERS = ['at_once', 'ask_me', 'off'];
3
+ function agentFunctionOf(value) {
4
+ if (value === null)
5
+ return null;
6
+ const agentFunction = record(value);
7
+ const name = text(agentFunction, 'name');
8
+ const version = agentFunction.version;
9
+ return name === null || typeof version !== 'number' ? undefined : { name, version };
10
+ }
11
+ function answerOf(value) {
12
+ return ANSWERS.find((one) => one === value) ?? null;
13
+ }
14
+ function requestOf(source) {
15
+ const request = text(source, 'request');
16
+ const agentFunction = agentFunctionOf(source.agent_function);
17
+ const requester = record(source.requester);
18
+ const by = text(requester, 'name');
19
+ const room = record(source.room);
20
+ const ref = text(room, 'ref');
21
+ const handle = text(room, 'handle');
22
+ const called = text(room, 'name');
23
+ const sent = typeof source.sent === 'string' ? source.sent : null;
24
+ if (request === null ||
25
+ agentFunction === undefined ||
26
+ by === null ||
27
+ ref === null ||
28
+ handle === null ||
29
+ called === null ||
30
+ sent === null)
31
+ return null;
32
+ return {
33
+ kind: 'request',
34
+ request,
35
+ agentFunction,
36
+ requester: { name: by, room: text(requester, 'room') !== null },
37
+ room: { ref, handle, name: called },
38
+ sent,
39
+ instruction: text(source, 'instruction'),
40
+ answer: answerOf(source.answer),
41
+ approved: text(source, 'approved_at'),
42
+ };
43
+ }
44
+ export function sourceOf(value, sender) {
45
+ const source = record(value);
46
+ if (source.kind === 'request')
47
+ return requestOf(source);
48
+ if (source.kind === 'trigger') {
49
+ const trigger = text(record(source.trigger), 'description');
50
+ const room = record(source.room);
51
+ const ref = text(room, 'ref');
52
+ const called = text(room, 'name');
53
+ return trigger === null || ref === null || called === null
54
+ ? null
55
+ : {
56
+ kind: 'trigger',
57
+ customer: sender === 'customer',
58
+ trigger,
59
+ room: { ref, name: called },
60
+ };
61
+ }
62
+ if (source.kind === 'conversation') {
63
+ const conversation = record(source.conversation);
64
+ const id = text(conversation, 'id');
65
+ const name = text(conversation, 'name');
66
+ const agent = text(record(source.agent), 'name');
67
+ return id === null || name === null || agent === null
68
+ ? null
69
+ : { kind: 'conversation', conversation: { id, name }, agent };
70
+ }
71
+ if (source.kind !== 'mail' && source.kind !== 'declined')
72
+ return null;
73
+ const agent = text(record(source.agent), 'name');
74
+ const owner = text(record(source.owner), 'name');
75
+ if (agent === null || owner === null)
76
+ return null;
77
+ if (source.kind === 'declined')
78
+ return { kind: 'declined', agent, owner };
79
+ const request = text(source, 'request');
80
+ const room = text(source, 'room');
81
+ return request === null || room === null
82
+ ? null
83
+ : {
84
+ kind: 'mail',
85
+ request,
86
+ room,
87
+ report: sender === 'report',
88
+ agent,
89
+ owner,
90
+ approved: text(source, 'approved_at'),
91
+ declined: text(source, 'declined_at'),
92
+ };
93
+ }
package/dist/status.d.ts CHANGED
@@ -1,19 +1,20 @@
1
1
  import type { Open } from './open.js';
2
- import type { ProviderRefusal } from './adapter.js';
3
2
  import type { ReturnReason } from './room-draft.js';
4
3
  export type AttentionEntry = {
5
4
  room: string;
6
5
  path: string;
7
6
  returned: ReturnReason;
8
- } | {
7
+ };
8
+ export type UnsentChange = {
9
9
  room: string;
10
- refusal: ProviderRefusal;
10
+ path: string;
11
11
  };
12
12
  export type SyncStatus = {
13
13
  state: Open<'pending' | 'syncing' | 'synced'>;
14
14
  lastCompleted: string | null;
15
15
  providerUnreachable: boolean;
16
16
  attentionRequired: readonly AttentionEntry[];
17
+ unsent: readonly UnsentChange[];
17
18
  reset: string | null;
18
19
  };
19
20
  export type CycleProgress = {
@@ -21,7 +22,5 @@ export type CycleProgress = {
21
22
  reachable: boolean;
22
23
  };
23
24
  export declare const STARTING: SyncStatus;
24
- export declare function transferring(status: SyncStatus): SyncStatus;
25
- export declare function saving(status: SyncStatus): SyncStatus;
26
25
  export declare function same(one: SyncStatus, other: SyncStatus): boolean;
27
26
  //# sourceMappingURL=status.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,eAAe,CAAA;CAAE,CAAC;AAE/C,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;IAC9C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,EAAE,SAAS,cAAc,EAAE,CAAC;IAC7C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,UAMtB,CAAC;AAEF,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAE3D;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAErD;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAQhE"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,CAAC;AAEpF,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;IAC9C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,EAAE,SAAS,cAAc,EAAE,CAAC;IAC7C,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IAChC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,UAOtB,CAAC;AAEF,wBAAgB,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAShE"}
package/dist/status.js CHANGED
@@ -3,18 +3,14 @@ export const STARTING = {
3
3
  lastCompleted: null,
4
4
  providerUnreachable: false,
5
5
  attentionRequired: [],
6
+ unsent: [],
6
7
  reset: null,
7
8
  };
8
- export function transferring(status) {
9
- return { ...status, state: 'syncing' };
10
- }
11
- export function saving(status) {
12
- return { ...status, state: 'pending' };
13
- }
14
9
  export function same(one, other) {
15
10
  return (one.state === other.state &&
16
11
  one.lastCompleted === other.lastCompleted &&
17
12
  one.providerUnreachable === other.providerUnreachable &&
18
13
  one.reset === other.reset &&
19
- JSON.stringify(one.attentionRequired) === JSON.stringify(other.attentionRequired));
14
+ JSON.stringify(one.attentionRequired) === JSON.stringify(other.attentionRequired) &&
15
+ JSON.stringify(one.unsent) === JSON.stringify(other.unsent));
20
16
  }
@@ -0,0 +1,30 @@
1
+ import type { InstallationAmount } from '../readiness.js';
2
+ import type { TransferRecord } from './records.js';
3
+ type OwedIndex = {
4
+ readonly bytes: number;
5
+ readonly text: number;
6
+ };
7
+ export type RoomInstall = {
8
+ readonly transfer: TransferRecord | null;
9
+ readonly arrived: number | null;
10
+ readonly streaming: boolean;
11
+ readonly underived: number;
12
+ readonly unindexed: readonly OwedIndex[];
13
+ readonly startedOver: InstallationAmount | null;
14
+ readonly installing: boolean;
15
+ readonly catching: boolean;
16
+ readonly highest: string | null;
17
+ readonly beyondHorizon: boolean;
18
+ readonly confirmations: number;
19
+ };
20
+ export declare const NO_INSTALL: RoomInstall;
21
+ export type Installs = {
22
+ of(locator: string): RoomInstall;
23
+ change(locator: string, next: (held: RoomInstall) => RoomInstall): void;
24
+ underway(among: readonly string[] | null): ReadonlySet<string>;
25
+ transferring(): readonly string[];
26
+ arrivalsDue(locator: string, now: number, everyMs: number): readonly string[];
27
+ };
28
+ export declare function createInstalls(): Installs;
29
+ export {};
30
+ //# sourceMappingURL=installs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installs.d.ts","sourceRoot":"","sources":["../../src/store/installs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,KAAK,SAAS,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,SAAS,EAAE,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,WAYxB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAAC;IACjC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,WAAW,GAAG,IAAI,CAAC;IACxE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/D,YAAY,IAAI,SAAS,MAAM,EAAE,CAAC;IAClC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;CAC/E,CAAC;AAEF,wBAAgB,cAAc,IAAI,QAAQ,CA8BzC"}
@@ -0,0 +1,40 @@
1
+ export const NO_INSTALL = {
2
+ transfer: null,
3
+ arrived: null,
4
+ streaming: false,
5
+ underived: 0,
6
+ unindexed: [],
7
+ startedOver: null,
8
+ installing: false,
9
+ catching: false,
10
+ highest: null,
11
+ beyondHorizon: false,
12
+ confirmations: 0,
13
+ };
14
+ export function createInstalls() {
15
+ const rooms = new Map();
16
+ let arrivalReported = 0;
17
+ const arrived = new Set();
18
+ function matching(held) {
19
+ return [...rooms].filter(([, room]) => held(room)).map(([locator]) => locator);
20
+ }
21
+ return {
22
+ of: (locator) => rooms.get(locator) ?? NO_INSTALL,
23
+ change(locator, next) {
24
+ rooms.set(locator, next(rooms.get(locator) ?? NO_INSTALL));
25
+ },
26
+ underway: (among) => new Set(among === null
27
+ ? matching(({ installing }) => installing)
28
+ : among.filter((locator) => rooms.get(locator)?.installing === true)),
29
+ transferring: () => matching(({ transfer }) => transfer !== null),
30
+ arrivalsDue(locator, now, everyMs) {
31
+ arrived.add(locator);
32
+ if (now - arrivalReported < everyMs)
33
+ return [];
34
+ arrivalReported = now;
35
+ const due = [...arrived];
36
+ arrived.clear();
37
+ return due;
38
+ },
39
+ };
40
+ }
@@ -0,0 +1,11 @@
1
+ export type ReadinessQueue<W, S> = {
2
+ add(watch: W): () => void;
3
+ held(watch: W): boolean;
4
+ kept(watch: W): S | undefined;
5
+ keep(watch: W, shown: S): void;
6
+ owe(watches: readonly W[]): void;
7
+ queue(rooms?: readonly string[]): void;
8
+ close(): void;
9
+ };
10
+ export declare function createReadinessQueue<W, S>(deliver: (owed: readonly W[], rooms: ReadonlySet<string> | null) => Promise<void>, unpublished: (error: unknown) => void): ReadinessQueue<W, S>;
11
+ //# sourceMappingURL=readiness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readiness.d.ts","sourceRoot":"","sources":["../../src/store/readiness.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,CAAC,IAAI;IACjC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC;IAC1B,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;IACxB,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC9B,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAC/B,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACvC,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAWF,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,CAAC,EACvC,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,EACjF,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GACpC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAwDtB"}
@@ -0,0 +1,68 @@
1
+ function joined(held, rooms) {
2
+ if (held === null || rooms === null)
3
+ return null;
4
+ for (const room of rooms)
5
+ held.add(room);
6
+ return held;
7
+ }
8
+ export function createReadinessQueue(deliver, unpublished) {
9
+ const watches = new Set();
10
+ const owed = new Set();
11
+ const lastShown = new Map();
12
+ let owedRooms = new Set();
13
+ let queued = false;
14
+ let queuedRooms = new Set();
15
+ let shown = Promise.resolve();
16
+ function owing(owe, rooms) {
17
+ const waiting = owed.size > 0;
18
+ for (const watch of owe)
19
+ owed.add(watch);
20
+ owedRooms = joined(owedRooms, rooms);
21
+ if (waiting)
22
+ return;
23
+ shown = shown
24
+ .then(async () => {
25
+ const due = [...owed];
26
+ const touched = owedRooms;
27
+ owed.clear();
28
+ owedRooms = new Set();
29
+ await deliver(due, touched);
30
+ })
31
+ .catch(unpublished);
32
+ }
33
+ return {
34
+ add(watch) {
35
+ watches.add(watch);
36
+ return () => {
37
+ watches.delete(watch);
38
+ lastShown.delete(watch);
39
+ };
40
+ },
41
+ held: (watch) => watches.has(watch),
42
+ kept: (watch) => lastShown.get(watch),
43
+ keep(watch, kept) {
44
+ if (watches.has(watch))
45
+ lastShown.set(watch, kept);
46
+ },
47
+ owe: (owe) => owing(owe, null),
48
+ queue(rooms) {
49
+ if (watches.size === 0)
50
+ return;
51
+ queuedRooms = joined(queuedRooms, rooms ?? null);
52
+ if (queued)
53
+ return;
54
+ queued = true;
55
+ queueMicrotask(() => {
56
+ queued = false;
57
+ const touched = queuedRooms;
58
+ queuedRooms = new Set();
59
+ if (watches.size > 0)
60
+ owing([...watches], touched);
61
+ });
62
+ },
63
+ close() {
64
+ watches.clear();
65
+ lastShown.clear();
66
+ },
67
+ };
68
+ }