@miadi/chronicle-tui 0.3.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -21
- package/dist/App.d.ts +14 -5
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +595 -321
- package/dist/App.js.map +1 -1
- package/dist/actions.d.ts +31 -21
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +62 -44
- package/dist/actions.js.map +1 -1
- package/dist/api.d.ts +58 -30
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +129 -44
- package/dist/api.js.map +1 -1
- package/dist/attention.d.ts +50 -0
- package/dist/attention.d.ts.map +1 -0
- package/dist/attention.js +69 -0
- package/dist/attention.js.map +1 -0
- package/dist/bin.d.ts +2 -1
- package/dist/bin.d.ts.map +1 -1
- package/dist/bin.js +19 -11
- package/dist/bin.js.map +1 -1
- package/dist/data.d.ts +48 -12
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +124 -24
- package/dist/data.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/model.d.ts +10 -2
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +47 -35
- package/dist/model.js.map +1 -1
- package/dist/text.d.ts +23 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +57 -0
- package/dist/text.js.map +1 -0
- package/package.json +5 -4
package/dist/bin.js
CHANGED
|
@@ -3,8 +3,8 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
3
3
|
import { readFileSync } from "node:fs";
|
|
4
4
|
import { render } from "ink";
|
|
5
5
|
import { App } from "./App.js";
|
|
6
|
-
import { TOKEN_ENV, loadEnvFile } from "./api.js";
|
|
7
|
-
const USAGE = `miadi-chronicle [episode] [--root <dir>] [--search <text>] [--filter <text>] [--env <file>] [--url <url>]
|
|
6
|
+
import { ENV_FILE_KEYS, PERSON_TOKEN_ENV, TOKEN_ENV, loadEnvFile } from "./api.js";
|
|
7
|
+
const USAGE = `miadi-chronicle [episode] [--root <dir>] [--search <text>] [--filter <text>] [--attention] [--env <file>] [--url <url>]
|
|
8
8
|
|
|
9
9
|
Browse the Miadi Chronicle: list and filter episodes, search their text, read a
|
|
10
10
|
vessel's files, and open the room, the wheel or the vessel.
|
|
@@ -13,20 +13,25 @@ vessel's files, and open the room, the wheel or the vessel.
|
|
|
13
13
|
--root <dir> the chronicle (default: $MIADI_CHRONICLE_ROOT)
|
|
14
14
|
--search <text> start in full-text mode
|
|
15
15
|
--filter <text> start with a title filter
|
|
16
|
-
--
|
|
17
|
-
--
|
|
18
|
-
|
|
16
|
+
--attention open on the chronicle's attention board
|
|
17
|
+
--env <file> load these keys from a KEY=value file, nothing else:
|
|
18
|
+
${ENV_FILE_KEYS.join(", ")}
|
|
19
|
+
--url <url> the Miadi app to act through (default: MIADI_WEB_URL or 127.0.0.1:3335,
|
|
20
|
+
then MIADI_URL_BASE_INTERNAL; the public front only when named here)
|
|
19
21
|
--version, --help
|
|
20
22
|
|
|
21
23
|
Keys: / filter · Tab title|full text · ↑↓ j k · Enter open · Esc back
|
|
22
|
-
o doors · r QR · p five-stage proof · a attention ·
|
|
23
|
-
? all keys · q quit
|
|
24
|
+
o doors · r QR · p five-stage proof · a attention · ! attention board
|
|
25
|
+
v hold a review · ? all keys · q quit
|
|
24
26
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
+
${PERSON_TOKEN_ENV} names you: the header says who is reading, and a ceremony
|
|
28
|
+
or circle shows what your seat allows. ${TOKEN_ENV} passes the write gate:
|
|
29
|
+
answering attention and holding a review. Without either, the browser shows
|
|
30
|
+
what a visitor of the web room sees.
|
|
27
31
|
`;
|
|
28
32
|
function main(argv) {
|
|
29
33
|
// --env comes first, wherever it is written: everything below may read what it sets.
|
|
34
|
+
const withheld = [];
|
|
30
35
|
for (let index = 0; index < argv.length; index++) {
|
|
31
36
|
if (argv[index] !== "--env")
|
|
32
37
|
continue;
|
|
@@ -36,7 +41,7 @@ function main(argv) {
|
|
|
36
41
|
return 2;
|
|
37
42
|
}
|
|
38
43
|
try {
|
|
39
|
-
loadEnvFile(file);
|
|
44
|
+
withheld.push(...loadEnvFile(file));
|
|
40
45
|
}
|
|
41
46
|
catch (error) {
|
|
42
47
|
process.stderr.write(`Cannot read ${file}: ${error.message}\n`);
|
|
@@ -47,6 +52,7 @@ function main(argv) {
|
|
|
47
52
|
let url;
|
|
48
53
|
let search;
|
|
49
54
|
let filter;
|
|
55
|
+
let attention = false;
|
|
50
56
|
let episode;
|
|
51
57
|
for (let index = 0; index < argv.length; index++) {
|
|
52
58
|
const arg = argv[index];
|
|
@@ -69,6 +75,8 @@ function main(argv) {
|
|
|
69
75
|
search = argv[++index];
|
|
70
76
|
else if (arg === "--filter")
|
|
71
77
|
filter = argv[++index];
|
|
78
|
+
else if (arg === "--attention")
|
|
79
|
+
attention = true;
|
|
72
80
|
else if (arg.startsWith("--")) {
|
|
73
81
|
process.stderr.write(`Unknown option ${arg}\n\n${USAGE}`);
|
|
74
82
|
return 2;
|
|
@@ -84,7 +92,7 @@ function main(argv) {
|
|
|
84
92
|
process.stderr.write("miadi-chronicle needs a terminal. For a plain list, run: inquiry-weave catalog\n");
|
|
85
93
|
return 2;
|
|
86
94
|
}
|
|
87
|
-
render(_jsx(App, { root: root, search: search, query: filter, episode: episode, url: url }), { alternateScreen: true });
|
|
95
|
+
render(_jsx(App, { root: root, search: search, query: filter, episode: episode, attention: attention, url: url, withheld: withheld }), { alternateScreen: true });
|
|
88
96
|
return 0;
|
|
89
97
|
}
|
|
90
98
|
const code = main(process.argv.slice(2));
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.tsx"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.tsx"],"names":[],"mappings":"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"}
|
package/dist/data.d.ts
CHANGED
|
@@ -3,9 +3,15 @@
|
|
|
3
3
|
* it. The browser holds no chronicle rules of its own:
|
|
4
4
|
*
|
|
5
5
|
* - the catalog and the readings: `@miadi/inquiry-weave`
|
|
6
|
-
* - a vessel's summary, files, file text
|
|
6
|
+
* - a vessel's summary, files, file text, full-text search, the room rule and
|
|
7
|
+
* an episode's audience: `@miadi/episode-vessel`
|
|
7
8
|
* - the doors a reference opens, and OSC 8 links: `@miadi/inquiry-weave`
|
|
8
9
|
* - the five-stage proof: `@miadi/inquiry-weave` (git and the wheel, so only on demand)
|
|
10
|
+
*
|
|
11
|
+
* It shows a reader what the web room would show them (jgwill/Miadi#712): a
|
|
12
|
+
* visitor sees no `community` episode and nothing under `captures/` or
|
|
13
|
+
* `ceremonies/`; a reader the app lets write sees everything, as the room's
|
|
14
|
+
* file reader allows them.
|
|
9
15
|
*/
|
|
10
16
|
import { type Destination, type EpisodeStatus, type TextReference } from "@miadi/inquiry-weave";
|
|
11
17
|
import { type EpisodeFile, type EpisodeSummary, type SearchResult } from "@miadi/episode-vessel";
|
|
@@ -14,21 +20,36 @@ export interface Chronicle {
|
|
|
14
20
|
root: string;
|
|
15
21
|
rows: EpisodeRow[];
|
|
16
22
|
}
|
|
23
|
+
/** What this reader may see: decided by the app, most closed until it answers. */
|
|
24
|
+
export interface Access {
|
|
25
|
+
/** The app named a reader (a person or the writer): community episodes show. */
|
|
26
|
+
signedIn: boolean;
|
|
27
|
+
/** The app would record a write from this reader: the room's private folders show. */
|
|
28
|
+
mayWrite: boolean;
|
|
29
|
+
}
|
|
30
|
+
export declare const VISITOR: Access;
|
|
17
31
|
export declare function loadChronicle(root: string): Promise<Chronicle>;
|
|
32
|
+
/** The rows this reader sees. */
|
|
33
|
+
export declare function visibleRows(rows: readonly EpisodeRow[], access: Access): EpisodeRow[];
|
|
34
|
+
/** The room rule for this reader: a path it may list, read and search. */
|
|
35
|
+
export declare function inRoom(access: Access): (relativePath: string) => boolean;
|
|
18
36
|
export interface EpisodeDetail {
|
|
19
37
|
summary: EpisodeSummary | null;
|
|
20
38
|
files: EpisodeFile[];
|
|
21
39
|
error?: string;
|
|
22
40
|
}
|
|
23
|
-
export declare function loadDetail(root: string, name: string): EpisodeDetail;
|
|
24
|
-
export declare function loadText(root: string, name: string, file: string): {
|
|
41
|
+
export declare function loadDetail(root: string, name: string, access: Access): EpisodeDetail;
|
|
42
|
+
export declare function loadText(root: string, name: string, file: string, access: Access): {
|
|
25
43
|
content: string;
|
|
26
44
|
} | {
|
|
27
45
|
error: string;
|
|
28
46
|
};
|
|
29
|
-
/**
|
|
30
|
-
|
|
31
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Up to 1000 hits over the episodes this reader sees, newest episode first,
|
|
49
|
+
* file and line order kept inside each episode.
|
|
50
|
+
*/
|
|
51
|
+
export declare function search(root: string, query: string, rows: readonly EpisodeRow[], access: Access, signal?: AbortSignal): Promise<SearchResult>;
|
|
52
|
+
/** The episode a chronicle reference names among `rows`, or null when it names none or several. */
|
|
32
53
|
export declare function episodeOfReference(rows: readonly EpisodeRow[], uri: string): string | null;
|
|
33
54
|
export interface Doors {
|
|
34
55
|
title: string;
|
|
@@ -42,15 +63,30 @@ export interface Doors {
|
|
|
42
63
|
*/
|
|
43
64
|
export declare function episodeDoors(chronicle: Chronicle, name: string, file?: string): Promise<Doors>;
|
|
44
65
|
/**
|
|
45
|
-
* The doors of a reference found in a file. A ceremony or circle
|
|
46
|
-
*
|
|
47
|
-
*
|
|
66
|
+
* The doors of a reference found in a file. A ceremony or circle opens its
|
|
67
|
+
* pages only, which ask for the reader's seat: the wheel's record answers
|
|
68
|
+
* anyone, so it is never offered here (D9; jgwill/Miadi#706 security review, F6).
|
|
48
69
|
*/
|
|
49
|
-
export declare function referenceDoors(chronicle: Chronicle, ref: TextReference): Promise<Doors>;
|
|
70
|
+
export declare function referenceDoors(chronicle: Chronicle, ref: TextReference, rows: readonly EpisodeRow[]): Promise<Doors>;
|
|
50
71
|
/** The door a phone can open: the tailnet room, then the public one, then the first. */
|
|
51
72
|
export declare function phoneDoor(doors: readonly Destination[]): Destination | undefined;
|
|
52
73
|
export declare function qrLines(url: string, invert?: boolean): string[];
|
|
53
74
|
export declare function proof(root: string, name: string): Promise<EpisodeStatus>;
|
|
54
|
-
/**
|
|
55
|
-
|
|
75
|
+
/**
|
|
76
|
+
* Why a door may not be handed to the system opener, or null when it may: an
|
|
77
|
+
* http(s) page, or a `file:` path inside the chronicle that is a folder or a
|
|
78
|
+
* text, document or media file. Anything else (another scheme, a path outside,
|
|
79
|
+
* a script, a `.desktop` entry) stays text to copy
|
|
80
|
+
* (jgwill/Miadi#706 security review, F4).
|
|
81
|
+
*/
|
|
82
|
+
export declare function refuseToOpen(url: string, root: string): string | null;
|
|
83
|
+
/**
|
|
84
|
+
* Hand a door to the system opener. Returns the command used, or the reason it
|
|
85
|
+
* was not opened. The opener never inherits a token.
|
|
86
|
+
*/
|
|
87
|
+
export declare function openUrl(url: string, root: string, withheld?: readonly string[]): {
|
|
88
|
+
opened: string;
|
|
89
|
+
} | {
|
|
90
|
+
refused: string;
|
|
91
|
+
};
|
|
56
92
|
//# sourceMappingURL=data.d.ts.map
|
package/dist/data.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"}
|
package/dist/data.js
CHANGED
|
@@ -3,30 +3,57 @@
|
|
|
3
3
|
* it. The browser holds no chronicle rules of its own:
|
|
4
4
|
*
|
|
5
5
|
* - the catalog and the readings: `@miadi/inquiry-weave`
|
|
6
|
-
* - a vessel's summary, files, file text
|
|
6
|
+
* - a vessel's summary, files, file text, full-text search, the room rule and
|
|
7
|
+
* an episode's audience: `@miadi/episode-vessel`
|
|
7
8
|
* - the doors a reference opens, and OSC 8 links: `@miadi/inquiry-weave`
|
|
8
9
|
* - the five-stage proof: `@miadi/inquiry-weave` (git and the wheel, so only on demand)
|
|
10
|
+
*
|
|
11
|
+
* It shows a reader what the web room would show them (jgwill/Miadi#712): a
|
|
12
|
+
* visitor sees no `community` episode and nothing under `captures/` or
|
|
13
|
+
* `ceremonies/`; a reader the app lets write sees everything, as the room's
|
|
14
|
+
* file reader allows them.
|
|
9
15
|
*/
|
|
10
16
|
import { spawn } from "node:child_process";
|
|
11
17
|
import fs from "node:fs";
|
|
12
|
-
import
|
|
13
|
-
import {
|
|
18
|
+
import path from "node:path";
|
|
19
|
+
import { buildChronicleCatalog, episodeDoorStatus, readWebBases, resolveChronicleRef, resolveDoorContext, resolveForTerminal, resolveFoundationRefForTerminal, resolveWheelRefForTerminal, parseMiadiChronicleUri, } from "@miadi/inquiry-weave";
|
|
20
|
+
import { DOCUMENT_EXTENSIONS, MEDIA_EXTENSIONS, TEXT_EXTENSIONS, isOutsideTheRoom, listEpisodeFiles, listEpisodes, readEpisodeSummary, readEpisodeText, resolveChronicleRoot, searchVessels, } from "@miadi/episode-vessel";
|
|
14
21
|
import { renderUnicodeCompact } from "uqr";
|
|
15
22
|
import { sortRows, toRow } from "./model.js";
|
|
23
|
+
export const VISITOR = { signedIn: false, mayWrite: false };
|
|
16
24
|
export async function loadChronicle(root) {
|
|
17
25
|
const real = resolveChronicleRoot(root);
|
|
18
26
|
const catalog = await buildChronicleCatalog(real);
|
|
19
|
-
|
|
27
|
+
const audience = new Map();
|
|
28
|
+
try {
|
|
29
|
+
for (const episode of listEpisodes({ root: real }))
|
|
30
|
+
audience.set(episode.episodePath, episode.audience === "community" ? "community" : "public");
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// An unreadable shelf leaves every episode public, as the catalog does.
|
|
34
|
+
}
|
|
35
|
+
return { root: real, rows: sortRows(catalog.episodes.map((entry) => toRow(entry, audience.get(entry.name)))) };
|
|
20
36
|
}
|
|
21
|
-
|
|
37
|
+
/** The rows this reader sees. */
|
|
38
|
+
export function visibleRows(rows, access) {
|
|
39
|
+
return access.signedIn ? [...rows] : rows.filter((row) => row.audience !== "community");
|
|
40
|
+
}
|
|
41
|
+
/** The room rule for this reader: a path it may list, read and search. */
|
|
42
|
+
export function inRoom(access) {
|
|
43
|
+
return (relativePath) => access.mayWrite || !isOutsideTheRoom(relativePath);
|
|
44
|
+
}
|
|
45
|
+
export function loadDetail(root, name, access) {
|
|
22
46
|
try {
|
|
23
|
-
|
|
47
|
+
const allowed = inRoom(access);
|
|
48
|
+
return { summary: readEpisodeSummary(name, { root }), files: listEpisodeFiles(name, { root, include: (file) => allowed(file) }) };
|
|
24
49
|
}
|
|
25
50
|
catch (error) {
|
|
26
51
|
return { summary: null, files: [], error: error.message };
|
|
27
52
|
}
|
|
28
53
|
}
|
|
29
|
-
export function loadText(root, name, file) {
|
|
54
|
+
export function loadText(root, name, file, access) {
|
|
55
|
+
if (!inRoom(access)(file))
|
|
56
|
+
return { error: `${file} is outside the room: it opens for a reader the app lets write there.` };
|
|
30
57
|
try {
|
|
31
58
|
return { content: readEpisodeText(name, file, { root }).content };
|
|
32
59
|
}
|
|
@@ -34,10 +61,21 @@ export function loadText(root, name, file) {
|
|
|
34
61
|
return { error: error.message };
|
|
35
62
|
}
|
|
36
63
|
}
|
|
37
|
-
/**
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
64
|
+
/**
|
|
65
|
+
* Up to 1000 hits over the episodes this reader sees, newest episode first,
|
|
66
|
+
* file and line order kept inside each episode.
|
|
67
|
+
*/
|
|
68
|
+
export async function search(root, query, rows, access, signal) {
|
|
69
|
+
const visible = visibleRows(rows, access);
|
|
70
|
+
const result = await searchVessels(query, {
|
|
71
|
+
root,
|
|
72
|
+
limit: 1000,
|
|
73
|
+
order: "newest-first",
|
|
74
|
+
episodes: visible.map((row) => row.name),
|
|
75
|
+
include: inRoom(access),
|
|
76
|
+
signal,
|
|
77
|
+
});
|
|
78
|
+
const rank = new Map(visible.map((row, index) => [row.name, index]));
|
|
41
79
|
const order = (name) => rank.get(name) ?? Number.MAX_SAFE_INTEGER;
|
|
42
80
|
const hits = result.hits
|
|
43
81
|
.map((hit, index) => ({ hit, index }))
|
|
@@ -46,7 +84,7 @@ export async function search(root, query, rows = []) {
|
|
|
46
84
|
return { ...result, hits };
|
|
47
85
|
}
|
|
48
86
|
const resolvable = (rows) => rows.map((row) => ({ name: row.name, number: row.number, slug: row.slug, date: row.date, title: row.title }));
|
|
49
|
-
/** The episode a chronicle reference names
|
|
87
|
+
/** The episode a chronicle reference names among `rows`, or null when it names none or several. */
|
|
50
88
|
export function episodeOfReference(rows, uri) {
|
|
51
89
|
const parsed = parseMiadiChronicleUri(uri);
|
|
52
90
|
if (!parsed)
|
|
@@ -77,20 +115,26 @@ export async function episodeDoors(chronicle, name, file) {
|
|
|
77
115
|
return { title: file ? `${label} · ${file}` : `${label} · ${row?.title ?? name}`, doors };
|
|
78
116
|
}
|
|
79
117
|
/**
|
|
80
|
-
* The doors of a reference found in a file. A ceremony or circle
|
|
81
|
-
*
|
|
82
|
-
*
|
|
118
|
+
* The doors of a reference found in a file. A ceremony or circle opens its
|
|
119
|
+
* pages only, which ask for the reader's seat: the wheel's record answers
|
|
120
|
+
* anyone, so it is never offered here (D9; jgwill/Miadi#706 security review, F6).
|
|
83
121
|
*/
|
|
84
|
-
export async function referenceDoors(chronicle, ref) {
|
|
122
|
+
export async function referenceDoors(chronicle, ref, rows) {
|
|
85
123
|
if (ref.kind === "chronicle") {
|
|
86
|
-
const result = await resolveForTerminal(ref.uri, resolvable(
|
|
124
|
+
const result = await resolveForTerminal(ref.uri, resolvable(rows), chronicle.root, { bases: readWebBases() });
|
|
125
|
+
return { title: ref.uri, doors: result?.destinations ?? [] };
|
|
126
|
+
}
|
|
127
|
+
// A foundation packet is public grounding: its page on each front, and its
|
|
128
|
+
// file when MIADI_FOUNDATIONS_ROOT holds it (jgwill/Miadi#713).
|
|
129
|
+
if (ref.kind === "foundation") {
|
|
130
|
+
const result = await resolveFoundationRefForTerminal(ref.uri, { bases: readWebBases() });
|
|
87
131
|
return { title: ref.uri, doors: result?.destinations ?? [] };
|
|
88
132
|
}
|
|
89
133
|
const result = await resolveWheelRefForTerminal(ref.uri, { bases: readWebBases() });
|
|
90
134
|
return {
|
|
91
135
|
title: ref.uri,
|
|
92
|
-
doors: result?.destinations ?? [],
|
|
93
|
-
note: `A ${ref.kind} is private until its page sees your seat. Only its
|
|
136
|
+
doors: (result?.destinations ?? []).filter((door) => door.kind === "room"),
|
|
137
|
+
note: `A ${ref.kind} is private until its page sees your seat. Only its pages are offered here.`,
|
|
94
138
|
};
|
|
95
139
|
}
|
|
96
140
|
/** The door a phone can open: the tailnet room, then the public one, then the first. */
|
|
@@ -107,8 +151,64 @@ export async function proof(root, name) {
|
|
|
107
151
|
const context = resolveDoorContext({ chronicleRoot: root });
|
|
108
152
|
return episodeDoorStatus(context, name);
|
|
109
153
|
}
|
|
110
|
-
/**
|
|
111
|
-
|
|
154
|
+
/** Keys an opener never inherits: tokens and secrets, and whatever `--env` loaded. */
|
|
155
|
+
const SECRET_NAME = /TOKEN|SECRET|PASSWORD|PASSWD|CREDENTIAL|API_KEY|PRIVATE_KEY/i;
|
|
156
|
+
function openerEnv(withheld) {
|
|
157
|
+
const env = {};
|
|
158
|
+
for (const [key, value] of Object.entries(process.env)) {
|
|
159
|
+
if (SECRET_NAME.test(key) || withheld.includes(key))
|
|
160
|
+
continue;
|
|
161
|
+
env[key] = value;
|
|
162
|
+
}
|
|
163
|
+
return env;
|
|
164
|
+
}
|
|
165
|
+
const OPENABLE_FILE = new Set([...TEXT_EXTENSIONS, ...DOCUMENT_EXTENSIONS, ...MEDIA_EXTENSIONS]);
|
|
166
|
+
/**
|
|
167
|
+
* Why a door may not be handed to the system opener, or null when it may: an
|
|
168
|
+
* http(s) page, or a `file:` path inside the chronicle that is a folder or a
|
|
169
|
+
* text, document or media file. Anything else (another scheme, a path outside,
|
|
170
|
+
* a script, a `.desktop` entry) stays text to copy
|
|
171
|
+
* (jgwill/Miadi#706 security review, F4).
|
|
172
|
+
*/
|
|
173
|
+
export function refuseToOpen(url, root) {
|
|
174
|
+
if (/[\u0000- \u007f-\u009f]/.test(url))
|
|
175
|
+
return "the address holds a control character or a space";
|
|
176
|
+
if (/^https?:\/\//i.test(url))
|
|
177
|
+
return null;
|
|
178
|
+
if (!/^file:\/\//i.test(url))
|
|
179
|
+
return "only web pages and files inside the chronicle open from here";
|
|
180
|
+
let file;
|
|
181
|
+
try {
|
|
182
|
+
file = decodeURIComponent(new URL(url).pathname);
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
return "the file address does not parse";
|
|
186
|
+
}
|
|
187
|
+
let real;
|
|
188
|
+
try {
|
|
189
|
+
real = fs.realpathSync(file);
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return "that file is not on this machine";
|
|
193
|
+
}
|
|
194
|
+
const chronicle = fs.realpathSync(root);
|
|
195
|
+
if (real !== chronicle && !real.startsWith(`${chronicle}${path.sep}`))
|
|
196
|
+
return "that file is outside the chronicle";
|
|
197
|
+
const stat = fs.statSync(real);
|
|
198
|
+
if (stat.isDirectory())
|
|
199
|
+
return null;
|
|
200
|
+
if (!stat.isFile() || !OPENABLE_FILE.has(path.extname(real).toLowerCase()))
|
|
201
|
+
return "only text, documents and media open from here";
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Hand a door to the system opener. Returns the command used, or the reason it
|
|
206
|
+
* was not opened. The opener never inherits a token.
|
|
207
|
+
*/
|
|
208
|
+
export function openUrl(url, root, withheld = []) {
|
|
209
|
+
const reason = refuseToOpen(url, root);
|
|
210
|
+
if (reason)
|
|
211
|
+
return { refused: reason };
|
|
112
212
|
const candidates = process.platform === "darwin"
|
|
113
213
|
? [["open", [url]]]
|
|
114
214
|
: [
|
|
@@ -119,11 +219,11 @@ export function openUrl(url) {
|
|
|
119
219
|
const onPath = (process.env.PATH ?? "").split(":").some((dir) => dir && fs.existsSync(`${dir}/${command}`));
|
|
120
220
|
if (!onPath)
|
|
121
221
|
continue;
|
|
122
|
-
const child = spawn(command, args, { detached: true, stdio: "ignore" });
|
|
222
|
+
const child = spawn(command, args, { detached: true, stdio: "ignore", env: openerEnv(withheld) });
|
|
123
223
|
child.on("error", () => { });
|
|
124
224
|
child.unref();
|
|
125
|
-
return command;
|
|
225
|
+
return { opened: command };
|
|
126
226
|
}
|
|
127
|
-
return
|
|
227
|
+
return { refused: "no opener here (xdg-open, termux-open-url or open)" };
|
|
128
228
|
}
|
|
129
229
|
//# sourceMappingURL=data.js.map
|
package/dist/data.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.js","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { App, type AppProps } from "./App.js";
|
|
2
|
-
export { ApiError, MiadiApi, TOKEN_ENV, addReview, answerAttention, ceremonyCard, circleCard, connectApi,
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
2
|
+
export { ApiError, ENV_FILE_KEYS, MiadiApi, PERSON_TOKEN_ENV, PERSON_TOKEN_HEADER, TOKEN_ENV, addReview, answerAttention, ceremonyCard, circleCard, connectApi, loadEnvFile, mayCarryToken, type CeremonyCard, type CircleCard, type Connection, type Reader, type Tokens, } from "./api.js";
|
|
3
|
+
export { BOARD_LABELS, ROOM_LABELS, answeredMessage, checkAnswer, filterBoard, loadBoard, loadEpisodePanel, panelView, readOnlyLabel, type BoardItem, type EpisodePanel, } from "./attention.js";
|
|
4
|
+
export { DEFAULT_ACTIONS, actionFor, attentionAction, doorsAction, followAction, proofAction, qrAction, reviewAction, type ActionContext, type ChronicleAction, type Overlay, type View, } from "./actions.js";
|
|
5
|
+
export { VISITOR, episodeDoors, episodeOfReference, inRoom, loadChronicle, loadDetail, loadText, openUrl, phoneDoor, proof, qrLines, referenceDoors, refuseToOpen, search, visibleRows, type Access, type Chronicle, type Doors, type EpisodeDetail, } from "./data.js";
|
|
6
|
+
export { ageOf, chipText, clamp, fileView, filterRows, formatDate, screenLineOf, sortRows, toRow, windowOf, wrapSegments, type EpisodeRow, type FileView, type ScreenLine, type Segment, type SegmentStyle, } from "./model.js";
|
|
7
|
+
export { TAB_WIDTH, clean, cleanLine, expandTabs, isSafeUrl, link } from "./text.js";
|
|
6
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,EACT,eAAe,EACf,YAAY,EACZ,UAAU,EACV,UAAU,EACV,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EACL,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,gBAAgB,EAChB,mBAAmB,EACnB,SAAS,EACT,SAAS,EACT,eAAe,EACf,YAAY,EACZ,UAAU,EACV,UAAU,EACV,WAAW,EACX,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,MAAM,EACX,KAAK,MAAM,GACZ,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,eAAe,EACf,WAAW,EACX,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,KAAK,SAAS,EACd,KAAK,YAAY,GAClB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,eAAe,EACf,SAAS,EACT,eAAe,EACf,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,OAAO,EACZ,KAAK,IAAI,GACV,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,OAAO,EACP,YAAY,EACZ,kBAAkB,EAClB,MAAM,EACN,aAAa,EACb,UAAU,EACV,QAAQ,EACR,OAAO,EACP,SAAS,EACT,KAAK,EACL,OAAO,EACP,cAAc,EACd,YAAY,EACZ,MAAM,EACN,WAAW,EACX,KAAK,MAAM,EACX,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,aAAa,GACnB,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,UAAU,EACV,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,YAAY,GAClB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { App } from "./App.js";
|
|
2
|
-
export { ApiError, MiadiApi, TOKEN_ENV, addReview, answerAttention, ceremonyCard, circleCard, connectApi,
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
2
|
+
export { ApiError, ENV_FILE_KEYS, MiadiApi, PERSON_TOKEN_ENV, PERSON_TOKEN_HEADER, TOKEN_ENV, addReview, answerAttention, ceremonyCard, circleCard, connectApi, loadEnvFile, mayCarryToken, } from "./api.js";
|
|
3
|
+
export { BOARD_LABELS, ROOM_LABELS, answeredMessage, checkAnswer, filterBoard, loadBoard, loadEpisodePanel, panelView, readOnlyLabel, } from "./attention.js";
|
|
4
|
+
export { DEFAULT_ACTIONS, actionFor, attentionAction, doorsAction, followAction, proofAction, qrAction, reviewAction, } from "./actions.js";
|
|
5
|
+
export { VISITOR, episodeDoors, episodeOfReference, inRoom, loadChronicle, loadDetail, loadText, openUrl, phoneDoor, proof, qrLines, referenceDoors, refuseToOpen, search, visibleRows, } from "./data.js";
|
|
6
|
+
export { ageOf, chipText, clamp, fileView, filterRows, formatDate, screenLineOf, sortRows, toRow, windowOf, wrapSegments, } from "./model.js";
|
|
7
|
+
export { TAB_WIDTH, clean, cleanLine, expandTabs, isSafeUrl, link } from "./text.js";
|
|
6
8
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAiB,MAAM,UAAU,CAAA;AAC7C,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,EACT,eAAe,EACf,YAAY,EACZ,UAAU,EACV,UAAU,EACV,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAiB,MAAM,UAAU,CAAA;AAC7C,OAAO,EACL,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,gBAAgB,EAChB,mBAAmB,EACnB,SAAS,EACT,SAAS,EACT,eAAe,EACf,YAAY,EACZ,UAAU,EACV,UAAU,EACV,WAAW,EACX,aAAa,GAMd,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,eAAe,EACf,WAAW,EACX,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,aAAa,GAGd,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,eAAe,EACf,SAAS,EACT,eAAe,EACf,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,YAAY,GAKb,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,OAAO,EACP,YAAY,EACZ,kBAAkB,EAClB,MAAM,EACN,aAAa,EACb,UAAU,EACV,QAAQ,EACR,OAAO,EACP,SAAS,EACT,KAAK,EACL,OAAO,EACP,cAAc,EACd,YAAY,EACZ,MAAM,EACN,WAAW,GAKZ,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,UAAU,EACV,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,YAAY,GAMb,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA"}
|
package/dist/model.d.ts
CHANGED
|
@@ -16,8 +16,10 @@ export interface EpisodeRow {
|
|
|
16
16
|
/** An `episode.yaml` was read. Folders without one are listed, not hidden. */
|
|
17
17
|
structured: boolean;
|
|
18
18
|
readings: EpisodeReadings;
|
|
19
|
+
/** Who the episode is for (`audience:` in episode.yaml): a visitor never sees a `community` one. */
|
|
20
|
+
audience: "public" | "community";
|
|
19
21
|
}
|
|
20
|
-
export declare function toRow(entry: EpisodeManifestEntry): EpisodeRow;
|
|
22
|
+
export declare function toRow(entry: EpisodeManifestEntry, audience?: "public" | "community"): EpisodeRow;
|
|
21
23
|
/** Newest first; folders without a number last, by name. */
|
|
22
24
|
export declare function sortRows(rows: readonly EpisodeRow[]): EpisodeRow[];
|
|
23
25
|
/**
|
|
@@ -57,7 +59,13 @@ export interface FileView {
|
|
|
57
59
|
}
|
|
58
60
|
/** The words a chip shows: the author's label, or what the reference names. */
|
|
59
61
|
export declare function chipText(ref: TextReference): string;
|
|
60
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* Cut segments into screen lines no wider than `width` columns, breaking at
|
|
64
|
+
* spaces where it can. Each word is measured once and a word longer than a
|
|
65
|
+
* line is cut by grapheme, so the cost is linear in the text and an emoji or
|
|
66
|
+
* a combining mark is never split (0.3.0 measured the whole remaining line for
|
|
67
|
+
* every piece: 13 s for one 500 KB line).
|
|
68
|
+
*/
|
|
61
69
|
export declare function wrapSegments(segments: Segment[], width: number): Segment[][];
|
|
62
70
|
/** A text file as wrapped screen lines, with every reference found and marked. */
|
|
63
71
|
export declare function fileView(content: string, width: number): FileView;
|
package/dist/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,EAAmC,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,EAAmC,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAGhH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8EAA8E;IAC9E,UAAU,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,eAAe,CAAA;IACzB,oGAAoG;IACpG,QAAQ,EAAE,QAAQ,GAAG,WAAW,CAAA;CACjC;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,oBAAoB,EAAE,QAAQ,GAAE,QAAQ,GAAG,WAAsB,GAAG,UAAU,CAa1G;AAED,4DAA4D;AAC5D,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,GAAG,UAAU,EAAE,CAOlE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAoBnF;AAED,gFAAgF;AAChF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,EAAE,CAAA;CAAE,CAIhH;AASD;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAS9E;AAED,iFAAiF;AACjF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAI3D;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AAMD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAA;AAExE,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,YAAY,CAAA;IACnB,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,IAAI,EAAE,aAAa,EAAE,CAAA;CACtB;AAID,+EAA+E;AAC/E,wBAAgB,QAAQ,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAEnD;AA4BD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,EAAE,CA0C5E;AAED,kFAAkF;AAClF,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAmBjE;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjE"}
|