unbrowse 4.0.0 → 4.0.1

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/dist/cli.js CHANGED
@@ -31,7 +31,7 @@ var __promiseAll = (args) => Promise.all(args);
31
31
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
32
32
 
33
33
  // ../../src/build-info.generated.ts
34
- var BUILD_RELEASE_VERSION = "4.0.0", BUILD_GIT_SHA = "d08d50cd0432", BUILD_CODE_HASH = "5d9ebf619c61", BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiNC4wLjAiLCJnaXRfc2hhIjoiZDA4ZDUwY2QwNDMyIiwiY29kZV9oYXNoIjoiNWQ5ZWJmNjE5YzYxIiwidHJhY2VfdmVyc2lvbiI6IjVkOWViZjYxOWM2MUBkMDhkNTBjZDA0MzIiLCJpc3N1ZWRfYXQiOiIyMDI2LTA0LTI1VDAyOjM5OjQxLjc4OVoifQ", BUILD_RELEASE_MANIFEST_SIGNATURE = "ICQ4NQIuyX0CMPhz1VoclQwk4PHMivS0ddVrr1ZTFgc", BUILD_DEFAULT_BACKEND_URL = "https://beta-api.unbrowse.ai";
34
+ var BUILD_RELEASE_VERSION = "4.0.1", BUILD_GIT_SHA = "1f3097d82cad", BUILD_CODE_HASH = "5d9ebf619c61", BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiNC4wLjEiLCJnaXRfc2hhIjoiMWYzMDk3ZDgyY2FkIiwiY29kZV9oYXNoIjoiNWQ5ZWJmNjE5YzYxIiwidHJhY2VfdmVyc2lvbiI6IjVkOWViZjYxOWM2MUAxZjMwOTdkODJjYWQiLCJpc3N1ZWRfYXQiOiIyMDI2LTA0LTI1VDAzOjE0OjAyLjU2MVoifQ", BUILD_RELEASE_MANIFEST_SIGNATURE = "Csq--Ymsq3ZSoGooWl9PUup0wzkTbB5uzhEiij1mjdY", BUILD_DEFAULT_BACKEND_URL = "https://beta-api.unbrowse.ai";
35
35
 
36
36
  // ../../src/version.ts
37
37
  import { createHash } from "crypto";
@@ -5153,11 +5153,6 @@ async function cmdSetup(flags) {
5153
5153
  properties: { command: "setup" }
5154
5154
  });
5155
5155
  info("Running setup checks");
