@amalgm/browser 0.1.2-main.34320546809 → 0.1.2-main.34746947481
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
|
|
|
@@ -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-main.
|
|
3
|
+
"version": "0.1.2-main.34746947481",
|
|
4
4
|
"description": "Safe persistent browser automation across headless Chromium and visible Electron surfaces.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -157,11 +157,11 @@
|
|
|
157
157
|
"package.json"
|
|
158
158
|
]
|
|
159
159
|
},
|
|
160
|
-
"gitHead": "
|
|
160
|
+
"gitHead": "8539995e118c4ba375a643799a2b4e9ad26bb8c4",
|
|
161
161
|
"amalgmSource": {
|
|
162
162
|
"repository": "amalgm-inc/amalgm-browser",
|
|
163
163
|
"branch": "main",
|
|
164
|
-
"commit": "
|
|
165
|
-
"occurrence": "
|
|
164
|
+
"commit": "8539995e118c4ba375a643799a2b4e9ad26bb8c4",
|
|
165
|
+
"occurrence": "34746947481"
|
|
166
166
|
}
|
|
167
167
|
}
|