@agentshouse/mdruntime 0.1.0-c09bf842921ff → 0.1.0-c0c1e81da9166
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 +1 -1
- package/dist/adapter.d.ts +14 -16
- package/dist/adapter.d.ts.map +1 -1
- package/dist/bootstrap.d.ts +8 -4
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +206 -76
- package/dist/change.d.ts +1 -0
- package/dist/change.d.ts.map +1 -1
- package/dist/chat-types.d.ts +3 -0
- package/dist/chat-types.d.ts.map +1 -0
- package/dist/chat-types.js +2 -0
- package/dist/client.d.ts +2 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/compile.d.ts +5 -0
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +186 -55
- package/dist/connection.d.ts +4 -2
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +1362 -1040
- package/dist/conversation-row.d.ts +33 -0
- package/dist/conversation-row.d.ts.map +1 -0
- package/dist/conversation-row.js +47 -0
- package/dist/conversation.d.ts +13 -5
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +354 -192
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +1 -0
- package/dist/figures.d.ts +48 -0
- package/dist/figures.d.ts.map +1 -0
- package/dist/figures.js +197 -0
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/job.d.ts +20 -1
- package/dist/job.d.ts.map +1 -1
- package/dist/job.js +26 -0
- package/dist/live.d.ts +4 -4
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +53 -15
- package/dist/memory.d.ts +1 -0
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +11 -3
- package/dist/messages.d.ts +25 -1
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +82 -3
- package/dist/model.d.ts +0 -2
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +0 -6
- package/dist/overlay.d.ts +1 -0
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +11 -0
- package/dist/parts.d.ts +59 -0
- package/dist/parts.d.ts.map +1 -0
- package/dist/parts.js +118 -0
- package/dist/query.d.ts +10 -0
- package/dist/query.d.ts.map +1 -1
- package/dist/questions.d.ts +32 -0
- package/dist/questions.d.ts.map +1 -0
- package/dist/questions.js +118 -0
- package/dist/reach.d.ts +5 -5
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +151 -99
- package/dist/read.d.ts +7 -0
- package/dist/read.d.ts.map +1 -0
- package/dist/read.js +17 -0
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +9 -1
- package/dist/refresh.d.ts +1 -1
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +4 -0
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +23 -6
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +10 -7
- package/dist/source.d.ts +61 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +81 -0
- package/dist/status.d.ts +0 -2
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +0 -6
- package/dist/store.d.ts +85 -25
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +136 -98
- package/dist/stored.d.ts +55 -28
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +187 -74
- package/dist/tables.d.ts +91 -19
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +160 -34
- package/dist/tallies.d.ts +18 -0
- package/dist/tallies.d.ts.map +1 -0
- package/dist/tallies.js +129 -0
- package/dist/wire.d.ts +1 -0
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +1 -0
- package/package.json +2 -2
- package/dist/fence.d.ts +0 -6
- package/dist/fence.d.ts.map +0 -1
- package/dist/fence.js +0 -10
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { excerpt, list, record, text } from './read.js';
|
|
2
|
+
const OPTION = 'optionId';
|
|
3
|
+
function choicesOf(schema) {
|
|
4
|
+
const items = record(schema.items);
|
|
5
|
+
const listed = [schema.oneOf, schema.enum, items.anyOf, items.enum].find(Array.isArray) ?? [];
|
|
6
|
+
return listed.flatMap((one) => {
|
|
7
|
+
if (typeof one === 'string')
|
|
8
|
+
return [{ value: one, label: one, about: null }];
|
|
9
|
+
const value = text(record(one), 'const');
|
|
10
|
+
return value === null
|
|
11
|
+
? []
|
|
12
|
+
: [
|
|
13
|
+
{
|
|
14
|
+
value,
|
|
15
|
+
label: text(record(one), 'title') ?? value,
|
|
16
|
+
about: text(record(one), 'description'),
|
|
17
|
+
},
|
|
18
|
+
];
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
function fieldOf(name, schema) {
|
|
22
|
+
const type = text(schema, 'type');
|
|
23
|
+
const kind = type === 'boolean' || type === 'number' || type === 'integer'
|
|
24
|
+
? type
|
|
25
|
+
: type === 'array'
|
|
26
|
+
? 'multi-select'
|
|
27
|
+
: 'string';
|
|
28
|
+
return {
|
|
29
|
+
name,
|
|
30
|
+
kind,
|
|
31
|
+
prompt: text(schema, 'title') ?? name,
|
|
32
|
+
about: text(schema, 'description'),
|
|
33
|
+
choices: kind === 'boolean' ? [] : choicesOf(schema),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function entered(field) {
|
|
37
|
+
return field.kind !== 'boolean' && field.choices.length === 0;
|
|
38
|
+
}
|
|
39
|
+
function valueOf(field, raw) {
|
|
40
|
+
return field.kind === 'number' || field.kind === 'integer' ? Number(raw) : raw;
|
|
41
|
+
}
|
|
42
|
+
function typed(fields, answer) {
|
|
43
|
+
return Object.fromEntries(Object.entries(answer).map(([name, value]) => {
|
|
44
|
+
const field = fields.find((one) => one.name === name);
|
|
45
|
+
return [
|
|
46
|
+
name,
|
|
47
|
+
field !== undefined && entered(field) && typeof value === 'string'
|
|
48
|
+
? valueOf(field, value)
|
|
49
|
+
: value,
|
|
50
|
+
];
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
function askedOf(request) {
|
|
54
|
+
const params = record(request.params);
|
|
55
|
+
const method = text(request, 'method');
|
|
56
|
+
if (method === 'session/request_permission') {
|
|
57
|
+
return {
|
|
58
|
+
message: '',
|
|
59
|
+
fields: [
|
|
60
|
+
{
|
|
61
|
+
name: OPTION,
|
|
62
|
+
kind: 'string',
|
|
63
|
+
prompt: text(record(params.toolCall), 'title') ?? '',
|
|
64
|
+
about: null,
|
|
65
|
+
choices: list(params, 'options').flatMap((entry) => {
|
|
66
|
+
const one = record(entry);
|
|
67
|
+
const value = text(one, OPTION);
|
|
68
|
+
return value === null
|
|
69
|
+
? []
|
|
70
|
+
: [{ value, label: text(one, 'name') ?? value, about: null }];
|
|
71
|
+
}),
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
accept: (answer) => ({ outcome: { outcome: 'selected', optionId: answer[OPTION] } }),
|
|
75
|
+
decline: null,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
if (method !== 'elicitation/create')
|
|
79
|
+
return null;
|
|
80
|
+
const fields = Object.entries(record(record(params.requestedSchema).properties)).map(([name, schema]) => fieldOf(name, record(schema)));
|
|
81
|
+
return {
|
|
82
|
+
message: text(params, 'message') ?? '',
|
|
83
|
+
fields,
|
|
84
|
+
accept: (answer) => ({ action: 'accept', content: typed(fields, answer) }),
|
|
85
|
+
decline: { action: 'decline' },
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
export function questionsOf(view) {
|
|
89
|
+
return (view?.questions ?? []).flatMap((entry) => {
|
|
90
|
+
const one = record(entry);
|
|
91
|
+
const interaction = text(one, 'interaction_id');
|
|
92
|
+
const asked = askedOf(record(one.request));
|
|
93
|
+
return asked === null || interaction === null
|
|
94
|
+
? []
|
|
95
|
+
: [
|
|
96
|
+
{
|
|
97
|
+
interaction,
|
|
98
|
+
secret: one.secret === true,
|
|
99
|
+
undelivered: one.telegram_undelivered === true,
|
|
100
|
+
...asked,
|
|
101
|
+
},
|
|
102
|
+
];
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
export function openQuestion(questions) {
|
|
106
|
+
const [asked] = questionsOf({ questions });
|
|
107
|
+
if (asked === undefined)
|
|
108
|
+
return null;
|
|
109
|
+
const said = asked.message === '' ? asked.fields[0]?.prompt : asked.message;
|
|
110
|
+
return said === undefined || said === '' ? null : excerpt(said);
|
|
111
|
+
}
|
|
112
|
+
export function loneOf(questions) {
|
|
113
|
+
const asked = questions.length === 1 && !questions[0]?.secret ? questions[0] : undefined;
|
|
114
|
+
const only = asked?.fields.length === 1 ? asked.fields[0] : undefined;
|
|
115
|
+
return asked !== undefined && only !== undefined && entered(only)
|
|
116
|
+
? { question: asked, field: only }
|
|
117
|
+
: null;
|
|
118
|
+
}
|
package/dist/reach.d.ts
CHANGED
|
@@ -28,16 +28,16 @@ export type NarrowedView = RuntimeView & {
|
|
|
28
28
|
narrow(reach: PortReach | null): void;
|
|
29
29
|
};
|
|
30
30
|
export type Reachable = RuntimeView & {
|
|
31
|
-
plan(input: unknown, reach: PortReach | null): Plan
|
|
31
|
+
plan(input: unknown, reach: PortReach | null): Promise<Plan>;
|
|
32
32
|
query(plan: Plan): Promise<QueryResult>;
|
|
33
33
|
watchPlan(plan: Plan, deliver: Deliver, fail: Fail): () => void;
|
|
34
34
|
search(input: unknown, reach: PortReach | null): Promise<SearchResult>;
|
|
35
35
|
watchReadiness(port: ReadinessPort, reach: PortReach | null, deliver: (readiness: Readiness) => void): () => void;
|
|
36
|
-
locked(room: string): boolean
|
|
37
|
-
lockedRooms(): readonly string[]
|
|
36
|
+
locked(room: string): Promise<boolean>;
|
|
37
|
+
lockedRooms(): Promise<readonly string[]>;
|
|
38
38
|
watchLocks(notify: () => void): () => void;
|
|
39
|
-
located(room: string, path: string, destination: string): ReachedDocument | null
|
|
40
|
-
room(locator: string): AppRoom | undefined
|
|
39
|
+
located(room: string, path: string, destination: string): Promise<ReachedDocument | null>;
|
|
40
|
+
room(locator: string): Promise<AppRoom | undefined>;
|
|
41
41
|
};
|
|
42
42
|
export declare function holds(reach: PortReach | null, room: string): boolean;
|
|
43
43
|
export declare function governs(reach: PortReach | null, room: {
|
package/dist/reach.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reach.d.ts","sourceRoot":"","sources":["../src/reach.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EACT,aAAa,EAEb,YAAY,EAEb,MAAM,iBAAiB,CAAC;AA0BzB,OAAO,KAAK,EAAiB,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAS9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/E,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,CAAC;IAC/C,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAEjD,MAAM,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;AAE5C,MAAM,MAAM,KAAK,GAAG,CAClB,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,KACP,MAAM,IAAI,CAAC;AAEhB,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAE1D,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG;IACvC,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG;IACpC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"reach.d.ts","sourceRoot":"","sources":["../src/reach.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EACT,aAAa,EAEb,YAAY,EAEb,MAAM,iBAAiB,CAAC;AA0BzB,OAAO,KAAK,EAAiB,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAS9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/E,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,CAAC;IAC/C,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAEjD,MAAM,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;AAE5C,MAAM,MAAM,KAAK,GAAG,CAClB,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,KACP,MAAM,IAAI,CAAC;AAEhB,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAE1D,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG;IACvC,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG;IACpC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACxC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,IAAI,CAAC;IAChE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACvE,cAAc,CACZ,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,SAAS,GAAG,IAAI,EACvB,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,GACtC,MAAM,IAAI,CAAC;IACd,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,WAAW,IAAI,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IAC1C,UAAU,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC3C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAC1F,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;CACrD,CAAC;AAsCF,wBAAgB,KAAK,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAMpE;AAMD,wBAAgB,OAAO,CACrB,KAAK,EAAE,SAAS,GAAG,IAAI,EACvB,IAAI,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,cAAc,EAAE;QAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAA;CAAE,GAC/F;IAAE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAU/D;AAeD,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAcnE;AA2GD,wBAAgB,QAAQ,CACtB,OAAO,EAAE,SAAS,EAClB,KAAK,EAAE,SAAS,GAAG,IAAI,EACvB,IAAI,EAAE,aAAa,GAClB,YAAY,CA4Xd"}
|
package/dist/reach.js
CHANGED
|
@@ -170,14 +170,60 @@ export function narrowed(runtime, given, port) {
|
|
|
170
170
|
stop();
|
|
171
171
|
};
|
|
172
172
|
}
|
|
173
|
-
const unlocking = (rooms) => {
|
|
174
|
-
const
|
|
175
|
-
return
|
|
176
|
-
? null
|
|
177
|
-
: { pending: locked.map((room) => ({ room, awaits: 'unlock' })) };
|
|
173
|
+
const unlocking = (rooms, locked) => {
|
|
174
|
+
const held = (rooms ?? []).filter((room) => locked.includes(room));
|
|
175
|
+
return held.length === 0 ? null : { pending: held.map((room) => ({ room, awaits: 'unlock' })) };
|
|
178
176
|
};
|
|
179
|
-
const unlocked = (entries) => entries.filter((entry) => !
|
|
180
|
-
const intoLocked = (held) =>
|
|
177
|
+
const unlocked = (entries, locked) => entries.filter((entry) => !locked.includes(entry.room));
|
|
178
|
+
const intoLocked = async (held) => {
|
|
179
|
+
for (const move of held) {
|
|
180
|
+
if (move?.room !== undefined && (await runtime.locked(move.room)))
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
return false;
|
|
184
|
+
};
|
|
185
|
+
function ordered(deliver) {
|
|
186
|
+
let open = true;
|
|
187
|
+
let shown = Promise.resolve();
|
|
188
|
+
return {
|
|
189
|
+
push(making) {
|
|
190
|
+
shown = shown.then(() => making.then((value) => {
|
|
191
|
+
if (open)
|
|
192
|
+
deliver(value);
|
|
193
|
+
}, () => { }), () => { });
|
|
194
|
+
},
|
|
195
|
+
stop() {
|
|
196
|
+
open = false;
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
function unlockedWatch(topic, input, deliver, fail, within) {
|
|
201
|
+
const shown = ordered(deliver);
|
|
202
|
+
const stop = watch(topic, input, (message) => {
|
|
203
|
+
shown.push(runtime.lockedRooms().then((locked) => within(message, locked)));
|
|
204
|
+
}, fail);
|
|
205
|
+
return () => {
|
|
206
|
+
shown.stop();
|
|
207
|
+
stop();
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
function lockedFirst(room, start, shut) {
|
|
211
|
+
let open = true;
|
|
212
|
+
let stop = () => { };
|
|
213
|
+
void (async () => {
|
|
214
|
+
const closed = !holds(reach, room) || (await runtime.locked(room));
|
|
215
|
+
if (!open)
|
|
216
|
+
return;
|
|
217
|
+
if (closed)
|
|
218
|
+
shut();
|
|
219
|
+
else
|
|
220
|
+
stop = start();
|
|
221
|
+
})();
|
|
222
|
+
return () => {
|
|
223
|
+
open = false;
|
|
224
|
+
stop();
|
|
225
|
+
};
|
|
226
|
+
}
|
|
181
227
|
const within = (topic, input, deliver, fail) => {
|
|
182
228
|
if (topic === 'rooms') {
|
|
183
229
|
return following(() => watch(topic, input, (rooms) => deliver(roomsWithin(reach, rooms)), fail));
|
|
@@ -186,55 +232,59 @@ export function narrowed(runtime, given, port) {
|
|
|
186
232
|
return following(() => runtime.watchReadiness(port, reach, deliver));
|
|
187
233
|
}
|
|
188
234
|
if (topic === 'sync-status') {
|
|
189
|
-
return following(() =>
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
}
|
|
235
|
+
return following(() => unlockedWatch(topic, input, deliver, fail, (status, locked) => {
|
|
236
|
+
const shown = statusWithin(reach, status);
|
|
237
|
+
return { ...shown, attentionRequired: unlocked(shown.attentionRequired, locked) };
|
|
238
|
+
}), true);
|
|
193
239
|
}
|
|
194
240
|
if (topic === 'room-drafts') {
|
|
195
|
-
return following(() =>
|
|
241
|
+
return following(() => unlockedWatch(topic, input, deliver, fail, (drafts, locked) => unlocked(draftsWithin(reach, drafts), locked)), true);
|
|
196
242
|
}
|
|
197
243
|
if (topic === 'queue') {
|
|
198
244
|
const room = input[0];
|
|
199
|
-
return following(() =>
|
|
200
|
-
if (!holds(reach, room) || runtime.locked(room)) {
|
|
201
|
-
deliver([]);
|
|
202
|
-
return () => { };
|
|
203
|
-
}
|
|
204
|
-
return watch(topic, input, (entries) => deliver(queueWithin(reach, room, entries)), fail);
|
|
205
|
-
}, true);
|
|
245
|
+
return following(() => lockedFirst(room, () => watch(topic, input, (entries) => deliver(queueWithin(reach, room, entries)), fail), () => deliver([])), true);
|
|
206
246
|
}
|
|
207
247
|
if (topic === 'query') {
|
|
208
|
-
const
|
|
248
|
+
const planning = runtime.plan(input[0], reach);
|
|
209
249
|
let held = null;
|
|
210
250
|
return following(() => {
|
|
211
|
-
const locked = unlocking(plan.rooms);
|
|
212
|
-
if (locked !== null) {
|
|
213
|
-
const answer = { result: locked, keys: [] };
|
|
214
|
-
if (held === null || changeOf(held, answer) !== null)
|
|
215
|
-
deliver(answer);
|
|
216
|
-
held = digestOf(answer);
|
|
217
|
-
return () => { };
|
|
218
|
-
}
|
|
219
|
-
let first = true;
|
|
220
251
|
let open = true;
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
252
|
+
let stop = () => { };
|
|
253
|
+
void (async () => {
|
|
254
|
+
const plan = await planning;
|
|
255
|
+
const locked = await runtime.lockedRooms();
|
|
256
|
+
if (!open)
|
|
257
|
+
return;
|
|
258
|
+
const pending = unlocking(plan.rooms, locked);
|
|
259
|
+
if (pending !== null) {
|
|
260
|
+
const answer = { result: pending, keys: [] };
|
|
261
|
+
if (held === null || changeOf(held, answer) !== null)
|
|
262
|
+
deliver(answer);
|
|
263
|
+
held = digestOf(answer);
|
|
225
264
|
return;
|
|
226
265
|
}
|
|
227
|
-
first =
|
|
228
|
-
const
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
266
|
+
let first = true;
|
|
267
|
+
const heard = (message) => {
|
|
268
|
+
if (!first) {
|
|
269
|
+
held = digestApplied(held, message);
|
|
270
|
+
deliver(message);
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
first = false;
|
|
274
|
+
const change = held === null ? message : changeOf(held, message);
|
|
275
|
+
held = digestOf(message);
|
|
276
|
+
if (change !== null)
|
|
277
|
+
deliver(change);
|
|
278
|
+
};
|
|
279
|
+
const current = { ...plan, reach: planReach(reach), locked };
|
|
280
|
+
stop = runtime.watchPlan(current, (message) => {
|
|
281
|
+
if (open)
|
|
282
|
+
heard(message);
|
|
283
|
+
}, (error) => {
|
|
284
|
+
if (open)
|
|
285
|
+
fail(error);
|
|
286
|
+
});
|
|
287
|
+
})().catch((error) => {
|
|
238
288
|
if (open)
|
|
239
289
|
fail(error);
|
|
240
290
|
});
|
|
@@ -260,6 +310,12 @@ export function narrowed(runtime, given, port) {
|
|
|
260
310
|
return () => { };
|
|
261
311
|
});
|
|
262
312
|
}
|
|
313
|
+
if (topic === 'figures') {
|
|
314
|
+
if (reach === null)
|
|
315
|
+
return watch(topic, input, deliver, fail);
|
|
316
|
+
fail(deviceUnreached());
|
|
317
|
+
return () => { };
|
|
318
|
+
}
|
|
263
319
|
return watch(topic, input, deliver, fail);
|
|
264
320
|
};
|
|
265
321
|
const files = new Map();
|
|
@@ -278,31 +334,33 @@ export function narrowed(runtime, given, port) {
|
|
|
278
334
|
const view = {
|
|
279
335
|
...md,
|
|
280
336
|
rooms: () => md.rooms().then((rooms) => roomsWithin(reach, rooms)),
|
|
281
|
-
query: ((input) => {
|
|
282
|
-
const plan = runtime.plan(input, reach);
|
|
283
|
-
|
|
337
|
+
query: (async (input) => {
|
|
338
|
+
const plan = await runtime.plan(input, reach);
|
|
339
|
+
const locked = await runtime.lockedRooms();
|
|
340
|
+
return unlocking(plan.rooms, locked) ?? runtime.query({ ...plan, locked });
|
|
284
341
|
}),
|
|
285
342
|
search: (input) => runtime.search(input, reach),
|
|
286
|
-
types(room) {
|
|
287
|
-
if (holds(reach, room) && runtime.locked(room))
|
|
343
|
+
async types(room) {
|
|
344
|
+
if (holds(reach, room) && (await runtime.locked(room)))
|
|
288
345
|
throw lockedError(room);
|
|
289
346
|
if (wholly(reach, room))
|
|
290
347
|
return md.types(room);
|
|
291
348
|
if (!holds(reach, room))
|
|
292
349
|
return structuredClone(UNHELD_TYPES);
|
|
293
|
-
return typesWithin(reach, runtime.room(room), md.types(room));
|
|
350
|
+
return typesWithin(reach, await runtime.room(room), await md.types(room));
|
|
294
351
|
},
|
|
295
352
|
async save(room, roomDrafts, writtenBy) {
|
|
296
353
|
if (!holds(reach, room))
|
|
297
354
|
throw unreached(room);
|
|
298
|
-
if (runtime.locked(room))
|
|
355
|
+
if (await runtime.locked(room)) {
|
|
299
356
|
return { outcome: 'refused', code: ROOM_LOCKED, retryable: true };
|
|
357
|
+
}
|
|
300
358
|
const held = (await Promise.all(roomDrafts.map(({ path }) => md.roomDraft.read(room, path)))).map((draft) => draft?.parts.move);
|
|
301
359
|
const outside = roomDrafts.find(({ path }, at) => !covers(reach, room, path) || !moves(reach, room, held[at]));
|
|
302
360
|
if (outside !== undefined) {
|
|
303
361
|
return { outcome: 'refused', code: 'stale', retryable: false, file: outside.path };
|
|
304
362
|
}
|
|
305
|
-
if (intoLocked(held))
|
|
363
|
+
if (await intoLocked(held))
|
|
306
364
|
return { outcome: 'refused', code: ROOM_LOCKED, retryable: true };
|
|
307
365
|
return savedWithin(reach, room, await md.save(room, roomDrafts, writtenBy));
|
|
308
366
|
},
|
|
@@ -313,47 +371,48 @@ export function narrowed(runtime, given, port) {
|
|
|
313
371
|
if (filed !== undefined) {
|
|
314
372
|
return { outcome: 'refused', code: ATTACH_REQUIRED, retryable: false, file: filed.path };
|
|
315
373
|
}
|
|
316
|
-
if (runtime.locked(room))
|
|
374
|
+
if (await runtime.locked(room)) {
|
|
317
375
|
return { outcome: 'refused', code: ROOM_LOCKED, retryable: true };
|
|
376
|
+
}
|
|
318
377
|
const held = parts.map(({ path, parts: one }) => readParts(one, path).move);
|
|
319
378
|
if (parts.some(({ path }, at) => !covers(reach, room, path) || !moves(reach, room, held[at]))) {
|
|
320
379
|
throw unreached(room);
|
|
321
380
|
}
|
|
322
|
-
if (intoLocked(held))
|
|
381
|
+
if (await intoLocked(held))
|
|
323
382
|
return { outcome: 'refused', code: ROOM_LOCKED, retryable: true };
|
|
324
383
|
return savedWithin(reach, room, await md.saveParts(room, parts, writtenBy));
|
|
325
384
|
},
|
|
326
|
-
resolve(room, path, destination) {
|
|
327
|
-
const at = runtime.located(room, path, destination);
|
|
385
|
+
async resolve(room, path, destination) {
|
|
386
|
+
const at = await runtime.located(room, path, destination);
|
|
328
387
|
return at !== null && !covers(reach, at.room, at.path)
|
|
329
|
-
?
|
|
388
|
+
? UNREADABLE
|
|
330
389
|
: md.resolve(room, path, destination);
|
|
331
390
|
},
|
|
332
|
-
history: (room, path, query) => !covers(reach, room, path)
|
|
333
|
-
?
|
|
334
|
-
: runtime.locked(room)
|
|
335
|
-
?
|
|
391
|
+
history: async (room, path, query) => !covers(reach, room, path)
|
|
392
|
+
? failure({ kind: 'room-not-readable', locator: room })
|
|
393
|
+
: (await runtime.locked(room))
|
|
394
|
+
? lockedRoom(room)
|
|
336
395
|
: md.history(room, path, query),
|
|
337
396
|
binaryFile: {
|
|
338
|
-
read: (room, path, revision) => !covers(reach, room, path)
|
|
339
|
-
?
|
|
340
|
-
: runtime.locked(room)
|
|
341
|
-
?
|
|
397
|
+
read: async (room, path, revision) => !covers(reach, room, path)
|
|
398
|
+
? failure({ kind: 'room-not-readable', locator: room })
|
|
399
|
+
: (await runtime.locked(room))
|
|
400
|
+
? lockedRoom(room)
|
|
342
401
|
: hand(md.binaryFile.read(room, path, revision)),
|
|
343
|
-
link: (room, path, revision) => !covers(reach, room, path)
|
|
344
|
-
?
|
|
345
|
-
: runtime.locked(room)
|
|
346
|
-
?
|
|
402
|
+
link: async (room, path, revision) => !covers(reach, room, path)
|
|
403
|
+
? failure({ kind: 'room-not-readable', locator: room })
|
|
404
|
+
: (await runtime.locked(room))
|
|
405
|
+
? lockedRoom(room)
|
|
347
406
|
: md.binaryFile.link(room, path, revision),
|
|
348
|
-
show: (room, path, revision) => !covers(reach, room, path)
|
|
349
|
-
?
|
|
350
|
-
: runtime.locked(room)
|
|
351
|
-
?
|
|
407
|
+
show: async (room, path, revision) => !covers(reach, room, path)
|
|
408
|
+
? failure({ kind: 'room-not-readable', locator: room })
|
|
409
|
+
: (await runtime.locked(room))
|
|
410
|
+
? lockedRoom(room)
|
|
352
411
|
: hand(md.binaryFile.show(room, path, revision)),
|
|
353
|
-
attach: (room, file) => !wholly(reach, room)
|
|
354
|
-
?
|
|
355
|
-
: runtime.locked(room)
|
|
356
|
-
?
|
|
412
|
+
attach: async (room, file) => !wholly(reach, room)
|
|
413
|
+
? failure({ kind: 'room-not-readable', locator: room })
|
|
414
|
+
: (await runtime.locked(room))
|
|
415
|
+
? lockedRoom(room)
|
|
357
416
|
: md.binaryFile.attach(room, file),
|
|
358
417
|
async part(file, part) {
|
|
359
418
|
const key = files.get(file);
|
|
@@ -366,44 +425,37 @@ export function narrowed(runtime, given, port) {
|
|
|
366
425
|
},
|
|
367
426
|
},
|
|
368
427
|
reached: async (room, roomVersion, path) => (path === undefined ? wholly(reach, room) : covers(reach, room, path)) &&
|
|
369
|
-
!runtime.locked(room) &&
|
|
428
|
+
!(await runtime.locked(room)) &&
|
|
370
429
|
(await md.reached(room, roomVersion, path)),
|
|
371
430
|
log: () => (reach === null ? md.log() : ''),
|
|
372
431
|
cleanUp: () => (reach === null ? md.cleanUp() : Promise.reject(deviceUnreached())),
|
|
373
432
|
unsent: () => (reach === null ? md.unsent() : Promise.reject(deviceUnreached())),
|
|
374
433
|
reset: () => (reach === null ? md.reset() : Promise.reject(deviceUnreached())),
|
|
375
434
|
roomDraft: {
|
|
376
|
-
list: () => md.roomDraft.list()
|
|
435
|
+
list: async () => unlocked(draftsWithin(reach, await md.roomDraft.list()), await runtime.lockedRooms()),
|
|
377
436
|
async read(room, path) {
|
|
378
437
|
if (!covers(reach, room, path))
|
|
379
438
|
return null;
|
|
380
|
-
if (runtime.locked(room))
|
|
439
|
+
if (await runtime.locked(room))
|
|
381
440
|
throw lockedError(room);
|
|
382
441
|
return shownDraft(reach, await md.roomDraft.read(room, path));
|
|
383
442
|
},
|
|
384
|
-
write(room, path, revision, parts, next) {
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
}
|
|
396
|
-
catch (error) {
|
|
397
|
-
return Promise.reject(error);
|
|
398
|
-
}
|
|
399
|
-
return md.roomDraft
|
|
400
|
-
.write(room, path, revision, parts, next)
|
|
401
|
-
.then((written) => writeWithin(reach, written));
|
|
443
|
+
async write(room, path, revision, parts, next) {
|
|
444
|
+
if (reach !== null && carriesFile(parts))
|
|
445
|
+
throw attachRequired();
|
|
446
|
+
const move = readParts(parts, path).move;
|
|
447
|
+
if (!covers(reach, room, path) || !moves(reach, room, move))
|
|
448
|
+
throw unreached(room);
|
|
449
|
+
if (await runtime.locked(room))
|
|
450
|
+
throw lockedError(room);
|
|
451
|
+
if (await intoLocked([move]))
|
|
452
|
+
throw lockedError(move.room);
|
|
453
|
+
return writeWithin(reach, await md.roomDraft.write(room, path, revision, parts, next));
|
|
402
454
|
},
|
|
403
455
|
async discard(room, path, revision) {
|
|
404
456
|
if (!covers(reach, room, path))
|
|
405
457
|
return staleWrite(null);
|
|
406
|
-
if (runtime.locked(room))
|
|
458
|
+
if (await runtime.locked(room))
|
|
407
459
|
throw lockedError(room);
|
|
408
460
|
return writeWithin(reach, await md.roomDraft.discard(room, path, revision));
|
|
409
461
|
},
|
package/dist/read.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type Fields = Readonly<Record<string, unknown>>;
|
|
2
|
+
export declare const EXCERPT = 512;
|
|
3
|
+
export declare function excerpt(said: string): string;
|
|
4
|
+
export declare function record(entry: unknown): Fields;
|
|
5
|
+
export declare function text(fields: Fields, name: string): string | null;
|
|
6
|
+
export declare function list(fields: Fields, name: string): readonly unknown[];
|
|
7
|
+
//# sourceMappingURL=read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../src/read.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEvD,eAAO,MAAM,OAAO,MAAM,CAAC;AAE3B,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAI7C;AAED,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGhE;AAED,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,OAAO,EAAE,CAGrE"}
|
package/dist/read.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const EXCERPT = 512;
|
|
2
|
+
export function excerpt(said) {
|
|
3
|
+
return [...said.slice(0, EXCERPT * 2)].slice(0, EXCERPT).join('');
|
|
4
|
+
}
|
|
5
|
+
export function record(entry) {
|
|
6
|
+
return typeof entry === 'object' && entry !== null && !Array.isArray(entry)
|
|
7
|
+
? entry
|
|
8
|
+
: {};
|
|
9
|
+
}
|
|
10
|
+
export function text(fields, name) {
|
|
11
|
+
const value = fields[name];
|
|
12
|
+
return typeof value === 'string' && value !== '' ? value : null;
|
|
13
|
+
}
|
|
14
|
+
export function list(fields, name) {
|
|
15
|
+
const value = fields[name];
|
|
16
|
+
return Array.isArray(value) ? value : [];
|
|
17
|
+
}
|
package/dist/recovery.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,MAAM,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AAElE,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEhF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClF,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,MAAM,IAAI,IAAI,CAAC;IACf,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACnC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB,CAAC;AAsBF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,SAAW,EAAE,KAAK,SAAS,GAAG,MAAM,CAGpF;AAED,wBAAsB,aAAa,CAAC,CAAC,EACnC,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACrB,MAAM,EAAE,WAAW,EACnB,QAAQ,GAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAoB,GAC5C,OAAO,CAAC,CAAC,CAAC,CAsBZ;
|
|
1
|
+
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../src/recovery.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,MAAM,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AAElE,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEhF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClF,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,MAAM,IAAI,IAAI,CAAC;IACf,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACnC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB,CAAC;AAsBF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,SAAW,EAAE,KAAK,SAAS,GAAG,MAAM,CAGpF;AAED,wBAAsB,aAAa,CAAC,CAAC,EACnC,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACrB,MAAM,EAAE,WAAW,EACnB,QAAQ,GAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAoB,GAC5C,OAAO,CAAC,CAAC,CAAC,CAsBZ;AA8KD,wBAAgB,cAAc,CAAC,OAAO,GAAE,eAAoB,GAAG,QAAQ,CAStE"}
|
package/dist/recovery.js
CHANGED
|
@@ -106,7 +106,15 @@ function owner(backoff, inFlight, release = () => { }) {
|
|
|
106
106
|
}
|
|
107
107
|
intent.tries += 1;
|
|
108
108
|
if (intent.tries >= backoff.attempts) {
|
|
109
|
-
|
|
109
|
+
if (again === null) {
|
|
110
|
+
finish(key, intent, false);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
intent.tries = 0;
|
|
114
|
+
if (again === 'now')
|
|
115
|
+
launch(key, intent);
|
|
116
|
+
else
|
|
117
|
+
wait(key, intent, again, true);
|
|
110
118
|
return;
|
|
111
119
|
}
|
|
112
120
|
if (result === 'again') {
|
package/dist/refresh.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ export type Refreshing = {
|
|
|
20
20
|
later(paths: readonly string[], roomVersion: string): Promise<ReadonlySet<string>>;
|
|
21
21
|
stage(page: RefreshedPage): Promise<boolean>;
|
|
22
22
|
};
|
|
23
|
-
type PageContent = Pick<RefreshPage, 'documents' | 'facts' | 'revisions' | 'fileIds' | 'changes' | 'binaryFiles'>;
|
|
23
|
+
type PageContent = Pick<RefreshPage, 'documents' | 'facts' | 'revisions' | 'fileIds' | 'created' | 'changes' | 'binaryFiles'>;
|
|
24
24
|
export declare function pageEntries(page: PageContent, removals: readonly string[], roomVersion: string, prior: (paths: readonly string[]) => Promise<ReadonlyMap<string, HeldEntry>>): Promise<StoredEntry[]>;
|
|
25
25
|
export declare function advancement(refresh: Refresher, authorization: Authorization, held: ReplicaRecord, remodel: Remodel, continuing: () => boolean, staging: Refreshing): Promise<Advancement>;
|
|
26
26
|
export {};
|
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,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,aAAa,
|
|
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
|
@@ -49,6 +49,7 @@ function* entering(page, roomVersion, listed, prior) {
|
|
|
49
49
|
binary: null,
|
|
50
50
|
revision: page.revisions[path] ?? prior.get(path)?.revision ?? null,
|
|
51
51
|
fileId: page.fileIds?.[path] ?? null,
|
|
52
|
+
created: page.created?.[path] ?? null,
|
|
52
53
|
change: page.changes[path] ?? null,
|
|
53
54
|
written: roomVersion,
|
|
54
55
|
});
|
|
@@ -62,6 +63,7 @@ function* entering(page, roomVersion, listed, prior) {
|
|
|
62
63
|
binary: { state: 'accepted', ...page.binaryFiles[path] },
|
|
63
64
|
revision: page.revisions[path] ?? prior.get(path)?.revision ?? null,
|
|
64
65
|
fileId: page.fileIds?.[path] ?? null,
|
|
66
|
+
created: page.created?.[path] ?? null,
|
|
65
67
|
change: page.changes[path] ?? null,
|
|
66
68
|
written: null,
|
|
67
69
|
});
|
|
@@ -76,6 +78,7 @@ function* entering(page, roomVersion, listed, prior) {
|
|
|
76
78
|
...kept,
|
|
77
79
|
revision: page.revisions[path] ?? held.revision,
|
|
78
80
|
fileId: page.fileIds?.[path] ?? held.fileId,
|
|
81
|
+
created: page.created?.[path] ?? held.created,
|
|
79
82
|
change: page.changes[path] ?? held.change,
|
|
80
83
|
});
|
|
81
84
|
}
|
|
@@ -99,6 +102,7 @@ function unwritten(page, kept) {
|
|
|
99
102
|
facts: without(page.facts, kept),
|
|
100
103
|
revisions: without(page.revisions, kept),
|
|
101
104
|
...(page.fileIds === undefined ? {} : { fileIds: without(page.fileIds, kept) }),
|
|
105
|
+
...(page.created === undefined ? {} : { created: without(page.created, kept) }),
|
|
102
106
|
changes: without(page.changes, kept),
|
|
103
107
|
binaryFiles: without(page.binaryFiles, kept),
|
|
104
108
|
removals: page.removals.filter((path) => !kept.has(path)),
|
package/dist/replica.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replica.d.ts","sourceRoot":"","sources":["../src/replica.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,KAAK,EACV,kBAAkB,EAClB,UAAU,EAEV,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,cAAc,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAmC,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACnG,OAAO,EAAgB,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAiD,KAAK,KAAK,EAAE,MAAM,cAAc,CAAC;AAGzF,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGxE,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/C,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG;IAAE,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC;AAEvE,MAAM,MAAM,KAAK,GAAG,KAAK,GAAG;IAC1B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACpC,CAAC;AAEF,wBAAgB,aAAa,CAC3B,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,gBAAgB,CAAC,EACvD,OAAO,EAAE,UAAU,EACnB,UAAU,EAAE,SAAS,SAAS,EAAE,GAC/B,WAAW,CASb;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAG1D;AAsCD,wBAAiB,OAAO,CACtB,OAAO,EAAE,SAAS,SAAS,EAAE,EAC7B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GACtB,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"replica.d.ts","sourceRoot":"","sources":["../src/replica.ts"],"names":[],"mappings":"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"}
|