@agentshouse/mdruntime 0.1.0-cedb03eaa48b6 → 0.1.0-cedd665dffa4c

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 (395) 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 +173 -125
  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/binary.d.ts +0 -5
  17. package/dist/binary.d.ts.map +1 -1
  18. package/dist/binary.js +1 -1
  19. package/dist/bootstrap.d.ts +30 -11
  20. package/dist/bootstrap.d.ts.map +1 -1
  21. package/dist/bootstrap.js +309 -113
  22. package/dist/cell.d.ts +6 -0
  23. package/dist/cell.d.ts.map +1 -0
  24. package/dist/cell.js +9 -0
  25. package/dist/chain.d.ts +12 -0
  26. package/dist/chain.d.ts.map +1 -0
  27. package/dist/chain.js +64 -0
  28. package/dist/change-set.d.ts +13 -16
  29. package/dist/change-set.d.ts.map +1 -1
  30. package/dist/change-set.js +17 -89
  31. package/dist/change.d.ts +36 -1
  32. package/dist/change.d.ts.map +1 -1
  33. package/dist/change.js +17 -3
  34. package/dist/chat-types.d.ts +3 -0
  35. package/dist/chat-types.d.ts.map +1 -0
  36. package/dist/chat-types.js +11 -0
  37. package/dist/client.d.ts +37 -26
  38. package/dist/client.d.ts.map +1 -1
  39. package/dist/client.js +113 -23
  40. package/dist/collection.d.ts +32 -21
  41. package/dist/collection.d.ts.map +1 -1
  42. package/dist/collection.js +53 -318
  43. package/dist/compile.d.ts +18 -0
  44. package/dist/compile.d.ts.map +1 -0
  45. package/dist/compile.js +723 -0
  46. package/dist/connection.d.ts +7 -137
  47. package/dist/connection.d.ts.map +1 -1
  48. package/dist/connection.js +110 -3602
  49. package/dist/context.d.ts +2 -0
  50. package/dist/context.d.ts.map +1 -0
  51. package/dist/{chat/context.js → context.js} +2 -5
  52. package/dist/conversation-live.d.ts +150 -0
  53. package/dist/conversation-live.d.ts.map +1 -0
  54. package/dist/conversation-live.js +259 -0
  55. package/dist/conversation-row.d.ts +40 -0
  56. package/dist/conversation-row.d.ts.map +1 -0
  57. package/dist/conversation-row.js +66 -0
  58. package/dist/conversation.d.ts +75 -49
  59. package/dist/conversation.d.ts.map +1 -1
  60. package/dist/conversation.js +1029 -806
  61. package/dist/declaration.d.ts +10 -0
  62. package/dist/declaration.d.ts.map +1 -0
  63. package/dist/declaration.js +24 -0
  64. package/dist/digest.d.ts +7 -0
  65. package/dist/digest.d.ts.map +1 -0
  66. package/dist/digest.js +113 -0
  67. package/dist/discovery.d.ts +10 -0
  68. package/dist/discovery.d.ts.map +1 -0
  69. package/dist/discovery.js +150 -0
  70. package/dist/durability.d.ts +20 -4
  71. package/dist/durability.d.ts.map +1 -1
  72. package/dist/durability.js +9 -0
  73. package/dist/entry.d.ts +5 -2
  74. package/dist/entry.d.ts.map +1 -1
  75. package/dist/entry.js +33 -29
  76. package/dist/expectation.d.ts +26 -13
  77. package/dist/expectation.d.ts.map +1 -1
  78. package/dist/expectation.js +72 -19
  79. package/dist/failure.d.ts +3 -0
  80. package/dist/failure.d.ts.map +1 -1
  81. package/dist/failure.js +6 -0
  82. package/dist/figures.d.ts +49 -0
  83. package/dist/figures.d.ts.map +1 -0
  84. package/dist/figures.js +199 -0
  85. package/dist/file.d.ts +2 -19
  86. package/dist/file.d.ts.map +1 -1
  87. package/dist/file.js +8 -122
  88. package/dist/holdings.d.ts +29 -0
  89. package/dist/holdings.d.ts.map +1 -0
  90. package/dist/holdings.js +95 -0
  91. package/dist/host.d.ts +21 -8
  92. package/dist/host.d.ts.map +1 -1
  93. package/dist/host.js +119 -51
  94. package/dist/identity.d.ts +0 -2
  95. package/dist/identity.d.ts.map +1 -1
  96. package/dist/identity.js +0 -6
  97. package/dist/index.d.ts +41 -16
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +19 -4
  100. package/dist/install.d.ts +60 -0
  101. package/dist/install.d.ts.map +1 -0
  102. package/dist/install.js +537 -0
  103. package/dist/lifecycle.d.ts +7 -0
  104. package/dist/lifecycle.d.ts.map +1 -0
  105. package/dist/lifecycle.js +278 -0
  106. package/dist/listing.d.ts +52 -0
  107. package/dist/listing.d.ts.map +1 -0
  108. package/dist/listing.js +152 -0
  109. package/dist/live.d.ts +25 -0
  110. package/dist/live.d.ts.map +1 -0
  111. package/dist/live.js +206 -0
  112. package/dist/loaded.d.ts +5 -0
  113. package/dist/loaded.d.ts.map +1 -0
  114. package/dist/loaded.js +40 -0
  115. package/dist/locks.d.ts +7 -0
  116. package/dist/locks.d.ts.map +1 -0
  117. package/dist/locks.js +32 -0
  118. package/dist/lost.d.ts +5 -0
  119. package/dist/lost.d.ts.map +1 -0
  120. package/dist/lost.js +49 -0
  121. package/dist/media.d.ts +13 -0
  122. package/dist/media.d.ts.map +1 -0
  123. package/dist/media.js +269 -0
  124. package/dist/memory.d.ts +19 -7
  125. package/dist/memory.d.ts.map +1 -1
  126. package/dist/memory.js +281 -118
  127. package/dist/messages.d.ts +58 -0
  128. package/dist/messages.d.ts.map +1 -0
  129. package/dist/messages.js +162 -0
  130. package/dist/model.d.ts +8 -11
  131. package/dist/model.d.ts.map +1 -1
  132. package/dist/model.js +6 -23
  133. package/dist/models.d.ts +10 -0
  134. package/dist/models.d.ts.map +1 -0
  135. package/dist/models.js +153 -0
  136. package/dist/name.d.ts +4 -0
  137. package/dist/name.d.ts.map +1 -0
  138. package/dist/name.js +122 -0
  139. package/dist/observation.d.ts +38 -10
  140. package/dist/observation.d.ts.map +1 -1
  141. package/dist/observation.js +232 -44
  142. package/dist/opened.d.ts +22 -0
  143. package/dist/opened.d.ts.map +1 -0
  144. package/dist/opened.js +107 -0
  145. package/dist/opening.d.ts +4 -0
  146. package/dist/opening.d.ts.map +1 -0
  147. package/dist/opening.js +53 -0
  148. package/dist/outcome.d.ts +51 -9
  149. package/dist/outcome.d.ts.map +1 -1
  150. package/dist/outcome.js +62 -2
  151. package/dist/overlay.d.ts +8 -6
  152. package/dist/overlay.d.ts.map +1 -1
  153. package/dist/overlay.js +121 -182
  154. package/dist/page-metadata.d.ts +8 -0
  155. package/dist/page-metadata.d.ts.map +1 -0
  156. package/dist/page-metadata.js +19 -0
  157. package/dist/parts.d.ts +4 -0
  158. package/dist/parts.d.ts.map +1 -0
  159. package/dist/parts.js +13 -0
  160. package/dist/paths.d.ts +2 -0
  161. package/dist/paths.d.ts.map +1 -1
  162. package/dist/paths.js +26 -0
  163. package/dist/preparation.d.ts +41 -0
  164. package/dist/preparation.d.ts.map +1 -0
  165. package/dist/preparation.js +314 -0
  166. package/dist/presence.d.ts +58 -0
  167. package/dist/presence.d.ts.map +1 -0
  168. package/dist/presence.js +231 -0
  169. package/dist/queries.d.ts +16 -0
  170. package/dist/queries.d.ts.map +1 -0
  171. package/dist/queries.js +308 -0
  172. package/dist/query.d.ts +21 -207
  173. package/dist/query.d.ts.map +1 -1
  174. package/dist/query.js +3 -493
  175. package/dist/{chat/questions.d.ts → questions.d.ts} +5 -7
  176. package/dist/questions.d.ts.map +1 -0
  177. package/dist/{chat/questions.js → questions.js} +11 -7
  178. package/dist/queue.d.ts +40 -0
  179. package/dist/queue.d.ts.map +1 -0
  180. package/dist/queue.js +480 -0
  181. package/dist/reach.d.ts +21 -11
  182. package/dist/reach.d.ts.map +1 -1
  183. package/dist/reach.js +342 -112
  184. package/dist/react.d.ts +17 -3
  185. package/dist/react.d.ts.map +1 -1
  186. package/dist/react.js +33 -1
  187. package/dist/{chat/read.d.ts → read.d.ts} +2 -0
  188. package/dist/read.d.ts.map +1 -0
  189. package/dist/{chat/read.js → read.js} +4 -0
  190. package/dist/readiness.d.ts +22 -20
  191. package/dist/readiness.d.ts.map +1 -1
  192. package/dist/readiness.js +5 -13
  193. package/dist/reads.d.ts +38 -10
  194. package/dist/reads.d.ts.map +1 -1
  195. package/dist/reads.js +163 -83
  196. package/dist/recovery.d.ts +5 -2
  197. package/dist/recovery.d.ts.map +1 -1
  198. package/dist/recovery.js +65 -8
  199. package/dist/refresh.d.ts +18 -15
  200. package/dist/refresh.d.ts.map +1 -1
  201. package/dist/refresh.js +145 -60
  202. package/dist/refusal.d.ts +5 -0
  203. package/dist/refusal.d.ts.map +1 -0
  204. package/dist/refusal.js +55 -0
  205. package/dist/replica.d.ts +49 -36
  206. package/dist/replica.d.ts.map +1 -1
  207. package/dist/replica.js +322 -198
  208. package/dist/retried.d.ts +30 -0
  209. package/dist/retried.d.ts.map +1 -0
  210. package/dist/retried.js +72 -0
  211. package/dist/room-draft.d.ts +55 -13
  212. package/dist/room-draft.d.ts.map +1 -1
  213. package/dist/room-draft.js +416 -122
  214. package/dist/room-drafts.d.ts +24 -0
  215. package/dist/room-drafts.d.ts.map +1 -0
  216. package/dist/room-drafts.js +220 -0
  217. package/dist/rows.d.ts +32 -31
  218. package/dist/rows.d.ts.map +1 -1
  219. package/dist/rows.js +59 -124
  220. package/dist/runtime.d.ts +34 -0
  221. package/dist/runtime.d.ts.map +1 -0
  222. package/dist/runtime.js +1 -0
  223. package/dist/save.d.ts +43 -49
  224. package/dist/save.d.ts.map +1 -1
  225. package/dist/save.js +736 -302
  226. package/dist/saves.d.ts +32 -0
  227. package/dist/saves.d.ts.map +1 -0
  228. package/dist/saves.js +426 -0
  229. package/dist/search.d.ts +12 -95
  230. package/dist/search.d.ts.map +1 -1
  231. package/dist/search.js +10 -266
  232. package/dist/seed.d.ts +11 -2
  233. package/dist/seed.d.ts.map +1 -1
  234. package/dist/seed.js +71 -1
  235. package/dist/shared.d.ts +6 -7
  236. package/dist/shared.d.ts.map +1 -1
  237. package/dist/shared.js +75 -104
  238. package/dist/shown.d.ts +33 -0
  239. package/dist/shown.d.ts.map +1 -0
  240. package/dist/shown.js +309 -0
  241. package/dist/socket/admission.d.ts +7 -0
  242. package/dist/socket/admission.d.ts.map +1 -0
  243. package/dist/socket/admission.js +39 -0
  244. package/dist/socket/answers.d.ts +6 -0
  245. package/dist/socket/answers.d.ts.map +1 -0
  246. package/dist/socket/answers.js +20 -0
  247. package/dist/socket/lanes.d.ts +28 -0
  248. package/dist/socket/lanes.d.ts.map +1 -0
  249. package/dist/socket/lanes.js +103 -0
  250. package/dist/socket/reads.d.ts +10 -0
  251. package/dist/socket/reads.d.ts.map +1 -0
  252. package/dist/socket/reads.js +31 -0
  253. package/dist/socket/session.d.ts +38 -0
  254. package/dist/socket/session.d.ts.map +1 -0
  255. package/dist/socket/session.js +23 -0
  256. package/dist/socket.d.ts +67 -0
  257. package/dist/socket.d.ts.map +1 -0
  258. package/dist/socket.js +164 -0
  259. package/dist/source.d.ts +59 -0
  260. package/dist/source.d.ts.map +1 -0
  261. package/dist/source.js +93 -0
  262. package/dist/status.d.ts +4 -5
  263. package/dist/status.d.ts.map +1 -1
  264. package/dist/status.js +3 -7
  265. package/dist/store/installs.d.ts +30 -0
  266. package/dist/store/installs.d.ts.map +1 -0
  267. package/dist/store/installs.js +40 -0
  268. package/dist/store/readiness.d.ts +11 -0
  269. package/dist/store/readiness.d.ts.map +1 -0
  270. package/dist/store/readiness.js +68 -0
  271. package/dist/store/records.d.ts +217 -0
  272. package/dist/store/records.d.ts.map +1 -0
  273. package/dist/store/records.js +464 -0
  274. package/dist/store/room-held.d.ts +8 -0
  275. package/dist/store/room-held.d.ts.map +1 -0
  276. package/dist/store/room-held.js +17 -0
  277. package/dist/store/rooms-shown.d.ts +8 -0
  278. package/dist/store/rooms-shown.d.ts.map +1 -0
  279. package/dist/store/rooms-shown.js +13 -0
  280. package/dist/store/space.d.ts +11 -0
  281. package/dist/store/space.d.ts.map +1 -0
  282. package/dist/store/space.js +41 -0
  283. package/dist/store/watchers.d.ts +17 -0
  284. package/dist/store/watchers.d.ts.map +1 -0
  285. package/dist/store/watchers.js +56 -0
  286. package/dist/store/writes.d.ts +24 -0
  287. package/dist/store/writes.d.ts.map +1 -0
  288. package/dist/store/writes.js +125 -0
  289. package/dist/store.d.ts +114 -163
  290. package/dist/store.d.ts.map +1 -1
  291. package/dist/store.js +163 -750
  292. package/dist/stored.d.ts +167 -0
  293. package/dist/stored.d.ts.map +1 -0
  294. package/dist/stored.js +703 -0
  295. package/dist/surface.d.ts +89 -0
  296. package/dist/surface.d.ts.map +1 -0
  297. package/dist/surface.js +222 -0
  298. package/dist/sync.d.ts +19 -0
  299. package/dist/sync.d.ts.map +1 -0
  300. package/dist/sync.js +535 -0
  301. package/dist/tables.d.ts +419 -0
  302. package/dist/tables.d.ts.map +1 -0
  303. package/dist/tables.js +758 -0
  304. package/dist/tallies.d.ts +18 -0
  305. package/dist/tallies.d.ts.map +1 -0
  306. package/dist/tallies.js +128 -0
  307. package/dist/transfer.d.ts +0 -5
  308. package/dist/transfer.d.ts.map +1 -1
  309. package/dist/turn.d.ts +4 -2
  310. package/dist/turn.d.ts.map +1 -1
  311. package/dist/turn.js +46 -22
  312. package/dist/validation.d.ts +29 -0
  313. package/dist/validation.d.ts.map +1 -0
  314. package/dist/validation.js +98 -0
  315. package/dist/windows.d.ts +1 -16
  316. package/dist/windows.d.ts.map +1 -1
  317. package/dist/windows.js +2 -79
  318. package/dist/wire.d.ts +74 -9
  319. package/dist/wire.d.ts.map +1 -1
  320. package/dist/wire.js +26 -6
  321. package/package.json +19 -19
  322. package/AGENTS.md +0 -305
  323. package/dist/attempt.d.ts +0 -16
  324. package/dist/attempt.d.ts.map +0 -1
  325. package/dist/attempt.js +0 -70
  326. package/dist/chat/acts.d.ts +0 -33
  327. package/dist/chat/acts.d.ts.map +0 -1
  328. package/dist/chat/acts.js +0 -36
  329. package/dist/chat/context.d.ts +0 -3
  330. package/dist/chat/context.d.ts.map +0 -1
  331. package/dist/chat/earlier.d.ts +0 -10
  332. package/dist/chat/earlier.d.ts.map +0 -1
  333. package/dist/chat/earlier.js +0 -54
  334. package/dist/chat/input.d.ts +0 -9
  335. package/dist/chat/input.d.ts.map +0 -1
  336. package/dist/chat/input.js +0 -99
  337. package/dist/chat/kit.d.ts +0 -61
  338. package/dist/chat/kit.d.ts.map +0 -1
  339. package/dist/chat/kit.js +0 -123
  340. package/dist/chat/lasting.d.ts +0 -6
  341. package/dist/chat/lasting.d.ts.map +0 -1
  342. package/dist/chat/lasting.js +0 -19
  343. package/dist/chat/list.d.ts +0 -27
  344. package/dist/chat/list.d.ts.map +0 -1
  345. package/dist/chat/list.js +0 -99
  346. package/dist/chat/markdown.d.ts +0 -20
  347. package/dist/chat/markdown.d.ts.map +0 -1
  348. package/dist/chat/markdown.js +0 -188
  349. package/dist/chat/message.d.ts +0 -6
  350. package/dist/chat/message.d.ts.map +0 -1
  351. package/dist/chat/message.js +0 -192
  352. package/dist/chat/messages.d.ts +0 -22
  353. package/dist/chat/messages.d.ts.map +0 -1
  354. package/dist/chat/messages.js +0 -155
  355. package/dist/chat/name.d.ts +0 -6
  356. package/dist/chat/name.d.ts.map +0 -1
  357. package/dist/chat/name.js +0 -37
  358. package/dist/chat/opened.d.ts +0 -11
  359. package/dist/chat/opened.d.ts.map +0 -1
  360. package/dist/chat/opened.js +0 -17
  361. package/dist/chat/overlay.d.ts +0 -31
  362. package/dist/chat/overlay.d.ts.map +0 -1
  363. package/dist/chat/overlay.js +0 -97
  364. package/dist/chat/parts.d.ts +0 -57
  365. package/dist/chat/parts.d.ts.map +0 -1
  366. package/dist/chat/parts.js +0 -119
  367. package/dist/chat/process.d.ts +0 -20
  368. package/dist/chat/process.d.ts.map +0 -1
  369. package/dist/chat/process.js +0 -32
  370. package/dist/chat/provider.d.ts +0 -63
  371. package/dist/chat/provider.d.ts.map +0 -1
  372. package/dist/chat/provider.js +0 -628
  373. package/dist/chat/question.d.ts +0 -9
  374. package/dist/chat/question.d.ts.map +0 -1
  375. package/dist/chat/question.js +0 -69
  376. package/dist/chat/questions.d.ts.map +0 -1
  377. package/dist/chat/read.d.ts.map +0 -1
  378. package/dist/chat/ready.d.ts +0 -34
  379. package/dist/chat/ready.d.ts.map +0 -1
  380. package/dist/chat/ready.js +0 -91
  381. package/dist/chat/style.d.ts +0 -4
  382. package/dist/chat/style.d.ts.map +0 -1
  383. package/dist/chat/style.js +0 -302
  384. package/dist/chat.d.ts +0 -14
  385. package/dist/chat.d.ts.map +0 -1
  386. package/dist/chat.js +0 -8
  387. package/dist/fence.d.ts +0 -6
  388. package/dist/fence.d.ts.map +0 -1
  389. package/dist/fence.js +0 -10
  390. package/dist/log.d.ts +0 -5
  391. package/dist/log.d.ts.map +0 -1
  392. package/dist/log.js +0 -14
  393. package/dist/read-side.d.ts +0 -27
  394. package/dist/read-side.d.ts.map +0 -1
  395. package/dist/read-side.js +0 -824
@@ -0,0 +1,23 @@
1
+ import { createCell } from '../cell.js';
2
+ export function createSession(authorization) {
3
+ return createCell({
4
+ closed: false,
5
+ stopping: false,
6
+ paused: false,
7
+ authorization,
8
+ refusal: null,
9
+ discoveries: 0,
10
+ roomsNamed: false,
11
+ roomsListed: false,
12
+ serviceMode: 'open',
13
+ haltedRefusal: false,
14
+ openSignals: 0,
15
+ authorityChanges: 0,
16
+ currencyQueued: null,
17
+ moving: { state: 'syncing', providerUnreachable: false, resting: false },
18
+ complete: false,
19
+ recorded: false,
20
+ underway: null,
21
+ streamed: null,
22
+ });
23
+ }
@@ -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
+ }