@unbrowse/sdk 11.7.1 → 12.0.0-preview.2
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 +60 -34
- package/dist/client.d.ts +122 -185
- package/dist/index.d.ts +4 -11
- package/dist/index.js +186 -6
- package/dist/mcp-install.d.ts +9 -0
- package/dist/types.d.ts +122 -0
- package/package.json +17 -32
- package/LICENSE +0 -21
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -505
- package/dist/client.js.map +0 -1
- package/dist/contracts.d.ts +0 -478
- package/dist/contracts.d.ts.map +0 -1
- package/dist/contracts.js +0 -2
- package/dist/contracts.js.map +0 -1
- package/dist/errors.d.ts +0 -52
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -76
- package/dist/errors.js.map +0 -1
- package/dist/flex.d.ts +0 -254
- package/dist/flex.d.ts.map +0 -1
- package/dist/flex.js +0 -396
- package/dist/flex.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/runtime.d.ts +0 -78
- package/dist/runtime.d.ts.map +0 -1
- package/dist/runtime.js +0 -339
- package/dist/runtime.js.map +0 -1
- package/dist/server-types.d.ts +0 -97
- package/dist/server-types.d.ts.map +0 -1
- package/dist/server-types.js +0 -2
- package/dist/server-types.js.map +0 -1
- package/dist/x402.d.ts +0 -75
- package/dist/x402.d.ts.map +0 -1
- package/dist/x402.js +0 -29
- package/dist/x402.js.map +0 -1
package/dist/client.js
DELETED
|
@@ -1,505 +0,0 @@
|
|
|
1
|
-
import { PaymentRequiredError, 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
|
-
export function telemetryEnvDisabled(value) {
|
|
13
|
-
return ["0", "false", "off"].includes(value?.toLowerCase() ?? "");
|
|
14
|
-
}
|
|
15
|
-
function normalizeBaseUrl(baseUrl) {
|
|
16
|
-
return (baseUrl ?? readEnv("UNBROWSE_API_URL") ?? readEnv("UNBROWSE_URL") ?? "https://beta-api.unbrowse.ai").replace(/\/+$/, "");
|
|
17
|
-
}
|
|
18
|
-
/** A first visit learns with the server browser for up to 8 minutes; wait longer than the server's deadline. */
|
|
19
|
-
export const RUN_TIMEOUT_MS = 600_000;
|
|
20
|
-
const SAFE_SDK_USAGE_ACTIONS = new Set([
|
|
21
|
-
"account", "agents", "annotate", "dashboard", "execute", "feedback", "health", "login", "publish", "resolve",
|
|
22
|
-
"search", "skill", "skills", "stats", "unlock",
|
|
23
|
-
]);
|
|
24
|
-
/** Collapse an SDK route to a fixed category without retaining path parameters. */
|
|
25
|
-
export function sdkUsageOperationForPath(path, method = "GET") {
|
|
26
|
-
const pathname = path.split("?", 1)[0] ?? "";
|
|
27
|
-
const segments = pathname.split("/").filter(Boolean).map((part) => part.toLowerCase());
|
|
28
|
-
if (segments[0] === "v1")
|
|
29
|
-
segments.shift();
|
|
30
|
-
if (segments[0] === "auth" && segments[1] === "steal")
|
|
31
|
-
return "sdk:steal_auth";
|
|
32
|
-
if (segments[0] === "transactions" || segments[0] === "attribution")
|
|
33
|
-
return "sdk:earnings";
|
|
34
|
-
if (segments[0] === "account")
|
|
35
|
-
return "sdk:account";
|
|
36
|
-
if (segments[0] === "skills" && segments.length === 1 && method.toUpperCase() === "POST")
|
|
37
|
-
return "sdk:publish";
|
|
38
|
-
if (segments[0] === "skills" && segments.length >= 3 && segments.at(-1) === "execute")
|
|
39
|
-
return "sdk:execute";
|
|
40
|
-
if (segments[0] === "skills" && segments.length >= 2)
|
|
41
|
-
return "sdk:skill";
|
|
42
|
-
const action = [...segments].reverse().find((segment) => SAFE_SDK_USAGE_ACTIONS.has(segment)) ?? "request";
|
|
43
|
-
return `sdk:${action}`;
|
|
44
|
-
}
|
|
45
|
-
async function parseResponseBody(response) {
|
|
46
|
-
const text = await response.text();
|
|
47
|
-
if (!text)
|
|
48
|
-
return null;
|
|
49
|
-
try {
|
|
50
|
-
return JSON.parse(text);
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
return text;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
function buildAbortSignal(timeoutMs, signal) {
|
|
57
|
-
if (!timeoutMs && !signal)
|
|
58
|
-
return { signal, cleanup: () => { } };
|
|
59
|
-
const controller = new AbortController();
|
|
60
|
-
const onAbort = () => controller.abort(signal?.reason);
|
|
61
|
-
const timer = timeoutMs ? setTimeout(() => controller.abort(new Error(`Request timed out after ${timeoutMs}ms`)), timeoutMs) : undefined;
|
|
62
|
-
if (signal) {
|
|
63
|
-
if (signal.aborted)
|
|
64
|
-
controller.abort(signal.reason);
|
|
65
|
-
else
|
|
66
|
-
signal.addEventListener("abort", onAbort, { once: true });
|
|
67
|
-
}
|
|
68
|
-
return {
|
|
69
|
-
signal: controller.signal,
|
|
70
|
-
cleanup: () => {
|
|
71
|
-
if (timer)
|
|
72
|
-
clearTimeout(timer);
|
|
73
|
-
if (signal)
|
|
74
|
-
signal.removeEventListener("abort", onAbort);
|
|
75
|
-
},
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
export class Unbrowse {
|
|
79
|
-
baseUrl;
|
|
80
|
-
apiKey;
|
|
81
|
-
clientId;
|
|
82
|
-
defaultHeaders;
|
|
83
|
-
fetchImpl;
|
|
84
|
-
timeoutMs;
|
|
85
|
-
telemetryEnabled;
|
|
86
|
-
telemetryEndpoint;
|
|
87
|
-
_runtimeHandle = null;
|
|
88
|
-
constructor(options = {}) {
|
|
89
|
-
this.baseUrl = normalizeBaseUrl(options.baseUrl);
|
|
90
|
-
this.apiKey = options.apiKey ?? readEnv("UNBROWSE_API_KEY");
|
|
91
|
-
this.clientId = options.clientId;
|
|
92
|
-
this.defaultHeaders = options.headers;
|
|
93
|
-
this.fetchImpl = options.fetch ?? fetch;
|
|
94
|
-
this.timeoutMs = options.timeoutMs;
|
|
95
|
-
this.telemetryEnabled = options.telemetry !== false && !telemetryEnvDisabled(readEnv("UNBROWSE_TELEMETRY"));
|
|
96
|
-
this.telemetryEndpoint = options.telemetryEndpoint ?? "https://beta-api.unbrowse.ai/v1/telemetry/usage";
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Build a `params` object from an `AvailableEndpoint.input_params` spec, using
|
|
100
|
-
* the `example_value` of each declared key. Skips keys without an example.
|
|
101
|
-
*/
|
|
102
|
-
static paramsFromInputSpec(spec) {
|
|
103
|
-
const out = {};
|
|
104
|
-
for (const p of spec ?? []) {
|
|
105
|
-
if (p.example_value !== undefined)
|
|
106
|
-
out[p.key] = p.example_value;
|
|
107
|
-
}
|
|
108
|
-
return out;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Point at an already-running Unbrowse runtime. No probe, no spawn.
|
|
112
|
-
* `.close()` is a no-op for the runtime (the caller owns it).
|
|
113
|
-
*/
|
|
114
|
-
static async connect(baseUrl, opts = {}) {
|
|
115
|
-
return new Unbrowse({ ...opts, baseUrl });
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Spawn a co-located Unbrowse runtime and return a client pointed at it.
|
|
119
|
-
* The client takes ownership of the child process: `.close()` will tear
|
|
120
|
-
* it down.
|
|
121
|
-
*/
|
|
122
|
-
static async spawn(opts = {}) {
|
|
123
|
-
const { port, cwd, env, binaryPath, readyTimeoutMs, ...clientOpts } = opts;
|
|
124
|
-
const handle = await spawnUnbrowseRuntime({ port, cwd, env, binaryPath, readyTimeoutMs });
|
|
125
|
-
const client = new Unbrowse({ ...clientOpts, baseUrl: handle.baseUrl });
|
|
126
|
-
if (handle.owned)
|
|
127
|
-
client._runtimeHandle = handle;
|
|
128
|
-
return client;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Probe 127.0.0.1 on the requested port (default 6969). Adopts a live
|
|
132
|
-
* runtime via `connect`; spawns a new one via `spawn` if dead. The
|
|
133
|
-
* resulting client only owns the runtime if it had to spawn.
|
|
134
|
-
*/
|
|
135
|
-
static async local(opts = {}) {
|
|
136
|
-
const port = opts.port ?? 6969;
|
|
137
|
-
const baseUrl = `http://127.0.0.1:${port}`;
|
|
138
|
-
if (await probeUnbrowseRuntime(baseUrl, 1_000)) {
|
|
139
|
-
const { port: _p, cwd: _c, env: _e, binaryPath: _b, readyTimeoutMs: _r, ...clientOpts } = opts;
|
|
140
|
-
return Unbrowse.connect(baseUrl, clientOpts);
|
|
141
|
-
}
|
|
142
|
-
return Unbrowse.spawn(opts);
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Release any resources owned by this client. If the client spawned its
|
|
146
|
-
* own runtime, this kills the child process. Otherwise no-op.
|
|
147
|
-
*/
|
|
148
|
-
async close() {
|
|
149
|
-
if (this._runtimeHandle) {
|
|
150
|
-
const h = this._runtimeHandle;
|
|
151
|
-
this._runtimeHandle = null;
|
|
152
|
-
await h.kill();
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
reportUsage(method, path) {
|
|
156
|
-
if (!this.telemetryEnabled || path === "/v1/telemetry/usage")
|
|
157
|
-
return;
|
|
158
|
-
const operation = sdkUsageOperationForPath(path, method);
|
|
159
|
-
const verb = operation.split(":")[1] ?? "request";
|
|
160
|
-
const executionScope = /^https:\/\//.test(this.baseUrl) ? "cloud" : "local";
|
|
161
|
-
const controller = new AbortController();
|
|
162
|
-
const timer = setTimeout(() => controller.abort(), 1500);
|
|
163
|
-
void fetch(this.telemetryEndpoint, {
|
|
164
|
-
method: "POST", headers: { "content-type": "application/json" }, signal: controller.signal,
|
|
165
|
-
body: JSON.stringify({ verb, operation, surface: "sdk", execution_scope: executionScope,
|
|
166
|
-
telemetry_schema_version: 2, created_at: new Date().toISOString() }),
|
|
167
|
-
}).catch(() => { }).finally(() => clearTimeout(timer));
|
|
168
|
-
}
|
|
169
|
-
async request(method, path, body, options = {}) {
|
|
170
|
-
const url = `${this.baseUrl}${path}`;
|
|
171
|
-
this.reportUsage(method, path);
|
|
172
|
-
const headers = new Headers(this.defaultHeaders);
|
|
173
|
-
headers.set("Accept", "application/json");
|
|
174
|
-
if (body !== undefined)
|
|
175
|
-
headers.set("Content-Type", "application/json");
|
|
176
|
-
if (this.apiKey) {
|
|
177
|
-
headers.set("Authorization", `Bearer ${this.apiKey}`);
|
|
178
|
-
headers.set("X-Unbrowse-Api-Key", this.apiKey);
|
|
179
|
-
}
|
|
180
|
-
if (this.clientId)
|
|
181
|
-
headers.set("x-unbrowse-client-id", this.clientId);
|
|
182
|
-
if (options.headers) {
|
|
183
|
-
const extra = new Headers(options.headers);
|
|
184
|
-
extra.forEach((value, key) => headers.set(key, value));
|
|
185
|
-
}
|
|
186
|
-
const { signal, cleanup } = buildAbortSignal(options.timeoutMs ?? this.timeoutMs, options.signal);
|
|
187
|
-
try {
|
|
188
|
-
// `timeout: false`: Bun aborts fetch after 300s by default; buildAbortSignal is the only limit.
|
|
189
|
-
const init = { method, redirect: "error", headers, body: body === undefined ? undefined : JSON.stringify(body), signal, timeout: false };
|
|
190
|
-
let response;
|
|
191
|
-
try {
|
|
192
|
-
response = await this.fetchImpl(url, init);
|
|
193
|
-
}
|
|
194
|
-
catch (error) {
|
|
195
|
-
// A connection-level failure before any response (DNS, reset, dropped socket) is retried
|
|
196
|
-
// once when the operation is safe to repeat: reads, or writes carrying an Idempotency-Key
|
|
197
|
-
// the gateway dedupes on. Aborts/timeouts and HTTP errors are never retried here.
|
|
198
|
-
const repeatable = method === "GET" || headers.has("Idempotency-Key");
|
|
199
|
-
if (signal?.aborted || !repeatable || !(error instanceof TypeError))
|
|
200
|
-
throw error;
|
|
201
|
-
await new Promise(resolve => setTimeout(resolve, 1500));
|
|
202
|
-
if (signal?.aborted)
|
|
203
|
-
throw error;
|
|
204
|
-
response = await this.fetchImpl(url, init);
|
|
205
|
-
}
|
|
206
|
-
const data = await parseResponseBody(response);
|
|
207
|
-
if (!response.ok) {
|
|
208
|
-
// 402 surfaces as PaymentRequiredError so callers can hand the
|
|
209
|
-
// typed error to `payAndRetry(error, wallet, retry)`. Accepts the
|
|
210
|
-
// standard x402 shape (`{ accepts: [...] }`) and the Unbrowse
|
|
211
|
-
// backend shape that nests it under `data.accepts`.
|
|
212
|
-
if (response.status === 402) {
|
|
213
|
-
const payload = (typeof data === "object" && data !== null) ? data : {};
|
|
214
|
-
const acceptsRaw = (() => {
|
|
215
|
-
const top = payload["accepts"];
|
|
216
|
-
if (Array.isArray(top))
|
|
217
|
-
return top;
|
|
218
|
-
const nested = payload["data"]?.["accepts"];
|
|
219
|
-
return Array.isArray(nested) ? nested : [];
|
|
220
|
-
})();
|
|
221
|
-
const accepts = acceptsRaw;
|
|
222
|
-
const skillIdFromBody = typeof payload["skillId"] === "string"
|
|
223
|
-
? payload["skillId"]
|
|
224
|
-
: (typeof payload["skill_id"] === "string" ? payload["skill_id"] : undefined);
|
|
225
|
-
const skillIdFromPath = (() => {
|
|
226
|
-
const m = path.match(/\/v1\/skills\/([^/?#]+)/);
|
|
227
|
-
return m ? decodeURIComponent(m[1]) : undefined;
|
|
228
|
-
})();
|
|
229
|
-
const message = typeof payload["error"] === "string"
|
|
230
|
-
? payload["error"]
|
|
231
|
-
: `${method} ${path} failed with 402`;
|
|
232
|
-
const savedBody = JSON.stringify(body);
|
|
233
|
-
const savedHeaders = new Headers(headers);
|
|
234
|
-
throw new PaymentRequiredError(message, accepts, url, skillIdFromBody ?? skillIdFromPath, {
|
|
235
|
-
data, headers: response.headers, idempotencyKey: headers.get("Idempotency-Key") ?? undefined,
|
|
236
|
-
retryWithPayment: payment => {
|
|
237
|
-
const retryHeaders = new Headers(savedHeaders);
|
|
238
|
-
for (const [key, value] of Object.entries(payment)) {
|
|
239
|
-
if (!["payment-signature", "authorization"].includes(key.toLowerCase()) || (key.toLowerCase() === "authorization" && !value.startsWith("Payment ")))
|
|
240
|
-
throw new Error("Invalid payment retry header");
|
|
241
|
-
retryHeaders.set(key, value);
|
|
242
|
-
}
|
|
243
|
-
return this.request(method, path, savedBody === undefined ? undefined : JSON.parse(savedBody), { ...options, headers: retryHeaders });
|
|
244
|
-
},
|
|
245
|
-
});
|
|
246
|
-
}
|
|
247
|
-
const message = typeof data === "object" && data && "error" in data && typeof data.error === "string"
|
|
248
|
-
? String(data.error)
|
|
249
|
-
: `${method} ${path} failed with ${response.status}`;
|
|
250
|
-
throw new UnbrowseApiError(message, {
|
|
251
|
-
status: response.status,
|
|
252
|
-
path,
|
|
253
|
-
data,
|
|
254
|
-
headers: response.headers,
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
|
-
return data;
|
|
258
|
-
}
|
|
259
|
-
finally {
|
|
260
|
-
cleanup();
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
async run(input, options = {}) {
|
|
264
|
-
const headers = new Headers(options.headers);
|
|
265
|
-
if (input.request && !["GET", "HEAD"].includes(input.request.method) && !headers.has("Idempotency-Key"))
|
|
266
|
-
throw new Error("Writes require an explicit Idempotency-Key header");
|
|
267
|
-
if (!headers.has("Idempotency-Key"))
|
|
268
|
-
headers.set("Idempotency-Key", crypto.randomUUID());
|
|
269
|
-
return this.request("POST", "/v1/run", input, { ...options, headers, timeoutMs: options.timeoutMs ?? RUN_TIMEOUT_MS });
|
|
270
|
-
}
|
|
271
|
-
registry(options = {}) {
|
|
272
|
-
return this.request("GET", "/v1/registry", undefined, options);
|
|
273
|
-
}
|
|
274
|
-
selectPrimitive(goal, options = {}) {
|
|
275
|
-
return this.request("POST", "/v1/registry/select", { goal }, options);
|
|
276
|
-
}
|
|
277
|
-
callPrimitive(input, options = {}) {
|
|
278
|
-
const headers = new Headers(options.headers);
|
|
279
|
-
if (!headers.has("Idempotency-Key"))
|
|
280
|
-
headers.set("Idempotency-Key", crypto.randomUUID());
|
|
281
|
-
return this.request("POST", "/v1/registry/call", input, { ...options, headers });
|
|
282
|
-
}
|
|
283
|
-
runWorkflow(input, options = {}) {
|
|
284
|
-
const headers = new Headers(options.headers);
|
|
285
|
-
if (!headers.has("Idempotency-Key"))
|
|
286
|
-
headers.set("Idempotency-Key", crypto.randomUUID());
|
|
287
|
-
return this.request("POST", "/v1/workflows/run", input, { ...options, headers, timeoutMs: options.timeoutMs ?? RUN_TIMEOUT_MS });
|
|
288
|
-
}
|
|
289
|
-
async storeCredential(id, credential, options) {
|
|
290
|
-
return this.request("PUT", `/v1/credentials/${encodeURIComponent(id)}`, credential, options);
|
|
291
|
-
}
|
|
292
|
-
async deleteCredential(id, options) {
|
|
293
|
-
return this.request("DELETE", `/v1/credentials/${encodeURIComponent(id)}`, undefined, options);
|
|
294
|
-
}
|
|
295
|
-
async resolve(input, options) {
|
|
296
|
-
const url = input.url ?? input.context?.url;
|
|
297
|
-
if (!url)
|
|
298
|
-
throw new Error('resolve requires a target URL; use search for discovery');
|
|
299
|
-
if (input.dryRun || input.forceCapture || input.projection)
|
|
300
|
-
throw new Error('Use run with explicit server parameters; legacy projection/dryRun/forceCapture are unsupported');
|
|
301
|
-
const started = new Date().toISOString();
|
|
302
|
-
const result = await this.run({ url, intent: input.intent, refresh: input.refresh, credentials: input.credentials, browser: input.browser, params: input.params }, options);
|
|
303
|
-
return { result: result.data, source: result.source, trace: { trace_id: crypto.randomUUID(), skill_id: result.route_id, endpoint_id: result.route_id, started_at: started, completed_at: new Date().toISOString(), success: true, status_code: result.status } };
|
|
304
|
-
}
|
|
305
|
-
async execute(skill, input = {}, options) {
|
|
306
|
-
const bodyInput = typeof skill === "object" && !("trace" in skill) ? skill : input;
|
|
307
|
-
if (!bodyInput.url)
|
|
308
|
-
throw new Error("execute requires an explicit url; endpoint identifiers are no longer executable client-side");
|
|
309
|
-
if (bodyInput.dryRun || bodyInput.projection)
|
|
310
|
-
throw new Error("Legacy dryRun/projection execution is unsupported; use run");
|
|
311
|
-
const method = bodyInput.method ?? "GET";
|
|
312
|
-
if (!["GET", "HEAD"].includes(method) && !new Headers(options?.headers).has("Idempotency-Key"))
|
|
313
|
-
throw new Error("Writes require an explicit Idempotency-Key header");
|
|
314
|
-
const started = new Date().toISOString();
|
|
315
|
-
const result = await this.run({ url: bodyInput.url, credentials: bodyInput.credentials, browser: bodyInput.browser, intent: bodyInput.intent ?? "Execute explicitly authorized request", params: bodyInput.params, request: { method, body: bodyInput.body } }, options);
|
|
316
|
-
return { result: result.data, source: result.source, trace: { trace_id: crypto.randomUUID(), skill_id: result.route_id, endpoint_id: result.route_id, started_at: started, completed_at: new Date().toISOString(), success: true, status_code: result.status } };
|
|
317
|
-
}
|
|
318
|
-
async getSkill(skillId, options) {
|
|
319
|
-
return this.request("GET", `/v1/skills/${encodeURIComponent(skillId)}`, undefined, options);
|
|
320
|
-
}
|
|
321
|
-
async login(input, options) {
|
|
322
|
-
return this.request("POST", "/v1/auth/login", { url: input.url }, options);
|
|
323
|
-
}
|
|
324
|
-
async importAuth(input, options) {
|
|
325
|
-
return this.request("POST", "/v1/auth/steal", {
|
|
326
|
-
url: input.url,
|
|
327
|
-
browser: input.browser,
|
|
328
|
-
chrome_profile: input.chromeProfile,
|
|
329
|
-
firefox_profile: input.firefoxProfile,
|
|
330
|
-
chromium_profile: input.chromiumProfile,
|
|
331
|
-
chromium_user_data_dir: input.chromiumUserDataDir,
|
|
332
|
-
chromium_cookie_db_path: input.chromiumCookieDbPath,
|
|
333
|
-
safe_storage_service: input.safeStorageService,
|
|
334
|
-
browser_name: input.browserName,
|
|
335
|
-
}, options);
|
|
336
|
-
}
|
|
337
|
-
async stealAuth(input, options) {
|
|
338
|
-
return this.importAuth(input, options);
|
|
339
|
-
}
|
|
340
|
-
async search(input, options) {
|
|
341
|
-
return this.request("POST", "/v1/search", {
|
|
342
|
-
intent: input.intent,
|
|
343
|
-
k: input.k,
|
|
344
|
-
}, options);
|
|
345
|
-
}
|
|
346
|
-
async searchDomain(input, options) {
|
|
347
|
-
return this.request("POST", "/v1/search/domain", {
|
|
348
|
-
intent: input.intent,
|
|
349
|
-
domain: input.domain,
|
|
350
|
-
k: input.k,
|
|
351
|
-
}, options);
|
|
352
|
-
}
|
|
353
|
-
/**
|
|
354
|
-
* Semantic search across ALL indexed endpoints (flat shape).
|
|
355
|
-
*
|
|
356
|
-
* Returns one row per endpoint, ranked by semantic match against the
|
|
357
|
-
* intent string. Use this when you want to pick endpoints across many
|
|
358
|
-
* skills (vs `search()` which groups by skill).
|
|
359
|
-
*
|
|
360
|
-
* Optional `domain` scopes the search to one host's endpoints; omit for
|
|
361
|
-
* cross-marketplace search. Authenticated agents are charged the
|
|
362
|
-
* standard search fee per the existing x402 economics; anonymous
|
|
363
|
-
* callers get free rate-limited public discovery.
|
|
364
|
-
*
|
|
365
|
-
* @example
|
|
366
|
-
* ```ts
|
|
367
|
-
* const { endpoints } = await u.searchEndpoints({ intent: "trending repositories", k: 5 });
|
|
368
|
-
* for (const ep of endpoints) {
|
|
369
|
-
* console.log(ep.score, ep.skill_id, ep.endpoint_id, ep.description);
|
|
370
|
-
* }
|
|
371
|
-
* ```
|
|
372
|
-
*/
|
|
373
|
-
async searchEndpoints(input, options) {
|
|
374
|
-
return this.request("POST", "/v1/search/endpoints", {
|
|
375
|
-
intent: input.intent,
|
|
376
|
-
k: input.k,
|
|
377
|
-
domain: input.domain,
|
|
378
|
-
}, options);
|
|
379
|
-
}
|
|
380
|
-
async feedback(input, options) {
|
|
381
|
-
return this.request("POST", "/v1/feedback", {
|
|
382
|
-
skill_id: input.skillId,
|
|
383
|
-
endpoint_id: input.endpointId,
|
|
384
|
-
rating: input.rating,
|
|
385
|
-
outcome: input.outcome,
|
|
386
|
-
diagnostics: input.diagnostics,
|
|
387
|
-
}, options);
|
|
388
|
-
}
|
|
389
|
-
async stats(options) {
|
|
390
|
-
return this.request("GET", "/v1/stats", undefined, options);
|
|
391
|
-
}
|
|
392
|
-
async health(options) {
|
|
393
|
-
return this.request("GET", "/health", undefined, options);
|
|
394
|
-
}
|
|
395
|
-
/**
|
|
396
|
-
* Earnings/spending dashboard for the authenticated agent.
|
|
397
|
-
* Requires `apiKey` set on the client. Backend: `GET /v1/dashboard/me`.
|
|
398
|
-
*/
|
|
399
|
-
async dashboard(options) {
|
|
400
|
-
return this.request("GET", "/v1/dashboard/me", undefined, options);
|
|
401
|
-
}
|
|
402
|
-
/**
|
|
403
|
-
* Public dashboard for any wallet address. Backend: `GET /v1/dashboard/wallet/:walletAddress`.
|
|
404
|
-
*/
|
|
405
|
-
async dashboardByWallet(walletAddress, options) {
|
|
406
|
-
return this.request("GET", `/v1/dashboard/wallet/${encodeURIComponent(walletAddress)}`, undefined, options);
|
|
407
|
-
}
|
|
408
|
-
/**
|
|
409
|
-
* Per-transaction earnings ledger for a creator agent.
|
|
410
|
-
* Backend: `GET /v1/transactions/creator/:agentId`.
|
|
411
|
-
*/
|
|
412
|
-
async creatorTransactions(agentId, options) {
|
|
413
|
-
return this.request("GET", `/v1/transactions/creator/${encodeURIComponent(agentId)}`, undefined, options);
|
|
414
|
-
}
|
|
415
|
-
/**
|
|
416
|
-
* Fund a Flex escrow on the caller's behalf. Thin wrapper around
|
|
417
|
-
* `fundEscrow` in `./flex.ts` — requires the caller to pass
|
|
418
|
-
* `signer` + `rpc` for v6.16-preview.0 (until SDK ships its own
|
|
419
|
-
* @solana/kit pipeline). For pure tx construction without sending,
|
|
420
|
-
* import `buildEscrowCreationTx` from the package root.
|
|
421
|
-
*/
|
|
422
|
-
async fundEscrow(params) {
|
|
423
|
-
const { fundEscrow } = await import("./flex.js");
|
|
424
|
-
return fundEscrow({
|
|
425
|
-
amountUsdc: params.amountUsdc,
|
|
426
|
-
walletAddress: params.walletAddress ?? "",
|
|
427
|
-
facilitatorAddress: params.facilitatorAddress ?? "",
|
|
428
|
-
mint: params.mint,
|
|
429
|
-
refundTimeoutSlots: params.refundTimeoutSlots,
|
|
430
|
-
deadmanTimeoutSlots: params.deadmanTimeoutSlots,
|
|
431
|
-
signer: params.signer,
|
|
432
|
-
rpc: params.rpc,
|
|
433
|
-
});
|
|
434
|
-
}
|
|
435
|
-
/**
|
|
436
|
-
* Register a session key against the caller's existing Flex escrow.
|
|
437
|
-
* Thin wrapper around `registerSessionKey` in `./flex.ts`.
|
|
438
|
-
*/
|
|
439
|
-
async registerSessionKey(params) {
|
|
440
|
-
const { registerSessionKey } = await import("./flex.js");
|
|
441
|
-
return registerSessionKey({
|
|
442
|
-
walletAddress: params.walletAddress ?? "",
|
|
443
|
-
escrowAddress: params.escrowAddress ?? "",
|
|
444
|
-
sessionKeyAddress: params.sessionKeyAddress,
|
|
445
|
-
expiresAtSlot: params.expiresAtSlot,
|
|
446
|
-
revocationGracePeriodSlots: params.revocationGracePeriodSlots,
|
|
447
|
-
signer: params.signer,
|
|
448
|
-
rpc: params.rpc,
|
|
449
|
-
});
|
|
450
|
-
}
|
|
451
|
-
/**
|
|
452
|
-
* Execute a skill against a Flex-metered route. preview.0/preview.1 stub:
|
|
453
|
-
* the backend metered-execute route (`POST /v1/skills/:id/execute` with
|
|
454
|
-
* Flex-shaped 402 + usage_units settlement) ships in v6.16.0-preview.2.
|
|
455
|
-
* Callers must use `Unbrowse#execute` against fixed-price skills until
|
|
456
|
-
* then. The method signature stays for forward compat; the body refuses
|
|
457
|
-
* with a precise version-targeted error.
|
|
458
|
-
*/
|
|
459
|
-
async executeMetered(_skillOrId, _input, _opts, _options) {
|
|
460
|
-
throw new Error("Unbrowse#executeMetered requires the backend metered-execute route which ships in v6.16.0-preview.2. " +
|
|
461
|
-
"For preview.0/preview.1, use Unbrowse#execute against fixed-price skills.");
|
|
462
|
-
}
|
|
463
|
-
/**
|
|
464
|
-
* Indexer earnings via delta-based attribution.
|
|
465
|
-
* Backend: `GET /v1/attribution/indexer/:indexerId`.
|
|
466
|
-
*/
|
|
467
|
-
async indexerAttribution(indexerId, options) {
|
|
468
|
-
return this.request("GET", `/v1/attribution/indexer/${encodeURIComponent(indexerId)}`, undefined, options);
|
|
469
|
-
}
|
|
470
|
-
/**
|
|
471
|
-
* Publish a captured skill to the marketplace.
|
|
472
|
-
* Backend: `POST /v1/skills`.
|
|
473
|
-
*
|
|
474
|
-
* SDK gap-fill (Wave 2 of rebuild-the-unbrowse-sdk-as-a-thin-http-first-ty
|
|
475
|
-
* + the parity gate from tests/cli-mcp-sdk-parity.test.ts). Mirrors the
|
|
476
|
-
* CLI `unbrowse publish` and the MCP `unbrowse_publish` tool.
|
|
477
|
-
*/
|
|
478
|
-
async publish(skill, options) {
|
|
479
|
-
return this.request("POST", "/v1/skills", skill, options);
|
|
480
|
-
}
|
|
481
|
-
/**
|
|
482
|
-
* Annotate an endpoint with a tip, constraint, or gotcha.
|
|
483
|
-
* Backend: `POST /v1/skills/:id/endpoints/:eid/annotate`.
|
|
484
|
-
*
|
|
485
|
-
* SDK gap-fill. Mirrors CLI `unbrowse annotate` + MCP `unbrowse_annotate`.
|
|
486
|
-
*/
|
|
487
|
-
async annotate(input, options) {
|
|
488
|
-
const { skillId, endpointId, ...body } = input;
|
|
489
|
-
return this.request("POST", `/v1/skills/${encodeURIComponent(skillId)}/endpoints/${encodeURIComponent(endpointId)}/annotate`, body, options);
|
|
490
|
-
}
|
|
491
|
-
/**
|
|
492
|
-
* Persist the agent's chosen x402 payment rail on the backend.
|
|
493
|
-
* Backend: `POST /v1/account/payment-provider` (shipped in #691).
|
|
494
|
-
*
|
|
495
|
-
* SDK gap-fill: surface the Wave 2 backend route as a typed SDK
|
|
496
|
-
* method so SDK callers can sync provider choice without rolling
|
|
497
|
-
* a raw fetch. Allowed values are the same six the route whitelists:
|
|
498
|
-
* pay_sh / lobster_cash / external_solana / privy_embedded /
|
|
499
|
-
* privy_embedded_solana / skip.
|
|
500
|
-
*/
|
|
501
|
-
async paymentProvider(provider, options) {
|
|
502
|
-
return this.request("POST", "/v1/account/payment-provider", { provider }, options);
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|