@alva-ai/toolkit 0.3.1 → 0.4.1

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/dist/index.d.ts CHANGED
@@ -9,6 +9,8 @@ interface UserProfile {
9
9
  username: string;
10
10
  subscription_tier: 'free' | 'pro';
11
11
  telegram_username: string | null;
12
+ /** Caller's alfs home directory, e.g. `/alva/home/<username>`. */
13
+ home_path: string;
12
14
  }
13
15
  type SubscriptionTier = 'SUBSCRIPTION_TIER_UNSPECIFIED' | 'SUBSCRIPTION_TIER_FREE' | 'SUBSCRIPTION_TIER_PRO';
14
16
  interface EnsureArraysJwtResponse {
@@ -181,11 +183,14 @@ interface FeedReleaseRequest {
181
183
  cronjob_id: number;
182
184
  view_json?: Record<string, unknown>;
183
185
  description?: string;
186
+ changelog?: string;
184
187
  }
185
188
  interface FeedReleaseResponse {
186
189
  feed_id: number;
187
190
  name: string;
188
191
  feed_major: number;
192
+ /** Canonical alfs path: `/alva/home/<username>/feeds/<name>`. */
193
+ feed_path: string;
189
194
  }
190
195
  interface PlaybookDraftRequest {
191
196
  name: string;
@@ -196,11 +201,12 @@ interface PlaybookDraftRequest {
196
201
  feed_major?: number;
197
202
  }>;
198
203
  trading_symbols?: string[];
199
- changelog?: string;
200
204
  }
201
205
  interface PlaybookDraftResponse {
202
206
  playbook_id: number;
203
207
  playbook_version_id: number;
208
+ /** Canonical alfs path: `/alva/home/<username>/playbooks/<name>`. */
209
+ playbook_path: string;
204
210
  }
205
211
  interface PlaybookReleaseRequest {
206
212
  name: string;
@@ -215,6 +221,8 @@ interface PlaybookReleaseResponse {
215
221
  playbook_id: number;
216
222
  version: string;
217
223
  published_url: string;
224
+ /** Canonical alfs path: `/alva/home/<username>/playbooks/<name>`. */
225
+ playbook_path: string;
218
226
  }
219
227
  interface CreateSecretRequest {
220
228
  name: string;
@@ -372,6 +380,100 @@ interface ExecuteSignalResult {
372
380
  orders: ExecuteSignalOrder[];
373
381
  error?: string;
374
382
  }
383
+ interface NotificationListParams {
384
+ username: string;
385
+ name: string;
386
+ channel?: string;
387
+ /** `sent` / `failed` / `filtered`. */
388
+ status?: string;
389
+ /** Unix seconds; only notifications newer than this. */
390
+ since_time?: number;
391
+ /** Page size, default 50, max 200. */
392
+ first?: number;
393
+ /** Opaque cursor token from previous page's `next_cursor`. */
394
+ cursor?: string;
395
+ }
396
+ interface NotificationEvent {
397
+ id: string;
398
+ event_type: string;
399
+ user_id: string;
400
+ channel: string;
401
+ /** `sent` / `failed` / `filtered`. */
402
+ status: string;
403
+ /** Unix seconds. */
404
+ created_at: number;
405
+ message?: string;
406
+ error_msg?: string;
407
+ /** Present when notification is playbook-scoped. */
408
+ playbook_id?: string;
409
+ /** Present when notification is feed-scoped. */
410
+ feed_id?: string;
411
+ }
412
+ interface PlaybookNotificationListResponse {
413
+ items: NotificationEvent[];
414
+ /** Empty when there is no next page. */
415
+ next_cursor: string;
416
+ /** Canonical alfs path: `/alva/home/<username>/playbooks/<name>`. */
417
+ playbook_path: string;
418
+ }
419
+ interface FeedNotificationListResponse {
420
+ items: NotificationEvent[];
421
+ next_cursor: string;
422
+ /** Canonical alfs path: `/alva/home/<username>/feeds/<name>`. */
423
+ feed_path: string;
424
+ }
425
+ /**
426
+ * Identifies the asset a personal push subscription is keyed to.
427
+ * `PLAYBOOK` is the only target supported today; `FEED` is reserved for
428
+ * a future phase where users can subscribe to a feed independent of any
429
+ * playbook that consumes it.
430
+ */
431
+ type PushTargetType = 'PLAYBOOK' | 'FEED' | 'UNSPECIFIED';
432
+ interface PushTarget {
433
+ type: PushTargetType;
434
+ /** Numeric id encoded as a string (matches the rest of the SDK). */
435
+ id: string;
436
+ }
437
+ interface PushSubscription {
438
+ target: PushTarget;
439
+ /**
440
+ * `true` when the row is currently active. `false` means the user
441
+ * previously subscribed and then unsubscribed; the row is preserved
442
+ * so re-subscribe restores seniority via UPSERT-revive. Only present
443
+ * when `include_history=true` is passed to `list`.
444
+ */
445
+ subscribed: boolean;
446
+ created_at_ms: number;
447
+ updated_at_ms: number;
448
+ }
449
+ interface PushSubscriptionPlaybookParams {
450
+ username: string;
451
+ name: string;
452
+ }
453
+ interface PushSubscriptionFeedParams {
454
+ username: string;
455
+ name: string;
456
+ }
457
+ interface PushSubscriptionListParams {
458
+ /** Default `false`. When `true`, include rows with `subscribed=false`. */
459
+ include_history?: boolean;
460
+ }
461
+ interface PushSubscriptionListResponse {
462
+ items: PushSubscription[];
463
+ }
464
+ interface SubscribePushTargetResponse {
465
+ subscription: PushSubscription;
466
+ /** Canonical alfs path: `/alva/home/<username>/playbooks/<name>`. */
467
+ playbook_path: string;
468
+ }
469
+ interface SubscribeFeedPushTargetResponse {
470
+ subscription: PushSubscription;
471
+ /** Canonical alfs path: `/alva/home/<username>/feeds/<name>`. */
472
+ feed_path: string;
473
+ }
474
+ interface UnsubscribePushTargetResponse {
475
+ ok: true;
476
+ }
375
477
 
376
478
  declare class FsResource {
377
479
  private client;
@@ -572,6 +674,70 @@ declare class ArraysJwtResource {
572
674
  status(): Promise<ArraysJwtStatusResponse>;
573
675
  }
574
676
 
677
+ declare class NotificationsResource {
678
+ private client;
679
+ constructor(client: AlvaClient);
680
+ /**
681
+ * List the caller's notification history for one playbook
682
+ * `(username, name)`. Returns `NOT_FOUND` when the playbook is
683
+ * private or does not exist (the two cases are deliberately
684
+ * indistinguishable to prevent namespace enumeration).
685
+ */
686
+ listPlaybook(params: NotificationListParams): Promise<PlaybookNotificationListResponse>;
687
+ /**
688
+ * List the caller's notification history for one feed
689
+ * `(username, name)`. Authorization is alfs read on
690
+ * `/alva/home/<username>/feeds/<name>`.
691
+ */
692
+ listFeed(params: NotificationListParams): Promise<FeedNotificationListResponse>;
693
+ }
694
+
695
+ /**
696
+ * Personal push subscriptions — opt the caller in or out of personal
697
+ * DM/web push for a target. Independent of social follow:
698
+ *
699
+ * - `subscribePlaybook` / `subscribeFeed` do not start following.
700
+ * - `unsubscribePlaybook` / `unsubscribeFeed` do not unfollow.
701
+ * - Following a playbook elsewhere will compound-subscribe automatically.
702
+ *
703
+ * Backed by alva-gateway REST (mirrors the GraphQL surface in
704
+ * `pkg/schema/push_subscription.graphql`).
705
+ */
706
+ declare class PushSubscriptionsResource {
707
+ private client;
708
+ constructor(client: AlvaClient);
709
+ /**
710
+ * Opt into personal push for one playbook `(username, name)`.
711
+ * Fires for any feed of that playbook. Idempotent. Auth: callers must
712
+ * be able to read the playbook (public/paid pass; private requires
713
+ * explicit alfs grant).
714
+ */
715
+ subscribePlaybook(params: PushSubscriptionPlaybookParams): Promise<SubscribePushTargetResponse>;
716
+ /**
717
+ * Soft-disable personal push for one playbook `(username, name)`.
718
+ * Does NOT remove any social follow. Idempotent.
719
+ */
720
+ unsubscribePlaybook(params: PushSubscriptionPlaybookParams): Promise<UnsubscribePushTargetResponse>;
721
+ /**
722
+ * Opt into personal push for one feed `(username, name)`. Fires for
723
+ * that specific feed regardless of which playbook(s) consume it; if
724
+ * the feed is shared across playbooks the subscriber receives one
725
+ * push per playbook context. Idempotent.
726
+ */
727
+ subscribeFeed(params: PushSubscriptionFeedParams): Promise<SubscribeFeedPushTargetResponse>;
728
+ /**
729
+ * Soft-disable personal push for one feed `(username, name)`.
730
+ * Idempotent.
731
+ */
732
+ unsubscribeFeed(params: PushSubscriptionFeedParams): Promise<UnsubscribePushTargetResponse>;
733
+ /**
734
+ * List the caller's personal push subscriptions across all targets
735
+ * (playbook + feed). Defaults to currently-active rows only; pass
736
+ * `include_history=true` to also return previously-unsubscribed rows.
737
+ */
738
+ list(params?: PushSubscriptionListParams): Promise<PushSubscriptionListResponse>;
739
+ }
740
+
575
741
  interface RequestOptions {
576
742
  query?: Record<string, unknown>;
577
743
  body?: unknown;
@@ -600,6 +766,8 @@ declare class AlvaClient {
600
766
  private _user?;
601
767
  private _trading?;
602
768
  private _arraysJwt?;
769
+ private _notifications?;
770
+ private _pushSubscriptions?;
603
771
  constructor(config: AlvaClientConfig);
604
772
  get fs(): FsResource;
605
773
  get run(): RunResource;
@@ -614,6 +782,8 @@ declare class AlvaClient {
614
782
  get user(): UserResource;
615
783
  get trading(): TradingResource;
616
784
  get arraysJwt(): ArraysJwtResource;
785
+ get notifications(): NotificationsResource;
786
+ get pushSubscriptions(): PushSubscriptionsResource;
617
787
  _requireAuth(): void;
618
788
  _request(method: string, path: string, options?: RequestOptions): Promise<unknown>;
619
789
  }
package/dist/index.js CHANGED
@@ -242,7 +242,8 @@ var ReleaseResource = class {
242
242
  version: params.version,
243
243
  cronjob_id: params.cronjob_id,
244
244
  view_json: params.view_json,
245
- description: params.description
245
+ description: params.description,
246
+ changelog: params.changelog
246
247
  }
247
248
  });
248
249
  }
@@ -254,8 +255,7 @@ var ReleaseResource = class {
254
255
  display_name: params.display_name,
255
256
  description: params.description,
256
257
  feeds: params.feeds,
257
- trading_symbols: params.trading_symbols,
258
- changelog: params.changelog
258
+ trading_symbols: params.trading_symbols
259
259
  }
260
260
  });
261
261
  }
