@agentshouse/mdruntime 0.1.0-cd507e16e5fc0 → 0.1.0-cd71aba4d0215
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 +8 -8
- package/dist/acceptance.d.ts +0 -3
- package/dist/acceptance.d.ts.map +1 -1
- package/dist/acceptance.js +74 -145
- package/dist/act-lanes.d.ts +33 -0
- package/dist/act-lanes.d.ts.map +1 -0
- package/dist/act-lanes.js +177 -0
- package/dist/actions.d.ts +7 -2
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +40 -30
- package/dist/adapter.d.ts +27 -45
- package/dist/adapter.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/change.js +4 -2
- package/dist/client.d.ts +7 -12
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +29 -14
- package/dist/collection.d.ts +22 -4
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +12 -2
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +15 -21
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +26 -16
- package/dist/conversation-live.d.ts +8 -6
- package/dist/conversation-live.d.ts.map +1 -1
- package/dist/conversation-live.js +7 -6
- package/dist/conversation.d.ts +23 -10
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +127 -102
- 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 +18 -40
- package/dist/durability.d.ts +3 -0
- package/dist/durability.d.ts.map +1 -1
- package/dist/expectation.d.ts +4 -2
- package/dist/expectation.d.ts.map +1 -1
- package/dist/expectation.js +33 -11
- package/dist/failure.d.ts +3 -0
- package/dist/failure.d.ts.map +1 -1
- package/dist/failure.js +6 -0
- package/dist/host.d.ts +17 -2
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +39 -9
- package/dist/index.d.ts +9 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/install.d.ts +1 -3
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +48 -65
- package/dist/lifecycle.d.ts +1 -1
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +38 -27
- package/dist/listing.d.ts +6 -11
- package/dist/listing.d.ts.map +1 -1
- package/dist/listing.js +25 -62
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +3 -3
- package/dist/locks.d.ts +2 -4
- package/dist/locks.d.ts.map +1 -1
- package/dist/locks.js +10 -38
- package/dist/lost.d.ts.map +1 -1
- package/dist/lost.js +10 -21
- package/dist/media.d.ts +1 -1
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +4 -4
- package/dist/memory.d.ts +4 -2
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +38 -21
- package/dist/messages.d.ts +0 -3
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +13 -31
- 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 -136
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +12 -17
- package/dist/opened.d.ts +1 -1
- package/dist/opened.d.ts.map +1 -1
- package/dist/opened.js +5 -5
- package/dist/opening.d.ts.map +1 -1
- package/dist/opening.js +6 -4
- package/dist/outcome.d.ts +3 -0
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +15 -0
- package/dist/overlay.d.ts +2 -1
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +32 -21
- 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 -51
- package/dist/parts.d.ts.map +1 -1
- package/dist/parts.js +14 -111
- package/dist/preparation.d.ts.map +1 -1
- package/dist/preparation.js +22 -15
- package/dist/presence.d.ts +52 -0
- package/dist/presence.d.ts.map +1 -0
- package/dist/presence.js +220 -0
- package/dist/queries.d.ts +1 -1
- package/dist/queries.d.ts.map +1 -1
- package/dist/queries.js +5 -7
- package/dist/query.d.ts +0 -1
- package/dist/query.d.ts.map +1 -1
- package/dist/questions.js +1 -1
- package/dist/queue.d.ts +40 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +455 -0
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +27 -8
- package/dist/react.d.ts +11 -0
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +15 -1
- package/dist/reads.d.ts +3 -1
- package/dist/reads.d.ts.map +1 -1
- package/dist/reads.js +9 -2
- 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 -4
- package/dist/replica.d.ts +5 -11
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +13 -15
- 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 +4 -6
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +36 -52
- package/dist/room-drafts.d.ts.map +1 -1
- package/dist/room-drafts.js +17 -16
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +3 -4
- package/dist/runtime.d.ts +9 -16
- package/dist/runtime.d.ts.map +1 -1
- package/dist/save.d.ts +41 -90
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +233 -116
- package/dist/saves.d.ts +2 -40
- package/dist/saves.d.ts.map +1 -1
- package/dist/saves.js +107 -702
- package/dist/seed.d.ts.map +1 -1
- package/dist/seed.js +2 -3
- package/dist/shared.d.ts +0 -5
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +4 -90
- package/dist/shown.d.ts +4 -3
- package/dist/shown.d.ts.map +1 -1
- package/dist/shown.js +26 -31
- package/dist/socket/lanes.d.ts +2 -1
- package/dist/socket/lanes.d.ts.map +1 -1
- package/dist/socket/lanes.js +5 -2
- package/dist/socket/session.d.ts +0 -1
- package/dist/socket/session.d.ts.map +1 -1
- package/dist/socket.d.ts +2 -4
- package/dist/socket.d.ts.map +1 -1
- package/dist/socket.js +4 -8
- package/dist/source.d.ts.map +1 -1
- package/dist/source.js +5 -4
- package/dist/store/records.d.ts +3 -3
- package/dist/store/records.d.ts.map +1 -1
- package/dist/store/records.js +4 -5
- package/dist/store/space.d.ts +1 -1
- package/dist/store/space.d.ts.map +1 -1
- package/dist/store/space.js +0 -2
- package/dist/store/watchers.js +1 -2
- package/dist/store.d.ts +10 -5
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +38 -13
- package/dist/stored.d.ts +1 -1
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +6 -6
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +8 -8
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +86 -78
- package/dist/tables.d.ts +0 -5
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +8 -11
- package/dist/tallies.js +5 -5
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +2 -2
- package/dist/wire.d.ts +40 -4
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +12 -3
- 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/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/install.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { attachedModel } from './attached-model.js';
|
|
2
2
|
import { bootstrapRoom } from './bootstrap.js';
|
|
3
3
|
import { refusedForSpace } from './durability.js';
|
|
4
|
-
import {
|
|
4
|
+
import { uncaught } from './failure.js';
|
|
5
|
+
import { name } from './listing.js';
|
|
5
6
|
import { NO_MODEL } from './model.js';
|
|
7
|
+
import { settle } from './queue.js';
|
|
6
8
|
import { advancement } from './refresh.js';
|
|
7
|
-
import { recoverReads
|
|
8
|
-
import { NO_INSTALL, } from './store.js';
|
|
9
|
+
import { recoverReads } from './shown.js';
|
|
9
10
|
import { unconfirmed } from './transfer.js';
|
|
10
11
|
import { ROW_WEIGHT, yielded } from './turn.js';
|
|
11
12
|
// Bytes still arriving are reported at most this often, so readiness is not rebuilt for every chunk the network hands over while a slow link still moves the figure.
|
|
@@ -130,17 +131,15 @@ export function sweep({ store, socket, journal }) {
|
|
|
130
131
|
await yielded();
|
|
131
132
|
}
|
|
132
133
|
}
|
|
133
|
-
catch {
|
|
134
|
+
catch (error) {
|
|
134
135
|
journal.record('erasure failed');
|
|
136
|
+
uncaught(error);
|
|
135
137
|
}
|
|
136
138
|
finally {
|
|
137
139
|
store.device.set({ sweeping: false });
|
|
138
140
|
}
|
|
139
141
|
})();
|
|
140
142
|
}
|
|
141
|
-
export function forgetInstall(store, locator) {
|
|
142
|
-
store.installs.change(locator, ({ installing }) => ({ ...NO_INSTALL, installing }));
|
|
143
|
-
}
|
|
144
143
|
export function caughtUpTo(runtime, locator) {
|
|
145
144
|
if (!runtime.store.installs.of(locator).catching)
|
|
146
145
|
return;
|
|
@@ -150,12 +149,6 @@ export function caughtUpTo(runtime, locator) {
|
|
|
150
149
|
export function catching(store, locator) {
|
|
151
150
|
store.installs.change(locator, (held) => ({ ...held, catching: true }));
|
|
152
151
|
}
|
|
153
|
-
export function confirmedAgain(store, locator) {
|
|
154
|
-
store.installs.change(locator, (held) => ({
|
|
155
|
-
...held,
|
|
156
|
-
confirmations: held.confirmations + 1,
|
|
157
|
-
}));
|
|
158
|
-
}
|
|
159
152
|
export function standingAt(store, locator, held) {
|
|
160
153
|
return { key: held?.key ?? null, confirmed: store.installs.of(locator).confirmations };
|
|
161
154
|
}
|
|
@@ -382,8 +375,6 @@ function staging(runtime, local, liveness, unheld) {
|
|
|
382
375
|
transfer: held,
|
|
383
376
|
underived: owed,
|
|
384
377
|
}));
|
|
385
|
-
if (before.transfer === null)
|
|
386
|
-
recoverReads(runtime);
|
|
387
378
|
installing(runtime, locator);
|
|
388
379
|
recoverReads(runtime);
|
|
389
380
|
if (owed < store.deriveBytes())
|
|
@@ -396,7 +387,9 @@ function staging(runtime, local, liveness, unheld) {
|
|
|
396
387
|
if (!liveness())
|
|
397
388
|
return null;
|
|
398
389
|
const prior = unheld === undefined ? await store.record(locator) : undefined;
|
|
399
|
-
const published = prior !== undefined && prior.replica.selection === record.selection
|
|
390
|
+
const published = prior !== undefined && prior.declaration.replica.selection === record.selection
|
|
391
|
+
? prior.key
|
|
392
|
+
: null;
|
|
400
393
|
const kept = unheld?.staged ?? (await local.held()).staged.has(locator);
|
|
401
394
|
if (published === null && !kept)
|
|
402
395
|
return { record: null, staged: new Set() };
|
|
@@ -452,7 +445,7 @@ export async function pullBootstrap(runtime, authorized, room, local, liveness,
|
|
|
452
445
|
}
|
|
453
446
|
try {
|
|
454
447
|
const result = await bootstrapRoom(from, authorized, room, {
|
|
455
|
-
collection: prior?.model ?? runtime.
|
|
448
|
+
collection: prior?.model ?? runtime.presence.unheldModel(room.locator) ?? NO_MODEL,
|
|
456
449
|
}, runtime.builtIn, runtime.typedPaths, (models, held) => (liveness() ? remodel(runtime, models, held) : held), liveness, staging(runtime, local, liveness, unheld));
|
|
457
450
|
const detail = result.kind === 'staged' ? result.record.roomVersion : result.kind;
|
|
458
451
|
journal.record(`transfer bootstrap ${room.locator} ${detail}`);
|
|
@@ -481,21 +474,22 @@ export async function pullBootstrap(runtime, authorized, room, local, liveness,
|
|
|
481
474
|
}
|
|
482
475
|
export function publish(runtime, local, room, reached, landing, live) {
|
|
483
476
|
const { store } = runtime;
|
|
484
|
-
|
|
477
|
+
let published = true;
|
|
478
|
+
const landed = settle(runtime, [room.locator], async (held) => {
|
|
485
479
|
if (!live()) {
|
|
486
480
|
caughtUpTo(runtime, room.locator);
|
|
487
|
-
return
|
|
481
|
+
return [];
|
|
488
482
|
}
|
|
489
|
-
const
|
|
490
|
-
const prior = work.replica;
|
|
483
|
+
const prior = held.get(room.locator)?.replica;
|
|
491
484
|
if (!standsAt(store, room.locator, prior?.record, landing.from)) {
|
|
485
|
+
published = false;
|
|
492
486
|
if (landing.kind === 'refreshed') {
|
|
493
487
|
await local.unrefresh(reached.key);
|
|
494
|
-
return
|
|
488
|
+
return [];
|
|
495
489
|
}
|
|
496
490
|
caughtUpTo(runtime, room.locator);
|
|
497
491
|
await abandoned(runtime, local, room.locator);
|
|
498
|
-
return
|
|
492
|
+
return [];
|
|
499
493
|
}
|
|
500
494
|
const record = landing.kind === 'refreshed' && prior !== undefined
|
|
501
495
|
? {
|
|
@@ -504,51 +498,40 @@ export function publish(runtime, local, room, reached, landing, live) {
|
|
|
504
498
|
...(landing.remodelled ? { model: reached.model } : {}),
|
|
505
499
|
}
|
|
506
500
|
: reached;
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
}
|
|
515
|
-
: {
|
|
516
|
-
room: true,
|
|
517
|
-
view: landing.refreshed ? 'refreshed' : 'confirmed',
|
|
518
|
-
commit: {
|
|
501
|
+
return [
|
|
502
|
+
{
|
|
503
|
+
locator: room.locator,
|
|
504
|
+
record,
|
|
505
|
+
installed: landing.kind === 'refreshed'
|
|
506
|
+
? { refreshed: true }
|
|
507
|
+
: {
|
|
519
508
|
published: { from: prior?.record.key ?? null },
|
|
520
509
|
...(landing.refreshed ? { refreshed: true } : {}),
|
|
521
510
|
},
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
await runtime.unpair(local);
|
|
547
|
-
void statusShown(runtime);
|
|
548
|
-
if (landing.kind === 'bootstrapped' && work.queue.length > 0) {
|
|
549
|
-
runtime.submitLater(room.locator);
|
|
550
|
-
}
|
|
551
|
-
return true;
|
|
511
|
+
after() {
|
|
512
|
+
runtime.presence.installed(room.locator, landing.kind === 'bootstrapped');
|
|
513
|
+
runtime.retries.succeeded('download', room.locator);
|
|
514
|
+
store.prepareAgain(room.locator);
|
|
515
|
+
if (landing.kind === 'bootstrapped') {
|
|
516
|
+
store.installs.change(room.locator, (held) => ({
|
|
517
|
+
...transferGone(held),
|
|
518
|
+
highest: null,
|
|
519
|
+
beyondHorizon: false,
|
|
520
|
+
startedOver: null,
|
|
521
|
+
catching: false,
|
|
522
|
+
}));
|
|
523
|
+
if (prior !== undefined && prior.record.key !== record.key)
|
|
524
|
+
sweep(runtime);
|
|
525
|
+
void name(runtime, room.locator);
|
|
526
|
+
}
|
|
527
|
+
},
|
|
528
|
+
},
|
|
529
|
+
];
|
|
530
|
+
}).then(() => published, (error) => {
|
|
531
|
+
if (!refusedForSpace(error))
|
|
532
|
+
throw error;
|
|
533
|
+
caughtUpTo(runtime, room.locator);
|
|
534
|
+
return published;
|
|
552
535
|
});
|
|
553
536
|
return landing.kind === 'refreshed'
|
|
554
537
|
? landed
|
package/dist/lifecycle.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Runtime } from './runtime.js';
|
|
2
2
|
export declare function scheduleCurrency(runtime: Runtime): void;
|
|
3
3
|
export declare function spaceFreed(runtime: Runtime): void;
|
|
4
|
-
export declare function close({ store, socket, conversations, recovery, liveQueries, figures }: Runtime): void;
|
|
4
|
+
export declare function close({ store, socket, presence, conversations, recovery, liveQueries, figures, }: Runtime): void;
|
|
5
5
|
export declare function stop(runtime: Runtime): Promise<void>;
|
|
6
6
|
export declare function start(runtime: Runtime, signal: AbortSignal | undefined): void;
|
|
7
7
|
//# sourceMappingURL=lifecycle.d.ts.map
|
package/dist/lifecycle.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAiO5C,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,QAOhD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,QAS1C;AAED,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,MAAM,EACN,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,WAAW,EACX,OAAO,GACR,EAAE,OAAO,QAST;AAED,wBAAsB,IAAI,CAAC,OAAO,EAAE,OAAO,iBAS1C;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,SAAS,QAyCtE"}
|
package/dist/lifecycle.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import { submitAll } from './acceptance.js';
|
|
2
1
|
import { catchUpConversations, receiveConversationEvent, reconcileConversations, } from './conversation.js';
|
|
2
|
+
import { declared } from './declaration.js';
|
|
3
|
+
import { uncaught } from './failure.js';
|
|
3
4
|
import { catching, replaced } from './install.js';
|
|
4
5
|
import { connectionLost } from './locks.js';
|
|
5
6
|
import { fenceLive } from './lost.js';
|
|
6
7
|
import { cachedModels, revoked, settleModels } from './models.js';
|
|
7
8
|
import { refuse } from './refusal.js';
|
|
8
|
-
import { moveTo, recoverReads, rest, SERVICE_MODE_TOPIC, show, transferring } from './shown.js';
|
|
9
|
+
import { moveTo, recoverReads, rest, SERVICE_MODE_TOPIC, show, submissionDue, transferring, } from './shown.js';
|
|
9
10
|
import { applyRoom, changeAuthority, countAuthorityChange, finishOpening, loadRoom, OPENING_LANE, reload, resynchronize, sync, } from './sync.js';
|
|
10
11
|
const CONVERSATION_LANE = 'conversations';
|
|
12
|
+
const RELOADING = 'reloading';
|
|
11
13
|
function closing(runtime, opened) {
|
|
12
14
|
const { store, socket } = runtime;
|
|
13
15
|
return socket.lanes.task(OPENING_LANE, async (live) => {
|
|
@@ -20,10 +22,10 @@ function closing(runtime, opened) {
|
|
|
20
22
|
});
|
|
21
23
|
}
|
|
22
24
|
function closedSocket(runtime, lapsed, lost, opened) {
|
|
23
|
-
const { socket, conversations } = runtime;
|
|
25
|
+
const { socket, presence, conversations } = runtime;
|
|
24
26
|
const { session } = socket;
|
|
25
27
|
socket.notifyReady();
|
|
26
|
-
|
|
28
|
+
presence.stopAsking();
|
|
27
29
|
connectionLost(runtime);
|
|
28
30
|
if (lost)
|
|
29
31
|
conversations.lost();
|
|
@@ -43,9 +45,9 @@ function closedSocket(runtime, lapsed, lost, opened) {
|
|
|
43
45
|
void closing(runtime, opened);
|
|
44
46
|
}
|
|
45
47
|
function owedReloads(runtime, expired, held) {
|
|
46
|
-
const { store,
|
|
47
|
-
const reloading =
|
|
48
|
-
.
|
|
48
|
+
const { store, presence } = runtime;
|
|
49
|
+
const reloading = presence
|
|
50
|
+
.rooms()
|
|
49
51
|
.filter((room) => !expired.includes(room.locator) && revoked(held.get(room.locator)?.record.model))
|
|
50
52
|
.map((room) => room.locator);
|
|
51
53
|
for (const locator of reloading)
|
|
@@ -54,15 +56,15 @@ function owedReloads(runtime, expired, held) {
|
|
|
54
56
|
return reloading;
|
|
55
57
|
}
|
|
56
58
|
async function reloadNow(runtime, replacing, progress, held, installing) {
|
|
57
|
-
const { store, socket } = runtime;
|
|
58
|
-
const {
|
|
59
|
-
const discovered = rooms
|
|
59
|
+
const { store, socket, presence } = runtime;
|
|
60
|
+
const { lanes } = socket;
|
|
61
|
+
const discovered = presence.rooms();
|
|
60
62
|
const reloaded = discovered.filter((room) => held.has(room.locator) && !installing.has(room.locator) && replacing(room));
|
|
61
63
|
const acquired = discovered.filter((room) => (!held.has(room.locator) || installing.has(room.locator)) &&
|
|
62
64
|
room.replica.admission === 'admitted' &&
|
|
63
65
|
replacing(room));
|
|
64
66
|
for (const room of reloaded)
|
|
65
|
-
|
|
67
|
+
presence.reload(room.locator, true);
|
|
66
68
|
try {
|
|
67
69
|
const local = await store.open();
|
|
68
70
|
const kept = acquired.length === 0 ? new Set() : (await local.held()).staged;
|
|
@@ -77,15 +79,17 @@ async function reloadNow(runtime, replacing, progress, held, installing) {
|
|
|
77
79
|
.roomTask(room.locator, (live) => loadRoom(runtime, room, local, progress, live, unheld))
|
|
78
80
|
.then(() => rest(runtime, progress));
|
|
79
81
|
}
|
|
82
|
+
runtime.retries.succeeded('download', RELOADING);
|
|
80
83
|
}
|
|
81
|
-
catch {
|
|
84
|
+
catch (error) {
|
|
85
|
+
runtime.retries.failed('download', RELOADING, error);
|
|
82
86
|
for (const room of reloaded)
|
|
83
|
-
|
|
87
|
+
presence.reload(room.locator, false);
|
|
84
88
|
progress.reachable = false;
|
|
85
89
|
}
|
|
86
90
|
}
|
|
87
91
|
function caughtUpRooms(runtime, expired) {
|
|
88
|
-
const { store, socket } = runtime;
|
|
92
|
+
const { store, socket, presence } = runtime;
|
|
89
93
|
const { session } = socket;
|
|
90
94
|
const progress = session.now().underway;
|
|
91
95
|
session.set({ underway: null });
|
|
@@ -112,14 +116,17 @@ function caughtUpRooms(runtime, expired) {
|
|
|
112
116
|
if (progress.reachable) {
|
|
113
117
|
const stored = await held;
|
|
114
118
|
const owed = await reloading;
|
|
115
|
-
await settleModels(runtime,
|
|
116
|
-
.
|
|
119
|
+
await settleModels(runtime, new Map(presence
|
|
120
|
+
.rooms()
|
|
117
121
|
.filter((room) => stored.has(room.locator) &&
|
|
118
122
|
!expired.includes(room.locator) &&
|
|
119
|
-
!owed.includes(room.locator))
|
|
123
|
+
!owed.includes(room.locator))
|
|
124
|
+
.map((room) => [room.locator, declared(room)])), 'current', local);
|
|
120
125
|
}
|
|
126
|
+
runtime.retries.succeeded('download', OPENING_LANE);
|
|
121
127
|
}
|
|
122
|
-
catch {
|
|
128
|
+
catch (error) {
|
|
129
|
+
runtime.retries.failed('download', OPENING_LANE, error);
|
|
123
130
|
progress.complete = false;
|
|
124
131
|
progress.reachable = false;
|
|
125
132
|
}
|
|
@@ -145,7 +152,7 @@ function signalled(runtime, mode) {
|
|
|
145
152
|
store.tell(SERVICE_MODE_TOPIC, mode);
|
|
146
153
|
}
|
|
147
154
|
if (releasing)
|
|
148
|
-
|
|
155
|
+
void submissionDue(runtime);
|
|
149
156
|
}
|
|
150
157
|
async function runCurrency(runtime, live) {
|
|
151
158
|
const { socket, conversations } = runtime;
|
|
@@ -166,8 +173,10 @@ async function runCurrency(runtime, live) {
|
|
|
166
173
|
moveTo(runtime, transferring(runtime));
|
|
167
174
|
try {
|
|
168
175
|
await catchUpConversations(conversations, progress);
|
|
176
|
+
runtime.retries.succeeded('conversations', CONVERSATION_LANE);
|
|
169
177
|
}
|
|
170
|
-
catch {
|
|
178
|
+
catch (error) {
|
|
179
|
+
runtime.retries.failed('conversations', CONVERSATION_LANE, error);
|
|
171
180
|
progress.reachable = false;
|
|
172
181
|
}
|
|
173
182
|
await rest(runtime, progress, live);
|
|
@@ -182,7 +191,7 @@ export function scheduleCurrency(runtime) {
|
|
|
182
191
|
}
|
|
183
192
|
export function spaceFreed(runtime) {
|
|
184
193
|
const { store, socket, journal } = runtime;
|
|
185
|
-
|
|
194
|
+
store.prepareAgain();
|
|
186
195
|
journal.record('space freed');
|
|
187
196
|
store.readiness.queue();
|
|
188
197
|
const { closed, authorization } = socket.session.now();
|
|
@@ -193,10 +202,11 @@ export function spaceFreed(runtime) {
|
|
|
193
202
|
else
|
|
194
203
|
void resynchronize(runtime);
|
|
195
204
|
}
|
|
196
|
-
export function close({ store, socket, conversations, recovery, liveQueries, figures }) {
|
|
205
|
+
export function close({ store, socket, presence, conversations, recovery, liveQueries, figures, }) {
|
|
197
206
|
if (socket.closed())
|
|
198
207
|
return;
|
|
199
208
|
socket.close();
|
|
209
|
+
presence.close();
|
|
200
210
|
conversations.close();
|
|
201
211
|
void recovery.retire();
|
|
202
212
|
liveQueries.close();
|
|
@@ -204,9 +214,9 @@ export function close({ store, socket, conversations, recovery, liveQueries, fig
|
|
|
204
214
|
store.close();
|
|
205
215
|
}
|
|
206
216
|
export async function stop(runtime) {
|
|
207
|
-
const { store, socket, recovery } = runtime;
|
|
217
|
+
const { store, socket, presence, recovery } = runtime;
|
|
208
218
|
socket.session.set({ stopping: true });
|
|
209
|
-
|
|
219
|
+
presence.stopAsking();
|
|
210
220
|
socket.stopReads();
|
|
211
221
|
await recovery.retire();
|
|
212
222
|
await socket.lanes.finished();
|
|
@@ -214,7 +224,7 @@ export async function stop(runtime) {
|
|
|
214
224
|
close(runtime);
|
|
215
225
|
}
|
|
216
226
|
export function start(runtime, signal) {
|
|
217
|
-
const { store, socket, conversations, lastAnswers, recovery } = runtime;
|
|
227
|
+
const { store, socket, presence, conversations, lastAnswers, recovery } = runtime;
|
|
218
228
|
const closeRuntime = () => close(runtime);
|
|
219
229
|
socket.observeServiceMode((mode) => signalled(runtime, mode));
|
|
220
230
|
socket.observeConversations((event) => {
|
|
@@ -231,7 +241,7 @@ export function start(runtime, signal) {
|
|
|
231
241
|
closeRuntime();
|
|
232
242
|
socket.observe((event) => {
|
|
233
243
|
if (event.kind === 'opened') {
|
|
234
|
-
|
|
244
|
+
presence.connectionLive();
|
|
235
245
|
conversations.reopened();
|
|
236
246
|
lastAnswers.reopened();
|
|
237
247
|
recovery.resume();
|
|
@@ -260,8 +270,9 @@ export function start(runtime, signal) {
|
|
|
260
270
|
if ((await local.facts()).capabilities.length > 0)
|
|
261
271
|
socket.readyFromStore();
|
|
262
272
|
})
|
|
263
|
-
.catch(() => {
|
|
273
|
+
.catch((error) => {
|
|
264
274
|
socket.readyFromStore();
|
|
275
|
+
uncaught(error);
|
|
265
276
|
});
|
|
266
277
|
if (!socket.streamed)
|
|
267
278
|
void sync(runtime, 'unstreamed', null);
|
package/dist/listing.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
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
4
|
import { type ModelState, type TypesResult } from './model.js';
|
|
5
5
|
import { type PortReach } from './reach.js';
|
|
6
6
|
import type { ReplicaRecord } from './replica.js';
|
|
7
7
|
import type { Runtime } from './runtime.js';
|
|
8
|
-
import type { RoomDeclaration } from './socket.js';
|
|
9
8
|
import type { Stored } from './store.js';
|
|
10
9
|
export type AppTypedSelection = {
|
|
11
10
|
roots: readonly string[];
|
|
@@ -20,6 +19,7 @@ export type AppRoom = {
|
|
|
20
19
|
model: TypesResult;
|
|
21
20
|
typedSelection: AppTypedSelection | null;
|
|
22
21
|
providerOwnedPaths: readonly string[];
|
|
22
|
+
authoredPaths: readonly string[];
|
|
23
23
|
roomVersion: string | null;
|
|
24
24
|
documents: number;
|
|
25
25
|
synchronizationAvailable: boolean;
|
|
@@ -31,22 +31,17 @@ type ListedEntry = ListedRoom & {
|
|
|
31
31
|
readonly documents: number;
|
|
32
32
|
};
|
|
33
33
|
export type Listing = ReadonlyMap<string, ListedEntry>;
|
|
34
|
-
export declare function modelIn({ socket }: Runtime, locator: string, stored: Stored | undefined): ModelState;
|
|
34
|
+
export declare function modelIn({ socket, presence }: Runtime, locator: string, stored: Stored | undefined): ModelState;
|
|
35
35
|
export declare function compositionFor(runtime: Runtime, record: ReplicaRecord): Composition;
|
|
36
|
-
export declare function declarationOf({
|
|
36
|
+
export declare function declarationOf({ presence }: Runtime, locator: string, stored: Stored | undefined): {
|
|
37
37
|
readonly room: RoomDeclaration;
|
|
38
38
|
readonly available: boolean;
|
|
39
39
|
} | undefined;
|
|
40
|
-
export declare function listedLocators({
|
|
40
|
+
export declare function listedLocators({ presence }: Runtime, held: ReadonlyMap<string, unknown>): string[];
|
|
41
41
|
export declare function patchedListing(runtime: Runtime, changed: ReadonlySet<string>): Promise<Listing | null>;
|
|
42
42
|
export declare function listingNow(runtime: Runtime): Promise<Listing>;
|
|
43
|
-
export declare function shownRooms(
|
|
43
|
+
export declare function shownRooms({ presence }: Runtime, listing: Listing): readonly AppRoom[];
|
|
44
44
|
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
45
|
export declare function heldRooms({ store }: Runtime, listed: readonly DiscoveredRoom[]): Promise<HeldRoom[]>;
|
|
51
46
|
export declare function name(runtime: Runtime, locator: string): Promise<void>;
|
|
52
47
|
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,19 @@ 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
|
-
...declared.keys(),
|
|
23
|
-
...[...held.keys()].filter((locator) => !declared.has(locator)),
|
|
24
|
-
].filter((locator) => !store.fences.has(locator));
|
|
25
|
+
export function listedLocators({ presence }, held) {
|
|
26
|
+
const listed = presence.rooms().map(({ locator }) => locator);
|
|
27
|
+
return [...new Set([...listed, ...held.keys()])];
|
|
25
28
|
}
|
|
26
29
|
function selectionModel({ socket, builtIn }) {
|
|
27
30
|
return socket.session.now().refusal?.code === 'revoked-authorization'
|
|
@@ -33,7 +36,7 @@ function listedRoom(runtime, locator, stored) {
|
|
|
33
36
|
if (declaration === undefined)
|
|
34
37
|
return undefined;
|
|
35
38
|
const { room, available } = declaration;
|
|
36
|
-
const selection = room.typedSelection
|
|
39
|
+
const selection = room.typedSelection;
|
|
37
40
|
return {
|
|
38
41
|
name: room.name,
|
|
39
42
|
locator,
|
|
@@ -45,9 +48,10 @@ function listedRoom(runtime, locator, stored) {
|
|
|
45
48
|
? null
|
|
46
49
|
: { roots: selection.roots, model: modelTypes(selectionModel(runtime)) },
|
|
47
50
|
providerOwnedPaths: room.providerOwnedPaths,
|
|
51
|
+
authoredPaths: room.authoredPaths,
|
|
48
52
|
roomVersion: stored?.record.roomVersion ?? null,
|
|
49
53
|
synchronizationAvailable: available,
|
|
50
|
-
refusal: runtime.
|
|
54
|
+
refusal: runtime.presence.refusal(locator),
|
|
51
55
|
documents: stored?.documents ?? 0,
|
|
52
56
|
};
|
|
53
57
|
}
|
|
@@ -68,9 +72,7 @@ export async function patchedListing(runtime, changed) {
|
|
|
68
72
|
const held = await store.rooms([...changed]);
|
|
69
73
|
const listing = new Map(roomsShown);
|
|
70
74
|
for (const locator of changed) {
|
|
71
|
-
const room =
|
|
72
|
-
? undefined
|
|
73
|
-
: listedRoom(runtime, locator, held.get(locator));
|
|
75
|
+
const room = listedRoom(runtime, locator, held.get(locator));
|
|
74
76
|
if (room === undefined || !listing.has(locator))
|
|
75
77
|
return null;
|
|
76
78
|
listing.set(locator, room);
|
|
@@ -80,11 +82,9 @@ export async function patchedListing(runtime, changed) {
|
|
|
80
82
|
export async function listingNow(runtime) {
|
|
81
83
|
return listingOf(runtime, await runtime.store.rooms());
|
|
82
84
|
}
|
|
83
|
-
function
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
export function shownRooms(runtime, listing) {
|
|
87
|
-
return structuredClone([...listing.values()].map(({ documents, ...room }) => lockedIn(runtime, listing, room.locator)
|
|
85
|
+
export function shownRooms({ presence }, listing) {
|
|
86
|
+
const locked = new Set(presence.lockedAmong(new Map([...listing].map(([locator, room]) => [locator, room.replica.offline]))));
|
|
87
|
+
return structuredClone([...listing.values()].map(({ documents, ...room }) => locked.has(room.locator)
|
|
88
88
|
? {
|
|
89
89
|
...room,
|
|
90
90
|
model: modelTypes(NO_MODEL),
|
|
@@ -113,43 +113,6 @@ export async function roomFacts(runtime, reach = null) {
|
|
|
113
113
|
});
|
|
114
114
|
return { listed: socket.session.now().roomsListed, rooms };
|
|
115
115
|
}
|
|
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
116
|
export async function heldRooms({ store }, listed) {
|
|
154
117
|
const stored = await store.rooms(listed.map((room) => room.locator));
|
|
155
118
|
return listed.flatMap((room) => {
|
|
@@ -159,14 +122,14 @@ export async function heldRooms({ store }, listed) {
|
|
|
159
122
|
? [{ locator: room.locator, roomVersion: null }]
|
|
160
123
|
: [];
|
|
161
124
|
}
|
|
162
|
-
if (record.replica.selection !== room.replica.selection)
|
|
125
|
+
if (record.declaration.replica.selection !== room.replica.selection)
|
|
163
126
|
return [];
|
|
164
127
|
return [{ locator: room.locator, roomVersion: record.roomVersion }];
|
|
165
128
|
});
|
|
166
129
|
}
|
|
167
130
|
export async function name(runtime, locator) {
|
|
168
|
-
const { socket } = runtime;
|
|
169
|
-
const room =
|
|
131
|
+
const { socket, presence } = runtime;
|
|
132
|
+
const room = presence.room(locator);
|
|
170
133
|
if (!socket.streamed || room === undefined || !socket.isOpen() || !socket.isHanded())
|
|
171
134
|
return;
|
|
172
135
|
const [held] = await heldRooms(runtime, [room]);
|
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,EAIL,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;
|
|
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,EAIL,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACrE,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,KAAK,QAAQ,GAAG,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;AAchD,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,OAAO,IAAI,IAAI,CAAC;IAChB,KAAK,CACH,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,EACzB,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,IAAI,GACX,MAAM,IAAI,CAAC;IACd,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAmCF,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CA2HxF"}
|
package/dist/live.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { changeOf, digestOf, } from './observation.js';
|
|
2
|
+
import { uncaught } from './failure.js';
|
|
2
3
|
import { roomOfKey } from './rows.js';
|
|
3
4
|
function narrowed(plan) {
|
|
4
5
|
return (plan.paths !== null &&
|
|
@@ -76,7 +77,6 @@ export function createLiveQueries(run, holding) {
|
|
|
76
77
|
}
|
|
77
78
|
}
|
|
78
79
|
catch (error) {
|
|
79
|
-
entry.dirty = false;
|
|
80
80
|
const unanswered = [...entry.fresh.values()];
|
|
81
81
|
entry.fresh.clear();
|
|
82
82
|
for (const failed of unanswered)
|
|
@@ -113,8 +113,8 @@ export function createLiveQueries(run, holding) {
|
|
|
113
113
|
}
|
|
114
114
|
} while (recoverAgain && !closed);
|
|
115
115
|
}
|
|
116
|
-
catch {
|
|
117
|
-
|
|
116
|
+
catch (error) {
|
|
117
|
+
uncaught(error);
|
|
118
118
|
}
|
|
119
119
|
finally {
|
|
120
120
|
recovering = false;
|
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
|