@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/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Alva AI
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# @alva-ai/toolkit
|
|
2
|
+
|
|
3
|
+
Alva REST API SDK and CLI for Node.js and the browser.
|
|
4
|
+
|
|
5
|
+
- **CLI** — manage config, call any Alva API from your terminal
|
|
6
|
+
- **SDK** — typed TypeScript/JavaScript client for Node.js
|
|
7
|
+
- **Browser** — drop a `<script>` tag into plain HTML, no build step needed
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install @alva-ai/toolkit
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Or install globally for the CLI:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install -g @alva-ai/toolkit
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## CLI Quick Start
|
|
22
|
+
|
|
23
|
+
Configure your API key (get one at [alva.ai](https://alva.ai)):
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
alva configure --api-key alva_your_key_here
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
This writes your credentials to `~/.config/alva/config.json`.
|
|
30
|
+
|
|
31
|
+
Now use any command:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# List your files
|
|
35
|
+
alva fs readdir --path /
|
|
36
|
+
|
|
37
|
+
# Run code
|
|
38
|
+
alva run --code 'return 1 + 1'
|
|
39
|
+
|
|
40
|
+
# Manage cronjobs
|
|
41
|
+
alva deploy list
|
|
42
|
+
|
|
43
|
+
# Manage secrets
|
|
44
|
+
alva secrets list
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
All output is JSON for easy piping:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
alva fs readdir --path / | jq '.entries[].name'
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Config Resolution
|
|
54
|
+
|
|
55
|
+
The CLI resolves config in this order:
|
|
56
|
+
|
|
57
|
+
1. `--api-key` / `--base-url` flags
|
|
58
|
+
2. `ALVA_API_KEY` / `ALVA_ENDPOINT` environment variables
|
|
59
|
+
3. `~/.config/alva/config.json` (or `$XDG_CONFIG_HOME/alva/config.json`)
|
|
60
|
+
|
|
61
|
+
## SDK Usage (Node.js)
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
import { AlvaClient } from '@alva-ai/toolkit';
|
|
65
|
+
|
|
66
|
+
const client = new AlvaClient({ apiKey: 'alva_your_key_here' });
|
|
67
|
+
|
|
68
|
+
// List files
|
|
69
|
+
const entries = await client.fs.readdir({ path: '/' });
|
|
70
|
+
|
|
71
|
+
// Run code
|
|
72
|
+
const result = await client.run.execute({ code: 'return 1 + 1' });
|
|
73
|
+
|
|
74
|
+
// Manage cronjobs
|
|
75
|
+
const jobs = await client.deploy.list();
|
|
76
|
+
|
|
77
|
+
// Manage secrets
|
|
78
|
+
const secrets = await client.secrets.list();
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Browser Usage
|
|
82
|
+
|
|
83
|
+
Add the browser bundle via a CDN:
|
|
84
|
+
|
|
85
|
+
```html
|
|
86
|
+
<script src="https://unpkg.com/@alva-ai/toolkit/dist/browser.global.js"></script>
|
|
87
|
+
<script>
|
|
88
|
+
const client = new AlvaToolkit.AlvaClient({
|
|
89
|
+
apiKey: 'alva_your_key_here',
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
client.fs.readdir({ path: '/' }).then((entries) => {
|
|
93
|
+
console.log(entries);
|
|
94
|
+
});
|
|
95
|
+
</script>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
> **Note:** The Alva API must have CORS headers configured for browser requests to work from your origin.
|
|
99
|
+
|
|
100
|
+
## API Reference
|
|
101
|
+
|
|
102
|
+
### Resources
|
|
103
|
+
|
|
104
|
+
| Resource | Methods |
|
|
105
|
+
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
106
|
+
| `client.user` | `me()` |
|
|
107
|
+
| `client.fs` | `read()`, `write()`, `rawWrite()`, `stat()`, `readdir()`, `mkdir()`, `remove()`, `rename()`, `copy()`, `symlink()`, `readlink()`, `chmod()`, `grant()`, `revoke()` |
|
|
108
|
+
| `client.run` | `execute()` |
|
|
109
|
+
| `client.deploy` | `create()`, `list()`, `get()`, `update()`, `delete()`, `pause()`, `resume()` |
|
|
110
|
+
| `client.release` | `feed()`, `playbookDraft()`, `playbook()` |
|
|
111
|
+
| `client.secrets` | `create()`, `list()`, `get()`, `update()`, `delete()` |
|
|
112
|
+
| `client.sdk` | `doc()`, `partitions()`, `partitionSummary()` |
|
|
113
|
+
| `client.comments` | `create()`, `pin()`, `unpin()` |
|
|
114
|
+
| `client.remix` | `save()` |
|
|
115
|
+
| `client.screenshot` | `capture()` |
|
|
116
|
+
|
|
117
|
+
### Error Handling
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
import { AlvaClient, AlvaError } from '@alva-ai/toolkit';
|
|
121
|
+
|
|
122
|
+
try {
|
|
123
|
+
await client.fs.read({ path: '/nonexistent' });
|
|
124
|
+
} catch (err) {
|
|
125
|
+
if (err instanceof AlvaError) {
|
|
126
|
+
console.error(err.code); // 'NOT_FOUND'
|
|
127
|
+
console.error(err.status); // 404
|
|
128
|
+
console.error(err.message); // 'File not found'
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## CLI Commands
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
alva configure --api-key <key> [--base-url <url>]
|
|
137
|
+
alva user me
|
|
138
|
+
alva fs <read|write|stat|readdir|mkdir|remove|rename|copy|symlink|readlink|chmod|grant|revoke>
|
|
139
|
+
alva run --code <code> [--entry-path <path>] [--working-dir <dir>] [--args <json>]
|
|
140
|
+
alva deploy <create|list|get|update|delete|pause|resume>
|
|
141
|
+
alva release <feed|playbook-draft|playbook>
|
|
142
|
+
alva secrets <create|list|get|update|delete>
|
|
143
|
+
alva sdk <doc|partitions|partition-summary>
|
|
144
|
+
alva comments <create|pin|unpin>
|
|
145
|
+
alva remix --child-username <u> --child-name <n> --parents <json>
|
|
146
|
+
alva screenshot --url <url> [--selector <s>] [--xpath <x>] --out <file>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Contributing
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
git clone https://github.com/alva-ai/toolkit-ts.git
|
|
153
|
+
cd toolkit-ts
|
|
154
|
+
npm install
|
|
155
|
+
npm test
|
|
156
|
+
npm run build
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## License
|
|
160
|
+
|
|
161
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var AlvaToolkit=(()=>{var A=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var j=Object.prototype.hasOwnProperty;var w=(t,e)=>{for(var s in e)A(t,s,{get:e[s],enumerable:!0})},S=(t,e,s,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of g(e))!j.call(t,a)&&a!==s&&A(t,a,{get:()=>e[a],enumerable:!(r=F(e,a))||r.enumerable});return t};var T=t=>S(A({},"__esModule",{value:!0}),t);var E={};w(E,{AlvaClient:()=>q,AlvaError:()=>o});var o=class extends Error{code;status;constructor(e,s,r){super(s),this.name="AlvaError",this.code=e,this.status=r}};var m=class{constructor(e){this.client=e}client;async read(e){return this.client._request("GET","/api/v1/fs/read",{query:{path:e.path,offset:e.offset,size:e.size}})}async write(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/fs/write",{body:{path:e.path,data:e.data,mkdir_parents:e.mkdir_parents}})}async rawWrite(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/fs/write",{query:{path:e.path,mkdir_parents:e.mkdir_parents},rawBody:e.body})}async stat(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/fs/stat",{query:{path:e.path}})}async readdir(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/fs/readdir",{query:{path:e.path,recursive:e.recursive}})}async mkdir(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/mkdir",{body:{path:e.path}})}async remove(e){this.client._requireAuth(),await this.client._request("DELETE","/api/v1/fs/remove",{query:{path:e.path,recursive:e.recursive}})}async rename(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/rename",{body:{old_path:e.old_path,new_path:e.new_path}})}async copy(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/copy",{body:{src_path:e.src_path,dst_path:e.dst_path}})}async symlink(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/symlink",{body:{target_path:e.target_path,link_path:e.link_path}})}async readlink(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/fs/readlink",{query:{path:e.path}})}async chmod(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/chmod",{body:{path:e.path,mode:e.mode}})}async grant(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/grant",{body:{path:e.path,subject:e.subject,permission:e.permission}})}async revoke(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/fs/revoke",{body:{path:e.path,subject:e.subject,permission:e.permission}})}};var l=class{constructor(e){this.client=e}client;async execute(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/run",{body:{code:e.code,entry_path:e.entry_path,working_dir:e.working_dir,args:e.args}})}};var p=class{constructor(e){this.client=e}client;async create(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/deploy/cronjob",{body:{name:e.name,path:e.path,cron_expression:e.cron_expression,args:e.args,push_notify:e.push_notify}})}async list(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/deploy/cronjobs",{query:{limit:e?.limit,cursor:e?.cursor}})}async get(e){return this.client._requireAuth(),this.client._request("GET",`/api/v1/deploy/cronjob/${e.id}`)}async update(e){this.client._requireAuth();let{id:s,...r}=e;return this.client._request("PATCH",`/api/v1/deploy/cronjob/${s}`,{body:r})}async delete(e){this.client._requireAuth(),await this.client._request("DELETE",`/api/v1/deploy/cronjob/${e.id}`)}async pause(e){this.client._requireAuth(),await this.client._request("POST",`/api/v1/deploy/cronjob/${e.id}/pause`)}async resume(e){this.client._requireAuth(),await this.client._request("POST",`/api/v1/deploy/cronjob/${e.id}/resume`)}};var d=class{constructor(e){this.client=e}client;async feed(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/release/feed",{body:{name:e.name,version:e.version,cronjob_id:e.cronjob_id,view_json:e.view_json,description:e.description}})}async playbookDraft(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/draft/playbook",{body:{name:e.name,display_name:e.display_name,description:e.description,feeds:e.feeds,trading_symbols:e.trading_symbols}})}async playbook(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/release/playbook",{body:{name:e.name,version:e.version,feeds:e.feeds,changelog:e.changelog}})}};var h=class{constructor(e){this.client=e}client;async create(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/secrets",{body:{name:e.name,value:e.value}})}async list(){return this.client._requireAuth(),this.client._request("GET","/api/v1/secrets")}async get(e){this.client._requireAuth();let s=encodeURIComponent(e.name);return this.client._request("GET",`/api/v1/secrets/${s}`)}async update(e){this.client._requireAuth();let s=encodeURIComponent(e.name);await this.client._request("PUT",`/api/v1/secrets/${s}`,{body:{value:e.value}})}async delete(e){this.client._requireAuth();let s=encodeURIComponent(e.name);await this.client._request("DELETE",`/api/v1/secrets/${s}`)}};var y=class{constructor(e){this.client=e}client;async doc(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/sdk/doc",{query:{name:e.name}})}async partitions(){return this.client._requireAuth(),this.client._request("GET","/api/v1/sdk/partitions")}async partitionSummary(e){this.client._requireAuth();let s=encodeURIComponent(e.partition);return this.client._request("GET",`/api/v1/sdk/partitions/${s}/summary`)}};var P=class{constructor(e){this.client=e}client;async create(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/playbook/comment",{body:{username:e.username,name:e.name,content:e.content,parent_id:e.parent_id}})}async pin(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/playbook/comment/pin",{body:{comment_id:e.comment_id}})}async unpin(e){return this.client._requireAuth(),this.client._request("POST","/api/v1/playbook/comment/unpin",{body:{comment_id:e.comment_id}})}};var R=class{constructor(e){this.client=e}client;async save(e){this.client._requireAuth(),await this.client._request("POST","/api/v1/remix",{body:{child:e.child,parents:e.parents}})}};var _=class{constructor(e){this.client=e}client;async capture(e){return this.client._requireAuth(),this.client._request("GET","/api/v1/screenshot",{query:{url:e.url,selector:e.selector,xpath:e.xpath}})}};var v=class{constructor(e){this.client=e}client;async me(){return this.client._requireAuth(),this.client._request("GET","/api/v1/me")}};var x="https://api-llm.prd.alva.ai",q=class{baseUrl;apiKey;_fs;_run;_deploy;_release;_secrets;_sdk;_comments;_remix;_screenshot;_user;constructor(e){this.baseUrl=e.baseUrl??x,this.apiKey=e.apiKey}get fs(){return this._fs??=new m(this)}get run(){return this._run??=new l(this)}get deploy(){return this._deploy??=new p(this)}get release(){return this._release??=new d(this)}get secrets(){return this._secrets??=new h(this)}get sdk(){return this._sdk??=new y(this)}get comments(){return this._comments??=new P(this)}get remix(){return this._remix??=new R(this)}get screenshot(){return this._screenshot??=new _(this)}get user(){return this._user??=new v(this)}_requireAuth(){if(!this.apiKey)throw new o("UNAUTHENTICATED","API key is required for this operation. Pass apiKey in the constructor.",401)}async _request(e,s,r){let a=`${this.baseUrl}${s}`;if(r?.query){let n=new URLSearchParams;for(let[c,C]of Object.entries(r.query))C!=null&&n.set(c,String(C));let b=n.toString();b&&(a+=`?${b}`)}let u={};this.apiKey&&(u["X-Alva-Api-Key"]=this.apiKey);let f;r?.rawBody!==void 0?(u["Content-Type"]="application/octet-stream",f=r.rawBody):r?.body!==void 0&&(u["Content-Type"]="application/json",f=JSON.stringify(r.body));let i;try{i=await fetch(a,{method:e,headers:u,body:f})}catch(n){throw new o("NETWORK_ERROR",n instanceof Error?n.message:"Network request failed",0)}if(!i.ok){let n=await i.text().catch(()=>"");if((i.headers.get("content-type")??"").includes("application/json")&&n)try{let c=JSON.parse(n);if(c.error)throw new o(c.error.code??"UNKNOWN",c.error.message??`HTTP ${i.status}`,i.status)}catch(c){if(c instanceof o)throw c}throw new o("UNKNOWN",`HTTP ${i.status}: ${n.slice(0,200)}`,i.status)}if(i.status===204)return;let k=i.headers.get("content-type")??"";return k.includes("application/octet-stream")||k.includes("image/")?i.arrayBuffer():i.json()}};return T(E);})();
|
|
2
|
+
//# sourceMappingURL=browser.global.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/browser.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 * from './index.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":["browser_exports","__export","AlvaClient","AlvaError","AlvaError","code","message","status","FsResource","client","params","RunResource","client","params","DeployResource","client","params","id","body","ReleaseResource","client","params","SecretsResource","client","params","encoded","SdkDocsResource","client","params","encoded","CommentsResource","client","params","RemixResource","client","params","ScreenshotResource","client","params","UserResource","client","DEFAULT_BASE_URL","AlvaClient","config","FsResource","RunResource","DeployResource","ReleaseResource","SecretsResource","SdkDocsResource","CommentsResource","RemixResource","ScreenshotResource","UserResource","AlvaError","method","path","options","url","params","key","value","qs","headers","fetchBody","response","err","bodyText","data","e","contentType"]}
|