@@ -567,6 +567,127 @@ var ArraysJwtResource = class {
567
567
  }
568
568
  };
569
569
 
570
+ // src/resources/notifications.ts
571
+ var NotificationsResource = class {
572
+ constructor(client) {
573
+ this.client = client;
574
+ }
575
+ client;
576
+ /**
577
+ * List the caller's notification history for one playbook
578
+ * `(username, name)`. Returns `NOT_FOUND` when the playbook is
579
+ * private or does not exist (the two cases are deliberately
580
+ * indistinguishable to prevent namespace enumeration).
581
+ */
582
+ async listPlaybook(params) {
583
+ this.client._requireAuth();
584
+ const path = `/api/v1/playbook/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/notifications`;
585
+ return this.client._request("GET", path, {
586
+ query: buildQuery(params)
587
+ });
588
+ }
589
+ /**
590
+ * List the caller's notification history for one feed
591
+ * `(username, name)`. Authorization is alfs read on
592
+ * `/alva/home/<username>/feeds/<name>`.
593
+ */
594
+ async listFeed(params) {
595
+ this.client._requireAuth();
596
+ const path = `/api/v1/feed/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/notifications`;
597
+ return this.client._request("GET", path, {
598
+ query: buildQuery(params)
599
+ });
600
+ }
601
+ };
602
+ function buildQuery(params) {
603
+ const q = {};
604
+ if (params.channel) q.channel = params.channel;
605
+ if (params.status) q.status = params.status;
606
+ if (params.since_time !== void 0 && params.since_time > 0) {
607
+ q.since_time = String(params.since_time);
608
+ }
609
+ if (params.first !== void 0 && params.first > 0) {
610
+ q.first = String(params.first);
611
+ }
612
+ if (params.cursor) q.cursor = params.cursor;
613
+ return q;
614
+ }
615
+
616
+ // src/resources/pushSubscriptions.ts
617
+ var PushSubscriptionsResource = class {
618
+ constructor(client) {
619
+ this.client = client;
620
+ }
621
+ client;
622
+ /**
623
+ * Opt into personal push for one playbook `(username, name)`.
624
+ * Fires for any feed of that playbook. Idempotent. Auth: callers must
625
+ * be able to read the playbook (public/paid pass; private requires
626
+ * explicit alfs grant).
627
+ */
628
+ async subscribePlaybook(params) {
629
+ this.client._requireAuth();
630
+ const path = `/api/v1/playbook/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/push-subscription`;
631
+ return this.client._request(
632
+ "POST",
633
+ path
634
+ );
635
+ }
636
+ /**
637
+ * Soft-disable personal push for one playbook `(username, name)`.
638
+ * Does NOT remove any social follow. Idempotent.
639
+ */
640
+ async unsubscribePlaybook(params) {
641
+ this.client._requireAuth();
642
+ const path = `/api/v1/playbook/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/push-subscription`;
643
+ return this.client._request(
644
+ "DELETE",
645
+ path
646
+ );
647
+ }
648
+ /**
649
+ * Opt into personal push for one feed `(username, name)`. Fires for
650
+ * that specific feed regardless of which playbook(s) consume it; if
651
+ * the feed is shared across playbooks the subscriber receives one
652
+ * push per playbook context. Idempotent.
653
+ */
654
+ async subscribeFeed(params) {
655
+ this.client._requireAuth();
656
+ const path = `/api/v1/feed/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/push-subscription`;
657
+ return this.client._request(
658
+ "POST",
659
+ path
660
+ );
661
+ }
662
+ /**
663
+ * Soft-disable personal push for one feed `(username, name)`.
664
+ * Idempotent.
665
+ */
666
+ async unsubscribeFeed(params) {
667
+ this.client._requireAuth();
668
+ const path = `/api/v1/feed/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/push-subscription`;
669
+ return this.client._request(
670
+ "DELETE",
671
+ path
672
+ );
673
+ }
674
+ /**
675
+ * List the caller's personal push subscriptions across all targets
676
+ * (playbook + feed). Defaults to currently-active rows only; pass
677
+ * `include_history=true` to also return previously-unsubscribed rows.
678
+ */
679
+ async list(params = {}) {
680
+ this.client._requireAuth();
681
+ const query = {};
682
+ if (params.include_history !== void 0) {
683
+ query.include_history = String(params.include_history);
684
+ }
685
+ return this.client._request("GET", "/api/v1/me/push-subscriptions", {
686
+ query
687
+ });
688
+ }
689
+ };
690
+
570
691
  // src/client.ts
