@agentshouse/mdruntime-adapter 0.1.0-cd028205a5103 → 0.1.0-ce3fe65a95f49
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 +152 -94
- package/dist/actions.d.ts +61 -1
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +147 -117
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +170 -68
- package/dist/discovery.d.ts +2 -1
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +17 -3
- package/dist/gather.d.ts +1 -0
- package/dist/gather.d.ts.map +1 -1
- package/dist/gather.js +11 -6
- 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 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/model.d.ts +1 -1
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +6 -2
- package/dist/read.d.ts +14 -7
- package/dist/read.d.ts.map +1 -1
- package/dist/read.js +82 -77
- 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 +2 -5
- package/dist/refusal.d.ts.map +1 -1
- package/dist/refusal.js +6 -9
- package/dist/site.d.ts.map +1 -1
- package/dist/site.js +115 -20
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +125 -10
- package/dist/transport.d.ts +26 -9
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +3 -0
- package/dist/write.d.ts +3 -9
- package/dist/write.d.ts.map +1 -1
- package/dist/write.js +85 -11
- package/package.json +3 -4
- 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 { 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';
|
|
@@ -8,6 +8,7 @@ export type HouseManifestFile = {
|
|
|
8
8
|
revision: string | undefined;
|
|
9
9
|
version: string;
|
|
10
10
|
head?: HeadChange;
|
|
11
|
+
binary?: BinaryFile;
|
|
11
12
|
};
|
|
12
13
|
export type HouseContent = {
|
|
13
14
|
path: string;
|
|
@@ -17,10 +18,14 @@ export type HouseScope = LogPosition & {
|
|
|
17
18
|
anchor: string;
|
|
18
19
|
files: readonly HouseManifestFile[];
|
|
19
20
|
contents: readonly HouseContent[];
|
|
20
|
-
|
|
21
|
+
};
|
|
22
|
+
export type HouseCursor = {
|
|
23
|
+
room: string;
|
|
24
|
+
path: string | null;
|
|
21
25
|
};
|
|
22
26
|
export type HouseEnvelope = {
|
|
23
27
|
scopes: readonly HouseScope[];
|
|
28
|
+
next?: HouseCursor;
|
|
24
29
|
};
|
|
25
30
|
export type HouseGrant = {
|
|
26
31
|
method: 'GET';
|
|
@@ -41,14 +46,14 @@ export type HouseChange = {
|
|
|
41
46
|
head?: HeadChange;
|
|
42
47
|
} | {
|
|
43
48
|
path: string;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
49
|
+
binary: BinaryFile;
|
|
50
|
+
revision: string | undefined;
|
|
51
|
+
version: string;
|
|
52
|
+
head?: HeadChange;
|
|
47
53
|
};
|
|
48
54
|
export type HouseView = LogPosition & {
|
|
49
55
|
authority: string;
|
|
50
56
|
changes: readonly HouseChange[];
|
|
51
|
-
attachments?: readonly RoomAttachment[];
|
|
52
57
|
};
|
|
53
58
|
export type HouseEnumeration = {
|
|
54
59
|
authorities: readonly HouseView[];
|
|
@@ -61,9 +66,11 @@ export declare function headChange(held: {
|
|
|
61
66
|
readonly author?: unknown;
|
|
62
67
|
readonly created_at?: unknown;
|
|
63
68
|
}): HeadChange | undefined | null;
|
|
64
|
-
export declare function
|
|
69
|
+
export declare function binaryFileOf(held: Readonly<Record<string, unknown>>): BinaryFile | undefined | null;
|
|
65
70
|
export declare function parseEnvelope(body: unknown): HouseEnvelope | null;
|
|
66
71
|
export declare function parseSiteBootstrap(body: unknown): HouseScope | null;
|
|
72
|
+
export declare function siteBootstrapNext(body: unknown): string | null;
|
|
73
|
+
export declare function siteBootstrapOffset(body: unknown): number | null;
|
|
67
74
|
export declare function parseEnumeration(body: unknown, mode: HouseMode): HouseEnumeration | null;
|
|
68
75
|
export declare function advancedScope(scope: HouseScope, view: HouseView): HouseScope;
|
|
69
76
|
export declare function matchesScope(scope: HouseScope, tracked: TrackedAuthority): boolean;
|
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
|
@@ -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,29 @@ 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
|
+
...headed(head),
|
|
96
|
+
...binaried(binary),
|
|
97
|
+
};
|
|
98
98
|
}
|
|
99
99
|
function parseScope(value, mode) {
|
|
100
100
|
if (typeof value !== 'object' || value === null)
|
|
@@ -130,12 +130,15 @@ function parseScope(value, mode) {
|
|
|
130
130
|
return null;
|
|
131
131
|
contents.push({ path: content.path, content: content.content });
|
|
132
132
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
if (
|
|
133
|
+
return { anchor: manifest.anchor, ...at, files, contents };
|
|
134
|
+
}
|
|
135
|
+
function parseCursor(value) {
|
|
136
|
+
if (typeof value !== 'object' || value === null)
|
|
137
|
+
return null;
|
|
138
|
+
const { room, path } = value;
|
|
139
|
+
if (typeof room !== 'string' || (path !== null && typeof path !== 'string'))
|
|
137
140
|
return null;
|
|
138
|
-
return {
|
|
141
|
+
return { room, path };
|
|
139
142
|
}
|
|
140
143
|
export function parseEnvelope(body) {
|
|
141
144
|
if (typeof body !== 'object' || body === null)
|
|
@@ -149,11 +152,26 @@ export function parseEnvelope(body) {
|
|
|
149
152
|
return null;
|
|
150
153
|
scopes.push(scope);
|
|
151
154
|
}
|
|
152
|
-
|
|
155
|
+
if (!('next' in body) || body.next === undefined)
|
|
156
|
+
return { scopes };
|
|
157
|
+
const next = parseCursor(body.next);
|
|
158
|
+
return next === null ? null : { scopes, next };
|
|
153
159
|
}
|
|
154
160
|
export function parseSiteBootstrap(body) {
|
|
155
161
|
return parseScope(body, 'site');
|
|
156
162
|
}
|
|
163
|
+
export function siteBootstrapNext(body) {
|
|
164
|
+
if (typeof body !== 'object' || body === null || !('next' in body))
|
|
165
|
+
return null;
|
|
166
|
+
return typeof body.next === 'string' && body.next.length > 0 ? body.next : null;
|
|
167
|
+
}
|
|
168
|
+
export function siteBootstrapOffset(body) {
|
|
169
|
+
if (typeof body !== 'object' || body === null || !('offset' in body))
|
|
170
|
+
return null;
|
|
171
|
+
return Number.isSafeInteger(body.offset) && body.offset > 0
|
|
172
|
+
? body.offset
|
|
173
|
+
: null;
|
|
174
|
+
}
|
|
157
175
|
function parseChange(value, mode) {
|
|
158
176
|
if (typeof value !== 'object' || value === null)
|
|
159
177
|
return null;
|
|
@@ -163,8 +181,15 @@ function parseChange(value, mode) {
|
|
|
163
181
|
if (held.removed === true)
|
|
164
182
|
return { path: held.path, removed: true };
|
|
165
183
|
const head = headChange(held);
|
|
166
|
-
|
|
184
|
+
const binary = binaryFileOf(held);
|
|
185
|
+
if (head === null || binary === null)
|
|
167
186
|
return null;
|
|
187
|
+
if (binary !== undefined) {
|
|
188
|
+
if (mode === 'credential' && typeof held.revision !== 'string')
|
|
189
|
+
return null;
|
|
190
|
+
const revision = typeof held.revision === 'string' ? held.revision : binary.sha256;
|
|
191
|
+
return { path: held.path, binary, revision, version: revision, ...headed(head) };
|
|
192
|
+
}
|
|
168
193
|
if (mode === 'site') {
|
|
169
194
|
if (typeof held.content !== 'string' || typeof held.sha256 !== 'string')
|
|
170
195
|
return null;
|
|
@@ -185,12 +210,6 @@ function parseChange(value, mode) {
|
|
|
185
210
|
...headed(head),
|
|
186
211
|
};
|
|
187
212
|
}
|
|
188
|
-
if (typeof held.reference === 'object' && held.reference !== null) {
|
|
189
|
-
const reference = held.reference;
|
|
190
|
-
if (typeof reference.revision !== 'string')
|
|
191
|
-
return null;
|
|
192
|
-
return { path: held.path, reference: { revision: reference.revision } };
|
|
193
|
-
}
|
|
194
213
|
return null;
|
|
195
214
|
}
|
|
196
215
|
export function parseEnumeration(body, mode) {
|
|
@@ -215,14 +234,7 @@ export function parseEnumeration(body, mode) {
|
|
|
215
234
|
return null;
|
|
216
235
|
changes.push(mapped);
|
|
217
236
|
}
|
|
218
|
-
|
|
219
|
-
authorities.push({ authority: held.authority, ...at, changes });
|
|
220
|
-
continue;
|
|
221
|
-
}
|
|
222
|
-
const attachments = parseOriginals(held.originals);
|
|
223
|
-
if (attachments === null)
|
|
224
|
-
return null;
|
|
225
|
-
authorities.push({ authority: held.authority, ...at, changes, attachments });
|
|
237
|
+
authorities.push({ authority: held.authority, ...at, changes });
|
|
226
238
|
}
|
|
227
239
|
return { authorities };
|
|
228
240
|
}
|
|
@@ -234,18 +246,15 @@ export function advancedScope(scope, view) {
|
|
|
234
246
|
contents.delete(change.path);
|
|
235
247
|
if ('removed' in change)
|
|
236
248
|
continue;
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
249
|
+
files.set(change.path, {
|
|
250
|
+
path: change.path,
|
|
251
|
+
revision: change.revision,
|
|
252
|
+
version: change.version,
|
|
253
|
+
...headed(change.head),
|
|
254
|
+
...('binary' in change ? { binary: change.binary } : {}),
|
|
255
|
+
});
|
|
256
|
+
if ('content' in change)
|
|
244
257
|
contents.set(change.path, change.content);
|
|
245
|
-
continue;
|
|
246
|
-
}
|
|
247
|
-
const { revision } = change.reference;
|
|
248
|
-
files.set(change.path, { path: change.path, revision, version: revision });
|
|
249
258
|
}
|
|
250
259
|
return {
|
|
251
260
|
...scope,
|
|
@@ -263,16 +272,16 @@ export function bootstrapOf(scope) {
|
|
|
263
272
|
const documents = {};
|
|
264
273
|
const revisions = {};
|
|
265
274
|
const changes = {};
|
|
266
|
-
const
|
|
275
|
+
const binaryFiles = {};
|
|
267
276
|
for (const file of scope.files) {
|
|
268
277
|
if (file.revision !== undefined)
|
|
269
278
|
revisions[file.path] = file.revision;
|
|
270
279
|
if (file.head !== undefined)
|
|
271
280
|
changes[file.path] = file.head;
|
|
272
281
|
const content = contents.get(file.path);
|
|
273
|
-
if (
|
|
274
|
-
|
|
275
|
-
else
|
|
282
|
+
if (file.binary !== undefined)
|
|
283
|
+
binaryFiles[file.path] = file.binary;
|
|
284
|
+
else if (content !== undefined)
|
|
276
285
|
documents[file.path] = content;
|
|
277
286
|
}
|
|
278
287
|
return {
|
|
@@ -281,8 +290,7 @@ export function bootstrapOf(scope) {
|
|
|
281
290
|
documents,
|
|
282
291
|
revisions,
|
|
283
292
|
changes,
|
|
284
|
-
|
|
285
|
-
...declared(scope.attachments),
|
|
293
|
+
binaryFiles,
|
|
286
294
|
};
|
|
287
295
|
}
|
|
288
296
|
export function schemaOf(scope, schema) {
|
|
@@ -303,23 +311,21 @@ export function refreshFrom(view, fromRoomVersion) {
|
|
|
303
311
|
const documents = {};
|
|
304
312
|
const revisions = {};
|
|
305
313
|
const changes = {};
|
|
306
|
-
const
|
|
314
|
+
const binaryFiles = {};
|
|
307
315
|
const removals = [];
|
|
308
316
|
for (const change of view.changes) {
|
|
309
317
|
if ('removed' in change) {
|
|
310
318
|
removals.push(change.path);
|
|
311
319
|
continue;
|
|
312
320
|
}
|
|
313
|
-
if ('content' in change)
|
|
321
|
+
if ('content' in change)
|
|
314
322
|
documents[change.path] = change.content;
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
binaryTargets.push(change.path);
|
|
322
|
-
revisions[change.path] = change.reference.revision;
|
|
323
|
+
else
|
|
324
|
+
binaryFiles[change.path] = change.binary;
|
|
325
|
+
if (change.revision !== undefined)
|
|
326
|
+
revisions[change.path] = change.revision;
|
|
327
|
+
if (change.head !== undefined)
|
|
328
|
+
changes[change.path] = change.head;
|
|
323
329
|
}
|
|
324
330
|
return {
|
|
325
331
|
kind: 'net-advancement',
|
|
@@ -327,8 +333,7 @@ export function refreshFrom(view, fromRoomVersion) {
|
|
|
327
333
|
documents,
|
|
328
334
|
revisions,
|
|
329
335
|
changes,
|
|
330
|
-
|
|
336
|
+
binaryFiles,
|
|
331
337
|
removals: removals.sort(),
|
|
332
|
-
...declared(view.attachments),
|
|
333
338
|
};
|
|
334
339
|
}
|
|
@@ -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
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import type { AdapterFailure, DiscoverResult, ProviderRefusal, ScopedRefusal } from '@agentshouse/mdruntime';
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
export declare function doorRefusal(body: unknown): DoorRefusal | null;
|
|
6
|
-
export declare function scopedRefusal(locator: string, scope: ScopedRefusal['scope'], refusal: DoorRefusal): ScopedRefusal;
|
|
2
|
+
export declare function doorRefusal(body: unknown): ProviderRefusal | null;
|
|
3
|
+
export declare function scopedRefusal(locator: string, scope: ScopedRefusal['scope'], refusal: ProviderRefusal): ScopedRefusal;
|
|
7
4
|
export declare function classifyDoor(status: number, body: unknown, locator: string): AdapterFailure | null;
|
|
8
5
|
export declare function classifyRead(status: number, body: unknown, locator: string): AdapterFailure | {
|
|
9
6
|
kind: 'beyond-horizon';
|
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,
|
|
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
|
@@ -6,11 +6,11 @@ export function doorRefusal(body) {
|
|
|
6
6
|
const error = body.error;
|
|
7
7
|
if (typeof error.code !== 'string')
|
|
8
8
|
return null;
|
|
9
|
-
const { code, ...fields } = error;
|
|
10
|
-
return { code, fields, retryable:
|
|
9
|
+
const { code, retryable, ...fields } = error;
|
|
10
|
+
return { code, fields, retryable: retryable === true };
|
|
11
11
|
}
|
|
12
12
|
export function scopedRefusal(locator, scope, refusal) {
|
|
13
|
-
return { kind: 'scoped-refusal', locator, scope,
|
|
13
|
+
return { kind: 'scoped-refusal', locator, scope, ...refusal };
|
|
14
14
|
}
|
|
15
15
|
function doorFailure(status, body) {
|
|
16
16
|
if (status === 0)
|
|
@@ -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)
|
|
@@ -50,11 +51,7 @@ export function discoveryFailure(status, body) {
|
|
|
50
51
|
if (failure.kind === 'revoked-authorization')
|
|
51
52
|
return failure;
|
|
52
53
|
if (failure.kind === 'refused') {
|
|
53
|
-
return {
|
|
54
|
-
kind: 'contract-unavailable',
|
|
55
|
-
code: failure.refusal.code,
|
|
56
|
-
fields: failure.refusal.fields,
|
|
57
|
-
};
|
|
54
|
+
return { kind: 'contract-unavailable', ...failure.refusal };
|
|
58
55
|
}
|
|
59
56
|
return { kind: 'transport-uncertainty' };
|
|
60
57
|
}
|
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;AAyBhC,OAAO,EAOL,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AAmCxB,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,kBAAkB,GAAG,OAAO,CAqPxE"}
|