@agentshouse/mdruntime 0.1.0-c49444f2a8fc6 → 0.1.0-c4c5934c45f21

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 (261) hide show
  1. package/README.md +8 -8
  2. package/dist/acceptance.d.ts +3 -0
  3. package/dist/acceptance.d.ts.map +1 -0
  4. package/dist/acceptance.js +308 -0
  5. package/dist/act-lanes.d.ts +33 -0
  6. package/dist/act-lanes.d.ts.map +1 -0
  7. package/dist/act-lanes.js +177 -0
  8. package/dist/actions.d.ts +20 -0
  9. package/dist/actions.d.ts.map +1 -0
  10. package/dist/actions.js +251 -0
  11. package/dist/adapter.d.ts +31 -44
  12. package/dist/adapter.d.ts.map +1 -1
  13. package/dist/bootstrap.d.ts +1 -1
  14. package/dist/bootstrap.d.ts.map +1 -1
  15. package/dist/bootstrap.js +6 -18
  16. package/dist/cell.d.ts +6 -0
  17. package/dist/cell.d.ts.map +1 -0
  18. package/dist/cell.js +9 -0
  19. package/dist/change-set.d.ts +4 -0
  20. package/dist/change-set.d.ts.map +1 -1
  21. package/dist/change-set.js +6 -0
  22. package/dist/change.d.ts.map +1 -1
  23. package/dist/change.js +4 -2
  24. package/dist/chat-types.d.ts +5 -0
  25. package/dist/chat-types.d.ts.map +1 -0
  26. package/dist/chat-types.js +13 -0
  27. package/dist/client.d.ts +19 -13
  28. package/dist/client.d.ts.map +1 -1
  29. package/dist/client.js +30 -14
  30. package/dist/collection.d.ts +22 -4
  31. package/dist/collection.d.ts.map +1 -1
  32. package/dist/collection.js +12 -2
  33. package/dist/compile.d.ts +5 -0
  34. package/dist/compile.d.ts.map +1 -1
  35. package/dist/compile.js +200 -75
  36. package/dist/connection.d.ts +5 -143
  37. package/dist/connection.d.ts.map +1 -1
  38. package/dist/connection.js +104 -5308
  39. package/dist/conversation-live.d.ts +136 -0
  40. package/dist/conversation-live.d.ts.map +1 -0
  41. package/dist/conversation-live.js +249 -0
  42. package/dist/conversation-row.d.ts.map +1 -1
  43. package/dist/conversation-row.js +7 -1
  44. package/dist/conversation.d.ts +43 -44
  45. package/dist/conversation.d.ts.map +1 -1
  46. package/dist/conversation.js +906 -1024
  47. package/dist/declaration.d.ts +10 -0
  48. package/dist/declaration.d.ts.map +1 -0
  49. package/dist/declaration.js +24 -0
  50. package/dist/discovery.d.ts +10 -0
  51. package/dist/discovery.d.ts.map +1 -0
  52. package/dist/discovery.js +148 -0
  53. package/dist/durability.d.ts +9 -0
  54. package/dist/durability.d.ts.map +1 -1
  55. package/dist/expectation.d.ts +4 -2
  56. package/dist/expectation.d.ts.map +1 -1
  57. package/dist/expectation.js +33 -11
  58. package/dist/failure.d.ts +1 -0
  59. package/dist/failure.d.ts.map +1 -1
  60. package/dist/failure.js +3 -0
  61. package/dist/figures.d.ts +49 -0
  62. package/dist/figures.d.ts.map +1 -0
  63. package/dist/figures.js +197 -0
  64. package/dist/holdings.d.ts +29 -0
  65. package/dist/holdings.d.ts.map +1 -0
  66. package/dist/holdings.js +95 -0
  67. package/dist/host.d.ts +18 -2
  68. package/dist/host.d.ts.map +1 -1
  69. package/dist/host.js +45 -12
  70. package/dist/index.d.ts +22 -8
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +7 -2
  73. package/dist/install.d.ts +54 -0
  74. package/dist/install.d.ts.map +1 -0
  75. package/dist/install.js +538 -0
  76. package/dist/lifecycle.d.ts +7 -0
  77. package/dist/lifecycle.d.ts.map +1 -0
  78. package/dist/lifecycle.js +272 -0
  79. package/dist/listing.d.ts +48 -0
  80. package/dist/listing.d.ts.map +1 -0
  81. package/dist/listing.js +139 -0
  82. package/dist/live.d.ts.map +1 -1
  83. package/dist/live.js +3 -3
  84. package/dist/locks.d.ts +7 -0
  85. package/dist/locks.d.ts.map +1 -0
  86. package/dist/locks.js +33 -0
  87. package/dist/log.d.ts +1 -0
  88. package/dist/log.d.ts.map +1 -1
  89. package/dist/lost.d.ts +5 -0
  90. package/dist/lost.d.ts.map +1 -0
  91. package/dist/lost.js +50 -0
  92. package/dist/media.d.ts +1 -1
  93. package/dist/media.d.ts.map +1 -1
  94. package/dist/media.js +4 -4
  95. package/dist/memory.d.ts +4 -2
  96. package/dist/memory.d.ts.map +1 -1
  97. package/dist/memory.js +38 -20
  98. package/dist/messages.d.ts +1 -4
  99. package/dist/messages.d.ts.map +1 -1
  100. package/dist/messages.js +14 -32
  101. package/dist/model.d.ts +0 -1
  102. package/dist/model.d.ts.map +1 -1
  103. package/dist/model.js +0 -5
  104. package/dist/models.d.ts +10 -0
  105. package/dist/models.d.ts.map +1 -0
  106. package/dist/models.js +156 -0
  107. package/dist/observation.d.ts.map +1 -1
  108. package/dist/observation.js +12 -17
  109. package/dist/opened.d.ts +1 -1
  110. package/dist/opened.d.ts.map +1 -1
  111. package/dist/opened.js +5 -5
  112. package/dist/opening.d.ts +4 -0
  113. package/dist/opening.d.ts.map +1 -0
  114. package/dist/opening.js +59 -0
  115. package/dist/outcome.d.ts +4 -1
  116. package/dist/outcome.d.ts.map +1 -1
  117. package/dist/outcome.js +3 -0
  118. package/dist/overlay.d.ts +2 -1
  119. package/dist/overlay.d.ts.map +1 -1
  120. package/dist/overlay.js +32 -21
  121. package/dist/page-metadata.d.ts +8 -0
  122. package/dist/page-metadata.d.ts.map +1 -0
  123. package/dist/page-metadata.js +19 -0
  124. package/dist/parts.d.ts +3 -51
  125. package/dist/parts.d.ts.map +1 -1
  126. package/dist/parts.js +14 -111
  127. package/dist/paths.d.ts +1 -0
  128. package/dist/paths.d.ts.map +1 -1
  129. package/dist/paths.js +22 -0
  130. package/dist/preparation.d.ts +20 -0
  131. package/dist/preparation.d.ts.map +1 -0
  132. package/dist/preparation.js +233 -0
  133. package/dist/presence.d.ts +52 -0
  134. package/dist/presence.d.ts.map +1 -0
  135. package/dist/presence.js +220 -0
  136. package/dist/queries.d.ts +16 -0
  137. package/dist/queries.d.ts.map +1 -0
  138. package/dist/queries.js +270 -0
  139. package/dist/query.d.ts +10 -1
  140. package/dist/query.d.ts.map +1 -1
  141. package/dist/questions.d.ts +2 -0
  142. package/dist/questions.d.ts.map +1 -1
  143. package/dist/questions.js +5 -1
  144. package/dist/queue.d.ts +40 -0
  145. package/dist/queue.d.ts.map +1 -0
  146. package/dist/queue.js +455 -0
  147. package/dist/reach.d.ts +3 -1
  148. package/dist/reach.d.ts.map +1 -1
  149. package/dist/reach.js +38 -8
  150. package/dist/react.d.ts +18 -1
  151. package/dist/react.d.ts.map +1 -1
  152. package/dist/react.js +15 -1
  153. package/dist/readiness.d.ts +0 -1
  154. package/dist/readiness.d.ts.map +1 -1
  155. package/dist/reads.d.ts +37 -0
  156. package/dist/reads.d.ts.map +1 -0
  157. package/dist/reads.js +174 -0
  158. package/dist/refresh.js +2 -2
  159. package/dist/refusal.d.ts +5 -0
  160. package/dist/refusal.d.ts.map +1 -0
  161. package/dist/refusal.js +57 -0
  162. package/dist/replica.d.ts +5 -13
  163. package/dist/replica.d.ts.map +1 -1
  164. package/dist/replica.js +15 -16
  165. package/dist/room-draft.d.ts +4 -6
  166. package/dist/room-draft.d.ts.map +1 -1
  167. package/dist/room-draft.js +36 -52
  168. package/dist/room-drafts.d.ts +24 -0
  169. package/dist/room-drafts.d.ts.map +1 -0
  170. package/dist/room-drafts.js +217 -0
  171. package/dist/rows.d.ts.map +1 -1
  172. package/dist/rows.js +3 -4
  173. package/dist/runtime.d.ts +34 -0
  174. package/dist/runtime.d.ts.map +1 -0
  175. package/dist/runtime.js +1 -0
  176. package/dist/save.d.ts +41 -86
  177. package/dist/save.d.ts.map +1 -1
  178. package/dist/save.js +232 -112
  179. package/dist/saves.d.ts +32 -0
  180. package/dist/saves.d.ts.map +1 -0
  181. package/dist/saves.js +413 -0
  182. package/dist/seed.d.ts +11 -2
  183. package/dist/seed.d.ts.map +1 -1
  184. package/dist/seed.js +71 -1
  185. package/dist/shared.d.ts +1 -6
  186. package/dist/shared.d.ts.map +1 -1
  187. package/dist/shared.js +13 -95
  188. package/dist/shown.d.ts +32 -0
  189. package/dist/shown.d.ts.map +1 -0
  190. package/dist/shown.js +290 -0
  191. package/dist/socket/admission.d.ts +7 -0
  192. package/dist/socket/admission.d.ts.map +1 -0
  193. package/dist/socket/admission.js +39 -0
  194. package/dist/socket/answers.d.ts +6 -0
  195. package/dist/socket/answers.d.ts.map +1 -0
  196. package/dist/socket/answers.js +20 -0
  197. package/dist/socket/lanes.d.ts +20 -0
  198. package/dist/socket/lanes.d.ts.map +1 -0
  199. package/dist/socket/lanes.js +77 -0
  200. package/dist/socket/reads.d.ts +10 -0
  201. package/dist/socket/reads.d.ts.map +1 -0
  202. package/dist/socket/reads.js +31 -0
  203. package/dist/socket/session.d.ts +38 -0
  204. package/dist/socket/session.d.ts.map +1 -0
  205. package/dist/socket/session.js +23 -0
  206. package/dist/socket.d.ts +67 -0
  207. package/dist/socket.d.ts.map +1 -0
  208. package/dist/socket.js +170 -0
  209. package/dist/source.d.ts.map +1 -1
  210. package/dist/source.js +5 -4
  211. package/dist/store/installs.d.ts +30 -0
  212. package/dist/store/installs.d.ts.map +1 -0
  213. package/dist/store/installs.js +34 -0
  214. package/dist/store/readiness.d.ts +10 -0
  215. package/dist/store/readiness.d.ts.map +1 -0
  216. package/dist/store/readiness.js +52 -0
  217. package/dist/store/records.d.ts +212 -0
  218. package/dist/store/records.d.ts.map +1 -0
  219. package/dist/store/records.js +430 -0
  220. package/dist/store/room-held.d.ts +8 -0
  221. package/dist/store/room-held.d.ts.map +1 -0
  222. package/dist/store/room-held.js +17 -0
  223. package/dist/store/space.d.ts +11 -0
  224. package/dist/store/space.d.ts.map +1 -0
  225. package/dist/store/space.js +41 -0
  226. package/dist/store/watchers.d.ts +17 -0
  227. package/dist/store/watchers.d.ts.map +1 -0
  228. package/dist/store/watchers.js +56 -0
  229. package/dist/store/writes.d.ts +24 -0
  230. package/dist/store/writes.d.ts.map +1 -0
  231. package/dist/store/writes.js +125 -0
  232. package/dist/store.d.ts +112 -204
  233. package/dist/store.d.ts.map +1 -1
  234. package/dist/store.js +158 -394
  235. package/dist/stored.d.ts +1 -1
  236. package/dist/stored.d.ts.map +1 -1
  237. package/dist/stored.js +28 -14
  238. package/dist/surface.d.ts +88 -0
  239. package/dist/surface.d.ts.map +1 -0
  240. package/dist/surface.js +223 -0
  241. package/dist/sync.d.ts +19 -0
  242. package/dist/sync.d.ts.map +1 -0
  243. package/dist/sync.js +521 -0
  244. package/dist/tables.d.ts +32 -8
  245. package/dist/tables.d.ts.map +1 -1
  246. package/dist/tables.js +43 -12
  247. package/dist/tallies.d.ts +18 -0
  248. package/dist/tallies.d.ts.map +1 -0
  249. package/dist/tallies.js +129 -0
  250. package/dist/validation.d.ts.map +1 -1
  251. package/dist/validation.js +2 -2
  252. package/dist/wire.d.ts +48 -5
  253. package/dist/wire.d.ts.map +1 -1
  254. package/dist/wire.js +16 -3
  255. package/package.json +3 -2
  256. package/dist/attempt.d.ts +0 -16
  257. package/dist/attempt.d.ts.map +0 -1
  258. package/dist/attempt.js +0 -70
  259. package/dist/job.d.ts +0 -33
  260. package/dist/job.d.ts.map +0 -1
  261. package/dist/job.js +0 -54
