@alva-ai/toolkit 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 +21 -0
- package/README.md +161 -0
- package/dist/browser.global.js +2 -0
- package/dist/browser.global.js.map +1 -0
- package/dist/cli.js +1469 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.cjs +554 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +402 -0
- package/dist/index.d.ts +402 -0
- package/dist/index.js +526 -0
- package/dist/index.js.map +1 -0
- package/package.json +73 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,554 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
|
+
AlvaClient: () => AlvaClient,
|
|
24
|
+
AlvaError: () => AlvaError
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(src_exports);
|
|
27
|
+
|
|
28
|
+
// src/error.ts
|
|
29
|
+
var AlvaError = class extends Error {
|
|
30
|
+
code;
|
|
31
|
+
status;
|
|
32
|
+
constructor(code, message, status) {
|
|
33
|
+
super(message);
|
|
34
|
+
this.name = "AlvaError";
|
|
35
|
+
this.code = code;
|
|
36
|
+
this.status = status;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
// src/resources/fs.ts
|
|
41
|
+
var FsResource = class {
|
|
42
|
+
constructor(client) {
|
|
43
|
+
this.client = client;
|
|
44
|
+
}
|
|
45
|
+
client;
|
|
46
|
+
/** Returns `ArrayBuffer` for binary files, or parsed JSON for time-series virtual paths. */
|
|
47
|
+
async read(params) {
|
|
48
|
+
return this.client._request("GET", "/api/v1/fs/read", {
|
|
49
|
+
query: { path: params.path, offset: params.offset, size: params.size }
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/** Write file using JSON body (Mode 2). For text content. */
|
|
53
|
+
async write(params) {
|
|
54
|
+
this.client._requireAuth();
|
|
55
|
+
return this.client._request("POST", "/api/v1/fs/write", {
|
|
56
|
+
body: {
|
|
57
|
+
path: params.path,
|
|
58
|
+
data: params.data,
|
|
59
|
+
mkdir_parents: params.mkdir_parents
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/** Write file using raw body (Mode 1). Supports binary data. Path and options are query params. */
|
|
64
|
+
async rawWrite(params) {
|
|
65
|
+
this.client._requireAuth();
|
|
66
|
+
return this.client._request("POST", "/api/v1/fs/write", {
|
|
67
|
+
query: {
|
|
68
|
+
path: params.path,
|
|
69
|
+
mkdir_parents: params.mkdir_parents
|
|
70
|
+
},
|
|
71
|
+
rawBody: params.body
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
async stat(params) {
|
|
75
|
+
this.client._requireAuth();
|
|
76
|
+
return this.client._request("GET", "/api/v1/fs/stat", {
|
|
77
|
+
query: { path: params.path }
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
async readdir(params) {
|
|
81
|
+
this.client._requireAuth();
|
|
82
|
+
return this.client._request("GET", "/api/v1/fs/readdir", {
|
|
83
|
+
query: { path: params.path, recursive: params.recursive }
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
async mkdir(params) {
|
|
87
|
+
this.client._requireAuth();
|
|
88
|
+
await this.client._request("POST", "/api/v1/fs/mkdir", {
|
|
89
|
+
body: { path: params.path }
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
async remove(params) {
|
|
93
|
+
this.client._requireAuth();
|
|
94
|
+
await this.client._request("DELETE", "/api/v1/fs/remove", {
|
|
95
|
+
query: { path: params.path, recursive: params.recursive }
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
async rename(params) {
|
|
99
|
+
this.client._requireAuth();
|
|
100
|
+
await this.client._request("POST", "/api/v1/fs/rename", {
|
|
101
|
+
body: { old_path: params.old_path, new_path: params.new_path }
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
async copy(params) {
|
|
105
|
+
this.client._requireAuth();
|
|
106
|
+
await this.client._request("POST", "/api/v1/fs/copy", {
|
|
107
|
+
body: { src_path: params.src_path, dst_path: params.dst_path }
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
async symlink(params) {
|
|
111
|
+
this.client._requireAuth();
|
|
112
|
+
await this.client._request("POST", "/api/v1/fs/symlink", {
|
|
113
|
+
body: {
|
|
114
|
+
target_path: params.target_path,
|
|
115
|
+
link_path: params.link_path
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
async readlink(params) {
|
|
120
|
+
this.client._requireAuth();
|
|
121
|
+
return this.client._request("GET", "/api/v1/fs/readlink", {
|
|
122
|
+
query: { path: params.path }
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
async chmod(params) {
|
|
126
|
+
this.client._requireAuth();
|
|
127
|
+
await this.client._request("POST", "/api/v1/fs/chmod", {
|
|
128
|
+
body: { path: params.path, mode: params.mode }
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
async grant(params) {
|
|
132
|
+
this.client._requireAuth();
|
|
133
|
+
await this.client._request("POST", "/api/v1/fs/grant", {
|
|
134
|
+
body: {
|
|
135
|
+
path: params.path,
|
|
136
|
+
subject: params.subject,
|
|
137
|
+
permission: params.permission
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
async revoke(params) {
|
|
142
|
+
this.client._requireAuth();
|
|
143
|
+
await this.client._request("POST", "/api/v1/fs/revoke", {
|
|
144
|
+
body: {
|
|
145
|
+
path: params.path,
|
|
146
|
+
subject: params.subject,
|
|
147
|
+
permission: params.permission
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
// src/resources/run.ts
|
|
154
|
+
var RunResource = class {
|
|
155
|
+
constructor(client) {
|
|
156
|
+
this.client = client;
|
|
157
|
+
}
|
|
158
|
+
client;
|
|
159
|
+
async execute(params) {
|
|
160
|
+
this.client._requireAuth();
|
|
161
|
+
return this.client._request("POST", "/api/v1/run", {
|
|
162
|
+
body: {
|
|
163
|
+
code: params.code,
|
|
164
|
+
entry_path: params.entry_path,
|
|
165
|
+
working_dir: params.working_dir,
|
|
166
|
+
args: params.args
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
// src/resources/deploy.ts
|
|
173
|
+
var DeployResource = class {
|
|
174
|
+
constructor(client) {
|
|
175
|
+
this.client = client;
|
|
176
|
+
}
|
|
177
|
+
client;
|
|
178
|
+
async create(params) {
|
|
179
|
+
this.client._requireAuth();
|
|
180
|
+
return this.client._request("POST", "/api/v1/deploy/cronjob", {
|
|
181
|
+
body: {
|
|
182
|
+
name: params.name,
|
|
183
|
+
path: params.path,
|
|
184
|
+
cron_expression: params.cron_expression,
|
|
185
|
+
args: params.args,
|
|
186
|
+
push_notify: params.push_notify
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
async list(params) {
|
|
191
|
+
this.client._requireAuth();
|
|
192
|
+
return this.client._request("GET", "/api/v1/deploy/cronjobs", {
|
|
193
|
+
query: { limit: params?.limit, cursor: params?.cursor }
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
async get(params) {
|
|
197
|
+
this.client._requireAuth();
|
|
198
|
+
return this.client._request(
|
|
199
|
+
"GET",
|
|
200
|
+
`/api/v1/deploy/cronjob/${params.id}`
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
async update(params) {
|
|
204
|
+
this.client._requireAuth();
|
|
205
|
+
const { id, ...body } = params;
|
|
206
|
+
return this.client._request("PATCH", `/api/v1/deploy/cronjob/${id}`, {
|
|
207
|
+
body
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
async delete(params) {
|
|
211
|
+
this.client._requireAuth();
|
|
212
|
+
await this.client._request("DELETE", `/api/v1/deploy/cronjob/${params.id}`);
|
|
213
|
+
}
|
|
214
|
+
async pause(params) {
|
|
215
|
+
this.client._requireAuth();
|
|
216
|
+
await this.client._request(
|
|
217
|
+
"POST",
|
|
218
|
+
`/api/v1/deploy/cronjob/${params.id}/pause`
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
async resume(params) {
|
|
222
|
+
this.client._requireAuth();
|
|
223
|
+
await this.client._request(
|
|
224
|
+
"POST",
|
|
225
|
+
`/api/v1/deploy/cronjob/${params.id}/resume`
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
// src/resources/release.ts
|
|
231
|
+
var ReleaseResource = class {
|
|
232
|
+
constructor(client) {
|
|
233
|
+
this.client = client;
|
|
234
|
+
}
|
|
235
|
+
client;
|
|
236
|
+
async feed(params) {
|
|
237
|
+
this.client._requireAuth();
|
|
238
|
+
return this.client._request("POST", "/api/v1/release/feed", {
|
|
239
|
+
body: {
|
|
240
|
+
name: params.name,
|
|
241
|
+
version: params.version,
|
|
242
|
+
cronjob_id: params.cronjob_id,
|
|
243
|
+
view_json: params.view_json,
|
|
244
|
+
description: params.description
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
async playbookDraft(params) {
|
|
249
|
+
this.client._requireAuth();
|
|
250
|
+
return this.client._request("POST", "/api/v1/draft/playbook", {
|
|
251
|
+
body: {
|
|
252
|
+
name: params.name,
|
|
253
|
+
display_name: params.display_name,
|
|
254
|
+
description: params.description,
|
|
255
|
+
feeds: params.feeds,
|
|
256
|
+
trading_symbols: params.trading_symbols
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
async playbook(params) {
|
|
261
|
+
this.client._requireAuth();
|
|
262
|
+
return this.client._request("POST", "/api/v1/release/playbook", {
|
|
263
|
+
body: {
|
|
264
|
+
name: params.name,
|
|
265
|
+
version: params.version,
|
|
266
|
+
feeds: params.feeds,
|
|
267
|
+
changelog: params.changelog
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
// src/resources/secrets.ts
|
|
274
|
+
var SecretsResource = class {
|
|
275
|
+
constructor(client) {
|
|
276
|
+
this.client = client;
|
|
277
|
+
}
|
|
278
|
+
client;
|
|
279
|
+
async create(params) {
|
|
280
|
+
this.client._requireAuth();
|
|
281
|
+
await this.client._request("POST", "/api/v1/secrets", {
|
|
282
|
+
body: { name: params.name, value: params.value }
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
async list() {
|
|
286
|
+
this.client._requireAuth();
|
|
287
|
+
return this.client._request("GET", "/api/v1/secrets");
|
|
288
|
+
}
|
|
289
|
+
async get(params) {
|
|
290
|
+
this.client._requireAuth();
|
|
291
|
+
const encoded = encodeURIComponent(params.name);
|
|
292
|
+
return this.client._request(
|
|
293
|
+
"GET",
|
|
294
|
+
`/api/v1/secrets/${encoded}`
|
|
295
|
+
);
|
|
296
|
+
}
|
|
297
|
+
async update(params) {
|
|
298
|
+
this.client._requireAuth();
|
|
299
|
+
const encoded = encodeURIComponent(params.name);
|
|
300
|
+
await this.client._request("PUT", `/api/v1/secrets/${encoded}`, {
|
|
301
|
+
body: { value: params.value }
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
async delete(params) {
|
|
305
|
+
this.client._requireAuth();
|
|
306
|
+
const encoded = encodeURIComponent(params.name);
|
|
307
|
+
await this.client._request("DELETE", `/api/v1/secrets/${encoded}`);
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
// src/resources/sdkDocs.ts
|
|
312
|
+
var SdkDocsResource = class {
|
|
313
|
+
constructor(client) {
|
|
314
|
+
this.client = client;
|
|
315
|
+
}
|
|
316
|
+
client;
|
|
317
|
+
async doc(params) {
|
|
318
|
+
this.client._requireAuth();
|
|
319
|
+
return this.client._request("GET", "/api/v1/sdk/doc", {
|
|
320
|
+
query: { name: params.name }
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
async partitions() {
|
|
324
|
+
this.client._requireAuth();
|
|
325
|
+
return this.client._request(
|
|
326
|
+
"GET",
|
|
327
|
+
"/api/v1/sdk/partitions"
|
|
328
|
+
);
|
|
329
|
+
}
|
|
330
|
+
async partitionSummary(params) {
|
|
331
|
+
this.client._requireAuth();
|
|
332
|
+
const encoded = encodeURIComponent(params.partition);
|
|
333
|
+
return this.client._request(
|
|
334
|
+
"GET",
|
|
335
|
+
`/api/v1/sdk/partitions/${encoded}/summary`
|
|
336
|
+
);
|
|
337
|
+
}
|
|
338
|
+
};
|
|
339
|
+
|
|
340
|
+
// src/resources/comments.ts
|
|
341
|
+
var CommentsResource = class {
|
|
342
|
+
constructor(client) {
|
|
343
|
+
this.client = client;
|
|
344
|
+
}
|
|
345
|
+
client;
|
|
346
|
+
async create(params) {
|
|
347
|
+
this.client._requireAuth();
|
|
348
|
+
return this.client._request("POST", "/api/v1/playbook/comment", {
|
|
349
|
+
body: {
|
|
350
|
+
username: params.username,
|
|
351
|
+
name: params.name,
|
|
352
|
+
content: params.content,
|
|
353
|
+
parent_id: params.parent_id
|
|
354
|
+
}
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
async pin(params) {
|
|
358
|
+
this.client._requireAuth();
|
|
359
|
+
return this.client._request("POST", "/api/v1/playbook/comment/pin", {
|
|
360
|
+
body: { comment_id: params.comment_id }
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
async unpin(params) {
|
|
364
|
+
this.client._requireAuth();
|
|
365
|
+
return this.client._request("POST", "/api/v1/playbook/comment/unpin", {
|
|
366
|
+
body: { comment_id: params.comment_id }
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
};
|
|
370
|
+
|
|
371
|
+
// src/resources/remix.ts
|
|
372
|
+
var RemixResource = class {
|
|
373
|
+
constructor(client) {
|
|
374
|
+
this.client = client;
|
|
375
|
+
}
|
|
376
|
+
client;
|
|
377
|
+
async save(params) {
|
|
378
|
+
this.client._requireAuth();
|
|
379
|
+
await this.client._request("POST", "/api/v1/remix", {
|
|
380
|
+
body: {
|
|
381
|
+
child: params.child,
|
|
382
|
+
parents: params.parents
|
|
383
|
+
}
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
};
|
|
387
|
+
|
|
388
|
+
// src/resources/screenshot.ts
|
|
389
|
+
var ScreenshotResource = class {
|
|
390
|
+
constructor(client) {
|
|
391
|
+
this.client = client;
|
|
392
|
+
}
|
|
393
|
+
client;
|
|
394
|
+
async capture(params) {
|
|
395
|
+
this.client._requireAuth();
|
|
396
|
+
return this.client._request("GET", "/api/v1/screenshot", {
|
|
397
|
+
query: {
|
|
398
|
+
url: params.url,
|
|
399
|
+
selector: params.selector,
|
|
400
|
+
xpath: params.xpath
|
|
401
|
+
}
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
};
|
|
405
|
+
|
|
406
|
+
// src/resources/user.ts
|
|
407
|
+
var UserResource = class {
|
|
408
|
+
constructor(client) {
|
|
409
|
+
this.client = client;
|
|
410
|
+
}
|
|
411
|
+
client;
|
|
412
|
+
async me() {
|
|
413
|
+
this.client._requireAuth();
|
|
414
|
+
return this.client._request("GET", "/api/v1/me");
|
|
415
|
+
}
|
|
416
|
+
};
|
|
417
|
+
|
|
418
|
+
// src/client.ts
|
|
419
|
+
var DEFAULT_BASE_URL = "https://api-llm.prd.alva.ai";
|
|
420
|
+
var AlvaClient = class {
|
|
421
|
+
baseUrl;
|
|
422
|
+
apiKey;
|
|
423
|
+
_fs;
|
|
424
|
+
_run;
|
|
425
|
+
_deploy;
|
|
426
|
+
_release;
|
|
427
|
+
_secrets;
|
|
428
|
+
_sdk;
|
|
429
|
+
_comments;
|
|
430
|
+
_remix;
|
|
431
|
+
_screenshot;
|
|
432
|
+
_user;
|
|
433
|
+
constructor(config) {
|
|
434
|
+
this.baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;
|
|
435
|
+
this.apiKey = config.apiKey;
|
|
436
|
+
}
|
|
437
|
+
get fs() {
|
|
438
|
+
return this._fs ??= new FsResource(this);
|
|
439
|
+
}
|
|
440
|
+
get run() {
|
|
441
|
+
return this._run ??= new RunResource(this);
|
|
442
|
+
}
|
|
443
|
+
get deploy() {
|
|
444
|
+
return this._deploy ??= new DeployResource(this);
|
|
445
|
+
}
|
|
446
|
+
get release() {
|
|
447
|
+
return this._release ??= new ReleaseResource(this);
|
|
448
|
+
}
|
|
449
|
+
get secrets() {
|
|
450
|
+
return this._secrets ??= new SecretsResource(this);
|
|
451
|
+
}
|
|
452
|
+
get sdk() {
|
|
453
|
+
return this._sdk ??= new SdkDocsResource(this);
|
|
454
|
+
}
|
|
455
|
+
get comments() {
|
|
456
|
+
return this._comments ??= new CommentsResource(this);
|
|
457
|
+
}
|
|
458
|
+
get remix() {
|
|
459
|
+
return this._remix ??= new RemixResource(this);
|
|
460
|
+
}
|
|
461
|
+
get screenshot() {
|
|
462
|
+
return this._screenshot ??= new ScreenshotResource(this);
|
|
463
|
+
}
|
|
464
|
+
get user() {
|
|
465
|
+
return this._user ??= new UserResource(this);
|
|
466
|
+
}
|
|
467
|
+
_requireAuth() {
|
|
468
|
+
if (!this.apiKey) {
|
|
469
|
+
throw new AlvaError(
|
|
470
|
+
"UNAUTHENTICATED",
|
|
471
|
+
"API key is required for this operation. Pass apiKey in the constructor.",
|
|
472
|
+
401
|
|
473
|
+
);
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
async _request(method, path, options) {
|
|
477
|
+
let url = `${this.baseUrl}${path}`;
|
|
478
|
+
if (options?.query) {
|
|
479
|
+
const params = new URLSearchParams();
|
|
480
|
+
for (const [key, value] of Object.entries(options.query)) {
|
|
481
|
+
if (value !== void 0 && value !== null) {
|
|
482
|
+
params.set(key, String(value));
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
const qs = params.toString();
|
|
486
|
+
if (qs) {
|
|
487
|
+
url += `?${qs}`;
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
const headers = {};
|
|
491
|
+
if (this.apiKey) {
|
|
492
|
+
headers["X-Alva-Api-Key"] = this.apiKey;
|
|
493
|
+
}
|
|
494
|
+
let fetchBody;
|
|
495
|
+
if (options?.rawBody !== void 0) {
|
|
496
|
+
headers["Content-Type"] = "application/octet-stream";
|
|
497
|
+
fetchBody = options.rawBody;
|
|
498
|
+
} else if (options?.body !== void 0) {
|
|
499
|
+
headers["Content-Type"] = "application/json";
|
|
500
|
+
fetchBody = JSON.stringify(options.body);
|
|
501
|
+
}
|
|
502
|
+
let response;
|
|
503
|
+
try {
|
|
504
|
+
response = await fetch(url, {
|
|
505
|
+
method,
|
|
506
|
+
headers,
|
|
507
|
+
body: fetchBody
|
|
508
|
+
});
|
|
509
|
+
} catch (err) {
|
|
510
|
+
throw new AlvaError(
|
|
511
|
+
"NETWORK_ERROR",
|
|
512
|
+
err instanceof Error ? err.message : "Network request failed",
|
|
513
|
+
0
|
|
514
|
+
);
|
|
515
|
+
}
|
|
516
|
+
if (!response.ok) {
|
|
517
|
+
const bodyText = await response.text().catch(() => "");
|
|
518
|
+
const contentType2 = response.headers.get("content-type") ?? "";
|
|
519
|
+
if (contentType2.includes("application/json") && bodyText) {
|
|
520
|
+
try {
|
|
521
|
+
const data = JSON.parse(bodyText);
|
|
522
|
+
if (data.error) {
|
|
523
|
+
throw new AlvaError(
|
|
524
|
+
data.error.code ?? "UNKNOWN",
|
|
525
|
+
data.error.message ?? `HTTP ${response.status}`,
|
|
526
|
+
response.status
|
|
527
|
+
);
|
|
528
|
+
}
|
|
529
|
+
} catch (e) {
|
|
530
|
+
if (e instanceof AlvaError) throw e;
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
throw new AlvaError(
|
|
534
|
+
"UNKNOWN",
|
|
535
|
+
`HTTP ${response.status}: ${bodyText.slice(0, 200)}`,
|
|
536
|
+
response.status
|
|
537
|
+
);
|
|
538
|
+
}
|
|
539
|
+
if (response.status === 204) {
|
|
540
|
+
return void 0;
|
|
541
|
+
}
|
|
542
|
+
const contentType = response.headers.get("content-type") ?? "";
|
|
543
|
+
if (contentType.includes("application/octet-stream") || contentType.includes("image/")) {
|
|
544
|
+
return response.arrayBuffer();
|
|
545
|
+
}
|
|
546
|
+
return response.json();
|
|
547
|
+
}
|
|
548
|
+
};
|
|
549
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
550
|
+
0 && (module.exports = {
|
|
551
|
+
AlvaClient,
|
|
552
|
+
AlvaError
|
|
553
|
+
});
|
|
554
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/error.ts","../src/resources/fs.ts","../src/resources/run.ts","../src/resources/deploy.ts","../src/resources/release.ts","../src/resources/secrets.ts","../src/resources/sdkDocs.ts","../src/resources/comments.ts","../src/resources/remix.ts","../src/resources/screenshot.ts","../src/resources/user.ts","../src/client.ts"],"sourcesContent":["export { AlvaClient } from './client.js';\nexport { AlvaError } from './error.js';\nexport type {\n AlvaClientConfig,\n UserProfile,\n FsReadParams,\n FsWriteParams,\n FsRawWriteParams,\n FsWriteResponse,\n FsStat,\n FsReaddirParams,\n FsEntry,\n FsReaddirResponse,\n FsMkdirParams,\n FsRemoveParams,\n FsRenameParams,\n FsCopyParams,\n FsSymlinkParams,\n FsReadlinkParams,\n FsChmodParams,\n FsGrantParams,\n FsRevokeParams,\n RunRequest,\n RunResponse,\n CronjobCreateRequest,\n Cronjob,\n CronjobListParams,\n CronjobListResponse,\n CronjobUpdateRequest,\n FeedReleaseRequest,\n FeedReleaseResponse,\n PlaybookDraftRequest,\n PlaybookDraftResponse,\n PlaybookReleaseRequest,\n PlaybookReleaseResponse,\n CreateSecretRequest,\n SecretMetadata,\n Secret,\n ModuleDoc,\n PartitionsResponse,\n PartitionSummaryResponse,\n CreateCommentRequest,\n Comment,\n RemixRequest,\n ScreenshotParams,\n} from './types.js';\n","export class AlvaError extends Error {\n readonly code: string;\n readonly status: number;\n\n constructor(code: string, message: string, status: number) {\n super(message);\n this.name = 'AlvaError';\n this.code = code;\n this.status = status;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n FsReadParams,\n FsWriteParams,\n FsRawWriteParams,\n FsWriteResponse,\n FsStat,\n FsReaddirParams,\n FsReaddirResponse,\n FsMkdirParams,\n FsRemoveParams,\n FsRenameParams,\n FsCopyParams,\n FsSymlinkParams,\n FsReadlinkParams,\n FsChmodParams,\n FsGrantParams,\n FsRevokeParams,\n} from '../types.js';\n\nexport class FsResource {\n constructor(private client: AlvaClient) {}\n\n /** Returns `ArrayBuffer` for binary files, or parsed JSON for time-series virtual paths. */\n async read(params: FsReadParams): Promise<ArrayBuffer | unknown> {\n return this.client._request('GET', '/api/v1/fs/read', {\n query: { path: params.path, offset: params.offset, size: params.size },\n });\n }\n\n /** Write file using JSON body (Mode 2). For text content. */\n async write(params: FsWriteParams): Promise<FsWriteResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/fs/write', {\n body: {\n path: params.path,\n data: params.data,\n mkdir_parents: params.mkdir_parents,\n },\n }) as Promise<FsWriteResponse>;\n }\n\n /** Write file using raw body (Mode 1). Supports binary data. Path and options are query params. */\n async rawWrite(params: FsRawWriteParams): Promise<FsWriteResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/fs/write', {\n query: {\n path: params.path,\n mkdir_parents: params.mkdir_parents,\n },\n rawBody: params.body,\n }) as Promise<FsWriteResponse>;\n }\n\n async stat(params: { path: string }): Promise<FsStat> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/fs/stat', {\n query: { path: params.path },\n }) as Promise<FsStat>;\n }\n\n async readdir(params: FsReaddirParams): Promise<FsReaddirResponse> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/fs/readdir', {\n query: { path: params.path, recursive: params.recursive },\n }) as Promise<FsReaddirResponse>;\n }\n\n async mkdir(params: FsMkdirParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/mkdir', {\n body: { path: params.path },\n });\n }\n\n async remove(params: FsRemoveParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('DELETE', '/api/v1/fs/remove', {\n query: { path: params.path, recursive: params.recursive },\n });\n }\n\n async rename(params: FsRenameParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/rename', {\n body: { old_path: params.old_path, new_path: params.new_path },\n });\n }\n\n async copy(params: FsCopyParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/copy', {\n body: { src_path: params.src_path, dst_path: params.dst_path },\n });\n }\n\n async symlink(params: FsSymlinkParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/symlink', {\n body: {\n target_path: params.target_path,\n link_path: params.link_path,\n },\n });\n }\n\n async readlink(params: FsReadlinkParams): Promise<{ target: string }> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/fs/readlink', {\n query: { path: params.path },\n }) as Promise<{ target: string }>;\n }\n\n async chmod(params: FsChmodParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/chmod', {\n body: { path: params.path, mode: params.mode },\n });\n }\n\n async grant(params: FsGrantParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/grant', {\n body: {\n path: params.path,\n subject: params.subject,\n permission: params.permission,\n },\n });\n }\n\n async revoke(params: FsRevokeParams): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/fs/revoke', {\n body: {\n path: params.path,\n subject: params.subject,\n permission: params.permission,\n },\n });\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { RunRequest, RunResponse } from '../types.js';\n\nexport class RunResource {\n constructor(private client: AlvaClient) {}\n\n async execute(params: RunRequest): Promise<RunResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/run', {\n body: {\n code: params.code,\n entry_path: params.entry_path,\n working_dir: params.working_dir,\n args: params.args,\n },\n }) as Promise<RunResponse>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n CronjobCreateRequest,\n Cronjob,\n CronjobListParams,\n CronjobListResponse,\n CronjobUpdateRequest,\n} from '../types.js';\n\nexport class DeployResource {\n constructor(private client: AlvaClient) {}\n\n async create(params: CronjobCreateRequest): Promise<Cronjob> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/deploy/cronjob', {\n body: {\n name: params.name,\n path: params.path,\n cron_expression: params.cron_expression,\n args: params.args,\n push_notify: params.push_notify,\n },\n }) as Promise<Cronjob>;\n }\n\n async list(params?: CronjobListParams): Promise<CronjobListResponse> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/deploy/cronjobs', {\n query: { limit: params?.limit, cursor: params?.cursor },\n }) as Promise<CronjobListResponse>;\n }\n\n async get(params: { id: number }): Promise<Cronjob> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n `/api/v1/deploy/cronjob/${params.id}`\n ) as Promise<Cronjob>;\n }\n\n async update(params: CronjobUpdateRequest): Promise<Cronjob> {\n this.client._requireAuth();\n const { id, ...body } = params;\n return this.client._request('PATCH', `/api/v1/deploy/cronjob/${id}`, {\n body,\n }) as Promise<Cronjob>;\n }\n\n async delete(params: { id: number }): Promise<void> {\n this.client._requireAuth();\n await this.client._request('DELETE', `/api/v1/deploy/cronjob/${params.id}`);\n }\n\n async pause(params: { id: number }): Promise<void> {\n this.client._requireAuth();\n await this.client._request(\n 'POST',\n `/api/v1/deploy/cronjob/${params.id}/pause`\n );\n }\n\n async resume(params: { id: number }): Promise<void> {\n this.client._requireAuth();\n await this.client._request(\n 'POST',\n `/api/v1/deploy/cronjob/${params.id}/resume`\n );\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n FeedReleaseRequest,\n FeedReleaseResponse,\n PlaybookDraftRequest,\n PlaybookDraftResponse,\n PlaybookReleaseRequest,\n PlaybookReleaseResponse,\n} from '../types.js';\n\nexport class ReleaseResource {\n constructor(private client: AlvaClient) {}\n\n async feed(params: FeedReleaseRequest): Promise<FeedReleaseResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/release/feed', {\n body: {\n name: params.name,\n version: params.version,\n cronjob_id: params.cronjob_id,\n view_json: params.view_json,\n description: params.description,\n },\n }) as Promise<FeedReleaseResponse>;\n }\n\n async playbookDraft(\n params: PlaybookDraftRequest\n ): Promise<PlaybookDraftResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/draft/playbook', {\n body: {\n name: params.name,\n display_name: params.display_name,\n description: params.description,\n feeds: params.feeds,\n trading_symbols: params.trading_symbols,\n },\n }) as Promise<PlaybookDraftResponse>;\n }\n\n async playbook(\n params: PlaybookReleaseRequest\n ): Promise<PlaybookReleaseResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/release/playbook', {\n body: {\n name: params.name,\n version: params.version,\n feeds: params.feeds,\n changelog: params.changelog,\n },\n }) as Promise<PlaybookReleaseResponse>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { CreateSecretRequest, Secret, SecretMetadata } from '../types.js';\n\nexport class SecretsResource {\n constructor(private client: AlvaClient) {}\n\n async create(params: CreateSecretRequest): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/secrets', {\n body: { name: params.name, value: params.value },\n });\n }\n\n async list(): Promise<{ secrets: SecretMetadata[] }> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/secrets') as Promise<{\n secrets: SecretMetadata[];\n }>;\n }\n\n async get(params: { name: string }): Promise<Secret> {\n this.client._requireAuth();\n const encoded = encodeURIComponent(params.name);\n return this.client._request(\n 'GET',\n `/api/v1/secrets/${encoded}`\n ) as Promise<Secret>;\n }\n\n async update(params: { name: string; value: string }): Promise<void> {\n this.client._requireAuth();\n const encoded = encodeURIComponent(params.name);\n await this.client._request('PUT', `/api/v1/secrets/${encoded}`, {\n body: { value: params.value },\n });\n }\n\n async delete(params: { name: string }): Promise<void> {\n this.client._requireAuth();\n const encoded = encodeURIComponent(params.name);\n await this.client._request('DELETE', `/api/v1/secrets/${encoded}`);\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n ModuleDoc,\n PartitionsResponse,\n PartitionSummaryResponse,\n} from '../types.js';\n\nexport class SdkDocsResource {\n constructor(private client: AlvaClient) {}\n\n async doc(params: { name: string }): Promise<ModuleDoc> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/sdk/doc', {\n query: { name: params.name },\n }) as Promise<ModuleDoc>;\n }\n\n async partitions(): Promise<PartitionsResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n '/api/v1/sdk/partitions'\n ) as Promise<PartitionsResponse>;\n }\n\n async partitionSummary(params: {\n partition: string;\n }): Promise<PartitionSummaryResponse> {\n this.client._requireAuth();\n const encoded = encodeURIComponent(params.partition);\n return this.client._request(\n 'GET',\n `/api/v1/sdk/partitions/${encoded}/summary`\n ) as Promise<PartitionSummaryResponse>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { CreateCommentRequest, Comment } from '../types.js';\n\nexport class CommentsResource {\n constructor(private client: AlvaClient) {}\n\n async create(params: CreateCommentRequest): Promise<Comment> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/playbook/comment', {\n body: {\n username: params.username,\n name: params.name,\n content: params.content,\n parent_id: params.parent_id,\n },\n }) as Promise<Comment>;\n }\n\n async pin(params: { comment_id: number }): Promise<Comment> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/playbook/comment/pin', {\n body: { comment_id: params.comment_id },\n }) as Promise<Comment>;\n }\n\n async unpin(params: { comment_id: number }): Promise<Comment> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/playbook/comment/unpin', {\n body: { comment_id: params.comment_id },\n }) as Promise<Comment>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { RemixRequest } from '../types.js';\n\nexport class RemixResource {\n constructor(private client: AlvaClient) {}\n\n async save(params: RemixRequest): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/remix', {\n body: {\n child: params.child,\n parents: params.parents,\n },\n });\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { ScreenshotParams } from '../types.js';\n\nexport class ScreenshotResource {\n constructor(private client: AlvaClient) {}\n\n async capture(params: ScreenshotParams): Promise<ArrayBuffer> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/screenshot', {\n query: {\n url: params.url,\n selector: params.selector,\n xpath: params.xpath,\n },\n }) as Promise<ArrayBuffer>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { UserProfile } from '../types.js';\n\nexport class UserResource {\n constructor(private client: AlvaClient) {}\n\n async me(): Promise<UserProfile> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/me') as Promise<UserProfile>;\n }\n}\n","import { AlvaError } from './error.js';\nimport type { AlvaClientConfig } from './types.js';\nimport { FsResource } from './resources/fs.js';\nimport { RunResource } from './resources/run.js';\nimport { DeployResource } from './resources/deploy.js';\nimport { ReleaseResource } from './resources/release.js';\nimport { SecretsResource } from './resources/secrets.js';\nimport { SdkDocsResource } from './resources/sdkDocs.js';\nimport { CommentsResource } from './resources/comments.js';\nimport { RemixResource } from './resources/remix.js';\nimport { ScreenshotResource } from './resources/screenshot.js';\nimport { UserResource } from './resources/user.js';\n\nconst DEFAULT_BASE_URL = 'https://api-llm.prd.alva.ai';\n\ninterface RequestOptions {\n query?: Record<string, unknown>;\n body?: unknown;\n /** Send raw body with application/octet-stream content type (for binary writes). */\n rawBody?: BodyInit;\n}\n\nexport class AlvaClient {\n readonly baseUrl: string;\n readonly apiKey?: string;\n\n private _fs?: FsResource;\n private _run?: RunResource;\n private _deploy?: DeployResource;\n private _release?: ReleaseResource;\n private _secrets?: SecretsResource;\n private _sdk?: SdkDocsResource;\n private _comments?: CommentsResource;\n private _remix?: RemixResource;\n private _screenshot?: ScreenshotResource;\n private _user?: UserResource;\n\n constructor(config: AlvaClientConfig) {\n this.baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n this.apiKey = config.apiKey;\n }\n\n get fs(): FsResource {\n return (this._fs ??= new FsResource(this));\n }\n get run(): RunResource {\n return (this._run ??= new RunResource(this));\n }\n get deploy(): DeployResource {\n return (this._deploy ??= new DeployResource(this));\n }\n get release(): ReleaseResource {\n return (this._release ??= new ReleaseResource(this));\n }\n get secrets(): SecretsResource {\n return (this._secrets ??= new SecretsResource(this));\n }\n get sdk(): SdkDocsResource {\n return (this._sdk ??= new SdkDocsResource(this));\n }\n get comments(): CommentsResource {\n return (this._comments ??= new CommentsResource(this));\n }\n get remix(): RemixResource {\n return (this._remix ??= new RemixResource(this));\n }\n get screenshot(): ScreenshotResource {\n return (this._screenshot ??= new ScreenshotResource(this));\n }\n get user(): UserResource {\n return (this._user ??= new UserResource(this));\n }\n\n _requireAuth(): void {\n if (!this.apiKey) {\n throw new AlvaError(\n 'UNAUTHENTICATED',\n 'API key is required for this operation. Pass apiKey in the constructor.',\n 401\n );\n }\n }\n\n async _request(\n method: string,\n path: string,\n options?: RequestOptions\n ): Promise<unknown> {\n let url = `${this.baseUrl}${path}`;\n\n if (options?.query) {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(options.query)) {\n if (value !== undefined && value !== null) {\n params.set(key, String(value));\n }\n }\n const qs = params.toString();\n if (qs) {\n url += `?${qs}`;\n }\n }\n\n const headers: Record<string, string> = {};\n if (this.apiKey) {\n headers['X-Alva-Api-Key'] = this.apiKey;\n }\n\n let fetchBody: BodyInit | undefined;\n if (options?.rawBody !== undefined) {\n headers['Content-Type'] = 'application/octet-stream';\n fetchBody = options.rawBody;\n } else if (options?.body !== undefined) {\n headers['Content-Type'] = 'application/json';\n fetchBody = JSON.stringify(options.body);\n }\n\n let response: Response;\n try {\n response = await fetch(url, {\n method,\n headers,\n body: fetchBody,\n });\n } catch (err) {\n throw new AlvaError(\n 'NETWORK_ERROR',\n err instanceof Error ? err.message : 'Network request failed',\n 0\n );\n }\n\n if (!response.ok) {\n // Read body as text first to avoid double consumption\n const bodyText = await response.text().catch(() => '');\n const contentType = response.headers.get('content-type') ?? '';\n if (contentType.includes('application/json') && bodyText) {\n try {\n const data = JSON.parse(bodyText) as {\n error?: { code?: string; message?: string };\n };\n if (data.error) {\n throw new AlvaError(\n data.error.code ?? 'UNKNOWN',\n data.error.message ?? `HTTP ${response.status}`,\n response.status\n );\n }\n } catch (e) {\n if (e instanceof AlvaError) throw e;\n // JSON parse failed or no error envelope — fall through\n }\n }\n throw new AlvaError(\n 'UNKNOWN',\n `HTTP ${response.status}: ${bodyText.slice(0, 200)}`,\n response.status\n );\n }\n\n // Handle 204 No Content and empty responses\n if (response.status === 204) {\n return undefined;\n }\n\n const contentType = response.headers.get('content-type') ?? '';\n if (\n contentType.includes('application/octet-stream') ||\n contentType.includes('image/')\n ) {\n return response.arrayBuffer();\n }\n\n return response.json();\n }\n}\n"],"mappings":"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","names":["contentType"]}
|