@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/listing.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { HeldRooms } from '@agentshouse/mdmodel';
|
|
2
|
-
import type { DiscoveredRoom, HeldRoom, OperationScopes, ProviderRefusal, ReplicaAdmission } from './adapter.js';
|
|
2
|
+
import type { DiscoveredRoom, HeldRoom, OperationScopes, ProviderRefusal, ReplicaAdmission, RoomDeclaration } from './adapter.js';
|
|
3
3
|
import type { Composition } from './collection.js';
|
|
4
|
+
import type { KeyedChange } from './observation.js';
|
|
4
5
|
import { type ModelState, type TypesResult } from './model.js';
|
|
5
6
|
import { type PortReach } from './reach.js';
|
|
6
7
|
import type { ReplicaRecord } from './replica.js';
|
|
7
8
|
import type { Runtime } from './runtime.js';
|
|
8
|
-
import type { RoomDeclaration } from './socket.js';
|
|
9
9
|
import type { Stored } from './store.js';
|
|
10
10
|
export type AppTypedSelection = {
|
|
11
11
|
roots: readonly string[];
|
|
@@ -20,6 +20,7 @@ export type AppRoom = {
|
|
|
20
20
|
model: TypesResult;
|
|
21
21
|
typedSelection: AppTypedSelection | null;
|
|
22
22
|
providerOwnedPaths: readonly string[];
|
|
23
|
+
authoredPaths: readonly string[];
|
|
23
24
|
roomVersion: string | null;
|
|
24
25
|
documents: number;
|
|
25
26
|
synchronizationAvailable: boolean;
|
|
@@ -27,26 +28,24 @@ export type AppRoom = {
|
|
|
27
28
|
locked: boolean;
|
|
28
29
|
};
|
|
29
30
|
type ListedRoom = Omit<AppRoom, 'documents' | 'locked'>;
|
|
30
|
-
type ListedEntry = ListedRoom & {
|
|
31
|
+
export type ListedEntry = ListedRoom & {
|
|
31
32
|
readonly documents: number;
|
|
32
33
|
};
|
|
33
34
|
export type Listing = ReadonlyMap<string, ListedEntry>;
|
|
34
|
-
export
|
|
35
|
+
export type RoomsChange = KeyedChange<string, AppRoom>;
|
|
36
|
+
export declare function modelIn({ socket, presence }: Runtime, locator: string, stored: Stored | undefined): ModelState;
|
|
35
37
|
export declare function compositionFor(runtime: Runtime, record: ReplicaRecord): Composition;
|
|
36
|
-
export declare function declarationOf({
|
|
38
|
+
export declare function declarationOf({ presence }: Runtime, locator: string, stored: Stored | undefined): {
|
|
37
39
|
readonly room: RoomDeclaration;
|
|
38
40
|
readonly available: boolean;
|
|
39
41
|
} | undefined;
|
|
40
|
-
export declare function listedLocators({
|
|
41
|
-
export declare function
|
|
42
|
+
export declare function listedLocators({ presence }: Runtime, held: ReadonlyMap<string, unknown>): string[];
|
|
43
|
+
export declare function listedOrHeld({ presence }: Runtime, held: ReadonlyMap<string, unknown>, locator: string): boolean;
|
|
44
|
+
export declare function listedEntries(runtime: Runtime, touched: readonly string[]): Promise<readonly ListedEntry[] | null>;
|
|
42
45
|
export declare function listingNow(runtime: Runtime): Promise<Listing>;
|
|
43
46
|
export declare function shownRooms(runtime: Runtime, listing: Listing): readonly AppRoom[];
|
|
47
|
+
export declare function shownChange(runtime: Runtime, entries: readonly ListedEntry[]): RoomsChange;
|
|
44
48
|
export declare function roomFacts(runtime: Runtime, reach?: PortReach | null): Promise<HeldRooms>;
|
|
45
|
-
export declare function list({ store, socket }: Runtime, room: RoomDeclaration, synchronizationAvailable: boolean): void;
|
|
46
|
-
export declare function listHeld({ store, socket }: Runtime, locator: string): void;
|
|
47
|
-
export declare function admitted({ socket }: Runtime, room: RoomDeclaration): boolean;
|
|
48
|
-
export declare function readable(runtime: Runtime, room: DiscoveredRoom): void;
|
|
49
|
-
export declare function usable(runtime: Runtime, room: DiscoveredRoom): void;
|
|
50
49
|
export declare function heldRooms({ store }: Runtime, listed: readonly DiscoveredRoom[]): Promise<HeldRoom[]>;
|
|
51
50
|
export declare function name(runtime: Runtime, locator: string): Promise<void>;
|
|
52
51
|
export {};
|
package/dist/listing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listing.d.ts","sourceRoot":"","sources":["../src/listing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EACV,cAAc,EACd,QAAQ,EACR,eAAe,EACf,eAAe,EACf,gBAAgB,
|
|
1
|
+
{"version":3,"file":"listing.d.ts","sourceRoot":"","sources":["../src/listing.ts"],"names":[],"mappings":"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"}
|
package/dist/listing.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { declared } from './declaration.js';
|
|
1
2
|
import { modelTypes, NO_MODEL } from './model.js';
|
|
2
3
|
import { governs, holds } from './reach.js';
|
|
3
|
-
export function modelIn({ socket }, locator, stored) {
|
|
4
|
+
export function modelIn({ socket, presence }, locator, stored) {
|
|
4
5
|
if (socket.session.now().refusal?.code === 'revoked-authorization')
|
|
5
6
|
return { status: 'unavailable', reason: 'revoked' };
|
|
6
|
-
return stored?.record.model ??
|
|
7
|
+
return stored?.record.model ?? presence.unheldModel(locator) ?? NO_MODEL;
|
|
7
8
|
}
|
|
8
9
|
export function compositionFor(runtime, record) {
|
|
9
10
|
return runtime.store.composed({
|
|
@@ -11,17 +12,22 @@ export function compositionFor(runtime, record) {
|
|
|
11
12
|
model: modelIn(runtime, record.locator, { record, indexed: true, documents: 0 }),
|
|
12
13
|
});
|
|
13
14
|
}
|
|
14
|
-
export function declarationOf({
|
|
15
|
-
const
|
|
16
|
-
const room = stored?.record ??
|
|
17
|
-
|
|
15
|
+
export function declarationOf({ presence }, locator, stored) {
|
|
16
|
+
const listed = presence.room(locator);
|
|
17
|
+
const room = stored?.record.declaration ?? (listed === undefined ? undefined : declared(listed));
|
|
18
|
+
if (room === undefined)
|
|
19
|
+
return undefined;
|
|
20
|
+
return {
|
|
21
|
+
room,
|
|
22
|
+
available: presence.available(locator, stored?.record.declaration.replica.selection),
|
|
23
|
+
};
|
|
18
24
|
}
|
|
19
|
-
export function listedLocators({
|
|
20
|
-
const
|
|
21
|
-
return [
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
+
export function listedLocators({ presence }, held) {
|
|
26
|
+
const listed = presence.rooms().map(({ locator }) => locator);
|
|
27
|
+
return [...new Set([...listed, ...held.keys()])];
|
|
28
|
+
}
|
|
29
|
+
export function listedOrHeld({ presence }, held, locator) {
|
|
30
|
+
return presence.room(locator) !== undefined || held.has(locator);
|
|
25
31
|
}
|
|
26
32
|
function selectionModel({ socket, builtIn }) {
|
|
27
33
|
return socket.session.now().refusal?.code === 'revoked-authorization'
|
|
@@ -33,7 +39,7 @@ function listedRoom(runtime, locator, stored) {
|
|
|
33
39
|
if (declaration === undefined)
|
|
34
40
|
return undefined;
|
|
35
41
|
const { room, available } = declaration;
|
|
36
|
-
const selection = room.typedSelection
|
|
42
|
+
const selection = room.typedSelection;
|
|
37
43
|
return {
|
|
38
44
|
name: room.name,
|
|
39
45
|
locator,
|
|
@@ -45,9 +51,10 @@ function listedRoom(runtime, locator, stored) {
|
|
|
45
51
|
? null
|
|
46
52
|
: { roots: selection.roots, model: modelTypes(selectionModel(runtime)) },
|
|
47
53
|
providerOwnedPaths: room.providerOwnedPaths,
|
|
54
|
+
authoredPaths: room.authoredPaths,
|
|
48
55
|
roomVersion: stored?.record.roomVersion ?? null,
|
|
49
56
|
synchronizationAvailable: available,
|
|
50
|
-
refusal: runtime.
|
|
57
|
+
refusal: runtime.presence.refusal(locator),
|
|
51
58
|
documents: stored?.documents ?? 0,
|
|
52
59
|
};
|
|
53
60
|
}
|
|
@@ -60,31 +67,27 @@ function listingOf(runtime, held) {
|
|
|
60
67
|
}
|
|
61
68
|
return listing;
|
|
62
69
|
}
|
|
63
|
-
export async function
|
|
70
|
+
export async function listedEntries(runtime, touched) {
|
|
64
71
|
const { store } = runtime;
|
|
65
|
-
|
|
66
|
-
if (roomsShown === null)
|
|
72
|
+
if (store.roomsShown.now() === null)
|
|
67
73
|
return null;
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (room === undefined ||
|
|
74
|
+
if (touched.length === 0)
|
|
75
|
+
return [];
|
|
76
|
+
const held = await store.rooms(touched);
|
|
77
|
+
const entries = [];
|
|
78
|
+
for (const locator of touched) {
|
|
79
|
+
const room = listedRoom(runtime, locator, held.get(locator));
|
|
80
|
+
if (room === undefined || store.roomsShown.now()?.has(locator) !== true)
|
|
75
81
|
return null;
|
|
76
|
-
|
|
82
|
+
entries.push(room);
|
|
77
83
|
}
|
|
78
|
-
return
|
|
84
|
+
return entries;
|
|
79
85
|
}
|
|
80
86
|
export async function listingNow(runtime) {
|
|
81
87
|
return listingOf(runtime, await runtime.store.rooms());
|
|
82
88
|
}
|
|
83
|
-
function
|
|
84
|
-
return (
|
|
85
|
-
}
|
|
86
|
-
export function shownRooms(runtime, listing) {
|
|
87
|
-
return structuredClone([...listing.values()].map(({ documents, ...room }) => lockedIn(runtime, listing, room.locator)
|
|
89
|
+
function shownRoom({ presence }, { documents, ...room }) {
|
|
90
|
+
return presence.lockedAs(room.locator, room.replica.offline)
|
|
88
91
|
? {
|
|
89
92
|
...room,
|
|
90
93
|
model: modelTypes(NO_MODEL),
|
|
@@ -92,7 +95,17 @@ export function shownRooms(runtime, listing) {
|
|
|
92
95
|
documents: 0,
|
|
93
96
|
locked: true,
|
|
94
97
|
}
|
|
95
|
-
: { ...room, documents, locked: false }
|
|
98
|
+
: { ...room, documents, locked: false };
|
|
99
|
+
}
|
|
100
|
+
export function shownRooms(runtime, listing) {
|
|
101
|
+
return structuredClone([...listing.values()].map((entry) => shownRoom(runtime, entry)));
|
|
102
|
+
}
|
|
103
|
+
export function shownChange(runtime, entries) {
|
|
104
|
+
return {
|
|
105
|
+
changed: structuredClone(entries.map((entry) => [entry.locator, shownRoom(runtime, entry)])),
|
|
106
|
+
removed: [],
|
|
107
|
+
order: null,
|
|
108
|
+
};
|
|
96
109
|
}
|
|
97
110
|
export async function roomFacts(runtime, reach = null) {
|
|
98
111
|
const { store, socket, builtIn } = runtime;
|
|
@@ -113,43 +126,6 @@ export async function roomFacts(runtime, reach = null) {
|
|
|
113
126
|
});
|
|
114
127
|
return { listed: socket.session.now().roomsListed, rooms };
|
|
115
128
|
}
|
|
116
|
-
export function list({ store, socket }, room, synchronizationAvailable) {
|
|
117
|
-
if (store.fences.has(room.locator))
|
|
118
|
-
return;
|
|
119
|
-
socket.rooms.declare(room.locator, {
|
|
120
|
-
room: {
|
|
121
|
-
name: room.name,
|
|
122
|
-
locator: room.locator,
|
|
123
|
-
handle: room.handle,
|
|
124
|
-
operations: room.operations,
|
|
125
|
-
replica: room.replica,
|
|
126
|
-
typedSelection: room.typedSelection ?? null,
|
|
127
|
-
providerOwnedPaths: room.providerOwnedPaths,
|
|
128
|
-
authoredPaths: room.authoredPaths,
|
|
129
|
-
},
|
|
130
|
-
available: synchronizationAvailable,
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
export function listHeld({ store, socket }, locator) {
|
|
134
|
-
if (store.fences.has(locator))
|
|
135
|
-
return;
|
|
136
|
-
socket.rooms.declare(locator, { room: null, available: false });
|
|
137
|
-
}
|
|
138
|
-
export function admitted({ socket }, room) {
|
|
139
|
-
return room.replica.admission === 'admitted' && !socket.rooms.standing(room.locator).unreadable;
|
|
140
|
-
}
|
|
141
|
-
export function readable(runtime, room) {
|
|
142
|
-
runtime.socket.rooms.stand(room.locator, { unreadable: false });
|
|
143
|
-
list(runtime, room, true);
|
|
144
|
-
}
|
|
145
|
-
export function usable(runtime, room) {
|
|
146
|
-
const { rooms } = runtime.socket;
|
|
147
|
-
rooms.stand(room.locator, { stale: false, unpreparable: false });
|
|
148
|
-
if (rooms.standing(room.locator).unreadable) {
|
|
149
|
-
rooms.stand(room.locator, { unreadable: false, refusal: null });
|
|
150
|
-
}
|
|
151
|
-
list(runtime, room, true);
|
|
152
|
-
}
|
|
153
129
|
export async function heldRooms({ store }, listed) {
|
|
154
130
|
const stored = await store.rooms(listed.map((room) => room.locator));
|
|
155
131
|
return listed.flatMap((room) => {
|
|
@@ -159,14 +135,14 @@ export async function heldRooms({ store }, listed) {
|
|
|
159
135
|
? [{ locator: room.locator, roomVersion: null }]
|
|
160
136
|
: [];
|
|
161
137
|
}
|
|
162
|
-
if (record.replica.selection !== room.replica.selection)
|
|
138
|
+
if (record.declaration.replica.selection !== room.replica.selection)
|
|
163
139
|
return [];
|
|
164
140
|
return [{ locator: room.locator, roomVersion: record.roomVersion }];
|
|
165
141
|
});
|
|
166
142
|
}
|
|
167
143
|
export async function name(runtime, locator) {
|
|
168
|
-
const { socket } = runtime;
|
|
169
|
-
const room =
|
|
144
|
+
const { socket, presence } = runtime;
|
|
145
|
+
const room = presence.room(locator);
|
|
170
146
|
if (!socket.streamed || room === undefined || !socket.isOpen() || !socket.isHanded())
|
|
171
147
|
return;
|
|
172
148
|
const [held] = await heldRooms(runtime, [room]);
|
package/dist/live.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ChangeSet } from './change-set.js';
|
|
2
2
|
import { type KeyedResult, type QueryMessage } from './observation.js';
|
|
3
|
-
import type { PendingResult, Plan, QueryCoverage } from './query.js';
|
|
3
|
+
import type { PendingResult, PendingRoom, Plan, QueryCoverage } from './query.js';
|
|
4
4
|
import type { Fail } from './reach.js';
|
|
5
5
|
import type { QueryRoom } from './tables.js';
|
|
6
6
|
export type Cover = {
|
|
@@ -11,13 +11,15 @@ export type Ran = KeyedResult & {
|
|
|
11
11
|
readonly current: () => boolean;
|
|
12
12
|
};
|
|
13
13
|
export type Run = (plan: Plan, cover: () => Promise<Cover>) => Promise<Ran>;
|
|
14
|
+
export type PendingAt<H> = (held: H, rooms: readonly string[]) => ReadonlyMap<string, PendingRoom | null> | null;
|
|
14
15
|
type Listener = (message: QueryMessage) => void;
|
|
15
16
|
export type LiveQueries<H> = {
|
|
16
17
|
touched(set: ChangeSet): void;
|
|
17
|
-
recover(): void;
|
|
18
|
-
watch(plan: Plan, identity: string, cover: (held: H) => Cover, deliver: Listener, failed: Fail): () => void;
|
|
18
|
+
recover(locators?: readonly string[]): void;
|
|
19
|
+
watch(plan: Plan, identity: string, cover: (held: H) => Cover, pendingAt: PendingAt<H>, deliver: Listener, failed: Fail): () => void;
|
|
19
20
|
close(): void;
|
|
20
21
|
};
|
|
22
|
+
export declare function readerOf(plan: Plan): (locator: string) => boolean;
|
|
21
23
|
export declare function createLiveQueries<H>(run: Run, holding: () => Promise<H>): LiveQueries<H>;
|
|
22
24
|
export {};
|
|
23
25
|
//# sourceMappingURL=live.d.ts.map
|
package/dist/live.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../src/live.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../src/live.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAQL,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,KAAK,GAAG;IAAE,QAAQ,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAA;CAAE,GAAG,aAAa,CAAC;AAE7F,MAAM,MAAM,GAAG,GAAG,WAAW,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAA;CAAE,CAAC;AAEpE,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAE5E,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CACzB,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,SAAS,MAAM,EAAE,KACrB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AAEpD,KAAK,QAAQ,GAAG,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;AAiBhD,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5C,KAAK,CACH,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,EACzB,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,EACvB,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,IAAI,GACX,MAAM,IAAI,CAAC;IACd,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAWF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAQjE;AAeD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CA4JxF"}
|
package/dist/live.js
CHANGED
|
@@ -1,26 +1,25 @@
|
|
|
1
|
-
import { changeOf, digestOf, } from './observation.js';
|
|
2
|
-
import {
|
|
1
|
+
import { changeOf, digestOf, keyedAt, keyedInto, samePending, unchanged, } from './observation.js';
|
|
2
|
+
import { uncaught } from './failure.js';
|
|
3
|
+
import { roomsOfReach } from './rows.js';
|
|
3
4
|
function narrowed(plan) {
|
|
4
5
|
return (plan.paths !== null &&
|
|
5
6
|
plan.hop === null &&
|
|
6
7
|
plan.backlinks === null &&
|
|
7
8
|
!(plan.shape.kind === 'documents' && plan.shape.backlinks));
|
|
8
9
|
}
|
|
9
|
-
function
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
return (plan.reach.rooms.includes(locator) ||
|
|
17
|
-
plan.reach.documents.some((document) => roomOfKey(document) === locator));
|
|
10
|
+
export function readerOf(plan) {
|
|
11
|
+
const locked = new Set(plan.locked);
|
|
12
|
+
const named = plan.rooms === null ? null : new Set(plan.rooms);
|
|
13
|
+
const reached = plan.reach === null ? null : roomsOfReach(plan.reach);
|
|
14
|
+
return (locator) => !locked.has(locator) &&
|
|
15
|
+
(named === null || named.has(locator)) &&
|
|
16
|
+
(reached === null || reached.has(locator));
|
|
18
17
|
}
|
|
19
|
-
function affected(plan, set) {
|
|
20
|
-
if (set.rooms.some(
|
|
18
|
+
function affected({ plan, reads }, set) {
|
|
19
|
+
if (set.rooms.some(reads))
|
|
21
20
|
return true;
|
|
22
21
|
const paths = narrowed(plan) ? new Set(plan.paths) : null;
|
|
23
|
-
return set.documents.some(({ locator, path }) => reads(
|
|
22
|
+
return set.documents.some(({ locator, path }) => reads(locator) && (paths === null || path === null || paths.has(path)));
|
|
24
23
|
}
|
|
25
24
|
function shown(entry, held) {
|
|
26
25
|
const cover = entry.cover(held);
|
|
@@ -29,11 +28,13 @@ function shown(entry, held) {
|
|
|
29
28
|
export function createLiveQueries(run, holding) {
|
|
30
29
|
const entries = new Map();
|
|
31
30
|
let closed = false;
|
|
32
|
-
let
|
|
33
|
-
let
|
|
31
|
+
let recoveringNow = false;
|
|
32
|
+
let recoveringAll = false;
|
|
33
|
+
const recovering = new Set();
|
|
34
34
|
function deliver(entry, next) {
|
|
35
35
|
const previous = entry.digest;
|
|
36
36
|
entry.digest = digestOf(next);
|
|
37
|
+
entry.pending = 'pending' in entry.digest ? entry.digest.pending : null;
|
|
37
38
|
entry.covered = JSON.stringify('pending' in next.result ? next.result : next.result.coverage);
|
|
38
39
|
const change = previous === undefined ? null : changeOf(previous, next);
|
|
39
40
|
if (change !== null) {
|
|
@@ -86,57 +87,99 @@ export function createLiveQueries(run, holding) {
|
|
|
86
87
|
}
|
|
87
88
|
})();
|
|
88
89
|
}
|
|
89
|
-
function
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
return;
|
|
90
|
+
function pendingMoved(entry, held, rooms) {
|
|
91
|
+
const { pending } = entry;
|
|
92
|
+
if (pending === null || pending.size === 0 || entry.running || entry.fresh.size > 0) {
|
|
93
|
+
return false;
|
|
93
94
|
}
|
|
94
|
-
|
|
95
|
+
const at = entry.pendingAt(held, rooms);
|
|
96
|
+
const change = at === null ? null : keyedAt(pending, at, samePending);
|
|
97
|
+
if (change === null || change.removed.length === pending.size)
|
|
98
|
+
return false;
|
|
99
|
+
keyedInto(pending, change);
|
|
100
|
+
entry.covered = '';
|
|
101
|
+
if (unchanged(change))
|
|
102
|
+
return true;
|
|
103
|
+
for (const listener of entry.ready)
|
|
104
|
+
listener({ pending: change });
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
function recovered(locators) {
|
|
108
|
+
if (locators === undefined)
|
|
109
|
+
recoveringAll = true;
|
|
110
|
+
else
|
|
111
|
+
for (const locator of locators)
|
|
112
|
+
recovering.add(locator);
|
|
113
|
+
if (recoveringNow)
|
|
114
|
+
return;
|
|
115
|
+
recoveringNow = true;
|
|
95
116
|
void (async () => {
|
|
96
117
|
try {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
118
|
+
while ((recoveringAll || recovering.size > 0) && !closed) {
|
|
119
|
+
const all = recoveringAll;
|
|
120
|
+
const touched = [...recovering];
|
|
121
|
+
recoveringAll = false;
|
|
122
|
+
recovering.clear();
|
|
123
|
+
const reached = [...entries.values()].filter((entry) => all || touched.some(entry.reads));
|
|
124
|
+
for (const entry of reached) {
|
|
100
125
|
if (entry.running)
|
|
101
126
|
entry.dirty = true;
|
|
102
127
|
}
|
|
103
|
-
const waiting =
|
|
104
|
-
if (waiting.length === 0
|
|
128
|
+
const waiting = reached.filter((entry) => !entry.running);
|
|
129
|
+
if (waiting.length === 0)
|
|
105
130
|
continue;
|
|
106
131
|
const held = await holding();
|
|
107
132
|
for (const entry of waiting) {
|
|
108
133
|
if (entry.running)
|
|
109
134
|
continue;
|
|
135
|
+
const read = all ? [] : touched.filter(entry.reads);
|
|
136
|
+
if (read.length > 0 && pendingMoved(entry, held, read))
|
|
137
|
+
continue;
|
|
110
138
|
if (entry.digest === undefined || shown(entry, held) !== entry.covered)
|
|
111
139
|
schedule(entry);
|
|
112
140
|
}
|
|
113
|
-
}
|
|
141
|
+
}
|
|
114
142
|
}
|
|
115
|
-
catch {
|
|
143
|
+
catch (error) {
|
|
144
|
+
uncaught(error);
|
|
116
145
|
}
|
|
117
146
|
finally {
|
|
118
|
-
|
|
147
|
+
recoveringNow = false;
|
|
119
148
|
}
|
|
120
149
|
})();
|
|
121
150
|
}
|
|
122
151
|
return {
|
|
123
152
|
touched(set) {
|
|
153
|
+
const pending = new Set();
|
|
124
154
|
for (const entry of entries.values()) {
|
|
125
|
-
if (affected(entry
|
|
155
|
+
if (!affected(entry, set))
|
|
156
|
+
continue;
|
|
157
|
+
if (entry.pending === null || entry.running) {
|
|
126
158
|
schedule(entry);
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
for (const locator of set.rooms)
|
|
162
|
+
pending.add(locator);
|
|
163
|
+
for (const { locator } of set.documents)
|
|
164
|
+
pending.add(locator);
|
|
127
165
|
}
|
|
166
|
+
if (pending.size > 0)
|
|
167
|
+
recovered([...pending]);
|
|
128
168
|
},
|
|
129
169
|
recover: recovered,
|
|
130
|
-
watch(plan, identity, cover, listener, failed) {
|
|
170
|
+
watch(plan, identity, cover, pendingAt, listener, failed) {
|
|
131
171
|
let entry = entries.get(identity);
|
|
132
172
|
if (entry === undefined) {
|
|
133
173
|
entry = {
|
|
134
174
|
plan,
|
|
175
|
+
reads: readerOf(plan),
|
|
135
176
|
cover,
|
|
177
|
+
pendingAt,
|
|
136
178
|
listeners: new Set(),
|
|
137
179
|
fresh: new Map(),
|
|
138
180
|
ready: new Set(),
|
|
139
181
|
digest: undefined,
|
|
182
|
+
pending: null,
|
|
140
183
|
covered: '',
|
|
141
184
|
dirty: false,
|
|
142
185
|
running: false,
|
package/dist/loaded.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { BuildFile } from './client.js';
|
|
2
|
+
export declare function parsed(file: Blob | null): Promise<unknown>;
|
|
3
|
+
export declare function perBuild<T>(buildFile: BuildFile, key: string, make: () => Promise<T>): Promise<T>;
|
|
4
|
+
export declare function loaded<T>(buildFile: BuildFile, name: string, read?: (file: Blob | null) => Promise<unknown>): Promise<T | null>;
|
|
5
|
+
//# sourceMappingURL=loaded.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loaded.d.ts","sourceRoot":"","sources":["../src/loaded.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAc7C,wBAAsB,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAEhE;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAYjG;AAED,wBAAgB,MAAM,CAAC,CAAC,EACtB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,OAAO,CAAC,OAAO,CAAY,GACvD,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAEnB"}
|
package/dist/loaded.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
2
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
3
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
4
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
5
|
+
});
|
|
6
|
+
}
|
|
7
|
+
return path;
|
|
8
|
+
};
|
|
9
|
+
const holdings = new WeakMap();
|
|
10
|
+
async function imported(file) {
|
|
11
|
+
if (file === null)
|
|
12
|
+
return null;
|
|
13
|
+
const address = URL.createObjectURL(file);
|
|
14
|
+
try {
|
|
15
|
+
return await import(__rewriteRelativeImportExtension(address));
|
|
16
|
+
}
|
|
17
|
+
finally {
|
|
18
|
+
URL.revokeObjectURL(address);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export async function parsed(file) {
|
|
22
|
+
return file === null ? null : JSON.parse(await file.text());
|
|
23
|
+
}
|
|
24
|
+
export function perBuild(buildFile, key, make) {
|
|
25
|
+
let named = holdings.get(buildFile);
|
|
26
|
+
if (named === undefined) {
|
|
27
|
+
named = new Map();
|
|
28
|
+
holdings.set(buildFile, named);
|
|
29
|
+
}
|
|
30
|
+
const holding = named.get(key);
|
|
31
|
+
if (holding !== undefined)
|
|
32
|
+
return holding;
|
|
33
|
+
const making = make();
|
|
34
|
+
named.set(key, making);
|
|
35
|
+
making.catch(() => named.delete(key));
|
|
36
|
+
return making;
|
|
37
|
+
}
|
|
38
|
+
export function loaded(buildFile, name, read = imported) {
|
|
39
|
+
return perBuild(buildFile, name, () => buildFile(name).then(read));
|
|
40
|
+
}
|
package/dist/locks.d.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import type { DiscoveredRoom } from './adapter.js';
|
|
2
1
|
import type { Runtime } from './runtime.js';
|
|
3
|
-
export declare function locked({ store,
|
|
4
|
-
export declare function lockedRooms(
|
|
2
|
+
export declare function locked({ store, presence }: Runtime, locator: string): Promise<boolean>;
|
|
3
|
+
export declare function lockedRooms({ store, presence }: Runtime): Promise<readonly string[]>;
|
|
5
4
|
export declare function relocked(runtime: Runtime, before: readonly string[]): Promise<void>;
|
|
6
|
-
export declare function confirmLocks({ socket }: Runtime, listed: readonly DiscoveredRoom[]): void;
|
|
7
5
|
export declare function connectionLost(runtime: Runtime): void;
|
|
8
6
|
export declare function watchLocks({ store }: Runtime, notify: () => void): () => void;
|
|
9
7
|
//# sourceMappingURL=locks.d.ts.map
|
package/dist/locks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locks.d.ts","sourceRoot":"","sources":["../src/locks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"locks.d.ts","sourceRoot":"","sources":["../src/locks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,wBAAsB,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE5F;AAED,wBAAsB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAG1F;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,iBAKzE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,QAU9C;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAE7E"}
|
package/dist/locks.js
CHANGED
|
@@ -1,59 +1,30 @@
|
|
|
1
|
+
import { uncaught } from './failure.js';
|
|
1
2
|
import { emitRooms, LOCKS_TOPIC } from './shown.js';
|
|
2
|
-
async function
|
|
3
|
-
|
|
4
|
-
for (const [locator, { room }] of socket.rooms.declarations()) {
|
|
5
|
-
const declaration = room ?? socket.rooms.discovered(locator);
|
|
6
|
-
if (declaration !== undefined)
|
|
7
|
-
modes.set(locator, declaration.replica.offline);
|
|
8
|
-
}
|
|
9
|
-
for (const [locator, { offline }] of (await store.covering()).rooms)
|
|
10
|
-
modes.set(locator, offline);
|
|
11
|
-
return modes;
|
|
3
|
+
export async function locked({ store, presence }, locator) {
|
|
4
|
+
return presence.locked(locator, async () => (await store.open()).offline(locator));
|
|
12
5
|
}
|
|
13
|
-
export async function
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const held = socket.rooms.declared(locator)?.room ?? socket.rooms.discovered(locator);
|
|
17
|
-
const mode = (await (await store.open()).offline(locator)) ?? held?.replica.offline;
|
|
18
|
-
return mode === 'locked';
|
|
19
|
-
}
|
|
20
|
-
export async function lockedRooms(runtime) {
|
|
21
|
-
const { store, socket } = runtime;
|
|
22
|
-
return [...(await offlineModes(runtime))]
|
|
23
|
-
.filter(([locator, mode]) => mode === 'locked' &&
|
|
24
|
-
!socket.rooms.standing(locator).confirmed &&
|
|
25
|
-
!store.fences.has(locator))
|
|
26
|
-
.map(([locator]) => locator)
|
|
27
|
-
.sort();
|
|
6
|
+
export async function lockedRooms({ store, presence }) {
|
|
7
|
+
const { rooms, locking } = await store.covering();
|
|
8
|
+
return presence.lockedAmong(rooms, locking);
|
|
28
9
|
}
|
|
29
10
|
export async function relocked(runtime, before) {
|
|
30
11
|
const after = await lockedRooms(runtime);
|
|
31
12
|
if (JSON.stringify(after) === JSON.stringify(before))
|
|
32
13
|
return;
|
|
33
|
-
runtime.journal.record(`locked ${after.length}`);
|
|
34
14
|
emitRooms(runtime);
|
|
35
15
|
runtime.store.tell(LOCKS_TOPIC, undefined);
|
|
36
16
|
}
|
|
37
|
-
export function confirmLocks({ socket }, listed) {
|
|
38
|
-
if (!socket.isOpen())
|
|
39
|
-
return;
|
|
40
|
-
for (const room of listed) {
|
|
41
|
-
if (room.replica.admission === 'admitted') {
|
|
42
|
-
socket.rooms.stand(room.locator, { confirmed: true });
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
17
|
export function connectionLost(runtime) {
|
|
47
|
-
const { socket } = runtime;
|
|
18
|
+
const { socket, presence } = runtime;
|
|
48
19
|
if (socket.closed())
|
|
49
20
|
return;
|
|
50
|
-
|
|
21
|
+
presence.connectionLost(() => {
|
|
51
22
|
if (socket.isOpen() || socket.closed())
|
|
52
23
|
return;
|
|
53
24
|
void lockedRooms(runtime).then((before) => {
|
|
54
|
-
|
|
25
|
+
presence.lapse();
|
|
55
26
|
return relocked(runtime, before);
|
|
56
|
-
},
|
|
27
|
+
}, uncaught);
|
|
57
28
|
});
|
|
58
29
|
}
|
|
59
30
|
export function watchLocks({ store }, notify) {
|
package/dist/lost.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lost.d.ts","sourceRoot":"","sources":["../src/lost.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"lost.d.ts","sourceRoot":"","sources":["../src/lost.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAK5C,wBAAsB,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,iBAIhF;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,QAMtE;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,iBA+B5E"}
|