clearcote 0.28.1 → 0.30.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 +70 -20
- package/dist/clearcote-cli.d.ts +3 -0
- package/dist/clearcote-cli.d.ts.map +1 -0
- package/dist/clearcote-cli.js +9 -0
- package/dist/clearcote-cli.js.map +1 -0
- package/dist/cli-commands.d.ts +62 -0
- package/dist/cli-commands.d.ts.map +1 -0
- package/dist/cli-commands.js +333 -0
- package/dist/cli-commands.js.map +1 -0
- package/dist/download.d.ts +28 -0
- package/dist/download.d.ts.map +1 -1
- package/dist/download.js +56 -6
- package/dist/download.js.map +1 -1
- package/dist/fingerprint.d.ts +16 -0
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +37 -0
- package/dist/fingerprint.js.map +1 -1
- package/dist/geoip.d.ts +37 -1
- package/dist/geoip.d.ts.map +1 -1
- package/dist/geoip.js +90 -68
- package/dist/geoip.js.map +1 -1
- package/dist/index.d.ts +49 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +118 -50
- package/dist/index.js.map +1 -1
- package/dist/launchopts.d.ts +44 -0
- package/dist/launchopts.d.ts.map +1 -1
- package/dist/launchopts.js +78 -0
- package/dist/launchopts.js.map +1 -1
- package/dist/license.d.ts +69 -4
- package/dist/license.d.ts.map +1 -1
- package/dist/license.js +355 -28
- package/dist/license.js.map +1 -1
- package/dist/multiplex.d.ts +111 -0
- package/dist/multiplex.d.ts.map +1 -0
- package/dist/multiplex.js +536 -0
- package/dist/multiplex.js.map +1 -0
- package/dist/net.d.ts +36 -0
- package/dist/net.d.ts.map +1 -0
- package/dist/net.js +278 -0
- package/dist/net.js.map +1 -0
- package/package.json +2 -1
package/dist/license.js
CHANGED
|
@@ -8,13 +8,20 @@
|
|
|
8
8
|
//
|
|
9
9
|
// With NO license key this is entirely inert — the free build never calls the
|
|
10
10
|
// backend and never gates. See clearcoat/PRIVATE-SDK-LICENSING-PLAN.md.
|
|
11
|
-
import { existsSync, readFileSync, mkdirSync, writeFileSync } from "node:fs";
|
|
12
|
-
import { homedir } from "node:os";
|
|
11
|
+
import { existsSync, readFileSync, mkdirSync, writeFileSync, rmSync, chmodSync } from "node:fs";
|
|
12
|
+
import { homedir, tmpdir } from "node:os";
|
|
13
13
|
import { join } from "node:path";
|
|
14
14
|
import { createHash, randomUUID } from "node:crypto";
|
|
15
|
+
import { proxiedRequest, toProxySpec } from "./net.js";
|
|
15
16
|
/** Default backend. Override with `licenseApiBase` or CLEARCOTE_LICENSE_API. */
|
|
16
17
|
const DEFAULT_API_BASE = "https://www.clearcotelabs.com";
|
|
17
18
|
const RUN_TOKEN_ENV = "CLEARCOTE_RUN_TOKEN";
|
|
19
|
+
/** Whether licence calls should use the launch proxy: explicit option, else the env switch. */
|
|
20
|
+
export function licenseThroughProxyRequested(opt, env = process.env) {
|
|
21
|
+
if (opt !== undefined)
|
|
22
|
+
return opt;
|
|
23
|
+
return /^(1|true|yes|on)$/i.test((env.CLEARCOTE_LICENSE_THROUGH_PROXY ?? "").trim());
|
|
24
|
+
}
|
|
18
25
|
export class LicenseError extends Error {
|
|
19
26
|
code;
|
|
20
27
|
constructor(message, code = "LICENSE_ERROR") {
|
|
@@ -100,14 +107,32 @@ function cachePath(licenseKey) {
|
|
|
100
107
|
function readCache(licenseKey) {
|
|
101
108
|
try {
|
|
102
109
|
const d = JSON.parse(readFileSync(cachePath(licenseKey), "utf8"));
|
|
103
|
-
if (d && typeof d.token === "string" && typeof d.exp === "number")
|
|
110
|
+
if (d && typeof d.token === "string" && typeof d.exp === "number") {
|
|
111
|
+
// A per-browser (free-tier) token belongs to the one browser it was checked out for. Reusing it
|
|
112
|
+
// would start another browser without a slot, so it is never taken from the cache, even one an
|
|
113
|
+
// older SDK wrote. Paid tokens are reused exactly as before.
|
|
114
|
+
if (tokenPlan(d.token) === PER_BROWSER_PLAN)
|
|
115
|
+
return null;
|
|
104
116
|
return d;
|
|
117
|
+
}
|
|
105
118
|
}
|
|
106
119
|
catch {
|
|
107
120
|
/* ignore */
|
|
108
121
|
}
|
|
109
122
|
return null;
|
|
110
123
|
}
|
|
124
|
+
/** The plan a run-token was minted for, read from its payload WITHOUT verifying it (routing only). */
|
|
125
|
+
export function tokenPlan(token) {
|
|
126
|
+
try {
|
|
127
|
+
const body = token.split(".")[0] ?? "";
|
|
128
|
+
const json = Buffer.from(body.replace(/-/g, "+").replace(/_/g, "/"), "base64").toString("utf8");
|
|
129
|
+
const plan = JSON.parse(json).plan;
|
|
130
|
+
return typeof plan === "string" ? plan : undefined;
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
111
136
|
function writeCache(licenseKey, token, exp, leaseId) {
|
|
112
137
|
try {
|
|
113
138
|
const dir = join(homedir(), ".clearcote");
|
|
@@ -118,12 +143,23 @@ function writeCache(licenseKey, token, exp, leaseId) {
|
|
|
118
143
|
/* ignore */
|
|
119
144
|
}
|
|
120
145
|
}
|
|
121
|
-
|
|
122
|
-
|
|
146
|
+
/** The plan whose tokens are per browser. Only used to keep such tokens out of the shared cache. */
|
|
147
|
+
const PER_BROWSER_PLAN = "free";
|
|
148
|
+
/** One id per browser launch: the backend counts every launch_id as its own slot on per-browser plans. */
|
|
149
|
+
export function newLaunchId() {
|
|
150
|
+
return randomUUID().replace(/-/g, "");
|
|
151
|
+
}
|
|
152
|
+
async function postJson(url, licenseKey, body, proxy) {
|
|
153
|
+
const init = {
|
|
123
154
|
method: "POST",
|
|
124
155
|
headers: { authorization: `Bearer ${licenseKey}`, "content-type": "application/json" },
|
|
125
156
|
body: JSON.stringify(body),
|
|
126
|
-
}
|
|
157
|
+
};
|
|
158
|
+
// Through the launch proxy when licenseThroughProxy is on; otherwise the plain fetch path, which
|
|
159
|
+
// is unchanged from before the option existed.
|
|
160
|
+
if (proxy)
|
|
161
|
+
return proxiedRequest(url, { ...init, proxy, timeoutMs: 30_000 });
|
|
162
|
+
return fetch(url, init);
|
|
127
163
|
}
|
|
128
164
|
function throwForStatus(status, body) {
|
|
129
165
|
const msg = body?.error || `License request failed (${status}).`;
|
|
@@ -136,6 +172,53 @@ function throwForStatus(status, body) {
|
|
|
136
172
|
// Seconds of headroom kept before a token's exp: reuse it only while still valid
|
|
137
173
|
// with this much slack, so an in-flight launch never ships an expiring token.
|
|
138
174
|
const SKEW_SEC = 60;
|
|
175
|
+
// ── run-token files (engine online-enforcement opt-in) ───────────────────────
|
|
176
|
+
// A supporting engine (152 r23+) re-reads the run-token from CLEARCOTE_RUN_TOKEN_FILE and stops a
|
|
177
|
+
// running FREE browser once the token stops advancing (the SDK can only advance it by heartbeating,
|
|
178
|
+
// which the backend gates). This class mirrors a lease's rotating token into one file per launch and
|
|
179
|
+
// removes it on close. Older engines ignore the file (they read CLEARCOTE_RUN_TOKEN once at launch),
|
|
180
|
+
// so it is purely additive — nothing breaks if the engine does not support it.
|
|
181
|
+
class TokenFileSet {
|
|
182
|
+
files = new Set();
|
|
183
|
+
/** Create a token file seeded with `current`, kept updated until release() removes it. */
|
|
184
|
+
bind(current) {
|
|
185
|
+
const path = join(tmpdir(), `clearcote-rt-${randomUUID()}.tok`);
|
|
186
|
+
this.writeOne(path, current);
|
|
187
|
+
const entry = { path };
|
|
188
|
+
this.files.add(entry);
|
|
189
|
+
return {
|
|
190
|
+
file: path,
|
|
191
|
+
release: () => {
|
|
192
|
+
this.files.delete(entry);
|
|
193
|
+
try {
|
|
194
|
+
rmSync(path, { force: true });
|
|
195
|
+
}
|
|
196
|
+
catch { /* already gone */ }
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/** Rewrite every live file with the freshly-rotated token. */
|
|
201
|
+
update(token) {
|
|
202
|
+
for (const e of this.files)
|
|
203
|
+
this.writeOne(e.path, token);
|
|
204
|
+
}
|
|
205
|
+
/** Remove every file (lease shutdown). */
|
|
206
|
+
closeAll() {
|
|
207
|
+
for (const e of this.files) {
|
|
208
|
+
try {
|
|
209
|
+
rmSync(e.path, { force: true });
|
|
210
|
+
}
|
|
211
|
+
catch { /* ignore */ }
|
|
212
|
+
}
|
|
213
|
+
this.files.clear();
|
|
214
|
+
}
|
|
215
|
+
writeOne(path, token) {
|
|
216
|
+
try {
|
|
217
|
+
writeFileSync(path, token, { mode: 0o600 });
|
|
218
|
+
}
|
|
219
|
+
catch { /* the launch still has CLEARCOTE_RUN_TOKEN */ }
|
|
220
|
+
}
|
|
221
|
+
}
|
|
139
222
|
/**
|
|
140
223
|
* One shared lease per (process, license key).
|
|
141
224
|
*
|
|
@@ -153,9 +236,21 @@ class MachineLease {
|
|
|
153
236
|
sdkVersion;
|
|
154
237
|
quiet;
|
|
155
238
|
engineVersion;
|
|
156
|
-
|
|
239
|
+
proxy;
|
|
240
|
+
_token = null;
|
|
241
|
+
tokenFiles = new TokenFileSet();
|
|
242
|
+
get token() { return this._token; }
|
|
243
|
+
set token(v) { this._token = v; if (v)
|
|
244
|
+
this.tokenFiles.update(v); }
|
|
245
|
+
/** Bind a per-launch token file that follows this lease's rotating token. */
|
|
246
|
+
bindLaunch() { return this.tokenFiles.bind(this._token ?? ""); }
|
|
157
247
|
exp = 0;
|
|
158
248
|
leaseId = null;
|
|
249
|
+
/** Learned from the first checkout: "browser" means every launch holds its own lease. */
|
|
250
|
+
scope = "machine";
|
|
251
|
+
/** A per-browser checkout made by ensure(), waiting for the one launch that asked for it. */
|
|
252
|
+
pendingBrowser = null;
|
|
253
|
+
browsers = new Set();
|
|
159
254
|
hbSec = 270;
|
|
160
255
|
owner = false;
|
|
161
256
|
timer = null;
|
|
@@ -165,13 +260,14 @@ class MachineLease {
|
|
|
165
260
|
constructor(key, base, instanceId, sdkVersion, quiet,
|
|
166
261
|
// Resolved browser build (e.g. "150.0.7871.114"). A string, or a thunk that resolves it lazily
|
|
167
262
|
// so the catalog is only consulted on a cold checkout — never per launch. Telemetry only.
|
|
168
|
-
engineVersion) {
|
|
263
|
+
engineVersion, proxy = null) {
|
|
169
264
|
this.key = key;
|
|
170
265
|
this.base = base;
|
|
171
266
|
this.instanceId = instanceId;
|
|
172
267
|
this.sdkVersion = sdkVersion;
|
|
173
268
|
this.quiet = quiet;
|
|
174
269
|
this.engineVersion = engineVersion;
|
|
270
|
+
this.proxy = proxy;
|
|
175
271
|
}
|
|
176
272
|
valid() {
|
|
177
273
|
return !!this.token && this.exp > Math.floor(Date.now() / 1000) + SKEW_SEC;
|
|
@@ -212,22 +308,41 @@ class MachineLease {
|
|
|
212
308
|
return; // NO checkout, NO heartbeat
|
|
213
309
|
}
|
|
214
310
|
await this.checkout();
|
|
311
|
+
if (this.scope === "browser")
|
|
312
|
+
return; // the lease belongs to one launch; see acquire()
|
|
215
313
|
this.owner = true;
|
|
216
314
|
this.startHeartbeat();
|
|
217
315
|
}
|
|
316
|
+
/** POST a checkout for one launch. Throws the backend's verdict; network errors propagate. */
|
|
317
|
+
async checkoutFor(launchId) {
|
|
318
|
+
const res = await postJson(`${this.base}/api/v1/lease/checkout`, this.key, {
|
|
319
|
+
instance_id: this.instanceId,
|
|
320
|
+
// Per-browser plans count each launch_id as its own slot; machine plans ignore it.
|
|
321
|
+
launch_id: launchId,
|
|
322
|
+
os: osTag(),
|
|
323
|
+
sdk_version: this.sdkVersion,
|
|
324
|
+
engine_version: await this.engineVer(),
|
|
325
|
+
}, this.proxy);
|
|
326
|
+
if (!res.ok) {
|
|
327
|
+
const body = (await res.json().catch(() => ({})));
|
|
328
|
+
throwForStatus(res.status, body);
|
|
329
|
+
}
|
|
330
|
+
return (await res.json());
|
|
331
|
+
}
|
|
332
|
+
/** Heartbeat / re-checkout / check-in for a BrowserLease, over this lease's route (direct or proxy). */
|
|
333
|
+
post(path, body) {
|
|
334
|
+
return postJson(`${this.base}${path}`, this.key, body, this.proxy);
|
|
335
|
+
}
|
|
218
336
|
async checkout() {
|
|
219
337
|
try {
|
|
220
|
-
const
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
const body = (await res.json().catch(() => ({})));
|
|
228
|
-
throwForStatus(res.status, body);
|
|
338
|
+
const launchId = newLaunchId();
|
|
339
|
+
const co = await this.checkoutFor(launchId);
|
|
340
|
+
if (co.lease_scope === "browser") {
|
|
341
|
+
// Per-browser plan: this checkout is the calling launch's own slot. Never shared, never cached.
|
|
342
|
+
this.scope = "browser";
|
|
343
|
+
this.pendingBrowser = { co, launchId };
|
|
344
|
+
return;
|
|
229
345
|
}
|
|
230
|
-
const co = (await res.json());
|
|
231
346
|
this.token = co.token;
|
|
232
347
|
this.exp = co.exp;
|
|
233
348
|
this.leaseId = co.lease_id;
|
|
@@ -258,14 +373,14 @@ class MachineLease {
|
|
|
258
373
|
const res = await postJson(`${this.base}/api/v1/lease/heartbeat`, this.key, {
|
|
259
374
|
lease_id: this.leaseId,
|
|
260
375
|
nonce: randomUUID(),
|
|
261
|
-
});
|
|
376
|
+
}, this.proxy);
|
|
262
377
|
if (res.status === 409) {
|
|
263
378
|
const co = await postJson(`${this.base}/api/v1/lease/checkout`, this.key, {
|
|
264
379
|
instance_id: this.instanceId,
|
|
265
380
|
os: osTag(),
|
|
266
381
|
sdk_version: this.sdkVersion,
|
|
267
382
|
engine_version: await this.engineVer(),
|
|
268
|
-
});
|
|
383
|
+
}, this.proxy);
|
|
269
384
|
if (co.ok) {
|
|
270
385
|
const d = (await co.json());
|
|
271
386
|
this.leaseId = d.lease_id;
|
|
@@ -289,7 +404,16 @@ class MachineLease {
|
|
|
289
404
|
this.timer.unref?.();
|
|
290
405
|
}
|
|
291
406
|
async acquire() {
|
|
407
|
+
if (this.perBrowser())
|
|
408
|
+
return this.acquireBrowser();
|
|
292
409
|
await this.ensure();
|
|
410
|
+
if (this.perBrowser()) {
|
|
411
|
+
// ensure() discovered the per-browser scope. Exactly one waiting launch takes the checkout it
|
|
412
|
+
// made; every other launch (including ones that were waiting on the same ensure) checks out its own.
|
|
413
|
+
const pending = this.pendingBrowser;
|
|
414
|
+
this.pendingBrowser = null;
|
|
415
|
+
return pending ? this.startBrowser(pending.co, pending.launchId) : this.acquireBrowser();
|
|
416
|
+
}
|
|
293
417
|
this.refs++;
|
|
294
418
|
const self = this;
|
|
295
419
|
return {
|
|
@@ -304,20 +428,48 @@ class MachineLease {
|
|
|
304
428
|
stop: async () => {
|
|
305
429
|
self.release();
|
|
306
430
|
},
|
|
431
|
+
bindLaunch: () => self.bindLaunch(),
|
|
307
432
|
};
|
|
308
433
|
}
|
|
434
|
+
/** Read through a method: ensure() can change the scope while acquire() awaits it. */
|
|
435
|
+
perBrowser() {
|
|
436
|
+
return this.scope === "browser";
|
|
437
|
+
}
|
|
309
438
|
release() {
|
|
310
439
|
if (this.refs > 0)
|
|
311
440
|
this.refs--;
|
|
312
441
|
}
|
|
442
|
+
/** A new launch on a per-browser plan: its own checkout. A refusal (one browser already running) throws. */
|
|
443
|
+
async acquireBrowser() {
|
|
444
|
+
const launchId = newLaunchId();
|
|
445
|
+
let co;
|
|
446
|
+
try {
|
|
447
|
+
co = await this.checkoutFor(launchId);
|
|
448
|
+
}
|
|
449
|
+
catch (e) {
|
|
450
|
+
if (e instanceof LicenseError)
|
|
451
|
+
throw e;
|
|
452
|
+
// No offline grace here: without the backend there is no slot for this browser.
|
|
453
|
+
throw new LicenseError(`Could not reach the license server to start this browser: ${String(e)}`);
|
|
454
|
+
}
|
|
455
|
+
return this.startBrowser(co, launchId);
|
|
456
|
+
}
|
|
457
|
+
startBrowser(co, launchId) {
|
|
458
|
+
const lease = new BrowserLease(this, co, launchId, () => this.browsers.delete(lease));
|
|
459
|
+
this.browsers.add(lease);
|
|
460
|
+
return lease.session();
|
|
461
|
+
}
|
|
313
462
|
async shutdown() {
|
|
463
|
+
this.tokenFiles.closeAll();
|
|
464
|
+
// Per-browser leases still open at exit (a browser nobody closed): release their slots too.
|
|
465
|
+
await Promise.all([...this.browsers].map((b) => b.stop()));
|
|
314
466
|
if (this.timer) {
|
|
315
467
|
clearInterval(this.timer);
|
|
316
468
|
this.timer = null;
|
|
317
469
|
}
|
|
318
470
|
if (this.owner && this.leaseId) {
|
|
319
471
|
try {
|
|
320
|
-
await postJson(`${this.base}/api/v1/lease/checkin`, this.key, { lease_id: this.leaseId });
|
|
472
|
+
await postJson(`${this.base}/api/v1/lease/checkin`, this.key, { lease_id: this.leaseId }, this.proxy);
|
|
321
473
|
}
|
|
322
474
|
catch {
|
|
323
475
|
/* best-effort; the lease TTL reclaims it anyway */
|
|
@@ -325,12 +477,99 @@ class MachineLease {
|
|
|
325
477
|
}
|
|
326
478
|
}
|
|
327
479
|
}
|
|
480
|
+
/**
|
|
481
|
+
* One browser's own lease on a per-browser plan (the free tier: "1 browser at a time").
|
|
482
|
+
*
|
|
483
|
+
* Checked out for exactly one launch, heartbeated while that browser runs, checked in when it closes.
|
|
484
|
+
* Its token is never written to the shared cache and never handed to another launch.
|
|
485
|
+
*/
|
|
486
|
+
class BrowserLease {
|
|
487
|
+
owner;
|
|
488
|
+
launchId;
|
|
489
|
+
onStop;
|
|
490
|
+
_token;
|
|
491
|
+
tokenFiles = new TokenFileSet();
|
|
492
|
+
get token() { return this._token; }
|
|
493
|
+
set token(v) { this._token = v; this.tokenFiles.update(v); }
|
|
494
|
+
/** Bind a per-launch token file that follows this browser's rotating token. */
|
|
495
|
+
bindLaunch() { return this.tokenFiles.bind(this._token); }
|
|
496
|
+
leaseId;
|
|
497
|
+
timer = null;
|
|
498
|
+
stopped = false;
|
|
499
|
+
constructor(owner, co, launchId, onStop) {
|
|
500
|
+
this.owner = owner;
|
|
501
|
+
this.launchId = launchId;
|
|
502
|
+
this.onStop = onStop;
|
|
503
|
+
this.token = co.token;
|
|
504
|
+
this.leaseId = co.lease_id;
|
|
505
|
+
const hbMs = Math.max(5, co.heartbeat_interval_sec || 120) * 1000;
|
|
506
|
+
this.timer = setInterval(() => void this.beat(), hbMs);
|
|
507
|
+
this.timer.unref?.();
|
|
508
|
+
}
|
|
509
|
+
async beat() {
|
|
510
|
+
if (this.stopped)
|
|
511
|
+
return;
|
|
512
|
+
try {
|
|
513
|
+
const res = await this.owner.post("/api/v1/lease/heartbeat", { lease_id: this.leaseId, nonce: randomUUID() });
|
|
514
|
+
if (res.status === 409) {
|
|
515
|
+
// Reclaimed (e.g. missed beats): re-take the slot as the SAME launch, which the backend treats
|
|
516
|
+
// as this browser's own lease. If another browser took the slot meanwhile, this is refused.
|
|
517
|
+
const co = await this.owner.checkoutFor(this.launchId);
|
|
518
|
+
this.leaseId = co.lease_id;
|
|
519
|
+
this.token = co.token;
|
|
520
|
+
return;
|
|
521
|
+
}
|
|
522
|
+
if (res.ok) {
|
|
523
|
+
const d = (await res.json());
|
|
524
|
+
if (typeof d.token === "string")
|
|
525
|
+
this.token = d.token;
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
catch {
|
|
529
|
+
/* transient; the next beat retries, and the lease TTL is the backstop */
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
async stop() {
|
|
533
|
+
if (this.stopped)
|
|
534
|
+
return;
|
|
535
|
+
this.stopped = true;
|
|
536
|
+
this.tokenFiles.closeAll();
|
|
537
|
+
if (this.timer) {
|
|
538
|
+
clearInterval(this.timer);
|
|
539
|
+
this.timer = null;
|
|
540
|
+
}
|
|
541
|
+
this.onStop();
|
|
542
|
+
try {
|
|
543
|
+
await this.owner.post("/api/v1/lease/checkin", { lease_id: this.leaseId });
|
|
544
|
+
}
|
|
545
|
+
catch {
|
|
546
|
+
/* best-effort; the lease TTL reclaims it */
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
session() {
|
|
550
|
+
const self = this;
|
|
551
|
+
return {
|
|
552
|
+
get token() {
|
|
553
|
+
return self.token;
|
|
554
|
+
},
|
|
555
|
+
get leaseId() {
|
|
556
|
+
return self.leaseId;
|
|
557
|
+
},
|
|
558
|
+
stop: () => self.stop(),
|
|
559
|
+
bindLaunch: () => self.bindLaunch(),
|
|
560
|
+
};
|
|
561
|
+
}
|
|
562
|
+
}
|
|
328
563
|
const machineLeases = new Map();
|
|
329
564
|
let exitHooked = false;
|
|
330
565
|
/**
|
|
331
|
-
* Acquire a
|
|
332
|
-
*
|
|
333
|
-
*
|
|
566
|
+
* Acquire a concurrency lease for one launch. Returns `null` in free mode (no key).
|
|
567
|
+
*
|
|
568
|
+
* Machine plans (every paid plan): a per-MACHINE lease shared across every launch in this process
|
|
569
|
+
* (checks out ~once per token-TTL, not once per launch); `stop()` only drops a reference.
|
|
570
|
+
* Per-browser plans (the GitHub free tier, told by the backend's `lease_scope: "browser"`): every
|
|
571
|
+
* launch checks out its own slot, and `stop()` releases it, so a second browser is refused while one runs.
|
|
572
|
+
* Throws {@link ConcurrencyLimitError} / {@link LicenseRevokedError} /
|
|
334
573
|
* {@link LicenseError} only on a cold checkout the backend definitively refuses;
|
|
335
574
|
* falls back to a cached, still-valid token on a transient network failure.
|
|
336
575
|
*/
|
|
@@ -339,10 +578,18 @@ export async function acquireLease(opts = {}) {
|
|
|
339
578
|
if (!licenseKey)
|
|
340
579
|
return null; // free mode — inert
|
|
341
580
|
const base = apiBase(opts);
|
|
342
|
-
|
|
581
|
+
const viaProxy = licenseThroughProxyRequested(opts.licenseThroughProxy) ? toProxySpec(opts.proxy ?? null) : null;
|
|
582
|
+
if (licenseThroughProxyRequested(opts.licenseThroughProxy) && !viaProxy && !opts.quiet) {
|
|
583
|
+
process.stderr.write("[clearcote] [license] licenseThroughProxy is on but this launch has no proxy; licence calls go direct.\n");
|
|
584
|
+
}
|
|
585
|
+
// One lease per (key, route): a direct lease and a proxied lease are different network paths, so
|
|
586
|
+
// they must not share the in-process heartbeat owner.
|
|
587
|
+
// The username is part of the route: sticky-session gateways encode the session in it.
|
|
588
|
+
const mapKey = viaProxy ? `${licenseKey}|${viaProxy.server}|${viaProxy.username ?? ""}` : licenseKey;
|
|
589
|
+
let ml = machineLeases.get(mapKey);
|
|
343
590
|
if (!ml) {
|
|
344
|
-
ml = new MachineLease(licenseKey, base, resolveInstanceId(), opts.sdkVersion, !!opts.quiet, opts.engineVersion);
|
|
345
|
-
machineLeases.set(
|
|
591
|
+
ml = new MachineLease(licenseKey, base, resolveInstanceId(), opts.sdkVersion, !!opts.quiet, opts.engineVersion, viaProxy);
|
|
592
|
+
machineLeases.set(mapKey, ml);
|
|
346
593
|
}
|
|
347
594
|
if (!exitHooked) {
|
|
348
595
|
exitHooked = true;
|
|
@@ -354,13 +601,93 @@ export async function acquireLease(opts = {}) {
|
|
|
354
601
|
return ml.acquire();
|
|
355
602
|
}
|
|
356
603
|
/** Merge the run-token into a child-process env (base defaults to the parent env). */
|
|
357
|
-
export function withRunToken(token, baseEnv) {
|
|
604
|
+
export function withRunToken(token, baseEnv, tokenFile) {
|
|
358
605
|
const src = baseEnv ?? process.env;
|
|
359
606
|
const out = {};
|
|
360
607
|
for (const [k, v] of Object.entries(src))
|
|
361
608
|
if (v !== undefined)
|
|
362
609
|
out[k] = v;
|
|
363
610
|
out[RUN_TOKEN_ENV] = token;
|
|
611
|
+
// A supporting engine (r23+) re-reads this file so revoke/check-in/over-limit stops a running free
|
|
612
|
+
// browser. Older engines ignore it. Additive: the launch-time token above is unchanged.
|
|
613
|
+
if (tokenFile)
|
|
614
|
+
out[`${RUN_TOKEN_ENV}_FILE`] = tokenFile;
|
|
364
615
|
return out;
|
|
365
616
|
}
|
|
617
|
+
/**
|
|
618
|
+
* Seats in use on a licence right now (live leases), without checking one out. Never cached and
|
|
619
|
+
* never throws: an unreachable backend or an older backend without the endpoint reports
|
|
620
|
+
* `state: "unavailable"` with the reason, rather than a guessed number.
|
|
621
|
+
*/
|
|
622
|
+
export async function getSessionSeats(opts = {}) {
|
|
623
|
+
const key = resolveLicenseKey(opts.licenseKey);
|
|
624
|
+
if (!key)
|
|
625
|
+
return { state: "no-key" };
|
|
626
|
+
const via = licenseThroughProxyRequested(opts.licenseThroughProxy) ? toProxySpec(opts.proxy ?? null) : null;
|
|
627
|
+
try {
|
|
628
|
+
const res = await proxiedRequest(`${apiBase(opts)}/api/v1/lease/seats`, {
|
|
629
|
+
method: "GET",
|
|
630
|
+
headers: { authorization: `Bearer ${key}` },
|
|
631
|
+
proxy: via,
|
|
632
|
+
timeoutMs: 15_000,
|
|
633
|
+
});
|
|
634
|
+
const body = (await res.json().catch(() => ({})));
|
|
635
|
+
if (res.ok && typeof body.used === "number") {
|
|
636
|
+
return { state: "ok", used: body.used, limit: body.limit ?? null, plan: body.plan };
|
|
637
|
+
}
|
|
638
|
+
if (res.status === 401 || res.status === 403)
|
|
639
|
+
return { state: "invalid", reason: body.error || `HTTP ${res.status}` };
|
|
640
|
+
if (res.status === 404)
|
|
641
|
+
return { state: "unavailable", reason: "this licence server does not report seats yet" };
|
|
642
|
+
return { state: "unavailable", reason: body.error || `HTTP ${res.status}` };
|
|
643
|
+
}
|
|
644
|
+
catch (e) {
|
|
645
|
+
return { state: "unavailable", reason: `licence server unreachable (${e.message})` };
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
/** Where `clearcote login` stores the key: ~/.clearcote/license.key. */
|
|
649
|
+
export function licenseKeyPath() {
|
|
650
|
+
return join(homedir(), ".clearcote", "license.key");
|
|
651
|
+
}
|
|
652
|
+
/** Save a licence key for every later launch (owner-only permissions where the OS supports it). */
|
|
653
|
+
export function saveLicenseKey(key) {
|
|
654
|
+
const k = key.trim();
|
|
655
|
+
if (!k)
|
|
656
|
+
throw new LicenseError("Empty licence key.", "LICENSE_EMPTY");
|
|
657
|
+
const p = licenseKeyPath();
|
|
658
|
+
mkdirSync(join(homedir(), ".clearcote"), { recursive: true });
|
|
659
|
+
writeFileSync(p, k + "\n", { mode: 0o600 });
|
|
660
|
+
try {
|
|
661
|
+
chmodSync(p, 0o600);
|
|
662
|
+
}
|
|
663
|
+
catch { /* not supported on this filesystem */ }
|
|
664
|
+
return p;
|
|
665
|
+
}
|
|
666
|
+
/** Remove the saved key. Returns true when a file was removed. */
|
|
667
|
+
export function removeLicenseKey() {
|
|
668
|
+
const p = licenseKeyPath();
|
|
669
|
+
if (!existsSync(p))
|
|
670
|
+
return false;
|
|
671
|
+
rmSync(p, { force: true });
|
|
672
|
+
return true;
|
|
673
|
+
}
|
|
674
|
+
/** Where the key a launch would use comes from, without revealing it. */
|
|
675
|
+
export function licenseKeySource(explicit) {
|
|
676
|
+
const mask = (k) => (k.length > 12 ? `${k.slice(0, 7)}…${k.slice(-4)}` : "…");
|
|
677
|
+
if (explicit && explicit.trim())
|
|
678
|
+
return { source: "option", masked: mask(explicit.trim()) };
|
|
679
|
+
const env = process.env.CLEARCOTE_LICENSE_KEY;
|
|
680
|
+
if (env && env.trim())
|
|
681
|
+
return { source: "env", masked: mask(env.trim()) };
|
|
682
|
+
try {
|
|
683
|
+
const p = licenseKeyPath();
|
|
684
|
+
if (existsSync(p)) {
|
|
685
|
+
const v = readFileSync(p, "utf8").trim();
|
|
686
|
+
if (v)
|
|
687
|
+
return { source: "file", masked: mask(v) };
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
catch { /* ignore */ }
|
|
691
|
+
return { source: "none" };
|
|
692
|
+
}
|
|
366
693
|
//# sourceMappingURL=license.js.map
|
package/dist/license.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"license.js","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"license.js","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"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"}
|