@agentshouse/mdruntime 0.1.0-cedb03eaa48b6 → 0.1.0-cedd665dffa4c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -19
- package/dist/acceptance.d.ts +3 -0
- package/dist/acceptance.d.ts.map +1 -0
- package/dist/acceptance.js +299 -0
- 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 +26 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +302 -0
- package/dist/adapter.d.ts +173 -125
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +6 -10
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +35 -41
- package/dist/binary.d.ts +0 -5
- package/dist/binary.d.ts.map +1 -1
- package/dist/binary.js +1 -1
- package/dist/bootstrap.d.ts +30 -11
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +309 -113
- package/dist/cell.d.ts +6 -0
- package/dist/cell.d.ts.map +1 -0
- package/dist/cell.js +9 -0
- package/dist/chain.d.ts +12 -0
- package/dist/chain.d.ts.map +1 -0
- package/dist/chain.js +64 -0
- package/dist/change-set.d.ts +13 -16
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +17 -89
- package/dist/change.d.ts +36 -1
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +17 -3
- package/dist/chat-types.d.ts +3 -0
- package/dist/chat-types.d.ts.map +1 -0
- package/dist/chat-types.js +11 -0
- package/dist/client.d.ts +37 -26
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +113 -23
- package/dist/collection.d.ts +32 -21
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +53 -318
- package/dist/compile.d.ts +18 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +723 -0
- package/dist/connection.d.ts +7 -137
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +110 -3602
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/{chat/context.js → context.js} +2 -5
- package/dist/conversation-live.d.ts +150 -0
- package/dist/conversation-live.d.ts.map +1 -0
- package/dist/conversation-live.js +259 -0
- package/dist/conversation-row.d.ts +40 -0
- package/dist/conversation-row.d.ts.map +1 -0
- package/dist/conversation-row.js +66 -0
- package/dist/conversation.d.ts +75 -49
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +1029 -806
- package/dist/declaration.d.ts +10 -0
- package/dist/declaration.d.ts.map +1 -0
- package/dist/declaration.js +24 -0
- package/dist/digest.d.ts +7 -0
- package/dist/digest.d.ts.map +1 -0
- package/dist/digest.js +113 -0
- package/dist/discovery.d.ts +10 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +150 -0
- package/dist/durability.d.ts +20 -4
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +9 -0
- package/dist/entry.d.ts +5 -2
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +33 -29
- package/dist/expectation.d.ts +26 -13
- package/dist/expectation.d.ts.map +1 -1
- package/dist/expectation.js +72 -19
- 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 +49 -0
- package/dist/figures.d.ts.map +1 -0
- package/dist/figures.js +199 -0
- package/dist/file.d.ts +2 -19
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +8 -122
- package/dist/holdings.d.ts +29 -0
- package/dist/holdings.d.ts.map +1 -0
- package/dist/holdings.js +95 -0
- package/dist/host.d.ts +21 -8
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +119 -51
- package/dist/identity.d.ts +0 -2
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +0 -6
- package/dist/index.d.ts +41 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -4
- package/dist/install.d.ts +60 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +537 -0
- package/dist/lifecycle.d.ts +7 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +278 -0
- package/dist/listing.d.ts +52 -0
- package/dist/listing.d.ts.map +1 -0
- package/dist/listing.js +152 -0
- package/dist/live.d.ts +25 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/live.js +206 -0
- 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 +7 -0
- package/dist/locks.d.ts.map +1 -0
- package/dist/locks.js +32 -0
- package/dist/lost.d.ts +5 -0
- package/dist/lost.d.ts.map +1 -0
- package/dist/lost.js +49 -0
- package/dist/media.d.ts +13 -0
- package/dist/media.d.ts.map +1 -0
- package/dist/media.js +269 -0
- package/dist/memory.d.ts +19 -7
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +281 -118
- package/dist/messages.d.ts +58 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +162 -0
- package/dist/model.d.ts +8 -11
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +6 -23
- package/dist/models.d.ts +10 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +153 -0
- package/dist/name.d.ts +4 -0
- package/dist/name.d.ts.map +1 -0
- package/dist/name.js +122 -0
- package/dist/observation.d.ts +38 -10
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +232 -44
- package/dist/opened.d.ts +22 -0
- package/dist/opened.d.ts.map +1 -0
- package/dist/opened.js +107 -0
- package/dist/opening.d.ts +4 -0
- package/dist/opening.d.ts.map +1 -0
- package/dist/opening.js +53 -0
- package/dist/outcome.d.ts +51 -9
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +62 -2
- package/dist/overlay.d.ts +8 -6
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +121 -182
- 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 +4 -0
- package/dist/parts.d.ts.map +1 -0
- package/dist/parts.js +13 -0
- package/dist/paths.d.ts +2 -0
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +26 -0
- package/dist/preparation.d.ts +41 -0
- package/dist/preparation.d.ts.map +1 -0
- package/dist/preparation.js +314 -0
- 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 +16 -0
- package/dist/queries.d.ts.map +1 -0
- package/dist/queries.js +308 -0
- package/dist/query.d.ts +21 -207
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +3 -493
- package/dist/{chat/questions.d.ts → questions.d.ts} +5 -7
- package/dist/questions.d.ts.map +1 -0
- package/dist/{chat/questions.js → questions.js} +11 -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 +21 -11
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +342 -112
- package/dist/react.d.ts +17 -3
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +33 -1
- package/dist/{chat/read.d.ts → read.d.ts} +2 -0
- package/dist/read.d.ts.map +1 -0
- package/dist/{chat/read.js → read.js} +4 -0
- package/dist/readiness.d.ts +22 -20
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +5 -13
- package/dist/reads.d.ts +38 -10
- package/dist/reads.d.ts.map +1 -1
- package/dist/reads.js +163 -83
- package/dist/recovery.d.ts +5 -2
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +65 -8
- package/dist/refresh.d.ts +18 -15
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +145 -60
- package/dist/refusal.d.ts +5 -0
- package/dist/refusal.d.ts.map +1 -0
- package/dist/refusal.js +55 -0
- package/dist/replica.d.ts +49 -36
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +322 -198
- 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 +55 -13
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +416 -122
- package/dist/room-drafts.d.ts +24 -0
- package/dist/room-drafts.d.ts.map +1 -0
- package/dist/room-drafts.js +220 -0
- package/dist/rows.d.ts +32 -31
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +59 -124
- package/dist/runtime.d.ts +34 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +1 -0
- package/dist/save.d.ts +43 -49
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +736 -302
- package/dist/saves.d.ts +32 -0
- package/dist/saves.d.ts.map +1 -0
- package/dist/saves.js +426 -0
- package/dist/search.d.ts +12 -95
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +10 -266
- package/dist/seed.d.ts +11 -2
- package/dist/seed.d.ts.map +1 -1
- package/dist/seed.js +71 -1
- package/dist/shared.d.ts +6 -7
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +75 -104
- package/dist/shown.d.ts +33 -0
- package/dist/shown.d.ts.map +1 -0
- package/dist/shown.js +309 -0
- package/dist/socket/admission.d.ts +7 -0
- package/dist/socket/admission.d.ts.map +1 -0
- package/dist/socket/admission.js +39 -0
- package/dist/socket/answers.d.ts +6 -0
- package/dist/socket/answers.d.ts.map +1 -0
- package/dist/socket/answers.js +20 -0
- package/dist/socket/lanes.d.ts +28 -0
- package/dist/socket/lanes.d.ts.map +1 -0
- package/dist/socket/lanes.js +103 -0
- package/dist/socket/reads.d.ts +10 -0
- package/dist/socket/reads.d.ts.map +1 -0
- package/dist/socket/reads.js +31 -0
- package/dist/socket/session.d.ts +38 -0
- package/dist/socket/session.d.ts.map +1 -0
- package/dist/socket/session.js +23 -0
- package/dist/socket.d.ts +67 -0
- package/dist/socket.d.ts.map +1 -0
- package/dist/socket.js +164 -0
- package/dist/source.d.ts +59 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +93 -0
- package/dist/status.d.ts +4 -5
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +3 -7
- package/dist/store/installs.d.ts +30 -0
- package/dist/store/installs.d.ts.map +1 -0
- package/dist/store/installs.js +40 -0
- package/dist/store/readiness.d.ts +11 -0
- package/dist/store/readiness.d.ts.map +1 -0
- package/dist/store/readiness.js +68 -0
- package/dist/store/records.d.ts +217 -0
- package/dist/store/records.d.ts.map +1 -0
- package/dist/store/records.js +464 -0
- package/dist/store/room-held.d.ts +8 -0
- package/dist/store/room-held.d.ts.map +1 -0
- package/dist/store/room-held.js +17 -0
- 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/space.d.ts +11 -0
- package/dist/store/space.d.ts.map +1 -0
- package/dist/store/space.js +41 -0
- package/dist/store/watchers.d.ts +17 -0
- package/dist/store/watchers.d.ts.map +1 -0
- package/dist/store/watchers.js +56 -0
- package/dist/store/writes.d.ts +24 -0
- package/dist/store/writes.d.ts.map +1 -0
- package/dist/store/writes.js +125 -0
- package/dist/store.d.ts +114 -163
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +163 -750
- package/dist/stored.d.ts +167 -0
- package/dist/stored.d.ts.map +1 -0
- package/dist/stored.js +703 -0
- package/dist/surface.d.ts +89 -0
- package/dist/surface.d.ts.map +1 -0
- package/dist/surface.js +222 -0
- package/dist/sync.d.ts +19 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +535 -0
- package/dist/tables.d.ts +419 -0
- package/dist/tables.d.ts.map +1 -0
- package/dist/tables.js +758 -0
- package/dist/tallies.d.ts +18 -0
- package/dist/tallies.d.ts.map +1 -0
- package/dist/tallies.js +128 -0
- package/dist/transfer.d.ts +0 -5
- package/dist/transfer.d.ts.map +1 -1
- package/dist/turn.d.ts +4 -2
- package/dist/turn.d.ts.map +1 -1
- package/dist/turn.js +46 -22
- package/dist/validation.d.ts +29 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +98 -0
- package/dist/windows.d.ts +1 -16
- package/dist/windows.d.ts.map +1 -1
- package/dist/windows.js +2 -79
- package/dist/wire.d.ts +74 -9
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +26 -6
- package/package.json +19 -19
- package/AGENTS.md +0 -305
- package/dist/attempt.d.ts +0 -16
- package/dist/attempt.d.ts.map +0 -1
- package/dist/attempt.js +0 -70
- package/dist/chat/acts.d.ts +0 -33
- package/dist/chat/acts.d.ts.map +0 -1
- package/dist/chat/acts.js +0 -36
- package/dist/chat/context.d.ts +0 -3
- package/dist/chat/context.d.ts.map +0 -1
- package/dist/chat/earlier.d.ts +0 -10
- package/dist/chat/earlier.d.ts.map +0 -1
- package/dist/chat/earlier.js +0 -54
- package/dist/chat/input.d.ts +0 -9
- package/dist/chat/input.d.ts.map +0 -1
- package/dist/chat/input.js +0 -99
- package/dist/chat/kit.d.ts +0 -61
- package/dist/chat/kit.d.ts.map +0 -1
- package/dist/chat/kit.js +0 -123
- package/dist/chat/lasting.d.ts +0 -6
- package/dist/chat/lasting.d.ts.map +0 -1
- package/dist/chat/lasting.js +0 -19
- package/dist/chat/list.d.ts +0 -27
- package/dist/chat/list.d.ts.map +0 -1
- package/dist/chat/list.js +0 -99
- package/dist/chat/markdown.d.ts +0 -20
- package/dist/chat/markdown.d.ts.map +0 -1
- package/dist/chat/markdown.js +0 -188
- package/dist/chat/message.d.ts +0 -6
- package/dist/chat/message.d.ts.map +0 -1
- package/dist/chat/message.js +0 -192
- package/dist/chat/messages.d.ts +0 -22
- package/dist/chat/messages.d.ts.map +0 -1
- package/dist/chat/messages.js +0 -155
- package/dist/chat/name.d.ts +0 -6
- package/dist/chat/name.d.ts.map +0 -1
- package/dist/chat/name.js +0 -37
- package/dist/chat/opened.d.ts +0 -11
- package/dist/chat/opened.d.ts.map +0 -1
- package/dist/chat/opened.js +0 -17
- package/dist/chat/overlay.d.ts +0 -31
- package/dist/chat/overlay.d.ts.map +0 -1
- package/dist/chat/overlay.js +0 -97
- package/dist/chat/parts.d.ts +0 -57
- package/dist/chat/parts.d.ts.map +0 -1
- package/dist/chat/parts.js +0 -119
- package/dist/chat/process.d.ts +0 -20
- package/dist/chat/process.d.ts.map +0 -1
- package/dist/chat/process.js +0 -32
- package/dist/chat/provider.d.ts +0 -63
- package/dist/chat/provider.d.ts.map +0 -1
- package/dist/chat/provider.js +0 -628
- package/dist/chat/question.d.ts +0 -9
- package/dist/chat/question.d.ts.map +0 -1
- package/dist/chat/question.js +0 -69
- package/dist/chat/questions.d.ts.map +0 -1
- package/dist/chat/read.d.ts.map +0 -1
- package/dist/chat/ready.d.ts +0 -34
- package/dist/chat/ready.d.ts.map +0 -1
- package/dist/chat/ready.js +0 -91
- package/dist/chat/style.d.ts +0 -4
- package/dist/chat/style.d.ts.map +0 -1
- package/dist/chat/style.js +0 -302
- package/dist/chat.d.ts +0 -14
- package/dist/chat.d.ts.map +0 -1
- package/dist/chat.js +0 -8
- package/dist/fence.d.ts +0 -6
- package/dist/fence.d.ts.map +0 -1
- package/dist/fence.js +0 -10
- package/dist/log.d.ts +0 -5
- package/dist/log.d.ts.map +0 -1
- package/dist/log.js +0 -14
- package/dist/read-side.d.ts +0 -27
- package/dist/read-side.d.ts.map +0 -1
- package/dist/read-side.js +0 -824
package/dist/recovery.js
CHANGED
|
@@ -1,17 +1,44 @@
|
|
|
1
1
|
// A first retry waits about a second, so a passing failure clears before the next attempt.
|
|
2
2
|
const FIRST_MS = 1_000;
|
|
3
3
|
// Waits stop doubling at half a minute, so work resumes soon after a long failure ends.
|
|
4
|
-
const
|
|
4
|
+
const MAX_MS = 30_000;
|
|
5
5
|
const ATTEMPTS = 8;
|
|
6
|
-
export function retryDelay(tries, firstMs = FIRST_MS,
|
|
7
|
-
const
|
|
8
|
-
return
|
|
6
|
+
export function retryDelay(tries, firstMs = FIRST_MS, maxMs = MAX_MS) {
|
|
7
|
+
const longest = Math.min(maxMs, firstMs * 2 ** tries);
|
|
8
|
+
return longest / 2 + (Math.random() * longest) / 2;
|
|
9
|
+
}
|
|
10
|
+
export async function untilAnswered(ask, signal, answered = () => true, owner) {
|
|
11
|
+
for (let tries = 0;; tries += 1) {
|
|
12
|
+
try {
|
|
13
|
+
const answer = await ask();
|
|
14
|
+
if (answered(answer) || signal.aborted)
|
|
15
|
+
return answer;
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
if (signal.aborted)
|
|
19
|
+
throw error;
|
|
20
|
+
}
|
|
21
|
+
await new Promise((resume) => {
|
|
22
|
+
const done = () => {
|
|
23
|
+
clearTimeout(again);
|
|
24
|
+
signal.removeEventListener('abort', done);
|
|
25
|
+
unheld();
|
|
26
|
+
resume();
|
|
27
|
+
};
|
|
28
|
+
// A read that failed is asked again on the doubling backoff, so its asker is answered once the failure clears.
|
|
29
|
+
const again = setTimeout(done, retryDelay(tries));
|
|
30
|
+
signal.addEventListener('abort', done, { once: true });
|
|
31
|
+
const unheld = owner?.waits(done) ?? (() => { });
|
|
32
|
+
});
|
|
33
|
+
signal.throwIfAborted();
|
|
34
|
+
}
|
|
9
35
|
}
|
|
10
36
|
function owner(backoff, inFlight, release = () => { }) {
|
|
11
37
|
const intents = new Map();
|
|
12
38
|
const children = new Set();
|
|
13
39
|
const running = new Set();
|
|
14
40
|
const queued = [];
|
|
41
|
+
const waiting = new Set();
|
|
15
42
|
let free = inFlight;
|
|
16
43
|
let retired = false;
|
|
17
44
|
function finish(key, intent, done) {
|
|
@@ -80,11 +107,20 @@ function owner(backoff, inFlight, release = () => { }) {
|
|
|
80
107
|
}
|
|
81
108
|
intent.tries += 1;
|
|
82
109
|
if (intent.tries >= backoff.attempts) {
|
|
83
|
-
|
|
110
|
+
if (again === null) {
|
|
111
|
+
finish(key, intent, false);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
intent.tries = 0;
|
|
115
|
+
if (again === 'now')
|
|
116
|
+
launch(key, intent);
|
|
117
|
+
else
|
|
118
|
+
wait(key, intent, again, true);
|
|
84
119
|
return;
|
|
85
120
|
}
|
|
86
121
|
if (result === 'again') {
|
|
87
|
-
|
|
122
|
+
// The next attempt waits the doubling backoff, up to its maximum.
|
|
123
|
+
const delay = retryDelay(intent.tries - 1, backoff.firstMs, backoff.maxMs);
|
|
88
124
|
wait(key, intent, Date.now() + delay, false);
|
|
89
125
|
}
|
|
90
126
|
else
|
|
@@ -135,7 +171,7 @@ function owner(backoff, inFlight, release = () => { }) {
|
|
|
135
171
|
wait(key, intent, options.at, true);
|
|
136
172
|
else if (options.again === true) {
|
|
137
173
|
intent.tries = 1;
|
|
138
|
-
wait(key, intent, Date.now() + retryDelay(0, backoff.firstMs, backoff.
|
|
174
|
+
wait(key, intent, Date.now() + retryDelay(0, backoff.firstMs, backoff.maxMs), false);
|
|
139
175
|
}
|
|
140
176
|
else
|
|
141
177
|
launch(key, intent);
|
|
@@ -160,6 +196,27 @@ function owner(backoff, inFlight, release = () => { }) {
|
|
|
160
196
|
launch(key, intent);
|
|
161
197
|
}
|
|
162
198
|
},
|
|
199
|
+
again() {
|
|
200
|
+
if (retired)
|
|
201
|
+
return;
|
|
202
|
+
for (const [key, intent] of [...intents]) {
|
|
203
|
+
if (intent.timer === null || intent.guided)
|
|
204
|
+
continue;
|
|
205
|
+
clearTimeout(intent.timer);
|
|
206
|
+
intent.timer = null;
|
|
207
|
+
launch(key, intent);
|
|
208
|
+
}
|
|
209
|
+
for (const wake of [...waiting])
|
|
210
|
+
wake();
|
|
211
|
+
for (const child of [...children])
|
|
212
|
+
child.again();
|
|
213
|
+
},
|
|
214
|
+
waits(wake) {
|
|
215
|
+
waiting.add(wake);
|
|
216
|
+
return () => {
|
|
217
|
+
waiting.delete(wake);
|
|
218
|
+
};
|
|
219
|
+
},
|
|
163
220
|
cancel(key) {
|
|
164
221
|
const intent = intents.get(key);
|
|
165
222
|
if (intent === undefined)
|
|
@@ -191,7 +248,7 @@ function owner(backoff, inFlight, release = () => { }) {
|
|
|
191
248
|
export function createRecovery(options = {}) {
|
|
192
249
|
return owner({
|
|
193
250
|
firstMs: options.firstMs ?? FIRST_MS,
|
|
194
|
-
|
|
251
|
+
maxMs: options.maxMs ?? MAX_MS,
|
|
195
252
|
attempts: options.attempts ?? ATTEMPTS,
|
|
196
253
|
}, options.inFlight ?? Infinity);
|
|
197
254
|
}
|
package/dist/refresh.d.ts
CHANGED
|
@@ -1,24 +1,27 @@
|
|
|
1
|
-
import type { AdapterFailure, Authorization, RetryableRefusal } from './adapter.js';
|
|
2
|
-
import type {
|
|
3
|
-
import {
|
|
4
|
-
import type {
|
|
5
|
-
import {
|
|
1
|
+
import type { AdapterFailure, Authorization, RefreshPage, RefreshRequest, RefreshResult, RetryableRefusal } from './adapter.js';
|
|
2
|
+
import type { Remodel } from './bootstrap.js';
|
|
3
|
+
import type { ReplicaRecord } from './replica.js';
|
|
4
|
+
import type { RefreshedPage } from './store.js';
|
|
5
|
+
import type { HeldEntry, StoredEntry } from './tables.js';
|
|
6
|
+
import { type Unconfirmed } from './transfer.js';
|
|
6
7
|
export type Advancement = {
|
|
7
8
|
kind: 'still-current';
|
|
8
9
|
} | {
|
|
9
10
|
kind: 'advanced';
|
|
10
11
|
record: ReplicaRecord;
|
|
12
|
+
changed: ReadonlySet<string>;
|
|
11
13
|
} | {
|
|
12
14
|
kind: 'beyond-horizon';
|
|
13
15
|
} | RetryableRefusal | Unconfirmed | AdapterFailure;
|
|
14
|
-
export type
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
export declare function
|
|
23
|
-
export declare function
|
|
16
|
+
export type Refresher = (authorization: Authorization, request: RefreshRequest) => Promise<RefreshResult>;
|
|
17
|
+
export type Refreshing = {
|
|
18
|
+
turn(): void;
|
|
19
|
+
prior(paths: readonly string[]): Promise<ReadonlyMap<string, HeldEntry>>;
|
|
20
|
+
later(paths: readonly string[], roomVersion: string): Promise<ReadonlySet<string>>;
|
|
21
|
+
stage(page: RefreshedPage): Promise<boolean>;
|
|
22
|
+
};
|
|
23
|
+
type PageContent = Pick<RefreshPage, 'documents' | 'facts' | 'revisions' | 'fileIds' | 'created' | 'changes' | 'binaryFiles'>;
|
|
24
|
+
export declare function pageEntries(page: PageContent, removals: readonly string[], roomVersion: string, prior: (paths: readonly string[]) => Promise<ReadonlyMap<string, HeldEntry>>): Promise<StoredEntry[]>;
|
|
25
|
+
export declare function advancement(refresh: Refresher, authorization: Authorization, held: ReplicaRecord, remodel: Remodel, continuing: () => boolean, staging: Refreshing): Promise<Advancement>;
|
|
26
|
+
export {};
|
|
24
27
|
//# sourceMappingURL=refresh.d.ts.map
|
package/dist/refresh.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../src/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../src/refresh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,cAAc,EACd,aAAa,EACb,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAG9D,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,GACzE;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B,gBAAgB,GAChB,WAAW,GACX,cAAc,CAAC;AAEnB,MAAM,MAAM,SAAS,GAAG,CACtB,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,cAAc,KACpB,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5B,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,IAAI,IAAI,CAAC;IACb,KAAK,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACzE,KAAK,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IACnF,KAAK,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9C,CAAC;AASF,KAAK,WAAW,GAAG,IAAI,CACrB,WAAW,EACX,WAAW,GAAG,OAAO,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CACxF,CAAC;AAwFF,wBAAsB,WAAW,CAC/B,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,GAC3E,OAAO,CAAC,WAAW,EAAE,CAAC,CAKxB;AAgDD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,SAAS,EAClB,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,OAAO,EACzB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,WAAW,CAAC,CA8CtB"}
|
package/dist/refresh.js
CHANGED
|
@@ -1,63 +1,160 @@
|
|
|
1
|
-
import { acceptedBinaries } from './overlay.js';
|
|
2
|
-
import { readStaged } from './replica.js';
|
|
3
|
-
import { drafted, settled } from './shared.js';
|
|
4
1
|
import { unconfirmed } from './transfer.js';
|
|
5
|
-
|
|
2
|
+
import { ROW_WEIGHT, stepped, yielded } from './turn.js';
|
|
3
|
+
function* listing(page, removals) {
|
|
4
|
+
const removed = new Set();
|
|
5
|
+
for (const path of removals) {
|
|
6
|
+
removed.add(path);
|
|
7
|
+
yield ROW_WEIGHT;
|
|
8
|
+
}
|
|
9
|
+
const documents = [];
|
|
10
|
+
const binaries = [];
|
|
11
|
+
const asked = [];
|
|
12
|
+
const written = new Set();
|
|
13
|
+
for (const [kept, named] of [
|
|
14
|
+
[documents, page.documents],
|
|
15
|
+
[binaries, page.binaryFiles],
|
|
16
|
+
]) {
|
|
17
|
+
for (const path of Object.keys(named)) {
|
|
18
|
+
yield ROW_WEIGHT;
|
|
19
|
+
if (removed.has(path))
|
|
20
|
+
continue;
|
|
21
|
+
kept.push(path);
|
|
22
|
+
written.add(path);
|
|
23
|
+
if (page.revisions[path] === undefined)
|
|
24
|
+
asked.push(path);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const others = [];
|
|
28
|
+
const seen = new Set();
|
|
29
|
+
for (const named of [page.revisions, page.fileIds ?? {}, page.changes]) {
|
|
30
|
+
for (const path of Object.keys(named)) {
|
|
31
|
+
yield ROW_WEIGHT;
|
|
32
|
+
if (seen.has(path))
|
|
33
|
+
continue;
|
|
34
|
+
seen.add(path);
|
|
35
|
+
if (!written.has(path) && !removed.has(path))
|
|
36
|
+
others.push(path);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return { documents, binaries, others, asked: [...asked, ...others] };
|
|
40
|
+
}
|
|
41
|
+
function* entering(page, roomVersion, listed, prior) {
|
|
42
|
+
const entries = [];
|
|
43
|
+
for (const path of listed.documents) {
|
|
44
|
+
yield ROW_WEIGHT;
|
|
45
|
+
entries.push({
|
|
46
|
+
path,
|
|
47
|
+
content: page.documents[path],
|
|
48
|
+
facts: page.facts[path] ?? null,
|
|
49
|
+
binary: null,
|
|
50
|
+
revision: page.revisions[path] ?? prior.get(path)?.revision ?? null,
|
|
51
|
+
fileId: page.fileIds?.[path] ?? null,
|
|
52
|
+
created: page.created?.[path] ?? null,
|
|
53
|
+
change: page.changes[path] ?? null,
|
|
54
|
+
written: roomVersion,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
for (const path of listed.binaries) {
|
|
58
|
+
yield ROW_WEIGHT;
|
|
59
|
+
entries.push({
|
|
60
|
+
path,
|
|
61
|
+
content: null,
|
|
62
|
+
facts: null,
|
|
63
|
+
binary: { state: 'accepted', ...page.binaryFiles[path] },
|
|
64
|
+
revision: page.revisions[path] ?? prior.get(path)?.revision ?? null,
|
|
65
|
+
fileId: page.fileIds?.[path] ?? null,
|
|
66
|
+
created: page.created?.[path] ?? null,
|
|
67
|
+
change: page.changes[path] ?? null,
|
|
68
|
+
written: null,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
for (const path of listed.others) {
|
|
72
|
+
yield ROW_WEIGHT;
|
|
73
|
+
const held = prior.get(path);
|
|
74
|
+
if (held === undefined)
|
|
75
|
+
continue;
|
|
76
|
+
const { type: _type, ...kept } = held;
|
|
77
|
+
entries.push({
|
|
78
|
+
...kept,
|
|
79
|
+
revision: page.revisions[path] ?? held.revision,
|
|
80
|
+
fileId: page.fileIds?.[path] ?? held.fileId,
|
|
81
|
+
created: page.created?.[path] ?? held.created,
|
|
82
|
+
change: page.changes[path] ?? held.change,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return entries;
|
|
86
|
+
}
|
|
87
|
+
export async function pageEntries(page, removals, roomVersion, prior) {
|
|
88
|
+
await yielded();
|
|
89
|
+
const listed = await stepped(listing(page, removals));
|
|
90
|
+
const held = listed.asked.length === 0 ? new Map() : await prior(listed.asked);
|
|
91
|
+
return stepped(entering(page, roomVersion, listed, held));
|
|
92
|
+
}
|
|
93
|
+
function without(named, kept) {
|
|
94
|
+
return Object.fromEntries(Object.entries(named).filter(([path]) => !kept.has(path)));
|
|
95
|
+
}
|
|
96
|
+
function unwritten(page, kept) {
|
|
97
|
+
if (kept.size === 0)
|
|
98
|
+
return page;
|
|
99
|
+
return {
|
|
100
|
+
...page,
|
|
101
|
+
documents: without(page.documents, kept),
|
|
102
|
+
facts: without(page.facts, kept),
|
|
103
|
+
revisions: without(page.revisions, kept),
|
|
104
|
+
...(page.fileIds === undefined ? {} : { fileIds: without(page.fileIds, kept) }),
|
|
105
|
+
...(page.created === undefined ? {} : { created: without(page.created, kept) }),
|
|
106
|
+
changes: without(page.changes, kept),
|
|
107
|
+
binaryFiles: without(page.binaryFiles, kept),
|
|
108
|
+
removals: page.removals.filter((path) => !kept.has(path)),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
async function pageOf(answered, roomVersion, staging) {
|
|
112
|
+
const page = unwritten(answered, await staging.later([
|
|
113
|
+
...Object.keys(answered.documents),
|
|
114
|
+
...Object.keys(answered.binaryFiles),
|
|
115
|
+
...answered.removals,
|
|
116
|
+
], roomVersion));
|
|
117
|
+
return {
|
|
118
|
+
entries: await pageEntries(page, page.removals, roomVersion, (paths) => staging.prior(paths)),
|
|
119
|
+
removals: page.removals,
|
|
120
|
+
folders: page.folders ?? [],
|
|
121
|
+
folderRemovals: page.folderRemovals ?? [],
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
export async function advancement(refresh, authorization, held, remodel, continuing, staging) {
|
|
6
125
|
const locator = held.locator;
|
|
7
126
|
const fromRoomVersion = held.roomVersion;
|
|
8
|
-
|
|
127
|
+
staging.turn();
|
|
128
|
+
if (!continuing())
|
|
129
|
+
return unconfirmed;
|
|
130
|
+
const first = await refresh(authorization, {
|
|
9
131
|
locator,
|
|
10
|
-
selection: held.replica.selection,
|
|
132
|
+
selection: held.declaration.replica.selection,
|
|
11
133
|
fromRoomVersion,
|
|
12
134
|
});
|
|
13
135
|
if (first.kind !== 'net-advancement')
|
|
14
136
|
return first;
|
|
15
137
|
const roomVersion = first.roomVersion;
|
|
16
|
-
const models = remodel(first.models, {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const binaries = drafted(held.binaries);
|
|
26
|
-
const stage = (page) => {
|
|
27
|
-
for (const path of Object.keys(page.documents)) {
|
|
28
|
-
delete binaries[path];
|
|
29
|
-
delete fileIds[path];
|
|
30
|
-
delete changes[path];
|
|
31
|
-
written[path] = roomVersion;
|
|
32
|
-
}
|
|
33
|
-
for (const path of Object.keys(page.binaryFiles)) {
|
|
34
|
-
delete documents[path];
|
|
35
|
-
delete fileIds[path];
|
|
36
|
-
delete changes[path];
|
|
37
|
-
delete written[path];
|
|
38
|
-
}
|
|
39
|
-
Object.assign(documents, page.documents);
|
|
40
|
-
Object.assign(binaries, acceptedBinaries(page.binaryFiles));
|
|
41
|
-
Object.assign(revisions, page.revisions);
|
|
42
|
-
Object.assign(fileIds, page.fileIds);
|
|
43
|
-
Object.assign(changes, page.changes);
|
|
44
|
-
for (const path of page.removals) {
|
|
45
|
-
delete documents[path];
|
|
46
|
-
delete revisions[path];
|
|
47
|
-
delete fileIds[path];
|
|
48
|
-
delete changes[path];
|
|
49
|
-
delete written[path];
|
|
50
|
-
delete binaries[path];
|
|
51
|
-
}
|
|
138
|
+
const models = remodel(first.models, { collection: held.model });
|
|
139
|
+
const changed = new Set();
|
|
140
|
+
const staged = async (page) => {
|
|
141
|
+
const read = await pageOf(page, roomVersion, staging);
|
|
142
|
+
for (const { path } of read.entries)
|
|
143
|
+
changed.add(path);
|
|
144
|
+
for (const path of read.removals)
|
|
145
|
+
changed.add(path);
|
|
146
|
+
return staging.stage(read);
|
|
52
147
|
};
|
|
53
|
-
|
|
148
|
+
if (!(await staged(first)))
|
|
149
|
+
return unconfirmed;
|
|
54
150
|
let pageToken = first.pageToken;
|
|
55
151
|
while (pageToken !== undefined) {
|
|
152
|
+
await staging.turn();
|
|
56
153
|
if (!continuing())
|
|
57
154
|
return unconfirmed;
|
|
58
|
-
const page = await
|
|
155
|
+
const page = await refresh(authorization, {
|
|
59
156
|
locator,
|
|
60
|
-
selection: held.replica.selection,
|
|
157
|
+
selection: held.declaration.replica.selection,
|
|
61
158
|
fromRoomVersion,
|
|
62
159
|
pageToken,
|
|
63
160
|
});
|
|
@@ -67,7 +164,8 @@ export async function advancement(adapter, authorization, held, remodel, continu
|
|
|
67
164
|
return page;
|
|
68
165
|
if (page.roomVersion !== roomVersion)
|
|
69
166
|
return unconfirmed;
|
|
70
|
-
|
|
167
|
+
if (!(await staged(page)))
|
|
168
|
+
return unconfirmed;
|
|
71
169
|
pageToken = page.pageToken;
|
|
72
170
|
}
|
|
73
171
|
return {
|
|
@@ -75,21 +173,8 @@ export async function advancement(adapter, authorization, held, remodel, continu
|
|
|
75
173
|
record: {
|
|
76
174
|
...held,
|
|
77
175
|
model: models.collection,
|
|
78
|
-
selectionModel: models.selection,
|
|
79
176
|
roomVersion,
|
|
80
|
-
documents: settled(documents),
|
|
81
|
-
binaries: settled(binaries),
|
|
82
|
-
revisions: settled(revisions),
|
|
83
|
-
fileIds: settled(fileIds),
|
|
84
|
-
changes: settled(changes),
|
|
85
|
-
written: settled(written),
|
|
86
177
|
},
|
|
178
|
+
changed,
|
|
87
179
|
};
|
|
88
180
|
}
|
|
89
|
-
export async function refreshRoom(adapter, authorization, confirmed, remodel, continuing) {
|
|
90
|
-
const advanced = await advancement(adapter, authorization, confirmed.record, remodel, continuing);
|
|
91
|
-
if (advanced.kind !== 'advanced')
|
|
92
|
-
return advanced;
|
|
93
|
-
const staged = readStaged(advanced.record, confirmed);
|
|
94
|
-
return staged.kind === 'staged' ? { kind: 'advanced', confirmed: staged.confirmed } : staged;
|
|
95
|
-
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ProviderRefusal } from './adapter.js';
|
|
2
|
+
import type { Runtime } from './runtime.js';
|
|
3
|
+
import type { RefusalReason } from './socket.js';
|
|
4
|
+
export declare function refuse(runtime: Runtime, reason: RefusalReason, provider?: ProviderRefusal | null): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=refusal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refusal.d.ts","sourceRoot":"","sources":["../src/refusal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAQpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wBAAsB,MAAM,CAC1B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,EACrB,QAAQ,GAAE,eAAe,GAAG,IAAW,iBAiDxC"}
|
package/dist/refusal.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { changeSet, mergeChangeSets } from './change-set.js';
|
|
2
|
+
import { composedOf } from './collection.js';
|
|
3
|
+
import { uncaught } from './failure.js';
|
|
4
|
+
import { listedLocators } from './listing.js';
|
|
5
|
+
import { prepare } from './preparation.js';
|
|
6
|
+
import { storedRecord } from './replica.js';
|
|
7
|
+
import { emitRefusal } from './shown.js';
|
|
8
|
+
export async function refuse(runtime, reason, provider = null) {
|
|
9
|
+
const { store, socket, presence } = runtime;
|
|
10
|
+
socket.session.set({ paused: true });
|
|
11
|
+
socket.abortReads();
|
|
12
|
+
try {
|
|
13
|
+
if (reason === 'revoked-authorization') {
|
|
14
|
+
await store.exclusive(async () => {
|
|
15
|
+
const revoked = { status: 'unavailable', reason: 'revoked' };
|
|
16
|
+
let held = new Map();
|
|
17
|
+
try {
|
|
18
|
+
const local = await store.open();
|
|
19
|
+
held = await store.rooms();
|
|
20
|
+
await local.commit({
|
|
21
|
+
rooms: [...held.values()].map(({ record: kept }) => {
|
|
22
|
+
const record = { ...kept, model: revoked };
|
|
23
|
+
return {
|
|
24
|
+
locator: record.locator,
|
|
25
|
+
key: record.key,
|
|
26
|
+
record: storedRecord(record),
|
|
27
|
+
composed: composedOf(store.composed(record)),
|
|
28
|
+
};
|
|
29
|
+
}),
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
uncaught(error);
|
|
34
|
+
}
|
|
35
|
+
const listedNow = listedLocators(runtime, held);
|
|
36
|
+
for (const locator of listedNow) {
|
|
37
|
+
if (!held.has(locator))
|
|
38
|
+
presence.modelled(locator, revoked);
|
|
39
|
+
}
|
|
40
|
+
store.changed(mergeChangeSets(listedNow.map((locator) => changeSet(locator, { documents: null, room: true }))));
|
|
41
|
+
prepare(runtime);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
socket.session.set({
|
|
47
|
+
refusal: {
|
|
48
|
+
code: reason,
|
|
49
|
+
reauthorizationOffered: reason === 'revoked-authorization',
|
|
50
|
+
refusal: provider,
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
emitRefusal(runtime);
|
|
54
|
+
}
|
|
55
|
+
}
|
package/dist/replica.d.ts
CHANGED
|
@@ -1,50 +1,63 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type TypedPath } from '@agentshouse/mdmodel';
|
|
2
|
+
import type { BootstrapInventory, SavedFacts, MutationResult, RoomDeclaration, TypedSelection } from './adapter.js';
|
|
3
|
+
import { type ChangeBatch, type Precondition } from './change.js';
|
|
2
4
|
import { type Collection, type Composition } from './collection.js';
|
|
5
|
+
import { type ModelState } from './model.js';
|
|
3
6
|
import { type Layer } from './overlay.js';
|
|
4
|
-
import type {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
import type { HeldEntry, OverlayEntry, StoredEntry } from './tables.js';
|
|
8
|
+
export type ReplicaRecord = {
|
|
9
|
+
readonly locator: string;
|
|
10
|
+
readonly declaration: RoomDeclaration;
|
|
11
|
+
readonly model: ModelState;
|
|
12
|
+
readonly roomVersion: string;
|
|
13
|
+
readonly transfer: string;
|
|
14
|
+
readonly inventory: BootstrapInventory;
|
|
15
|
+
readonly key: number;
|
|
16
|
+
};
|
|
17
|
+
export type HeldReplica = {
|
|
18
|
+
readonly record: ReplicaRecord;
|
|
19
|
+
readonly queue: readonly ChangeBatch[];
|
|
20
|
+
readonly overlaid: ReadonlySet<string>;
|
|
10
21
|
};
|
|
11
22
|
export type VisibleLayer = Layer & {
|
|
12
|
-
collection: Collection;
|
|
23
|
+
readonly collection: Collection;
|
|
13
24
|
};
|
|
14
|
-
export type
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
export type Replica = {
|
|
19
|
-
confirmed: ConfirmedLayer;
|
|
20
|
-
queue: readonly ChangeBatch[];
|
|
21
|
-
visible: VisibleLayer;
|
|
22
|
-
replay: readonly ReplayStep[];
|
|
25
|
+
export type Slice = Layer & {
|
|
26
|
+
readonly written: Readonly<Record<string, string>>;
|
|
27
|
+
readonly facts: Readonly<Record<string, SavedFacts>>;
|
|
28
|
+
readonly held: ReadonlySet<string>;
|
|
23
29
|
};
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
export declare function compositionOf(model: ModelState, typedSelection: TypedSelection | null, builtIn: ModelState, typedPaths: readonly TypedPath[]): Composition;
|
|
31
|
+
export declare function storedRecord(record: ReplicaRecord): string;
|
|
32
|
+
export declare function slicing(entries: readonly HeldEntry[], paths: Iterable<string>): Generator<number, Slice, void>;
|
|
33
|
+
export type LayerEntry = Omit<StoredEntry, 'facts'>;
|
|
34
|
+
export declare function entryAt(layer: Layer & {
|
|
35
|
+
readonly written?: Readonly<Record<string, string>>;
|
|
36
|
+
}, path: string): LayerEntry | null;
|
|
37
|
+
export declare function slicingWith(slice: Slice, set: readonly StoredEntry[], removed: readonly string[]): Generator<number, Slice, void>;
|
|
38
|
+
export declare function touchedBy(queue: readonly ChangeBatch[]): Set<string>;
|
|
39
|
+
export declare function movedBy(queue: readonly ChangeBatch[], locator: string): Set<string>;
|
|
40
|
+
export type Replayed = {
|
|
41
|
+
readonly visible: VisibleLayer;
|
|
42
|
+
readonly touched: ReadonlySet<string>;
|
|
30
43
|
};
|
|
31
|
-
export declare function
|
|
32
|
-
export declare function
|
|
33
|
-
export declare function
|
|
34
|
-
export declare function
|
|
35
|
-
export
|
|
36
|
-
|
|
44
|
+
export declare function replaying(confirmed: Slice, queue: readonly ChangeBatch[], locator: string, composition: Composition): Generator<number, Replayed, void>;
|
|
45
|
+
export declare function overlayOf(visible: VisibleLayer, touched: Iterable<string>): Generator<number, OverlayEntry[], void>;
|
|
46
|
+
export declare function holds(layer: Layer, preconditions: readonly Precondition[], composition: Composition): boolean;
|
|
47
|
+
export declare function landed(batch: ChangeBatch, confirmed: Layer, composition: Composition, current?: Readonly<Record<string, string>>): boolean;
|
|
48
|
+
export type Standing = {
|
|
49
|
+
readonly withdrawn: readonly ChangeBatch[];
|
|
50
|
+
readonly kept: readonly ChangeBatch[];
|
|
37
51
|
};
|
|
52
|
+
export declare function standing(confirmed: Slice, queue: readonly ChangeBatch[], withdrawable: (batch: ChangeBatch) => boolean, local: boolean, locator: string, composition: Composition): Generator<number, Standing, void>;
|
|
38
53
|
type Accepted = Extract<MutationResult, {
|
|
39
54
|
kind: 'accepted';
|
|
40
55
|
}>;
|
|
41
|
-
export
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
export type Standing = {
|
|
45
|
-
readonly withdrawn: readonly ChangeBatch[];
|
|
46
|
-
readonly kept: readonly ChangeBatch[];
|
|
56
|
+
export type Returned = {
|
|
57
|
+
readonly set: readonly StoredEntry[];
|
|
58
|
+
readonly removed: readonly string[];
|
|
47
59
|
};
|
|
48
|
-
export declare function
|
|
60
|
+
export declare function returnedPaths(submitted: ChangeBatch, accepted: Accepted): Set<string>;
|
|
61
|
+
export declare function returning(confirmed: Slice, submitted: ChangeBatch, accepted: Accepted, writtenAt: string, composition: Composition): Generator<number, Returned, void>;
|
|
49
62
|
export {};
|
|
50
63
|
//# sourceMappingURL=replica.d.ts.map
|
package/dist/replica.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replica.d.ts","sourceRoot":"","sources":["../src/replica.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"replica.d.ts","sourceRoot":"","sources":["../src/replica.ts"],"names":[],"mappings":"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"}
|