@amalgm/browser 0.1.2-preview.34320564379 → 0.1.2-preview.35310156626
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/PURPOSE.md
CHANGED
|
@@ -129,6 +129,9 @@ locked dependency graph on the supported Node toolchain.
|
|
|
129
129
|
19. Shell composes exactly one Browser service. Electron supplies a hardened
|
|
130
130
|
visible host and isolated cookie adapter to that service; it never creates a
|
|
131
131
|
second Browser registry, session authority, or action implementation.
|
|
132
|
+
20. Headless IPC uses a private OS-temporary socket namespace and a digest of
|
|
133
|
+
the canonical Browser root and session identity; durable path depth and
|
|
134
|
+
session-name length cannot exceed the operating system's socket limit.
|
|
132
135
|
|
|
133
136
|
## Predictable behavior
|
|
134
137
|
|
package/README.md
CHANGED
|
@@ -143,12 +143,12 @@ the token can be omitted. Authentication does not replace native certification,
|
|
|
143
143
|
exact source records or artifact integrity; private source repositories do not
|
|
144
144
|
receive npm's public-source provenance.
|
|
145
145
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
146
|
+
Bricks (`@amalgm/*` lane packages) are not pinned in source. `npm run resolve`
|
|
147
|
+
picks the newest good `candidate-<lane>` of each brick named in
|
|
148
|
+
`amalgmComposition` at build time; CI runs it with `--save`, so the packed
|
|
149
|
+
manifest records the exact set. A brick publication dispatches this owner's
|
|
150
|
+
checks on its lane, and a repeated check with an unchanged source and set does
|
|
151
|
+
not publish another candidate. Rollback is an explicit set: dispatch
|
|
152
|
+
`publish-package.yml` with `brick_set`, or set `AMALGM_LANE_SET` locally.
|
|
153
|
+
`preview` mirrors `main` through `mirror-preview.yml`; nothing is merged the
|
|
154
|
+
other way.
|
|
@@ -15,6 +15,7 @@ export declare class AgentBrowserCommand {
|
|
|
15
15
|
release(sessionId: string): void;
|
|
16
16
|
private directory;
|
|
17
17
|
private baseArgs;
|
|
18
|
+
private socketDirectory;
|
|
18
19
|
run(sessionId: string, command: string[], options?: {
|
|
19
20
|
timeoutMs?: number;
|
|
20
21
|
signal?: AbortSignal | undefined;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
2
3
|
import path from 'node:path';
|
|
4
|
+
import { createHash } from 'node:crypto';
|
|
3
5
|
import { BrowserError } from '../../errors.js';
|
|
4
6
|
import { safeId } from '../../ids.js';
|
|
5
7
|
import { ffmpegBinary, resolveAgentBrowser } from './executable.js';
|
|
@@ -21,7 +23,8 @@ export class AgentBrowserCommand {
|
|
|
21
23
|
baseArgs(sessionId) {
|
|
22
24
|
const profileId = this.profiles.get(safeId(sessionId)) || safeId(sessionId);
|
|
23
25
|
const args = [
|
|
24
|
-
'--session',
|
|
26
|
+
'--session', createHash('sha256').update(fs.realpathSync(this.options.root))
|
|
27
|
+
.update('\0').update(safeId(sessionId)).digest('hex'),
|
|
25
28
|
'--profile', path.join(this.directory('profiles'), profileId),
|
|
26
29
|
'--screenshot-dir', this.directory('screenshots'),
|
|
27
30
|
'--max-output', '15000',
|
|
@@ -37,18 +40,31 @@ export class AgentBrowserCommand {
|
|
|
37
40
|
args.push('--provider', this.env.AMALGM_BROWSER_PROVIDER);
|
|
38
41
|
return args;
|
|
39
42
|
}
|
|
43
|
+
socketDirectory() {
|
|
44
|
+
// POSIX socket paths have a small fixed limit, independent of filesystem
|
|
45
|
+
// path limits. Only ephemeral IPC belongs here; profiles stay in root.
|
|
46
|
+
const uid = process.getuid?.();
|
|
47
|
+
const target = path.join(process.platform === 'win32' ? os.tmpdir() : '/tmp', `amalgm-browser-${uid ?? 'local'}`);
|
|
48
|
+
fs.mkdirSync(target, { recursive: true, mode: 0o700 });
|
|
49
|
+
const stat = fs.lstatSync(target);
|
|
50
|
+
if (!stat.isDirectory() || (uid !== undefined && (stat.uid !== uid || (stat.mode & 0o077) !== 0))) {
|
|
51
|
+
throw new BrowserError('PROCESS_FAILED', 'Browser IPC requires a private, user-owned temporary directory.');
|
|
52
|
+
}
|
|
53
|
+
return target;
|
|
54
|
+
}
|
|
40
55
|
async run(sessionId, command, options = {}) {
|
|
41
56
|
const executable = resolveAgentBrowser(this.env);
|
|
42
57
|
const ffmpeg = ffmpegBinary(this.env);
|
|
58
|
+
const cwd = this.directory('process');
|
|
43
59
|
const env = {
|
|
44
60
|
...this.env,
|
|
45
|
-
AGENT_BROWSER_SOCKET_DIR: this.
|
|
61
|
+
AGENT_BROWSER_SOCKET_DIR: this.socketDirectory(),
|
|
46
62
|
PATH: ffmpeg === 'ffmpeg' ? this.env.PATH : `${path.dirname(ffmpeg)}${path.delimiter}${this.env.PATH || ''}`,
|
|
47
63
|
};
|
|
48
64
|
const result = await this.options.launcher.run({
|
|
49
65
|
command: executable.command,
|
|
50
66
|
args: [...executable.prefix, ...this.baseArgs(sessionId), ...command],
|
|
51
|
-
cwd
|
|
67
|
+
cwd,
|
|
52
68
|
env,
|
|
53
69
|
...(options.stdin === undefined ? {} : { stdin: options.stdin }),
|
|
54
70
|
...(options.signal === undefined ? {} : { signal: options.signal }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../../src/drivers/headless/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../../src/drivers/headless/command.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amalgm/browser",
|
|
3
|
-
"version": "0.1.2-preview.
|
|
3
|
+
"version": "0.1.2-preview.35310156626",
|
|
4
4
|
"description": "Safe persistent browser automation across headless Chromium and visible Electron surfaces.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -89,18 +89,18 @@
|
|
|
89
89
|
"verify": "npm run check && npm run build && npm test && npm run verify:pack",
|
|
90
90
|
"verify:pack": "tsx scripts/verify-package.ts",
|
|
91
91
|
"prepack": "npm run build",
|
|
92
|
+
"resolve": "node scripts/release/resolve.mjs",
|
|
92
93
|
"release:admit": "node scripts/release/package.mjs admit",
|
|
93
94
|
"release:prepare": "node scripts/release/package.mjs prepare",
|
|
94
95
|
"release:examine": "node scripts/release/package.mjs examine",
|
|
95
96
|
"release:publish": "node scripts/release/package.mjs publish",
|
|
96
|
-
"release:compose": "node scripts/release/compose.mjs",
|
|
97
97
|
"test:release": "node --test scripts/release/*.test.mjs"
|
|
98
98
|
},
|
|
99
99
|
"engines": {
|
|
100
100
|
"node": ">=24"
|
|
101
101
|
},
|
|
102
102
|
"dependencies": {
|
|
103
|
-
"@amalgm/core": "0.5.1-preview.
|
|
103
|
+
"@amalgm/core": "0.5.1-preview.34938434539",
|
|
104
104
|
"@ghostery/adblocker": "^2.18.1",
|
|
105
105
|
"agent-browser": "0.26.0",
|
|
106
106
|
"better-sqlite3": "^12.10.1",
|
|
@@ -129,7 +129,7 @@
|
|
|
129
129
|
},
|
|
130
130
|
"amalgmRelease": {
|
|
131
131
|
"schema": 1,
|
|
132
|
-
"workflow": "
|
|
132
|
+
"workflow": "verify.yml",
|
|
133
133
|
"jobs": [
|
|
134
134
|
"verify",
|
|
135
135
|
"real-headless",
|
|
@@ -152,16 +152,16 @@
|
|
|
152
152
|
"electron@41.10.7": true
|
|
153
153
|
},
|
|
154
154
|
"amalgmComposition": {
|
|
155
|
-
"schema":
|
|
156
|
-
"
|
|
157
|
-
"
|
|
155
|
+
"schema": 2,
|
|
156
|
+
"bricks": [
|
|
157
|
+
"@amalgm/core"
|
|
158
158
|
]
|
|
159
159
|
},
|
|
160
|
-
"gitHead": "
|
|
160
|
+
"gitHead": "7a652b0cd6d1f78214842702ef27cd4d5f839080",
|
|
161
161
|
"amalgmSource": {
|
|
162
162
|
"repository": "amalgm-inc/amalgm-browser",
|
|
163
163
|
"branch": "preview",
|
|
164
|
-
"commit": "
|
|
165
|
-
"occurrence": "
|
|
164
|
+
"commit": "7a652b0cd6d1f78214842702ef27cd4d5f839080",
|
|
165
|
+
"occurrence": "35310156626"
|
|
166
166
|
}
|
|
167
167
|
}
|