slybrowser 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.
Files changed (62) hide show
  1. package/README.md +146 -0
  2. package/dist/automation.d.ts +15 -0
  3. package/dist/automation.d.ts.map +1 -0
  4. package/dist/automation.js +69 -0
  5. package/dist/automation.js.map +1 -0
  6. package/dist/browser.d.ts +31 -0
  7. package/dist/browser.d.ts.map +1 -0
  8. package/dist/browser.js +203 -0
  9. package/dist/browser.js.map +1 -0
  10. package/dist/canonical.d.ts +4 -0
  11. package/dist/canonical.d.ts.map +1 -0
  12. package/dist/canonical.js +42 -0
  13. package/dist/canonical.js.map +1 -0
  14. package/dist/cdp.d.ts +21 -0
  15. package/dist/cdp.d.ts.map +1 -0
  16. package/dist/cdp.js +139 -0
  17. package/dist/cdp.js.map +1 -0
  18. package/dist/cli.d.ts +19 -0
  19. package/dist/cli.d.ts.map +1 -0
  20. package/dist/cli.js +241 -0
  21. package/dist/cli.js.map +1 -0
  22. package/dist/errors.d.ts +21 -0
  23. package/dist/errors.d.ts.map +1 -0
  24. package/dist/errors.js +113 -0
  25. package/dist/errors.js.map +1 -0
  26. package/dist/humanize.d.ts +23 -0
  27. package/dist/humanize.d.ts.map +1 -0
  28. package/dist/humanize.js +247 -0
  29. package/dist/humanize.js.map +1 -0
  30. package/dist/index.d.ts +13 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +13 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/installer.d.ts +43 -0
  35. package/dist/installer.d.ts.map +1 -0
  36. package/dist/installer.js +669 -0
  37. package/dist/installer.js.map +1 -0
  38. package/dist/launcher.d.ts +38 -0
  39. package/dist/launcher.d.ts.map +1 -0
  40. package/dist/launcher.js +325 -0
  41. package/dist/launcher.js.map +1 -0
  42. package/dist/license.d.ts +76 -0
  43. package/dist/license.d.ts.map +1 -0
  44. package/dist/license.js +329 -0
  45. package/dist/license.js.map +1 -0
  46. package/dist/licensed.d.ts +82 -0
  47. package/dist/licensed.d.ts.map +1 -0
  48. package/dist/licensed.js +513 -0
  49. package/dist/licensed.js.map +1 -0
  50. package/dist/manifest.d.ts +66 -0
  51. package/dist/manifest.d.ts.map +1 -0
  52. package/dist/manifest.js +292 -0
  53. package/dist/manifest.js.map +1 -0
  54. package/dist/service.d.ts +206 -0
  55. package/dist/service.d.ts.map +1 -0
  56. package/dist/service.js +1271 -0
  57. package/dist/service.js.map +1 -0
  58. package/dist/webdriver.d.ts +208 -0
  59. package/dist/webdriver.d.ts.map +1 -0
  60. package/dist/webdriver.js +592 -0
  61. package/dist/webdriver.js.map +1 -0
  62. package/package.json +78 -0