@@ -0,0 +1,10 @@
1
+ import type { Adapter } from '../adapter.js';
2
+ import type { Reads } from '../bootstrap.js';
3
+ type HeldReads = {
4
+ readonly reads: Reads;
5
+ abort(): void;
6
+ stop(): void;
7
+ };
8
+ export declare function createReads(adapter: Adapter): HeldReads;
9
+ export {};
10
+ //# sourceMappingURL=reads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reads.d.ts","sourceRoot":"","sources":["../../src/socket/reads.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAiD,MAAM,eAAe,CAAC;AAC5F,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,KAAK,SAAS,GAAG;IACf,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,IAAI,CAAC;CACd,CAAC;AAWF,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAuBvD"}
@@ -0,0 +1,31 @@
1
+ function readUntil(read, signal) {
2
+ if (signal.aborted)
3
+ return Promise.resolve({ kind: 'transport-uncertainty' });
4
+ return new Promise((resolve, reject) => {
5
+ const stop = () => resolve({ kind: 'transport-uncertainty' });
6
+ signal.addEventListener('abort', stop, { once: true });
7
+ read.then(resolve, reject).finally(() => signal.removeEventListener('abort', stop));
8
+ });
9
+ }
10
+ export function createReads(adapter) {
11
+ let inFlight = new AbortController();
12
+ const refreshed = adapter.refresh?.bind(adapter);
13
+ return {
14
+ reads: {
15
+ bootstrap: (authorized, request) => readUntil(adapter.bootstrap(authorized, request), inFlight.signal),
16
+ ...(refreshed === undefined
17
+ ? {}
18
+ : {
19
+ refresh: (authorized, request) => readUntil(refreshed(authorized, request), inFlight.signal),
20
+ }),
21
+ reached: (locator, roomVersion, target) => adapter.reached(locator, roomVersion, target),
22
+ },
23
+ abort() {
24
+ inFlight.abort();
25
+ inFlight = new AbortController();
26
+ },
27
+ stop() {
28
+ inFlight.abort();
29
+ },
30
+ };
31
+ }
@@ -0,0 +1,38 @@
1
+ import type { Authorization, ProviderRefusal, ServiceMode } from '../adapter.js';
2
+ import { type Cell } from '../cell.js';
3
+ import type { Open } from '../open.js';
4
+ import type { CycleProgress, SyncStatus } from '../status.js';
5
+ export type RefusalReason = 'missing-required-guarantee' | 'revoked-authorization';
6
+ export type ConnectionRefusalCode = Open<RefusalReason>;
7
+ export type ConnectionRefusal = {
8
+ code: ConnectionRefusalCode;
9
+ reauthorizationOffered: boolean;
10
+ refusal: ProviderRefusal | null;
11
+ };
12
+ export type Moving = {
13
+ readonly state: SyncStatus['state'];
14
+ readonly providerUnreachable: boolean;
15
+ readonly resting: boolean;
16
+ };
17
+ export type Session = {
18
+ readonly closed: boolean;
19
+ readonly stopping: boolean;
20
+ readonly paused: boolean;
21
+ readonly authorization: Authorization | undefined;
22
+ readonly refusal: ConnectionRefusal | null;
23
+ readonly discoveries: number;
24
+ readonly roomsNamed: boolean;
25
+ readonly roomsListed: boolean;
26
+ readonly serviceMode: ServiceMode;
27
+ readonly haltedRefusal: boolean;
28
+ readonly openSignals: number;
29
+ readonly authorityChanges: number;
30
+ readonly currencyQueued: number | null;
31
+ readonly moving: Moving;
32
+ readonly complete: boolean;
33
+ readonly recorded: boolean;
34
+ readonly underway: CycleProgress | null;
35
+ readonly streamed: CycleProgress | null;
36
+ };
37
+ export declare function createSession(authorization: Authorization | undefined): Cell<Session>;
38
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/socket/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE9D,MAAM,MAAM,aAAa,GAAG,4BAA4B,GAAG,uBAAuB,CAAC;AAEnF,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;AAExD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,sBAAsB,EAAE,OAAO,CAAC;IAChC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;CACzC,CAAC;AAEF,wBAAgB,aAAa,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAqBrF"}
@@ -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 { Log } from './log.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 { 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, journal: Log, 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,170 @@
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, journal, 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
+ }),
75
+ ready,
76
+ firstDiscovery,
77
+ conversations: () => adapter.conversations,
78
+ search: () => adapter.search,
79
+ discover: (authorized) => adapter.discover?.(authorized),
80
+ follows: (locator, roomVersion, next) => adapter.follows(locator, roomVersion, next),
81
+ mutate: (authorized, request, keepUpload) => adapter.mutate(authorized, request, keepUpload),
82
+ binary: (authorized, request) => adapter.binary(authorized, request),
83
+ link: (authorized, request) => adapter.link(authorized, request),
84
+ attach: (authorized, request) => adapter.attach(authorized, request),
85
+ history: (authorized, request) => adapter.history(authorized, request),
86
+ action: (authorized, request) => adapter.action(authorized, request),
87
+ async authorize() {
88
+ if (session.now().authorization !== undefined)
89
+ return;
90
+ try {
91
+ session.set({ authorization: await adapter.authorize() });
92
+ journal.record('connection authorize');
93
+ }
94
+ catch (error) {
95
+ journal.record('connection authorize transport-uncertainty');
96
+ throw error;
97
+ }
98
+ },
99
+ observe(listen) {
100
+ const stream = adapter.roomStream;
101
+ if (stream === undefined)
102
+ return;
103
+ withdrawStream = stream.observe((event) => {
104
+ const { closed, stopping } = session.now();
105
+ if (!closed && !stopping)
106
+ received(event, listen);
107
+ });
108
+ },
109
+ observeConversations(listen) {
110
+ const stream = adapter.conversations;
111
+ if (stream === undefined)
112
+ return;
113
+ withdrawConversations = stream.observe(listen);
114
+ },
115
+ observeServiceMode(listen) {
116
+ withdrawServiceMode = adapter.serviceMode?.observe(listen);
117
+ },
118
+ close() {
119
+ session.set({ closed: true });
120
+ notifyDiscovered();
121
+ withdrawStream?.();
122
+ withdrawStream = undefined;
123
+ withdrawConversations?.();
124
+ withdrawConversations = undefined;
125
+ withdrawServiceMode?.();
126
+ },
127
+ readyFromStore: () => readyFromStore(),
128
+ notifyReady() {
129
+ notifyDiscovered();
130
+ readyFromStore();
131
+ },
132
+ closed,
133
+ stopping: () => session.now().stopping,
134
+ continuing,
135
+ reached() {
136
+ const { moving, refusal } = session.now();
137
+ return (socketOpen || !moving.providerUnreachable) && refusal === null;
138
+ },
139
+ writesHeld() {
140
+ const { serviceMode, haltedRefusal } = session.now();
141
+ return serviceMode === 'write-halted' || haltedRefusal;
142
+ },
143
+ haltedSince(opens) {
144
+ const { serviceMode, openSignals } = session.now();
145
+ if (serviceMode === 'open' && openSignals !== opens)
146
+ return false;
147
+ session.set({ haltedRefusal: true });
148
+ return true;
149
+ },
150
+ isOpen: () => socketOpen,
151
+ isAnnounced: () => announced,
152
+ isHanded: () => handed,
153
+ generation: () => generation,
154
+ naming: () => naming !== 0,
155
+ hand(rooms) {
156
+ naming += 1;
157
+ adapter.roomStream?.hold(rooms);
158
+ handed = true;
159
+ },
160
+ name(room) {
161
+ naming += 1;
162
+ adapter.roomStream?.hold([room]);
163
+ },
164
+ named() {
165
+ naming = Math.max(0, naming - 1);
166
+ },
167
+ abortReads: held.abort,
168
+ stopReads: held.stop,
169
+ };
170
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AAEA,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,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,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,MAAM,MAAM,eAAe,GAAG;IAC5B,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,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAoChF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,CA4ClF"}
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AAEA,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,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,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,MAAM,MAAM,eAAe,GAAG;IAC5B,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,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAoChF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,CA6ClF"}
package/dist/source.js CHANGED
@@ -36,15 +36,16 @@ export function sourceOf(value, sender) {
36
36
  return requestOf(source);
37
37
  if (source.kind === 'trigger') {
38
38
  const trigger = text(record(source.trigger), 'description');
39
- const ref = text(record(source.room), 'ref');
40
- const room = text(record(source.room), 'name');
41
- return trigger === null || ref === null || room === null
39
+ const room = record(source.room);
40
+ const ref = text(room, 'ref');
41
+ const called = text(room, 'name');
42
+ return trigger === null || ref === null || called === null
42
43
  ? null
43
44
  : {
44
45
  kind: 'trigger',
45
46
  customer: sender === 'customer',
46
47
  trigger,
47
- room: { ref, name: room },
48
+ room: { ref, name: called },
48
49
  };
49
50
  }
50
51
  if (source.kind === 'conversation') {
@@ -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(): ReadonlySet<string>;
25
+ transferring(): readonly string[];
26
+ arrivalDue(now: number, everyMs: number): boolean;
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,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,YAAY,IAAI,SAAS,MAAM,EAAE,CAAC;IAClC,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;CACnD,CAAC;AAEF,wBAAgB,cAAc,IAAI,QAAQ,CAqBzC"}
@@ -0,0 +1,34 @@
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
+ function matching(held) {
18
+ return [...rooms].filter(([, room]) => held(room)).map(([locator]) => locator);
19
+ }
20
+ return {
21
+ of: (locator) => rooms.get(locator) ?? NO_INSTALL,
22
+ change(locator, next) {
23
+ rooms.set(locator, next(rooms.get(locator) ?? NO_INSTALL));
24
+ },
25
+ underway: () => new Set(matching(({ installing }) => installing)),
26
+ transferring: () => matching(({ transfer }) => transfer !== null),
27
+ arrivalDue(now, everyMs) {
28
+ if (now - arrivalReported < everyMs)
29
+ return false;
30
+ arrivalReported = now;
31
+ return true;
32
+ },
33
+ };
34
+ }
@@ -0,0 +1,10 @@
1
+ export type ReadinessQueue<W> = {
2
+ add(watch: W): () => void;
3
+ held(watch: W): boolean;
4
+ changed(watch: W, reading: string): boolean;
5
+ owe(watches: readonly W[]): void;
6
+ queue(): void;
7
+ close(): void;
8
+ };
9
+ export declare function createReadinessQueue<W>(deliver: (owed: readonly W[]) => Promise<void>, unpublished: (error: unknown) => void): ReadinessQueue<W>;
10
+ //# 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,IAAI;IAC9B,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC;IAC1B,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;IACxB,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5C,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC;IACjC,KAAK,IAAI,IAAI,CAAC;IACd,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,EAC9C,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GACpC,cAAc,CAAC,CAAC,CAAC,CAgDnB"}
@@ -0,0 +1,52 @@
1
+ export function createReadinessQueue(deliver, unpublished) {
2
+ const watches = new Set();
3
+ const owed = new Set();
4
+ const lastShown = new Map();
5
+ let queued = false;
6
+ let shown = Promise.resolve();
7
+ function owe(owing) {
8
+ const waiting = owed.size > 0;
9
+ for (const watch of owing)
10
+ owed.add(watch);
11
+ if (waiting)
12
+ return;
13
+ shown = shown
14
+ .then(async () => {
15
+ const due = [...owed];
16
+ owed.clear();
17
+ await deliver(due);
18
+ })
19
+ .catch(unpublished);
20
+ }
21
+ return {
22
+ add(watch) {
23
+ watches.add(watch);
24
+ return () => {
25
+ watches.delete(watch);
26
+ lastShown.delete(watch);
27
+ };
28
+ },
29
+ held: (watch) => watches.has(watch),
30
+ changed(watch, reading) {
31
+ if (lastShown.get(watch) === reading)
32
+ return false;
33
+ lastShown.set(watch, reading);
34
+ return true;
35
+ },
36
+ owe,
37
+ queue() {
38
+ if (queued || watches.size === 0)
39
+ return;
40
+ queued = true;
41
+ queueMicrotask(() => {
42
+ queued = false;
43
+ if (watches.size > 0)
44
+ owe([...watches]);
45
+ });
46
+ },
47
+ close() {
48
+ watches.clear();
49
+ lastShown.clear();
50
+ },
51
+ };
52
+ }