571
692
  var DEFAULT_BASE_URL = "https://api-llm.prd.alva.ai";
572
693
  var DEFAULT_ARRAYS_BASE_URL = "https://data-tools.prd.space.id";
@@ -588,6 +709,8 @@ var AlvaClient = class {
588
709
  _user;
589
710
  _trading;
590
711
  _arraysJwt;
712
+ _notifications;
713
+ _pushSubscriptions;
591
714
  constructor(config) {
592
715
  this.baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;
593
716
  this.arraysBaseUrl = config.arraysBaseUrl ?? DEFAULT_ARRAYS_BASE_URL;
@@ -633,6 +756,12 @@ var AlvaClient = class {
633
756
  get arraysJwt() {
634
757
  return this._arraysJwt ??= new ArraysJwtResource(this);
635
758
  }
759
+ get notifications() {
760
+ return this._notifications ??= new NotificationsResource(this);
761
+ }
762
+ get pushSubscriptions() {
763
+ return this._pushSubscriptions ??= new PushSubscriptionsResource(this);
764
+ }
636
765
  _requireAuth() {
637
766
  if (!this.viewer_token && !this.apiKey) {
638
767
  throw new AlvaError(
@@ -722,7 +851,7 @@ var AlvaClient = class {
722
851
  };
723
852
 
724
853
  // src/index.ts
725
- var VERSION = true ? "0.3.1" : "dev";
854
+ var VERSION = true ? "0.4.1" : "dev";
726
855
  export {
727
856
  AlvaClient,
728
857
  AlvaError,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../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/skills.ts","../src/resources/comments.ts","../src/resources/remix.ts","../src/resources/screenshot.ts","../src/resources/user.ts","../src/resources/trading.ts","../src/resources/arraysJwt.ts","../src/client.ts","../src/index.ts"],"sourcesContent":["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\nexport class CliUsageError extends Error {\n readonly command?: string;\n\n constructor(message: string, command?: string) {\n super(message);\n this.name = 'CliUsageError';\n this.command = command;\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 const result = await this.client._request('GET', '/api/v1/fs/read', {\n query: { path: params.path, offset: params.offset, size: params.size },\n });\n if (!(result instanceof ArrayBuffer)) return result;\n try {\n const text = new TextDecoder('utf-8', { fatal: true }).decode(result);\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n } catch {\n return result;\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 CronjobRunsListParams,\n CronjobRunsListResponse,\n CronjobRunLogsResponse,\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 async listRuns(\n params: CronjobRunsListParams\n ): Promise<CronjobRunsListResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n `/api/v1/deploy/cronjob/${params.cronjob_id}/runs`,\n {\n query: { first: params.first, cursor: params.cursor },\n }\n ) as Promise<CronjobRunsListResponse>;\n }\n\n async getRunLogs(params: {\n cronjob_id: number;\n run_id: number;\n }): Promise<CronjobRunLogsResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n `/api/v1/deploy/cronjob/${params.cronjob_id}/runs/${params.run_id}/logs`\n ) as Promise<CronjobRunLogsResponse>;\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 changelog: params.changelog,\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';\n\ntype Envelope<T> = { success: boolean; data: T; request_id?: string };\n\nexport interface SkillSummary {\n name: string;\n description: string;\n}\n\nexport interface SkillDoc {\n name: string;\n description: string;\n content: string;\n}\n\nexport class SkillsResource {\n constructor(private client: AlvaClient) {}\n\n async list(): Promise<{ skills: SkillSummary[] }> {\n const res = (await this.client._request('GET', '/api/v1/skills', {\n baseUrl: this.client.arraysBaseUrl,\n noAuth: true,\n })) as Envelope<SkillSummary[]>;\n return { skills: res.data ?? [] };\n }\n\n async summary(params: { name: string }): Promise<SkillDoc> {\n const encoded = encodeURIComponent(params.name);\n const res = (await this.client._request(\n 'GET',\n `/api/v1/skills/${encoded}`,\n {\n baseUrl: this.client.arraysBaseUrl,\n noAuth: true,\n }\n )) as Envelope<SkillDoc[]>;\n const doc = res.data?.[0];\n if (!doc)\n throw new Error(`empty skills summary response for \"${params.name}\"`);\n return doc;\n }\n\n async endpoint(params: { name: string; file: string }): Promise<SkillDoc> {\n const encoded = encodeURIComponent(params.name);\n const res = (await this.client._request(\n 'GET',\n `/api/v1/skills/${encoded}`,\n {\n baseUrl: this.client.arraysBaseUrl,\n noAuth: true,\n query: { endpoint: params.file },\n }\n )) as Envelope<SkillDoc[]>;\n const doc = res.data?.[0];\n if (!doc) {\n throw new Error(\n `empty skills endpoint response for \"${params.name}\" file \"${params.file}\"`\n );\n }\n return doc;\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 type { AlvaClient } from '../client.js';\nimport type {\n TradingAccount,\n TradingPortfolio,\n TradingOrder,\n TradingSubscription,\n EquityPoint,\n TradingRiskRule,\n TradingRiskRuleInput,\n ExecuteSignalResult,\n} from '../types.js';\n\nexport class TradingResource {\n constructor(private client: AlvaClient) {}\n\n async accounts(): Promise<TradingAccount[]> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/accounts') as Promise<\n TradingAccount[]\n >;\n }\n\n async portfolio(accountId: string): Promise<TradingPortfolio> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/portfolio', {\n query: { accountId },\n }) as Promise<TradingPortfolio>;\n }\n\n async orders(params: {\n accountId: string;\n source?: string;\n since?: number;\n limit?: number;\n }): Promise<TradingOrder[]> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/orders', {\n query: {\n accountId: params.accountId,\n source: params.source,\n since: params.since,\n limit: params.limit,\n },\n }) as Promise<TradingOrder[]>;\n }\n\n async subscriptions(accountId: string): Promise<TradingSubscription[]> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/subscriptions', {\n query: { accountId },\n }) as Promise<TradingSubscription[]>;\n }\n\n async equityHistory(params: {\n accountId: string;\n timeframe?: string;\n sinceMs?: number;\n untilMs?: number;\n }): Promise<EquityPoint[]> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/equity-history', {\n query: {\n accountId: params.accountId,\n timeframe: params.timeframe,\n sinceMs: params.sinceMs,\n untilMs: params.untilMs,\n },\n }) as Promise<EquityPoint[]>;\n }\n\n async riskRules(): Promise<TradingRiskRule> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n '/api/v1/trading/risk-rules'\n ) as Promise<TradingRiskRule>;\n }\n\n async subscribe(params: {\n accountId: string;\n sourceUsername: string;\n sourceFeed: string;\n playbookId: string;\n playbookVersion: string;\n executeLatest?: boolean;\n }): Promise<TradingSubscription> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/trading/subscribe', {\n body: params,\n }) as Promise<TradingSubscription>;\n }\n\n async unsubscribe(\n subscriptionId: string\n ): Promise<{ unsubscribedId: string }> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/trading/unsubscribe', {\n body: { subscriptionId },\n }) as Promise<{ unsubscribedId: string }>;\n }\n\n async execute(params: {\n accountId: string;\n signalJson: string;\n dryRun: boolean;\n sourceUsername?: string;\n sourceFeed?: string;\n }): Promise<ExecuteSignalResult> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/trading/execute', {\n body: params,\n }) as Promise<ExecuteSignalResult>;\n }\n\n async updateRiskRules(rules: TradingRiskRuleInput): Promise<TradingRiskRule> {\n this.client._requireAuth();\n return this.client._request('PUT', '/api/v1/trading/risk-rules', {\n body: rules,\n }) as Promise<TradingRiskRule>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n EnsureArraysJwtResponse,\n ArraysJwtStatusResponse,\n} from '../types.js';\n\nexport class ArraysJwtResource {\n constructor(private client: AlvaClient) {}\n\n /** Idempotently sign-or-renew the Arrays JWT server-side. */\n async ensure(): Promise<EnsureArraysJwtResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'POST',\n '/api/v1/arrays-jwt/ensure'\n ) as Promise<EnsureArraysJwtResponse>;\n }\n\n /** Report the current Arrays JWT state for the authenticated user. */\n async status(): Promise<ArraysJwtStatusResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n '/api/v1/arrays-jwt/status'\n ) as Promise<ArraysJwtStatusResponse>;\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 { SkillsResource } from './resources/skills.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';\nimport { TradingResource } from './resources/trading.js';\nimport { ArraysJwtResource } from './resources/arraysJwt.js';\n\nconst DEFAULT_BASE_URL = 'https://api-llm.prd.alva.ai';\nexport const DEFAULT_ARRAYS_BASE_URL = 'https://data-tools.prd.space.id';\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 /** Override the base URL for this request (e.g. the Arrays data-tools endpoint). */\n baseUrl?: string;\n /** If true, skip attaching any Alva auth header (X-Alva-Api-Key / x-Playbook-Viewer). */\n noAuth?: boolean;\n}\n\nexport class AlvaClient {\n readonly baseUrl: string;\n readonly arraysBaseUrl: string;\n readonly viewer_token?: 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 _skills?: SkillsResource;\n private _comments?: CommentsResource;\n private _remix?: RemixResource;\n private _screenshot?: ScreenshotResource;\n private _user?: UserResource;\n private _trading?: TradingResource;\n private _arraysJwt?: ArraysJwtResource;\n\n constructor(config: AlvaClientConfig) {\n this.baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n this.arraysBaseUrl = config.arraysBaseUrl ?? DEFAULT_ARRAYS_BASE_URL;\n this.viewer_token = config.viewer_token;\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 skills(): SkillsResource {\n return (this._skills ??= new SkillsResource(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 get trading(): TradingResource {\n return (this._trading ??= new TradingResource(this));\n }\n get arraysJwt(): ArraysJwtResource {\n return (this._arraysJwt ??= new ArraysJwtResource(this));\n }\n\n _requireAuth(): void {\n if (!this.viewer_token && !this.apiKey) {\n throw new AlvaError(\n 'UNAUTHENTICATED',\n 'Authentication is required. Pass viewer_token or 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 const baseUrl = options?.baseUrl ?? this.baseUrl;\n let url = `${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 (!options?.noAuth) {\n if (this.viewer_token) {\n headers['x-Playbook-Viewer'] = this.viewer_token;\n } else if (this.apiKey) {\n headers['X-Alva-Api-Key'] = this.apiKey;\n }\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","declare const __VERSION__: string;\n\n/** SDK version, injected at build time from package.json. */\nexport const VERSION: string =\n typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'dev';\n\nexport { AlvaClient } from './client.js';\nexport { AlvaError } from './error.js';\nexport type {\n AlvaClientConfig,\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} from './types.js';\n"],"mappings":"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","names":["contentType"]}