package/dist/cdp.js ADDED
@@ -0,0 +1,139 @@
1
+ import { timingSafeEqual } from "node:crypto";
2
+ import { createServer } from "node:http";
3
+ import { connect } from "node:net";
4
+ import { WebDriverError } from "./webdriver.js";
5
+ function loopback(hostname) {
6
+ return new Set(["127.0.0.1", "localhost", "::1", "[::1]"]).has(hostname.toLowerCase());
7
+ }
8
+ export function cdpDebuggerAddress(capabilities) {
9
+ const chromeOptions = capabilities["goog:chromeOptions"];
10
+ const address = chromeOptions?.debuggerAddress;
11
+ if (typeof address !== "string" || !address) {
12
+ throw new WebDriverError("Project WebDriver did not advertise a CDP debugger address", "cdp_address_missing");
13
+ }
14
+ let parsed;
15
+ try {
16
+ parsed = new URL(`http://${address}`);
17
+ }
18
+ catch {
19
+ throw new WebDriverError("Project WebDriver returned an invalid CDP debugger address", "cdp_address_invalid");
20
+ }
21
+ if (!loopback(parsed.hostname) || !parsed.port || parsed.pathname !== "/") {
22
+ throw new WebDriverError("CDP debugger address must be loopback-only", "cdp_address_unsafe");
23
+ }
24
+ return parsed.host;
25
+ }
26
+ export async function fetchCdpDiscovery(capabilities, fetchImplementation = fetch) {
27
+ const address = cdpDebuggerAddress(capabilities);
28
+ const response = await fetchImplementation(`http://${address}/json/version`, { redirect: "error" });
29
+ if (!response.ok)
30
+ throw new WebDriverError(`CDP discovery failed with HTTP ${response.status}`, "cdp_discovery_failed");
31
+ const value = await response.json();
32
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
33
+ throw new WebDriverError("CDP discovery returned an invalid document", "cdp_discovery_invalid");
34
+ }
35
+ return value;
36
+ }
37
+ function authorized(request, token) {
38
+ const value = request.headers.authorization;
39
+ if (!value?.startsWith("Bearer "))
40
+ return false;
41
+ const provided = Buffer.from(value.slice(7), "utf8");
42
+ return provided.length === token.length && timingSafeEqual(provided, token);
43
+ }
44
+ function sendJson(response, status, value) {
45
+ const body = Buffer.from(JSON.stringify(value), "utf8");
46
+ response.writeHead(status, {
47
+ "cache-control": "no-store",
48
+ "content-type": "application/json; charset=utf-8",
49
+ "content-length": String(body.length),
50
+ "x-content-type-options": "nosniff",
51
+ });
52
+ response.end(body);
53
+ }
54
+ function rewriteDiscovery(value, adapterHost) {
55
+ if (Array.isArray(value))
56
+ return value.map((item) => rewriteDiscovery(item, adapterHost));
57
+ if (!value || typeof value !== "object")
58
+ return value;
59
+ const result = { ...value };
60
+ if (typeof result.webSocketDebuggerUrl === "string") {
61
+ const websocket = new URL(result.webSocketDebuggerUrl);
62
+ websocket.protocol = "ws:";
63
+ websocket.host = adapterHost;
64
+ result.webSocketDebuggerUrl = websocket.toString();
65
+ }
66
+ return result;
67
+ }
68
+ export async function createAuthenticatedCdpAdapter(capabilities, options) {
69
+ const host = options.host ?? "127.0.0.1";
70
+ if (!loopback(host))
71
+ throw new WebDriverError("Authenticated CDP adapter must bind to loopback", "cdp_adapter_unsafe_bind");
72
+ const token = Buffer.from(options.token, "utf8");
73
+ if (token.length < 32 || token.length > 4096) {
74
+ throw new WebDriverError("CDP adapter token must contain 32 to 4096 bytes", "cdp_adapter_token_invalid");
75
+ }
76
+ const upstream = new URL(`http://${cdpDebuggerAddress(capabilities)}`);
77
+ let adapterHost = "";
78
+ const server = createServer(async (request, response) => {
79
+ try {
80
+ if (!authorized(request, token)) {
81
+ sendJson(response, 401, { error: { code: "cdp_authorization_required", message: "Bearer authorization is required" } });
82
+ return;
83
+ }
84
+ const path = new URL(request.url ?? "/", "http://adapter.invalid").pathname;
85
+ if (request.method !== "GET" || !new Set(["/json/version", "/json/list", "/json"]).has(path)) {
86
+ sendJson(response, 404, { error: { code: "cdp_route_not_found", message: "CDP route does not exist" } });
87
+ return;
88
+ }
89
+ const upstreamResponse = await (options.fetch ?? fetch)(new URL(path, upstream), { redirect: "error" });
90
+ if (!upstreamResponse.ok) {
91
+ sendJson(response, 502, { error: { code: "cdp_upstream_failed", message: `CDP upstream returned ${upstreamResponse.status}` } });
92
+ return;
93
+ }
94
+ sendJson(response, 200, rewriteDiscovery(await upstreamResponse.json(), adapterHost));
95
+ }
96
+ catch {
97
+ sendJson(response, 502, { error: { code: "cdp_upstream_failed", message: "CDP upstream request failed" } });
98
+ }
99
+ });
100
+ server.on("upgrade", (request, socket, head) => {
101
+ if (!authorized(request, token)) {
102
+ socket.end("HTTP/1.1 401 Unauthorized\r\nConnection: close\r\n\r\n");
103
+ return;
104
+ }
105
+ const upstreamSocket = connect(Number(upstream.port), upstream.hostname);
106
+ upstreamSocket.once("connect", () => {
107
+ const headers = Object.entries(request.headers)
108
+ .filter(([name]) => !new Set(["authorization", "host"]).has(name.toLowerCase()))
109
+ .flatMap(([name, value]) => value === undefined ? [] : [`${name}: ${Array.isArray(value) ? value.join(", ") : value}`]);
110
+ upstreamSocket.write([
111
+ `GET ${request.url ?? "/"} HTTP/1.1`,
112
+ `host: ${upstream.host}`,
113
+ ...headers,
114
+ "",
115
+ "",
116
+ ].join("\r\n"));
117
+ if (head.length)
118
+ upstreamSocket.write(head);
119
+ socket.pipe(upstreamSocket).pipe(socket);
120
+ });
121
+ upstreamSocket.once("error", () => socket.destroy());
122
+ socket.once("error", () => upstreamSocket.destroy());
123
+ });
124
+ await new Promise((accept, reject) => {
125
+ server.once("error", reject);
126
+ server.listen(options.port ?? 0, host, accept);
127
+ });
128
+ const address = server.address();
129
+ if (!address || typeof address === "string") {
130
+ await new Promise((accept) => server.close(() => accept()));
131
+ throw new WebDriverError("CDP adapter did not allocate a TCP port", "cdp_adapter_start_failed");
132
+ }
133
+ adapterHost = `${host.includes(":") ? `[${host}]` : host}:${address.port}`;
134
+ return {
135
+ endpoint: `http://${adapterHost}`,
136
+ close: () => new Promise((accept, reject) => server.close((error) => error ? reject(error) : accept())),
137
+ };
138
+ }
139
+ //# sourceMappingURL=cdp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdp.js","sourceRoot":"","sources":["../src/cdp.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ import { LicenseServiceError } from "./errors.js";
3
+ import { type BrowserVersionPolicy, type KernelMajor } from "./service.js";
4
+ export declare function parseKernelMajorArgument(value: string): KernelMajor;
5
+ export declare function parseKernelMajorArgument(value: undefined): undefined;
6
+ export declare function parseInstallSelectionArguments(arguments_: readonly string[]): {
7
+ browserVersion?: string;
8
+ versionPolicy?: BrowserVersionPolicy;
9
+ kernelMajor?: KernelMajor;
10
+ updateKernel: boolean;
11
+ };
12
+ export declare function licenseServiceErrorOutput(error: LicenseServiceError): {
13
+ schemaVersion: 1;
14
+ status: "error";
15
+ stableErrorCode: string;
16
+ httpStatus: number | null;
17
+ };
18
+ export declare function main(argv?: readonly string[]): Promise<number>;
19
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAOA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAIL,KAAK,oBAAoB,EACzB,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AA+BtB,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC;AACrE,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;AAQtE,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG;IAC7E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;CACvB,CAmBA;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,GAAG;IACrE,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAOA;AAED,wBAAsB,IAAI,CAAC,IAAI,GAAE,SAAS,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CA8J3F"}
package/dist/cli.js ADDED
@@ -0,0 +1,241 @@
1
+ #!/usr/bin/env node
2
+ import { access } from "node:fs/promises";
3
+ import { resolve } from "node:path";
4
+ import process from "node:process";
5
+ import { pathToFileURL } from "node:url";
6
+ import { LicenseServiceError } from "./errors.js";
7
+ import { installLatestAuthorizedBrowser } from "./licensed.js";
8
+ import { LicenseServiceClient, importLicenseFileToSealedAuthorization, readLicenseAuthorization, } from "./service.js";
9
+ import { defaultDriverExecutable } from "./webdriver.js";
10
+ function parseTrustedKeys(value, name) {
11
+ if (!value)
12
+ throw new Error(`${name} is required`);
13
+ const document = JSON.parse(value);
14
+ const result = {};
15
+ for (const [keyId, encoded] of Object.entries(document)) {
16
+ if (typeof encoded !== "string")
17
+ throw new Error(`${name}.${keyId} must be base64url`);
18
+ const key = Buffer.from(encoded, "base64url");
19
+ if (key.length !== 32 || key.toString("base64url") !== encoded)
20
+ throw new Error(`${name}.${keyId} must contain a raw 32-byte Ed25519 public key`);
21
+ result[keyId] = key;
22
+ }
23
+ if (!Object.keys(result).length)
24
+ throw new Error(`${name} must contain at least one key`);
25
+ return result;
26
+ }
27
+ function optionValue(arguments_, name) {
28
+ const index = arguments_.indexOf(name);
29
+ return index >= 0 ? arguments_[index + 1] : undefined;
30
+ }
31
+ function optionValues(arguments_, name) {
32
+ const values = [];
33
+ for (let index = 0; index < arguments_.length; index += 1) {
34
+ const value = arguments_[index + 1];
35
+ if (arguments_[index] === name && value !== undefined)
36
+ values.push(value);
37
+ }
38
+ return values;
39
+ }
40
+ export function parseKernelMajorArgument(value) {
41
+ if (value === undefined)
42
+ return undefined;
43
+ if (value === "latest")
44
+ return "latest";
45
+ if (/^[1-9][0-9]*$/.test(value))
46
+ return Number(value);
47
+ throw new Error("--kernel-major must be a positive integer or latest");
48
+ }
49
+ export function parseInstallSelectionArguments(arguments_) {
50
+ const browserVersion = optionValue(arguments_, "--version");
51
+ const rollback = arguments_.includes("--rollback");
52
+ if (rollback && !browserVersion) {
53
+ throw new Error("--rollback requires --version VERSION");
54
+ }
55
+ const selection = { updateKernel: arguments_.includes("--update-kernel") };
56
+ if (browserVersion !== undefined) {
57
+ selection.browserVersion = browserVersion;
58
+ selection.versionPolicy = rollback ? "at-or-before" : "exact";
59
+ }
60
+ const kernelMajor = optionValue(arguments_, "--kernel-major");
61
+ if (kernelMajor !== undefined)
62
+ selection.kernelMajor = parseKernelMajorArgument(kernelMajor);
63
+ return selection;
64
+ }
65
+ export function licenseServiceErrorOutput(error) {
66
+ return {
67
+ schemaVersion: 1,
68
+ status: "error",
69
+ stableErrorCode: error.code,
70
+ httpStatus: error.status || null,
71
+ };
72
+ }
73
+ export async function main(argv = process.argv.slice(2)) {
74
+ const [command, ...arguments_] = argv;
75
+ if (command === "--version" || command === "-V") {
76
+ console.log("0.1.0");
77
+ return 0;
78
+ }
79
+ if (command === "install") {
80
+ const authorization = optionValue(arguments_, "--authorization");
81
+ if (!authorization) {
82
+ console.error("Usage: slybrowser install --authorization FILE [--cache DIR] [--kernel-major MAJOR|latest] [--update-kernel] [--version VERSION] [--rollback]");
83
+ return 2;
84
+ }
85
+ const cacheRoot = optionValue(arguments_, "--cache");
86
+ let selection;
87
+ try {
88
+ selection = parseInstallSelectionArguments(arguments_);
89
+ }
90
+ catch (error) {
91
+ console.error(error instanceof Error ? error.message : String(error));
92
+ return 2;
93
+ }
94
+ const authorized = await installLatestAuthorizedBrowser(resolve(authorization), {
95
+ trust: {
96
+ licenseTrustedKeys: parseTrustedKeys(process.env.SLYBROWSER_LICENSE_PUBLIC_KEYS_JSON, "SLYBROWSER_LICENSE_PUBLIC_KEYS_JSON"),
97
+ releaseTrustedKeys: parseTrustedKeys(process.env.SLYBROWSER_RELEASE_PUBLIC_KEYS_JSON, "SLYBROWSER_RELEASE_PUBLIC_KEYS_JSON"),
98
+ },
99
+ ...(cacheRoot === undefined ? {} : { install: { cacheRoot: resolve(cacheRoot) } }),
100
+ ...selection,
101
+ });
102
+ try {
103
+ console.log(JSON.stringify({
104
+ plan: authorized.grant.plan,
105
+ concurrencyLimit: authorized.grant.concurrencyLimit,
106
+ activeSessions: authorized.grant.activeSessions,
107
+ requestedVersion: authorized.grant.requestedBrowserVersion ?? null,
108
+ selectedVersion: authorized.grant.browserVersion,
109
+ downloadedVersion: authorized.installation.version,
110
+ launchedVersion: null,
111
+ versionPolicy: authorized.grant.versionPolicy,
112
+ selectionReason: authorized.grant.selectionReason,
113
+ requestedKernelMajor: authorized.grant.requestedKernelMajor ?? null,
114
+ selectionMode: authorized.grant.selectionMode ?? null,
115
+ availableVersions: authorized.grant.availableBrowserVersions,
116
+ latestAvailableVersion: authorized.grant.latestAvailableVersion ?? null,
117
+ updateAvailable: authorized.grant.updateAvailable ?? null,
118
+ updateRequired: authorized.grant.updateRequired ?? null,
119
+ updateRights: authorized.grant.updateRights,
120
+ platform: authorized.installation.platform,
121
+ arch: authorized.installation.arch,
122
+ browser: authorized.installation.browserExecutable,
123
+ driver: authorized.installation.driverExecutable,
124
+ artifactSha256: authorized.installation.artifactSha256,
125
+ }, null, 2));
126
+ }
127
+ finally {
128
+ await authorized.release().catch(() => undefined);
129
+ }
130
+ return 0;
131
+ }
132
+ if (command === "license") {
133
+ const [licenseCommand, ...licenseArguments] = arguments_;
134
+ if (licenseCommand === "info") {
135
+ const authorization = optionValue(licenseArguments, "--authorization");
136
+ if (!authorization) {
137
+ console.error("Usage: slybrowser license info --authorization FILE [--passphrase VALUE] [--trusted-service-url URL] [--kernel-major MAJOR|latest] [--update-kernel] [--version VERSION] [--rollback]");
138
+ return 2;
139
+ }
140
+ let selection;
141
+ try {
142
+ selection = parseInstallSelectionArguments(licenseArguments);
143
+ }
144
+ catch (error) {
145
+ console.error(error instanceof Error ? error.message : String(error));
146
+ return 2;
147
+ }
148
+ const trustedServiceUrls = optionValues(licenseArguments, "--trusted-service-url");
149
+ const licenseFilePassphrase = optionValue(licenseArguments, "--passphrase");
150
+ const licenseFileTrustedKeys = process.env.SLYBROWSER_LICENSE_FILE_PUBLIC_KEYS_JSON
151
+ ? parseTrustedKeys(process.env.SLYBROWSER_LICENSE_FILE_PUBLIC_KEYS_JSON, "SLYBROWSER_LICENSE_FILE_PUBLIC_KEYS_JSON")
152
+ : undefined;
153
+ try {
154
+ const document = await readLicenseAuthorization(resolve(authorization), {
155
+ ...(licenseFilePassphrase === undefined ? {} : { licenseFilePassphrase }),
156
+ ...(licenseFileTrustedKeys === undefined ? {} : { licenseFileTrustedKeys }),
157
+ ...(trustedServiceUrls.length ? { trustedServiceUrls } : {}),
158
+ });
159
+ const client = new LicenseServiceClient(document, {
160
+ licenseTrustedKeys: parseTrustedKeys(process.env.SLYBROWSER_LICENSE_PUBLIC_KEYS_JSON, "SLYBROWSER_LICENSE_PUBLIC_KEYS_JSON"),
161
+ releaseTrustedKeys: parseTrustedKeys(process.env.SLYBROWSER_RELEASE_PUBLIC_KEYS_JSON, "SLYBROWSER_RELEASE_PUBLIC_KEYS_JSON"),
162
+ });
163
+ const info = await client.licenseInfo(selection);
164
+ console.log(JSON.stringify(info, null, 2));
165
+ return 0;
166
+ }
167
+ catch (error) {
168
+ if (error instanceof LicenseServiceError) {
169
+ console.log(JSON.stringify(licenseServiceErrorOutput(error), null, 2));
170
+ return 1;
171
+ }
172
+ throw error;
173
+ }
174
+ }
175
+ if (licenseCommand !== "import") {
176
+ console.error("Usage: slybrowser license info --authorization FILE [--passphrase VALUE] [--trusted-service-url URL] [--kernel-major MAJOR|latest] [--update-kernel] [--version VERSION] [--rollback] | license import --input FILE --output FILE --passphrase VALUE [--trusted-service-url URL]");
177
+ return 2;
178
+ }
179
+ const input = optionValue(licenseArguments, "--input");
180
+ const output = optionValue(licenseArguments, "--output");
181
+ const passphrase = optionValue(licenseArguments, "--passphrase");
182
+ if (!input || !output || !passphrase) {
183
+ console.error("Usage: slybrowser license import --input FILE --output FILE --passphrase VALUE [--trusted-service-url URL]");
184
+ return 2;
185
+ }
186
+ const trustedServiceUrls = optionValues(licenseArguments, "--trusted-service-url");
187
+ const result = await importLicenseFileToSealedAuthorization(resolve(input), resolve(output), {
188
+ licenseFilePassphrase: passphrase,
189
+ licenseFileTrustedKeys: parseTrustedKeys(process.env.SLYBROWSER_LICENSE_FILE_PUBLIC_KEYS_JSON, "SLYBROWSER_LICENSE_FILE_PUBLIC_KEYS_JSON"),
190
+ ...(trustedServiceUrls.length ? { trustedServiceUrls } : {}),
191
+ });
192
+ console.log(JSON.stringify(result, null, 2));
193
+ return 0;
194
+ }
195
+ if (command !== "doctor") {
196
+ console.error("Usage: slybrowser doctor [--browser PATH] [--driver PATH] | install --authorization FILE [--cache DIR] [--kernel-major MAJOR|latest] [--update-kernel] [--version VERSION] [--rollback] | license info --authorization FILE [--passphrase VALUE] [--trusted-service-url URL] [--kernel-major MAJOR|latest] [--update-kernel] [--version VERSION] [--rollback] | license import --input FILE --output FILE --passphrase VALUE [--trusted-service-url URL]");
197
+ return 2;
198
+ }
199
+ const browserIndex = arguments_.indexOf("--browser");
200
+ const browser = browserIndex >= 0 ? arguments_[browserIndex + 1] : undefined;
201
+ const driverIndex = arguments_.indexOf("--driver");
202
+ const driver = driverIndex >= 0 ? arguments_[driverIndex + 1] : undefined;
203
+ let browserExists = false;
204
+ let browserPath;
205
+ if (browser) {
206
+ browserPath = resolve(browser);
207
+ try {
208
+ await access(browserPath);
209
+ browserExists = true;
210
+ }
211
+ catch {
212
+ browserExists = false;
213
+ }
214
+ }
215
+ let driverExists = false;
216
+ let driverPath;
217
+ if (browserPath) {
218
+ driverPath = defaultDriverExecutable(browserPath, driver);
219
+ try {
220
+ await access(driverPath);
221
+ driverExists = true;
222
+ }
223
+ catch {
224
+ driverExists = false;
225
+ }
226
+ }
227
+ console.log(JSON.stringify({
228
+ sdkVersion: "0.1.0",
229
+ node: process.version,
230
+ defaultBackend: "project-webdriver",
231
+ browser: browserPath,
232
+ browserExists,
233
+ driver: driverPath,
234
+ driverExists,
235
+ }, null, 2));
236
+ return !browser || browserExists && driverExists ? 0 : 2;
237
+ }
238
+ if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
239
+ process.exitCode = await main();
240
+ }
241
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export declare const LICENSE_SERVICE_ERROR_CODES: readonly ["admin_authorization_forbidden", "admin_authorization_invalid", "artifact_denied", "artifact_not_found", "artifact_path_invalid", "artifact_unavailable", "authorization_required", "billing_email_key_required", "billing_rate_limited", "checkout_idempotency_conflict", "checkout_idempotency_expired", "checkout_intent_unavailable", "checkout_status_unavailable", "customer_portal_not_configured", "customer_portal_unavailable", "download_ticket_expired", "email_delivery_status_not_configured", "email_delivery_status_unauthorized", "feedback_email_failed", "feedback_email_not_configured", "feedback_rate_limited", "idempotency_conflict", "internal_error", "invalid_json", "invalid_request", "kernel_update_required", "license_email_delivery_unavailable", "license_resend_unavailable", "license_rotation_unavailable", "license_feature_denied", "license_file_expired", "license_file_authorization_not_configured", "license_file_invalid", "license_file_kdf_unsupported", "license_file_key_unknown", "license_file_locked", "license_file_payload_invalid", "license_file_signature_invalid", "license_file_untrusted_origin", "license_invalid", "license_key_invalid", "license_not_found", "license_on_hold", "license_plan_expired", "license_revoked", "not_found", "paid_license_file_config_required", "payment_amount_mismatch", "paynow_api_error", "paynow_api_rate_limit_queue_full", "paynow_api_response_invalid", "paynow_api_unreachable", "paynow_checkout_intent_missing", "paynow_checkout_url_invalid", "paynow_event_conflict", "paynow_event_replay_incomplete", "paynow_payment_event_not_implemented", "paynow_pending_event_unavailable", "paynow_product_unmapped", "paynow_reconciliation_mismatch", "paynow_second_confirmation_mismatch", "paynow_second_confirmation_required", "paynow_sku_not_renewable", "paynow_signature_invalid", "paynow_signature_required", "paynow_store_invalid", "paynow_timestamp_invalid", "release_version_unavailable", "request_too_large", "request_rate_limited", "sealed_license_invalid", "sealed_license_locked", "sealed_license_mismatch", "sealed_license_unsupported", "session_activation_invalid", "session_expired", "session_invalid", "session_limit", "session_state_invalid", "store_corrupt", "version_policy_invalid"];
2
+ export type LicenseServiceErrorCode = typeof LICENSE_SERVICE_ERROR_CODES[number];
3
+ export declare function isLicenseServiceErrorCode(code: string): code is LicenseServiceErrorCode;
4
+ export declare class SlyBrowserError extends Error {
5
+ readonly code: string;
6
+ constructor(message: string, code: string);
7
+ }
8
+ export declare class ConfigurationError extends SlyBrowserError {
9
+ }
10
+ export declare class LicenseError extends SlyBrowserError {
11
+ }
12
+ export declare class LicenseServiceError extends SlyBrowserError {
13
+ readonly status: number;
14
+ readonly details: Record<string, unknown>;
15
+ constructor(message: string, code: string, status: number, details?: Record<string, unknown>);
16
+ }
17
+ export declare class ManifestError extends SlyBrowserError {
18
+ }
19
+ export declare class ArtifactError extends SlyBrowserError {
20
+ }
21
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B,itEAkF9B,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC;AAIjF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,uBAAuB,CAEvF;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAK1C;AAED,qBAAa,kBAAmB,SAAQ,eAAe;CAAG;AAC1D,qBAAa,YAAa,SAAQ,eAAe;CAAG;AACpD,qBAAa,mBAAoB,SAAQ,eAAe;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAE9B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAKjG;AACD,qBAAa,aAAc,SAAQ,eAAe;CAAG;AACrD,qBAAa,aAAc,SAAQ,eAAe;CAAG"}
package/dist/errors.js ADDED
@@ -0,0 +1,113 @@
1
+ export const LICENSE_SERVICE_ERROR_CODES = [
2
+ "admin_authorization_forbidden",
3
+ "admin_authorization_invalid",
4
+ "artifact_denied",
5
+ "artifact_not_found",
6
+ "artifact_path_invalid",
7
+ "artifact_unavailable",
8
+ "authorization_required",
9
+ "billing_email_key_required",
10
+ "billing_rate_limited",
11
+ "checkout_idempotency_conflict",
12
+ "checkout_idempotency_expired",
13
+ "checkout_intent_unavailable",
14
+ "checkout_status_unavailable",
15
+ "customer_portal_not_configured",
16
+ "customer_portal_unavailable",
17
+ "download_ticket_expired",
18
+ "email_delivery_status_not_configured",
19
+ "email_delivery_status_unauthorized",
20
+ "feedback_email_failed",
21
+ "feedback_email_not_configured",
22
+ "feedback_rate_limited",
23
+ "idempotency_conflict",
24
+ "internal_error",
25
+ "invalid_json",
26
+ "invalid_request",
27
+ "kernel_update_required",
28
+ "license_email_delivery_unavailable",
29
+ "license_resend_unavailable",
30
+ "license_rotation_unavailable",
31
+ "license_feature_denied",
32
+ "license_file_expired",
33
+ "license_file_authorization_not_configured",
34
+ "license_file_invalid",
35
+ "license_file_kdf_unsupported",
36
+ "license_file_key_unknown",
37
+ "license_file_locked",
38
+ "license_file_payload_invalid",
39
+ "license_file_signature_invalid",
40
+ "license_file_untrusted_origin",
41
+ "license_invalid",
42
+ "license_key_invalid",
43
+ "license_not_found",
44
+ "license_on_hold",
45
+ "license_plan_expired",
46
+ "license_revoked",
47
+ "not_found",
48
+ "paid_license_file_config_required",
49
+ "payment_amount_mismatch",
50
+ "paynow_api_error",
51
+ "paynow_api_rate_limit_queue_full",
52
+ "paynow_api_response_invalid",
53
+ "paynow_api_unreachable",
54
+ "paynow_checkout_intent_missing",
55
+ "paynow_checkout_url_invalid",
56
+ "paynow_event_conflict",
57
+ "paynow_event_replay_incomplete",
58
+ "paynow_payment_event_not_implemented",
59
+ "paynow_pending_event_unavailable",
60
+ "paynow_product_unmapped",
61
+ "paynow_reconciliation_mismatch",
62
+ "paynow_second_confirmation_mismatch",
63
+ "paynow_second_confirmation_required",
64
+ "paynow_sku_not_renewable",
65
+ "paynow_signature_invalid",
66
+ "paynow_signature_required",
67
+ "paynow_store_invalid",
68
+ "paynow_timestamp_invalid",
69
+ "release_version_unavailable",
70
+ "request_too_large",
71
+ "request_rate_limited",
72
+ "sealed_license_invalid",
73
+ "sealed_license_locked",
74
+ "sealed_license_mismatch",
75
+ "sealed_license_unsupported",
76
+ "session_activation_invalid",
77
+ "session_expired",
78
+ "session_invalid",
79
+ "session_limit",
80
+ "session_state_invalid",
81
+ "store_corrupt",
82
+ "version_policy_invalid",
83
+ ];
84
+ const LICENSE_SERVICE_ERROR_CODE_SET = new Set(LICENSE_SERVICE_ERROR_CODES);
85
+ export function isLicenseServiceErrorCode(code) {
86
+ return LICENSE_SERVICE_ERROR_CODE_SET.has(code);
87
+ }
88
+ export class SlyBrowserError extends Error {
89
+ code;
90
+ constructor(message, code) {
91
+ super(message);
92
+ this.name = new.target.name;
93
+ this.code = code;
94
+ }
95
+ }
96
+ export class ConfigurationError extends SlyBrowserError {
97
+ }
98
+ export class LicenseError extends SlyBrowserError {
99
+ }
100
+ export class LicenseServiceError extends SlyBrowserError {
101
+ status;
102
+ details;
103
+ constructor(message, code, status, details = {}) {
104
+ super(message, code);
105
+ this.status = status;
106
+ this.details = details;
107
+ }
108
+ }
109
+ export class ManifestError extends SlyBrowserError {
110
+ }
111
+ export class ArtifactError extends SlyBrowserError {
112
+ }
113
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,+BAA+B;IAC/B,6BAA6B;IAC7B,iBAAiB;IACjB,oBAAoB;IACpB,uBAAuB;IACvB,sBAAsB;IACtB,wBAAwB;IACxB,4BAA4B;IAC5B,sBAAsB;IACtB,+BAA+B;IAC/B,8BAA8B;IAC9B,6BAA6B;IAC7B,6BAA6B;IAC7B,gCAAgC;IAChC,6BAA6B;IAC7B,yBAAyB;IACzB,sCAAsC;IACtC,oCAAoC;IACpC,uBAAuB;IACvB,+BAA+B;IAC/B,uBAAuB;IACvB,sBAAsB;IACtB,gBAAgB;IAChB,cAAc;IACd,iBAAiB;IACjB,wBAAwB;IACxB,oCAAoC;IACpC,4BAA4B;IAC5B,8BAA8B;IAC9B,wBAAwB;IACxB,sBAAsB;IACtB,2CAA2C;IAC3C,sBAAsB;IACtB,8BAA8B;IAC9B,0BAA0B;IAC1B,qBAAqB;IACrB,8BAA8B;IAC9B,gCAAgC;IAChC,+BAA+B;IAC/B,iBAAiB;IACjB,qBAAqB;IACrB,mBAAmB;IACnB,iBAAiB;IACjB,sBAAsB;IACtB,iBAAiB;IACjB,WAAW;IACX,mCAAmC;IACnC,yBAAyB;IACzB,kBAAkB;IAClB,kCAAkC;IAClC,6BAA6B;IAC7B,wBAAwB;IACxB,gCAAgC;IAChC,6BAA6B;IAC7B,uBAAuB;IACvB,gCAAgC;IAChC,sCAAsC;IACtC,kCAAkC;IAClC,yBAAyB;IACzB,gCAAgC;IAChC,qCAAqC;IACrC,qCAAqC;IACrC,0BAA0B;IAC1B,0BAA0B;IAC1B,2BAA2B;IAC3B,sBAAsB;IACtB,0BAA0B;IAC1B,6BAA6B;IAC7B,mBAAmB;IACnB,sBAAsB;IACtB,wBAAwB;IACxB,uBAAuB;IACvB,yBAAyB;IACzB,4BAA4B;IAC5B,4BAA4B;IAC5B,iBAAiB;IACjB,iBAAiB;IACjB,eAAe;IACf,uBAAuB;IACvB,eAAe;IACf,wBAAwB;CAChB,CAAC;AAIX,MAAM,8BAA8B,GAAG,IAAI,GAAG,CAAS,2BAA2B,CAAC,CAAC;AAEpF,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,OAAO,8BAA8B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,IAAI,CAAS;IAEtB,YAAY,OAAe,EAAE,IAAY;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,eAAe;CAAG;AAC1D,MAAM,OAAO,YAAa,SAAQ,eAAe;CAAG;AACpD,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IAC7C,MAAM,CAAS;IACf,OAAO,CAA0B;IAE1C,YAAY,OAAe,EAAE,IAAY,EAAE,MAAc,EAAE,UAAmC,EAAE;QAC9F,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AACD,MAAM,OAAO,aAAc,SAAQ,eAAe;CAAG;AACrD,MAAM,OAAO,aAAc,SAAQ,eAAe;CAAG"}
@@ -0,0 +1,23 @@
1
+ export type HumanPreset = "default" | "careful";
2
+ export interface HumanConfig {
3
+ mouseStepsMin: number;
4
+ mouseStepsMax: number;
5
+ mouseStepDelayMin: number;
6
+ mouseStepDelayMax: number;
7
+ clickHoldMin: number;
8
+ clickHoldMax: number;
9
+ keyDelayMin: number;
10
+ keyDelayMax: number;
11
+ thinkDelayMin: number;
12
+ thinkDelayMax: number;
13
+ }
14
+ export interface HumanizeOptions {
15
+ preset?: HumanPreset;
16
+ config?: Partial<HumanConfig>;
17
+ seed?: number;
18
+ }
19
+ export declare function resolveHumanConfig(options?: HumanizeOptions): Readonly<HumanConfig>;
20
+ export declare function humanizePage<TPage>(pageValue: TPage, options?: HumanizeOptions): TPage;
21
+ export declare function humanizeContext<TContext>(contextValue: TContext, options?: HumanizeOptions): TContext;
22
+ export declare function humanizeBrowser<TBrowser>(browserValue: TBrowser, options?: HumanizeOptions): Promise<TBrowser>;
23
+ //# sourceMappingURL=humanize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"humanize.d.ts","sourceRoot":"","sources":["../src/humanize.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA0FD,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,eAAoB,GAAG,QAAQ,CAAC,WAAW,CAAC,CAUvF;AAiHD,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAE,eAAoB,GAAG,KAAK,CAgD1F;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,GAAE,eAAoB,GAAG,QAAQ,CASzG;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAWxH"}