swarmbox 0.17.0 → 0.19.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 CHANGED
@@ -5,6 +5,52 @@ Unreleased; the release names the version.
5
5
 
6
6
  ## Unreleased
7
7
 
8
+ ## 0.19.0 (2026-11-13)
9
+
10
+ - A tool that fails gives the agent up to 40 lines (4000 characters) of the error, not just its first line, and
11
+ writes the whole of it to serve's output. A world whose seed script failed answered `run_start` with only
12
+ "world_seed.py failed (1):", and the traceback below it, which held the cause, reached neither.
13
+ - The README lists what the stand-in sandbox needs on Linux: bubblewrap, socat and ripgrep.
14
+ - A screen's downloads are kept: `screen_downloads` lists the files a screen saved (an export, a report, a
15
+ statement) and reads a text file's contents a page at a time, and an action that saved one says
16
+ "downloaded: #1 jobs.csv (2.0 KB, text)". A browser draws nothing for a download, so a tester could press
17
+ Export and never know what came out, or whether anything did. Each file is read through its stream (a remote
18
+ browser has no path), fingerprinted, and kept as text up to 500,000 characters. Its secrets are redacted:
19
+ token-shaped words anywhere in it, and in a CSV or TSV every cell under a secret-named header.
20
+ A download's text is the file as it is: redacted in place, never reparsed, so a JSON export's `424.10` and
21
+ its 20-digit ids read as written. A UTF-16 export (a spreadsheet's "Unicode text") is read by its byte-order
22
+ mark. A long run of key characters is redacted only when it mixes letters and digits and isn't a path. A page's
23
+ own blob: file shows its address whole; a data: one shows only its type and length; any address is cut at 300
24
+ characters. The browser's copy is deleted once read: it sat in the temp folder, which is memory on some
25
+ machines, until the screen closed.
26
+ - A blob: address in `screen_requests` shows whole, not cut to `:3110/<id>`.
27
+ - A secret kept as a number in JSON (`"api_key": 123456`) is redacted, in a download's text and in a request
28
+ body cut short. A tab-separated download is redacted by its column headers whatever its name, so a
29
+ spreadsheet's "Unicode text" export (.txt) is, as a .csv or .tsv is.
30
+ - A scenario file Swarmbox can't play says where and why, in words: "…/b.json isn't a scenario Swarmbox can
31
+ play: cast.0.part: Too big: expected string to have <=80 characters". It used to say only "failed: [", so an
32
+ agent couldn't tell what to fix. `scenario_list` lists every other scenario and names each file it can't play
33
+ with that reason; one bad file used to fail the whole list. `readScenarios` returns both.
34
+
35
+ ## 0.18.0 (2026-11-11)
36
+
37
+ - `serve` takes `standinSandbox`, and reads `SWARMBOX_NO_SANDBOX=1` as "off" when it isn't given. Before, only a
38
+ product that built its own harness could run stand-ins on a machine without the operating-system sandbox; through
39
+ `serve`, `run_start` refused with "stand-ins need the operating-system sandbox".
40
+ - A jump of the world's clock waits for the product's background work first, and says what was still
41
+ outstanding if it didn't catch up. A retry set on the world's time came due only at the next jump, so a text
42
+ whose first send failed went out at the jump, and read as the product being late. `moveClock` returns
43
+ `settledBefore` (or `settleError`) for a jump; a read, a pause and a play wait for nothing.
44
+ - `screen_act` can `reload` a page. A `goto` to the address it's already on fetches nothing when only a hash is
45
+ the same, so it was never a reload, and a tester could read an unchanged page as stuck.
46
+ - A check can name the bugs it guards, in `guards` on its result. A bug that's fixed has no known red left, so
47
+ until now no rule could speak for it. A passing guard that looked at something backs a tester's hold in the
48
+ same run, as its own row, and is no hold by itself. A guard's red counts as came-back for a bug the run was
49
+ asked about or a tester held.
50
+ - A phone or tablet screen says what it is: `phone` sends an iPhone's Safari user agent, `tablet` and
51
+ `tablet-portrait` an iPad's, and a sign-in's own touch viewport the one its shorter side matches. A product that
52
+ names the device someone signed in on no longer calls every phone a computer.
53
+
8
54
  ## 0.17.0 (2026-11-07)
9
55
 
10
56
  - A run can say what became of the things it was asked to look at again. `run_start` takes `recheck`, the new
package/README.md CHANGED
@@ -45,6 +45,10 @@ Built for Swarmify's agents, and usable by any team whose product runs locally.
45
45
  start of what was sent and what came back, and what it keeps open (a live stream). An action's "refused:" line
46
46
  gives each refusal's number, with the server's reason (`error.message`, or FastAPI's `detail`). No headers are
47
47
  kept, and secrets in addresses and bodies are redacted.
48
+ - **A screen's downloads** (`screen_downloads`): the files it saved (an export, a report, a statement), with
49
+ name, size and fingerprint, and a text file's contents a page at a time. An action's "downloaded:" line names
50
+ each file it saved. Secrets in the text are redacted: token-shaped words anywhere, and in a CSV or TSV every
51
+ cell under a secret-named header.
48
52
  - **A daily budget** in browser-minutes and runs.
49
53
 
50
54
  ## Install
@@ -56,6 +60,12 @@ pnpm exec playwright-core install chromium
56
60
 
57
61
  `playwright-core` is a peer dependency, so your product and Swarmbox share one copy. Node 24 or later.
58
62
 
63
+ Stand-ins run in the operating-system sandbox. macOS has what it needs. On Linux, install **bubblewrap**,
64
+ **socat** and **ripgrep** (`apt-get install bubblewrap socat ripgrep`), and on Ubuntu 24.04 or later allow
65
+ unprivileged user namespaces (`kernel.apparmor_restrict_unprivileged_userns=0`), as `.github/workflows` does.
66
+ Without them `run_start` refuses and names what's missing. `SWARMBOX_NO_SANDBOX=1` runs stand-ins without the
67
+ sandbox: only on a throwaway machine of your own, never a shared one.
68
+
59
69
  ## Plugging a product in
60
70
 
61
71
  A product is one object (`Product` in `src/product.ts`): how to start a world, who is in it, how each of
package/dist/checks.d.ts CHANGED
@@ -20,6 +20,8 @@ export interface CheckResult {
20
20
  ref: string;
21
21
  why: string;
22
22
  };
23
+ /** Bugs this check keeps from coming back, once they're off the known reds. */
24
+ guards?: string[];
23
25
  }
24
26
  /** Background work still outstanding when settling gave up: an event a handler has not finished. */
25
27
  export interface Pending {
@@ -1 +1 @@
1
- {"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../src/checks.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,kBAAkB,GAAG,OAAO,GAAG,WAAW,GAAG,sBAAsB,CAAC;AAE5G,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,8FAA8F;IAC9F,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,yFAAyF;IACzF,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,QAAQ,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC;AAED,oGAAoG;AACpG,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,EAAE,EAAE,MAAM,CAAC;IACX,sEAAsE;IACtE,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,wGAAwG;IACxG,KAAK,EAAE,KAAK,CAAC,OAAO,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzC;AAWD,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAqB3D;AAED,yDAAyD;AACzD,eAAO,MAAM,OAAO,GAAI,SAAS,WAAW,EAAE,KAAG,WAAW,EACU,CAAC"}
1
+ {"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../src/checks.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,kBAAkB,GAAG,OAAO,GAAG,WAAW,GAAG,sBAAsB,CAAC;AAE5G,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,8FAA8F;IAC9F,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,yFAAyF;IACzF,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,QAAQ,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,oGAAoG;AACpG,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,EAAE,EAAE,MAAM,CAAC;IACX,sEAAsE;IACtE,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,wGAAwG;IACxG,KAAK,EAAE,KAAK,CAAC,OAAO,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzC;AAWD,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAqB3D;AAED,yDAAyD;AACzD,eAAO,MAAM,OAAO,GAAI,SAAS,WAAW,EAAE,KAAG,WAAW,EACU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"checks.js","sourceRoot":"","sources":["../src/checks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../src/checks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import type { Download } from 'playwright-core';
2
+ export interface DownloadRecord {
3
+ /** Counts the screen's downloads from 1. */
4
+ seq: number;
5
+ at: string;
6
+ /** The name the page gave it. */
7
+ name: string;
8
+ /** Where it came from: a path on the screen's own origin, else the whole address. Secrets redacted. */
9
+ url: string;
10
+ state: 'saving' | 'saved' | 'failed';
11
+ bytes?: number;
12
+ sha256?: string;
13
+ /** A text file's contents (redacted), up to TEXT_KEPT characters. */
14
+ text?: string;
15
+ /** The text was longer than TEXT_KEPT, or the file longer than READ_MAX. */
16
+ cut?: boolean;
17
+ binary?: boolean;
18
+ failure?: string;
19
+ }
20
+ /** Kept per screen; the oldest go first. */
21
+ export declare const DOWNLOADS_KEPT = 50;
22
+ /** Of a file, read for its text; the fingerprint and size cover all of it. */
23
+ export declare const READ_MAX: number;
24
+ /** Of a text file, kept. */
25
+ export declare const TEXT_KEPT = 500000;
26
+ /** The longest a download is waited for after the action that started it. */
27
+ export declare const DOWNLOAD_WAIT_MS = 30000;
28
+ /**
29
+ * A file's text, or null when it isn't text: UTF-16 by its byte-order mark (a spreadsheet's "Unicode text"
30
+ * export holds NULs, so it's looked for first), else UTF-8 with no NUL. A character cut at the end of what's
31
+ * checked or kept is still text.
32
+ */
33
+ export declare function decodeText(name: string, bytes: Buffer): string | null;
34
+ /** Whether these bytes are a text file's. */
35
+ export declare function isText(name: string, bytes: Buffer): boolean;
36
+ export declare function redactWords(text: string): string;
37
+ /** A table with every cell under a secret-named header ("password", "api_key", "portal token"…) redacted. */
38
+ export declare function redactTable(text: string, sep: string): string;
39
+ /** A file's contents as kept: the text (redacted, bounded) or that it's binary. */
40
+ export declare function contents(name: string, bytes: Buffer, longer: boolean): Pick<DownloadRecord, 'text' | 'cut' | 'binary'>;
41
+ /**
42
+ * Where a download came from, for its line: a path on the screen's own origin, else the whole address, secrets
43
+ * redacted and bounded. A data: address is the file itself, so only its type and length are shown.
44
+ */
45
+ export declare function source(url: string, origin: string): string;
46
+ export interface DownloadLog {
47
+ records: DownloadRecord[];
48
+ /** The last record's number: an action's downloads are the ones after it. */
49
+ last(): number;
50
+ onDownload(d: Download): void;
51
+ /** Resolves when every download after `seq` has been saved or has failed, or after `ms`. */
52
+ settled(seq: number, ms?: number): Promise<DownloadRecord[]>;
53
+ }
54
+ /** A screen's log; `origin` is its own, whose addresses are shown as paths. */
55
+ export declare function downloadLog(origin: string): DownloadLog;
56
+ /** One line for a download: the readout after an action, and screen_downloads' list. */
57
+ export declare function downloadLine(r: DownloadRecord): string;
58
+ /** One download in full: its line, fingerprint and text from `offset`, at most `limit` characters. */
59
+ export declare function downloadText(r: DownloadRecord, offset?: number, limit?: number): string;
60
+ //# sourceMappingURL=downloads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloads.d.ts","sourceRoot":"","sources":["../src/downloads.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,uGAAuG;IACvG,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,4CAA4C;AAC5C,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,8EAA8E;AAC9E,eAAO,MAAM,QAAQ,QAAmB,CAAC;AACzC,4BAA4B;AAC5B,eAAO,MAAM,SAAS,SAAU,CAAC;AACjC,6EAA6E;AAC7E,eAAO,MAAM,gBAAgB,QAAS,CAAC;AAOvC;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAarE;AAED,6CAA6C;AAC7C,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3D;AAYD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIhD;AAkBD,6GAA6G;AAC7G,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAY7D;AAED,mFAAmF;AACnF,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,GACd,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC,CAgBjD;AAKD;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,6EAA6E;IAC7E,IAAI,IAAI,MAAM,CAAC;IACf,UAAU,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC9B,4FAA4F;IAC5F,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;CAC9D;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAuDvD;AAUD,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,CAAC,EAAE,cAAc,GAAG,MAAM,CAQtD;AAED,sGAAsG;AACtG,wBAAgB,YAAY,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,SAAI,EAAE,KAAK,SAAS,GAAG,MAAM,CAYlF"}
@@ -0,0 +1,214 @@
1
+ // What a screen saved as a file: an export, a report, a statement. A browser drew nothing for it, so without
2
+ // this the agent could press "Download" and never know what came out. Each download is read as it finishes:
3
+ // its name, size, a fingerprint, and, for a text file (CSV, JSON, a calendar file…), the text itself, which
4
+ // screen_downloads shows. Secrets in the text are redacted as a response body's are (redact.ts).
5
+ //
6
+ // Read through the download's stream, not its path: the path isn't there when the browser is remote.
7
+ import { createHash } from 'node:crypto';
8
+ import { REDACTED, redactText, redactUrl, secretName } from "./redact.js";
9
+ /** Kept per screen; the oldest go first. */
10
+ export const DOWNLOADS_KEPT = 50;
11
+ /** Of a file, read for its text; the fingerprint and size cover all of it. */
12
+ export const READ_MAX = 10 * 1024 * 1024;
13
+ /** Of a text file, kept. */
14
+ export const TEXT_KEPT = 500_000;
15
+ /** The longest a download is waited for after the action that started it. */
16
+ export const DOWNLOAD_WAIT_MS = 30_000;
17
+ /** Files whose bytes are text, by name; anything else is text only if it reads as UTF-8. */
18
+ const TEXT_NAMES = /\.(csv|tsv|txt|json|xml|ics|vcf|html?|md|iif|ofx|qbo|qfx|log|ya?ml)$/i;
19
+ /** How far into a file without a text name its UTF-8 is checked. */
20
+ const SNIFF = 64 * 1024;
21
+ /**
22
+ * A file's text, or null when it isn't text: UTF-16 by its byte-order mark (a spreadsheet's "Unicode text"
23
+ * export holds NULs, so it's looked for first), else UTF-8 with no NUL. A character cut at the end of what's
24
+ * checked or kept is still text.
25
+ */
26
+ export function decodeText(name, bytes) {
27
+ if (bytes[0] === 0xff && bytes[1] === 0xfe)
28
+ return new TextDecoder('utf-16le').decode(bytes);
29
+ if (bytes[0] === 0xfe && bytes[1] === 0xff)
30
+ return new TextDecoder('utf-16be').decode(bytes);
31
+ if (bytes.includes(0))
32
+ return null;
33
+ if (!TEXT_NAMES.test(name)) {
34
+ try {
35
+ // stream: a multi-byte character cut at SNIFF is held back, not an error.
36
+ new TextDecoder('utf-8', { fatal: true }).decode(bytes.subarray(0, SNIFF), { stream: true });
37
+ }
38
+ catch {
39
+ return null;
40
+ }
41
+ }
42
+ return new TextDecoder('utf-8').decode(bytes);
43
+ }
44
+ /** Whether these bytes are a text file's. */
45
+ export function isText(name, bytes) {
46
+ return decodeText(name, bytes) !== null;
47
+ }
48
+ /**
49
+ * A word that is a token by its shape wherever it sits in a file: a JWT or a provider's secret key, and a long
50
+ * run of key characters that mixes letters and digits and isn't a path. A body is redacted only when it is one
51
+ * token (redact.ts); a file is mostly not secret, so its words are looked at one by one. Best effort: a
52
+ * fingerprint or a slug with numbers in it reads as a token, and a short key (32 hex characters) doesn't.
53
+ */
54
+ const KNOWN_TOKEN = /\beyJ[\w-]+\.[\w-]+\.[\w-]*|\b(?:sk|rk)_(?:live|test)_[A-Za-z0-9]{8,}|\bwhsec_[A-Za-z0-9]{8,}/g;
55
+ const LONG_RUN = /(?<![\w+/=-])[A-Za-z0-9_+/=-]{40,}(?![\w+/=-])/g;
56
+ export function redactWords(text) {
57
+ return text
58
+ .replace(KNOWN_TOKEN, REDACTED)
59
+ .replace(LONG_RUN, (w) => (w.startsWith('/') || !/\d/.test(w) || !/[A-Za-z]/.test(w) ? w : REDACTED));
60
+ }
61
+ /** A row's cells, split on `sep` outside quotes (a quoted cell holding a line break is read as two rows). */
62
+ function cells(row, sep) {
63
+ const out = [];
64
+ let cell = '';
65
+ let quoted = false;
66
+ for (const ch of row) {
67
+ if (ch === '"')
68
+ quoted = !quoted;
69
+ if (ch === sep && !quoted) {
70
+ out.push(cell);
71
+ cell = '';
72
+ }
73
+ else
74
+ cell += ch;
75
+ }
76
+ out.push(cell);
77
+ return out;
78
+ }
79
+ /** A table with every cell under a secret-named header ("password", "api_key", "portal token"…) redacted. */
80
+ export function redactTable(text, sep) {
81
+ const rows = text.split('\n');
82
+ const secret = cells(rows[0] ?? '', sep).map((h) => secretName(h.replace(/^\s*"|"\s*$/g, '').trim()));
83
+ if (!secret.some(Boolean))
84
+ return text;
85
+ return [
86
+ rows[0],
87
+ ...rows.slice(1).map((r) => cells(r, sep)
88
+ .map((c, i) => (secret[i] && c.trim() ? REDACTED : c))
89
+ .join(sep)),
90
+ ].join('\n');
91
+ }
92
+ /** A file's contents as kept: the text (redacted, bounded) or that it's binary. */
93
+ export function contents(name, bytes, longer) {
94
+ const raw = decodeText(name, bytes);
95
+ if (raw === null)
96
+ return { binary: true };
97
+ const ext = /\.([a-z]+)$/i.exec(name)?.[1]?.toLowerCase() ?? '';
98
+ // Redacted in place, never reparsed: an export's 424.10 and its 20-digit ids are read as the file has them.
99
+ let text = redactText(raw);
100
+ // A table by its name, or tab-separated text by its first line (a spreadsheet's "Unicode text" is .txt).
101
+ const sep = ext === 'csv' ? ',' : ext === 'tsv' || /^[^\n]*\t/.test(text) ? '\t' : null;
102
+ if (sep)
103
+ text = redactTable(text, sep);
104
+ text = redactWords(text);
105
+ let cut = longer;
106
+ if (text.length > TEXT_KEPT) {
107
+ text = text.slice(0, TEXT_KEPT);
108
+ cut = true;
109
+ }
110
+ return { text, ...(cut ? { cut } : {}) };
111
+ }
112
+ /** The longest "from" address shown. */
113
+ const URL_SHOWN = 300;
114
+ /**
115
+ * Where a download came from, for its line: a path on the screen's own origin, else the whole address, secrets
116
+ * redacted and bounded. A data: address is the file itself, so only its type and length are shown.
117
+ */
118
+ export function source(url, origin) {
119
+ const data = /^data:([^,;]*)/i.exec(url);
120
+ if (data)
121
+ return `data:${data[1] || 'text/plain'} (${url.length} characters)`;
122
+ const shown = redactUrl(url, origin);
123
+ return shown.length > URL_SHOWN ? `${shown.slice(0, URL_SHOWN)}…` : shown;
124
+ }
125
+ /** A screen's log; `origin` is its own, whose addresses are shown as paths. */
126
+ export function downloadLog(origin) {
127
+ const records = [];
128
+ const pending = new Map();
129
+ let seq = 0;
130
+ const read = async (d, rec) => {
131
+ try {
132
+ const stream = await d.createReadStream();
133
+ const hash = createHash('sha256');
134
+ const kept = [];
135
+ let size = 0;
136
+ for await (const chunk of stream) {
137
+ hash.update(chunk);
138
+ if (size < READ_MAX)
139
+ kept.push(chunk.subarray(0, READ_MAX - size));
140
+ size += chunk.length;
141
+ }
142
+ Object.assign(rec, {
143
+ state: 'saved',
144
+ bytes: size,
145
+ sha256: hash.digest('hex'),
146
+ ...contents(rec.name, Buffer.concat(kept), size > READ_MAX),
147
+ });
148
+ }
149
+ catch (e) {
150
+ rec.state = 'failed';
151
+ rec.failure = (await d.failure().catch(() => null)) ?? e.message.split('\n')[0];
152
+ }
153
+ // Read, so the browser's copy goes: it sits in the temp folder, which is memory on some machines.
154
+ await d.delete().catch(() => { });
155
+ };
156
+ return {
157
+ records,
158
+ last: () => seq,
159
+ onDownload(d) {
160
+ const rec = {
161
+ seq: ++seq,
162
+ at: new Date().toISOString(),
163
+ name: d.suggestedFilename(),
164
+ url: source(d.url(), origin),
165
+ state: 'saving',
166
+ };
167
+ records.push(rec);
168
+ if (records.length > DOWNLOADS_KEPT)
169
+ records.shift();
170
+ const done = read(d, rec).finally(() => pending.delete(rec.seq));
171
+ pending.set(rec.seq, done);
172
+ },
173
+ async settled(after, ms = DOWNLOAD_WAIT_MS) {
174
+ const waiting = [...pending].filter(([n]) => n > after).map(([, p]) => p);
175
+ if (waiting.length) {
176
+ let timer;
177
+ await Promise.race([Promise.all(waiting), new Promise((r) => (timer = setTimeout(r, ms)))]).finally(() => clearTimeout(timer));
178
+ }
179
+ return records.filter((r) => r.seq > after);
180
+ },
181
+ };
182
+ }
183
+ function size(bytes) {
184
+ return bytes < 1024
185
+ ? `${bytes} B`
186
+ : bytes < 1024 * 1024
187
+ ? `${(bytes / 1024).toFixed(1)} KB`
188
+ : `${(bytes / 1024 / 1024).toFixed(1)} MB`;
189
+ }
190
+ /** One line for a download: the readout after an action, and screen_downloads' list. */
191
+ export function downloadLine(r) {
192
+ const what = r.state === 'saving'
193
+ ? 'still saving'
194
+ : r.state === 'failed'
195
+ ? `failed: ${r.failure ?? 'unknown'}`
196
+ : `${size(r.bytes ?? 0)}, ${r.binary ? 'binary' : `text${r.cut ? ', cut' : ''}`}`;
197
+ return `#${r.seq} ${r.name} (${what}) from ${r.url}`;
198
+ }
199
+ /** One download in full: its line, fingerprint and text from `offset`, at most `limit` characters. */
200
+ export function downloadText(r, offset = 0, limit = 20_000) {
201
+ const head = `${downloadLine(r)}${r.sha256 ? `\nsha256 ${r.sha256}` : ''}`;
202
+ if (r.state !== 'saved')
203
+ return head;
204
+ if (r.binary)
205
+ return `${head}\nA binary file: its contents aren't shown.`;
206
+ const text = r.text ?? '';
207
+ const part = text.slice(offset, offset + limit);
208
+ const more = offset + limit < text.length
209
+ ? `\n… ${text.length - offset - limit} more characters: offset ${offset + limit}`
210
+ : '';
211
+ const cut = r.cut ? '\n(the file was longer than Swarmbox keeps; the rest is not shown)' : '';
212
+ return `${head}\n---\n${part}${more}${!more ? cut : ''}`;
213
+ }
214
+ //# sourceMappingURL=downloads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloads.js","sourceRoot":"","sources":["../src/downloads.ts"],"names":[],"mappings":"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"}
@@ -41,11 +41,6 @@ export interface FleetOptions {
41
41
  export declare function contained(options: FleetOptions): boolean;
42
42
  /** Whether a URL is inside a contained world (FleetOptions.contain): somewhere its browsers may go. */
43
43
  export declare function insideWorld(url: string, options: FleetOptions): boolean;
44
- /**
45
- * The devices a screen can be. A sign-in's own viewport (a product's tablet app) is the default for that
46
- * app; a device named when the screen opens wins over it, so the same app can be tried on a phone or turned
47
- * to portrait. Sizes are CSS pixels of common devices: a 6.1" phone, an 11" tablet each way, a laptop.
48
- */
49
44
  export declare const DEVICES: {
50
45
  readonly desktop: {
51
46
  readonly viewport: {
@@ -73,6 +68,7 @@ export declare const DEVICES: {
73
68
  readonly isMobile: true;
74
69
  readonly hasTouch: true;
75
70
  readonly deviceScaleFactor: 3;
71
+ readonly userAgent: "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1";
76
72
  };
77
73
  readonly tablet: {
78
74
  readonly viewport: {
@@ -81,6 +77,7 @@ export declare const DEVICES: {
81
77
  };
82
78
  readonly hasTouch: true;
83
79
  readonly deviceScaleFactor: 2;
80
+ readonly userAgent: "Mozilla/5.0 (iPad; CPU OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1";
84
81
  };
85
82
  readonly 'tablet-portrait': {
86
83
  readonly viewport: {
@@ -89,6 +86,7 @@ export declare const DEVICES: {
89
86
  };
90
87
  readonly hasTouch: true;
91
88
  readonly deviceScaleFactor: 2;
89
+ readonly userAgent: "Mozilla/5.0 (iPad; CPU OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1";
92
90
  };
93
91
  };
94
92
  export type Device = keyof typeof DEVICES;
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/fleet/browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/fleet/browser.ts"],"names":[],"mappings":"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"}
@@ -144,15 +144,40 @@ export function insideWorld(url, options) {
144
144
  * The devices a screen can be. A sign-in's own viewport (a product's tablet app) is the default for that
145
145
  * app; a device named when the screen opens wins over it, so the same app can be tried on a phone or turned
146
146
  * to portrait. Sizes are CSS pixels of common devices: a 6.1" phone, an 11" tablet each way, a laptop.
147
+ *
148
+ * A phone or tablet also says what it is, as Safari on an iPhone or iPad does: without it the browser
149
+ * says it is a desktop, and a product that names the device a person signed in on (a "new sign-in"
150
+ * mail, a list of devices) calls every phone a computer. The iPad says "iPad", as Safari does when asked
151
+ * for the mobile site; its desktop-site default says "Macintosh", which a product tells from a Mac only by
152
+ * touch points, and the emulated touch screen reports one. The engine is still Chromium: a product that
153
+ * works around Safari by name would take the workaround here too.
147
154
  */
155
+ const IPHONE_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1';
156
+ const IPAD_UA = 'Mozilla/5.0 (iPad; CPU OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1';
148
157
  export const DEVICES = {
149
158
  desktop: { viewport: { width: 1440, height: 900 } },
150
159
  // Big monitors, for layouts that go wrong only as the screen grows.
151
160
  'desktop-hd': { viewport: { width: 1920, height: 1080 } },
152
161
  'desktop-qhd': { viewport: { width: 2560, height: 1440 } },
153
- phone: { viewport: { width: 390, height: 844 }, isMobile: true, hasTouch: true, deviceScaleFactor: 3 },
154
- tablet: { viewport: { width: 1180, height: 820 }, hasTouch: true, deviceScaleFactor: 2 },
155
- 'tablet-portrait': { viewport: { width: 820, height: 1180 }, hasTouch: true, deviceScaleFactor: 2 },
162
+ phone: {
163
+ viewport: { width: 390, height: 844 },
164
+ isMobile: true,
165
+ hasTouch: true,
166
+ deviceScaleFactor: 3,
167
+ userAgent: IPHONE_UA,
168
+ },
169
+ tablet: {
170
+ viewport: { width: 1180, height: 820 },
171
+ hasTouch: true,
172
+ deviceScaleFactor: 2,
173
+ userAgent: IPAD_UA,
174
+ },
175
+ 'tablet-portrait': {
176
+ viewport: { width: 820, height: 1180 },
177
+ hasTouch: true,
178
+ deviceScaleFactor: 2,
179
+ userAgent: IPAD_UA,
180
+ },
156
181
  };
157
182
  export async function launchFleet(options) {
158
183
  const browsers = new Map();
@@ -214,7 +239,16 @@ export async function launchFleet(options) {
214
239
  const signIn = who.signIn;
215
240
  const localStorage = signIn?.localStorage;
216
241
  const viewport = signIn?.viewport;
217
- const shape = device ? DEVICES[device] : viewport ? { viewport, hasTouch: true } : {};
242
+ // A sign-in's own touch screen says it is a phone or a tablet by its shorter side, as DEVICES do.
243
+ const shape = device
244
+ ? DEVICES[device]
245
+ : viewport
246
+ ? {
247
+ viewport,
248
+ hasTouch: true,
249
+ userAgent: Math.min(viewport.width, viewport.height) < 600 ? IPHONE_UA : IPAD_UA,
250
+ }
251
+ : {};
218
252
  const origin = originFor(who.persona.tenant);
219
253
  const n = nextAddress++;
220
254
  const ip = address ?? `198.18.${Math.floor(n / 256) % 256}.${n % 256}`;
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/fleet/browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/fleet/browser.ts"],"names":[],"mappings":"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"}