camou 0.1.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/README.md +229 -0
- package/dist/browser/actions.d.ts +4 -0
- package/dist/browser/actions.js +15 -0
- package/dist/browser/actions.js.map +1 -0
- package/dist/browser/manager.d.ts +85 -0
- package/dist/browser/manager.js +300 -0
- package/dist/browser/manager.js.map +1 -0
- package/dist/browser/snapshot.d.ts +17 -0
- package/dist/browser/snapshot.js +93 -0
- package/dist/browser/snapshot.js.map +1 -0
- package/dist/browser/tabs.d.ts +24 -0
- package/dist/browser/tabs.js +8 -0
- package/dist/browser/tabs.js.map +1 -0
- package/dist/camoufox/config.d.ts +67 -0
- package/dist/camoufox/config.js +121 -0
- package/dist/camoufox/config.js.map +1 -0
- package/dist/camoufox/env.d.ts +3 -0
- package/dist/camoufox/env.js +27 -0
- package/dist/camoufox/env.js.map +1 -0
- package/dist/camoufox/installer.d.ts +24 -0
- package/dist/camoufox/installer.js +291 -0
- package/dist/camoufox/installer.js.map +1 -0
- package/dist/camoufox/launcher.d.ts +22 -0
- package/dist/camoufox/launcher.js +105 -0
- package/dist/camoufox/launcher.js.map +1 -0
- package/dist/camoufox/prefs.d.ts +5 -0
- package/dist/camoufox/prefs.js +27 -0
- package/dist/camoufox/prefs.js.map +1 -0
- package/dist/camoufox/presets.d.ts +14 -0
- package/dist/camoufox/presets.js +73 -0
- package/dist/camoufox/presets.js.map +1 -0
- package/dist/camoufox/registry.d.ts +30 -0
- package/dist/camoufox/registry.js +195 -0
- package/dist/camoufox/registry.js.map +1 -0
- package/dist/camoufox/validation.d.ts +4 -0
- package/dist/camoufox/validation.js +103 -0
- package/dist/camoufox/validation.js.map +1 -0
- package/dist/cli/daemon.d.ts +2 -0
- package/dist/cli/daemon.js +59 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +147 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/output.d.ts +1 -0
- package/dist/cli/output.js +108 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/program.d.ts +42 -0
- package/dist/cli/program.js +214 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/daemon/daemon.d.ts +12 -0
- package/dist/daemon/daemon.js +36 -0
- package/dist/daemon/daemon.js.map +1 -0
- package/dist/daemon/main.d.ts +2 -0
- package/dist/daemon/main.js +28 -0
- package/dist/daemon/main.js.map +1 -0
- package/dist/daemon/router.d.ts +7 -0
- package/dist/daemon/router.js +43 -0
- package/dist/daemon/router.js.map +1 -0
- package/dist/daemon/runtime.d.ts +11 -0
- package/dist/daemon/runtime.js +54 -0
- package/dist/daemon/runtime.js.map +1 -0
- package/dist/doctor/diagnostics.d.ts +38 -0
- package/dist/doctor/diagnostics.js +152 -0
- package/dist/doctor/diagnostics.js.map +1 -0
- package/dist/ipc/client.d.ts +6 -0
- package/dist/ipc/client.js +63 -0
- package/dist/ipc/client.js.map +1 -0
- package/dist/ipc/protocol.d.ts +775 -0
- package/dist/ipc/protocol.js +128 -0
- package/dist/ipc/protocol.js.map +1 -0
- package/dist/ipc/server.d.ts +10 -0
- package/dist/ipc/server.js +99 -0
- package/dist/ipc/server.js.map +1 -0
- package/dist/state/paths.d.ts +32 -0
- package/dist/state/paths.js +121 -0
- package/dist/state/paths.js.map +1 -0
- package/dist/state/store.d.ts +4 -0
- package/dist/state/store.js +30 -0
- package/dist/state/store.js.map +1 -0
- package/dist/util/errors.d.ts +45 -0
- package/dist/util/errors.js +82 -0
- package/dist/util/errors.js.map +1 -0
- package/dist/util/log.d.ts +19 -0
- package/dist/util/log.js +71 -0
- package/dist/util/log.js.map +1 -0
- package/dist/util/platform.d.ts +12 -0
- package/dist/util/platform.js +44 -0
- package/dist/util/platform.js.map +1 -0
- package/package.json +58 -0
package/dist/util/log.js
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { createWriteStream, mkdirSync } from 'node:fs';
|
|
2
|
+
import { dirname } from 'node:path';
|
|
3
|
+
function stringifyDetail(value) {
|
|
4
|
+
if (value === undefined) {
|
|
5
|
+
return '';
|
|
6
|
+
}
|
|
7
|
+
if (typeof value === 'string') {
|
|
8
|
+
return value;
|
|
9
|
+
}
|
|
10
|
+
try {
|
|
11
|
+
return JSON.stringify(value);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return String(value);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class Logger {
|
|
18
|
+
name;
|
|
19
|
+
verbose;
|
|
20
|
+
mirrorToStderr;
|
|
21
|
+
stream;
|
|
22
|
+
constructor(options) {
|
|
23
|
+
this.name = options.name;
|
|
24
|
+
this.verbose = options.verbose ?? false;
|
|
25
|
+
this.mirrorToStderr = options.mirrorToStderr ?? false;
|
|
26
|
+
if (options.filePath) {
|
|
27
|
+
mkdirSync(dirname(options.filePath), { recursive: true, mode: 0o700 });
|
|
28
|
+
this.stream = createWriteStream(options.filePath, { flags: 'a' });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
debug(message, details) {
|
|
32
|
+
if (this.verbose) {
|
|
33
|
+
this.write('debug', message, details);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
info(message, details) {
|
|
37
|
+
this.write('info', message, details);
|
|
38
|
+
}
|
|
39
|
+
warn(message, details) {
|
|
40
|
+
this.write('warn', message, details);
|
|
41
|
+
}
|
|
42
|
+
error(message, details) {
|
|
43
|
+
this.write('error', message, details);
|
|
44
|
+
}
|
|
45
|
+
async close() {
|
|
46
|
+
if (!this.stream) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
await new Promise((resolve, reject) => {
|
|
50
|
+
this.stream.end((error) => {
|
|
51
|
+
if (error) {
|
|
52
|
+
reject(error);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
resolve();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
write(level, message, details) {
|
|
60
|
+
const timestamp = new Date().toISOString();
|
|
61
|
+
const suffix = stringifyDetail(details);
|
|
62
|
+
const line = `[${timestamp}] [${this.name}] [${level}] ${message}${suffix ? ` ${suffix}` : ''}`;
|
|
63
|
+
if (this.stream) {
|
|
64
|
+
this.stream.write(`${line}\n`);
|
|
65
|
+
}
|
|
66
|
+
if (this.mirrorToStderr || (level === 'error' && !this.stream)) {
|
|
67
|
+
process.stderr.write(`${line}\n`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/util/log.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type PlatformOs = 'lin' | 'mac' | 'win';
|
|
2
|
+
export type PlatformArch = 'x86_64' | 'arm64' | 'i686';
|
|
3
|
+
export interface PlatformTarget {
|
|
4
|
+
os: PlatformOs;
|
|
5
|
+
arch: PlatformArch;
|
|
6
|
+
assetSuffix: `${PlatformOs}.${PlatformArch}`;
|
|
7
|
+
executableRelativePath: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function getPlatformTarget(platform?: NodeJS.Platform, architecture?: string): PlatformTarget;
|
|
10
|
+
export declare function isWindows(platform?: NodeJS.Platform): boolean;
|
|
11
|
+
export declare function normalizeReleaseVersion(version: string): string;
|
|
12
|
+
export declare function buildExpectedAssetName(version: string, target?: PlatformTarget): string;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { UnsupportedPlatformError } from './errors.js';
|
|
2
|
+
const OS_MAP = {
|
|
3
|
+
linux: 'lin',
|
|
4
|
+
darwin: 'mac',
|
|
5
|
+
win32: 'win',
|
|
6
|
+
};
|
|
7
|
+
const ARCH_MAP = {
|
|
8
|
+
x64: 'x86_64',
|
|
9
|
+
x86: 'x86_64',
|
|
10
|
+
ia32: 'i686',
|
|
11
|
+
arm64: 'arm64',
|
|
12
|
+
arm: 'arm64',
|
|
13
|
+
};
|
|
14
|
+
const EXECUTABLE_RELATIVE_PATHS = {
|
|
15
|
+
lin: 'camoufox-bin',
|
|
16
|
+
mac: 'Camoufox.app/Contents/MacOS/camoufox',
|
|
17
|
+
win: 'camoufox.exe',
|
|
18
|
+
};
|
|
19
|
+
export function getPlatformTarget(platform = process.platform, architecture = process.arch) {
|
|
20
|
+
const os = OS_MAP[platform];
|
|
21
|
+
if (!os) {
|
|
22
|
+
throw new UnsupportedPlatformError(`Unsupported platform: ${platform}`);
|
|
23
|
+
}
|
|
24
|
+
const arch = ARCH_MAP[architecture];
|
|
25
|
+
if (!arch) {
|
|
26
|
+
throw new UnsupportedPlatformError(`Unsupported architecture: ${architecture}`);
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
os,
|
|
30
|
+
arch,
|
|
31
|
+
assetSuffix: `${os}.${arch}`,
|
|
32
|
+
executableRelativePath: EXECUTABLE_RELATIVE_PATHS[os],
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export function isWindows(platform = process.platform) {
|
|
36
|
+
return platform === 'win32';
|
|
37
|
+
}
|
|
38
|
+
export function normalizeReleaseVersion(version) {
|
|
39
|
+
return version.startsWith('v') ? version.slice(1) : version;
|
|
40
|
+
}
|
|
41
|
+
export function buildExpectedAssetName(version, target = getPlatformTarget()) {
|
|
42
|
+
return `camoufox-${normalizeReleaseVersion(version)}-${target.assetSuffix}.zip`;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/util/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAYvD,MAAM,MAAM,GAA2C;IACrD,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,KAAK;CACb,CAAC;AAEF,MAAM,QAAQ,GAA6C;IACzD,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;IACb,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,OAAO;CACb,CAAC;AAEF,MAAM,yBAAyB,GAA+B;IAC5D,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,sCAAsC;IAC3C,GAAG,EAAE,cAAc;CACpB,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAC/B,WAA4B,OAAO,CAAC,QAAQ,EAC5C,eAAuB,OAAO,CAAC,IAAI;IAEnC,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,MAAM,IAAI,wBAAwB,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,wBAAwB,CAAC,6BAA6B,YAAY,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,OAAO;QACL,EAAE;QACF,IAAI;QACJ,WAAW,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE;QAC5B,sBAAsB,EAAE,yBAAyB,CAAC,EAAE,CAAC;KACtD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,WAA4B,OAAO,CAAC,QAAQ;IACpE,OAAO,QAAQ,KAAK,OAAO,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAe;IACrD,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAe,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAClF,OAAO,YAAY,uBAAuB,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,WAAW,MAAM,CAAC;AAClF,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "camou",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "CLI and local daemon for driving Camoufox through Playwright",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/txchen/camoucli.git"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/txchen/camoucli#readme",
|
|
10
|
+
"bugs": {
|
|
11
|
+
"url": "https://github.com/txchen/camoucli/issues"
|
|
12
|
+
},
|
|
13
|
+
"type": "module",
|
|
14
|
+
"bin": {
|
|
15
|
+
"camou": "dist/cli/main.js",
|
|
16
|
+
"camou-daemon": "dist/daemon/main.js"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist",
|
|
20
|
+
"README.md",
|
|
21
|
+
"LICENSE*"
|
|
22
|
+
],
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": ">=20"
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "tsc -p tsconfig.json",
|
|
28
|
+
"clean": "rm -rf dist",
|
|
29
|
+
"dev": "tsx src/cli/main.ts",
|
|
30
|
+
"dev:daemon": "tsx src/daemon/main.ts",
|
|
31
|
+
"prepack": "npm run build",
|
|
32
|
+
"test": "vitest run",
|
|
33
|
+
"test:integration": "vitest run tests/*.integration.test.ts",
|
|
34
|
+
"test:watch": "vitest"
|
|
35
|
+
},
|
|
36
|
+
"keywords": [
|
|
37
|
+
"camoufox",
|
|
38
|
+
"playwright",
|
|
39
|
+
"firefox",
|
|
40
|
+
"cli",
|
|
41
|
+
"browser-automation"
|
|
42
|
+
],
|
|
43
|
+
"publishConfig": {
|
|
44
|
+
"access": "public"
|
|
45
|
+
},
|
|
46
|
+
"dependencies": {
|
|
47
|
+
"commander": "^14.0.0",
|
|
48
|
+
"extract-zip": "^2.0.1",
|
|
49
|
+
"playwright-core": "1.51.1",
|
|
50
|
+
"zod": "^3.25.0"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@types/node": "^24.0.0",
|
|
54
|
+
"tsx": "^4.19.0",
|
|
55
|
+
"typescript": "^5.8.0",
|
|
56
|
+
"vitest": "^3.1.0"
|
|
57
|
+
}
|
|
58
|
+
}
|