@agentshouse/mdruntime 0.1.0-cf96c797c5fa8 → 0.1.0-cfb2ae0107054
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/AGENTS.md +100 -119
- package/dist/adapter.d.ts +24 -2
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attempt.d.ts.map +1 -1
- package/dist/attempt.js +14 -1
- package/dist/bootstrap.d.ts +2 -2
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +28 -6
- package/dist/chat/acts.d.ts +3 -4
- package/dist/chat/acts.d.ts.map +1 -1
- package/dist/chat/acts.js +10 -10
- package/dist/chat/list.d.ts +6 -0
- package/dist/chat/list.d.ts.map +1 -1
- package/dist/chat/list.js +6 -3
- package/dist/chat/markdown.d.ts +2 -1
- package/dist/chat/markdown.d.ts.map +1 -1
- package/dist/chat/markdown.js +7 -6
- package/dist/chat/provider.d.ts.map +1 -1
- package/dist/chat/provider.js +25 -50
- package/dist/chat/ready.d.ts.map +1 -1
- package/dist/chat/ready.js +2 -2
- package/dist/chat/style.js +3 -3
- package/dist/client.d.ts +2 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +1 -1
- package/dist/connection.d.ts +1 -0
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +337 -150
- package/dist/conversation.d.ts +4 -2
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +143 -58
- package/dist/entry.d.ts +17 -0
- package/dist/entry.d.ts.map +1 -0
- package/dist/entry.js +156 -0
- package/dist/fence.d.ts +6 -0
- package/dist/fence.d.ts.map +1 -0
- package/dist/fence.js +10 -0
- package/dist/host.d.ts +3 -2
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +8 -5
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/memory.d.ts +1 -0
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +9 -0
- package/dist/outcome.d.ts +4 -0
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +1 -0
- package/dist/reach.js +1 -1
- package/dist/save.d.ts +1 -2
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +6 -5
- package/dist/store.d.ts +25 -8
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +164 -38
- package/package.json +12 -8
package/dist/memory.d.ts
CHANGED
package/dist/memory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,YAAY,EACjB,KAAK,OAAO,EAEZ,KAAK,UAAU,EAKf,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EAItB,KAAK,cAAc,EACnB,KAAK,UAAU,EAGf,KAAK,kBAAkB,EACvB,KAAK,MAAM,EAGX,KAAK,aAAa,EAIlB,KAAK,SAAS,EAGd,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AAkBtB,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG;IACxC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAC/C,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IACnD,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;IAClD,QAAQ,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC,CAAC;CAC9D,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,aAAa,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACrC,cAAc,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}
|
package/dist/memory.js
CHANGED
|
@@ -55,6 +55,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
55
55
|
const scripted = new Map();
|
|
56
56
|
const unsealed = new Map();
|
|
57
57
|
const sealed = new Set();
|
|
58
|
+
const sentTurns = new Map();
|
|
58
59
|
const historyPageSize = options.historyPageSize;
|
|
59
60
|
let held = [];
|
|
60
61
|
let expiring = [];
|
|
@@ -220,9 +221,15 @@ export function createMemoryAdapter(options = {}) {
|
|
|
220
221
|
if (outcome !== undefined)
|
|
221
222
|
return outcome;
|
|
222
223
|
if (name === 'conversation.send') {
|
|
224
|
+
const operation = typeof input.operation_id === 'string' ? input.operation_id : null;
|
|
225
|
+
const answered = operation === null ? undefined : sentTurns.get(operation);
|
|
226
|
+
if (answered !== undefined)
|
|
227
|
+
return { kind: 'action', result: { turn: answered } };
|
|
223
228
|
issued += 1;
|
|
224
229
|
const turn = `turn-${issued}`;
|
|
225
230
|
unsealed.set(turn, named);
|
|
231
|
+
if (operation !== null)
|
|
232
|
+
sentTurns.set(operation, turn);
|
|
226
233
|
return { kind: 'action', result: { turn } };
|
|
227
234
|
}
|
|
228
235
|
if (name === 'conversation.cancel') {
|
|
@@ -253,6 +260,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
253
260
|
};
|
|
254
261
|
}
|
|
255
262
|
return {
|
|
263
|
+
...(options.exhaustiveDiscovery === undefined ? {} : { exhaustiveDiscovery: true }),
|
|
256
264
|
setRooms(next) {
|
|
257
265
|
rooms = [...next];
|
|
258
266
|
retain(rooms);
|
|
@@ -340,6 +348,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
340
348
|
observer({ kind: 'closed', revoked: false });
|
|
341
349
|
});
|
|
342
350
|
},
|
|
351
|
+
published() { },
|
|
343
352
|
observe(notify) {
|
|
344
353
|
observers.add(notify);
|
|
345
354
|
queueMicrotask(() => {
|
package/dist/outcome.d.ts
CHANGED
|
@@ -20,6 +20,10 @@ export type BinaryAnswer = {
|
|
|
20
20
|
} | Refused<'rejected'> | Refused<'absent'> | Failure;
|
|
21
21
|
export declare function absentBinary(path: string): BinaryAnswer;
|
|
22
22
|
export declare function binaryAnswer(result: BinaryResult): BinaryAnswer;
|
|
23
|
+
export type Offline = {
|
|
24
|
+
readonly kind: 'offline';
|
|
25
|
+
};
|
|
26
|
+
export declare const OFFLINE: Offline;
|
|
23
27
|
export declare const UNCERTAIN: Failure;
|
|
24
28
|
export declare function undeclared(name: string): CallResult;
|
|
25
29
|
export declare function failure(result: AdapterFailure): Failure;
|
package/dist/outcome.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../src/outcome.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,aAAa,EACb,eAAe,EACf,aAAa,EACb,aAAa,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,KAAK,OAAO,CAAC,IAAI,SAAS,MAAM,IAAI,eAAe,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AAErE,MAAM,MAAM,OAAO,GACf,OAAO,CAAC,uBAAuB,CAAC,GAChC,OAAO,CAAC,uBAAuB,CAAC,GAChC,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACpD,aAAa,CAAC;AAElB,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,aAAa,CAAA;CAAE,GACvD,OAAO,CAAC,UAAU,CAAC,GACnB,OAAO,CAAC,YAAY,CAAC,GACrB,OAAO,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,GAAG,OAAO,CAAC;AAExF,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GAC9B,OAAO,CAAC,UAAU,CAAC,GACnB,OAAO,CAAC,QAAQ,CAAC,GACjB,OAAO,CAAC;AAEZ,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAEvD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAE/D;AAED,eAAO,MAAM,SAAS,EAAE,OAKvB,CAAC;AAEF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAEnD;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAiBvD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAE7D;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAIlE;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CAAA;CAAE,GAC3C;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAAG,CACvD,UAAU,GACV;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAC/D,CAAC"}
|
|
1
|
+
{"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../src/outcome.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,aAAa,EACb,eAAe,EACf,aAAa,EACb,aAAa,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,KAAK,OAAO,CAAC,IAAI,SAAS,MAAM,IAAI,eAAe,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AAErE,MAAM,MAAM,OAAO,GACf,OAAO,CAAC,uBAAuB,CAAC,GAChC,OAAO,CAAC,uBAAuB,CAAC,GAChC,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACpD,aAAa,CAAC;AAElB,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,aAAa,CAAA;CAAE,GACvD,OAAO,CAAC,UAAU,CAAC,GACnB,OAAO,CAAC,YAAY,CAAC,GACrB,OAAO,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,GAAG,OAAO,CAAC;AAExF,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GAC9B,OAAO,CAAC,UAAU,CAAC,GACnB,OAAO,CAAC,QAAQ,CAAC,GACjB,OAAO,CAAC;AAEZ,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAEvD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAE/D;AAED,MAAM,MAAM,OAAO,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAEnD,eAAO,MAAM,OAAO,EAAE,OAA6B,CAAC;AAEpD,eAAO,MAAM,SAAS,EAAE,OAKvB,CAAC;AAEF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAEnD;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAiBvD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAE7D;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAIlE;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CAAA;CAAE,GAC3C;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAAG,CACvD,UAAU,GACV;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAC/D,CAAC"}
|
package/dist/outcome.js
CHANGED
|
@@ -4,6 +4,7 @@ export function absentBinary(path) {
|
|
|
4
4
|
export function binaryAnswer(result) {
|
|
5
5
|
return result.kind === 'binary' || result.kind === 'rejected' ? result : failure(result);
|
|
6
6
|
}
|
|
7
|
+
export const OFFLINE = { kind: 'offline' };
|
|
7
8
|
export const UNCERTAIN = {
|
|
8
9
|
kind: 'transport-uncertainty',
|
|
9
10
|
code: 'transport-uncertainty',
|
package/dist/reach.js
CHANGED
|
@@ -269,7 +269,7 @@ export function narrowed(runtime, given) {
|
|
|
269
269
|
list: () => conversation().list(),
|
|
270
270
|
read: (id, options) => conversation().read(id, options),
|
|
271
271
|
create: (input) => conversation().create(input),
|
|
272
|
-
send: (id) => conversation().send(id),
|
|
272
|
+
send: (id, operation, draft) => conversation().send(id, operation, draft),
|
|
273
273
|
answer: (id, answer) => conversation().answer(id, answer),
|
|
274
274
|
interrupt: (id) => conversation().interrupt(id),
|
|
275
275
|
kill: (id) => conversation().kill(id),
|
package/dist/save.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { ProviderLimit } from './adapter.js';
|
|
2
2
|
import { type Change, type ChangeBatch, type Precondition, type WrittenBy } from './change.js';
|
|
3
3
|
import { type Composition } from './collection.js';
|
|
4
|
-
import { type Layer } from './overlay.js';
|
|
5
4
|
import type { VisibleLayer } from './replica.js';
|
|
6
5
|
import type { ChangedPart } from './room-draft.js';
|
|
7
6
|
export type SaveRefusal = {
|
|
@@ -55,6 +54,6 @@ export type Joining = {
|
|
|
55
54
|
};
|
|
56
55
|
export declare function requeued(queue: readonly ChangeBatch[], changes: readonly Change[], visible: VisibleLayer, changeable: (batch: ChangeBatch) => boolean, state: (queue: readonly ChangeBatch[]) => VisibleLayer): Requeued;
|
|
57
56
|
export declare function joined(queue: readonly ChangeBatch[], owner: ChangeBatch, extra: ChangeBatch): Joining;
|
|
58
|
-
export declare function limitedIn(queue: readonly ChangeBatch[], batch: ChangeBatch, limits: readonly ProviderLimit[], state: (queue: readonly ChangeBatch[]) =>
|
|
57
|
+
export declare function limitedIn(queue: readonly ChangeBatch[], batch: ChangeBatch, limits: readonly ProviderLimit[], state: (queue: readonly ChangeBatch[]) => VisibleLayer): SaveRefusal | null;
|
|
59
58
|
export declare function buildBatch(input: SaveInput): BatchResult;
|
|
60
59
|
//# sourceMappingURL=save.d.ts.map
|
package/dist/save.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../src/save.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAML,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../src/save.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAML,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,OAAO,cAAc,EAAE,eAAe,CAAC;IACnD,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC;AAsL9C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAG,WAAW,CAOxF;AAuUD,MAAM,MAAM,QAAQ,GAChB;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IAC9B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC;IACnD,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC7B,GACD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC;AAM9C,MAAM,MAAM,OAAO,GACf;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC;AAiM9C,wBAAgB,QAAQ,CACtB,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,EAC3C,KAAK,EAAE,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,KAAK,YAAY,GACrD,QAAQ,CA+DV;AAUD,wBAAgB,MAAM,CACpB,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,WAAW,GACjB,OAAO,CAiCT;AAED,wBAAgB,SAAS,CACvB,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,KAAK,EAAE,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,KAAK,YAAY,GACrD,WAAW,GAAG,IAAI,CASpB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CAsFxD"}
|
package/dist/save.js
CHANGED
|
@@ -364,8 +364,8 @@ function preconditionsOf(changes, visible, bases) {
|
|
|
364
364
|
function depth(path) {
|
|
365
365
|
return path.split('/').length;
|
|
366
366
|
}
|
|
367
|
-
function exceeded(limits, changes, resulting) {
|
|
368
|
-
const written =
|
|
367
|
+
function exceeded(limits, changes, effective, resulting) {
|
|
368
|
+
const written = effective.map((change) => (change.kind === 'move' ? change.to : change.path));
|
|
369
369
|
const created = changes
|
|
370
370
|
.filter((change) => change.kind === 'create' || change.kind === 'move' || change.kind === 'binary')
|
|
371
371
|
.map((change) => (change.kind === 'move' ? change.to : change.path));
|
|
@@ -381,7 +381,7 @@ function exceeded(limits, changes, resulting) {
|
|
|
381
381
|
return refuse('provider-limit', undefined, limit.name);
|
|
382
382
|
}
|
|
383
383
|
if (limit.name === 'document-size') {
|
|
384
|
-
const large = written.find((path) => (resulting.documents[path] ?? '').
|
|
384
|
+
const large = written.find((path) => new TextEncoder().encode(resulting.documents[path] ?? '').byteLength > value);
|
|
385
385
|
if (large !== undefined)
|
|
386
386
|
return refuse('provider-limit', large, limit.name);
|
|
387
387
|
}
|
|
@@ -718,7 +718,8 @@ export function joined(queue, owner, extra) {
|
|
|
718
718
|
return { kind: 'joined', batch, queue: queue.map((item) => (item === owner ? batch : item)) };
|
|
719
719
|
}
|
|
720
720
|
export function limitedIn(queue, batch, limits, state) {
|
|
721
|
-
const
|
|
721
|
+
const at = queue.indexOf(batch);
|
|
722
|
+
const limited = exceeded(limits, batch.changes, providerRewritten(batch, state(queue.slice(0, at))).changes, state(queue.slice(0, at + 1)));
|
|
722
723
|
return limited?.kind === 'refused' ? limited.refusal : null;
|
|
723
724
|
}
|
|
724
725
|
export function buildBatch(input) {
|
|
@@ -772,7 +773,7 @@ export function buildBatch(input) {
|
|
|
772
773
|
},
|
|
773
774
|
};
|
|
774
775
|
}
|
|
775
|
-
const limited = exceeded(input.providerLimits, changes, resulting);
|
|
776
|
+
const limited = exceeded(input.providerLimits, changes, predicted.changes, resulting);
|
|
776
777
|
if (limited !== null)
|
|
777
778
|
return limited;
|
|
778
779
|
const validated = typedPaths
|
package/dist/store.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { ModelState } from './model.js';
|
|
2
2
|
import type { Capability, HeadChange, Member, OperationScopes, ProviderLimit, ReplicaAdmission, TypedSelection } from './adapter.js';
|
|
3
|
-
import type { AcceptedMessage } from './adapter.js';
|
|
3
|
+
import type { AcceptedMessage, KeptReceipt } from './adapter.js';
|
|
4
4
|
import type { ChangeBatch } from './change.js';
|
|
5
5
|
import { type HeldBinary } from './overlay.js';
|
|
6
6
|
import type { ChatDraftFile } from './file.js';
|
|
7
7
|
import type { Submission } from './outcome.js';
|
|
8
8
|
import type { RoomDraftRecord, SavedDraft } from './room-draft.js';
|
|
9
|
-
export declare const STORE_SCHEMA =
|
|
10
|
-
export declare const AUTHORED_SCHEMA =
|
|
9
|
+
export declare const STORE_SCHEMA = 24;
|
|
10
|
+
export declare const AUTHORED_SCHEMA = 2;
|
|
11
11
|
export type ReplicaRecord = {
|
|
12
12
|
locator: string;
|
|
13
13
|
name: string;
|
|
@@ -66,14 +66,19 @@ export type ConversationWrite = {
|
|
|
66
66
|
conversation: string;
|
|
67
67
|
messages: readonly AcceptedMessage[];
|
|
68
68
|
read?: string | null;
|
|
69
|
-
|
|
69
|
+
};
|
|
70
|
+
export type ChatSubmission = {
|
|
71
|
+
readonly operation: string;
|
|
72
|
+
readonly text: string;
|
|
73
|
+
readonly files: readonly ChatDraftFile[];
|
|
74
|
+
readonly turn: string | null;
|
|
70
75
|
};
|
|
71
76
|
export type ChatDraftRecord = {
|
|
72
77
|
conversation: string;
|
|
73
78
|
text: string;
|
|
74
79
|
files: readonly ChatDraftFile[];
|
|
75
|
-
turn: string | null;
|
|
76
80
|
revision: string;
|
|
81
|
+
submitted?: readonly ChatSubmission[];
|
|
77
82
|
};
|
|
78
83
|
export type RecordWrite = {
|
|
79
84
|
next: ReplicaRecord;
|
|
@@ -114,15 +119,27 @@ export type RuntimeStore = {
|
|
|
114
119
|
dropChatDraft(conversation: string): Promise<void>;
|
|
115
120
|
keepRoomDraft(record: RoomDraftRecord): Promise<void>;
|
|
116
121
|
discardRoomDraft(locator: string, path: string): Promise<void>;
|
|
117
|
-
|
|
122
|
+
fences(): Promise<readonly string[]>;
|
|
123
|
+
erase(locators: readonly string[]): Promise<void>;
|
|
118
124
|
transfers(): Promise<readonly TransferRecord[]>;
|
|
119
125
|
staged(record: TransferRecord): Promise<StagedLayer>;
|
|
120
126
|
stage(record: TransferRecord, page: StagedLayer): Promise<void>;
|
|
121
127
|
abandon(locator: string): Promise<void>;
|
|
128
|
+
receivedHeads(): Promise<readonly KeptReceipt[]>;
|
|
129
|
+
receivedParts(key: string, count: number): Promise<readonly unknown[]>;
|
|
130
|
+
keepReceived(key: string, head: unknown, part?: {
|
|
131
|
+
index: number;
|
|
132
|
+
value: unknown;
|
|
133
|
+
}): Promise<void>;
|
|
134
|
+
dropReceived(keys: readonly string[]): Promise<void>;
|
|
122
135
|
generation(): Promise<string | null>;
|
|
123
136
|
rememberGeneration(value: string): Promise<void>;
|
|
124
137
|
close(): void;
|
|
125
138
|
};
|
|
126
|
-
export declare function
|
|
127
|
-
export declare function
|
|
139
|
+
export declare function authoredHolder(): Promise<string | null>;
|
|
140
|
+
export declare function authoredBy(holder: string): Promise<boolean>;
|
|
141
|
+
export declare function authoredBinding(): Promise<string | null>;
|
|
142
|
+
export declare function bindAuthored(binding: string): Promise<void>;
|
|
143
|
+
export declare function removeRuntimeStore(holder?: string): Promise<boolean>;
|
|
144
|
+
export declare function openRuntimeStore(fenced: (locator: string) => boolean): Promise<RuntimeStore>;
|
|
128
145
|
//# sourceMappingURL=store.d.ts.map
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,MAAM,EACN,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,cAAc,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/store.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { sameBinary, sameChange } from './overlay.js';
|
|
2
2
|
const DATABASE = 'mdruntime';
|
|
3
3
|
const AUTHORED = 'mdruntime-authored';
|
|
4
|
+
const FENCES = 'fences';
|
|
4
5
|
const ROOMS = 'rooms';
|
|
5
6
|
const DOCUMENTS = 'documents';
|
|
6
7
|
const BINARY_FILES = 'binaryFiles';
|
|
7
8
|
const TRANSFERS = 'transfers';
|
|
9
|
+
const RECEIVED = 'received';
|
|
10
|
+
const RECEIVED_PARTS = 'receivedParts';
|
|
8
11
|
const PENDING_CHANGES = 'pendingChanges';
|
|
9
12
|
const DECLARATIONS = 'declarations';
|
|
10
13
|
const ROOM_DRAFTS = 'roomDrafts';
|
|
@@ -17,14 +20,30 @@ const FACTS = 'facts';
|
|
|
17
20
|
const CURRENT = 'current';
|
|
18
21
|
const MEMBER = 'member';
|
|
19
22
|
const GENERATION = 'generation';
|
|
20
|
-
|
|
21
|
-
|
|
23
|
+
const HOLDER = 'holder';
|
|
24
|
+
const BINDING = 'binding';
|
|
25
|
+
export const STORE_SCHEMA = 24;
|
|
26
|
+
const REPLICA_SHAPE = 23;
|
|
27
|
+
export const AUTHORED_SCHEMA = 2;
|
|
22
28
|
const AUTHORED_STORES = [
|
|
23
29
|
[QUEUES, { keyPath: 'locator' }],
|
|
24
30
|
[PENDING_CHANGES, { keyPath: ['locator', 'id'] }],
|
|
25
31
|
[ROOM_DRAFTS, { keyPath: ['locator', 'path'] }],
|
|
26
32
|
[CHAT_DRAFTS, { keyPath: 'conversation' }],
|
|
27
33
|
[FACTS, undefined],
|
|
34
|
+
[FENCES, { keyPath: 'locator' }],
|
|
35
|
+
];
|
|
36
|
+
const REPLICA_STORES = [
|
|
37
|
+
[ROOMS, { keyPath: 'locator' }],
|
|
38
|
+
[DOCUMENTS, { keyPath: ['locator', 'transfer', 'path'] }],
|
|
39
|
+
[BINARY_FILES, { keyPath: ['locator', 'transfer', 'path'] }],
|
|
40
|
+
[TRANSFERS, { keyPath: 'locator' }],
|
|
41
|
+
[RECEIVED, { keyPath: 'key' }],
|
|
42
|
+
[RECEIVED_PARTS, { keyPath: ['key', 'index'] }],
|
|
43
|
+
[DECLARATIONS, undefined],
|
|
44
|
+
[PRESENTATION, { keyPath: 'app' }],
|
|
45
|
+
[CONVERSATIONS, { keyPath: 'conversation' }],
|
|
46
|
+
[MESSAGES, { keyPath: ['conversation', 'identity'] }],
|
|
28
47
|
];
|
|
29
48
|
const READ_BATCH = 256;
|
|
30
49
|
function settled(request) {
|
|
@@ -182,26 +201,83 @@ function removeDatabase(name) {
|
|
|
182
201
|
removal.onerror = () => reject(removal.error);
|
|
183
202
|
});
|
|
184
203
|
}
|
|
185
|
-
export async function
|
|
186
|
-
await
|
|
204
|
+
export async function authoredHolder() {
|
|
205
|
+
const authored = await openAuthored();
|
|
206
|
+
try {
|
|
207
|
+
const transaction = authored.transaction(FACTS, 'readonly');
|
|
208
|
+
const held = transaction.objectStore(FACTS).get(HOLDER);
|
|
209
|
+
await completed(transaction);
|
|
210
|
+
return typeof held.result === 'string' ? held.result : null;
|
|
211
|
+
}
|
|
212
|
+
finally {
|
|
213
|
+
authored.close();
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
export async function authoredBy(holder) {
|
|
217
|
+
const authored = await openAuthored();
|
|
218
|
+
try {
|
|
219
|
+
const transaction = authored.transaction(FACTS, 'readwrite');
|
|
220
|
+
const facts = transaction.objectStore(FACTS);
|
|
221
|
+
const held = facts.get(HOLDER);
|
|
222
|
+
let owned = true;
|
|
223
|
+
held.onsuccess = () => {
|
|
224
|
+
if (held.result === undefined)
|
|
225
|
+
facts.put(holder, HOLDER);
|
|
226
|
+
else
|
|
227
|
+
owned = held.result === holder;
|
|
228
|
+
};
|
|
229
|
+
await completed(transaction);
|
|
230
|
+
return owned;
|
|
231
|
+
}
|
|
232
|
+
finally {
|
|
233
|
+
authored.close();
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
export async function authoredBinding() {
|
|
237
|
+
const authored = await openAuthored();
|
|
238
|
+
try {
|
|
239
|
+
const transaction = authored.transaction(FACTS, 'readonly');
|
|
240
|
+
const held = transaction.objectStore(FACTS).get(BINDING);
|
|
241
|
+
await completed(transaction);
|
|
242
|
+
return typeof held.result === 'string' ? held.result : null;
|
|
243
|
+
}
|
|
244
|
+
finally {
|
|
245
|
+
authored.close();
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
export async function bindAuthored(binding) {
|
|
249
|
+
const authored = await openAuthored();
|
|
250
|
+
try {
|
|
251
|
+
const transaction = authored.transaction(FACTS, 'readwrite');
|
|
252
|
+
transaction.objectStore(FACTS).put(binding, BINDING);
|
|
253
|
+
await completed(transaction);
|
|
254
|
+
}
|
|
255
|
+
finally {
|
|
256
|
+
authored.close();
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
export async function removeRuntimeStore(holder) {
|
|
260
|
+
await removeDatabase(DATABASE);
|
|
261
|
+
if (holder !== undefined && (await authoredBy(holder)))
|
|
262
|
+
return true;
|
|
263
|
+
await removeDatabase(AUTHORED);
|
|
264
|
+
return false;
|
|
187
265
|
}
|
|
188
266
|
function openReplica() {
|
|
189
267
|
const opening = indexedDB.open(DATABASE, STORE_SCHEMA);
|
|
190
|
-
opening.onupgradeneeded = () => {
|
|
268
|
+
opening.onupgradeneeded = (event) => {
|
|
191
269
|
const database = opening.result;
|
|
192
|
-
|
|
193
|
-
database.
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
});
|
|
204
|
-
messages.createIndex('conversation', 'conversation');
|
|
270
|
+
if (event.oldVersion < REPLICA_SHAPE) {
|
|
271
|
+
for (const name of [...database.objectStoreNames])
|
|
272
|
+
database.deleteObjectStore(name);
|
|
273
|
+
}
|
|
274
|
+
for (const [name, parameters] of REPLICA_STORES) {
|
|
275
|
+
if (database.objectStoreNames.contains(name))
|
|
276
|
+
continue;
|
|
277
|
+
const store = database.createObjectStore(name, parameters);
|
|
278
|
+
if (name === MESSAGES)
|
|
279
|
+
store.createIndex('conversation', 'conversation');
|
|
280
|
+
}
|
|
205
281
|
};
|
|
206
282
|
return settled(opening);
|
|
207
283
|
}
|
|
@@ -216,7 +292,7 @@ function openAuthored() {
|
|
|
216
292
|
};
|
|
217
293
|
return settled(opening);
|
|
218
294
|
}
|
|
219
|
-
export async function openRuntimeStore() {
|
|
295
|
+
export async function openRuntimeStore(fenced) {
|
|
220
296
|
const authored = await openAuthored();
|
|
221
297
|
const database = await openReplica().catch((error) => {
|
|
222
298
|
authored.close();
|
|
@@ -227,12 +303,14 @@ export async function openRuntimeStore() {
|
|
|
227
303
|
const transaction = database.transaction([ROOMS, DOCUMENTS, BINARY_FILES], 'readonly');
|
|
228
304
|
const rooms = await settled(transaction.objectStore(ROOMS).getAll());
|
|
229
305
|
const records = [];
|
|
230
|
-
for (const room of rooms) {
|
|
306
|
+
for (const room of rooms.filter((held) => !fenced(held.locator))) {
|
|
231
307
|
records.push({ ...room, ...(await readLayer(transaction, room.locator, room.transfer)) });
|
|
232
308
|
}
|
|
233
309
|
return records;
|
|
234
310
|
},
|
|
235
311
|
async keepAuthored({ locator, queue, saved, roomDrafts, consumedRoomDrafts }) {
|
|
312
|
+
if (fenced(locator))
|
|
313
|
+
return;
|
|
236
314
|
const transaction = authored.transaction([QUEUES, PENDING_CHANGES, ROOM_DRAFTS], 'readwrite');
|
|
237
315
|
const order = transaction.objectStore(QUEUES);
|
|
238
316
|
const pending = transaction.objectStore(PENDING_CHANGES);
|
|
@@ -269,7 +347,7 @@ export async function openRuntimeStore() {
|
|
|
269
347
|
await completed(transaction);
|
|
270
348
|
},
|
|
271
349
|
async write({ next, previous, stored }) {
|
|
272
|
-
if (next === previous)
|
|
350
|
+
if (next === previous || fenced(next.locator))
|
|
273
351
|
return;
|
|
274
352
|
const transaction = database.transaction([ROOMS, DOCUMENTS, BINARY_FILES, TRANSFERS], 'readwrite');
|
|
275
353
|
transaction.objectStore(ROOMS).put(roomRecord(next));
|
|
@@ -289,6 +367,8 @@ export async function openRuntimeStore() {
|
|
|
289
367
|
const rooms = transaction.objectStore(ROOMS);
|
|
290
368
|
const revoked = { status: 'unavailable', reason: 'revoked' };
|
|
291
369
|
for (const record of records) {
|
|
370
|
+
if (fenced(record.locator))
|
|
371
|
+
continue;
|
|
292
372
|
rooms.put(roomRecord({ ...record, model: revoked, selectionModel: revoked }));
|
|
293
373
|
}
|
|
294
374
|
await completed(transaction);
|
|
@@ -329,7 +409,9 @@ export async function openRuntimeStore() {
|
|
|
329
409
|
settled(transaction.objectStore(PENDING_CHANGES).getAll()),
|
|
330
410
|
]);
|
|
331
411
|
const byId = new Map(pending.map((record) => [`${record.locator}\0${record.id}`, record]));
|
|
332
|
-
return queues
|
|
412
|
+
return queues
|
|
413
|
+
.filter((queue) => !fenced(queue.locator))
|
|
414
|
+
.map((queue) => ({
|
|
333
415
|
locator: queue.locator,
|
|
334
416
|
pending: queue.order.map((id) => {
|
|
335
417
|
const record = byId.get(`${queue.locator}\0${id}`);
|
|
@@ -340,18 +422,22 @@ export async function openRuntimeStore() {
|
|
|
340
422
|
}),
|
|
341
423
|
}));
|
|
342
424
|
},
|
|
343
|
-
submit(locator, id, submission, lost) {
|
|
344
|
-
|
|
425
|
+
async submit(locator, id, submission, lost) {
|
|
426
|
+
if (!fenced(locator))
|
|
427
|
+
await amendPending(authored, locator, id, { submission, lost });
|
|
345
428
|
},
|
|
346
|
-
accept(locator, id, roomVersion) {
|
|
347
|
-
|
|
429
|
+
async accept(locator, id, roomVersion) {
|
|
430
|
+
if (!fenced(locator))
|
|
431
|
+
await amendPending(authored, locator, id, { accepted: roomVersion });
|
|
348
432
|
},
|
|
349
|
-
keepUpload(locator, id, upload) {
|
|
350
|
-
|
|
433
|
+
async keepUpload(locator, id, upload) {
|
|
434
|
+
if (!fenced(locator))
|
|
435
|
+
await amendPending(authored, locator, id, { upload });
|
|
351
436
|
},
|
|
352
437
|
async roomDrafts() {
|
|
353
438
|
const transaction = authored.transaction(ROOM_DRAFTS, 'readonly');
|
|
354
|
-
|
|
439
|
+
const held = await settled(transaction.objectStore(ROOM_DRAFTS).getAll());
|
|
440
|
+
return held.filter((record) => !fenced(record.locator));
|
|
355
441
|
},
|
|
356
442
|
async presentation() {
|
|
357
443
|
const transaction = database.transaction(PRESENTATION, 'readonly');
|
|
@@ -379,12 +465,7 @@ export async function openRuntimeStore() {
|
|
|
379
465
|
}
|
|
380
466
|
return [...held.values()];
|
|
381
467
|
},
|
|
382
|
-
async keepMessages({ conversation, messages, read
|
|
383
|
-
if (sealed === true) {
|
|
384
|
-
const sealing = authored.transaction(CHAT_DRAFTS, 'readwrite');
|
|
385
|
-
sealing.objectStore(CHAT_DRAFTS).delete(conversation);
|
|
386
|
-
await completed(sealing);
|
|
387
|
-
}
|
|
468
|
+
async keepMessages({ conversation, messages, read }) {
|
|
388
469
|
const transaction = database.transaction([CONVERSATIONS, MESSAGES], 'readwrite');
|
|
389
470
|
const stored = transaction.objectStore(MESSAGES);
|
|
390
471
|
for (const message of messages) {
|
|
@@ -430,18 +511,28 @@ export async function openRuntimeStore() {
|
|
|
430
511
|
await completed(transaction);
|
|
431
512
|
},
|
|
432
513
|
async keepRoomDraft(record) {
|
|
514
|
+
if (fenced(record.locator))
|
|
515
|
+
return;
|
|
433
516
|
const transaction = authored.transaction(ROOM_DRAFTS, 'readwrite');
|
|
434
517
|
transaction.objectStore(ROOM_DRAFTS).put(record);
|
|
435
518
|
await completed(transaction);
|
|
436
519
|
},
|
|
437
520
|
async discardRoomDraft(locator, path) {
|
|
521
|
+
if (fenced(locator))
|
|
522
|
+
return;
|
|
438
523
|
const transaction = authored.transaction(ROOM_DRAFTS, 'readwrite');
|
|
439
524
|
transaction.objectStore(ROOM_DRAFTS).delete([locator, path]);
|
|
440
525
|
await completed(transaction);
|
|
441
526
|
},
|
|
442
|
-
async
|
|
443
|
-
const
|
|
527
|
+
async fences() {
|
|
528
|
+
const transaction = authored.transaction(FENCES, 'readonly');
|
|
529
|
+
const held = await settled(transaction.objectStore(FENCES).getAll());
|
|
530
|
+
return held.map((fence) => fence.locator);
|
|
531
|
+
},
|
|
532
|
+
async erase(locators) {
|
|
533
|
+
const work = authored.transaction([FENCES, QUEUES, PENDING_CHANGES, ROOM_DRAFTS], 'readwrite');
|
|
444
534
|
for (const locator of locators) {
|
|
535
|
+
work.objectStore(FENCES).put({ locator });
|
|
445
536
|
work.objectStore(QUEUES).delete(locator);
|
|
446
537
|
for (const name of [PENDING_CHANGES, ROOM_DRAFTS]) {
|
|
447
538
|
removeRoomEntries(work.objectStore(name), locator);
|
|
@@ -456,22 +547,31 @@ export async function openRuntimeStore() {
|
|
|
456
547
|
transaction.objectStore(BINARY_FILES).delete(underRoom(locator));
|
|
457
548
|
}
|
|
458
549
|
await completed(transaction);
|
|
550
|
+
const fences = authored.transaction(FENCES, 'readwrite');
|
|
551
|
+
for (const locator of locators)
|
|
552
|
+
fences.objectStore(FENCES).delete(locator);
|
|
553
|
+
await completed(fences);
|
|
459
554
|
},
|
|
460
555
|
async transfers() {
|
|
461
556
|
const transaction = database.transaction(TRANSFERS, 'readonly');
|
|
462
|
-
|
|
557
|
+
const held = await settled(transaction.objectStore(TRANSFERS).getAll());
|
|
558
|
+
return held.filter((record) => !fenced(record.locator));
|
|
463
559
|
},
|
|
464
560
|
staged(record) {
|
|
465
561
|
const transaction = database.transaction([DOCUMENTS, BINARY_FILES], 'readonly');
|
|
466
562
|
return readLayer(transaction, record.locator, record.transfer);
|
|
467
563
|
},
|
|
468
564
|
async stage(record, page) {
|
|
565
|
+
if (fenced(record.locator))
|
|
566
|
+
return;
|
|
469
567
|
const transaction = database.transaction([TRANSFERS, DOCUMENTS, BINARY_FILES], 'readwrite');
|
|
470
568
|
writeLayer(transaction, record.locator, record.transfer, page, null);
|
|
471
569
|
transaction.objectStore(TRANSFERS).put(record);
|
|
472
570
|
await completed(transaction);
|
|
473
571
|
},
|
|
474
572
|
async abandon(locator) {
|
|
573
|
+
if (fenced(locator))
|
|
574
|
+
return;
|
|
475
575
|
const transaction = database.transaction([TRANSFERS, DOCUMENTS, BINARY_FILES], 'readwrite');
|
|
476
576
|
const transfers = transaction.objectStore(TRANSFERS);
|
|
477
577
|
const held = transfers.get(locator);
|
|
@@ -486,6 +586,32 @@ export async function openRuntimeStore() {
|
|
|
486
586
|
};
|
|
487
587
|
await completed(transaction);
|
|
488
588
|
},
|
|
589
|
+
async receivedHeads() {
|
|
590
|
+
const transaction = database.transaction(RECEIVED, 'readonly');
|
|
591
|
+
return settled(transaction.objectStore(RECEIVED).getAll());
|
|
592
|
+
},
|
|
593
|
+
async receivedParts(key, count) {
|
|
594
|
+
const transaction = database.transaction(RECEIVED_PARTS, 'readonly');
|
|
595
|
+
const kept = await settled(transaction
|
|
596
|
+
.objectStore(RECEIVED_PARTS)
|
|
597
|
+
.getAll(IDBKeyRange.bound([key, 0], [key, count], false, true)));
|
|
598
|
+
return kept.map((part) => part.value);
|
|
599
|
+
},
|
|
600
|
+
async keepReceived(key, head, part) {
|
|
601
|
+
const transaction = database.transaction([RECEIVED, RECEIVED_PARTS], 'readwrite');
|
|
602
|
+
transaction.objectStore(RECEIVED).put({ key, head });
|
|
603
|
+
if (part !== undefined)
|
|
604
|
+
transaction.objectStore(RECEIVED_PARTS).put({ key, ...part });
|
|
605
|
+
await completed(transaction);
|
|
606
|
+
},
|
|
607
|
+
async dropReceived(keys) {
|
|
608
|
+
const transaction = database.transaction([RECEIVED, RECEIVED_PARTS], 'readwrite');
|
|
609
|
+
for (const key of keys) {
|
|
610
|
+
transaction.objectStore(RECEIVED).delete(key);
|
|
611
|
+
transaction.objectStore(RECEIVED_PARTS).delete(IDBKeyRange.bound([key], [key, []]));
|
|
612
|
+
}
|
|
613
|
+
await completed(transaction);
|
|
614
|
+
},
|
|
489
615
|
async generation() {
|
|
490
616
|
const transaction = authored.transaction(FACTS, 'readonly');
|
|
491
617
|
const held = await settled(transaction.objectStore(FACTS).get(GENERATION));
|