@agentshouse/mdruntime-adapter 0.1.0-cb89e0425af50 → 0.1.0-cbbc9b36e7fd4
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 +256 -226
- package/dist/actions.d.ts +61 -1
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +80 -86
- package/dist/adapter.d.ts +1 -0
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +229 -63
- package/dist/discovery.d.ts +1 -0
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +6 -2
- package/dist/handed.d.ts +15 -0
- package/dist/handed.d.ts.map +1 -0
- package/dist/handed.js +38 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/model.d.ts +0 -1
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +0 -3
- package/dist/read.d.ts +26 -7
- package/dist/read.d.ts.map +1 -1
- package/dist/read.js +136 -78
- package/dist/referrer.d.ts +7 -0
- package/dist/referrer.d.ts.map +1 -0
- package/dist/referrer.js +35 -0
- package/dist/refusal.d.ts.map +1 -1
- package/dist/refusal.js +2 -1
- package/dist/site.d.ts +1 -1
- package/dist/site.d.ts.map +1 -1
- package/dist/site.js +157 -47
- package/dist/stream.d.ts +5 -4
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +300 -14
- package/dist/transport.d.ts +48 -10
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +3 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/write.d.ts +2 -9
- package/dist/write.d.ts.map +1 -1
- package/dist/write.js +59 -10
- package/package.json +2 -3
- package/dist/links.d.ts +0 -20
- package/dist/links.d.ts.map +0 -1
- package/dist/links.js +0 -104
package/dist/read.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BootstrapPage, RefreshResult
|
|
1
|
+
import type { AdapterFailure, BinaryFile, BootstrapPage, RefreshResult } from '@agentshouse/mdruntime';
|
|
2
2
|
import type { TrackedAuthority } from './discovery.js';
|
|
3
3
|
import type { HouseMode } from './transport.js';
|
|
4
4
|
import { type LogPosition } from './version.js';
|
|
@@ -7,7 +7,9 @@ export type HouseManifestFile = {
|
|
|
7
7
|
path: string;
|
|
8
8
|
revision: string | undefined;
|
|
9
9
|
version: string;
|
|
10
|
+
sha256?: string;
|
|
10
11
|
head?: HeadChange;
|
|
12
|
+
binary?: BinaryFile;
|
|
11
13
|
};
|
|
12
14
|
export type HouseContent = {
|
|
13
15
|
path: string;
|
|
@@ -17,11 +19,15 @@ export type HouseScope = LogPosition & {
|
|
|
17
19
|
anchor: string;
|
|
18
20
|
files: readonly HouseManifestFile[];
|
|
19
21
|
contents: readonly HouseContent[];
|
|
20
|
-
|
|
22
|
+
};
|
|
23
|
+
export type HouseCut = {
|
|
24
|
+
position: string;
|
|
25
|
+
log_epoch: string;
|
|
21
26
|
};
|
|
22
27
|
export type HouseCursor = {
|
|
23
28
|
room: string;
|
|
24
29
|
path: string | null;
|
|
30
|
+
cut?: HouseCut;
|
|
25
31
|
};
|
|
26
32
|
export type HouseEnvelope = {
|
|
27
33
|
scopes: readonly HouseScope[];
|
|
@@ -46,14 +52,23 @@ export type HouseChange = {
|
|
|
46
52
|
head?: HeadChange;
|
|
47
53
|
} | {
|
|
48
54
|
path: string;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
binary: BinaryFile;
|
|
56
|
+
revision: string | undefined;
|
|
57
|
+
version: string;
|
|
58
|
+
head?: HeadChange;
|
|
59
|
+
};
|
|
60
|
+
export type HousePage = {
|
|
61
|
+
after: string;
|
|
62
|
+
through: string;
|
|
63
|
+
read: number;
|
|
52
64
|
};
|
|
53
65
|
export type HouseView = LogPosition & {
|
|
54
66
|
authority: string;
|
|
55
67
|
changes: readonly HouseChange[];
|
|
56
|
-
|
|
68
|
+
next?: HousePage;
|
|
69
|
+
};
|
|
70
|
+
type PageFailure = AdapterFailure | {
|
|
71
|
+
kind: 'beyond-horizon';
|
|
57
72
|
};
|
|
58
73
|
export type HouseEnumeration = {
|
|
59
74
|
authorities: readonly HouseView[];
|
|
@@ -66,10 +81,13 @@ export declare function headChange(held: {
|
|
|
66
81
|
readonly author?: unknown;
|
|
67
82
|
readonly created_at?: unknown;
|
|
68
83
|
}): HeadChange | undefined | null;
|
|
69
|
-
export declare function
|
|
84
|
+
export declare function binaryFileOf(held: Readonly<Record<string, unknown>>): BinaryFile | undefined | null;
|
|
70
85
|
export declare function parseEnvelope(body: unknown): HouseEnvelope | null;
|
|
71
86
|
export declare function parseSiteBootstrap(body: unknown): HouseScope | null;
|
|
87
|
+
export declare function siteBootstrapNext(body: unknown): string | null;
|
|
88
|
+
export declare function siteBootstrapOffset(body: unknown): number | null;
|
|
72
89
|
export declare function parseEnumeration(body: unknown, mode: HouseMode): HouseEnumeration | null;
|
|
90
|
+
export declare function wholeView(first: HouseView, more: (page: HousePage) => Promise<HouseView | PageFailure>): Promise<HouseView | PageFailure>;
|
|
73
91
|
export declare function advancedScope(scope: HouseScope, view: HouseView): HouseScope;
|
|
74
92
|
export declare function matchesScope(scope: HouseScope, tracked: TrackedAuthority): boolean;
|
|
75
93
|
export declare function bootstrapOf(scope: HouseScope): BootstrapPage;
|
|
@@ -81,4 +99,5 @@ export type HouseSchema = {
|
|
|
81
99
|
export declare function schemaOf(scope: HouseScope, schema: string): HouseSchema | null;
|
|
82
100
|
export declare function viewOf(enumeration: HouseEnumeration, tracked: TrackedAuthority): HouseView | undefined;
|
|
83
101
|
export declare function refreshFrom(view: HouseView, fromRoomVersion: string): RefreshResult;
|
|
102
|
+
export {};
|
|
84
103
|
//# sourceMappingURL=read.d.ts.map
|
package/dist/read.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../src/read.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAEb,aAAa,
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../src/read.ts"],"names":[],"mappings":"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"}
|
package/dist/read.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { readPosition, roomVersion } from './version.js';
|
|
1
|
+
import { DECIMAL, readPosition, roomVersion } from './version.js';
|
|
2
2
|
export function authorityRoot(handle) {
|
|
3
3
|
return `/rooms/${handle}`;
|
|
4
4
|
}
|
|
@@ -51,32 +51,19 @@ export function headChange(held) {
|
|
|
51
51
|
function headed(head) {
|
|
52
52
|
return head === undefined ? {} : { head };
|
|
53
53
|
}
|
|
54
|
-
function
|
|
55
|
-
if (
|
|
56
|
-
return
|
|
57
|
-
const {
|
|
58
|
-
if (typeof
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if (mediaType !== null && typeof mediaType !== 'string')
|
|
63
|
-
return null;
|
|
64
|
-
return { reference: attachment, name, byteLength: bytes, mediaType, entry: value };
|
|
65
|
-
}
|
|
66
|
-
export function parseOriginals(value) {
|
|
67
|
-
if (!Array.isArray(value))
|
|
54
|
+
export function binaryFileOf(held) {
|
|
55
|
+
if (held.file === undefined)
|
|
56
|
+
return undefined;
|
|
57
|
+
const { file, bytes, media_type: mediaType, sha256 } = held;
|
|
58
|
+
if (typeof file !== 'string' ||
|
|
59
|
+
typeof bytes !== 'number' ||
|
|
60
|
+
typeof mediaType !== 'string' ||
|
|
61
|
+
typeof sha256 !== 'string')
|
|
68
62
|
return null;
|
|
69
|
-
|
|
70
|
-
for (const entry of value) {
|
|
71
|
-
const attachment = parseOriginal(entry);
|
|
72
|
-
if (attachment === null)
|
|
73
|
-
return null;
|
|
74
|
-
attachments.push(attachment);
|
|
75
|
-
}
|
|
76
|
-
return attachments;
|
|
63
|
+
return { fileRef: file, byteLength: bytes, mediaType, sha256 };
|
|
77
64
|
}
|
|
78
|
-
function
|
|
79
|
-
return
|
|
65
|
+
function binaried(binary) {
|
|
66
|
+
return binary === undefined ? {} : { binary };
|
|
80
67
|
}
|
|
81
68
|
function parseFile(value, mode) {
|
|
82
69
|
if (typeof value !== 'object' || value === null)
|
|
@@ -85,16 +72,30 @@ function parseFile(value, mode) {
|
|
|
85
72
|
if (typeof file.path !== 'string')
|
|
86
73
|
return null;
|
|
87
74
|
const head = headChange(file);
|
|
88
|
-
|
|
75
|
+
const binary = binaryFileOf(file);
|
|
76
|
+
if (head === null || binary === null)
|
|
89
77
|
return null;
|
|
90
78
|
if (mode === 'site') {
|
|
91
79
|
if (typeof file.sha256 !== 'string')
|
|
92
80
|
return null;
|
|
93
|
-
return {
|
|
81
|
+
return {
|
|
82
|
+
path: file.path,
|
|
83
|
+
revision: binary?.sha256,
|
|
84
|
+
version: file.sha256,
|
|
85
|
+
...headed(head),
|
|
86
|
+
...binaried(binary),
|
|
87
|
+
};
|
|
94
88
|
}
|
|
95
89
|
if (typeof file.revision !== 'string')
|
|
96
90
|
return null;
|
|
97
|
-
return {
|
|
91
|
+
return {
|
|
92
|
+
path: file.path,
|
|
93
|
+
revision: file.revision,
|
|
94
|
+
version: file.revision,
|
|
95
|
+
...(typeof file.sha256 === 'string' ? { sha256: file.sha256 } : {}),
|
|
96
|
+
...headed(head),
|
|
97
|
+
...binaried(binary),
|
|
98
|
+
};
|
|
98
99
|
}
|
|
99
100
|
function parseScope(value, mode) {
|
|
100
101
|
if (typeof value !== 'object' || value === null)
|
|
@@ -130,20 +131,28 @@ function parseScope(value, mode) {
|
|
|
130
131
|
return null;
|
|
131
132
|
contents.push({ path: content.path, content: content.content });
|
|
132
133
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
if (
|
|
134
|
+
return { anchor: manifest.anchor, ...at, files, contents };
|
|
135
|
+
}
|
|
136
|
+
function parseCut(value) {
|
|
137
|
+
if (value === undefined)
|
|
138
|
+
return undefined;
|
|
139
|
+
if (typeof value !== 'object' || value === null)
|
|
140
|
+
return null;
|
|
141
|
+
const { position, log_epoch: logEpoch } = value;
|
|
142
|
+
if (typeof position !== 'string' || typeof logEpoch !== 'string')
|
|
137
143
|
return null;
|
|
138
|
-
return {
|
|
144
|
+
return { position, log_epoch: logEpoch };
|
|
139
145
|
}
|
|
140
146
|
function parseCursor(value) {
|
|
141
147
|
if (typeof value !== 'object' || value === null)
|
|
142
148
|
return null;
|
|
143
|
-
const { room, path } = value;
|
|
149
|
+
const { room, path, cut } = value;
|
|
144
150
|
if (typeof room !== 'string' || (path !== null && typeof path !== 'string'))
|
|
145
151
|
return null;
|
|
146
|
-
|
|
152
|
+
const parsed = parseCut(cut);
|
|
153
|
+
if (parsed === null)
|
|
154
|
+
return null;
|
|
155
|
+
return { room, path, ...(parsed === undefined ? {} : { cut: parsed }) };
|
|
147
156
|
}
|
|
148
157
|
export function parseEnvelope(body) {
|
|
149
158
|
if (typeof body !== 'object' || body === null)
|
|
@@ -165,6 +174,18 @@ export function parseEnvelope(body) {
|
|
|
165
174
|
export function parseSiteBootstrap(body) {
|
|
166
175
|
return parseScope(body, 'site');
|
|
167
176
|
}
|
|
177
|
+
export function siteBootstrapNext(body) {
|
|
178
|
+
if (typeof body !== 'object' || body === null || !('next' in body))
|
|
179
|
+
return null;
|
|
180
|
+
return typeof body.next === 'string' && body.next.length > 0 ? body.next : null;
|
|
181
|
+
}
|
|
182
|
+
export function siteBootstrapOffset(body) {
|
|
183
|
+
if (typeof body !== 'object' || body === null || !('offset' in body))
|
|
184
|
+
return null;
|
|
185
|
+
return Number.isSafeInteger(body.offset) && body.offset > 0
|
|
186
|
+
? body.offset
|
|
187
|
+
: null;
|
|
188
|
+
}
|
|
168
189
|
function parseChange(value, mode) {
|
|
169
190
|
if (typeof value !== 'object' || value === null)
|
|
170
191
|
return null;
|
|
@@ -174,8 +195,15 @@ function parseChange(value, mode) {
|
|
|
174
195
|
if (held.removed === true)
|
|
175
196
|
return { path: held.path, removed: true };
|
|
176
197
|
const head = headChange(held);
|
|
177
|
-
|
|
198
|
+
const binary = binaryFileOf(held);
|
|
199
|
+
if (head === null || binary === null)
|
|
178
200
|
return null;
|
|
201
|
+
if (binary !== undefined) {
|
|
202
|
+
if (mode === 'credential' && typeof held.revision !== 'string')
|
|
203
|
+
return null;
|
|
204
|
+
const revision = typeof held.revision === 'string' ? held.revision : binary.sha256;
|
|
205
|
+
return { path: held.path, binary, revision, version: revision, ...headed(head) };
|
|
206
|
+
}
|
|
179
207
|
if (mode === 'site') {
|
|
180
208
|
if (typeof held.content !== 'string' || typeof held.sha256 !== 'string')
|
|
181
209
|
return null;
|
|
@@ -196,12 +224,6 @@ function parseChange(value, mode) {
|
|
|
196
224
|
...headed(head),
|
|
197
225
|
};
|
|
198
226
|
}
|
|
199
|
-
if (typeof held.reference === 'object' && held.reference !== null) {
|
|
200
|
-
const reference = held.reference;
|
|
201
|
-
if (typeof reference.revision !== 'string')
|
|
202
|
-
return null;
|
|
203
|
-
return { path: held.path, reference: { revision: reference.revision } };
|
|
204
|
-
}
|
|
205
227
|
return null;
|
|
206
228
|
}
|
|
207
229
|
export function parseEnumeration(body, mode) {
|
|
@@ -226,17 +248,60 @@ export function parseEnumeration(body, mode) {
|
|
|
226
248
|
return null;
|
|
227
249
|
changes.push(mapped);
|
|
228
250
|
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
continue;
|
|
232
|
-
}
|
|
233
|
-
const attachments = parseOriginals(held.originals);
|
|
234
|
-
if (attachments === null)
|
|
251
|
+
const next = held.next === undefined ? undefined : readPage(held.next);
|
|
252
|
+
if (next === null)
|
|
235
253
|
return null;
|
|
236
|
-
authorities.push({
|
|
254
|
+
authorities.push({
|
|
255
|
+
authority: held.authority,
|
|
256
|
+
...at,
|
|
257
|
+
changes,
|
|
258
|
+
...(next === undefined ? {} : { next }),
|
|
259
|
+
});
|
|
237
260
|
}
|
|
238
261
|
return { authorities };
|
|
239
262
|
}
|
|
263
|
+
function readPage(held) {
|
|
264
|
+
if (typeof held !== 'object' || held === null)
|
|
265
|
+
return null;
|
|
266
|
+
const { after, through, read } = held;
|
|
267
|
+
if (typeof after !== 'string' || !DECIMAL.test(after))
|
|
268
|
+
return null;
|
|
269
|
+
if (typeof through !== 'string' || !DECIMAL.test(through))
|
|
270
|
+
return null;
|
|
271
|
+
if (typeof read !== 'number' || !Number.isSafeInteger(read) || read < 0)
|
|
272
|
+
return null;
|
|
273
|
+
return { after, through, read };
|
|
274
|
+
}
|
|
275
|
+
function advances(asked, next) {
|
|
276
|
+
const moved = BigInt(next.through) - BigInt(asked.through);
|
|
277
|
+
return moved > 0n || (moved === 0n && next.after === asked.after && next.read > asked.read);
|
|
278
|
+
}
|
|
279
|
+
export async function wholeView(first, more) {
|
|
280
|
+
const changes = new Map(first.changes.map((change) => [change.path, change]));
|
|
281
|
+
let view = first;
|
|
282
|
+
while (view.next !== undefined) {
|
|
283
|
+
const asked = view.next;
|
|
284
|
+
const page = await more(asked);
|
|
285
|
+
if ('kind' in page)
|
|
286
|
+
return page;
|
|
287
|
+
if (page.position !== asked.through ||
|
|
288
|
+
page.logEpoch !== first.logEpoch ||
|
|
289
|
+
(page.next !== undefined && !advances(asked, page.next))) {
|
|
290
|
+
return { kind: 'transport-uncertainty' };
|
|
291
|
+
}
|
|
292
|
+
for (const change of page.changes) {
|
|
293
|
+
changes.delete(change.path);
|
|
294
|
+
changes.set(change.path, change);
|
|
295
|
+
}
|
|
296
|
+
view = page;
|
|
297
|
+
}
|
|
298
|
+
return {
|
|
299
|
+
authority: first.authority,
|
|
300
|
+
position: view.position,
|
|
301
|
+
logEpoch: first.logEpoch,
|
|
302
|
+
changes: [...changes.values()],
|
|
303
|
+
};
|
|
304
|
+
}
|
|
240
305
|
export function advancedScope(scope, view) {
|
|
241
306
|
const files = new Map(scope.files.map((file) => [file.path, file]));
|
|
242
307
|
const contents = new Map(scope.contents.map((entry) => [entry.path, entry.content]));
|
|
@@ -245,18 +310,15 @@ export function advancedScope(scope, view) {
|
|
|
245
310
|
contents.delete(change.path);
|
|
246
311
|
if ('removed' in change)
|
|
247
312
|
continue;
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
313
|
+
files.set(change.path, {
|
|
314
|
+
path: change.path,
|
|
315
|
+
revision: change.revision,
|
|
316
|
+
version: change.version,
|
|
317
|
+
...headed(change.head),
|
|
318
|
+
...('binary' in change ? { binary: change.binary } : {}),
|
|
319
|
+
});
|
|
320
|
+
if ('content' in change)
|
|
255
321
|
contents.set(change.path, change.content);
|
|
256
|
-
continue;
|
|
257
|
-
}
|
|
258
|
-
const { revision } = change.reference;
|
|
259
|
-
files.set(change.path, { path: change.path, revision, version: revision });
|
|
260
322
|
}
|
|
261
323
|
return {
|
|
262
324
|
...scope,
|
|
@@ -274,16 +336,16 @@ export function bootstrapOf(scope) {
|
|
|
274
336
|
const documents = {};
|
|
275
337
|
const revisions = {};
|
|
276
338
|
const changes = {};
|
|
277
|
-
const
|
|
339
|
+
const binaryFiles = {};
|
|
278
340
|
for (const file of scope.files) {
|
|
279
341
|
if (file.revision !== undefined)
|
|
280
342
|
revisions[file.path] = file.revision;
|
|
281
343
|
if (file.head !== undefined)
|
|
282
344
|
changes[file.path] = file.head;
|
|
283
345
|
const content = contents.get(file.path);
|
|
284
|
-
if (
|
|
285
|
-
|
|
286
|
-
else
|
|
346
|
+
if (file.binary !== undefined)
|
|
347
|
+
binaryFiles[file.path] = file.binary;
|
|
348
|
+
else if (content !== undefined)
|
|
287
349
|
documents[file.path] = content;
|
|
288
350
|
}
|
|
289
351
|
return {
|
|
@@ -292,8 +354,7 @@ export function bootstrapOf(scope) {
|
|
|
292
354
|
documents,
|
|
293
355
|
revisions,
|
|
294
356
|
changes,
|
|
295
|
-
|
|
296
|
-
...declared(scope.attachments),
|
|
357
|
+
binaryFiles,
|
|
297
358
|
};
|
|
298
359
|
}
|
|
299
360
|
export function schemaOf(scope, schema) {
|
|
@@ -314,23 +375,21 @@ export function refreshFrom(view, fromRoomVersion) {
|
|
|
314
375
|
const documents = {};
|
|
315
376
|
const revisions = {};
|
|
316
377
|
const changes = {};
|
|
317
|
-
const
|
|
378
|
+
const binaryFiles = {};
|
|
318
379
|
const removals = [];
|
|
319
380
|
for (const change of view.changes) {
|
|
320
381
|
if ('removed' in change) {
|
|
321
382
|
removals.push(change.path);
|
|
322
383
|
continue;
|
|
323
384
|
}
|
|
324
|
-
if ('content' in change)
|
|
385
|
+
if ('content' in change)
|
|
325
386
|
documents[change.path] = change.content;
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
binaryTargets.push(change.path);
|
|
333
|
-
revisions[change.path] = change.reference.revision;
|
|
387
|
+
else
|
|
388
|
+
binaryFiles[change.path] = change.binary;
|
|
389
|
+
if (change.revision !== undefined)
|
|
390
|
+
revisions[change.path] = change.revision;
|
|
391
|
+
if (change.head !== undefined)
|
|
392
|
+
changes[change.path] = change.head;
|
|
334
393
|
}
|
|
335
394
|
return {
|
|
336
395
|
kind: 'net-advancement',
|
|
@@ -338,8 +397,7 @@ export function refreshFrom(view, fromRoomVersion) {
|
|
|
338
397
|
documents,
|
|
339
398
|
revisions,
|
|
340
399
|
changes,
|
|
341
|
-
|
|
400
|
+
binaryFiles,
|
|
342
401
|
removals: removals.sort(),
|
|
343
|
-
...declared(view.attachments),
|
|
344
402
|
};
|
|
345
403
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { TrackedAuthority } from './discovery.js';
|
|
2
|
+
export type HouseReferrer = {
|
|
3
|
+
locator: string;
|
|
4
|
+
referrer: Readonly<Record<string, string>>;
|
|
5
|
+
};
|
|
6
|
+
export declare function houseReferrer(referrer: unknown, tracked: ReadonlyMap<string, TrackedAuthority>): HouseReferrer | null;
|
|
7
|
+
//# sourceMappingURL=referrer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"referrer.d.ts","sourceRoot":"","sources":["../src/referrer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,CAAC;AAgB5F,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAC7C,aAAa,GAAG,IAAI,CAqBtB"}
|
package/dist/referrer.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
function fields(value) {
|
|
2
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
3
|
+
? value
|
|
4
|
+
: null;
|
|
5
|
+
}
|
|
6
|
+
function named(held, ...keys) {
|
|
7
|
+
const present = Object.keys(held);
|
|
8
|
+
return (present.length === keys.length &&
|
|
9
|
+
keys.every((key) => typeof held[key] === 'string' && held[key] !== ''));
|
|
10
|
+
}
|
|
11
|
+
export function houseReferrer(referrer, tracked) {
|
|
12
|
+
const held = fields(referrer);
|
|
13
|
+
if (held === null)
|
|
14
|
+
return null;
|
|
15
|
+
if (named(held, 'room', 'path')) {
|
|
16
|
+
const entry = tracked.get(held.room);
|
|
17
|
+
if (entry === undefined)
|
|
18
|
+
return null;
|
|
19
|
+
return {
|
|
20
|
+
locator: entry.locator,
|
|
21
|
+
referrer: { room_ref: entry.authority, path: held.path },
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
if (named(held, 'room_ref', 'record')) {
|
|
25
|
+
const roomRef = held.room_ref;
|
|
26
|
+
const entry = [...tracked.values()].find((candidate) => candidate.authority === roomRef);
|
|
27
|
+
return {
|
|
28
|
+
locator: entry?.locator ?? roomRef,
|
|
29
|
+
referrer: { room_ref: roomRef, record: held.record },
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
if (named(held, 'message'))
|
|
33
|
+
return { locator: '', referrer: { message: held.message } };
|
|
34
|
+
return null;
|
|
35
|
+
}
|
package/dist/refusal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refusal.d.ts","sourceRoot":"","sources":["../src/refusal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,eAAe,EACf,aAAa,EACd,MAAM,wBAAwB,CAAC;AAEhC,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAOjE;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,EAC7B,OAAO,EAAE,eAAe,GACvB,aAAa,CAEf;
|
|
1
|
+
{"version":3,"file":"refusal.d.ts","sourceRoot":"","sources":["../src/refusal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,eAAe,EACf,aAAa,EACd,MAAM,wBAAwB,CAAC;AAEhC,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAOjE;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,EAC7B,OAAO,EAAE,eAAe,GACvB,aAAa,CAEf;AAqBD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,GACd,cAAc,GAAG,IAAI,CAMvB;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,GACd,cAAc,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAAG,IAAI,CAGpD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAQrF"}
|
package/dist/refusal.js
CHANGED
|
@@ -18,8 +18,9 @@ function doorFailure(status, body) {
|
|
|
18
18
|
const refusal = doorRefusal(body);
|
|
19
19
|
if (status === 401)
|
|
20
20
|
return { kind: 'revoked-authorization' };
|
|
21
|
-
if (refusal?.retryable === true)
|
|
21
|
+
if (refusal?.retryable === true || refusal?.code === 'update_required') {
|
|
22
22
|
return { kind: 'transport-uncertainty' };
|
|
23
|
+
}
|
|
23
24
|
if (status === 404 || refusal?.code === 'room_not_found')
|
|
24
25
|
return { kind: 'room-not-readable' };
|
|
25
26
|
if (status < 400)
|
package/dist/site.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { Adapter } from '@agentshouse/mdruntime';
|
|
2
2
|
import { type HouseSiteTransport } from './transport.js';
|
|
3
|
-
export declare function createSiteAdapter(transport: HouseSiteTransport): Adapter;
|
|
3
|
+
export declare function createSiteAdapter(transport: HouseSiteTransport, snapshot?: boolean): Adapter;
|
|
4
4
|
//# sourceMappingURL=site.d.ts.map
|
package/dist/site.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../src/site.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,
|
|
1
|
+
{"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../src/site.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAOR,MAAM,wBAAwB,CAAC;AA2BhC,OAAO,EAOL,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AAmCxB,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,kBAAkB,EAAE,QAAQ,UAAQ,GAAG,OAAO,CA+Q1F"}
|