@tai42/api-client 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.
- package/LICENSE +202 -0
- package/README.md +28 -0
- package/dist/agents.d.ts +265 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +200 -0
- package/dist/agents.js.map +1 -0
- package/dist/client.d.ts +1316 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +468 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +43 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +63 -0
- package/dist/errors.js.map +1 -0
- package/dist/fleet-report.d.ts +61 -0
- package/dist/fleet-report.d.ts.map +1 -0
- package/dist/fleet-report.js +42 -0
- package/dist/fleet-report.js.map +1 -0
- package/dist/http.d.ts +69 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +152 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas.d.ts +5469 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +1103 -0
- package/dist/schemas.js.map +1 -0
- package/dist/sse.d.ts +27 -0
- package/dist/sse.d.ts.map +1 -0
- package/dist/sse.js +84 -0
- package/dist/sse.js.map +1 -0
- package/dist/tool-runs.d.ts +112 -0
- package/dist/tool-runs.d.ts.map +1 -0
- package/dist/tool-runs.js +70 -0
- package/dist/tool-runs.js.map +1 -0
- package/package.json +51 -0
- package/src/agents.ts +248 -0
- package/src/client.ts +837 -0
- package/src/errors.ts +67 -0
- package/src/fleet-report.ts +94 -0
- package/src/http.ts +198 -0
- package/src/index.ts +142 -0
- package/src/schemas.ts +1341 -0
- package/src/sse.ts +90 -0
- package/src/tool-runs.ts +103 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,468 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The typed client: one method per endpoint, each validating
|
|
3
|
+
* its response against the matching zod schema. Server state flows through
|
|
4
|
+
* TanStack Query in the features; this client is a plain typed transport with no
|
|
5
|
+
* caching of its own.
|
|
6
|
+
*/
|
|
7
|
+
import { apiDownload, apiRequest, apiText, encodeSegment, isUnsafePathSegment, } from './http';
|
|
8
|
+
import { ApiError, ApiLoginFailedError, ApiUnauthorizedError } from './errors';
|
|
9
|
+
import { readSseFrames } from './sse';
|
|
10
|
+
import { agentList, streamAgentRun, streamAuthoredAgentRun } from './agents';
|
|
11
|
+
import { getToolRun, listToolRuns, submitToolRun } from './tool-runs';
|
|
12
|
+
import * as s from './schemas';
|
|
13
|
+
/**
|
|
14
|
+
* Encode a possibly-nested storage id / directory path for use in a URL path,
|
|
15
|
+
* percent-encoding each segment while preserving the `/` separators. A storage id
|
|
16
|
+
* can be a nested path (e.g. `a/b c.txt`); encoding each segment independently keeps
|
|
17
|
+
* the slashes structural and escapes everything else (spaces, `#`, `?`, …).
|
|
18
|
+
*
|
|
19
|
+
* Dot segments (`.`, `..`), empty segments (a leading/trailing/doubled `/`, or an
|
|
20
|
+
* empty id) are REJECTED loudly rather than encoded: the browser's WHATWG URL parser
|
|
21
|
+
* removes dot-segments from a relative request path before it is sent — collapsing
|
|
22
|
+
* `..` even when percent-encoded — so such an id can never be faithfully transmitted.
|
|
23
|
+
* Left to encode, it would silently retarget the request at an unrelated same-origin
|
|
24
|
+
* route. The server enforces the same relative-path rule; failing fast here keeps a
|
|
25
|
+
* malformed id from ever leaving the client.
|
|
26
|
+
*/
|
|
27
|
+
function encodePath(id) {
|
|
28
|
+
const segments = id.split('/');
|
|
29
|
+
if (segments.some(isUnsafePathSegment)) {
|
|
30
|
+
throw new Error("storage path must be a relative path with no empty, '.', or '..' segment");
|
|
31
|
+
}
|
|
32
|
+
return segments.map(encodeURIComponent).join('/');
|
|
33
|
+
}
|
|
34
|
+
/** Flatten a `RunsQuery` to transport params, JSON-encoding the `tags` list. */
|
|
35
|
+
function runsQueryToParams(query) {
|
|
36
|
+
return {
|
|
37
|
+
from: query.from,
|
|
38
|
+
to: query.to,
|
|
39
|
+
tags: query.tags === undefined ? undefined : JSON.stringify(query.tags),
|
|
40
|
+
status: query.status,
|
|
41
|
+
minCost: query.minCost,
|
|
42
|
+
maxCost: query.maxCost,
|
|
43
|
+
minTokens: query.minTokens,
|
|
44
|
+
maxTokens: query.maxTokens,
|
|
45
|
+
minLatencyMs: query.minLatencyMs,
|
|
46
|
+
maxLatencyMs: query.maxLatencyMs,
|
|
47
|
+
sort: query.sort,
|
|
48
|
+
dir: query.dir,
|
|
49
|
+
page: query.page,
|
|
50
|
+
pageSize: query.pageSize,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Whether a login-method target is a safe same-origin relative API path. The
|
|
55
|
+
* login screen is the one page where a misconfigured/compromised manifest could
|
|
56
|
+
* redirect CREDENTIALS off-origin, so a `submit_path`/`href` MUST start `/api/`
|
|
57
|
+
* — anything else (absolute URL, protocol-relative `//host`, missing prefix) is
|
|
58
|
+
* rejected. The `/api/` prefix already excludes `//`-prefixed values; the
|
|
59
|
+
* explicit double-slash clause is kept for readability.
|
|
60
|
+
*/
|
|
61
|
+
export function isSafeApiPath(path) {
|
|
62
|
+
return path.startsWith('/api/') && !path.startsWith('//');
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Map a transport error from a login submission onto an `ApiLoginFailedError`
|
|
66
|
+
* (rendered inline on the login page) or rethrow it unchanged (5xx, schema
|
|
67
|
+
* drift, network — the page's generic failure branch surfaces it loudly).
|
|
68
|
+
*
|
|
69
|
+
* A transport 401 arrives as `ApiUnauthorizedError` before any body is read, so
|
|
70
|
+
* its message is generic by construction; the domain 4xx statuses carry the
|
|
71
|
+
* server's informative envelope text (rate-limit, bootstrap-already-initialized,
|
|
72
|
+
* password-policy, or the claim exchange's uniform "unknown or already used"
|
|
73
|
+
* 404) straight through to the inline surface.
|
|
74
|
+
*/
|
|
75
|
+
function asLoginError(error) {
|
|
76
|
+
if (error instanceof ApiUnauthorizedError) {
|
|
77
|
+
throw new ApiLoginFailedError('Sign-in failed — check your credentials.', 401);
|
|
78
|
+
}
|
|
79
|
+
if (error instanceof ApiError &&
|
|
80
|
+
(error.status === 400 ||
|
|
81
|
+
error.status === 403 ||
|
|
82
|
+
error.status === 404 ||
|
|
83
|
+
error.status === 409 ||
|
|
84
|
+
error.status === 422 ||
|
|
85
|
+
error.status === 429)) {
|
|
86
|
+
throw new ApiLoginFailedError(error.message, error.status);
|
|
87
|
+
}
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
export function createApiClient(config) {
|
|
91
|
+
const req = (path, schema, options) => apiRequest(config, path, schema, options);
|
|
92
|
+
return {
|
|
93
|
+
// -- tools ---------------------------------------------------------------
|
|
94
|
+
listTools: (signal) => req('/api/tools', s.toolNames, { signal }),
|
|
95
|
+
getToolSchema: (name, signal) => req(`/api/tools/${encodeSegment(name)}/schema`, s.toolSchema, { signal }),
|
|
96
|
+
getAllToolSchemas: (signal) => req('/api/tools-schema', s.allToolSchemas, { signal }),
|
|
97
|
+
runTool: (args, signal) => req('/api/run-tool', s.runToolResult, {
|
|
98
|
+
method: 'POST',
|
|
99
|
+
// The backend's `/api/run-tool` door reads `{tool_name, arguments}` (the
|
|
100
|
+
// shape `read_tool_call` enforces and the background `/api/tool-runs`
|
|
101
|
+
// submit already sends). The SPA keeps `tool`/`kwargs` as its ergonomic
|
|
102
|
+
// arg names; map them onto the wire fields here.
|
|
103
|
+
body: { tool_name: args.tool, arguments: args.kwargs ?? {} },
|
|
104
|
+
signal,
|
|
105
|
+
}),
|
|
106
|
+
// -- background tool runs ------------------------------------------------
|
|
107
|
+
submitToolRun: (args, signal) => submitToolRun(config, args, signal),
|
|
108
|
+
getToolRun: (runId, signal) => getToolRun(config, runId, signal),
|
|
109
|
+
listToolRuns: (toolName, signal) => listToolRuns(config, toolName, signal),
|
|
110
|
+
// -- tool tags (additive map feeding the ToolPicker tag grouping) --------
|
|
111
|
+
listToolTags: (signal) => req('/api/tools/tags', s.toolTags, { signal }),
|
|
112
|
+
// -- presets -------------------------------------------------------------
|
|
113
|
+
// Every preset is store-backed and versioned; the list is the single
|
|
114
|
+
// management population (the presets plus the conflicted quarantined rows).
|
|
115
|
+
listPresets: (signal) => req('/api/presets', s.presetList, { signal }),
|
|
116
|
+
createPreset: (body) => req('/api/presets', s.presetRecord, { method: 'POST', body }),
|
|
117
|
+
getPreset: (name, signal) => req(`/api/presets/${encodeSegment(name)}`, s.presetDetail, { signal }),
|
|
118
|
+
listPresetVersions: (name, signal) => req(`/api/presets/${encodeSegment(name)}/versions`, s.presetVersionList, { signal }),
|
|
119
|
+
getPresetVersion: (name, version, signal) => req(`/api/presets/${encodeSegment(name)}/versions/${encodeSegment(version)}`, s.presetVersion, { signal }),
|
|
120
|
+
savePresetVersion: (name, body) => req(`/api/presets/${encodeSegment(name)}/versions`, s.presetVersion, {
|
|
121
|
+
method: 'POST',
|
|
122
|
+
body,
|
|
123
|
+
}),
|
|
124
|
+
rollbackPreset: (name, version) => req(`/api/presets/${encodeSegment(name)}/rollback`, s.presetRollback, {
|
|
125
|
+
method: 'POST',
|
|
126
|
+
body: { version },
|
|
127
|
+
}),
|
|
128
|
+
deletePreset: (name) => req(`/api/presets/${encodeSegment(name)}`, s.presetDeleted, { method: 'DELETE' }),
|
|
129
|
+
renamePreset: (name, newName) => req(`/api/presets/${encodeSegment(name)}/rename`, s.presetRenamed, {
|
|
130
|
+
method: 'POST',
|
|
131
|
+
body: { new_name: newName },
|
|
132
|
+
}),
|
|
133
|
+
// The presets whose active composition names this one as a tool — the referees
|
|
134
|
+
// a rename would strand. A rename preflight reads this to warn before the 409.
|
|
135
|
+
getPresetReferees: (name, signal) => req(`/api/presets/${encodeSegment(name)}/referees`, s.presetReferees, { signal }),
|
|
136
|
+
// The dry-run verdict for a draft (create OR version, mode-resolved server-side):
|
|
137
|
+
// `valid` plus the server's verbatim `error` message. Both verdicts are HTTP 200.
|
|
138
|
+
validatePreset: (body) => req('/api/presets/validate', s.presetValidation, { method: 'POST', body }),
|
|
139
|
+
// Replace one version's `tags` annotation — labels on an immutable body, so no
|
|
140
|
+
// rebind. Returns the re-annotated identity + new tag list.
|
|
141
|
+
setPresetVersionTags: (name, version, tags) => req(`/api/presets/${encodeSegment(name)}/versions/${encodeSegment(version)}/tags`, s.presetVersionTags, { method: 'PUT', body: { tags } }),
|
|
142
|
+
// -- storage -------------------------------------------------------------
|
|
143
|
+
// The content store a storage-provider plugin exposes. Dead by default:
|
|
144
|
+
// `getStorageInfo` reports `present: false` (a 200 empty state) and every other
|
|
145
|
+
// door answers a loud 501 when no provider is installed. Ids may be nested
|
|
146
|
+
// paths, so each is `encodePath`-encoded (per-segment, `/` preserved).
|
|
147
|
+
getStorageInfo: (signal) => req('/api/storage', s.storageInfo, { signal }),
|
|
148
|
+
listStorageResources: (signal) => req('/api/storage/resources', s.storageResourceList, { signal }),
|
|
149
|
+
statStorageResource: (id, signal) => req(`/api/storage/resources/${encodePath(id)}/stat`, s.storageResourceStat, { signal }),
|
|
150
|
+
downloadStorageResource: (id, signal) => apiDownload(config, `/api/storage/resources/${encodePath(id)}/content`, { signal }),
|
|
151
|
+
uploadStorageResource: (body) => req('/api/storage/resources', s.storageResourceStored, { method: 'POST', body }),
|
|
152
|
+
deleteStorageResource: (id) => req(`/api/storage/resources/${encodePath(id)}`, s.storageResourceDeleted, {
|
|
153
|
+
method: 'DELETE',
|
|
154
|
+
}),
|
|
155
|
+
deleteStorageDir: (path) => req(`/api/storage/dirs/${encodePath(path)}`, s.storageDirDeleted, { method: 'DELETE' }),
|
|
156
|
+
// -- backend identity + fleet (worker bus) -------------------------------
|
|
157
|
+
// Backend IDENTITY (`getBackendInfo`, kept on `/api/backend`) is distinct from
|
|
158
|
+
// the FLEET doors, which ride the app's worker bus and need no backend at all.
|
|
159
|
+
// `getBackendInfo` reports `present: false` (a 200 empty state) when no backend
|
|
160
|
+
// plugin is registered. `listFleetWorkers` reads the live bus presence census
|
|
161
|
+
// (every subscribed origin, ASGI + backend-runtime) and never fabricates an empty
|
|
162
|
+
// fleet — a census read that fails surfaces as a loud 500.
|
|
163
|
+
getBackendInfo: (signal) => req('/api/backend', s.backendInfo, { signal }),
|
|
164
|
+
listFleetWorkers: (signal) => req('/api/fleet/workers', s.fleetWorkers, { signal }),
|
|
165
|
+
// Soft-restart the fleet: `targets` names the workers to reload, or `null` for
|
|
166
|
+
// the whole fleet. The serving worker applies locally then broadcasts; a 200
|
|
167
|
+
// response carries the per-origin fleet report, so workers that did not converge
|
|
168
|
+
// are named, not hidden. A failed local apply instead re-raises as a loud error
|
|
169
|
+
// (the transport throws with the failure message), not a returned report.
|
|
170
|
+
reloadFleetConfig: (targets) => req('/api/fleet/reload-config', s.fleetReloadResult, { method: 'POST', body: { targets } }),
|
|
171
|
+
// -- extensions ----------------------------------------------------------
|
|
172
|
+
listExtensions: (signal) => req('/api/extensions', s.extensions, { signal }),
|
|
173
|
+
// A MANIFEST-provided tool's current combos + the extension catalog. (A preset
|
|
174
|
+
// tool's extensions live on the preset spec, read via `getPreset`.)
|
|
175
|
+
getToolExtensions: (name, signal) => req(`/api/tools/${encodeSegment(name)}/extensions`, s.toolExtensions, { signal }),
|
|
176
|
+
// Author ALL of a MANIFEST tool's combos at once (the full lossless list; `[]`
|
|
177
|
+
// clears). Returns the apply result: the local reload (`status` + `env_keys`) plus
|
|
178
|
+
// the mode-wrapped fleet `fanout` of the reload it broadcast, from which the shared
|
|
179
|
+
// fleet-report handler surfaces any failed propagation.
|
|
180
|
+
setToolExtensions: (name, combos) => req(`/api/tools/${encodeSegment(name)}/extensions`, s.toolExtensionsApplyResult, {
|
|
181
|
+
method: 'POST',
|
|
182
|
+
body: { combos },
|
|
183
|
+
}),
|
|
184
|
+
// -- templates -----------------------------------------------------------
|
|
185
|
+
listTemplates: (signal) => req('/api/templates', s.templateNames, { signal }),
|
|
186
|
+
getTemplate: (templateId) => req('/api/template', s.templateDetail, { method: 'POST', body: { template_id: templateId } }),
|
|
187
|
+
uploadTemplate: (path, content) => req('/api/upload-template', s.templateUploaded, { method: 'POST', body: { path, content } }),
|
|
188
|
+
deleteTemplate: (path) => req('/api/delete-template', s.templateDeleted, { method: 'POST', body: { path } }),
|
|
189
|
+
renderTemplate: (body) => req('/api/render-template', s.templateRendered, { method: 'POST', body }),
|
|
190
|
+
clearTemplatesCache: () => req('/api/clear-templates-cache', s.templateCacheCleared, { method: 'POST' }),
|
|
191
|
+
// -- manifest / mcp ------------------------------------------------------
|
|
192
|
+
getManifest: (signal) => req('/api/manifest', s.manifestView, { signal }),
|
|
193
|
+
setMcpConfig: (mcp) => req('/api/mcp-config', s.reloadConfigResult, { method: 'POST', body: { mcp } }),
|
|
194
|
+
getMcpStatus: (signal) => req('/api/mcp-status', s.mcpStatus, { signal }),
|
|
195
|
+
reloadMcp: (title) => req(`/api/mcp-status/${encodeSegment(title)}/reload`, s.mcpReloadResult, {
|
|
196
|
+
method: 'POST',
|
|
197
|
+
}),
|
|
198
|
+
// -- sub-mcp -------------------------------------------------------------
|
|
199
|
+
listSubMcp: (signal) => req('/api/sub-mcp', s.subMcpList, { signal }),
|
|
200
|
+
createSubMcp: (slug, tools) => req('/api/sub-mcp', s.subMcpCreated, { method: 'POST', body: { slug, tools } }),
|
|
201
|
+
deleteSubMcp: (slug) => req(`/api/sub-mcp/${encodeSegment(slug)}`, s.subMcpRemoved, { method: 'DELETE' }),
|
|
202
|
+
// -- config --------------------------------------------------------------
|
|
203
|
+
getEnvConfig: (signal) => req('/api/config/env', s.envConfig, { signal }),
|
|
204
|
+
setEnvConfig: (env) => req('/api/config/env', s.reloadConfigResult, { method: 'POST', body: env }),
|
|
205
|
+
getConfigMode: (signal) => req('/api/config/mode', s.configMode, { signal }),
|
|
206
|
+
// -- connectors ----------------------------------------------------------
|
|
207
|
+
listProviders: (signal) => req('/api/connectors/providers', s.providers, { signal }),
|
|
208
|
+
listConnections: (signal) => req('/api/connectors/connections', s.connectionsList, { signal }),
|
|
209
|
+
getConnection: (id, signal) => req(`/api/connectors/connections/${encodeSegment(id)}`, s.connectionView, { signal }),
|
|
210
|
+
startConnect: (args) => req('/api/connectors/connections/start', s.startConnectResult, {
|
|
211
|
+
method: 'POST',
|
|
212
|
+
body: args,
|
|
213
|
+
}),
|
|
214
|
+
disconnect: (id) => req(`/api/connectors/connections/${encodeSegment(id)}`, s.disconnectResult, {
|
|
215
|
+
method: 'DELETE',
|
|
216
|
+
}),
|
|
217
|
+
reconnect: (id, enabled_sub_services, return_url) => req(`/api/connectors/connections/${encodeSegment(id)}/reconnect`, s.reconnectResult, {
|
|
218
|
+
method: 'POST',
|
|
219
|
+
body: { enabled_sub_services, return_url },
|
|
220
|
+
}),
|
|
221
|
+
patchSubServices: (id, enabled_sub_services, return_url) => req(`/api/connectors/connections/${encodeSegment(id)}/sub-services`, s.patchSubServicesResult, {
|
|
222
|
+
method: 'PATCH',
|
|
223
|
+
body: { enabled_sub_services, return_url },
|
|
224
|
+
}),
|
|
225
|
+
completeOAuth: (state, code, error) => req('/api/connectors/oauth/complete', s.oauthCompleteResult, {
|
|
226
|
+
method: 'POST',
|
|
227
|
+
body: { state, code, error },
|
|
228
|
+
}),
|
|
229
|
+
// -- studio plugin registry ---------------------------------------------
|
|
230
|
+
listStudioPlugins: (signal) => req('/api/plugins', s.studioPluginRegistry, { signal }),
|
|
231
|
+
// -- interactions --------------------------------------------------------
|
|
232
|
+
answerInteraction: (interactionId, answer) => req(`/api/interactions/${encodeSegment(interactionId)}/answer`, s.interactionAnswered, {
|
|
233
|
+
method: 'POST',
|
|
234
|
+
body: { answer },
|
|
235
|
+
}),
|
|
236
|
+
// -- channels --------------------------------------------------------------
|
|
237
|
+
// The installed channel-plugin names (delivery media for ask_user questions).
|
|
238
|
+
listChannels: (signal) => req('/api/channels', s.channels, { signal }),
|
|
239
|
+
// -- notifications ---------------------------------------------------------
|
|
240
|
+
// The internal notifications sink, newest-first — the messages the `notify_user`
|
|
241
|
+
// operation records with no channel, so they surface only in this inbox.
|
|
242
|
+
listNotifications: (signal) => req('/api/notifications', s.notifications, { signal }),
|
|
243
|
+
// -- agents --------------------------------------------------------------
|
|
244
|
+
listAgents: (signal) => req('/api/agents', agentList, { signal }),
|
|
245
|
+
// The authorable subset (agents whose `spec_runnable` is true) — the compose
|
|
246
|
+
// UI's base-agent picker. An empty `items` list ⇒ no authoring is possible.
|
|
247
|
+
listSpecRunnableAgents: (signal) => req('/api/agents/spec-runnable', agentList, { signal }),
|
|
248
|
+
// The streaming run: opens POST /api/agents/{name}/runs and yields parsed
|
|
249
|
+
// agent events. The auto-form's built value is the POST body.
|
|
250
|
+
streamAgentRun: (name, input, signal) => streamAgentRun(config, name, input, signal),
|
|
251
|
+
// The streaming run of an AUTHORED agent (POST /api/agents/authored/{name}/runs).
|
|
252
|
+
// The body carries only the non-baked ToolInput fields; the baked spec is
|
|
253
|
+
// resolved server-side. Reuses the same SSE parser (never EventSource).
|
|
254
|
+
streamAuthoredAgentRun: (name, input, signal) => streamAuthoredAgentRun(config, name, input, signal),
|
|
255
|
+
// -- hooks --------------------------------------------------------
|
|
256
|
+
listHooks: (topic, signal) => req('/api/hooks', s.hookList, { signal, query: topic === undefined ? undefined : { topic } }),
|
|
257
|
+
registerHook: (params) => req('/api/hooks', s.hookRegistered, { method: 'POST', body: params }),
|
|
258
|
+
unregisterHook: (name) => req(`/api/hooks/${encodeSegment(name)}`, s.hookRemoved, { method: 'DELETE' }),
|
|
259
|
+
// The registered webhook-verifier catalog — the only source the bind picker
|
|
260
|
+
// reads (names only; an empty registry is a valid empty list).
|
|
261
|
+
listHookVerifiers: (signal) => req('/api/hooks/verifiers', s.hookVerifiers, { signal }),
|
|
262
|
+
// Bind a verifier to a topic (locks its otherwise-open public ingress). A PUT
|
|
263
|
+
// replaces any existing binding; an unknown verifier name is a loud 400.
|
|
264
|
+
setTopicVerifier: (topic, body) => req(`/api/hooks/topics/${encodeSegment(topic)}/verifier`, s.topicVerifierSet, {
|
|
265
|
+
method: 'PUT',
|
|
266
|
+
body,
|
|
267
|
+
}),
|
|
268
|
+
// Unbind a topic's verifier (re-opens its public ingress). 404 when no binding.
|
|
269
|
+
deleteTopicVerifier: (topic) => req(`/api/hooks/topics/${encodeSegment(topic)}/verifier`, s.topicVerifierRemoved, {
|
|
270
|
+
method: 'DELETE',
|
|
271
|
+
}),
|
|
272
|
+
// -- mcp config schema (manifest McpTab form) ----------------------------
|
|
273
|
+
getMcpConfigSchema: (signal) => req('/api/mcp-config/schema', s.jsonSchema, { signal }),
|
|
274
|
+
// -- settings schema -----------------------------------------------------
|
|
275
|
+
getSettingsSchema: (signal) => req('/api/config/settings-schema', s.settingsSchema, { signal }),
|
|
276
|
+
// -- auth: scopes --------------------------------------------------------
|
|
277
|
+
listScopes: (signal) => req('/api/auth/scopes', s.authScopes, { signal }),
|
|
278
|
+
addUrlToScope: (body) => req('/api/auth/scopes', s.addUrlToScopeResult, { method: 'POST', body }),
|
|
279
|
+
removeUrlFromScope: (body) => req('/api/auth/scopes/urls', s.removeUrlFromScopeResult, { method: 'DELETE', body }),
|
|
280
|
+
removeScope: (scopeId) => req(`/api/auth/scopes/${encodeSegment(scopeId)}`, s.removeScopeResult, {
|
|
281
|
+
method: 'DELETE',
|
|
282
|
+
}),
|
|
283
|
+
// The app's HTTP route catalog with each route's current mapping — the only
|
|
284
|
+
// source of the mapper's unassigned-routes bucket (`mapped: null` entries).
|
|
285
|
+
listAuthRoutes: (signal) => req('/api/auth/routes', s.authRoutes, { signal }),
|
|
286
|
+
// The urls pinned to the public marker; pinning/unpinning is the dedicated
|
|
287
|
+
// public-routes writer, never the scope machinery.
|
|
288
|
+
listPublicRoutes: (signal) => req('/api/auth/public-routes', s.publicRoutes, { signal }),
|
|
289
|
+
pinRoutePublic: (body) => req('/api/auth/public-routes', s.pinPublicResult, { method: 'POST', body }),
|
|
290
|
+
// Unpin a public url. A url that is absent or scope-mapped is a loud 404.
|
|
291
|
+
unpinPublicRoute: (url) => req('/api/auth/public-routes', s.unpinPublicResult, { method: 'DELETE', body: { url } }),
|
|
292
|
+
// -- auth: api keys ------------------------------------------------------
|
|
293
|
+
listTokensPayload: (signal) => req('/api/auth/tokens-payload', s.tokensPayload, { signal }),
|
|
294
|
+
createApiKey: (body) => req('/api/auth/api-keys', s.createdApiKey, { method: 'POST', body }),
|
|
295
|
+
editApiKey: (userId, body) => req(`/api/auth/api-keys/${encodeSegment(userId)}`, s.editApiKeyResult, {
|
|
296
|
+
method: 'PUT',
|
|
297
|
+
body,
|
|
298
|
+
}),
|
|
299
|
+
revokeApiKey: (userId) => req(`/api/auth/api-keys/${encodeSegment(userId)}`, s.revokeApiKeyResult, {
|
|
300
|
+
method: 'DELETE',
|
|
301
|
+
}),
|
|
302
|
+
// Mint a one-time claim link carrying a raw key to another device (the QR
|
|
303
|
+
// onboarding leg). The token rides the URL fragment; the server returns a
|
|
304
|
+
// relative `claim_path` and the raw token ONCE.
|
|
305
|
+
createClaimLink: (body) => req('/api/auth/claim-links', s.claimLinkCreated, { method: 'POST', body }),
|
|
306
|
+
// -- auth: the caller's capability projection ----------------------------
|
|
307
|
+
// The derived (path, method) surface + tools/agents the caller can reach
|
|
308
|
+
// right now — the projection the Studio filters its nav and pages on.
|
|
309
|
+
getMe: (signal) => req('/api/auth/me', s.meProjection, { signal }),
|
|
310
|
+
// -- login: the public sign-in aggregator --------------------------------
|
|
311
|
+
// PUBLIC by design: `apiRequest` attaches `x-api-key` only when a token
|
|
312
|
+
// exists, so the unauthenticated call carries no auth header — no transport
|
|
313
|
+
// change needed.
|
|
314
|
+
getLoginMethods: (options) => req('/api/login/methods', s.loginMethods, { signal: options?.signal }),
|
|
315
|
+
// Submit a `form` method's field VALUES as a flat top-level JSON body (the
|
|
316
|
+
// server's request models take the declared field names top-level). `path`
|
|
317
|
+
// is re-checked with the same relative-`/api/` guard the renderer uses — an
|
|
318
|
+
// off-origin path is a PROGRAMMING error (loud `Error`), not a login failure.
|
|
319
|
+
// A refused credential becomes an inline `ApiLoginFailedError`.
|
|
320
|
+
submitLoginForm: async (path, values) => {
|
|
321
|
+
if (!isSafeApiPath(path)) {
|
|
322
|
+
throw new Error(`login submit_path must be a relative /api/ path; received ${JSON.stringify(path)}`);
|
|
323
|
+
}
|
|
324
|
+
try {
|
|
325
|
+
return await req(path, s.loginResult, { method: 'POST', body: values });
|
|
326
|
+
}
|
|
327
|
+
catch (error) {
|
|
328
|
+
return asLoginError(error);
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
// Exchange a one-time SSO hand-back code for a session (never a token in the
|
|
332
|
+
// URL). An expired/reused code is a login failure, surfaced inline.
|
|
333
|
+
exchangeSsoCode: async (code) => {
|
|
334
|
+
try {
|
|
335
|
+
return await req('/api/login/sso/exchange', s.loginResult, {
|
|
336
|
+
method: 'POST',
|
|
337
|
+
body: { code },
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
catch (error) {
|
|
341
|
+
return asLoginError(error);
|
|
342
|
+
}
|
|
343
|
+
},
|
|
344
|
+
// Exchange a one-time claim token (read from the login URL fragment, never a
|
|
345
|
+
// query param) for a session. PUBLIC. The token is single-use and burns
|
|
346
|
+
// server-side; a used/unknown/expired token answers the uniform 404, which —
|
|
347
|
+
// like the SSO leg — maps to an inline `ApiLoginFailedError`, not a global
|
|
348
|
+
// unauthorized redirect. The caller latches the exchange so it fires once.
|
|
349
|
+
claimLogin: async (body) => {
|
|
350
|
+
try {
|
|
351
|
+
return await req('/api/login/claim', s.loginResult, { method: 'POST', body });
|
|
352
|
+
}
|
|
353
|
+
catch (error) {
|
|
354
|
+
return asLoginError(error);
|
|
355
|
+
}
|
|
356
|
+
},
|
|
357
|
+
// Whether this deployment can mint API keys locally (the settings key-create
|
|
358
|
+
// UI gates on `mintable`). AUTHED.
|
|
359
|
+
getAuthCapabilities: (signal) => req('/api/auth/capabilities', s.authCapabilities, { signal }),
|
|
360
|
+
// -- auth: session logout ------------------------------------------------
|
|
361
|
+
// The single authed logout dispatcher — revokes the caller's accounts
|
|
362
|
+
// session server-side before the shell clears local state. A plain `sk-` key
|
|
363
|
+
// has nothing to revoke and answers 404 (surfaced as an `ApiError`, quiet at
|
|
364
|
+
// the call site); a 5xx/network failure is a real revoke failure the shell
|
|
365
|
+
// surfaces loudly.
|
|
366
|
+
logout: () => req('/api/auth/logout', s.logoutResult, { method: 'POST' }),
|
|
367
|
+
// -- auth: policy authoring + versioning ---------------------------------
|
|
368
|
+
// The fail-closed jq guard: compiles (and, with `sample_context`, evaluates) a
|
|
369
|
+
// condition without persisting anything, so a broken condition is caught at
|
|
370
|
+
// author time instead of locking a key out at enforcement. A broken condition
|
|
371
|
+
// is a 400 the transport throws — never a false-positive `ok`.
|
|
372
|
+
validateCondition: (body) => req('/api/auth/validate-condition', s.validateConditionResult, { method: 'POST', body }),
|
|
373
|
+
// The user's append-only policy version history (each row's `is_current`
|
|
374
|
+
// derived from the active pointer). SECRET-ADJACENT — the body carries the raw
|
|
375
|
+
// condition, so its fixtures are hand-authored.
|
|
376
|
+
listPolicyVersions: (userId, signal) => req(`/api/auth/api-keys/${encodeSegment(userId)}/policy/versions`, s.policyVersionList, {
|
|
377
|
+
signal,
|
|
378
|
+
}),
|
|
379
|
+
// Re-point the enforced policy to a prior version; returns the re-pointed
|
|
380
|
+
// active version. Enforcement follows on cache invalidation.
|
|
381
|
+
rollbackPolicy: (userId, version) => req(`/api/auth/api-keys/${encodeSegment(userId)}/policy/rollback`, s.policyRollback, {
|
|
382
|
+
method: 'POST',
|
|
383
|
+
body: { version },
|
|
384
|
+
}),
|
|
385
|
+
// -- backup --------------------------------------------------------------
|
|
386
|
+
listBackupSections: (signal) => req('/api/backup/sections', s.backupSections, { signal }),
|
|
387
|
+
exportBackup: (sections, signal) => apiDownload(config, '/api/backup/export', { method: 'POST', body: { sections }, signal }),
|
|
388
|
+
importBackup: (body) => req('/api/backup/import', s.backupImportReport, { method: 'POST', body }),
|
|
389
|
+
// -- schedules -----------------------------------------------------------
|
|
390
|
+
listSchedules: (signal) => req('/api/schedules', s.scheduleList, { signal }),
|
|
391
|
+
getServerDateTime: (signal) => req('/api/schedules/server-datetime', s.serverDateTime, { signal }),
|
|
392
|
+
addSchedule: (body) => req('/api/schedules', s.jsonValue, { method: 'POST', body }),
|
|
393
|
+
deleteSchedule: (name) => req(`/api/schedules/${encodeSegment(name)}`, s.jsonValue, { method: 'DELETE' }),
|
|
394
|
+
// -- observability -------------------------------------------------------
|
|
395
|
+
// NB: named `getObservabilityMetrics` (not `getMetrics`) — `getMetrics`
|
|
396
|
+
// already serves the Prometheus `/metrics` text endpoint.
|
|
397
|
+
getObservabilityMetrics: (params = {}, signal) => req('/api/observability/metrics', s.dashboardMetrics, {
|
|
398
|
+
query: { from: params.from, to: params.to, granularity: params.granularity },
|
|
399
|
+
signal,
|
|
400
|
+
}),
|
|
401
|
+
listRuns: (params = {}, signal) => req('/api/observability/runs', s.runsPage, { query: runsQueryToParams(params), signal }),
|
|
402
|
+
getRunTrace: (traceId, signal) => req(`/api/observability/runs/${encodeSegment(traceId)}/trace`, s.runTrace, { signal }),
|
|
403
|
+
exportTrace: (traceId, signal) => apiDownload(config, `/api/observability/runs/${encodeSegment(traceId)}/trace/export`, {
|
|
404
|
+
signal,
|
|
405
|
+
}),
|
|
406
|
+
exportRuns: (params, signal) => apiDownload(config, '/api/observability/runs/export', {
|
|
407
|
+
query: { ...runsQueryToParams(params), format: params.format },
|
|
408
|
+
signal,
|
|
409
|
+
}),
|
|
410
|
+
// -- marketplace ---------------------------------------------------------
|
|
411
|
+
// Browse/search proxy the registry through the app (one origin, one auth);
|
|
412
|
+
// install/uninstall/update mutate the RUNNING app (pip install + manifest
|
|
413
|
+
// patch + reload) and return synchronous receipts.
|
|
414
|
+
searchMarketplace: (query = {}, signal) => req('/api/marketplace/search', s.marketplaceSearchPage, {
|
|
415
|
+
query: {
|
|
416
|
+
q: query.q,
|
|
417
|
+
kind: query.kind,
|
|
418
|
+
category: query.category,
|
|
419
|
+
tags: query.tags,
|
|
420
|
+
namespace: query.namespace,
|
|
421
|
+
tier: query.tier,
|
|
422
|
+
contract: query.contract,
|
|
423
|
+
sort: query.sort,
|
|
424
|
+
page: query.page,
|
|
425
|
+
page_size: query.page_size,
|
|
426
|
+
},
|
|
427
|
+
signal,
|
|
428
|
+
}),
|
|
429
|
+
getMarketplacePlugin: (namespace, name, signal) => req(`/api/marketplace/plugins/${encodeSegment(namespace)}/${encodeSegment(name)}`, s.marketplacePluginDetail, { signal }),
|
|
430
|
+
listMarketplaceCategories: (signal) => req('/api/marketplace/categories', s.marketplaceCategories, { signal }),
|
|
431
|
+
listInstalledMarketplacePlugins: (signal) => req('/api/marketplace/installed', s.marketplaceInstalled, { signal }),
|
|
432
|
+
installMarketplacePlugin: (body) => req('/api/marketplace/install', s.marketplaceInstallResult, { method: 'POST', body }),
|
|
433
|
+
uninstallMarketplacePlugin: (body) => req('/api/marketplace/uninstall', s.marketplaceUninstallResult, { method: 'POST', body }),
|
|
434
|
+
updateMarketplacePlugin: (body) => req('/api/marketplace/update', s.marketplaceInstallResult, { method: 'POST', body }),
|
|
435
|
+
getMarketplaceAdvisories: (signal) => req('/api/marketplace/advisories', s.marketplaceAdvisories, { signal }),
|
|
436
|
+
// -- system (plain-text ops endpoints) -----------------------------------
|
|
437
|
+
getHealth: (signal) => apiText(config, '/health', { signal }),
|
|
438
|
+
getMetrics: (signal) => apiText(config, '/metrics', { signal }),
|
|
439
|
+
// The pluggable-kind status table (`GET /api/system/kinds`) — a JSON `{data}`
|
|
440
|
+
// envelope, one row per kind with its active/default/off state.
|
|
441
|
+
getSystemKinds: (signal) => req('/api/system/kinds', s.kindStatusList, { signal }),
|
|
442
|
+
/**
|
|
443
|
+
* Open the authed interactions SSE stream. The caller drives reconnect +
|
|
444
|
+
* backlog-replay dedup. Returns the raw frame iterator; the interactions
|
|
445
|
+
* feature maps frames to typed events.
|
|
446
|
+
*/
|
|
447
|
+
streamInteractions: async (signal) => {
|
|
448
|
+
const doFetch = config.fetch ?? globalThis.fetch;
|
|
449
|
+
const token = config.getToken();
|
|
450
|
+
const headers = { accept: 'text/event-stream' };
|
|
451
|
+
if (token)
|
|
452
|
+
headers['x-api-key'] = token;
|
|
453
|
+
const response = await doFetch(`${config.baseUrl ?? ''}/api/interactions/stream`, {
|
|
454
|
+
headers,
|
|
455
|
+
signal,
|
|
456
|
+
});
|
|
457
|
+
if (response.status === 401)
|
|
458
|
+
throw new ApiUnauthorizedError();
|
|
459
|
+
// A non-ok stream open (5xx/4xx) still carries a body, which would parse to
|
|
460
|
+
// zero frames and look like a silently-empty stream — surface it loudly so
|
|
461
|
+
// the caller shows an error instead of hanging on a reconnect loop.
|
|
462
|
+
if (!response.ok)
|
|
463
|
+
throw new ApiError(response.statusText || 'stream failed', response.status);
|
|
464
|
+
return readSseFrames(response, signal);
|
|
465
|
+
},
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loud error types. Every failure surfaces — a failed request or a schema
|
|
3
|
+
* mismatch throws, so the UI can render a visible error state, never a silent
|
|
4
|
+
* empty render.
|
|
5
|
+
*/
|
|
6
|
+
/** The skeleton returned `{ "error": "<message>" }` (or a non-2xx status). */
|
|
7
|
+
export declare class ApiError extends Error {
|
|
8
|
+
readonly status: number;
|
|
9
|
+
/** The optional machine-readable `code` from the `{ error, code }` envelope. */
|
|
10
|
+
readonly code: string | undefined;
|
|
11
|
+
constructor(message: string, status: number, code?: string);
|
|
12
|
+
}
|
|
13
|
+
/** A 401 from any data route. The shell routes this back to `/login`. */
|
|
14
|
+
export declare class ApiUnauthorizedError extends ApiError {
|
|
15
|
+
constructor(message?: string);
|
|
16
|
+
}
|
|
17
|
+
/** A duplicate answer / alias collision etc. (HTTP 409). */
|
|
18
|
+
export declare class ApiConflictError extends ApiError {
|
|
19
|
+
constructor(message: string);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A login attempt was REJECTED (bad credentials, expired invite/SSO code,
|
|
23
|
+
* rate-limited). Deliberately NOT an ApiUnauthorizedError: that type means "your
|
|
24
|
+
* stored session credential is dead" and routes to /login globally (the
|
|
25
|
+
* create-studio wiring); this one means "the credentials you just typed on the
|
|
26
|
+
* login page were refused" and renders inline, on the page the user is already
|
|
27
|
+
* on.
|
|
28
|
+
*/
|
|
29
|
+
export declare class ApiLoginFailedError extends Error {
|
|
30
|
+
readonly status: number;
|
|
31
|
+
constructor(message: string, status: number);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The response body did not match its declared zod schema. This is a contract
|
|
35
|
+
* drift between the Studio and the skeleton — a loud, visible error, never a
|
|
36
|
+
* silently-coerced value.
|
|
37
|
+
*/
|
|
38
|
+
export declare class ApiSchemaError extends Error {
|
|
39
|
+
readonly endpoint: string;
|
|
40
|
+
readonly issues: unknown;
|
|
41
|
+
constructor(endpoint: string, issues: unknown);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8EAA8E;AAC9E,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,gFAAgF;IAChF,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;gBACtB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;CAM3D;AAED,yEAAyE;AACzE,qBAAa,oBAAqB,SAAQ,QAAQ;gBACpC,OAAO,SAAiB;CAIrC;AAED,4DAA4D;AAC5D,qBAAa,gBAAiB,SAAQ,QAAQ;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;;GAOG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACZ,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAK5C;AAED;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;gBACb,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;CAM9C"}
|