@agentshouse/mdruntime 0.1.0-cd50a4607cb7d → 0.1.0-cd76160689224
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 +118 -115
- package/dist/acquisition.d.ts +14 -0
- package/dist/acquisition.d.ts.map +1 -0
- package/dist/acquisition.js +24 -0
- package/dist/adapter.d.ts +25 -7
- package/dist/adapter.d.ts.map +1 -1
- package/dist/bootstrap.d.ts +2 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +4 -0
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +2 -1
- package/dist/chat/kit.d.ts +2 -1
- package/dist/chat/kit.d.ts.map +1 -1
- package/dist/chat/kit.js +3 -3
- package/dist/chat/list.d.ts +2 -1
- package/dist/chat/list.d.ts.map +1 -1
- package/dist/chat/list.js +4 -3
- package/dist/chat/messages.d.ts +1 -0
- package/dist/chat/messages.d.ts.map +1 -1
- package/dist/chat/messages.js +4 -0
- package/dist/chat/provider.d.ts +1 -1
- package/dist/chat/provider.d.ts.map +1 -1
- package/dist/chat/provider.js +26 -17
- package/dist/chat/ready.d.ts +1 -0
- package/dist/chat/ready.d.ts.map +1 -1
- package/dist/chat/ready.js +2 -2
- package/dist/client.d.ts +7 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +12 -2
- package/dist/connection.d.ts +18 -3
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +696 -79
- package/dist/conversation.d.ts +3 -0
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +115 -17
- package/dist/durability.d.ts +7 -1
- package/dist/durability.d.ts.map +1 -1
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +1 -1
- package/dist/host.d.ts +15 -2
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +83 -8
- package/dist/index.d.ts +7 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/memory.d.ts +8 -2
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +26 -6
- package/dist/model.d.ts +3 -2
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +1 -1
- package/dist/outcome.d.ts +8 -2
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +3 -0
- package/dist/overlay.d.ts +1 -0
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +27 -3
- package/dist/query.d.ts +8 -1
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +8 -2
- package/dist/reach.d.ts +6 -3
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +17 -2
- package/dist/react.d.ts +4 -1
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +6 -4
- package/dist/read-side.d.ts.map +1 -1
- package/dist/read-side.js +3 -0
- package/dist/readiness.d.ts +53 -0
- package/dist/readiness.d.ts.map +1 -0
- package/dist/readiness.js +33 -0
- package/dist/reads.d.ts +11 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +98 -0
- package/dist/refresh.d.ts +4 -4
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +6 -0
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +11 -2
- package/dist/room-draft.d.ts +13 -1
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +2 -2
- package/dist/rows.d.ts +2 -1
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +3 -1
- package/dist/search.d.ts +14 -6
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +33 -12
- package/dist/seed.d.ts +16 -0
- package/dist/seed.d.ts.map +1 -0
- package/dist/seed.js +61 -0
- package/dist/store.d.ts +19 -3
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +59 -14
- package/dist/wire.d.ts +140 -32
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +49 -31
- package/package.json +2 -2
package/dist/search.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ProviderRefusal } from './adapter.js';
|
|
1
2
|
import type { ChangeSet } from './change-set.js';
|
|
2
3
|
import { type CoveredRoom, type Filter, type PendingRoom } from './query.js';
|
|
3
4
|
import type { Open } from './open.js';
|
|
@@ -5,6 +6,7 @@ export type DocumentPart = Open<'fields' | 'sections' | 'preamble' | 'path'>;
|
|
|
5
6
|
export type SearchRequest = {
|
|
6
7
|
text: string;
|
|
7
8
|
documents?: Filter;
|
|
9
|
+
collection?: true;
|
|
8
10
|
conversations?: readonly string[];
|
|
9
11
|
limit?: number;
|
|
10
12
|
};
|
|
@@ -29,18 +31,23 @@ export type SearchCoverage = {
|
|
|
29
31
|
};
|
|
30
32
|
export type PendingConversation = {
|
|
31
33
|
conversation: string;
|
|
32
|
-
awaits: 'index'
|
|
33
|
-
};
|
|
34
|
-
export type SearchPending = {
|
|
35
|
-
pending: readonly (PendingRoom | PendingConversation)[];
|
|
34
|
+
awaits: Open<'index'>;
|
|
36
35
|
};
|
|
37
36
|
export type SearchHits = {
|
|
38
37
|
documents: readonly DocumentHit[];
|
|
39
38
|
messages: readonly MessageHit[];
|
|
40
39
|
};
|
|
40
|
+
export type SearchPending = SearchHits & {
|
|
41
|
+
pending: readonly (PendingRoom | PendingConversation)[];
|
|
42
|
+
coverage: SearchCoverage;
|
|
43
|
+
};
|
|
44
|
+
export type SearchUndeclared = ProviderRefusal & {
|
|
45
|
+
kind: 'undeclared';
|
|
46
|
+
};
|
|
41
47
|
export type SearchResult = (SearchHits & {
|
|
42
48
|
coverage: SearchCoverage;
|
|
43
|
-
}) | SearchPending;
|
|
49
|
+
}) | SearchPending | SearchUndeclared;
|
|
50
|
+
export declare function undeclaredSearch(): SearchUndeclared;
|
|
44
51
|
export type SearchedDocument = {
|
|
45
52
|
room: string;
|
|
46
53
|
path: string;
|
|
@@ -61,6 +68,7 @@ export type SearchSource = {
|
|
|
61
68
|
export type SearchPlan = {
|
|
62
69
|
text: string;
|
|
63
70
|
documents: unknown;
|
|
71
|
+
collection: boolean;
|
|
64
72
|
conversations: readonly string[] | null;
|
|
65
73
|
limit: number | null;
|
|
66
74
|
};
|
|
@@ -77,7 +85,7 @@ export type SearchIndex = {
|
|
|
77
85
|
search(plan: SearchPlan, documents: readonly {
|
|
78
86
|
room: string;
|
|
79
87
|
path: string;
|
|
80
|
-
}[] | null, conversations: readonly string[]): SearchHits;
|
|
88
|
+
}[] | null, conversations: readonly string[], rooms: ReadonlySet<string> | null, selections: ReadonlyMap<string, readonly string[]> | null): SearchHits;
|
|
81
89
|
};
|
|
82
90
|
export declare function searchPlanOf(input: unknown): SearchPlan;
|
|
83
91
|
export declare function createSearchIndex(source: SearchSource): SearchIndex;
|
package/dist/search.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
|
package/dist/search.js
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import MiniSearch from 'minisearch';
|
|
2
2
|
import { indexGeneration } from './identity.js';
|
|
3
|
-
import { invalid, known, limitOf, plain, } from './query.js';
|
|
3
|
+
import { flag, invalid, known, limitOf, plain, } from './query.js';
|
|
4
|
+
import { beneath } from './paths.js';
|
|
4
5
|
import { inUnits, ROW_WEIGHT } from './turn.js';
|
|
6
|
+
export function undeclaredSearch() {
|
|
7
|
+
return {
|
|
8
|
+
kind: 'undeclared',
|
|
9
|
+
code: 'search-undeclared',
|
|
10
|
+
fields: { name: 'local_search' },
|
|
11
|
+
retryable: false,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
5
14
|
const FIELDS = ['fields', 'sections', 'preamble', 'path', 'text'];
|
|
6
15
|
function documentId(room, path) {
|
|
7
16
|
return JSON.stringify(['document', room, path]);
|
|
@@ -21,7 +30,7 @@ function scalars(value) {
|
|
|
21
30
|
export function searchPlanOf(input) {
|
|
22
31
|
if (!plain(input))
|
|
23
32
|
invalid('search', 'expects a search object');
|
|
24
|
-
known(input, ['text', 'documents', 'conversations', 'limit'], '');
|
|
33
|
+
known(input, ['text', 'documents', 'collection', 'conversations', 'limit'], '');
|
|
25
34
|
if (typeof input.text !== 'string')
|
|
26
35
|
invalid('text', 'expects text');
|
|
27
36
|
const conversations = input.conversations;
|
|
@@ -32,10 +41,18 @@ export function searchPlanOf(input) {
|
|
|
32
41
|
return {
|
|
33
42
|
text: input.text,
|
|
34
43
|
documents: input.documents,
|
|
44
|
+
collection: flag(input.collection, 'collection'),
|
|
35
45
|
conversations: conversations ?? null,
|
|
36
46
|
limit: limitOf(input.limit),
|
|
37
47
|
};
|
|
38
48
|
}
|
|
49
|
+
function byRoomThenPath(left, right) {
|
|
50
|
+
if (left.room !== right.room)
|
|
51
|
+
return left.room < right.room ? -1 : 1;
|
|
52
|
+
if (left.path !== right.path)
|
|
53
|
+
return left.path < right.path ? -1 : 1;
|
|
54
|
+
return 0;
|
|
55
|
+
}
|
|
39
56
|
export function createSearchIndex(source) {
|
|
40
57
|
const generation = indexGeneration();
|
|
41
58
|
const index = new MiniSearch({ fields: FIELDS });
|
|
@@ -49,9 +66,7 @@ export function createSearchIndex(source) {
|
|
|
49
66
|
let changes = 0;
|
|
50
67
|
function addDocument(document) {
|
|
51
68
|
const id = documentId(document.room, document.path);
|
|
52
|
-
|
|
53
|
-
index.discard(id);
|
|
54
|
-
documents.set(id, { room: document.room, path: document.path, type: document.type });
|
|
69
|
+
discard(id, documents);
|
|
55
70
|
index.add({
|
|
56
71
|
id,
|
|
57
72
|
fields: scalars(document.fields).join('\n'),
|
|
@@ -61,13 +76,13 @@ export function createSearchIndex(source) {
|
|
|
61
76
|
preamble: document.preamble,
|
|
62
77
|
path: document.path,
|
|
63
78
|
});
|
|
79
|
+
documents.set(id, { room: document.room, path: document.path, type: document.type });
|
|
64
80
|
}
|
|
65
81
|
function addMessage(message) {
|
|
66
82
|
const id = messageId(message.conversation, message.identity);
|
|
67
|
-
|
|
68
|
-
index.discard(id);
|
|
69
|
-
messages.set(id, { conversation: message.conversation, identity: message.identity });
|
|
83
|
+
discard(id, messages);
|
|
70
84
|
index.add({ id, text: message.text });
|
|
85
|
+
messages.set(id, { conversation: message.conversation, identity: message.identity });
|
|
71
86
|
}
|
|
72
87
|
function discard(id, entries) {
|
|
73
88
|
if (entries.delete(id))
|
|
@@ -101,13 +116,17 @@ export function createSearchIndex(source) {
|
|
|
101
116
|
});
|
|
102
117
|
return catching;
|
|
103
118
|
}
|
|
104
|
-
function ranked(text, entries, keep, limit) {
|
|
119
|
+
function ranked(text, entries, keep, limit, tie) {
|
|
105
120
|
const found = index.search(text, {
|
|
106
121
|
filter: ({ id }) => {
|
|
107
122
|
const entry = entries.get(id);
|
|
108
123
|
return entry !== undefined && keep(entry, id);
|
|
109
124
|
},
|
|
110
125
|
});
|
|
126
|
+
if (tie !== null) {
|
|
127
|
+
found.sort((left, right) => right.score - left.score ||
|
|
128
|
+
tie(entries.get(left.id), entries.get(right.id)));
|
|
129
|
+
}
|
|
111
130
|
return (limit === null ? found : found.slice(0, limit)).map(({ id, score, match }) => ({
|
|
112
131
|
...entries.get(id),
|
|
113
132
|
score,
|
|
@@ -176,14 +195,16 @@ export function createSearchIndex(source) {
|
|
|
176
195
|
},
|
|
177
196
|
changes: () => changes,
|
|
178
197
|
caughtUp,
|
|
179
|
-
search({ text, limit }, selected, named) {
|
|
198
|
+
search({ text, limit }, selected, named, within, selections) {
|
|
180
199
|
const chosen = selected === null
|
|
181
200
|
? null
|
|
182
201
|
: new Set(selected.map(({ room, path }) => documentId(room, path)));
|
|
183
202
|
const asked = new Set(named);
|
|
184
203
|
return {
|
|
185
|
-
documents: ranked(text, documents, (
|
|
186
|
-
|
|
204
|
+
documents: ranked(text, documents, ({ room, path }, id) => (chosen === null || chosen.has(id)) &&
|
|
205
|
+
(within === null || within.has(room)) &&
|
|
206
|
+
!(selections?.get(room) ?? []).some((root) => beneath(root, path)), limit, byRoomThenPath).map(({ match, ...hit }) => ({ ...hit, matches: match })),
|
|
207
|
+
messages: ranked(text, messages, ({ conversation }) => asked.has(conversation), limit, null).map(({ match, ...hit }) => ({ ...hit, matches: match })),
|
|
187
208
|
};
|
|
188
209
|
},
|
|
189
210
|
};
|
package/dist/seed.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { KeyedResult } from './observation.js';
|
|
2
|
+
import type { QueryRows } from './query.js';
|
|
3
|
+
export type EntrySeed = {
|
|
4
|
+
readonly at: Readonly<Record<string, string>>;
|
|
5
|
+
readonly queries: readonly {
|
|
6
|
+
readonly query: unknown;
|
|
7
|
+
readonly rows: QueryRows;
|
|
8
|
+
}[];
|
|
9
|
+
};
|
|
10
|
+
export type Seeded = {
|
|
11
|
+
readonly rows: QueryRows;
|
|
12
|
+
readonly at: Readonly<Record<string, string>>;
|
|
13
|
+
};
|
|
14
|
+
export declare function entrySeedOf(value: unknown): EntrySeed | null;
|
|
15
|
+
export declare function seededResult(seed: Seeded): KeyedResult;
|
|
16
|
+
//# sourceMappingURL=seed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../src/seed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAA4C,SAAS,EAAE,MAAM,YAAY,CAAC;AAGtF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;KAAE,EAAE,CAAC;CACpF,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,CAAC;AA0BjG,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAe5D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAoBtD"}
|
package/dist/seed.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { documentKey } from './rows.js';
|
|
2
|
+
function plain(value) {
|
|
3
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
4
|
+
}
|
|
5
|
+
function rowsOf(value) {
|
|
6
|
+
if (!plain(value))
|
|
7
|
+
return null;
|
|
8
|
+
if (Array.isArray(value.groups)) {
|
|
9
|
+
const groups = value.groups;
|
|
10
|
+
return groups.every((group) => plain(group) && Array.isArray(group.key) && typeof group.count === 'number')
|
|
11
|
+
? { groups: groups }
|
|
12
|
+
: null;
|
|
13
|
+
}
|
|
14
|
+
if (!Array.isArray(value.documents))
|
|
15
|
+
return null;
|
|
16
|
+
const documents = value.documents;
|
|
17
|
+
return documents.every((document) => plain(document) && typeof document.room === 'string' && typeof document.path === 'string')
|
|
18
|
+
? { documents: documents }
|
|
19
|
+
: null;
|
|
20
|
+
}
|
|
21
|
+
export function entrySeedOf(value) {
|
|
22
|
+
if (!plain(value) || !plain(value.at) || !Array.isArray(value.queries))
|
|
23
|
+
return null;
|
|
24
|
+
const at = {};
|
|
25
|
+
for (const [room, version] of Object.entries(value.at)) {
|
|
26
|
+
if (typeof version !== 'string')
|
|
27
|
+
return null;
|
|
28
|
+
at[room] = version;
|
|
29
|
+
}
|
|
30
|
+
const queries = [];
|
|
31
|
+
for (const entry of value.queries) {
|
|
32
|
+
if (!plain(entry) || !plain(entry.query))
|
|
33
|
+
return null;
|
|
34
|
+
const rows = rowsOf(entry.rows);
|
|
35
|
+
if (rows === null)
|
|
36
|
+
return null;
|
|
37
|
+
queries.push({ query: entry.query, rows });
|
|
38
|
+
}
|
|
39
|
+
return { at, queries };
|
|
40
|
+
}
|
|
41
|
+
export function seededResult(seed) {
|
|
42
|
+
const coverage = {
|
|
43
|
+
rooms: Object.entries(seed.at).map(([room, generation]) => ({
|
|
44
|
+
room,
|
|
45
|
+
generation,
|
|
46
|
+
current: false,
|
|
47
|
+
})),
|
|
48
|
+
indexes: [],
|
|
49
|
+
overlay: [],
|
|
50
|
+
};
|
|
51
|
+
if ('groups' in seed.rows) {
|
|
52
|
+
return {
|
|
53
|
+
result: { groups: seed.rows.groups, coverage },
|
|
54
|
+
keys: seed.rows.groups.map((_group, index) => index),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
result: { documents: seed.rows.documents, coverage },
|
|
59
|
+
keys: seed.rows.documents.map((document) => documentKey(document.room, document.path)),
|
|
60
|
+
};
|
|
61
|
+
}
|
package/dist/store.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ 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
9
|
export declare const STORE_SCHEMA = 25;
|
|
10
|
-
export declare const AUTHORED_SCHEMA =
|
|
10
|
+
export declare const AUTHORED_SCHEMA = 3;
|
|
11
11
|
export type ReplicaRecord = {
|
|
12
12
|
locator: string;
|
|
13
13
|
name: string;
|
|
@@ -23,10 +23,11 @@ export type ReplicaRecord = {
|
|
|
23
23
|
documents: Readonly<Record<string, string>>;
|
|
24
24
|
binaries: Readonly<Record<string, HeldBinary>>;
|
|
25
25
|
revisions: Readonly<Record<string, string>>;
|
|
26
|
+
fileIds: Readonly<Record<string, string>>;
|
|
26
27
|
changes: Readonly<Record<string, HeadChange>>;
|
|
27
28
|
written: Readonly<Record<string, string>>;
|
|
28
29
|
};
|
|
29
|
-
export type StagedLayer = Pick<ReplicaRecord, 'documents' | 'binaries' | 'revisions' | 'changes' | 'written'>;
|
|
30
|
+
export type StagedLayer = Pick<ReplicaRecord, 'documents' | 'binaries' | 'revisions' | 'fileIds' | 'changes' | 'written'>;
|
|
30
31
|
export type TransferRecord = {
|
|
31
32
|
locator: string;
|
|
32
33
|
transfer: string;
|
|
@@ -46,6 +47,9 @@ export type PendingState = {
|
|
|
46
47
|
readonly upload?: unknown;
|
|
47
48
|
readonly accepted?: string;
|
|
48
49
|
};
|
|
50
|
+
export type TargetRecord = {
|
|
51
|
+
established: boolean;
|
|
52
|
+
};
|
|
49
53
|
export type QueueRecord = {
|
|
50
54
|
locator: string;
|
|
51
55
|
pending: readonly {
|
|
@@ -82,6 +86,12 @@ export type ChatDraftRecord = {
|
|
|
82
86
|
files: readonly ChatDraftFile[];
|
|
83
87
|
revision: string;
|
|
84
88
|
submitted?: readonly ChatSubmission[];
|
|
89
|
+
moves?: readonly string[];
|
|
90
|
+
};
|
|
91
|
+
export type CallRecord = {
|
|
92
|
+
readonly operation: string;
|
|
93
|
+
readonly name: string;
|
|
94
|
+
readonly input: unknown;
|
|
85
95
|
};
|
|
86
96
|
export type RecordWrite = {
|
|
87
97
|
next: ReplicaRecord;
|
|
@@ -107,6 +117,8 @@ export type RuntimeStore = {
|
|
|
107
117
|
declare(limits: readonly ProviderLimit[], capabilities: readonly Capability[]): Promise<void>;
|
|
108
118
|
member(): Promise<Member | null>;
|
|
109
119
|
keepMember(member: Member | null): Promise<void>;
|
|
120
|
+
targets(): Promise<Readonly<Record<string, TargetRecord>>>;
|
|
121
|
+
keepTargets(targets: Readonly<Record<string, TargetRecord>>): Promise<void>;
|
|
110
122
|
queues(): Promise<readonly QueueRecord[]>;
|
|
111
123
|
submit(locator: string, id: string, submission: Submission, lost: boolean): Promise<void>;
|
|
112
124
|
accept(locator: string, id: string, roomVersion: string): Promise<void>;
|
|
@@ -122,8 +134,11 @@ export type RuntimeStore = {
|
|
|
122
134
|
turnArrived(conversation: string, turn: string): Promise<boolean>;
|
|
123
135
|
dropConversations(conversations: readonly string[]): Promise<void>;
|
|
124
136
|
chatDrafts(): Promise<readonly ChatDraftRecord[]>;
|
|
125
|
-
|
|
137
|
+
keepChatDrafts(records: readonly ChatDraftRecord[]): Promise<void>;
|
|
126
138
|
dropChatDraft(conversation: string): Promise<void>;
|
|
139
|
+
calls(): Promise<readonly CallRecord[]>;
|
|
140
|
+
keepCall(record: CallRecord): Promise<void>;
|
|
141
|
+
dropCall(operation: string): Promise<void>;
|
|
127
142
|
keepRoomDraft(record: RoomDraftRecord): Promise<void>;
|
|
128
143
|
discardRoomDraft(locator: string, path: string): Promise<void>;
|
|
129
144
|
fences(): Promise<readonly string[]>;
|
|
@@ -149,5 +164,6 @@ export declare function authoredBy(holder: string): Promise<boolean>;
|
|
|
149
164
|
export declare function authoredBinding(): Promise<string | null>;
|
|
150
165
|
export declare function bindAuthored(binding: string): Promise<void>;
|
|
151
166
|
export declare function removeRuntimeStore(holder?: string): Promise<boolean>;
|
|
167
|
+
export declare function openDatabase(name: string, version: number, upgrade: (opening: IDBOpenDBRequest, oldVersion: number) => void): Promise<IDBDatabase>;
|
|
152
168
|
export declare function openRuntimeStore(fenced: (locator: string) => boolean): Promise<RuntimeStore>;
|
|
153
169
|
//# 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,WAAW,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAEvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/store.js
CHANGED
|
@@ -16,21 +16,24 @@ const PRESENTATION = 'presentation';
|
|
|
16
16
|
const CONVERSATIONS = 'conversations';
|
|
17
17
|
const MESSAGES = 'messages';
|
|
18
18
|
const CHAT_DRAFTS = 'chatDrafts';
|
|
19
|
+
const CALLS = 'calls';
|
|
19
20
|
const QUEUES = 'queues';
|
|
20
21
|
const FACTS = 'facts';
|
|
21
22
|
const CURRENT = 'current';
|
|
22
23
|
const MEMBER = 'member';
|
|
24
|
+
const TARGETS = 'targets';
|
|
23
25
|
const GENERATION = 'generation';
|
|
24
26
|
const HOLDER = 'holder';
|
|
25
27
|
const BINDING = 'binding';
|
|
26
28
|
export const STORE_SCHEMA = 25;
|
|
27
29
|
const REPLICA_SHAPE = 23;
|
|
28
|
-
export const AUTHORED_SCHEMA =
|
|
30
|
+
export const AUTHORED_SCHEMA = 3;
|
|
29
31
|
const AUTHORED_STORES = [
|
|
30
32
|
[QUEUES, { keyPath: 'locator' }],
|
|
31
33
|
[PENDING_CHANGES, { keyPath: ['locator', 'id'] }],
|
|
32
34
|
[ROOM_DRAFTS, { keyPath: ['locator', 'path'] }],
|
|
33
35
|
[CHAT_DRAFTS, { keyPath: 'conversation' }],
|
|
36
|
+
[CALLS, { keyPath: 'operation' }],
|
|
34
37
|
[FACTS, undefined],
|
|
35
38
|
[FENCES, { keyPath: 'locator' }],
|
|
36
39
|
];
|
|
@@ -98,7 +101,7 @@ function accepted({ conversation: _held, ...message }) {
|
|
|
98
101
|
return message;
|
|
99
102
|
}
|
|
100
103
|
function roomRecord(record) {
|
|
101
|
-
const { documents, binaries, revisions, changes, written, ...room } = record;
|
|
104
|
+
const { documents, binaries, revisions, fileIds, changes, written, ...room } = record;
|
|
102
105
|
return room;
|
|
103
106
|
}
|
|
104
107
|
function chatDraftRecord(record) {
|
|
@@ -124,13 +127,15 @@ async function readTransfer(store, locator, transfer, receive) {
|
|
|
124
127
|
}
|
|
125
128
|
}
|
|
126
129
|
function emptyLayer() {
|
|
127
|
-
return { documents: {}, binaries: {}, revisions: {}, changes: {}, written: {} };
|
|
130
|
+
return { documents: {}, binaries: {}, revisions: {}, fileIds: {}, changes: {}, written: {} };
|
|
128
131
|
}
|
|
129
132
|
async function readLayer(transaction, locator, transfer) {
|
|
130
133
|
const layer = emptyLayer();
|
|
131
134
|
const head = (held) => {
|
|
132
135
|
if (held.revision !== null)
|
|
133
136
|
layer.revisions[held.path] = held.revision;
|
|
137
|
+
if (held.fileId !== null)
|
|
138
|
+
layer.fileIds[held.path] = held.fileId;
|
|
134
139
|
if (held.change !== null)
|
|
135
140
|
layer.changes[held.path] = held.change;
|
|
136
141
|
};
|
|
@@ -153,6 +158,7 @@ function documentRecord(locator, transfer, layer, path) {
|
|
|
153
158
|
path,
|
|
154
159
|
content: layer.documents[path],
|
|
155
160
|
revision: layer.revisions[path] ?? null,
|
|
161
|
+
fileId: layer.fileIds[path] ?? null,
|
|
156
162
|
change: layer.changes[path] ?? null,
|
|
157
163
|
written: layer.written[path] ?? null,
|
|
158
164
|
};
|
|
@@ -163,6 +169,7 @@ function binaryFileRecord(locator, transfer, layer, path) {
|
|
|
163
169
|
transfer,
|
|
164
170
|
path,
|
|
165
171
|
revision: layer.revisions[path] ?? null,
|
|
172
|
+
fileId: layer.fileIds[path] ?? null,
|
|
166
173
|
change: layer.changes[path] ?? null,
|
|
167
174
|
binary: layer.binaries[path],
|
|
168
175
|
};
|
|
@@ -175,6 +182,7 @@ function writeLayer(transaction, locator, transfer, next, base) {
|
|
|
175
182
|
: new Set([
|
|
176
183
|
...differing(base.documents, next.documents),
|
|
177
184
|
...differing(base.revisions, next.revisions),
|
|
185
|
+
...differing(base.fileIds, next.fileIds),
|
|
178
186
|
...differing(base.written, next.written),
|
|
179
187
|
...differing(base.changes, next.changes, sameChange),
|
|
180
188
|
...differing(base.binaries, next.binaries, sameBinary),
|
|
@@ -272,11 +280,26 @@ export async function removeRuntimeStore(holder) {
|
|
|
272
280
|
await removeDatabase(AUTHORED);
|
|
273
281
|
return false;
|
|
274
282
|
}
|
|
283
|
+
export function openDatabase(name, version, upgrade) {
|
|
284
|
+
return new Promise((resolve, reject) => {
|
|
285
|
+
const opening = indexedDB.open(name, version);
|
|
286
|
+
opening.onupgradeneeded = (event) => upgrade(opening, event.oldVersion);
|
|
287
|
+
opening.onsuccess = () => resolve(opening.result);
|
|
288
|
+
opening.onerror = () => {
|
|
289
|
+
if (opening.error?.name !== 'VersionError') {
|
|
290
|
+
reject(opening.error);
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
removeDatabase(name)
|
|
294
|
+
.then(() => openDatabase(name, version, upgrade))
|
|
295
|
+
.then(resolve, reject);
|
|
296
|
+
};
|
|
297
|
+
});
|
|
298
|
+
}
|
|
275
299
|
function openReplica() {
|
|
276
|
-
|
|
277
|
-
opening.onupgradeneeded = (event) => {
|
|
300
|
+
return openDatabase(DATABASE, STORE_SCHEMA, (opening, oldVersion) => {
|
|
278
301
|
const database = opening.result;
|
|
279
|
-
if (
|
|
302
|
+
if (oldVersion < REPLICA_SHAPE) {
|
|
280
303
|
for (const name of [...database.objectStoreNames])
|
|
281
304
|
database.deleteObjectStore(name);
|
|
282
305
|
}
|
|
@@ -290,19 +313,16 @@ function openReplica() {
|
|
|
290
313
|
if (!messages.indexNames.contains(name))
|
|
291
314
|
messages.createIndex(name, keyPath);
|
|
292
315
|
}
|
|
293
|
-
};
|
|
294
|
-
return settled(opening);
|
|
316
|
+
});
|
|
295
317
|
}
|
|
296
318
|
function openAuthored() {
|
|
297
|
-
|
|
298
|
-
opening.onupgradeneeded = () => {
|
|
319
|
+
return openDatabase(AUTHORED, AUTHORED_SCHEMA, (opening) => {
|
|
299
320
|
const database = opening.result;
|
|
300
321
|
for (const [name, parameters] of AUTHORED_STORES) {
|
|
301
322
|
if (!database.objectStoreNames.contains(name))
|
|
302
323
|
database.createObjectStore(name, parameters);
|
|
303
324
|
}
|
|
304
|
-
};
|
|
305
|
-
return settled(opening);
|
|
325
|
+
});
|
|
306
326
|
}
|
|
307
327
|
export async function openRuntimeStore(fenced) {
|
|
308
328
|
const authored = await openAuthored();
|
|
@@ -414,6 +434,16 @@ export async function openRuntimeStore(fenced) {
|
|
|
414
434
|
transaction.objectStore(DECLARATIONS).put(member, MEMBER);
|
|
415
435
|
await completed(transaction);
|
|
416
436
|
},
|
|
437
|
+
async targets() {
|
|
438
|
+
const transaction = database.transaction(DECLARATIONS, 'readonly');
|
|
439
|
+
const held = await settled(transaction.objectStore(DECLARATIONS).get(TARGETS));
|
|
440
|
+
return held ?? {};
|
|
441
|
+
},
|
|
442
|
+
async keepTargets(targets) {
|
|
443
|
+
const transaction = database.transaction(DECLARATIONS, 'readwrite');
|
|
444
|
+
transaction.objectStore(DECLARATIONS).put(targets, TARGETS);
|
|
445
|
+
await completed(transaction);
|
|
446
|
+
},
|
|
417
447
|
async queues() {
|
|
418
448
|
const transaction = authored.transaction([QUEUES, PENDING_CHANGES], 'readonly');
|
|
419
449
|
const [queues, pending] = await Promise.all([
|
|
@@ -569,9 +599,10 @@ export async function openRuntimeStore(fenced) {
|
|
|
569
599
|
const held = await settled(transaction.objectStore(CHAT_DRAFTS).getAll());
|
|
570
600
|
return held.map(chatDraftRecord);
|
|
571
601
|
},
|
|
572
|
-
async
|
|
602
|
+
async keepChatDrafts(records) {
|
|
573
603
|
const transaction = authored.transaction(CHAT_DRAFTS, 'readwrite');
|
|
574
|
-
|
|
604
|
+
for (const record of records)
|
|
605
|
+
transaction.objectStore(CHAT_DRAFTS).put(record);
|
|
575
606
|
await completed(transaction);
|
|
576
607
|
},
|
|
577
608
|
async dropChatDraft(conversation) {
|
|
@@ -579,6 +610,20 @@ export async function openRuntimeStore(fenced) {
|
|
|
579
610
|
transaction.objectStore(CHAT_DRAFTS).delete(conversation);
|
|
580
611
|
await completed(transaction);
|
|
581
612
|
},
|
|
613
|
+
async calls() {
|
|
614
|
+
const transaction = authored.transaction(CALLS, 'readonly');
|
|
615
|
+
return settled(transaction.objectStore(CALLS).getAll());
|
|
616
|
+
},
|
|
617
|
+
async keepCall(record) {
|
|
618
|
+
const transaction = authored.transaction(CALLS, 'readwrite');
|
|
619
|
+
transaction.objectStore(CALLS).put(record);
|
|
620
|
+
await completed(transaction);
|
|
621
|
+
},
|
|
622
|
+
async dropCall(operation) {
|
|
623
|
+
const transaction = authored.transaction(CALLS, 'readwrite');
|
|
624
|
+
transaction.objectStore(CALLS).delete(operation);
|
|
625
|
+
await completed(transaction);
|
|
626
|
+
},
|
|
582
627
|
async keepRoomDraft(record) {
|
|
583
628
|
if (fenced(record.locator))
|
|
584
629
|
return;
|