1
+ {"version":3,"sources":["../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/skills.ts","../src/resources/comments.ts","../src/resources/remix.ts","../src/resources/screenshot.ts","../src/resources/user.ts","../src/resources/trading.ts","../src/resources/arraysJwt.ts","../src/resources/notifications.ts","../src/resources/pushSubscriptions.ts","../src/client.ts","../src/index.ts"],"sourcesContent":["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\nexport class CliUsageError extends Error {\n readonly command?: string;\n\n constructor(message: string, command?: string) {\n super(message);\n this.name = 'CliUsageError';\n this.command = command;\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 const result = await this.client._request('GET', '/api/v1/fs/read', {\n query: { path: params.path, offset: params.offset, size: params.size },\n });\n if (!(result instanceof ArrayBuffer)) return result;\n try {\n const text = new TextDecoder('utf-8', { fatal: true }).decode(result);\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n } catch {\n return result;\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 CronjobRunsListParams,\n CronjobRunsListResponse,\n CronjobRunLogsResponse,\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 async listRuns(\n params: CronjobRunsListParams\n ): Promise<CronjobRunsListResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n `/api/v1/deploy/cronjob/${params.cronjob_id}/runs`,\n {\n query: { first: params.first, cursor: params.cursor },\n }\n ) as Promise<CronjobRunsListResponse>;\n }\n\n async getRunLogs(params: {\n cronjob_id: number;\n run_id: number;\n }): Promise<CronjobRunLogsResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n `/api/v1/deploy/cronjob/${params.cronjob_id}/runs/${params.run_id}/logs`\n ) as Promise<CronjobRunLogsResponse>;\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 changelog: params.changelog,\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';\n\ntype Envelope<T> = { success: boolean; data: T; request_id?: string };\n\nexport interface SkillSummary {\n name: string;\n description: string;\n}\n\nexport interface SkillDoc {\n name: string;\n description: string;\n content: string;\n}\n\nexport class SkillsResource {\n constructor(private client: AlvaClient) {}\n\n async list(): Promise<{ skills: SkillSummary[] }> {\n const res = (await this.client._request('GET', '/api/v1/skills', {\n baseUrl: this.client.arraysBaseUrl,\n noAuth: true,\n })) as Envelope<SkillSummary[]>;\n return { skills: res.data ?? [] };\n }\n\n async summary(params: { name: string }): Promise<SkillDoc> {\n const encoded = encodeURIComponent(params.name);\n const res = (await this.client._request(\n 'GET',\n `/api/v1/skills/${encoded}`,\n {\n baseUrl: this.client.arraysBaseUrl,\n noAuth: true,\n }\n )) as Envelope<SkillDoc[]>;\n const doc = res.data?.[0];\n if (!doc)\n throw new Error(`empty skills summary response for \"${params.name}\"`);\n return doc;\n }\n\n async endpoint(params: { name: string; file: string }): Promise<SkillDoc> {\n const encoded = encodeURIComponent(params.name);\n const res = (await this.client._request(\n 'GET',\n `/api/v1/skills/${encoded}`,\n {\n baseUrl: this.client.arraysBaseUrl,\n noAuth: true,\n query: { endpoint: params.file },\n }\n )) as Envelope<SkillDoc[]>;\n const doc = res.data?.[0];\n if (!doc) {\n throw new Error(\n `empty skills endpoint response for \"${params.name}\" file \"${params.file}\"`\n );\n }\n return doc;\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 type { AlvaClient } from '../client.js';\nimport type {\n TradingAccount,\n TradingPortfolio,\n TradingOrder,\n TradingSubscription,\n EquityPoint,\n TradingRiskRule,\n TradingRiskRuleInput,\n ExecuteSignalResult,\n} from '../types.js';\n\nexport class TradingResource {\n constructor(private client: AlvaClient) {}\n\n async accounts(): Promise<TradingAccount[]> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/accounts') as Promise<\n TradingAccount[]\n >;\n }\n\n async portfolio(accountId: string): Promise<TradingPortfolio> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/portfolio', {\n query: { accountId },\n }) as Promise<TradingPortfolio>;\n }\n\n async orders(params: {\n accountId: string;\n source?: string;\n since?: number;\n limit?: number;\n }): Promise<TradingOrder[]> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/orders', {\n query: {\n accountId: params.accountId,\n source: params.source,\n since: params.since,\n limit: params.limit,\n },\n }) as Promise<TradingOrder[]>;\n }\n\n async subscriptions(accountId: string): Promise<TradingSubscription[]> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/subscriptions', {\n query: { accountId },\n }) as Promise<TradingSubscription[]>;\n }\n\n async equityHistory(params: {\n accountId: string;\n timeframe?: string;\n sinceMs?: number;\n untilMs?: number;\n }): Promise<EquityPoint[]> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/equity-history', {\n query: {\n accountId: params.accountId,\n timeframe: params.timeframe,\n sinceMs: params.sinceMs,\n untilMs: params.untilMs,\n },\n }) as Promise<EquityPoint[]>;\n }\n\n async riskRules(): Promise<TradingRiskRule> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n '/api/v1/trading/risk-rules'\n ) as Promise<TradingRiskRule>;\n }\n\n async subscribe(params: {\n accountId: string;\n sourceUsername: string;\n sourceFeed: string;\n playbookId: string;\n playbookVersion: string;\n executeLatest?: boolean;\n }): Promise<TradingSubscription> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/trading/subscribe', {\n body: params,\n }) as Promise<TradingSubscription>;\n }\n\n async unsubscribe(\n subscriptionId: string\n ): Promise<{ unsubscribedId: string }> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/trading/unsubscribe', {\n body: { subscriptionId },\n }) as Promise<{ unsubscribedId: string }>;\n }\n\n async execute(params: {\n accountId: string;\n signalJson: string;\n dryRun: boolean;\n sourceUsername?: string;\n sourceFeed?: string;\n }): Promise<ExecuteSignalResult> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/trading/execute', {\n body: params,\n }) as Promise<ExecuteSignalResult>;\n }\n\n async updateRiskRules(rules: TradingRiskRuleInput): Promise<TradingRiskRule> {\n this.client._requireAuth();\n return this.client._request('PUT', '/api/v1/trading/risk-rules', {\n body: rules,\n }) as Promise<TradingRiskRule>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n EnsureArraysJwtResponse,\n ArraysJwtStatusResponse,\n} from '../types.js';\n\nexport class ArraysJwtResource {\n constructor(private client: AlvaClient) {}\n\n /** Idempotently sign-or-renew the Arrays JWT server-side. */\n async ensure(): Promise<EnsureArraysJwtResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'POST',\n '/api/v1/arrays-jwt/ensure'\n ) as Promise<EnsureArraysJwtResponse>;\n }\n\n /** Report the current Arrays JWT state for the authenticated user. */\n async status(): Promise<ArraysJwtStatusResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n '/api/v1/arrays-jwt/status'\n ) as Promise<ArraysJwtStatusResponse>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n FeedNotificationListResponse,\n NotificationListParams,\n PlaybookNotificationListResponse,\n} from '../types.js';\n\nexport class NotificationsResource {\n constructor(private client: AlvaClient) {}\n\n /**\n * List the caller's notification history for one playbook\n * `(username, name)`. Returns `NOT_FOUND` when the playbook is\n * private or does not exist (the two cases are deliberately\n * indistinguishable to prevent namespace enumeration).\n */\n async listPlaybook(\n params: NotificationListParams\n ): Promise<PlaybookNotificationListResponse> {\n this.client._requireAuth();\n const path = `/api/v1/playbook/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/notifications`;\n return this.client._request('GET', path, {\n query: buildQuery(params),\n }) as Promise<PlaybookNotificationListResponse>;\n }\n\n /**\n * List the caller's notification history for one feed\n * `(username, name)`. Authorization is alfs read on\n * `/alva/home/<username>/feeds/<name>`.\n */\n async listFeed(\n params: NotificationListParams\n ): Promise<FeedNotificationListResponse> {\n this.client._requireAuth();\n const path = `/api/v1/feed/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/notifications`;\n return this.client._request('GET', path, {\n query: buildQuery(params),\n }) as Promise<FeedNotificationListResponse>;\n }\n}\n\nfunction buildQuery(params: NotificationListParams): Record<string, string> {\n const q: Record<string, string> = {};\n if (params.channel) q.channel = params.channel;\n if (params.status) q.status = params.status;\n if (params.since_time !== undefined && params.since_time > 0) {\n q.since_time = String(params.since_time);\n }\n if (params.first !== undefined && params.first > 0) {\n q.first = String(params.first);\n }\n if (params.cursor) q.cursor = params.cursor;\n return q;\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n PushSubscriptionFeedParams,\n PushSubscriptionListParams,\n PushSubscriptionListResponse,\n PushSubscriptionPlaybookParams,\n SubscribeFeedPushTargetResponse,\n SubscribePushTargetResponse,\n UnsubscribePushTargetResponse,\n} from '../types.js';\n\n/**\n * Personal push subscriptions — opt the caller in or out of personal\n * DM/web push for a target. Independent of social follow:\n *\n * - `subscribePlaybook` / `subscribeFeed` do not start following.\n * - `unsubscribePlaybook` / `unsubscribeFeed` do not unfollow.\n * - Following a playbook elsewhere will compound-subscribe automatically.\n *\n * Backed by alva-gateway REST (mirrors the GraphQL surface in\n * `pkg/schema/push_subscription.graphql`).\n */\nexport class PushSubscriptionsResource {\n constructor(private client: AlvaClient) {}\n\n /**\n * Opt into personal push for one playbook `(username, name)`.\n * Fires for any feed of that playbook. Idempotent. Auth: callers must\n * be able to read the playbook (public/paid pass; private requires\n * explicit alfs grant).\n */\n async subscribePlaybook(\n params: PushSubscriptionPlaybookParams\n ): Promise<SubscribePushTargetResponse> {\n this.client._requireAuth();\n const path = `/api/v1/playbook/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/push-subscription`;\n return this.client._request(\n 'POST',\n path\n ) as Promise<SubscribePushTargetResponse>;\n }\n\n /**\n * Soft-disable personal push for one playbook `(username, name)`.\n * Does NOT remove any social follow. Idempotent.\n */\n async unsubscribePlaybook(\n params: PushSubscriptionPlaybookParams\n ): Promise<UnsubscribePushTargetResponse> {\n this.client._requireAuth();\n const path = `/api/v1/playbook/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/push-subscription`;\n return this.client._request(\n 'DELETE',\n path\n ) as Promise<UnsubscribePushTargetResponse>;\n }\n\n /**\n * Opt into personal push for one feed `(username, name)`. Fires for\n * that specific feed regardless of which playbook(s) consume it; if\n * the feed is shared across playbooks the subscriber receives one\n * push per playbook context. Idempotent.\n */\n async subscribeFeed(\n params: PushSubscriptionFeedParams\n ): Promise<SubscribeFeedPushTargetResponse> {\n this.client._requireAuth();\n const path = `/api/v1/feed/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/push-subscription`;\n return this.client._request(\n 'POST',\n path\n ) as Promise<SubscribeFeedPushTargetResponse>;\n }\n\n /**\n * Soft-disable personal push for one feed `(username, name)`.\n * Idempotent.\n */\n async unsubscribeFeed(\n params: PushSubscriptionFeedParams\n ): Promise<UnsubscribePushTargetResponse> {\n this.client._requireAuth();\n const path = `/api/v1/feed/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/push-subscription`;\n return this.client._request(\n 'DELETE',\n path\n ) as Promise<UnsubscribePushTargetResponse>;\n }\n\n /**\n * List the caller's personal push subscriptions across all targets\n * (playbook + feed). Defaults to currently-active rows only; pass\n * `include_history=true` to also return previously-unsubscribed rows.\n */\n async list(\n params: PushSubscriptionListParams = {}\n ): Promise<PushSubscriptionListResponse> {\n this.client._requireAuth();\n const query: Record<string, string> = {};\n if (params.include_history !== undefined) {\n query.include_history = String(params.include_history);\n }\n return this.client._request('GET', '/api/v1/me/push-subscriptions', {\n query,\n }) as Promise<PushSubscriptionListResponse>;\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 { SkillsResource } from './resources/skills.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';\nimport { TradingResource } from './resources/trading.js';\nimport { ArraysJwtResource } from './resources/arraysJwt.js';\nimport { NotificationsResource } from './resources/notifications.js';\nimport { PushSubscriptionsResource } from './resources/pushSubscriptions.js';\n\nconst DEFAULT_BASE_URL = 'https://api-llm.prd.alva.ai';\nexport const DEFAULT_ARRAYS_BASE_URL = 'https://data-tools.prd.space.id';\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 /** Override the base URL for this request (e.g. the Arrays data-tools endpoint). */\n baseUrl?: string;\n /** If true, skip attaching any Alva auth header (X-Alva-Api-Key / x-Playbook-Viewer). */\n noAuth?: boolean;\n}\n\nexport class AlvaClient {\n readonly baseUrl: string;\n readonly arraysBaseUrl: string;\n readonly viewer_token?: 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 _skills?: SkillsResource;\n private _comments?: CommentsResource;\n private _remix?: RemixResource;\n private _screenshot?: ScreenshotResource;\n private _user?: UserResource;\n private _trading?: TradingResource;\n private _arraysJwt?: ArraysJwtResource;\n private _notifications?: NotificationsResource;\n private _pushSubscriptions?: PushSubscriptionsResource;\n\n constructor(config: AlvaClientConfig) {\n this.baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n this.arraysBaseUrl = config.arraysBaseUrl ?? DEFAULT_ARRAYS_BASE_URL;\n this.viewer_token = config.viewer_token;\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 skills(): SkillsResource {\n return (this._skills ??= new SkillsResource(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 get trading(): TradingResource {\n return (this._trading ??= new TradingResource(this));\n }\n get arraysJwt(): ArraysJwtResource {\n return (this._arraysJwt ??= new ArraysJwtResource(this));\n }\n get notifications(): NotificationsResource {\n return (this._notifications ??= new NotificationsResource(this));\n }\n get pushSubscriptions(): PushSubscriptionsResource {\n return (this._pushSubscriptions ??= new PushSubscriptionsResource(this));\n }\n\n _requireAuth(): void {\n if (!this.viewer_token && !this.apiKey) {\n throw new AlvaError(\n 'UNAUTHENTICATED',\n 'Authentication is required. Pass viewer_token or 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 const baseUrl = options?.baseUrl ?? this.baseUrl;\n let url = `${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 (!options?.noAuth) {\n if (this.viewer_token) {\n headers['x-Playbook-Viewer'] = this.viewer_token;\n } else if (this.apiKey) {\n headers['X-Alva-Api-Key'] = this.apiKey;\n }\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","declare const __VERSION__: string;\n\n/** SDK version, injected at build time from package.json. */\nexport const VERSION: string =\n typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'dev';\n\nexport { AlvaClient } from './client.js';\nexport { AlvaError } from './error.js';\nexport type {\n AlvaClientConfig,\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} from './types.js';\n"],"mappings":"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","names":["contentType"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alva-ai/toolkit",
3
- "version": "0.3.1",
3
+ "version": "0.4.1",
4
4
  "description": "Alva REST API SDK and CLI — interact with the Alva platform from Node.js, the browser, or the command line.",
5
5
  "type": "module",
6
6
  "exports": {