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
@@ -0,0 +1,292 @@
1
+ import { createHash, createPublicKey, verify as verifySignature } from "node:crypto";
2
+ import { createReadStream } from "node:fs";
3
+ import { stat } from "node:fs/promises";
4
+ import { canonicalJson, decodeBase64Url } from "./canonical.js";
5
+ import { ArtifactError, ManifestError } from "./errors.js";
6
+ const ED25519_SPKI_PREFIX = Buffer.from("302a300506032b6570032100", "hex");
7
+ function fail(message, code) {
8
+ throw new ManifestError(message, code);
9
+ }
10
+ function numericVersion(value) {
11
+ if (!/^\d+(\.\d+){0,7}$/.test(value))
12
+ fail("SDK version is invalid", "sdk_version_invalid");
13
+ return value.split(".").map(Number);
14
+ }
15
+ function compareNumericVersions(left, right) {
16
+ const a = numericVersion(left);
17
+ const b = numericVersion(right);
18
+ for (let index = 0; index < Math.max(a.length, b.length); index += 1) {
19
+ const difference = (a[index] ?? 0) - (b[index] ?? 0);
20
+ if (difference !== 0)
21
+ return Math.sign(difference);
22
+ }
23
+ return 0;
24
+ }
25
+ export function isSdkCompatible(range, version) {
26
+ numericVersion(version);
27
+ const tokens = range.trim().split(/\s+/).filter(Boolean);
28
+ if (!tokens.length)
29
+ fail("Manifest SDK compatibility is invalid", "manifest_invalid");
30
+ return tokens.every((token) => {
31
+ if (token.startsWith("^"))
32
+ return isCaretCompatible(token.slice(1), version);
33
+ const match = /^(>=|<=|>|<|=)?(\d+(?:\.\d+){0,7})$/.exec(token);
34
+ if (!match)
35
+ fail("Manifest SDK compatibility is invalid", "manifest_invalid");
36
+ const comparison = compareNumericVersions(version, match[2]);
37
+ switch (match[1] ?? "=") {
38
+ case ">=": return comparison >= 0;
39
+ case "<=": return comparison <= 0;
40
+ case ">": return comparison > 0;
41
+ case "<": return comparison < 0;
42
+ default: return comparison === 0;
43
+ }
44
+ });
45
+ }
46
+ function isCaretCompatible(base, version) {
47
+ const parts = numericVersion(base);
48
+ const major = parts[0] ?? 0;
49
+ const minor = parts[1] ?? 0;
50
+ const patch = parts[2] ?? 0;
51
+ const upper = major > 0
52
+ ? `${major + 1}.0.0`
53
+ : minor > 0
54
+ ? `0.${minor + 1}.0`
55
+ : `0.0.${patch + 1}`;
56
+ return compareNumericVersions(version, base) >= 0 && compareNumericVersions(version, upper) < 0;
57
+ }
58
+ export function verifyReleaseManifest(value, trustedKeys) {
59
+ let document;
60
+ try {
61
+ const parsed = typeof value === "object" && !Buffer.isBuffer(value)
62
+ ? value
63
+ : JSON.parse(Buffer.isBuffer(value) ? value.toString("utf8") : value);
64
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
65
+ throw new TypeError();
66
+ document = { ...parsed };
67
+ }
68
+ catch {
69
+ fail("Manifest is not valid JSON", "manifest_invalid");
70
+ }
71
+ const signature = document.signature;
72
+ if (!signature || typeof signature !== "object" || Array.isArray(signature)) {
73
+ fail("Manifest signature block is invalid", "manifest_invalid_signature");
74
+ }
75
+ const signatureDocument = signature;
76
+ if (Object.keys(signatureDocument).sort().join(",") !== "algorithm,keyId,value") {
77
+ fail("Manifest signature block is invalid", "manifest_invalid_signature");
78
+ }
79
+ if (signatureDocument.algorithm !== "ed25519") {
80
+ fail("Manifest signature algorithm is unsupported", "manifest_algorithm_unsupported");
81
+ }
82
+ const keyId = signatureDocument.keyId;
83
+ if (typeof keyId !== "string")
84
+ fail("Manifest signing key is unknown", "manifest_key_unknown");
85
+ const keySource = trustedKeys instanceof Map
86
+ ? trustedKeys.get(keyId)
87
+ : trustedKeys[keyId];
88
+ if (!keySource || keySource.length !== 32)
89
+ fail("Manifest signing key is unknown", "manifest_key_unknown");
90
+ let signatureBytes;
91
+ try {
92
+ signatureBytes = decodeBase64Url(signatureDocument.value, 64);
93
+ }
94
+ catch {
95
+ fail("Manifest signature encoding is invalid", "manifest_invalid_signature");
96
+ }
97
+ const payload = { ...document };
98
+ delete payload.signature;
99
+ const publicKey = createPublicKey({
100
+ key: Buffer.concat([ED25519_SPKI_PREFIX, Buffer.from(keySource)]),
101
+ format: "der",
102
+ type: "spki",
103
+ });
104
+ if (!verifySignature(null, canonicalJson(payload), publicKey, signatureBytes)) {
105
+ fail("Manifest signature is invalid", "manifest_invalid_signature");
106
+ }
107
+ if (document.schemaVersion !== 1)
108
+ fail("Manifest schema is unsupported", "manifest_schema_unsupported");
109
+ if (typeof document.browserVersion !== "string" || !document.browserVersion) {
110
+ fail("Manifest browser version is invalid", "manifest_invalid");
111
+ }
112
+ if (typeof document.sdkCompatibility !== "string" || !document.sdkCompatibility) {
113
+ fail("Manifest SDK compatibility is invalid", "manifest_invalid");
114
+ }
115
+ if (document.status !== "available" && document.status !== "revoked") {
116
+ fail("Manifest release status is invalid", "manifest_invalid");
117
+ }
118
+ if (!Array.isArray(document.artifacts) || document.artifacts.length === 0) {
119
+ fail("Manifest artifacts are invalid", "manifest_invalid");
120
+ }
121
+ const artifacts = document.artifacts.map(parseArtifact);
122
+ const identities = artifacts.map((item) => `${item.platform}/${item.arch}`);
123
+ if (new Set(identities).size !== identities.length) {
124
+ fail("Manifest has duplicate platform artifacts", "manifest_duplicate_artifact");
125
+ }
126
+ const evidence = document.evidence === undefined ? undefined : parseEvidence(document.evidence);
127
+ return { ...document, artifacts, ...(evidence === undefined ? {} : { evidence }) };
128
+ }
129
+ function parseEvidenceArtifact(value, mediaType) {
130
+ if (!value || typeof value !== "object" || Array.isArray(value))
131
+ fail("Release evidence is invalid", "manifest_evidence_invalid");
132
+ const document = value;
133
+ if (Object.keys(document).sort().join(",") !== "mediaType,sha256,size,url" ||
134
+ typeof document.url !== "string" || !document.url.startsWith("https://") ||
135
+ typeof document.sha256 !== "string" || !/^[a-f0-9]{64}$/.test(document.sha256) ||
136
+ !Number.isSafeInteger(document.size) || document.size <= 0 || document.mediaType !== mediaType) {
137
+ fail("Release evidence is invalid", "manifest_evidence_invalid");
138
+ }
139
+ return document;
140
+ }
141
+ function parseEvidence(value) {
142
+ if (!value || typeof value !== "object" || Array.isArray(value))
143
+ fail("Release evidence is missing", "manifest_evidence_missing");
144
+ const document = value;
145
+ if (Object.keys(document).sort().join(",") !== "chromiumPatchInventory,provenance,sbom,sourceBoundary") {
146
+ fail("Release evidence fields are invalid", "manifest_evidence_invalid");
147
+ }
148
+ const boundary = document.sourceBoundary;
149
+ if (!boundary || typeof boundary !== "object" || Array.isArray(boundary))
150
+ fail("Source boundary is invalid", "manifest_evidence_invalid");
151
+ const sourceBoundary = boundary;
152
+ if (Object.keys(sourceBoundary).sort().join(",") !== "chromiumPatches,proprietaryCore,sdk" ||
153
+ sourceBoundary.sdk !== "open-source" || sourceBoundary.chromiumPatches !== "inventory-and-approved-patches" ||
154
+ sourceBoundary.proprietaryCore !== "private") {
155
+ fail("Source boundary is invalid", "manifest_evidence_invalid");
156
+ }
157
+ return {
158
+ sbom: parseEvidenceArtifact(document.sbom, "application/vnd.cyclonedx+json"),
159
+ provenance: parseEvidenceArtifact(document.provenance, "application/vnd.in-toto+json"),
160
+ chromiumPatchInventory: parseEvidenceArtifact(document.chromiumPatchInventory, "application/vnd.slybrowser.chromium-patch-inventory+json"),
161
+ sourceBoundary: sourceBoundary,
162
+ };
163
+ }
164
+ function parseArtifact(value) {
165
+ if (!value || typeof value !== "object" || Array.isArray(value))
166
+ fail("Artifact is invalid", "manifest_invalid");
167
+ const document = value;
168
+ const keys = Object.keys(document);
169
+ const requiredKeys = [
170
+ "arch", "archiveFormat", "browserExecutable", "browserSha256", "driverExecutable",
171
+ "driverSha256", "platform", "privateModules", "resources", "sha256", "size", "url",
172
+ ];
173
+ const allowedKeys = new Set([...requiredKeys, "codeSignature"]);
174
+ if (requiredKeys.some((key) => !keys.includes(key)) || keys.some((key) => !allowedKeys.has(key))) {
175
+ fail("Artifact fields are invalid", "manifest_invalid");
176
+ }
177
+ if (!new Set(["windows", "linux", "macos"]).has(document.platform)) {
178
+ fail("Artifact platform is invalid", "manifest_invalid");
179
+ }
180
+ if (!new Set(["x64", "arm64"]).has(document.arch)) {
181
+ fail("Artifact architecture is invalid", "manifest_invalid");
182
+ }
183
+ if (typeof document.url !== "string" || !document.url.startsWith("https://")) {
184
+ fail("Artifact URL must use HTTPS", "manifest_invalid");
185
+ }
186
+ if (typeof document.sha256 !== "string" || !/^[a-f0-9]{64}$/.test(document.sha256)) {
187
+ fail("Artifact SHA-256 is invalid", "manifest_invalid");
188
+ }
189
+ if (!Number.isSafeInteger(document.size) || document.size <= 0) {
190
+ fail("Artifact size is invalid", "manifest_invalid");
191
+ }
192
+ if ((document.archiveFormat !== "7z" && document.archiveFormat !== "zip") ||
193
+ typeof document.browserExecutable !== "string" || !safeRelativePath(document.browserExecutable) ||
194
+ typeof document.driverExecutable !== "string" || !safeRelativePath(document.driverExecutable) ||
195
+ typeof document.browserSha256 !== "string" || !/^[a-f0-9]{64}$/.test(document.browserSha256) ||
196
+ typeof document.driverSha256 !== "string" || !/^[a-f0-9]{64}$/.test(document.driverSha256)) {
197
+ fail("Artifact runtime metadata is invalid", "manifest_invalid");
198
+ }
199
+ const privateModules = parsePrivateModules(document.privateModules);
200
+ const resources = parseResources(document.resources);
201
+ const codeSignature = Object.hasOwn(document, "codeSignature")
202
+ ? parseCodeSignature(document.codeSignature)
203
+ : undefined;
204
+ return {
205
+ ...document,
206
+ privateModules,
207
+ resources,
208
+ ...(codeSignature === undefined ? {} : { codeSignature }),
209
+ };
210
+ }
211
+ function safeRelativePath(value) {
212
+ return value.length > 0 && value.length <= 512 && !value.startsWith("/") && !value.startsWith("\\") &&
213
+ !/^[A-Za-z]:/.test(value) && !value.replaceAll("\\", "/").split("/").includes("..");
214
+ }
215
+ function parsePrivateModules(value) {
216
+ if (!Array.isArray(value) || value.length === 0)
217
+ fail("Artifact private module metadata is invalid", "manifest_invalid");
218
+ return value.map((item) => {
219
+ if (!item || typeof item !== "object" || Array.isArray(item))
220
+ fail("Artifact private module metadata is invalid", "manifest_invalid");
221
+ const document = item;
222
+ if (Object.keys(document).sort().join(",") !== "abi,path,sha256,size" ||
223
+ typeof document.path !== "string" || !safeRelativePath(document.path) ||
224
+ typeof document.sha256 !== "string" || !/^[a-f0-9]{64}$/.test(document.sha256) ||
225
+ !Number.isSafeInteger(document.size) || document.size <= 0 ||
226
+ typeof document.abi !== "string" || document.abi.length === 0 || document.abi.length > 128) {
227
+ fail("Artifact private module metadata is invalid", "manifest_invalid");
228
+ }
229
+ return document;
230
+ });
231
+ }
232
+ function parseResources(value) {
233
+ if (!Array.isArray(value) || value.length === 0)
234
+ fail("Artifact resource metadata is invalid", "manifest_invalid");
235
+ return value.map((item) => {
236
+ if (!item || typeof item !== "object" || Array.isArray(item))
237
+ fail("Artifact resource metadata is invalid", "manifest_invalid");
238
+ const document = item;
239
+ if (Object.keys(document).sort().join(",") !== "path,sha256,size" ||
240
+ typeof document.path !== "string" || !safeRelativePath(document.path) ||
241
+ typeof document.sha256 !== "string" || !/^[a-f0-9]{64}$/.test(document.sha256) ||
242
+ !Number.isSafeInteger(document.size) || document.size <= 0) {
243
+ fail("Artifact resource metadata is invalid", "manifest_invalid");
244
+ }
245
+ return document;
246
+ });
247
+ }
248
+ function parseCodeSignature(value) {
249
+ if (!value || typeof value !== "object" || Array.isArray(value))
250
+ fail("Artifact code signature metadata is invalid", "manifest_invalid");
251
+ const document = value;
252
+ if (Object.keys(document).sort().join(",") !== "certificateSha256,scheme,subject,timestampRequired" ||
253
+ !new Set(["authenticode", "apple-developer-id", "x509-code-signing"]).has(document.scheme) ||
254
+ typeof document.subject !== "string" || document.subject.length === 0 || document.subject.length > 512 ||
255
+ typeof document.certificateSha256 !== "string" || !/^[a-f0-9]{64}$/.test(document.certificateSha256) ||
256
+ typeof document.timestampRequired !== "boolean") {
257
+ fail("Artifact code signature metadata is invalid", "manifest_invalid");
258
+ }
259
+ return document;
260
+ }
261
+ export function selectArtifact(manifest, platform, arch) {
262
+ const matches = manifest.artifacts.filter((item) => item.platform === platform && item.arch === arch);
263
+ if (matches.length !== 1) {
264
+ const available = manifest.artifacts.map((item) => `${item.platform}/${item.arch}`).sort().join(", ");
265
+ fail(`No signed artifact supports ${platform}/${arch}; available targets: ${available}`, "artifact_not_found");
266
+ }
267
+ return matches[0];
268
+ }
269
+ export async function verifyArtifact(path, artifact) {
270
+ let info;
271
+ try {
272
+ info = await stat(path);
273
+ }
274
+ catch {
275
+ throw new ArtifactError("Browser artifact is missing", "artifact_missing");
276
+ }
277
+ if (!info.isFile())
278
+ throw new ArtifactError("Browser artifact is missing", "artifact_missing");
279
+ if (info.size !== artifact.size)
280
+ throw new ArtifactError("Browser artifact size does not match", "artifact_size_mismatch");
281
+ const digest = createHash("sha256");
282
+ await new Promise((resolve, reject) => {
283
+ const stream = createReadStream(path);
284
+ stream.on("data", (chunk) => digest.update(chunk));
285
+ stream.on("error", reject);
286
+ stream.on("end", resolve);
287
+ });
288
+ if (digest.digest("hex") !== artifact.sha256) {
289
+ throw new ArtifactError("Browser artifact checksum does not match", "artifact_hash_mismatch");
290
+ }
291
+ }
292
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,206 @@
1
+ import type { AutomationBackend } from "./automation.js";
2
+ import { type LicenseEnvelope, type LicenseClaims } from "./license.js";
3
+ import { type ReleaseArtifact, type ReleaseManifest } from "./manifest.js";
4
+ export interface LicenseAuthorization {
5
+ schemaVersion: 1;
6
+ serviceUrl: string;
7
+ licenseKey: string;
8
+ channel: "stable";
9
+ }
10
+ export interface LicenseFileReadOptions {
11
+ allowInsecureLocalhost?: boolean;
12
+ licenseFilePassphrase?: string;
13
+ licenseFileTrustedKeys?: ReadonlyMap<string, Uint8Array> | Record<string, Uint8Array>;
14
+ licenseFileResolutionServiceUrl?: string;
15
+ trustedServiceUrls?: readonly string[];
16
+ fetch?: typeof fetch;
17
+ }
18
+ export interface SealedLicenseImportResult {
19
+ output: string;
20
+ serviceUrl: string;
21
+ channel: "stable";
22
+ protection: "windows-dpapi-current-user";
23
+ licenseKeySha256: string;
24
+ }
25
+ export interface LicensedSessionGrant {
26
+ sessionId: string;
27
+ sessionToken: string;
28
+ heartbeatAfterSeconds: number;
29
+ expiresAt: number;
30
+ plan: "free" | "basic" | "pro" | "max" | "ultra";
31
+ features: readonly string[];
32
+ concurrencyLimit: number;
33
+ activeSessions: number;
34
+ browserVersion: string;
35
+ requestedBrowserVersion?: string;
36
+ requestedKernelMajor?: KernelMajor;
37
+ versionPolicy: BrowserVersionPolicy;
38
+ selectionReason: "latest" | "exact" | "rollback";
39
+ selectionMode?: SelectionMode;
40
+ availableBrowserVersions: string[];
41
+ latestAvailableVersion?: string;
42
+ updateAvailable?: boolean;
43
+ updateRequired?: boolean;
44
+ updateRights: {
45
+ status: "active";
46
+ channel: "stable";
47
+ updatesThrough: number | null;
48
+ exactVersion: true;
49
+ rollback: true;
50
+ };
51
+ lease: LicenseEnvelope;
52
+ claims: LicenseClaims;
53
+ manifest: ReleaseManifest;
54
+ artifact: ReleaseArtifact;
55
+ platform: "windows" | "linux" | "macos";
56
+ arch: "x64" | "arm64";
57
+ }
58
+ export interface LicenseInfo {
59
+ schemaVersion: 1;
60
+ channel: "stable";
61
+ licenseStatus: "active" | "hold" | "revoked";
62
+ plan: "free" | "basic" | "pro" | "max" | "ultra";
63
+ effectivePlan: "free" | "basic" | "pro" | "max" | "ultra";
64
+ paidThrough: number | null;
65
+ features: readonly string[];
66
+ concurrencyLimit: number;
67
+ activeSessions: number;
68
+ availableSessions: number;
69
+ sessionState: {
70
+ activeBrowserProcesses: number;
71
+ limit: number;
72
+ available: number;
73
+ };
74
+ browserVersion: string;
75
+ requestedBrowserVersion?: string;
76
+ requestedKernelMajor?: KernelMajor;
77
+ versionPolicy: BrowserVersionPolicy;
78
+ selectionReason: "latest" | "exact" | "rollback";
79
+ selectionMode?: SelectionMode;
80
+ availableBrowserVersions: string[];
81
+ latestAvailableVersion?: string;
82
+ updateAvailable?: boolean;
83
+ updateRequired?: boolean;
84
+ updateRights: {
85
+ status: "active";
86
+ channel: "stable";
87
+ updatesThrough: number | null;
88
+ exactVersion: true;
89
+ rollback: true;
90
+ };
91
+ stableErrorCode: null;
92
+ }
93
+ export interface RuntimeDownloadTicket {
94
+ token: string;
95
+ expiresAt: number;
96
+ artifactSha256: string;
97
+ artifactUrl: string;
98
+ }
99
+ export interface RuntimeSessionGrant extends Omit<LicensedSessionGrant, "sessionToken"> {
100
+ schemaVersion: 2;
101
+ state: "reserved" | "active" | "closing";
102
+ startupId: string;
103
+ bootstrapToken: string;
104
+ activationTicket: string;
105
+ driverActivationTicket?: string;
106
+ automationBackend?: AutomationBackend;
107
+ downloadTicket: RuntimeDownloadTicket;
108
+ }
109
+ export interface RuntimeActivationGrant {
110
+ schemaVersion: 2;
111
+ state: "active";
112
+ startupId: string;
113
+ sessionId: string;
114
+ runtimeToken: string;
115
+ heartbeatAfterSeconds: number;
116
+ expiresAt: number;
117
+ plan: LicensedSessionGrant["plan"];
118
+ features: readonly string[];
119
+ concurrencyLimit: number;
120
+ activeSessions: number;
121
+ browserVersion: string;
122
+ automationBackend?: AutomationBackend;
123
+ lease: LicenseEnvelope;
124
+ claims: LicenseClaims;
125
+ }
126
+ export interface RuntimeHeartbeatGrant {
127
+ schemaVersion: 2;
128
+ state: "reserved" | "active" | "closing";
129
+ startupId: string;
130
+ sessionId: string;
131
+ heartbeatAfterSeconds: number;
132
+ expiresAt: number;
133
+ plan: LicensedSessionGrant["plan"];
134
+ features: readonly string[];
135
+ concurrencyLimit: number;
136
+ activeSessions: number;
137
+ browserVersion: string;
138
+ automationBackend?: AutomationBackend;
139
+ lease: LicenseEnvelope;
140
+ claims: LicenseClaims;
141
+ }
142
+ export type BrowserVersionPolicy = "latest" | "exact" | "at-or-before";
143
+ export type KernelMajor = number | "latest";
144
+ export type SelectionMode = "latest" | "latest-in-major" | "cached-approved" | "exact" | "rollback";
145
+ export interface LicenseServiceClientOptions {
146
+ licenseTrustedKeys: ReadonlyMap<string, Uint8Array> | Record<string, Uint8Array>;
147
+ releaseTrustedKeys: ReadonlyMap<string, Uint8Array> | Record<string, Uint8Array>;
148
+ licenseFileTrustedKeys?: ReadonlyMap<string, Uint8Array> | Record<string, Uint8Array>;
149
+ licenseFilePassphrase?: string;
150
+ trustedServiceUrls?: readonly string[];
151
+ fetch?: typeof fetch;
152
+ allowInsecureLocalhost?: boolean;
153
+ }
154
+ export declare function importLicenseFileToSealedAuthorization(inputPath: string, outputPath: string, options?: LicenseFileReadOptions): Promise<SealedLicenseImportResult>;
155
+ export declare function readLicenseAuthorization(path: string, options?: LicenseFileReadOptions): Promise<LicenseAuthorization>;
156
+ export declare class LicenseServiceClient {
157
+ #private;
158
+ readonly authorization: LicenseAuthorization;
159
+ constructor(authorization: LicenseAuthorization, options: LicenseServiceClientOptions);
160
+ licenseInfo(options?: {
161
+ platform?: "windows" | "linux" | "macos";
162
+ arch?: "x64" | "arm64";
163
+ sdkVersion?: string;
164
+ deviceHash?: string;
165
+ kernelMajor?: KernelMajor;
166
+ updateKernel?: boolean;
167
+ browserVersion?: string;
168
+ versionPolicy?: BrowserVersionPolicy;
169
+ }): Promise<LicenseInfo>;
170
+ createSession(options?: {
171
+ platform?: "windows" | "linux" | "macos";
172
+ arch?: "x64" | "arm64";
173
+ sdkVersion?: string;
174
+ deviceHash?: string;
175
+ kernelMajor?: KernelMajor;
176
+ updateKernel?: boolean;
177
+ browserVersion?: string;
178
+ versionPolicy?: BrowserVersionPolicy;
179
+ }): Promise<LicensedSessionGrant>;
180
+ createRuntimeSession(options?: {
181
+ startupId?: string;
182
+ automationBackend?: AutomationBackend;
183
+ platform?: "windows" | "linux" | "macos";
184
+ arch?: "x64" | "arm64";
185
+ sdkVersion?: string;
186
+ deviceHash?: string;
187
+ kernelMajor?: KernelMajor;
188
+ updateKernel?: boolean;
189
+ browserVersion?: string;
190
+ versionPolicy?: BrowserVersionPolicy;
191
+ }): Promise<RuntimeSessionGrant>;
192
+ heartbeat(grant: LicensedSessionGrant): Promise<{
193
+ expiresAt: number;
194
+ lease: LicenseEnvelope;
195
+ claims: LicenseClaims;
196
+ }>;
197
+ bootstrapHeartbeat(grant: RuntimeSessionGrant): Promise<RuntimeHeartbeatGrant>;
198
+ activateRuntimeSession(grant: RuntimeSessionGrant): Promise<RuntimeActivationGrant>;
199
+ runtimeHeartbeat(grant: RuntimeActivationGrant): Promise<RuntimeHeartbeatGrant>;
200
+ closeRuntimeSession(grant: RuntimeActivationGrant): Promise<RuntimeHeartbeatGrant>;
201
+ release(grant: Pick<LicensedSessionGrant, "sessionId" | "sessionToken">): Promise<void>;
202
+ releaseRuntimeSession(grant: RuntimeSessionGrant | RuntimeActivationGrant): Promise<void>;
203
+ downloadArtifact(grant: LicensedSessionGrant): Promise<Response>;
204
+ downloadRuntimeArtifact(grant: RuntimeSessionGrant): Promise<Response>;
205
+ }
206
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}