@unbrowse/sdk 11.1.1 → 11.1.5
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 +40 -192
- package/dist/client.d.ts +117 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +385 -0
- package/dist/client.js.map +1 -0
- package/dist/contracts.d.ts +541 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +2 -0
- package/dist/contracts.js.map +1 -0
- package/dist/errors.d.ts +27 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +47 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime.d.ts +78 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +339 -0
- package/dist/runtime.js.map +1 -0
- package/package.json +3 -4
package/dist/client.js
ADDED
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
import { InsufficientCreditsError, UnbrowseApiError } from "./errors.js";
|
|
2
|
+
import { probeUnbrowseRuntime, spawnUnbrowseRuntime, } from "./runtime.js";
|
|
3
|
+
function readEnv(name) {
|
|
4
|
+
const globalProcess = typeof globalThis === "object" && "process" in globalThis
|
|
5
|
+
? globalThis.process
|
|
6
|
+
: undefined;
|
|
7
|
+
if (!globalProcess?.env)
|
|
8
|
+
return undefined;
|
|
9
|
+
const value = globalProcess.env[name];
|
|
10
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
11
|
+
}
|
|
12
|
+
function normalizeBaseUrl(baseUrl) {
|
|
13
|
+
return (baseUrl ?? readEnv("UNBROWSE_URL") ?? "http://localhost:6969").replace(/\/+$/, "");
|
|
14
|
+
}
|
|
15
|
+
function isResolveResponse(value) {
|
|
16
|
+
return "trace" in value;
|
|
17
|
+
}
|
|
18
|
+
function resolveSkillId(value) {
|
|
19
|
+
if (typeof value === "string")
|
|
20
|
+
return value;
|
|
21
|
+
if ("skillId" in value && typeof value.skillId === "string") {
|
|
22
|
+
return value.skillId;
|
|
23
|
+
}
|
|
24
|
+
if (!isResolveResponse(value)) {
|
|
25
|
+
throw new Error("Could not determine skill_id from execute input");
|
|
26
|
+
}
|
|
27
|
+
const fromSkill = value.skill?.skill_id;
|
|
28
|
+
if (typeof fromSkill === "string" && fromSkill.length > 0)
|
|
29
|
+
return fromSkill;
|
|
30
|
+
const fromTrace = value.trace?.skill_id;
|
|
31
|
+
if (typeof fromTrace === "string" && fromTrace.length > 0)
|
|
32
|
+
return fromTrace;
|
|
33
|
+
throw new Error("Could not determine skill_id from execute input");
|
|
34
|
+
}
|
|
35
|
+
async function parseResponseBody(response) {
|
|
36
|
+
const text = await response.text();
|
|
37
|
+
if (!text)
|
|
38
|
+
return null;
|
|
39
|
+
try {
|
|
40
|
+
return JSON.parse(text);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return text;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function buildAbortSignal(timeoutMs, signal) {
|
|
47
|
+
if (!timeoutMs && !signal)
|
|
48
|
+
return { signal, cleanup: () => { } };
|
|
49
|
+
const controller = new AbortController();
|
|
50
|
+
const onAbort = () => controller.abort(signal?.reason);
|
|
51
|
+
const timer = timeoutMs ? setTimeout(() => controller.abort(new Error(`Request timed out after ${timeoutMs}ms`)), timeoutMs) : undefined;
|
|
52
|
+
if (signal) {
|
|
53
|
+
if (signal.aborted)
|
|
54
|
+
controller.abort(signal.reason);
|
|
55
|
+
else
|
|
56
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
signal: controller.signal,
|
|
60
|
+
cleanup: () => {
|
|
61
|
+
if (timer)
|
|
62
|
+
clearTimeout(timer);
|
|
63
|
+
if (signal)
|
|
64
|
+
signal.removeEventListener("abort", onAbort);
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
export class Unbrowse {
|
|
69
|
+
baseUrl;
|
|
70
|
+
apiKey;
|
|
71
|
+
clientId;
|
|
72
|
+
defaultHeaders;
|
|
73
|
+
fetchImpl;
|
|
74
|
+
timeoutMs;
|
|
75
|
+
_runtimeHandle = null;
|
|
76
|
+
constructor(options = {}) {
|
|
77
|
+
this.baseUrl = normalizeBaseUrl(options.baseUrl);
|
|
78
|
+
this.apiKey = options.apiKey ?? readEnv("UNBROWSE_API_KEY");
|
|
79
|
+
this.clientId = options.clientId;
|
|
80
|
+
this.defaultHeaders = options.headers;
|
|
81
|
+
this.fetchImpl = options.fetch ?? fetch;
|
|
82
|
+
this.timeoutMs = options.timeoutMs;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Build a `params` object from an `AvailableEndpoint.input_params` spec, using
|
|
86
|
+
* the `example_value` of each declared key. Skips keys without an example.
|
|
87
|
+
*/
|
|
88
|
+
static paramsFromInputSpec(spec) {
|
|
89
|
+
const out = {};
|
|
90
|
+
for (const p of spec ?? []) {
|
|
91
|
+
if (p.example_value !== undefined)
|
|
92
|
+
out[p.key] = p.example_value;
|
|
93
|
+
}
|
|
94
|
+
return out;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Point at an already-running Unbrowse runtime. No probe, no spawn.
|
|
98
|
+
* `.close()` is a no-op for the runtime (the caller owns it).
|
|
99
|
+
*/
|
|
100
|
+
static async connect(baseUrl, opts = {}) {
|
|
101
|
+
return new Unbrowse({ ...opts, baseUrl });
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Spawn a co-located Unbrowse runtime and return a client pointed at it.
|
|
105
|
+
* The client takes ownership of the child process: `.close()` will tear
|
|
106
|
+
* it down.
|
|
107
|
+
*/
|
|
108
|
+
static async spawn(opts = {}) {
|
|
109
|
+
const { port, cwd, env, binaryPath, readyTimeoutMs, ...clientOpts } = opts;
|
|
110
|
+
const handle = await spawnUnbrowseRuntime({ port, cwd, env, binaryPath, readyTimeoutMs });
|
|
111
|
+
const client = new Unbrowse({ ...clientOpts, baseUrl: handle.baseUrl });
|
|
112
|
+
if (handle.owned)
|
|
113
|
+
client._runtimeHandle = handle;
|
|
114
|
+
return client;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Probe 127.0.0.1 on the requested port (default 6969). Adopts a live
|
|
118
|
+
* runtime via `connect`; spawns a new one via `spawn` if dead. The
|
|
119
|
+
* resulting client only owns the runtime if it had to spawn.
|
|
120
|
+
*/
|
|
121
|
+
static async local(opts = {}) {
|
|
122
|
+
const port = opts.port ?? 6969;
|
|
123
|
+
const baseUrl = `http://127.0.0.1:${port}`;
|
|
124
|
+
if (await probeUnbrowseRuntime(baseUrl, 1_000)) {
|
|
125
|
+
const { port: _p, cwd: _c, env: _e, binaryPath: _b, readyTimeoutMs: _r, ...clientOpts } = opts;
|
|
126
|
+
return Unbrowse.connect(baseUrl, clientOpts);
|
|
127
|
+
}
|
|
128
|
+
return Unbrowse.spawn(opts);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Release any resources owned by this client. If the client spawned its
|
|
132
|
+
* own runtime, this kills the child process. Otherwise no-op.
|
|
133
|
+
*/
|
|
134
|
+
async close() {
|
|
135
|
+
if (this._runtimeHandle) {
|
|
136
|
+
const h = this._runtimeHandle;
|
|
137
|
+
this._runtimeHandle = null;
|
|
138
|
+
await h.kill();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
async request(method, path, body, options = {}) {
|
|
142
|
+
const url = `${this.baseUrl}${path}`;
|
|
143
|
+
const headers = new Headers(this.defaultHeaders);
|
|
144
|
+
headers.set("Accept", "application/json");
|
|
145
|
+
if (body !== undefined)
|
|
146
|
+
headers.set("Content-Type", "application/json");
|
|
147
|
+
if (this.apiKey)
|
|
148
|
+
headers.set("Authorization", `Bearer ${this.apiKey}`);
|
|
149
|
+
if (this.clientId)
|
|
150
|
+
headers.set("x-unbrowse-client-id", this.clientId);
|
|
151
|
+
if (options.headers) {
|
|
152
|
+
const extra = new Headers(options.headers);
|
|
153
|
+
extra.forEach((value, key) => headers.set(key, value));
|
|
154
|
+
}
|
|
155
|
+
const { signal, cleanup } = buildAbortSignal(options.timeoutMs ?? this.timeoutMs, options.signal);
|
|
156
|
+
try {
|
|
157
|
+
const response = await this.fetchImpl(url, {
|
|
158
|
+
method,
|
|
159
|
+
headers,
|
|
160
|
+
body: body === undefined ? undefined : JSON.stringify(body),
|
|
161
|
+
signal,
|
|
162
|
+
});
|
|
163
|
+
const data = await parseResponseBody(response);
|
|
164
|
+
if (!response.ok) {
|
|
165
|
+
if (response.status === 402) {
|
|
166
|
+
const payload = (typeof data === "object" && data !== null) ? data : {};
|
|
167
|
+
const message = typeof payload["message"] === "string"
|
|
168
|
+
? payload["message"]
|
|
169
|
+
: "Insufficient Unbrowse credits for this request.";
|
|
170
|
+
throw new InsufficientCreditsError(message, url, data);
|
|
171
|
+
}
|
|
172
|
+
const message = typeof data === "object" && data && "error" in data && typeof data.error === "string"
|
|
173
|
+
? String(data.error)
|
|
174
|
+
: `${method} ${path} failed with ${response.status}`;
|
|
175
|
+
throw new UnbrowseApiError(message, {
|
|
176
|
+
status: response.status,
|
|
177
|
+
path,
|
|
178
|
+
data,
|
|
179
|
+
headers: response.headers,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
return data;
|
|
183
|
+
}
|
|
184
|
+
finally {
|
|
185
|
+
cleanup();
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
async resolve(input, options) {
|
|
189
|
+
const body = {
|
|
190
|
+
intent: input.intent,
|
|
191
|
+
params: { ...(input.params ?? {}) },
|
|
192
|
+
context: { ...(input.context ?? {}) },
|
|
193
|
+
};
|
|
194
|
+
if (input.url) {
|
|
195
|
+
const params = body.params;
|
|
196
|
+
const context = body.context;
|
|
197
|
+
if (typeof params.url !== "string")
|
|
198
|
+
params.url = input.url;
|
|
199
|
+
if (typeof context.url !== "string")
|
|
200
|
+
context.url = input.url;
|
|
201
|
+
}
|
|
202
|
+
if (input.projection)
|
|
203
|
+
body.projection = input.projection;
|
|
204
|
+
if (input.confirmUnsafe !== undefined)
|
|
205
|
+
body.confirm_unsafe = input.confirmUnsafe;
|
|
206
|
+
if (input.confirmThirdPartyTerms !== undefined)
|
|
207
|
+
body.confirm_third_party_terms = input.confirmThirdPartyTerms;
|
|
208
|
+
if (input.dryRun !== undefined)
|
|
209
|
+
body.dry_run = input.dryRun;
|
|
210
|
+
if (input.forceCapture !== undefined)
|
|
211
|
+
body.force_capture = input.forceCapture;
|
|
212
|
+
return this.request("POST", "/v1/intent/resolve", body, options);
|
|
213
|
+
}
|
|
214
|
+
async execute(skill, input = {}, options) {
|
|
215
|
+
const skillId = resolveSkillId(skill);
|
|
216
|
+
const bodyInput = typeof skill === "object" && "skillId" in skill ? skill : input;
|
|
217
|
+
const body = {};
|
|
218
|
+
if (bodyInput.params)
|
|
219
|
+
body.params = bodyInput.params;
|
|
220
|
+
if (bodyInput.projection)
|
|
221
|
+
body.projection = bodyInput.projection;
|
|
222
|
+
if (bodyInput.confirmUnsafe !== undefined)
|
|
223
|
+
body.confirm_unsafe = bodyInput.confirmUnsafe;
|
|
224
|
+
if (bodyInput.confirmThirdPartyTerms !== undefined)
|
|
225
|
+
body.confirm_third_party_terms = bodyInput.confirmThirdPartyTerms;
|
|
226
|
+
if (bodyInput.dryRun !== undefined)
|
|
227
|
+
body.dry_run = bodyInput.dryRun;
|
|
228
|
+
if (bodyInput.intent)
|
|
229
|
+
body.intent = bodyInput.intent;
|
|
230
|
+
if (bodyInput.contextUrl)
|
|
231
|
+
body.context_url = bodyInput.contextUrl;
|
|
232
|
+
return this.request("POST", `/v1/skills/${encodeURIComponent(skillId)}/execute`, body, options);
|
|
233
|
+
}
|
|
234
|
+
async getSkill(skillId, options) {
|
|
235
|
+
return this.request("GET", `/v1/skills/${encodeURIComponent(skillId)}`, undefined, options);
|
|
236
|
+
}
|
|
237
|
+
async login(input, options) {
|
|
238
|
+
return this.request("POST", "/v1/auth/login", { url: input.url }, options);
|
|
239
|
+
}
|
|
240
|
+
async importAuth(input, options) {
|
|
241
|
+
return this.request("POST", "/v1/auth/steal", {
|
|
242
|
+
url: input.url,
|
|
243
|
+
browser: input.browser,
|
|
244
|
+
chrome_profile: input.chromeProfile,
|
|
245
|
+
firefox_profile: input.firefoxProfile,
|
|
246
|
+
chromium_profile: input.chromiumProfile,
|
|
247
|
+
chromium_user_data_dir: input.chromiumUserDataDir,
|
|
248
|
+
chromium_cookie_db_path: input.chromiumCookieDbPath,
|
|
249
|
+
safe_storage_service: input.safeStorageService,
|
|
250
|
+
browser_name: input.browserName,
|
|
251
|
+
}, options);
|
|
252
|
+
}
|
|
253
|
+
async stealAuth(input, options) {
|
|
254
|
+
return this.importAuth(input, options);
|
|
255
|
+
}
|
|
256
|
+
async search(input, options) {
|
|
257
|
+
return this.request("POST", "/v1/search", {
|
|
258
|
+
intent: input.intent,
|
|
259
|
+
k: input.k,
|
|
260
|
+
}, options);
|
|
261
|
+
}
|
|
262
|
+
async searchDomain(input, options) {
|
|
263
|
+
return this.request("POST", "/v1/search/domain", {
|
|
264
|
+
intent: input.intent,
|
|
265
|
+
domain: input.domain,
|
|
266
|
+
k: input.k,
|
|
267
|
+
}, options);
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Semantic search across ALL indexed endpoints (flat shape).
|
|
271
|
+
*
|
|
272
|
+
* Returns one row per endpoint, ranked by semantic match against the
|
|
273
|
+
* intent string. Use this when you want to pick endpoints across many
|
|
274
|
+
* skills (vs `search()` which groups by skill).
|
|
275
|
+
*
|
|
276
|
+
* Optional `domain` scopes the search to one host's endpoints; omit for
|
|
277
|
+
* cross-marketplace search. Authenticated agents are charged the
|
|
278
|
+
* standard credit cost; anonymous
|
|
279
|
+
* callers get free rate-limited public discovery.
|
|
280
|
+
*
|
|
281
|
+
* @example
|
|
282
|
+
* ```ts
|
|
283
|
+
* const { endpoints } = await u.searchEndpoints({ intent: "trending repositories", k: 5 });
|
|
284
|
+
* for (const ep of endpoints) {
|
|
285
|
+
* console.log(ep.score, ep.skill_id, ep.endpoint_id, ep.description);
|
|
286
|
+
* }
|
|
287
|
+
* ```
|
|
288
|
+
*/
|
|
289
|
+
async searchEndpoints(input, options) {
|
|
290
|
+
return this.request("POST", "/v1/search/endpoints", {
|
|
291
|
+
intent: input.intent,
|
|
292
|
+
k: input.k,
|
|
293
|
+
domain: input.domain,
|
|
294
|
+
}, options);
|
|
295
|
+
}
|
|
296
|
+
async feedback(input, options) {
|
|
297
|
+
return this.request("POST", "/v1/feedback", {
|
|
298
|
+
skill_id: input.skillId,
|
|
299
|
+
endpoint_id: input.endpointId,
|
|
300
|
+
rating: input.rating,
|
|
301
|
+
outcome: input.outcome,
|
|
302
|
+
diagnostics: input.diagnostics,
|
|
303
|
+
}, options);
|
|
304
|
+
}
|
|
305
|
+
async stats(options) {
|
|
306
|
+
return this.request("GET", "/v1/stats", undefined, options);
|
|
307
|
+
}
|
|
308
|
+
async health(options) {
|
|
309
|
+
return this.readiness(options);
|
|
310
|
+
}
|
|
311
|
+
/** Process liveness only. Use this for uptime checks. */
|
|
312
|
+
async liveness(options) {
|
|
313
|
+
return this.request("GET", "/live", undefined, options);
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Dependency-aware readiness. A 503 degraded response is returned as typed
|
|
317
|
+
* data instead of thrown, so callers can inspect the active fallback.
|
|
318
|
+
*/
|
|
319
|
+
async readiness(options) {
|
|
320
|
+
try {
|
|
321
|
+
return await this.request("GET", "/health", undefined, options);
|
|
322
|
+
}
|
|
323
|
+
catch (error) {
|
|
324
|
+
if (error instanceof UnbrowseApiError && error.status === 503 && error.data && typeof error.data === "object") {
|
|
325
|
+
return error.data;
|
|
326
|
+
}
|
|
327
|
+
throw error;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
/** Public marketplace and performance counters. */
|
|
331
|
+
async statsSummary(options) {
|
|
332
|
+
return this.request("GET", "/v1/stats/summary", undefined, options);
|
|
333
|
+
}
|
|
334
|
+
/** Cached marketplace flywheel pulse. */
|
|
335
|
+
async flywheel(options) {
|
|
336
|
+
return this.request("GET", "/v1/analytics/flywheel", undefined, options);
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Earnings/spending dashboard for the authenticated agent.
|
|
340
|
+
* Requires `apiKey` set on the client. Backend: `GET /v1/dashboard/me`.
|
|
341
|
+
*/
|
|
342
|
+
async dashboard(options) {
|
|
343
|
+
return this.request("GET", "/v1/dashboard/me", undefined, options);
|
|
344
|
+
}
|
|
345
|
+
/** Current account credit balance and usage ledger. */
|
|
346
|
+
async credits(options) {
|
|
347
|
+
return this.request("GET", "/v1/account/credits", undefined, options);
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Per-transaction earnings ledger for a creator agent.
|
|
351
|
+
* Backend: `GET /v1/transactions/creator/:agentId`.
|
|
352
|
+
*/
|
|
353
|
+
async creatorTransactions(agentId, options) {
|
|
354
|
+
return this.request("GET", `/v1/transactions/creator/${encodeURIComponent(agentId)}`, undefined, options);
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Indexer earnings via delta-based attribution.
|
|
358
|
+
* Backend: `GET /v1/attribution/indexer/:indexerId`.
|
|
359
|
+
*/
|
|
360
|
+
async indexerAttribution(indexerId, options) {
|
|
361
|
+
return this.request("GET", `/v1/attribution/indexer/${encodeURIComponent(indexerId)}`, undefined, options);
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Publish a captured skill to the marketplace.
|
|
365
|
+
* Backend: `POST /v1/skills`.
|
|
366
|
+
*
|
|
367
|
+
* SDK gap-fill (Wave 2 of rebuild-the-unbrowse-sdk-as-a-thin-http-first-ty
|
|
368
|
+
* + the parity gate from tests/cli-mcp-sdk-parity.test.ts). Mirrors the
|
|
369
|
+
* CLI `unbrowse publish` and the MCP `unbrowse_publish` tool.
|
|
370
|
+
*/
|
|
371
|
+
async publish(skill, options) {
|
|
372
|
+
return this.request("POST", "/v1/skills", skill, options);
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Annotate an endpoint with a tip, constraint, or gotcha.
|
|
376
|
+
* Backend: `POST /v1/skills/:id/endpoints/:eid/annotate`.
|
|
377
|
+
*
|
|
378
|
+
* SDK gap-fill. Mirrors CLI `unbrowse annotate` + MCP `unbrowse_annotate`.
|
|
379
|
+
*/
|
|
380
|
+
async annotate(input, options) {
|
|
381
|
+
const { skillId, endpointId, ...body } = input;
|
|
382
|
+
return this.request("POST", `/v1/skills/${encodeURIComponent(skillId)}/endpoints/${encodeURIComponent(endpointId)}/annotate`, body, options);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|