@agentshouse/mdruntime 0.1.0-cd26b960b7262 → 0.1.0-cd30853a1b15e
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.
- package/README.md +21 -19
- package/dist/acceptance.d.ts +0 -3
- package/dist/acceptance.d.ts.map +1 -1
- package/dist/acceptance.js +72 -158
- package/dist/act-lanes.d.ts +30 -0
- package/dist/act-lanes.d.ts.map +1 -0
- package/dist/act-lanes.js +225 -0
- package/dist/actions.d.ts +8 -2
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +118 -67
- package/dist/adapter.d.ts +81 -56
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +0 -1
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +0 -5
- package/dist/authored.d.ts +88 -0
- package/dist/authored.d.ts.map +1 -0
- package/dist/authored.js +345 -0
- package/dist/bootstrap.d.ts +1 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +6 -19
- package/dist/change-set.d.ts +4 -0
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +6 -0
- package/dist/change.d.ts +4 -0
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +3 -0
- package/dist/chat-types.d.ts +0 -2
- package/dist/chat-types.d.ts.map +1 -1
- package/dist/chat-types.js +0 -2
- package/dist/client.d.ts +10 -19
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +30 -18
- package/dist/collection.d.ts +25 -4
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +19 -2
- package/dist/column.d.ts +5 -0
- package/dist/column.d.ts.map +1 -0
- package/dist/column.js +9 -0
- package/dist/compile.d.ts +2 -0
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +17 -5
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +31 -24
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +1 -1
- package/dist/conversation-live.d.ts +26 -12
- package/dist/conversation-live.d.ts.map +1 -1
- package/dist/conversation-live.js +23 -12
- package/dist/conversation-row.d.ts +8 -1
- package/dist/conversation-row.d.ts.map +1 -1
- package/dist/conversation-row.js +20 -7
- package/dist/conversation.d.ts +32 -10
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +317 -232
- package/dist/declaration.d.ts +10 -0
- package/dist/declaration.d.ts.map +1 -0
- package/dist/declaration.js +24 -0
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +19 -44
- package/dist/durability.d.ts +4 -0
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +4 -0
- package/dist/entry.js +1 -1
- package/dist/expectation.d.ts +25 -14
- package/dist/expectation.d.ts.map +1 -1
- package/dist/expectation.js +51 -20
- package/dist/failure.d.ts +3 -0
- package/dist/failure.d.ts.map +1 -1
- package/dist/failure.js +6 -0
- package/dist/figures.d.ts.map +1 -1
- package/dist/figures.js +4 -2
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +2 -1
- package/dist/host.d.ts +18 -2
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +55 -15
- package/dist/index.d.ts +15 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -7
- package/dist/install.d.ts +10 -6
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +92 -109
- package/dist/lifecycle.d.ts +1 -1
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +54 -40
- package/dist/listing.d.ts +11 -12
- package/dist/listing.d.ts.map +1 -1
- package/dist/listing.js +48 -72
- package/dist/live.d.ts +5 -3
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +74 -31
- package/dist/loaded.d.ts +5 -0
- package/dist/loaded.d.ts.map +1 -0
- package/dist/loaded.js +40 -0
- package/dist/locks.d.ts +2 -4
- package/dist/locks.d.ts.map +1 -1
- package/dist/locks.js +10 -39
- package/dist/lost.d.ts.map +1 -1
- package/dist/lost.js +11 -23
- package/dist/media.d.ts +5 -0
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +65 -14
- package/dist/memory.d.ts +7 -3
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +56 -26
- package/dist/messages.d.ts +12 -6
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +25 -27
- package/dist/model.d.ts +0 -1
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +0 -5
- package/dist/models.d.ts +4 -8
- package/dist/models.d.ts.map +1 -1
- package/dist/models.js +97 -139
- package/dist/observation.d.ts +27 -12
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +173 -69
- package/dist/opened.d.ts +1 -1
- package/dist/opened.d.ts.map +1 -1
- package/dist/opened.js +2 -2
- package/dist/opening.d.ts.map +1 -1
- package/dist/opening.js +5 -9
- package/dist/outcome.d.ts +7 -0
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +23 -2
- package/dist/overlay.d.ts +6 -2
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +37 -24
- package/dist/page-metadata.d.ts +8 -0
- package/dist/page-metadata.d.ts.map +1 -0
- package/dist/page-metadata.js +19 -0
- package/dist/parts.d.ts +3 -59
- package/dist/parts.d.ts.map +1 -1
- package/dist/parts.js +10 -123
- package/dist/preparation.d.ts +27 -6
- package/dist/preparation.d.ts.map +1 -1
- package/dist/preparation.js +154 -66
- package/dist/presence.d.ts +58 -0
- package/dist/presence.d.ts.map +1 -0
- package/dist/presence.js +231 -0
- package/dist/queries.d.ts +2 -2
- package/dist/queries.d.ts.map +1 -1
- package/dist/queries.js +66 -30
- package/dist/questions.d.ts +1 -5
- package/dist/questions.d.ts.map +1 -1
- package/dist/questions.js +1 -7
- package/dist/queue.d.ts +40 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +480 -0
- package/dist/reach.d.ts +2 -3
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +83 -25
- package/dist/react.d.ts +8 -5
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +28 -5
- package/dist/readiness.d.ts +9 -3
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +3 -5
- package/dist/reads.d.ts +4 -2
- package/dist/reads.d.ts.map +1 -1
- package/dist/reads.js +11 -4
- package/dist/recovery.d.ts +3 -1
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +29 -7
- package/dist/refresh.js +2 -2
- package/dist/refusal.d.ts.map +1 -1
- package/dist/refusal.js +5 -5
- package/dist/replica.d.ts +5 -11
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +14 -16
- package/dist/retried.d.ts +30 -0
- package/dist/retried.d.ts.map +1 -0
- package/dist/retried.js +72 -0
- package/dist/room-draft.d.ts +30 -5
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +270 -63
- package/dist/room-drafts.d.ts.map +1 -1
- package/dist/room-drafts.js +8 -5
- package/dist/room-list.d.ts +10 -0
- package/dist/room-list.d.ts.map +1 -0
- package/dist/room-list.js +45 -0
- package/dist/rows.d.ts +2 -1
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +9 -10
- package/dist/runtime.d.ts +9 -18
- package/dist/runtime.d.ts.map +1 -1
- package/dist/save.d.ts +42 -90
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +314 -223
- package/dist/saves.d.ts +2 -40
- package/dist/saves.d.ts.map +1 -1
- package/dist/saves.js +124 -703
- package/dist/seed.d.ts.map +1 -1
- package/dist/seed.js +4 -4
- package/dist/shown.d.ts +7 -5
- package/dist/shown.d.ts.map +1 -1
- package/dist/shown.js +75 -58
- package/dist/socket/lanes.d.ts +12 -4
- package/dist/socket/lanes.d.ts.map +1 -1
- package/dist/socket/lanes.js +34 -8
- package/dist/socket.d.ts +3 -6
- package/dist/socket.d.ts.map +1 -1
- package/dist/socket.js +3 -14
- package/dist/source.d.ts +5 -7
- package/dist/source.d.ts.map +1 -1
- package/dist/source.js +13 -2
- package/dist/store/installs.d.ts +2 -2
- package/dist/store/installs.d.ts.map +1 -1
- package/dist/store/installs.js +10 -4
- package/dist/store/readiness.d.ts +5 -4
- package/dist/store/readiness.d.ts.map +1 -1
- package/dist/store/readiness.js +28 -12
- package/dist/store/records.d.ts +17 -6
- package/dist/store/records.d.ts.map +1 -1
- package/dist/store/records.js +56 -22
- package/dist/store/rooms-shown.d.ts +8 -0
- package/dist/store/rooms-shown.d.ts.map +1 -0
- package/dist/store/rooms-shown.js +13 -0
- package/dist/store.d.ts +23 -14
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +46 -17
- package/dist/stored.d.ts +24 -13
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +80 -29
- package/dist/surface.d.ts +5 -3
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +23 -21
- package/dist/sync.d.ts +1 -1
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +89 -85
- package/dist/tables.d.ts +16 -56
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +86 -327
- package/dist/tallies.d.ts.map +1 -1
- package/dist/tallies.js +1 -2
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +4 -10
- package/dist/wire.d.ts +45 -7
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +15 -4
- package/package.json +3 -2
- package/dist/attempt.d.ts +0 -16
- package/dist/attempt.d.ts.map +0 -1
- package/dist/attempt.js +0 -70
- package/dist/job.d.ts +0 -33
- package/dist/job.d.ts.map +0 -1
- package/dist/job.js +0 -54
- package/dist/log.d.ts +0 -6
- package/dist/log.d.ts.map +0 -1
- package/dist/log.js +0 -14
- package/dist/socket/rooms.d.ts +0 -44
- package/dist/socket/rooms.d.ts.map +0 -1
- package/dist/socket/rooms.js +0 -90
- package/dist/store/fences.d.ts +0 -16
- package/dist/store/fences.d.ts.map +0 -1
- package/dist/store/fences.js +0 -26
package/dist/seed.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../src/seed.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../src/seed.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAwB,KAAK,WAAW,EAAqB,MAAM,kBAAkB,CAAC;AAC7F,OAAO,KAAK,EAAE,IAAI,EAA4C,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;KAAE,EAAE,CAAC;CACpF,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,CAAC;AAEjG,KAAK,WAAW,GAAG,CACjB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,KAAK,KAAK,EACjD,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,KAChC,MAAM,IAAI,CAAC;AA0ChB,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAe5D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAmBtD;AA+BD,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAOxF;AAYD,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAMlE;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,GACjB,MAAM,IAAI,CA4BZ"}
|
package/dist/seed.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { queryKey } from '@agentshouse/mdmodel';
|
|
2
|
-
import { whole } from './observation.js';
|
|
2
|
+
import { pendingChange, whole } from './observation.js';
|
|
3
3
|
import { documentKey } from './rows.js';
|
|
4
4
|
const seedTopic = (key) => `seed\u0000${key}`;
|
|
5
5
|
function plain(value) {
|
|
@@ -82,9 +82,9 @@ function seedRoomHeld({ socket }, room, version, held) {
|
|
|
82
82
|
socket.reads.reached(room, stored.roomVersion, version));
|
|
83
83
|
}
|
|
84
84
|
function seedHeld(runtime, at, held) {
|
|
85
|
-
const { socket } = runtime;
|
|
85
|
+
const { socket, presence } = runtime;
|
|
86
86
|
return Object.entries(at).every(([room, version]) => (socket.session.now().roomsListed &&
|
|
87
|
-
|
|
87
|
+
presence.room(room) === undefined &&
|
|
88
88
|
!held.rooms.has(room)) ||
|
|
89
89
|
seedRoomHeld(runtime, room, version, held));
|
|
90
90
|
}
|
|
@@ -130,7 +130,7 @@ export function watchSeeded(runtime, plan, deliver, watch) {
|
|
|
130
130
|
const watcher = store.watch(seedTopic(plan.key), shown);
|
|
131
131
|
const stop = watch((cover, held) => seedBehind(runtime, plan, cover, held), (message) => {
|
|
132
132
|
const answered = message;
|
|
133
|
-
pending = whole(answered)
|
|
133
|
+
pending = whole(answered) ? 'pending' in answered.result : pendingChange(answered);
|
|
134
134
|
if (pending && store.seeds.of(plan.key) !== undefined) {
|
|
135
135
|
shown();
|
|
136
136
|
return;
|
package/dist/shown.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type
|
|
1
|
+
import type { Member } from './adapter.js';
|
|
2
|
+
import { type ChangeSet } from './change-set.js';
|
|
3
3
|
import type { QueueEntry } from './outcome.js';
|
|
4
4
|
import type { Runtime } from './runtime.js';
|
|
5
5
|
import type { Live, Moving } from './socket.js';
|
|
@@ -13,11 +13,12 @@ export declare const MEMBER_TOPIC = "member";
|
|
|
13
13
|
export declare const AUTHORITY_TOPIC = "authority-changes";
|
|
14
14
|
export declare const LOCKS_TOPIC = "locks";
|
|
15
15
|
export declare const queueTopic: (locator: string) => string;
|
|
16
|
-
export declare function recoverReads({ liveQueries, figures }: Runtime): void;
|
|
16
|
+
export declare function recoverReads({ liveQueries, figures }: Runtime, locators?: readonly string[]): void;
|
|
17
17
|
export declare function emitRooms(runtime: Runtime, changed?: readonly string[]): Promise<void>;
|
|
18
18
|
export declare function emitKnownRooms(runtime: Runtime): void;
|
|
19
19
|
export declare function emitRefusal(runtime: Runtime): void;
|
|
20
|
-
export declare function
|
|
20
|
+
export declare function storageLossNow({ store }: Runtime): string | null;
|
|
21
|
+
export declare function emitStorageLoss(runtime: Runtime): void;
|
|
21
22
|
export declare function emitMember({ store }: Runtime, member: Member | null): void;
|
|
22
23
|
export declare function show(runtime: Runtime): Promise<void>;
|
|
23
24
|
export declare function moveTo(runtime: Runtime, next: Moving): Promise<void>;
|
|
@@ -26,6 +27,7 @@ export declare function transferring({ socket }: Runtime): Moving;
|
|
|
26
27
|
export declare function pendingShown(runtime: Runtime): Promise<void>;
|
|
27
28
|
export declare function entriesOf(runtime: Runtime, locator: string): Promise<readonly QueueEntry[]>;
|
|
28
29
|
export declare function publishChangeSet(runtime: Runtime, set: ChangeSet): Promise<void>;
|
|
29
|
-
export declare function
|
|
30
|
+
export declare function submissionDue(runtime: Runtime, locators?: readonly string[]): Promise<void>;
|
|
31
|
+
export declare function roomUnreadable(runtime: Runtime, locator: string): void;
|
|
30
32
|
export declare function rest(runtime: Runtime, progress: CycleProgress | null, live?: Live): Promise<void>;
|
|
31
33
|
//# sourceMappingURL=shown.d.ts.map
|
package/dist/shown.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shown.d.ts","sourceRoot":"","sources":["../src/shown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"shown.d.ts","sourceRoot":"","sources":["../src/shown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAA8B,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI7E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAA6B,KAAK,aAAa,EAAmB,MAAM,aAAa,CAAC;AAiB7F,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC,eAAO,MAAM,YAAY,gBAAgB,CAAC;AAE1C,eAAO,MAAM,aAAa,uBAAuB,CAAC;AAElD,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAEjD,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAEjD,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC,eAAO,MAAM,eAAe,sBAAsB,CAAC;AAEnD,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC,eAAO,MAAM,UAAU,YAAa,MAAM,WAA4B,CAAC;AAqCvE,wBAAgB,YAAY,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,QAG3F;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAMtF;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,QAI9C;AAiFD,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,QAK3C;AAED,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAGhE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,QAG/C;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,QAEnE;AA0BD,wBAAgB,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAepD;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3D;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,GAAG,MAAM,CAExD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAK5D;AAYD,wBAAsB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CAGjG;AAcD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhF;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAOjG;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,QAG/D;AAED,wBAAsB,IAAI,CACxB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,aAAa,GAAG,IAAI,EAC9B,IAAI,GAAE,IAAqC,iBAiC5C"}
|
package/dist/shown.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { changeSet, mergeChangeSets } from './change-set.js';
|
|
1
2
|
import { conversationsChanged, conversationsLearned } from './conversation.js';
|
|
2
|
-
import {
|
|
3
|
+
import { lossStated } from './durability.js';
|
|
4
|
+
import { listedEntries, listingNow, shownChange, shownRooms } from './listing.js';
|
|
3
5
|
import { emitPresentation, publishRoomDrafts } from './room-drafts.js';
|
|
4
6
|
import { same } from './status.js';
|
|
5
7
|
export const ROOMS_TOPIC = 'rooms';
|
|
@@ -12,9 +14,8 @@ export const AUTHORITY_TOPIC = 'authority-changes';
|
|
|
12
14
|
export const LOCKS_TOPIC = 'locks';
|
|
13
15
|
export const queueTopic = (locator) => `queue\u0000${locator}`;
|
|
14
16
|
async function attended({ store, localSaves }) {
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const attentionRequired = held.returned.flatMap((record) => record.returned === null || isFenced(record.locator)
|
|
17
|
+
const held = await store.status();
|
|
18
|
+
const attentionRequired = held.returned.flatMap((record) => record.returned === null
|
|
18
19
|
? []
|
|
19
20
|
: [{ room: record.locator, path: record.path, returned: structuredClone(record.returned) }]);
|
|
20
21
|
attentionRequired.sort((left, right) => {
|
|
@@ -26,33 +27,30 @@ async function attended({ store, localSaves }) {
|
|
|
26
27
|
});
|
|
27
28
|
const changed = new Map();
|
|
28
29
|
if (!localSaves) {
|
|
29
|
-
for (const change of held.unsent)
|
|
30
|
-
|
|
31
|
-
changed.set(`${change.room}\u0000${change.path}`, change);
|
|
32
|
-
}
|
|
30
|
+
for (const change of held.unsent)
|
|
31
|
+
changed.set(`${change.room}\u0000${change.path}`, change);
|
|
33
32
|
}
|
|
34
33
|
const unsent = [...changed]
|
|
35
34
|
.sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))
|
|
36
35
|
.map(([, change]) => change);
|
|
37
36
|
return {
|
|
38
|
-
queued: !localSaves && held.queued.
|
|
37
|
+
queued: !localSaves && held.queued.length > 0,
|
|
39
38
|
lastCompleted: held.lastCompleted,
|
|
40
39
|
attentionRequired,
|
|
41
40
|
unsent,
|
|
42
|
-
reset: held.resets.reduce((earliest, {
|
|
41
|
+
reset: held.resets.reduce((earliest, { reset }) => (earliest !== null && earliest <= reset ? earliest : reset), null),
|
|
43
42
|
};
|
|
44
43
|
}
|
|
45
44
|
async function queuedWork({ store, localSaves }) {
|
|
46
|
-
|
|
47
|
-
return !localSaves && held.some((locator) => !store.fences.has(locator));
|
|
45
|
+
return !localSaves && (await store.queued()).length > 0;
|
|
48
46
|
}
|
|
49
|
-
export function recoverReads({ liveQueries, figures }) {
|
|
50
|
-
liveQueries.recover();
|
|
47
|
+
export function recoverReads({ liveQueries, figures }, locators) {
|
|
48
|
+
liveQueries.recover(locators);
|
|
51
49
|
figures.recover();
|
|
52
50
|
}
|
|
53
51
|
export function emitRooms(runtime, changed) {
|
|
54
|
-
recoverReads(runtime);
|
|
55
|
-
runtime.store.readiness.queue();
|
|
52
|
+
recoverReads(runtime, changed);
|
|
53
|
+
runtime.store.readiness.queue(changed);
|
|
56
54
|
return changed === undefined
|
|
57
55
|
? publishRooms(runtime, 'all')
|
|
58
56
|
: publishRooms(runtime, 'changed', changed);
|
|
@@ -77,53 +75,58 @@ function roomsOwedWith(held, mode, touched) {
|
|
|
77
75
|
}
|
|
78
76
|
return held;
|
|
79
77
|
}
|
|
78
|
+
async function patchedRooms(runtime, owed) {
|
|
79
|
+
const { store } = runtime;
|
|
80
|
+
const touched = [...new Set([...owed.changed, ...owed.counted])];
|
|
81
|
+
const entries = await listedEntries(runtime, touched);
|
|
82
|
+
const shown = store.roomsShown.now();
|
|
83
|
+
if (entries === null || shown === null)
|
|
84
|
+
return false;
|
|
85
|
+
if (runtime.socket.closed())
|
|
86
|
+
return true;
|
|
87
|
+
const moved = entries.filter(({ locator, documents }) => owed.changed.has(locator) || shown.get(locator)?.documents !== documents);
|
|
88
|
+
const counted = moved.flatMap(({ locator }) => (owed.changed.has(locator) ? [] : [locator]));
|
|
89
|
+
if (counted.length > 0) {
|
|
90
|
+
recoverReads(runtime, counted);
|
|
91
|
+
store.readiness.queue(counted);
|
|
92
|
+
}
|
|
93
|
+
store.roomsShown.patch(moved);
|
|
94
|
+
if (moved.length === 0)
|
|
95
|
+
return true;
|
|
96
|
+
const change = shownChange(runtime, moved);
|
|
97
|
+
for (const watcher of store.watching(ROOMS_TOPIC, 'ready'))
|
|
98
|
+
watcher.answer(change);
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
80
101
|
async function deliverRooms(runtime, owed) {
|
|
81
102
|
const { store, socket } = runtime;
|
|
82
103
|
const waiting = () => store.watching(ROOMS_TOPIC, 'waiting');
|
|
83
104
|
if (socket.closed() || store.watching(ROOMS_TOPIC).length === 0)
|
|
84
105
|
return;
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
if (
|
|
106
|
+
const touched = owed.changed.size > 0 || owed.counted.size > 0;
|
|
107
|
+
if (!owed.all && touched && waiting().length === 0 && (await patchedRooms(runtime, owed)))
|
|
108
|
+
return;
|
|
109
|
+
if (touched)
|
|
89
110
|
owed.all = true;
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
if (held === null)
|
|
93
|
-
return;
|
|
94
|
-
const { roomsShown } = store.device.now();
|
|
95
|
-
owed.all = [...owed.counted].some((locator) => held.rooms.has(locator) &&
|
|
96
|
-
roomsShown?.get(locator)?.documents !== held.rooms.get(locator).documents);
|
|
97
|
-
if (owed.all) {
|
|
98
|
-
recoverReads(runtime);
|
|
99
|
-
store.readiness.queue();
|
|
100
|
-
}
|
|
101
|
-
else if (waiting().length === 0)
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
const listing = patched ?? (await listingNow(runtime).catch(() => null));
|
|
105
|
-
if (listing === null || socket.closed())
|
|
111
|
+
const listing = await listingNow(runtime);
|
|
112
|
+
if (socket.closed())
|
|
106
113
|
return;
|
|
107
114
|
const { roomsListed, refusal, moving } = socket.session.now();
|
|
108
115
|
const joining = waiting().length > 0 &&
|
|
109
116
|
(roomsListed || listing.size > 0 || refusal !== null || moving.providerUnreachable);
|
|
110
|
-
if (!owed.all &&
|
|
117
|
+
if (!owed.all && !joining)
|
|
111
118
|
return;
|
|
112
119
|
const value = shownRooms(runtime, listing);
|
|
113
|
-
const
|
|
120
|
+
const shown = store.roomsShown.now();
|
|
114
121
|
const moved = owed.all ||
|
|
115
|
-
|
|
116
|
-
(roomsShown !== null &&
|
|
117
|
-
JSON.stringify(shownRooms(runtime, roomsShown)) !== JSON.stringify(value));
|
|
122
|
+
(shown !== null && JSON.stringify(shownRooms(runtime, shown)) !== JSON.stringify(value));
|
|
118
123
|
if (moved)
|
|
119
124
|
for (const watcher of store.watching(ROOMS_TOPIC, 'ready'))
|
|
120
125
|
watcher.answer(value);
|
|
121
126
|
if (joining)
|
|
122
127
|
for (const watcher of waiting())
|
|
123
128
|
watcher.answer(value);
|
|
124
|
-
store.
|
|
125
|
-
roomsShown: store.watching(ROOMS_TOPIC, 'ready').length === 0 ? null : listing,
|
|
126
|
-
});
|
|
129
|
+
store.roomsShown.show(store.watching(ROOMS_TOPIC, 'ready').length === 0 ? null : listing);
|
|
127
130
|
}
|
|
128
131
|
function publishRooms(runtime, mode, touched = []) {
|
|
129
132
|
if (runtime.socket.closed())
|
|
@@ -132,13 +135,17 @@ function publishRooms(runtime, mode, touched = []) {
|
|
|
132
135
|
}
|
|
133
136
|
export function emitRefusal(runtime) {
|
|
134
137
|
const { store, socket } = runtime;
|
|
135
|
-
store.readiness.queue();
|
|
138
|
+
store.readiness.queue([]);
|
|
136
139
|
store.tell(REFUSAL_TOPIC, socket.session.now().refusal);
|
|
137
140
|
emitKnownRooms(runtime);
|
|
138
141
|
}
|
|
139
|
-
export function
|
|
140
|
-
store.
|
|
141
|
-
|
|
142
|
+
export function storageLossNow({ store }) {
|
|
143
|
+
const { persistence, storageLoss } = store.device.now();
|
|
144
|
+
return lossStated(persistence, storageLoss);
|
|
145
|
+
}
|
|
146
|
+
export function emitStorageLoss(runtime) {
|
|
147
|
+
runtime.store.readiness.queue([]);
|
|
148
|
+
runtime.store.tell(STORAGE_LOSS_TOPIC, storageLossNow(runtime));
|
|
142
149
|
}
|
|
143
150
|
export function emitMember({ store }, member) {
|
|
144
151
|
store.tell(MEMBER_TOPIC, member);
|
|
@@ -164,13 +171,16 @@ async function deliverStatus(runtime, owed) {
|
|
|
164
171
|
store.tell(STATUS_TOPIC, next);
|
|
165
172
|
}
|
|
166
173
|
}
|
|
174
|
+
function conversationsCurrent({ conversations }) {
|
|
175
|
+
return conversations.listed() && conversations.current();
|
|
176
|
+
}
|
|
167
177
|
export function show(runtime) {
|
|
168
|
-
const { store, socket
|
|
178
|
+
const { store, socket } = runtime;
|
|
169
179
|
if (socket.closed())
|
|
170
180
|
return Promise.resolve();
|
|
171
|
-
store.readiness.queue();
|
|
181
|
+
store.readiness.queue([]);
|
|
172
182
|
emitKnownRooms(runtime);
|
|
173
|
-
const moved = { moving: socket.session.now().moving, current:
|
|
183
|
+
const moved = { moving: socket.session.now().moving, current: conversationsCurrent(runtime) };
|
|
174
184
|
return store.owing(STATUS_TOPIC, (held) => {
|
|
175
185
|
if (held === undefined)
|
|
176
186
|
return [moved];
|
|
@@ -250,20 +260,27 @@ export function publishChangeSet(runtime, set) {
|
|
|
250
260
|
conversationsChanged(conversations, set);
|
|
251
261
|
return Promise.all(shownNow).then(() => undefined);
|
|
252
262
|
}
|
|
253
|
-
export function
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
263
|
+
export async function submissionDue(runtime, locators) {
|
|
264
|
+
const { store } = runtime;
|
|
265
|
+
const due = (await store.queued()).filter((locator) => locators === undefined || locators.includes(locator));
|
|
266
|
+
if (due.length === 0)
|
|
267
|
+
return;
|
|
268
|
+
await store.changed(mergeChangeSets(due.map((locator) => changeSet(locator, { due: true }))));
|
|
269
|
+
}
|
|
270
|
+
export function roomUnreadable(runtime, locator) {
|
|
271
|
+
runtime.presence.refused(locator, null);
|
|
272
|
+
emitRooms(runtime, [locator]);
|
|
257
273
|
}
|
|
258
274
|
export async function rest(runtime, progress, live = () => !runtime.socket.closed()) {
|
|
259
|
-
const { store, socket } = runtime;
|
|
260
|
-
const { session, lanes
|
|
275
|
+
const { store, socket, presence } = runtime;
|
|
276
|
+
const { session, lanes } = socket;
|
|
261
277
|
if (!live())
|
|
262
278
|
return;
|
|
263
279
|
const settled = () => session.now().complete &&
|
|
264
280
|
lanes.roomWork() === 0 &&
|
|
265
281
|
!socket.naming() &&
|
|
266
|
-
|
|
282
|
+
presence.settled() &&
|
|
283
|
+
conversationsCurrent(runtime);
|
|
267
284
|
let synced = settled();
|
|
268
285
|
if (synced && !session.now().recorded) {
|
|
269
286
|
const queued = await queuedWork(runtime).catch(() => true);
|
package/dist/socket/lanes.d.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
import type { CallResult } from '../outcome.js';
|
|
1
2
|
export type Live = () => boolean;
|
|
3
|
+
export type KeptSender = {
|
|
4
|
+
next(): Promise<CallResult>;
|
|
5
|
+
};
|
|
2
6
|
type LaneRules = {
|
|
3
7
|
generation(): number;
|
|
4
8
|
continuing(): boolean;
|
|
5
9
|
stopping(): boolean;
|
|
10
|
+
failed(locator: string, error: unknown): void;
|
|
6
11
|
};
|
|
7
12
|
export type Lanes = {
|
|
8
13
|
task(lane: string, work: (live: Live) => Promise<void>): Promise<void>;
|
|
@@ -11,10 +16,13 @@ export type Lanes = {
|
|
|
11
16
|
roomWork(): number;
|
|
12
17
|
current(): Promise<unknown>;
|
|
13
18
|
finished(): Promise<unknown>;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
19
|
+
sender(operation: string): KeptSender | undefined;
|
|
20
|
+
sending(operation: string, sender: KeptSender): void;
|
|
21
|
+
sent(operation: string, sender: KeptSender): void;
|
|
22
|
+
settled(operation: string): Promise<void>;
|
|
23
|
+
settle(operation: string, lost: boolean): void;
|
|
24
|
+
unclaimed(operation: string): boolean;
|
|
17
25
|
};
|
|
18
|
-
export declare function createLanes({ generation, continuing, stopping }: LaneRules): Lanes;
|
|
26
|
+
export declare function createLanes({ generation, continuing, stopping, failed }: LaneRules): Lanes;
|
|
19
27
|
export {};
|
|
20
28
|
//# sourceMappingURL=lanes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lanes.d.ts","sourceRoot":"","sources":["../../src/socket/lanes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"lanes.d.ts","sourceRoot":"","sources":["../../src/socket/lanes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC;AAEjC,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,CAAA;CAAE,CAAC;AAIzD,KAAK,SAAS,GAAG;IACf,UAAU,IAAI,MAAM,CAAC;IACrB,UAAU,IAAI,OAAO,CAAC;IACtB,QAAQ,IAAI,OAAO,CAAC;IACpB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAClB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACzE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,QAAQ,IAAI,MAAM,CAAC;IACnB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAClD,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACrD,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAClD,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/C,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;CACvC,CAAC;AAIF,wBAAgB,WAAW,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,SAAS,GAAG,KAAK,CAqG1F"}
|
package/dist/socket/lanes.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
const ROOM_READS = 256;
|
|
2
|
-
export function createLanes({ generation, continuing, stopping }) {
|
|
2
|
+
export function createLanes({ generation, continuing, stopping, failed }) {
|
|
3
3
|
const lanes = new Map();
|
|
4
4
|
const roomLanes = new Map();
|
|
5
5
|
const roomReads = { free: ROOM_READS, waiting: [] };
|
|
6
6
|
const working = new Set();
|
|
7
|
-
const
|
|
7
|
+
const senders = new Map();
|
|
8
|
+
const settlements = new Map();
|
|
9
|
+
const unclaimed = new Set();
|
|
8
10
|
let roomWork = 0;
|
|
9
11
|
async function admittedRead(work) {
|
|
10
12
|
while (roomReads.free === 0) {
|
|
@@ -59,19 +61,43 @@ export function createLanes({ generation, continuing, stopping }) {
|
|
|
59
61
|
roomTask(locator, work) {
|
|
60
62
|
if (stopping())
|
|
61
63
|
return Promise.resolve();
|
|
62
|
-
return inRoom(locator, (live) => admittedRead(() => work(live))).catch(() =>
|
|
64
|
+
return inRoom(locator, (live) => admittedRead(() => work(live))).catch((error) => {
|
|
65
|
+
if (!stopping())
|
|
66
|
+
failed(locator, error);
|
|
67
|
+
});
|
|
63
68
|
},
|
|
64
69
|
roomWork: () => roomWork,
|
|
65
70
|
current: () => Promise.all([...lanes.values()]
|
|
66
71
|
.filter((held) => held.generation === generation())
|
|
67
72
|
.map((held) => held.chain)),
|
|
68
73
|
finished: () => Promise.all(working),
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
74
|
+
sender: (operation) => senders.get(operation),
|
|
75
|
+
sending(operation, sender) {
|
|
76
|
+
senders.set(operation, sender);
|
|
72
77
|
},
|
|
73
|
-
|
|
74
|
-
|
|
78
|
+
sent(operation, sender) {
|
|
79
|
+
if (senders.get(operation) === sender)
|
|
80
|
+
senders.delete(operation);
|
|
75
81
|
},
|
|
82
|
+
settled(operation) {
|
|
83
|
+
if (unclaimed.delete(operation))
|
|
84
|
+
return Promise.resolve();
|
|
85
|
+
return new Promise((settle) => {
|
|
86
|
+
const earlier = settlements.get(operation);
|
|
87
|
+
settlements.set(operation, () => {
|
|
88
|
+
earlier?.();
|
|
89
|
+
settle();
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
},
|
|
93
|
+
settle(operation, lost) {
|
|
94
|
+
const settle = settlements.get(operation);
|
|
95
|
+
settlements.delete(operation);
|
|
96
|
+
if (settle !== undefined)
|
|
97
|
+
settle();
|
|
98
|
+
else if (lost)
|
|
99
|
+
unclaimed.add(operation);
|
|
100
|
+
},
|
|
101
|
+
unclaimed: (operation) => unclaimed.has(operation),
|
|
76
102
|
};
|
|
77
103
|
}
|
package/dist/socket.d.ts
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import type { Adapter, Authorization, ConversationEvent, Discovery, HeldRoom, RoomStreamEvent, ServiceMode } from './adapter.js';
|
|
2
2
|
import type { Reads } from './bootstrap.js';
|
|
3
3
|
import type { Cell } from './cell.js';
|
|
4
|
-
import type {
|
|
4
|
+
import type { Retries } from './retried.js';
|
|
5
5
|
import { type Admission } from './socket/admission.js';
|
|
6
6
|
import { type Answers } from './socket/answers.js';
|
|
7
7
|
import { type Lanes } from './socket/lanes.js';
|
|
8
|
-
import { type Rooms } from './socket/rooms.js';
|
|
9
8
|
import { type Session } from './socket/session.js';
|
|
10
|
-
export type { Live } from './socket/lanes.js';
|
|
11
|
-
export type { RoomDeclaration } from './socket/rooms.js';
|
|
9
|
+
export type { KeptSender, Live } from './socket/lanes.js';
|
|
12
10
|
export type { ConnectionRefusal, ConnectionRefusalCode, Moving, RefusalReason, } from './socket/session.js';
|
|
13
11
|
type SocketEvent = {
|
|
14
12
|
readonly kind: 'opened';
|
|
@@ -28,7 +26,6 @@ export type RuntimeSocket = Admission & Answers & {
|
|
|
28
26
|
readonly reads: Reads;
|
|
29
27
|
readonly streamed: boolean;
|
|
30
28
|
readonly session: Cell<Session>;
|
|
31
|
-
readonly rooms: Rooms;
|
|
32
29
|
readonly lanes: Lanes;
|
|
33
30
|
readonly ready: Promise<void>;
|
|
34
31
|
readonly firstDiscovery: Promise<void>;
|
|
@@ -66,5 +63,5 @@ export type RuntimeSocket = Admission & Answers & {
|
|
|
66
63
|
abortReads(): void;
|
|
67
64
|
stopReads(): void;
|
|
68
65
|
};
|
|
69
|
-
export declare function createSocket(adapter: Adapter,
|
|
66
|
+
export declare function createSocket(adapter: Adapter, retries: Retries, authorization: Authorization | undefined): RuntimeSocket;
|
|
70
67
|
//# sourceMappingURL=socket.d.ts.map
|
package/dist/socket.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../src/socket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EACb,iBAAiB,EACjB,SAAS,EACT,QAAQ,EACR,eAAe,EACf,WAAW,EACZ,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../src/socket.ts"],"names":[],"mappings":"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"}
|
package/dist/socket.js
CHANGED
|
@@ -2,14 +2,12 @@ import { createAdmission } from './socket/admission.js';
|
|
|
2
2
|
import { createAnswers } from './socket/answers.js';
|
|
3
3
|
import { createLanes } from './socket/lanes.js';
|
|
4
4
|
import { createReads } from './socket/reads.js';
|
|
5
|
-
import { createRooms } from './socket/rooms.js';
|
|
6
5
|
import { createSession } from './socket/session.js';
|
|
7
|
-
export function createSocket(adapter,
|
|
6
|
+
export function createSocket(adapter, retries, authorization) {
|
|
8
7
|
const held = createReads(adapter);
|
|
9
8
|
const admission = createAdmission();
|
|
10
9
|
const answers = createAnswers();
|
|
11
10
|
const session = createSession(authorization);
|
|
12
|
-
const rooms = createRooms();
|
|
13
11
|
let readyFromStore = () => { };
|
|
14
12
|
const ready = new Promise((resolve) => {
|
|
15
13
|
readyFromStore = resolve;
|
|
@@ -69,11 +67,11 @@ export function createSocket(adapter, journal, authorization) {
|
|
|
69
67
|
reads: held.reads,
|
|
70
68
|
streamed: adapter.roomStream !== undefined,
|
|
71
69
|
session,
|
|
72
|
-
rooms,
|
|
73
70
|
lanes: createLanes({
|
|
74
71
|
generation: () => generation,
|
|
75
72
|
continuing,
|
|
76
73
|
stopping: () => session.now().stopping,
|
|
74
|
+
failed: (locator, error) => retries.failed('download', locator, error),
|
|
77
75
|
}),
|
|
78
76
|
ready,
|
|
79
77
|
firstDiscovery,
|
|
@@ -90,14 +88,7 @@ export function createSocket(adapter, journal, authorization) {
|
|
|
90
88
|
async authorize() {
|
|
91
89
|
if (session.now().authorization !== undefined)
|
|
92
90
|
return;
|
|
93
|
-
|
|
94
|
-
session.set({ authorization: await adapter.authorize() });
|
|
95
|
-
journal.record('connection authorize');
|
|
96
|
-
}
|
|
97
|
-
catch (error) {
|
|
98
|
-
journal.record('connection authorize transport-uncertainty');
|
|
99
|
-
throw error;
|
|
100
|
-
}
|
|
91
|
+
session.set({ authorization: await adapter.authorize() });
|
|
101
92
|
},
|
|
102
93
|
observe(listen) {
|
|
103
94
|
const stream = adapter.roomStream;
|
|
@@ -121,8 +112,6 @@ export function createSocket(adapter, journal, authorization) {
|
|
|
121
112
|
close() {
|
|
122
113
|
session.set({ closed: true });
|
|
123
114
|
notifyDiscovered();
|
|
124
|
-
rooms.unreadied();
|
|
125
|
-
rooms.connectionLive();
|
|
126
115
|
withdrawStream?.();
|
|
127
116
|
withdrawStream = undefined;
|
|
128
117
|
withdrawConversations?.();
|
package/dist/source.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export type RequestAnswer = 'at_once' | 'ask_me' | 'off';
|
|
1
2
|
export type HouseSource = {
|
|
2
3
|
readonly kind: 'request';
|
|
3
4
|
readonly request: string;
|
|
@@ -8,8 +9,12 @@ export type HouseSource = {
|
|
|
8
9
|
};
|
|
9
10
|
readonly room: {
|
|
10
11
|
readonly ref: string;
|
|
12
|
+
readonly handle: string;
|
|
11
13
|
readonly name: string;
|
|
12
14
|
};
|
|
15
|
+
readonly sent: string;
|
|
16
|
+
readonly instruction: string | null;
|
|
17
|
+
readonly answer: RequestAnswer | null;
|
|
13
18
|
readonly approved: string | null;
|
|
14
19
|
} | {
|
|
15
20
|
readonly kind: 'mail';
|
|
@@ -45,13 +50,6 @@ export type ChatRequest = {
|
|
|
45
50
|
readonly room: string;
|
|
46
51
|
readonly message?: string;
|
|
47
52
|
};
|
|
48
|
-
export type ChatRoomRequest = {
|
|
49
|
-
readonly request: string;
|
|
50
|
-
readonly room: {
|
|
51
|
-
readonly ref: string;
|
|
52
|
-
readonly name: string;
|
|
53
|
-
};
|
|
54
|
-
};
|
|
55
53
|
type RequestAgentFunction = {
|
|
56
54
|
readonly name: string;
|
|
57
55
|
readonly version: number;
|
package/dist/source.d.ts.map
CHANGED
|
@@ -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;
|
|
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
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { record, text } from './read.js';
|
|
2
|
+
const ANSWERS = ['at_once', 'ask_me', 'off'];
|
|
2
3
|
function agentFunctionOf(value) {
|
|
3
4
|
if (value === null)
|
|
4
5
|
return null;
|
|
@@ -7,6 +8,9 @@ function agentFunctionOf(value) {
|
|
|
7
8
|
const version = agentFunction.version;
|
|
8
9
|
return name === null || typeof version !== 'number' ? undefined : { name, version };
|
|
9
10
|
}
|
|
11
|
+
function answerOf(value) {
|
|
12
|
+
return ANSWERS.find((one) => one === value) ?? null;
|
|
13
|
+
}
|
|
10
14
|
function requestOf(source) {
|
|
11
15
|
const request = text(source, 'request');
|
|
12
16
|
const agentFunction = agentFunctionOf(source.agent_function);
|
|
@@ -14,19 +18,26 @@ function requestOf(source) {
|
|
|
14
18
|
const by = text(requester, 'name');
|
|
15
19
|
const room = record(source.room);
|
|
16
20
|
const ref = text(room, 'ref');
|
|
21
|
+
const handle = text(room, 'handle');
|
|
17
22
|
const called = text(room, 'name');
|
|
23
|
+
const sent = typeof source.sent === 'string' ? source.sent : null;
|
|
18
24
|
if (request === null ||
|
|
19
25
|
agentFunction === undefined ||
|
|
20
26
|
by === null ||
|
|
21
27
|
ref === null ||
|
|
22
|
-
|
|
28
|
+
handle === null ||
|
|
29
|
+
called === null ||
|
|
30
|
+
sent === null)
|
|
23
31
|
return null;
|
|
24
32
|
return {
|
|
25
33
|
kind: 'request',
|
|
26
34
|
request,
|
|
27
35
|
agentFunction,
|
|
28
36
|
requester: { name: by, room: text(requester, 'room') !== null },
|
|
29
|
-
room: { ref, name: called },
|
|
37
|
+
room: { ref, handle, name: called },
|
|
38
|
+
sent,
|
|
39
|
+
instruction: text(source, 'instruction'),
|
|
40
|
+
answer: answerOf(source.answer),
|
|
30
41
|
approved: text(source, 'approved_at'),
|
|
31
42
|
};
|
|
32
43
|
}
|
package/dist/store/installs.d.ts
CHANGED
|
@@ -21,9 +21,9 @@ export declare const NO_INSTALL: RoomInstall;
|
|
|
21
21
|
export type Installs = {
|
|
22
22
|
of(locator: string): RoomInstall;
|
|
23
23
|
change(locator: string, next: (held: RoomInstall) => RoomInstall): void;
|
|
24
|
-
underway(): ReadonlySet<string>;
|
|
24
|
+
underway(among: readonly string[] | null): ReadonlySet<string>;
|
|
25
25
|
transferring(): readonly string[];
|
|
26
|
-
|
|
26
|
+
arrivalsDue(locator: string, now: number, everyMs: number): readonly string[];
|
|
27
27
|
};
|
|
28
28
|
export declare function createInstalls(): Installs;
|
|
29
29
|
export {};
|
|
@@ -1 +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;
|
|
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"}
|