dsh-locator 0.8.2 → 0.10.0
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/CHANGELOG.md +47 -0
- package/README-es.md +30 -5
- package/README-hi.md +31 -5
- package/README-pt.md +31 -5
- package/README.en.md +31 -5
- package/README.md +31 -5
- package/bin/darwin-arm64/indexd +0 -0
- package/bin/darwin-x64/indexd +0 -0
- package/bin/linux-arm64/indexd +0 -0
- package/bin/linux-x64/indexd +0 -0
- package/bin/win32-arm64/indexd.exe +0 -0
- package/bin/win32-x64/indexd.exe +0 -0
- package/client.js +1198 -117
- package/lib/combined.d.ts +20 -3
- package/lib/combined.d.ts.map +1 -1
- package/lib/combined.js +85 -15
- package/lib/combined.js.map +1 -1
- package/lib/content-search-worker.d.ts +8 -3
- package/lib/content-search-worker.d.ts.map +1 -1
- package/lib/content-search-worker.js +54 -27
- package/lib/content-search-worker.js.map +1 -1
- package/lib/content-search.d.ts +127 -7
- package/lib/content-search.d.ts.map +1 -1
- package/lib/content-search.js +571 -36
- package/lib/content-search.js.map +1 -1
- package/lib/content.d.ts +83 -5
- package/lib/content.d.ts.map +1 -1
- package/lib/content.js +351 -87
- package/lib/content.js.map +1 -1
- package/lib/export.d.ts +61 -0
- package/lib/export.d.ts.map +1 -1
- package/lib/export.js +217 -52
- package/lib/export.js.map +1 -1
- package/lib/find.d.ts.map +1 -1
- package/lib/find.js +73 -16
- package/lib/find.js.map +1 -1
- package/lib/http.d.ts +38 -2
- package/lib/http.d.ts.map +1 -1
- package/lib/http.js +279 -82
- package/lib/http.js.map +1 -1
- package/lib/reveal.d.ts +69 -3
- package/lib/reveal.d.ts.map +1 -1
- package/lib/reveal.js +140 -11
- package/lib/reveal.js.map +1 -1
- package/lib/tools.d.ts +30 -0
- package/lib/tools.d.ts.map +1 -1
- package/lib/tools.js +65 -3
- package/lib/tools.js.map +1 -1
- package/package.json +1 -1
- package/src/combined.ts +107 -17
- package/src/content-search-worker.ts +52 -24
- package/src/content-search.ts +710 -36
- package/src/content.ts +349 -73
- package/src/export.ts +240 -50
- package/src/find.ts +83 -16
- package/src/http.ts +271 -83
- package/src/reveal.ts +148 -10
- package/src/tools.ts +83 -6
package/lib/http.js
CHANGED
|
@@ -2,91 +2,114 @@
|
|
|
2
2
|
* Optional HTTP surface for the Web GUI panel.
|
|
3
3
|
*
|
|
4
4
|
* The panel is a browser overlay (client.js) and cannot call the stdio engine
|
|
5
|
-
* directly, so the host exposes
|
|
5
|
+
* directly, so the host exposes exact routes on the Web server:
|
|
6
6
|
*
|
|
7
7
|
* POST /dsh-locator/search { query, limit, offset, sort, desc, ... }
|
|
8
8
|
* POST /dsh-locator/status {}
|
|
9
9
|
*
|
|
10
|
+
* Security is fail-closed. The routes only exist when the host's `connection`
|
|
11
|
+
* service — the browser authentication + Host/Origin trust fence — is
|
|
12
|
+
* available, so a profile without it mounts no locator HTTP surface at all.
|
|
13
|
+
* Every request then asks that service for a rejection first; if the service
|
|
14
|
+
* disappeared or its check fails, the route answers 503 instead of allowing
|
|
15
|
+
* the call. On top of that fence each request must be a `POST` with an
|
|
16
|
+
* `application/json` content type (415 otherwise), the body is capped at
|
|
17
|
+
* 64 KiB, and a cross-site `Origin`/`Sec-Fetch-Site` marker is refused locally
|
|
18
|
+
* as defense in depth.
|
|
19
|
+
*
|
|
10
20
|
* Registration is optional: headless and TUI profiles have no `webServer`
|
|
11
21
|
* service, and the plugin still works there through its tools.
|
|
12
22
|
* @module dsh-locator/http
|
|
13
23
|
*/
|
|
14
24
|
import { readCombinedRequest, runCombinedSearch } from "./combined.js";
|
|
15
|
-
import { openWithDefaultApp, revealInFileManager,
|
|
25
|
+
import { executableFileRejection, openWithDefaultApp, resolveWithinRoots, revealInFileManager, } from "./reveal.js";
|
|
16
26
|
import { statSync } from 'node:fs';
|
|
17
27
|
const BODY_LIMIT = 64 * 1024;
|
|
18
|
-
/**
|
|
28
|
+
/** A wire-format failure that must answer with a real HTTP status. */
|
|
29
|
+
class HttpError extends Error {
|
|
30
|
+
status;
|
|
31
|
+
constructor(status, message) {
|
|
32
|
+
super(message);
|
|
33
|
+
this.status = status;
|
|
34
|
+
this.name = 'HttpError';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Mount the panel's routes when this profile runs a Web server **and** the
|
|
39
|
+
* host connection trust fence. Without `connection` no route is registered:
|
|
40
|
+
* an unauthenticated locator HTTP surface is never exposed.
|
|
41
|
+
* @param ctx - plugin context.
|
|
42
|
+
* @param rt - locator runtime backing the name search.
|
|
43
|
+
* @param content - content index, when enabled.
|
|
44
|
+
* @param ensure - lazy content boot hook.
|
|
45
|
+
*/
|
|
19
46
|
export function registerHttp(ctx, rt, content, ensure) {
|
|
20
47
|
const inject = ctx.inject;
|
|
21
48
|
if (typeof inject !== 'function')
|
|
22
49
|
return;
|
|
23
|
-
inject.call(ctx, ['webServer'], (scoped) => {
|
|
24
|
-
const server = scoped
|
|
50
|
+
inject.call(ctx, ['webServer', 'connection'], (scoped) => {
|
|
51
|
+
const server = webServerOf(scoped);
|
|
25
52
|
if (server === undefined)
|
|
26
53
|
return;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
scoped.effect(() => server.register({
|
|
38
|
-
kind: 'exact',
|
|
39
|
-
path: '/dsh-locator/reveal',
|
|
40
|
-
handler: handler(scoped, async (body) => await reveal(rt, body)),
|
|
41
|
-
}));
|
|
42
|
-
scoped.effect(() => server.register({
|
|
43
|
-
kind: 'exact',
|
|
44
|
-
path: '/dsh-locator/combined',
|
|
45
|
-
handler: handler(scoped, async (body) => await combined(rt, content, ensure, body)),
|
|
46
|
-
}));
|
|
54
|
+
// Hard dependency: no trust fence, no routes (fail closed, never "allow").
|
|
55
|
+
if (activeConnection(scoped) === undefined)
|
|
56
|
+
return;
|
|
57
|
+
const route = (path, run) => {
|
|
58
|
+
scoped.effect(() => server.register({ kind: 'exact', path, handler: handler(scoped, run) }));
|
|
59
|
+
};
|
|
60
|
+
route('/dsh-locator/search', async (body) => await search(rt, body));
|
|
61
|
+
route('/dsh-locator/status', async () => await status(rt, content));
|
|
62
|
+
route('/dsh-locator/reveal', async (body) => await reveal(rt, body));
|
|
63
|
+
route('/dsh-locator/combined', async (body) => await combined(rt, content, ensure, body));
|
|
47
64
|
if (content !== undefined) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
path: '/dsh-locator/content',
|
|
61
|
-
handler: handler(scoped, async (body) => {
|
|
62
|
-
ensure?.();
|
|
63
|
-
const query = typeof body.query === 'string' ? body.query : '';
|
|
64
|
-
const limit = typeof body.limit === 'number' ? body.limit : 30;
|
|
65
|
-
return { ok: true, query, hits: await content.search(query, limit), state: content.status() };
|
|
66
|
-
}),
|
|
67
|
-
}));
|
|
65
|
+
route('/dsh-locator/content/rebuild', async (body) => {
|
|
66
|
+
ensure?.();
|
|
67
|
+
const full = body.full === true;
|
|
68
|
+
const started = full ? content.rebuild() : content.refreshNow();
|
|
69
|
+
return started ? { ok: true, started: true, full } : { ok: false, error: 'a content build is already running' };
|
|
70
|
+
});
|
|
71
|
+
route('/dsh-locator/content', async (body) => {
|
|
72
|
+
ensure?.();
|
|
73
|
+
const query = typeof body.query === 'string' ? body.query : '';
|
|
74
|
+
const limit = typeof body.limit === 'number' ? body.limit : 30;
|
|
75
|
+
return { ok: true, query, hits: await content.search(query, limit), state: content.status() };
|
|
76
|
+
});
|
|
68
77
|
}
|
|
69
|
-
|
|
70
|
-
kind: 'exact',
|
|
71
|
-
path: '/dsh-locator/open',
|
|
72
|
-
handler: handler(scoped, async (body) => await openPath(rt, body)),
|
|
73
|
-
}));
|
|
78
|
+
route('/dsh-locator/open', async (body) => await openPath(rt, body));
|
|
74
79
|
});
|
|
75
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Wrap one route body. The order is the security order: trust fence first,
|
|
83
|
+
* then method, then media type, then the bounded JSON body.
|
|
84
|
+
*/
|
|
76
85
|
function handler(scoped, run) {
|
|
77
86
|
return async (req, res) => {
|
|
78
|
-
const rejection =
|
|
87
|
+
const rejection = trustRejection(scoped, req);
|
|
79
88
|
if (rejection !== undefined) {
|
|
80
89
|
res.statusCode = rejection;
|
|
81
90
|
res.end();
|
|
82
91
|
return;
|
|
83
92
|
}
|
|
84
93
|
if (req.method !== 'POST') {
|
|
85
|
-
|
|
94
|
+
res.statusCode = 405;
|
|
95
|
+
res.setHeader('allow', 'POST');
|
|
96
|
+
res.end();
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (!isJsonContentType(req.headers['content-type'])) {
|
|
100
|
+
sendJson(res, 415, { ok: false, error: 'content-type must be application/json' });
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
let body;
|
|
104
|
+
try {
|
|
105
|
+
body = await readJson(req, BODY_LIMIT);
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
const status = error instanceof HttpError ? error.status : 400;
|
|
109
|
+
sendJson(res, status, { ok: false, error: messageOf(error) });
|
|
86
110
|
return;
|
|
87
111
|
}
|
|
88
112
|
try {
|
|
89
|
-
const body = await readJson(req, BODY_LIMIT);
|
|
90
113
|
const value = await run(body);
|
|
91
114
|
sendJson(res, 200, { ok: true, ...asRecord(value) });
|
|
92
115
|
}
|
|
@@ -95,6 +118,127 @@ function handler(scoped, run) {
|
|
|
95
118
|
}
|
|
96
119
|
};
|
|
97
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* The connection trust fence, fail-closed.
|
|
123
|
+
*
|
|
124
|
+
* A missing/inactive `connection` service, a throwing check, or a numeric
|
|
125
|
+
* rejection all refuse the request. When the service accepts the request the
|
|
126
|
+
* local same-origin markers are checked again, so a future trust-policy
|
|
127
|
+
* regression here cannot silently expose a route to another site.
|
|
128
|
+
* @returns an HTTP status to reject with, or undefined to proceed.
|
|
129
|
+
*/
|
|
130
|
+
function trustRejection(scoped, req) {
|
|
131
|
+
const connection = activeConnection(scoped);
|
|
132
|
+
if (connection === undefined)
|
|
133
|
+
return 503;
|
|
134
|
+
let rejection;
|
|
135
|
+
try {
|
|
136
|
+
rejection = connection.requestRejection(req);
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return 503;
|
|
140
|
+
}
|
|
141
|
+
if (typeof rejection === 'number')
|
|
142
|
+
return rejection;
|
|
143
|
+
return originRejection(req.headers);
|
|
144
|
+
}
|
|
145
|
+
/** Read the active connection implementation; inactive/missing/throwing all mean "unavailable". */
|
|
146
|
+
function activeConnection(scoped) {
|
|
147
|
+
let value;
|
|
148
|
+
try {
|
|
149
|
+
const get = scoped.get;
|
|
150
|
+
value = typeof get === 'function'
|
|
151
|
+
? get.call(scoped, 'connection', true)
|
|
152
|
+
: Reflect.get(scoped, 'connection');
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
return undefined;
|
|
156
|
+
}
|
|
157
|
+
if (typeof value !== 'object' || value === null)
|
|
158
|
+
return undefined;
|
|
159
|
+
const requestRejection = value.requestRejection;
|
|
160
|
+
if (typeof requestRejection !== 'function')
|
|
161
|
+
return undefined;
|
|
162
|
+
return value;
|
|
163
|
+
}
|
|
164
|
+
function webServerOf(scoped) {
|
|
165
|
+
let value;
|
|
166
|
+
try {
|
|
167
|
+
const get = scoped.get;
|
|
168
|
+
value = typeof get === 'function'
|
|
169
|
+
? get.call(scoped, 'webServer', true)
|
|
170
|
+
: Reflect.get(scoped, 'webServer');
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
return undefined;
|
|
174
|
+
}
|
|
175
|
+
if (typeof value !== 'object' || value === null)
|
|
176
|
+
return undefined;
|
|
177
|
+
const register = value.register;
|
|
178
|
+
return typeof register === 'function' ? value : undefined;
|
|
179
|
+
}
|
|
180
|
+
/** First value of a Node header that may arrive repeated. */
|
|
181
|
+
function headerValue(headers, name) {
|
|
182
|
+
const raw = headers[name];
|
|
183
|
+
if (typeof raw === 'string')
|
|
184
|
+
return raw;
|
|
185
|
+
if (Array.isArray(raw)) {
|
|
186
|
+
const first = raw[0];
|
|
187
|
+
return typeof first === 'string' ? first : undefined;
|
|
188
|
+
}
|
|
189
|
+
return undefined;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* The exact JSON media type required by every locator route. A charset or any
|
|
193
|
+
* other parameter is tolerated (`application/json; charset=utf-8`), any other
|
|
194
|
+
* essence (including `text/plain` and a missing header) is not.
|
|
195
|
+
* @param value - the raw `content-type` header value.
|
|
196
|
+
*/
|
|
197
|
+
export function isJsonContentType(value) {
|
|
198
|
+
const raw = Array.isArray(value) ? value[0] : value;
|
|
199
|
+
if (typeof raw !== 'string')
|
|
200
|
+
return false;
|
|
201
|
+
const essence = raw.split(';', 1)[0]?.trim().toLowerCase();
|
|
202
|
+
return essence === 'application/json';
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* The local same-origin fence, defense in depth behind the host connection
|
|
206
|
+
* check. A `Sec-Fetch-Site: cross-site` marker is refused; when a browser
|
|
207
|
+
* attaches an `Origin`, it must name this listener's own authority. Requests
|
|
208
|
+
* without browser markers (CLI clients) pass: they are already gated by
|
|
209
|
+
* authentication.
|
|
210
|
+
* @param headers - request headers.
|
|
211
|
+
* @returns 403 when the request is provably cross-site, else undefined.
|
|
212
|
+
*/
|
|
213
|
+
export function originRejection(headers) {
|
|
214
|
+
const site = headerValue(headers, 'sec-fetch-site');
|
|
215
|
+
if (site !== undefined && site.toLowerCase() === 'cross-site')
|
|
216
|
+
return 403;
|
|
217
|
+
const origin = headerValue(headers, 'origin');
|
|
218
|
+
if (origin === undefined || origin === '')
|
|
219
|
+
return undefined;
|
|
220
|
+
const host = headerValue(headers, 'host');
|
|
221
|
+
// An Origin without a Host cannot be compared; a local request always has one.
|
|
222
|
+
if (host === undefined || host === '')
|
|
223
|
+
return 403;
|
|
224
|
+
try {
|
|
225
|
+
const originUrl = new URL(origin);
|
|
226
|
+
const scheme = originUrl.protocol === 'https:'
|
|
227
|
+
? 'https:'
|
|
228
|
+
: originUrl.protocol === 'http:'
|
|
229
|
+
? 'http:'
|
|
230
|
+
: undefined;
|
|
231
|
+
// Opaque origins (`Origin: null`, sandboxed frames, file: pages) and every
|
|
232
|
+
// non-HTTP scheme have no authority this listener can be serving.
|
|
233
|
+
if (scheme === undefined)
|
|
234
|
+
return 403;
|
|
235
|
+
const hostUrl = new URL(`${scheme}//${host}`);
|
|
236
|
+
return originUrl.host === hostUrl.host ? undefined : 403;
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
return 403;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
98
242
|
async function search(rt, raw) {
|
|
99
243
|
const body = raw;
|
|
100
244
|
const limit = clampNumber(body.limit, 1, rt.config.maxResults, 100);
|
|
@@ -134,51 +278,95 @@ async function combined(rt, content, ensure, raw) {
|
|
|
134
278
|
search: async (args) => await rt.search(args),
|
|
135
279
|
maxResults: rt.config.maxResults,
|
|
136
280
|
...(content === undefined ? {} : {
|
|
137
|
-
contentSearch: async (query, limit) => await content.search(query, limit),
|
|
281
|
+
contentSearch: async (query, limit, options) => await content.search(query, limit, options),
|
|
138
282
|
contentStatus: () => content.status(),
|
|
139
283
|
...(ensure === undefined ? {} : { ensure }),
|
|
140
284
|
}),
|
|
141
285
|
};
|
|
142
286
|
const request = readCombinedRequest(raw, rt.config.maxResults);
|
|
143
287
|
const result = await runCombinedSearch(deps, request);
|
|
144
|
-
return {
|
|
288
|
+
return {
|
|
289
|
+
query: request.query,
|
|
290
|
+
matchMode: request.matchMode,
|
|
291
|
+
caseSensitive: request.caseSensitive,
|
|
292
|
+
wholeWord: request.wholeWord,
|
|
293
|
+
sessionId: request.sessionId,
|
|
294
|
+
...result,
|
|
295
|
+
};
|
|
145
296
|
}
|
|
297
|
+
/**
|
|
298
|
+
* Reveal one path in the platform file manager. The path is authorized and
|
|
299
|
+
* canonicalized first, so the file manager is pointed at the real file inside
|
|
300
|
+
* a root, never at a symlink that leaves it.
|
|
301
|
+
*/
|
|
146
302
|
async function reveal(rt, raw) {
|
|
147
|
-
const
|
|
148
|
-
|
|
303
|
+
const requested = typeof raw.path === 'string' ? raw.path : '';
|
|
304
|
+
const resolved = requested === '' ? undefined : resolveWithinRoots(requested, rt.roots);
|
|
305
|
+
if (resolved === undefined)
|
|
149
306
|
return { ok: false, error: 'path is outside the indexed roots' };
|
|
150
|
-
|
|
307
|
+
let info;
|
|
151
308
|
try {
|
|
152
|
-
|
|
153
|
-
if (!info.isFile() && !info.isDirectory())
|
|
154
|
-
return { ok: false, error: 'not a file or directory' };
|
|
309
|
+
info = statSync(resolved.path);
|
|
155
310
|
}
|
|
156
311
|
catch {
|
|
157
312
|
return { ok: false, error: 'path does not exist' };
|
|
158
313
|
}
|
|
314
|
+
if (!info.isFile() && !info.isDirectory())
|
|
315
|
+
return { ok: false, error: 'not a file or directory' };
|
|
316
|
+
// TOCTOU best effort: re-canonicalize immediately before handing the path to
|
|
317
|
+
// another process. This closes the window between authorization and spawn,
|
|
318
|
+
// though the platform opener still resolves the path itself.
|
|
319
|
+
const final = resolveWithinRoots(resolved.path, rt.roots);
|
|
320
|
+
if (final === undefined)
|
|
321
|
+
return { ok: false, error: 'path is outside the indexed roots' };
|
|
159
322
|
try {
|
|
160
|
-
await revealInFileManager(path);
|
|
323
|
+
await revealInFileManager(final.path);
|
|
161
324
|
return { ok: true };
|
|
162
325
|
}
|
|
163
326
|
catch (error) {
|
|
164
327
|
return { ok: false, error: messageOf(error) };
|
|
165
328
|
}
|
|
166
329
|
}
|
|
330
|
+
/**
|
|
331
|
+
* Open one path with the platform's default application: canonicalized inside
|
|
332
|
+
* the roots, still a regular file, and never an executable or script type.
|
|
333
|
+
*/
|
|
167
334
|
async function openPath(rt, raw) {
|
|
168
|
-
const
|
|
169
|
-
|
|
335
|
+
const requested = typeof raw.path === 'string' ? raw.path : '';
|
|
336
|
+
const resolved = requested === '' ? undefined : resolveWithinRoots(requested, rt.roots);
|
|
337
|
+
if (resolved === undefined)
|
|
170
338
|
return { ok: false, error: 'path is outside the indexed roots' };
|
|
339
|
+
let info;
|
|
340
|
+
try {
|
|
341
|
+
info = statSync(resolved.path);
|
|
171
342
|
}
|
|
343
|
+
catch {
|
|
344
|
+
return { ok: false, error: 'path does not exist' };
|
|
345
|
+
}
|
|
346
|
+
if (!info.isFile())
|
|
347
|
+
return { ok: false, error: 'not a file' };
|
|
348
|
+
const refusal = executableFileRejection(resolved.path, info.mode);
|
|
349
|
+
if (refusal !== undefined)
|
|
350
|
+
return { ok: false, error: refusal };
|
|
351
|
+
// TOCTOU best effort: re-canonicalize and re-check the executable guard on
|
|
352
|
+
// the path that is actually handed to the opener.
|
|
353
|
+
const final = resolveWithinRoots(resolved.path, rt.roots);
|
|
354
|
+
if (final === undefined)
|
|
355
|
+
return { ok: false, error: 'path is outside the indexed roots' };
|
|
356
|
+
let finalInfo;
|
|
172
357
|
try {
|
|
173
|
-
|
|
174
|
-
if (!info.isFile())
|
|
175
|
-
return { ok: false, error: 'not a file' };
|
|
358
|
+
finalInfo = statSync(final.path);
|
|
176
359
|
}
|
|
177
360
|
catch {
|
|
178
361
|
return { ok: false, error: 'path does not exist' };
|
|
179
362
|
}
|
|
363
|
+
if (!finalInfo.isFile())
|
|
364
|
+
return { ok: false, error: 'not a file' };
|
|
365
|
+
const finalRefusal = executableFileRejection(final.path, finalInfo.mode);
|
|
366
|
+
if (finalRefusal !== undefined)
|
|
367
|
+
return { ok: false, error: finalRefusal };
|
|
180
368
|
try {
|
|
181
|
-
await openWithDefaultApp(path);
|
|
369
|
+
await openWithDefaultApp(final.path);
|
|
182
370
|
return { ok: true };
|
|
183
371
|
}
|
|
184
372
|
catch (error) {
|
|
@@ -205,35 +393,44 @@ async function status(rt, content) {
|
|
|
205
393
|
...(rt.status.warning === undefined ? {} : { warning: rt.status.warning }),
|
|
206
394
|
};
|
|
207
395
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
const rejection = connection.requestRejection(req);
|
|
213
|
-
return typeof rejection === 'number' ? rejection : undefined;
|
|
214
|
-
}
|
|
396
|
+
/**
|
|
397
|
+
* Collect a bounded JSON object body. Oversize bodies answer 413, malformed
|
|
398
|
+
* JSON or a non-object value answers 400.
|
|
399
|
+
*/
|
|
215
400
|
async function readJson(req, limit) {
|
|
216
401
|
const chunks = [];
|
|
217
402
|
let size = 0;
|
|
403
|
+
let tooLarge = false;
|
|
218
404
|
for await (const chunk of req) {
|
|
219
405
|
const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
220
406
|
size += buffer.length;
|
|
221
|
-
if (size > limit)
|
|
222
|
-
|
|
407
|
+
if (size > limit) {
|
|
408
|
+
tooLarge = true;
|
|
409
|
+
continue;
|
|
410
|
+
}
|
|
223
411
|
chunks.push(buffer);
|
|
224
412
|
}
|
|
413
|
+
if (tooLarge)
|
|
414
|
+
throw new HttpError(413, `request body exceeds ${String(limit)} bytes`);
|
|
225
415
|
if (size === 0)
|
|
226
416
|
return {};
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
417
|
+
let value;
|
|
418
|
+
try {
|
|
419
|
+
value = JSON.parse(Buffer.concat(chunks).toString('utf8'));
|
|
420
|
+
}
|
|
421
|
+
catch {
|
|
422
|
+
throw new HttpError(400, 'request body must be valid JSON');
|
|
423
|
+
}
|
|
424
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
425
|
+
throw new HttpError(400, 'request body must be an object');
|
|
426
|
+
}
|
|
230
427
|
return value;
|
|
231
428
|
}
|
|
232
|
-
function sendJson(res,
|
|
429
|
+
function sendJson(res, statusCode, body) {
|
|
233
430
|
if (res.writableEnded)
|
|
234
431
|
return;
|
|
235
432
|
const text = JSON.stringify(body);
|
|
236
|
-
res.statusCode =
|
|
433
|
+
res.statusCode = statusCode;
|
|
237
434
|
res.setHeader('content-type', 'application/json; charset=utf-8');
|
|
238
435
|
res.setHeader('cache-control', 'no-store');
|
|
239
436
|
res.end(text);
|
package/lib/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAqB,MAAM,eAAe,CAAA;AACzF,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AA2BlC,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAA;AAE5B,oEAAoE;AACpE,MAAM,UAAU,YAAY,CAAC,GAAY,EAAE,EAAkB,EAAE,OAAsB,EAAE,MAAmB;IACxG,MAAM,MAAM,GAAI,GAEd,CAAC,MAAM,CAAA;IACT,IAAI,OAAO,MAAM,KAAK,UAAU;QAAE,OAAM;IACxC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,MAAe,EAAE,EAAE;QAClD,MAAM,MAAM,GAAI,MAAmD,CAAC,SAAS,CAAA;QAC7E,IAAI,MAAM,KAAK,SAAS;YAAE,OAAM;QAChC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;YAClC,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE,CAAC,MAAM,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;SAC/D,CAAC,CAAC,CAAA;QACH,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;YAClC,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;SAChE,CAAC,CAAC,CAAA;QACH,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;YAClC,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE,CAAC,MAAM,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;SAC/D,CAAC,CAAC,CAAA;QACH,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;YAClC,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE,CAAC,MAAM,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;SAClF,CAAC,CAAC,CAAA;QACH,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAClC,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,8BAA8B;gBACpC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE;oBACpC,MAAM,EAAE,EAAE,CAAA;oBACV,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAA;oBAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAA;oBAC/D,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAA;gBACjH,CAAC,CAAC;aACH,CAAC,CAAC,CAAA;YACH,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAClC,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,sBAAsB;gBAC5B,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE;oBACpC,MAAM,EAAE,EAAE,CAAA;oBACV,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;oBAC9D,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;oBAC9D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAA;gBAC/F,CAAC,CAAC;aACH,CAAC,CAAC,CAAA;QACL,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;YAClC,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE,CAAC,MAAM,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;SACjE,CAAC,CAAC,CAAA;IACL,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,OAAO,CACd,MAAe,EACf,GAAwD;IAExD,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACxB,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAC9C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,GAAG,CAAC,UAAU,GAAG,SAAS,CAAA;YAC1B,GAAG,CAAC,GAAG,EAAE,CAAA;YACT,OAAM;QACR,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC1B,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;YACrD,OAAM;QACR,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;YAC5C,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAA;YAC7B,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC,CAAA;AACH,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,EAAkB,EAAE,GAA4B;IACpE,MAAM,IAAI,GAAG,GAAiB,CAAA;IAC9B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;IACnE,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;IACtD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC/B,MAAM,IAAI,GAAe;QACvB,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QACvD,KAAK;QACL,MAAM;QACN,IAAI;QACJ,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI;QACxB,KAAK,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI;QAC1B,aAAa,EAAE,IAAI,CAAC,aAAa,KAAK,IAAI;QAC1C,SAAS,EAAE,IAAI,CAAC,SAAS,KAAK,IAAI;QAClC,SAAS,EAAE,IAAI,CAAC,SAAS,KAAK,IAAI;QAClC,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,IAAI;KACjC,CAAA;IACD,EAAE,CAAC,KAAK,EAAE,CAAA;IACV,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACpC,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,GAAG;QAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;KAClB,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,QAAQ,CACrB,EAAkB,EAClB,OAAiC,EACjC,MAAgC,EAChC,GAA4B;IAE5B,EAAE,CAAC,KAAK,EAAE,CAAA;IACV,MAAM,IAAI,GAAiB;QACzB,MAAM,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;QAC3C,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU;QAChC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/B,aAAa,EAAE,KAAK,EAAE,KAAa,EAAE,KAAa,EAAE,EAAE,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;YACzF,aAAa,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE;YACrC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;SAC5C,CAAC;KACH,CAAA;IACD,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAC9D,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACrD,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,MAAM,EAAE,CAAA;AAC5C,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,EAAkB,EAAE,GAA4B;IACpE,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IACzD,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAA;IAClE,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAA;IACnG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAA;IACpD,CAAC;IACD,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAA;QAC/B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAA;IAC/C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,EAAkB,EAAE,GAA4B;IACtE,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IACzD,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAA;IAClE,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAA;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAA;IACpD,CAAC;IACD,IAAI,CAAC;QACH,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAA;QAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAA;IAC/C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,EAAkB,EAAE,OAAsB;IAC9D,EAAE,CAAC,KAAK,EAAE,CAAA;IACV,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,EAAE,CAAA;IACtC,MAAM,YAAY,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAA;IACxG,OAAO;QACL,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO;QAC1B,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,CAAC;QAC7B,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;QACzB,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC;QACvB,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK;QAChC,QAAQ,EAAE,MAAM,EAAE,QAAQ,IAAI,KAAK;QACnC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,KAAK;QACzB,QAAQ,EAAE,MAAM,EAAE,QAAQ,KAAK,IAAI,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS;QACvE,QAAQ,EAAE,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC,QAAQ;QACzC,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,EAAE;QAC9B,OAAO,EAAE,YAAY;QACrB,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpE,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;KAC3E,CAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAC,MAAe,EAAE,GAAoB;IAC5D,MAAM,UAAU,GAAI,MAAyD,CAAC,GAAG,EAAE,CAAC,YAAY,CAA+B,CAAA;IAC/H,IAAI,UAAU,KAAK,SAAS,IAAI,OAAO,UAAU,CAAC,gBAAgB,KAAK,UAAU;QAAE,OAAO,SAAS,CAAA;IACnG,MAAM,SAAS,GAAG,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;IAClD,OAAO,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;AAC9D,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAoB,EAAE,KAAa;IACzD,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAmB,CAAC,CAAA;QAChF,IAAI,IAAI,MAAM,CAAC,MAAM,CAAA;QACrB,IAAI,IAAI,GAAG,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAChF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACrB,CAAC;IACD,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IACzB,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;IACzE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IAC1H,OAAO,KAAgC,CAAA;AACzC,CAAC;AAED,SAAS,QAAQ,CAAC,GAAmB,EAAE,MAAc,EAAE,IAAa;IAClE,IAAI,GAAG,CAAC,aAAa;QAAE,OAAM;IAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IACjC,GAAG,CAAC,UAAU,GAAG,MAAM,CAAA;IACvB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,iCAAiC,CAAC,CAAA;IAChE,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,CAAA;IAC1C,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AACf,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAA;AAC3H,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,GAAW,EAAE,GAAW,EAAE,QAAgB;IAC7E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAA;IACzE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AACxD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAgC,CAAC,CAAC,CAAC,EAAE,CAAA;AAC5F,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC/D,CAAC"}
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
package/lib/reveal.d.ts
CHANGED
|
@@ -1,15 +1,81 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Reveal one indexed path
|
|
2
|
+
* Reveal/open one indexed path safely.
|
|
3
|
+
*
|
|
4
|
+
* Both operations are authorized against the indexed roots on the **real**
|
|
5
|
+
* path: the target and every root are canonicalized with `realpath`, so a
|
|
6
|
+
* symlink cannot be used to point the file manager or the platform opener at
|
|
7
|
+
* something outside the configured roots. A target that does not exist is
|
|
8
|
+
* authorized through its nearest existing ancestor, whose real path must still
|
|
9
|
+
* live inside a root. Opening with the default application is additionally
|
|
10
|
+
* refused for executable and script file types (extension or Unix executable
|
|
11
|
+
* bit), because a document viewer route must never launch a program.
|
|
3
12
|
* @module dsh-locator/reveal
|
|
4
13
|
*/
|
|
5
|
-
/**
|
|
14
|
+
/** A canonical path and whether the target itself (not just an ancestor) exists. */
|
|
15
|
+
export interface ResolvedTarget {
|
|
16
|
+
/** Canonical real path; for a missing target, its nearest real ancestor plus the missing suffix. */
|
|
17
|
+
readonly path: string;
|
|
18
|
+
/** True when the target itself exists. */
|
|
19
|
+
readonly exists: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Canonical real path of `target`, or of its nearest existing ancestor with the
|
|
23
|
+
* missing suffix appended when `target` itself is absent.
|
|
24
|
+
*
|
|
25
|
+
* `realpath` resolves every symlink in an existing component, so the result is
|
|
26
|
+
* the only value that may be compared against canonical roots. Returns
|
|
27
|
+
* undefined for a relative path, a filesystem error other than ENOENT/ENOTDIR
|
|
28
|
+
* (for example EACCES), or a path whose root has no existing ancestor.
|
|
29
|
+
* @param target - absolute path to canonicalize.
|
|
30
|
+
* @returns the canonical target and whether it exists.
|
|
31
|
+
*/
|
|
32
|
+
export declare function realPathOf(target: string): ResolvedTarget | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* Authorize `target` against the indexed roots on canonical paths.
|
|
35
|
+
*
|
|
36
|
+
* The target and the roots are both resolved with `realpath`; a symlink that
|
|
37
|
+
* points outside a root is denied even though its lexical path looked inside.
|
|
38
|
+
* A missing target is still authorized when its nearest existing ancestor is
|
|
39
|
+
* inside a root, which keeps the containment check meaningful for paths that
|
|
40
|
+
* appear between the search and the reveal.
|
|
41
|
+
* @param target - requested absolute path.
|
|
42
|
+
* @param roots - configured indexed roots (any form: they are canonicalized).
|
|
43
|
+
* @returns the canonical path plus whether it exists, or undefined when the
|
|
44
|
+
* request must be refused.
|
|
45
|
+
*/
|
|
46
|
+
export declare function resolveWithinRoots(target: string, roots: readonly string[]): ResolvedTarget | undefined;
|
|
47
|
+
/** Whether target is one of the roots or lives below one of them (canonical paths). */
|
|
6
48
|
export declare function withinRoots(target: string, roots: readonly string[]): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Extensions that name a program or a script, not a document. Opening one with
|
|
51
|
+
* the platform's default handler can execute code (Windows ShellExecute,
|
|
52
|
+
* `.desktop` launchers, shell script interpreters), so the open route refuses
|
|
53
|
+
* them outright instead of relying on the handler's own judgement.
|
|
54
|
+
*/
|
|
55
|
+
export declare const EXECUTABLE_EXTENSIONS: ReadonlySet<string>;
|
|
56
|
+
/**
|
|
57
|
+
* Why opening `target` with the default application is unsafe, if it is.
|
|
58
|
+
*
|
|
59
|
+
* Extension matching is case-insensitive and uses the **real** path, so a
|
|
60
|
+
* harmless-looking symlink name cannot disguise a script. On Unix an
|
|
61
|
+
* executable permission bit is refused too, which covers extensionless
|
|
62
|
+
* binaries and scripts.
|
|
63
|
+
* @param target - canonical path about to be opened.
|
|
64
|
+
* @param mode - the target's `stat.mode`, when known.
|
|
65
|
+
* @returns a human-readable refusal, or undefined when the open may proceed.
|
|
66
|
+
*/
|
|
67
|
+
export declare function executableFileRejection(target: string, mode?: number): string | undefined;
|
|
7
68
|
/**
|
|
8
69
|
* Ask the platform to reveal a path in its file manager. Uses an argument
|
|
9
70
|
* vector, not a shell, so a path can never be interpreted as a command. The
|
|
10
71
|
* child is detached: the opener outlives the plugin call.
|
|
72
|
+
* @param target - canonical path inside the indexed roots.
|
|
11
73
|
*/
|
|
12
74
|
export declare function revealInFileManager(target: string): Promise<void>;
|
|
13
|
-
/**
|
|
75
|
+
/**
|
|
76
|
+
* Open a path with its default application.
|
|
77
|
+
* @param target - canonical path inside the indexed roots; callers must have
|
|
78
|
+
* rejected {@link executableFileRejection} first.
|
|
79
|
+
*/
|
|
14
80
|
export declare function openWithDefaultApp(target: string): Promise<void>;
|
|
15
81
|
//# sourceMappingURL=reveal.d.ts.map
|
package/lib/reveal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reveal.d.ts","sourceRoot":"","sources":["../src/reveal.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"reveal.d.ts","sourceRoot":"","sources":["../src/reveal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC7B,oGAAoG;IACpG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB;AAgBD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAiBrE;AAoBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc,GAAG,SAAS,CAOvG;AAED,uFAAuF;AACvF,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAE7E;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAQpD,CAAA;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASzF;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKvE;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKtE"}
|