5156
- try {
5157
- await ensureRegistered({ promptForEmail: false, exitOnFailure: false });
5158
- } catch (err) {
5159
- info(`[setup] background registration issue: ${err instanceof Error ? err.message : err}`);
5160
- }
5161
5156
  const report = await runSetup({
5162
5157
  cwd: process.cwd(),
5163
5158
  opencode: normalizeSetupScope(flags.opencode),
@@ -5225,9 +5220,6 @@ async function cmdSetup(flags) {
5225
5220
  process.exit(1);
5226
5221
  return;
5227
5222
  }
5228
- if (!getApiKey()) {
5229
- await ensureRegistered({ promptForEmail: true });
5230
- }
5231
5223
  try {
5232
5224
  await ensureLocalServer(BASE_URL, false, import.meta.url);
5233
5225
  report.server = { started: true, base_url: BASE_URL };
@@ -5341,7 +5333,8 @@ var CLI_REFERENCE = {
5341
5333
  { name: "flywheel", usage: "[--json] [--pretty]", desc: "Flywheel pulse: funnel, credits, index health, economics, conversions" },
5342
5334
  { name: "earnings", usage: "[--json]", desc: "Show your credit balance, earnings from indexing, and spending" },
5343
5335
  { name: "corpus-test", usage: "--url <url> [--id <id>] [--retries N]", desc: "Capture a single URL with retry logic; keeps best result across N attempts" },
5344
- { name: "corpus-run", usage: "--corpus <file> --out <file> [--retries N]", desc: "Run corpus-test over all cases in a corpus JSON file and write a comparable snapshot" }
5336
+ { name: "corpus-run", usage: "--corpus <file> --out <file> [--retries N]", desc: "Run corpus-test over all cases in a corpus JSON file and write a comparable snapshot" },
5337
+ { name: "register", usage: "[--no-prompt]", desc: "Optional: register an API key to publish skills, check earnings, and access backend analytics" }
5345
5338
  ],
5346
5339
  globalFlags: [
5347
5340
  { flag: "--pretty", desc: "Indented JSON output" },
@@ -5934,6 +5927,18 @@ async function cmdSync(flags) {
5934
5927
  async function cmdClose(flags) {
5935
5928
  output(await api2("POST", "/v1/browse/close", typeof flags.session === "string" ? { session_id: flags.session } : undefined), false);
5936
5929
  }
5930
+ async function cmdRegister(flags) {
5931
+ if (getApiKey()) {
5932
+ info("Already registered. API key loaded from env or ~/.unbrowse/config.json");
5933
+ return;
5934
+ }
5935
+ await ensureRegistered({ promptForEmail: !flags["no-prompt"], exitOnFailure: false });
5936
+ if (getApiKey()) {
5937
+ info("Registration complete. You can now publish skills and check earnings.");
5938
+ } else {
5939
+ info("Registration skipped or failed. Unbrowse still works locally \u2014 publish/earnings are disabled.");
5940
+ }
5941
+ }
5937
5942
  async function cmdSessionsScan(flags) {
5938
5943
  const domain = flags.domain;
5939
5944
  const { scanAllBrowserSessions: scanAllBrowserSessions3, findBestBrowserSession: findBestBrowserSession3 } = await Promise.resolve().then(() => (init_browser_cookies2(), exports_browser_cookies2));
@@ -6233,6 +6238,8 @@ async function main() {
6233
6238
  return cmdEarnings(flags);
6234
6239
  if (command === "sessions-scan")
6235
6240
  return cmdSessionsScan(flags);
6241
+ if (command === "register")
6242
+ return cmdRegister(flags);
6236
6243
  const KNOWN_COMMANDS = new Set([
6237
6244
  "health",
6238
6245
  "mcp",
@@ -6284,7 +6291,8 @@ async function main() {
6284
6291
  "corpus-test",
6285
6292
  "corpus-run",
6286
6293
  "sessions-scan",
6287
- "cache-clear"
6294
+ "cache-clear",
6295
+ "register"
6288
6296
  ]);
6289
6297
  if (!KNOWN_COMMANDS.has(command)) {
6290
6298
  const pack = findSitePack(command);
@@ -6394,6 +6402,8 @@ async function main() {
6394
6402
  return cmdCorpusRun(flags);
6395
6403
  case "sessions-scan":
6396
6404
  return cmdSessionsScan(flags);
6405
+ case "register":
6406
+ return cmdRegister(flags);
6397
6407
  default:
6398
6408
  info(`Unknown command: ${command}`);
6399
6409
  printHelp();
package/dist/mcp.js CHANGED
@@ -226,11 +226,11 @@ import { dirname, join, parse } from "path";
226
226
  import { fileURLToPath as fileURLToPath2 } from "url";
227
227
 
228
228
  // ../../src/build-info.generated.ts
229
- var BUILD_RELEASE_VERSION = "4.0.0";
230
- var BUILD_GIT_SHA = "d08d50cd0432";
229
+ var BUILD_RELEASE_VERSION = "4.0.1";
230
+ var BUILD_GIT_SHA = "1f3097d82cad";
231
231
  var BUILD_CODE_HASH = "5d9ebf619c61";
232
- var BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiNC4wLjAiLCJnaXRfc2hhIjoiZDA4ZDUwY2QwNDMyIiwiY29kZV9oYXNoIjoiNWQ5ZWJmNjE5YzYxIiwidHJhY2VfdmVyc2lvbiI6IjVkOWViZjYxOWM2MUBkMDhkNTBjZDA0MzIiLCJpc3N1ZWRfYXQiOiIyMDI2LTA0LTI1VDAyOjM5OjQxLjc4OVoifQ";
233
- var BUILD_RELEASE_MANIFEST_SIGNATURE = "ICQ4NQIuyX0CMPhz1VoclQwk4PHMivS0ddVrr1ZTFgc";
232
+ var BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiNC4wLjEiLCJnaXRfc2hhIjoiMWYzMDk3ZDgyY2FkIiwiY29kZV9oYXNoIjoiNWQ5ZWJmNjE5YzYxIiwidHJhY2VfdmVyc2lvbiI6IjVkOWViZjYxOWM2MUAxZjMwOTdkODJjYWQiLCJpc3N1ZWRfYXQiOiIyMDI2LTA0LTI1VDAzOjE0OjAyLjU2MVoifQ";
233
+ var BUILD_RELEASE_MANIFEST_SIGNATURE = "Csq--Ymsq3ZSoGooWl9PUup0wzkTbB5uzhEiij1mjdY";
234
234
  var BUILD_DEFAULT_BACKEND_URL = "https://beta-api.unbrowse.ai";
235
235
 
236
236
  // ../../src/version.ts
package/dist/server.js CHANGED
@@ -7156,7 +7156,7 @@ var init_capture = __esm(async () => {
7156
7156
  });
7157
7157
 
7158
7158
  // ../../src/build-info.generated.ts
7159
- var BUILD_RELEASE_VERSION = "4.0.0", BUILD_GIT_SHA = "d08d50cd0432", BUILD_CODE_HASH = "5d9ebf619c61", BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiNC4wLjAiLCJnaXRfc2hhIjoiZDA4ZDUwY2QwNDMyIiwiY29kZV9oYXNoIjoiNWQ5ZWJmNjE5YzYxIiwidHJhY2VfdmVyc2lvbiI6IjVkOWViZjYxOWM2MUBkMDhkNTBjZDA0MzIiLCJpc3N1ZWRfYXQiOiIyMDI2LTA0LTI1VDAyOjM5OjQxLjc4OVoifQ", BUILD_RELEASE_MANIFEST_SIGNATURE = "ICQ4NQIuyX0CMPhz1VoclQwk4PHMivS0ddVrr1ZTFgc", BUILD_DEFAULT_BACKEND_URL = "https://beta-api.unbrowse.ai";
7159
+ var BUILD_RELEASE_VERSION = "4.0.1", BUILD_GIT_SHA = "1f3097d82cad", BUILD_CODE_HASH = "5d9ebf619c61", BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiNC4wLjEiLCJnaXRfc2hhIjoiMWYzMDk3ZDgyY2FkIiwiY29kZV9oYXNoIjoiNWQ5ZWJmNjE5YzYxIiwidHJhY2VfdmVyc2lvbiI6IjVkOWViZjYxOWM2MUAxZjMwOTdkODJjYWQiLCJpc3N1ZWRfYXQiOiIyMDI2LTA0LTI1VDAzOjE0OjAyLjU2MVoifQ", BUILD_RELEASE_MANIFEST_SIGNATURE = "Csq--Ymsq3ZSoGooWl9PUup0wzkTbB5uzhEiij1mjdY", BUILD_DEFAULT_BACKEND_URL = "https://beta-api.unbrowse.ai";
7160
7160
 
7161
7161
  // ../../src/version.ts
7162
7162
  import { createHash as createHash2 } from "crypto";
@@ -26445,24 +26445,15 @@ async function registerRoutes(app) {
26445
26445
  }
26446
26446
  return `${base}${suffix}`;
26447
26447
  }
26448
- app.addHook("onRequest", async (req, reply) => {
26448
+ app.addHook("onRequest", async (req, _reply) => {
26449
26449
  if (req.url === "/health" || req.url === "/v1/stats" || req.url.startsWith("/v1/settings"))
26450
26450
  return;
26451
- let key = getApiKey();
26452
- if (!key) {
26453
- try {
26454
- const { waitForBackgroundRegistration: waitForBackgroundRegistration2 } = await Promise.resolve().then(() => (init_client2(), exports_client2));
26455
- await waitForBackgroundRegistration2(1e4);
26456
- key = getApiKey();
26457
- } catch {}
26458
- }
26459
- if (!key) {
26460
- return reply.code(401).send({
26461
- error: "api_key_required",
26462
- message: "No API key configured. Run `unbrowse setup` to register, or set UNBROWSE_API_KEY manually.",
26463
- docs_url: "https://unbrowse.ai"
26464
- });
26465
- }
26451
+ if (getApiKey())
26452
+ return;
26453
+ try {
26454
+ const { waitForBackgroundRegistration: waitForBackgroundRegistration2 } = await Promise.resolve().then(() => (init_client2(), exports_client2));
26455
+ await waitForBackgroundRegistration2(2000);
26456
+ } catch {}
26466
26457
  });
26467
26458
  app.get("/v1/settings", async (_req, reply) => {
26468
26459
  return reply.send({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unbrowse",
3
- "version": "4.0.0",
3
+ "version": "4.0.1",
4
4
  "description": "Reverse-engineer any website into reusable API skills. Zero-dep single binary with embedded browser engine.",
5
5
  "type": "module",
6
6
  "bin": {