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.
Files changed (58) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README-es.md +30 -5
  3. package/README-hi.md +31 -5
  4. package/README-pt.md +31 -5
  5. package/README.en.md +31 -5
  6. package/README.md +31 -5
  7. package/bin/darwin-arm64/indexd +0 -0
  8. package/bin/darwin-x64/indexd +0 -0
  9. package/bin/linux-arm64/indexd +0 -0
  10. package/bin/linux-x64/indexd +0 -0
  11. package/bin/win32-arm64/indexd.exe +0 -0
  12. package/bin/win32-x64/indexd.exe +0 -0
  13. package/client.js +1198 -117
  14. package/lib/combined.d.ts +20 -3
  15. package/lib/combined.d.ts.map +1 -1
  16. package/lib/combined.js +85 -15
  17. package/lib/combined.js.map +1 -1
  18. package/lib/content-search-worker.d.ts +8 -3
  19. package/lib/content-search-worker.d.ts.map +1 -1
  20. package/lib/content-search-worker.js +54 -27
  21. package/lib/content-search-worker.js.map +1 -1
  22. package/lib/content-search.d.ts +127 -7
  23. package/lib/content-search.d.ts.map +1 -1
  24. package/lib/content-search.js +571 -36
  25. package/lib/content-search.js.map +1 -1
  26. package/lib/content.d.ts +83 -5
  27. package/lib/content.d.ts.map +1 -1
  28. package/lib/content.js +351 -87
  29. package/lib/content.js.map +1 -1
  30. package/lib/export.d.ts +61 -0
  31. package/lib/export.d.ts.map +1 -1
  32. package/lib/export.js +217 -52
  33. package/lib/export.js.map +1 -1
  34. package/lib/find.d.ts.map +1 -1
  35. package/lib/find.js +73 -16
  36. package/lib/find.js.map +1 -1
  37. package/lib/http.d.ts +38 -2
  38. package/lib/http.d.ts.map +1 -1
  39. package/lib/http.js +279 -82
  40. package/lib/http.js.map +1 -1
  41. package/lib/reveal.d.ts +69 -3
  42. package/lib/reveal.d.ts.map +1 -1
  43. package/lib/reveal.js +140 -11
  44. package/lib/reveal.js.map +1 -1
  45. package/lib/tools.d.ts +30 -0
  46. package/lib/tools.d.ts.map +1 -1
  47. package/lib/tools.js +65 -3
  48. package/lib/tools.js.map +1 -1
  49. package/package.json +1 -1
  50. package/src/combined.ts +107 -17
  51. package/src/content-search-worker.ts +52 -24
  52. package/src/content-search.ts +710 -36
  53. package/src/content.ts +349 -73
  54. package/src/export.ts +240 -50
  55. package/src/find.ts +83 -16
  56. package/src/http.ts +271 -83
  57. package/src/reveal.ts +148 -10
  58. 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 two exact routes on the Web server:
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, withinRoots } from "./reveal.js";
25
+ import { executableFileRejection, openWithDefaultApp, resolveWithinRoots, revealInFileManager, } from "./reveal.js";
16
26
  import { statSync } from 'node:fs';
17
27
  const BODY_LIMIT = 64 * 1024;
18
- /** Mount the panel's routes when this profile runs a Web server. */
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.webServer;
50
+ inject.call(ctx, ['webServer', 'connection'], (scoped) => {
51
+ const server = webServerOf(scoped);
25
52
  if (server === undefined)
26
53
  return;
27
- scoped.effect(() => server.register({
28
- kind: 'exact',
29
- path: '/dsh-locator/search',
30
- handler: handler(scoped, async (body) => await search(rt, body)),
31
- }));
32
- scoped.effect(() => server.register({
33
- kind: 'exact',
34
- path: '/dsh-locator/status',
35
- handler: handler(scoped, async () => await status(rt, content)),
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
- scoped.effect(() => server.register({
49
- kind: 'exact',
50
- path: '/dsh-locator/content/rebuild',
51
- handler: handler(scoped, async (body) => {
52
- ensure?.();
53
- const full = body.full === true;
54
- const started = full ? content.rebuild() : content.refreshNow();
55
- return started ? { ok: true, started: true, full } : { ok: false, error: 'a content build is already running' };
56
- }),
57
- }));
58
- scoped.effect(() => server.register({
59
- kind: 'exact',
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
- scoped.effect(() => server.register({
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 = rejectionStatus(scoped, req);
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
- sendJson(res, 405, { ok: false, error: 'POST only' });
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 { query: request.query, ...result };
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 path = typeof raw.path === 'string' ? raw.path : '';
148
- if (path === '' || !withinRoots(path, rt.roots)) {
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
- const info = statSync(path);
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 path = typeof raw.path === 'string' ? raw.path : '';
169
- if (path === '' || !withinRoots(path, rt.roots)) {
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
- const info = statSync(path);
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
- function rejectionStatus(scoped, req) {
209
- const connection = scoped.get?.('connection');
210
- if (connection === undefined || typeof connection.requestRejection !== 'function')
211
- return undefined;
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
- throw new Error(`request body exceeds ${String(limit)} bytes`);
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
- const value = JSON.parse(Buffer.concat(chunks).toString('utf8'));
228
- if (typeof value !== 'object' || value === null || Array.isArray(value))
229
- throw new Error('request body must be an object');
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, status, body) {
429
+ function sendJson(res, statusCode, body) {
233
430
  if (res.writableEnded)
234
431
  return;
235
432
  const text = JSON.stringify(body);
236
- res.statusCode = status;
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":"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"}
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 in the platform file manager.
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
- /** Whether target is one of the roots or lives below one of them. */
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
- /** Open a path with its default application. */
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
@@ -1 +1 @@
1
- {"version":3,"file":"reveal.d.ts","sourceRoot":"","sources":["../src/reveal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAS7E;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKvE;AAED,gDAAgD;AAChD,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKtE"}
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"}