@alva-ai/toolkit 0.7.0 → 0.8.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.
@@ -1 +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/skillTiers.ts","../src/resources/dataSkills.ts","../src/resources/playbookSkills.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/resources/channelGroupSubscriptions.ts","../src/client.ts","../src/index.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\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 CronjobTriggerResponse,\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 /**\n * Fire the cronjob workflow once, immediately, bypassing the schedule.\n * Async — returns the Hatchet workflow run id at enqueue. The\n * `cronjob_runs` row appears only after the worker finishes the run;\n * callers verify completion by polling `listRuns({cronjob_id})` and\n * matching `runs[].workflow_run_id` against the returned id.\n *\n * Surfaces backend status as HTTP errors (handled by AlvaClient):\n * - 404 not found / cross-user\n * - 412 cronjob is paused (resume before triggering)\n * - 503 worker workflow handle not yet connected (startup race)\n */\n async trigger(params: { id: number }): Promise<CronjobTriggerResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'POST',\n `/api/v1/deploy/cronjob/${params.id}/trigger`\n ) as Promise<CronjobTriggerResponse>;\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 template_id: params.template_id,\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 readme_url: params.readme_url,\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","export type SkillEndpointTier = 'public' | 'alternative' | 'unstructured';\n\nexport interface SkillEndpointMetadata {\n skill: string;\n file: string;\n method: string;\n path: string;\n tier: SkillEndpointTier;\n required_subscription_tier: 'free' | 'pro';\n access: 'free_and_pro' | 'pro_only';\n pro_required: boolean;\n}\n\nconst SKILL_ENDPOINT_METADATA: SkillEndpointMetadata[] = [\n {\n skill: 'arrays-data-api-spot-market-price-and-volume',\n file: 'crypto-detail',\n method: 'GET',\n path: '/api/v1/crypto/detail',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'fear-greed-index',\n method: 'GET',\n path: '/api/v1/crypto/fear-greed-index',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-futures-data',\n file: 'funding-rate',\n method: 'GET',\n path: '/api/v1/crypto/funding-rate',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-spot-market-price-and-volume',\n file: 'crypto-futures-ohlcv',\n method: 'GET',\n path: '/api/v1/crypto/futures/ohlcv',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-spot-market-price-and-volume',\n file: 'crypto-kline',\n method: 'GET',\n path: '/api/v1/crypto/kline',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'list',\n method: 'GET',\n path: '/api/v1/crypto/list',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-futures-data',\n file: 'long-short-ratio',\n method: 'GET',\n path: '/api/v1/crypto/long-short-ratio',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'crypto-market-cap',\n method: 'GET',\n path: '/api/v1/crypto/market-cap',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'market-metrics',\n method: 'GET',\n path: '/api/v1/crypto/market-metrics',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-spot-market-price-and-volume',\n file: 'crypto-ohlcv',\n method: 'GET',\n path: '/api/v1/crypto/ohlcv',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-futures-data',\n file: 'open-interest',\n method: 'GET',\n path: '/api/v1/crypto/open-interest',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'screener-metrics',\n method: 'GET',\n path: '/api/v1/crypto/screener/metrics',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'screener-metrics-timerange',\n method: 'GET',\n path: '/api/v1/crypto/screener/metrics/timerange',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'trading-pair',\n method: 'GET',\n path: '/api/v1/crypto/trading-pair',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-etf-fundamentals',\n file: 'country-weightings',\n method: 'GET',\n path: '/api/v1/etf/country-weightings',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-etf-fundamentals',\n file: 'holdings',\n method: 'GET',\n path: '/api/v1/etf/holdings',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-etf-fundamentals',\n file: 'info',\n method: 'GET',\n path: '/api/v1/etf/info',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-etf-fundamentals',\n file: 'sector-weightings',\n method: 'GET',\n path: '/api/v1/etf/sector-weightings',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-macro-and-economics',\n file: 'macro-commodity-historical',\n method: 'GET',\n path: '/api/v1/macro/commodity/historical',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-macro-and-economics',\n file: 'macro-commodity-real-time',\n method: 'GET',\n path: '/api/v1/macro/commodity/real-time',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-macro-and-economics',\n file: 'macro-commodity-symbol-list',\n method: 'GET',\n path: '/api/v1/macro/commodity/symbols',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-macro-and-economics',\n file: 'economic-indicators',\n method: 'GET',\n path: '/api/v1/macro/economic-indicators',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-macro-and-economics',\n file: 'macro-forex-historical',\n method: 'GET',\n path: '/api/v1/macro/forex/historical',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-macro-and-economics',\n file: 'macro-forex-real-time',\n method: 'GET',\n path: '/api/v1/macro/forex/real-time',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-macro-and-economics',\n file: 'macro-forex-symbol-list',\n method: 'GET',\n path: '/api/v1/macro/forex/symbols',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-macro-and-economics',\n file: 'macro-index-historical',\n method: 'GET',\n path: '/api/v1/macro/index/historical',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-macro-and-economics',\n file: 'macro-index-real-time',\n method: 'GET',\n path: '/api/v1/macro/index/real-time',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-macro-and-economics',\n file: 'rates',\n method: 'GET',\n path: '/api/v1/macro/treasury-rates',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-fundamentals',\n file: 'company-balance-sheets',\n method: 'GET',\n path: '/api/v1/stocks/company/balance-sheets',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-fundamentals',\n file: 'company-cashflow-statements',\n method: 'GET',\n path: '/api/v1/stocks/company/cashflow-statements',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-fundamentals',\n file: 'company-detail',\n method: 'GET',\n path: '/api/v1/stocks/company/detail',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-fundamentals',\n file: 'company-income-statements',\n method: 'GET',\n path: '/api/v1/stocks/company/income-statements',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-fundamentals',\n file: 'company-kpi',\n method: 'GET',\n path: '/api/v1/stocks/company/kpi',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-events',\n file: 'crowdfunding-offerings',\n method: 'GET',\n path: '/api/v1/stocks/crowdfunding/offerings',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-events',\n file: 'dividends',\n method: 'GET',\n path: '/api/v1/stocks/dividends',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-events',\n file: 'earnings-calendar',\n method: 'GET',\n path: '/api/v1/stocks/earnings-calendar',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-events',\n file: 'equity-offering',\n method: 'GET',\n path: '/api/v1/stocks/equity-offering',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-stock-metrics',\n file: 'financial-metrics',\n method: 'GET',\n path: '/api/v1/stocks/financial-metrics',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-fundamentals',\n file: 'fiscal-dates',\n method: 'GET',\n path: '/api/v1/stocks/fiscal-dates',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-fundamentals',\n file: 'fiscal-dates-range',\n method: 'GET',\n path: '/api/v1/stocks/fiscal-dates/range',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-events',\n file: 'ipo-calendar',\n method: 'GET',\n path: '/api/v1/stocks/ipo-calendar',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-events',\n file: 'ipo-confirmed-calendar',\n method: 'GET',\n path: '/api/v1/stocks/ipo-confirmed-calendar',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-spot-market-price-and-volume',\n file: 'stocks-kline',\n method: 'GET',\n path: '/api/v1/stocks/kline',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-stock-metrics',\n file: 'market-metrics',\n method: 'GET',\n path: '/api/v1/stocks/market-metrics',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-events',\n file: 'mergers-acquisitions',\n method: 'GET',\n path: '/api/v1/stocks/mergers-acquisitions',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-fundamentals',\n file: 'outstanding-shares',\n method: 'GET',\n path: '/api/v1/stocks/outstanding-shares',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-stock-metrics',\n file: 'ratings',\n method: 'GET',\n path: '/api/v1/stocks/ratings',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-stock-screener',\n file: 'basic-info-screener',\n method: 'GET',\n path: '/api/v1/stocks/screener/basic-info/{sub}',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-stock-screener',\n file: 'event-screener',\n method: 'GET',\n path: '/api/v1/stocks/screener/events',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-stock-screener',\n file: 'screener-financial-metrics',\n method: 'GET',\n path: '/api/v1/stocks/screener/financial-metrics',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-stock-screener',\n file: 'screener-financial-metrics-timerange',\n method: 'GET',\n path: '/api/v1/stocks/screener/financial-metrics/timerange',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-stock-screener',\n file: 'screener-technical-metrics',\n method: 'GET',\n path: '/api/v1/stocks/screener/technical-metrics',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-stock-screener',\n file: 'screener-technical-metrics-timerange',\n method: 'GET',\n path: '/api/v1/stocks/screener/technical-metrics/timerange',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-events',\n file: 'sec-earnings-release',\n method: 'GET',\n path: '/api/v1/stocks/sec-earnings-release',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-fundamentals',\n file: 'shares-float',\n method: 'GET',\n path: '/api/v1/stocks/shares-float',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-events',\n file: 'splits',\n method: 'GET',\n path: '/api/v1/stocks/splits',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-exchange-flow',\n file: 'exchange-flows',\n method: 'GET',\n path: '/api/v1/crypto/exchange-flows',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-company-crypto-holdings',\n file: 'crypto-holdings',\n method: 'GET',\n path: '/api/v1/crypto/holdings',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'metrics-inflow-cdd',\n method: 'GET',\n path: '/api/v1/crypto/metrics/inflow-cdd',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'metrics-leverage-ratio',\n method: 'GET',\n path: '/api/v1/crypto/metrics/leverage-ratio',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'metrics-miner-to-exchange',\n method: 'GET',\n path: '/api/v1/crypto/metrics/miner-to-exchange',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'metrics-mvrv',\n method: 'GET',\n path: '/api/v1/crypto/metrics/mvrv',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'metrics-nupl',\n method: 'GET',\n path: '/api/v1/crypto/metrics/nupl',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'metrics-puell-multiple',\n method: 'GET',\n path: '/api/v1/crypto/metrics/puell-multiple',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'metrics-realized-price',\n method: 'GET',\n path: '/api/v1/crypto/metrics/realized-price',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'metrics-sopr',\n method: 'GET',\n path: '/api/v1/crypto/metrics/sopr',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'metrics-ssr',\n method: 'GET',\n path: '/api/v1/crypto/metrics/ssr',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'metrics-whale-ratio',\n method: 'GET',\n path: '/api/v1/crypto/metrics/whale-ratio',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'crypto-supply',\n method: 'GET',\n path: '/api/v1/crypto/supply',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-futures-data',\n file: 'taker-buy-sell-volume',\n method: 'GET',\n path: '/api/v1/crypto/taker-buy-sell-volume',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'unlock-events',\n method: 'GET',\n path: '/api/v1/crypto/unlock-events',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-etf-fundamentals',\n file: 'flow',\n method: 'GET',\n path: '/api/v1/etf/flow',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-options',\n file: 'contracts',\n method: 'GET',\n path: '/api/v1/options/contracts',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-options',\n file: 'kline',\n method: 'GET',\n path: '/api/v1/options/kline',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-equity-fundamentals',\n file: 'company-executives',\n method: 'GET',\n path: '/api/v1/stocks/company/executives',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-equity-estimates-and-targets',\n file: 'company-price-target-consensus',\n method: 'GET',\n path: '/api/v1/stocks/company/price-target-consensus',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-equity-estimates-and-targets',\n file: 'company-price-target-news',\n method: 'GET',\n path: '/api/v1/stocks/company/price-target-news',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-equity-estimates-and-targets',\n file: 'company-price-target-summary',\n method: 'GET',\n path: '/api/v1/stocks/company/price-target-summary',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-equity-ownership-and-flow',\n file: 'congress-recent-trades',\n method: 'GET',\n path: '/api/v1/stocks/congress/recent-trades',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-equity-ownership-and-flow',\n file: 'senate-trade',\n method: 'GET',\n path: '/api/v1/stocks/company/senate-trade',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-stock-metrics',\n file: 'darkpool',\n method: 'GET',\n path: '/api/v1/stocks/darkpool',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-equity-estimates-and-targets',\n file: 'estimates-guidance',\n method: 'GET',\n path: '/api/v1/stocks/estimates-guidance',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-equity-ownership-and-flow',\n file: 'insider-transactions',\n method: 'GET',\n path: '/api/v1/stocks/insider/transactions',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-equity-ownership-and-flow',\n file: 'institution-holder',\n method: 'GET',\n path: '/api/v1/stocks/institution-holder',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'activity',\n method: 'GET',\n path: 'polymarket:/activity',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'book',\n method: 'GET',\n path: 'polymarket:/book',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'closed-positions',\n method: 'GET',\n path: 'polymarket:/closed-positions',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'events',\n method: 'GET',\n path: 'polymarket:/events',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'holders',\n method: 'GET',\n path: 'polymarket:/holders',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'markets',\n method: 'GET',\n path: 'polymarket:/markets',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'midpoint',\n method: 'GET',\n path: 'polymarket:/midpoint',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'oi',\n method: 'GET',\n path: 'polymarket:/oi',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'positions',\n method: 'GET',\n path: 'polymarket:/positions',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'price',\n method: 'GET',\n path: 'polymarket:/price',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'prices-history',\n method: 'GET',\n path: 'polymarket:/prices-history',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'public-search',\n method: 'GET',\n path: 'polymarket:/public-search',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'series',\n method: 'GET',\n path: 'polymarket:/series',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'sports',\n method: 'GET',\n path: 'polymarket:/sports',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'spread',\n method: 'GET',\n path: 'polymarket:/spread',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'tags',\n method: 'GET',\n path: 'polymarket:/tags',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'trades',\n method: 'GET',\n path: 'polymarket:/trades',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'value',\n method: 'GET',\n path: 'polymarket:/value',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-equity-events',\n file: 'earnings-transcript',\n method: 'GET',\n path: '/api/v1/stocks/earnings-transcript',\n tier: 'unstructured',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-news',\n file: 'market-news',\n method: 'GET',\n path: '/api/v1/stocks/market-news',\n tier: 'unstructured',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n];\n\nexport function getSkillEndpointMetadata(\n skill: string,\n file: string\n): SkillEndpointMetadata | undefined {\n return SKILL_ENDPOINT_METADATA.find(\n (item) => item.skill === skill && item.file === file\n );\n}\n\nexport function listSkillEndpointMetadata(\n skill: string\n): SkillEndpointMetadata[] {\n return SKILL_ENDPOINT_METADATA.filter((item) => item.skill === skill);\n}\n\nexport function countSkillEndpointMetadata(): Record<\n SkillEndpointTier,\n number\n> {\n return { public: 56, alternative: 46, unstructured: 2 };\n}\n","import type { AlvaClient } from '../client.js';\nimport {\n getSkillEndpointMetadata,\n listSkillEndpointMetadata,\n type SkillEndpointMetadata,\n type SkillEndpointTier,\n} from './skillTiers.js';\n\ntype Envelope<T> = { success: boolean; data: T; request_id?: string };\ntype SkillTierCounts = Partial<Record<SkillEndpointTier, number>>;\n\nexport type { SkillEndpointMetadata, SkillEndpointTier };\n\nexport interface SkillMetadata {\n endpoint_count: number;\n endpoint_tier_counts: SkillTierCounts;\n pro_count: number;\n}\n\nexport interface SkillSummary {\n name: string;\n description: string;\n metadata?: SkillMetadata;\n endpoint_tier_counts?: SkillTierCounts;\n}\n\nexport interface SkillDoc {\n name: string;\n description: string;\n content: string;\n metadata?: SkillMetadata | SkillEndpointMetadata;\n endpoint_metadata?: SkillEndpointMetadata[];\n endpoint_tier_counts?: SkillTierCounts;\n}\n\nexport class DataSkillsResource {\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 {\n skills: (res.data ?? []).map((skill) => ({\n ...skill,\n ...metadataSummaryForSkill(skill.name),\n })),\n };\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 const endpointMetadata = listSkillEndpointMetadata(params.name);\n return {\n ...doc,\n ...metadataSummaryForSkill(params.name),\n ...(endpointMetadata.length > 0\n ? { endpoint_metadata: endpointMetadata }\n : {}),\n };\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 const metadata = getSkillEndpointMetadata(params.name, params.file);\n return {\n ...doc,\n ...(metadata ? { metadata } : {}),\n };\n }\n}\n\nfunction metadataSummaryForSkill(skill: string): {\n metadata?: SkillMetadata;\n endpoint_tier_counts?: SkillTierCounts;\n} {\n const endpointMetadata = listSkillEndpointMetadata(skill);\n if (endpointMetadata.length === 0) {\n return {};\n }\n const counts: SkillTierCounts = {};\n let proCount = 0;\n for (const endpoint of endpointMetadata) {\n counts[endpoint.tier] = (counts[endpoint.tier] ?? 0) + 1;\n if (endpoint.pro_required) proCount += 1;\n }\n return {\n endpoint_tier_counts: counts,\n metadata: {\n endpoint_count: endpointMetadata.length,\n endpoint_tier_counts: counts,\n pro_count: proCount,\n },\n };\n}\n","import type { AlvaClient } from '../client.js';\nimport { AlvaError } from '../error.js';\n\ntype Envelope<T> = { success: boolean; data: T; request_id?: string };\n\nexport interface PlaybookSkillSummary {\n username: string;\n name: string;\n description: string;\n tags: string[];\n creator_uid: number;\n updated_at: string;\n}\n\nexport interface PlaybookSkillFileMeta {\n path: string;\n size_bytes: number;\n}\n\nexport interface PlaybookSkillMeta extends PlaybookSkillSummary {\n files: PlaybookSkillFileMeta[];\n}\n\nexport interface PlaybookSkillFile {\n username: string;\n name: string;\n path: string;\n content: string;\n updated_at: string;\n}\n\nexport interface PlaybookSkillTagEntry {\n name: string;\n}\n\n/**\n * Splits \"<user>/<name>\". Throws AlvaError on malformed input.\n */\nexport function parsePlaybookSkillId(s: string): {\n username: string;\n name: string;\n} {\n const parts = s.split('/');\n if (parts.length !== 2 || !parts[0] || !parts[1]) {\n throw new AlvaError(\n 'INVALID_ARGUMENT',\n `playbook skill identifier must be \"<user>/<name>\", got \"${s}\"`,\n 0\n );\n }\n return { username: parts[0], name: parts[1] };\n}\n\nexport class PlaybookSkillsResource {\n constructor(private client: AlvaClient) {}\n\n async list(params?: {\n tag?: string;\n username?: string;\n }): Promise<{ skills: PlaybookSkillSummary[] }> {\n const query: Record<string, string> = {};\n if (params?.tag) query.tag = params.tag;\n if (params?.username) query.username = params.username;\n const res = (await this.client._request('GET', '/api/v1/skills', {\n query,\n })) as Envelope<PlaybookSkillSummary[]>;\n return { skills: res.data ?? [] };\n }\n\n async tags(): Promise<{ tags: PlaybookSkillTagEntry[] }> {\n const res = (await this.client._request(\n 'GET',\n '/api/v1/skills/tags'\n )) as Envelope<PlaybookSkillTagEntry[]>;\n return { tags: res.data ?? [] };\n }\n\n async get(id: string): Promise<PlaybookSkillMeta> {\n const { username, name } = parsePlaybookSkillId(id);\n const u = encodeURIComponent(username);\n const n = encodeURIComponent(name);\n const res = (await this.client._request(\n 'GET',\n `/api/v1/skills/${u}/${n}`\n )) as Envelope<PlaybookSkillMeta[]>;\n const meta = res.data?.[0];\n if (!meta) {\n throw new AlvaError(\n 'NOT_FOUND',\n `empty playbook skills get response for ${id}`,\n 0\n );\n }\n return meta;\n }\n\n async file(id: string, path: string): Promise<PlaybookSkillFile> {\n const { username, name } = parsePlaybookSkillId(id);\n const u = encodeURIComponent(username);\n const n = encodeURIComponent(name);\n // path may contain '/'; encode each segment separately to preserve them\n const p = path.split('/').map(encodeURIComponent).join('/');\n const res = (await this.client._request(\n 'GET',\n `/api/v1/skills/${u}/${n}/files/${p}`\n )) as Envelope<PlaybookSkillFile[]>;\n const out = res.data?.[0];\n if (!out) {\n throw new AlvaError(\n 'NOT_FOUND',\n `empty playbook skills file response for ${id} path ${path}`,\n 0\n );\n }\n return out;\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 compress: params.compress,\n compress_quality: params.compressQuality,\n compress_max_width: params.compressMaxWidth,\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/push-subscriptions/playbook/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}`;\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/push-subscriptions/playbook/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}`;\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/push-subscriptions/feed/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}`;\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/push-subscriptions/feed/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}`;\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 type { AlvaClient } from '../client.js';\nimport { AlvaError } from '../error.js';\nimport type {\n ChannelGroupSubscriptionContextResponse,\n ChannelGroupSubscriptionListResponse,\n ChannelGroupSubscriptionMutationParams,\n ChannelGroupSubscriptionMutationResponse,\n ChannelGroupSubscriptionSessionParams,\n} from '../types.js';\n\n/**\n * Group push subscriptions for an external channel session.\n *\n * These APIs subscribe the Telegram/Discord group attached to `session_id`\n * to public feed/playbook push events. Mutations are idempotent no-ops unless\n * the authenticated caller is that group's Alva admin.\n */\nexport class ChannelGroupSubscriptionsResource {\n constructor(private client: AlvaClient) {}\n\n async context(\n params: ChannelGroupSubscriptionSessionParams\n ): Promise<ChannelGroupSubscriptionContextResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n '/api/v1/channel/group-subscriptions/context',\n {\n query: { session_id: params.session_id },\n }\n ) as Promise<ChannelGroupSubscriptionContextResponse>;\n }\n\n async list(\n params: ChannelGroupSubscriptionSessionParams\n ): Promise<ChannelGroupSubscriptionListResponse> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/channel/group-subscriptions', {\n query: { session_id: params.session_id },\n }) as Promise<ChannelGroupSubscriptionListResponse>;\n }\n\n async subscribe(\n params: ChannelGroupSubscriptionMutationParams\n ): Promise<ChannelGroupSubscriptionMutationResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/channel/group-subscriptions', {\n jsonBody: mutationBody(params),\n }) as Promise<ChannelGroupSubscriptionMutationResponse>;\n }\n\n async unsubscribe(\n params: ChannelGroupSubscriptionMutationParams\n ): Promise<ChannelGroupSubscriptionMutationResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'DELETE',\n '/api/v1/channel/group-subscriptions',\n {\n jsonBody: mutationBody(params),\n }\n ) as Promise<ChannelGroupSubscriptionMutationResponse>;\n }\n}\n\nfunction mutationBody(params: ChannelGroupSubscriptionMutationParams): string {\n return `{\"session_id\":${idLiteral(params.session_id)},\"target_type\":${JSON.stringify(params.target_type)},\"target_id\":${idLiteral(params.target_id)}}`;\n}\n\nfunction idLiteral(value: number | string): string {\n if (typeof value === 'number') {\n if (\n !Number.isInteger(value) ||\n value <= 0 ||\n !Number.isSafeInteger(value)\n ) {\n throw new AlvaError(\n 'INVALID_ARGUMENT',\n 'channel group subscription ids must be positive safe integers; pass large int64 ids as strings',\n 0\n );\n }\n return String(value);\n }\n if (!/^[1-9]\\d*$/.test(value)) {\n throw new AlvaError(\n 'INVALID_ARGUMENT',\n 'channel group subscription ids must be positive integer strings',\n 0\n );\n }\n return value;\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 { DataSkillsResource } from './resources/dataSkills.js';\nimport { PlaybookSkillsResource } from './resources/playbookSkills.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';\nimport { ChannelGroupSubscriptionsResource } from './resources/channelGroupSubscriptions.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 /** Raw JSON body, used when callers must preserve int64 numeric literals. */\n jsonBody?: string;\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 _dataSkills?: DataSkillsResource;\n private _playbookSkills?: PlaybookSkillsResource;\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 private _channelGroupSubscriptions?: ChannelGroupSubscriptionsResource;\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 dataSkills(): DataSkillsResource {\n return (this._dataSkills ??= new DataSkillsResource(this));\n }\n get playbookSkills(): PlaybookSkillsResource {\n return (this._playbookSkills ??= new PlaybookSkillsResource(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 get channelGroupSubscriptions(): ChannelGroupSubscriptionsResource {\n return (this._channelGroupSubscriptions ??=\n new ChannelGroupSubscriptionsResource(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?.jsonBody !== undefined) {\n headers['Content-Type'] = 'application/json';\n fetchBody = options.jsonBody;\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 ChannelGroupSubscriptionTargetType,\n ChannelGroupSubscriptionTarget,\n ChannelGroupSubscription,\n ChannelGroupCallerInfo,\n ChannelGroupAdminInfo,\n ChannelGroupSubscriptionSessionParams,\n ChannelGroupSubscriptionMutationParams,\n ChannelGroupSubscriptionContextResponse,\n ChannelGroupSubscriptionListResponse,\n ChannelGroupSubscriptionMutationResponse,\n} from './types.js';\nexport type {\n SkillDoc,\n SkillEndpointMetadata,\n SkillEndpointTier,\n SkillMetadata,\n SkillSummary,\n} from './resources/dataSkills.js';\n"],"mappings":"+bAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,EAAA,cAAAC,EAAA,YAAAC,ICAO,IAAMC,EAAN,cAAwB,KAAM,CAC1B,KACA,OAET,YAAYC,EAAcC,EAAiBC,EAAgB,CACzD,MAAMD,CAAO,EACb,KAAK,KAAO,YACZ,KAAK,KAAOD,EACZ,KAAK,OAASE,CAChB,CACF,ECUO,IAAMC,EAAN,KAAiB,CACtB,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAGpB,MAAM,KAAKC,EAAsD,CAC/D,IAAMC,EAAS,MAAM,KAAK,OAAO,SAAS,MAAO,kBAAmB,CAClE,MAAO,CAAE,KAAMD,EAAO,KAAM,OAAQA,EAAO,OAAQ,KAAMA,EAAO,IAAK,CACvE,CAAC,EACD,GAAI,EAAEC,aAAkB,aAAc,OAAOA,EAC7C,GAAI,CACF,IAAMC,EAAO,IAAI,YAAY,QAAS,CAAE,MAAO,EAAK,CAAC,EAAE,OAAOD,CAAM,EACpE,GAAI,CACF,OAAO,KAAK,MAAMC,CAAI,CACxB,MAAQ,CACN,OAAOA,CACT,CACF,MAAQ,CACN,OAAOD,CACT,CACF,CAGA,MAAM,MAAMD,EAAiD,CAC3D,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,mBAAoB,CACtD,KAAM,CACJ,KAAMA,EAAO,KACb,KAAMA,EAAO,KACb,cAAeA,EAAO,aACxB,CACF,CAAC,CACH,CAGA,MAAM,SAASA,EAAoD,CACjE,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,mBAAoB,CACtD,MAAO,CACL,KAAMA,EAAO,KACb,cAAeA,EAAO,aACxB,EACA,QAASA,EAAO,IAClB,CAAC,CACH,CAEA,MAAM,KAAKA,EAA2C,CACpD,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,kBAAmB,CACpD,MAAO,CAAE,KAAMA,EAAO,IAAK,CAC7B,CAAC,CACH,CAEA,MAAM,QAAQA,EAAqD,CACjE,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,qBAAsB,CACvD,MAAO,CAAE,KAAMA,EAAO,KAAM,UAAWA,EAAO,SAAU,CAC1D,CAAC,CACH,CAEA,MAAM,MAAMA,EAAsC,CAChD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,OAAQ,mBAAoB,CACrD,KAAM,CAAE,KAAMA,EAAO,IAAK,CAC5B,CAAC,CACH,CAEA,MAAM,OAAOA,EAAuC,CAClD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,SAAU,oBAAqB,CACxD,MAAO,CAAE,KAAMA,EAAO,KAAM,UAAWA,EAAO,SAAU,CAC1D,CAAC,CACH,CAEA,MAAM,OAAOA,EAAuC,CAClD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,OAAQ,oBAAqB,CACtD,KAAM,CAAE,SAAUA,EAAO,SAAU,SAAUA,EAAO,QAAS,CAC/D,CAAC,CACH,CAEA,MAAM,KAAKA,EAAqC,CAC9C,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,OAAQ,kBAAmB,CACpD,KAAM,CAAE,SAAUA,EAAO,SAAU,SAAUA,EAAO,QAAS,CAC/D,CAAC,CACH,CAEA,MAAM,QAAQA,EAAwC,CACpD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,OAAQ,qBAAsB,CACvD,KAAM,CACJ,YAAaA,EAAO,YACpB,UAAWA,EAAO,SACpB,CACF,CAAC,CACH,CAEA,MAAM,SAASA,EAAuD,CACpE,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,sBAAuB,CACxD,MAAO,CAAE,KAAMA,EAAO,IAAK,CAC7B,CAAC,CACH,CAEA,MAAM,MAAMA,EAAsC,CAChD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,OAAQ,mBAAoB,CACrD,KAAM,CAAE,KAAMA,EAAO,KAAM,KAAMA,EAAO,IAAK,CAC/C,CAAC,CACH,CAEA,MAAM,MAAMA,EAAsC,CAChD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,OAAQ,mBAAoB,CACrD,KAAM,CACJ,KAAMA,EAAO,KACb,QAASA,EAAO,QAChB,WAAYA,EAAO,UACrB,CACF,CAAC,CACH,CAEA,MAAM,OAAOA,EAAuC,CAClD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,OAAQ,oBAAqB,CACtD,KAAM,CACJ,KAAMA,EAAO,KACb,QAASA,EAAO,QAChB,WAAYA,EAAO,UACrB,CACF,CAAC,CACH,CACF,ECrJO,IAAMG,EAAN,KAAkB,CACvB,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,QAAQC,EAA0C,CACtD,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,cAAe,CACjD,KAAM,CACJ,KAAMA,EAAO,KACb,WAAYA,EAAO,WACnB,YAAaA,EAAO,YACpB,KAAMA,EAAO,IACf,CACF,CAAC,CACH,CACF,ECJO,IAAMC,EAAN,KAAqB,CAC1B,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,OAAOC,EAAgD,CAC3D,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,yBAA0B,CAC5D,KAAM,CACJ,KAAMA,EAAO,KACb,KAAMA,EAAO,KACb,gBAAiBA,EAAO,gBACxB,KAAMA,EAAO,KACb,YAAaA,EAAO,WACtB,CACF,CAAC,CACH,CAEA,MAAM,KAAKA,EAA0D,CACnE,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,0BAA2B,CAC5D,MAAO,CAAE,MAAOA,GAAQ,MAAO,OAAQA,GAAQ,MAAO,CACxD,CAAC,CACH,CAEA,MAAM,IAAIA,EAA0C,CAClD,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SACjB,MACA,0BAA0BA,EAAO,EAAE,EACrC,CACF,CAEA,MAAM,OAAOA,EAAgD,CAC3D,KAAK,OAAO,aAAa,EACzB,GAAM,CAAE,GAAAC,EAAI,GAAGC,CAAK,EAAIF,EACxB,OAAO,KAAK,OAAO,SAAS,QAAS,0BAA0BC,CAAE,GAAI,CACnE,KAAAC,CACF,CAAC,CACH,CAEA,MAAM,OAAOF,EAAuC,CAClD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,SAAU,0BAA0BA,EAAO,EAAE,EAAE,CAC5E,CAEA,MAAM,MAAMA,EAAuC,CACjD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAChB,OACA,0BAA0BA,EAAO,EAAE,QACrC,CACF,CAEA,MAAM,OAAOA,EAAuC,CAClD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAChB,OACA,0BAA0BA,EAAO,EAAE,SACrC,CACF,CAcA,MAAM,QAAQA,EAAyD,CACrE,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SACjB,OACA,0BAA0BA,EAAO,EAAE,UACrC,CACF,CAEA,MAAM,SACJA,EACkC,CAClC,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SACjB,MACA,0BAA0BA,EAAO,UAAU,QAC3C,CACE,MAAO,CAAE,MAAOA,EAAO,MAAO,OAAQA,EAAO,MAAO,CACtD,CACF,CACF,CAEA,MAAM,WAAWA,EAGmB,CAClC,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SACjB,MACA,0BAA0BA,EAAO,UAAU,SAASA,EAAO,MAAM,OACnE,CACF,CACF,EC1GO,IAAMG,EAAN,KAAsB,CAC3B,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,KAAKC,EAA0D,CACnE,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,uBAAwB,CAC1D,KAAM,CACJ,KAAMA,EAAO,KACb,QAASA,EAAO,QAChB,WAAYA,EAAO,WACnB,UAAWA,EAAO,UAClB,YAAaA,EAAO,YACpB,UAAWA,EAAO,SACpB,CACF,CAAC,CACH,CAEA,MAAM,cACJA,EACgC,CAChC,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,yBAA0B,CAC5D,KAAM,CACJ,KAAMA,EAAO,KACb,aAAcA,EAAO,aACrB,YAAaA,EAAO,YACpB,MAAOA,EAAO,MACd,gBAAiBA,EAAO,gBACxB,YAAaA,EAAO,WACtB,CACF,CAAC,CACH,CAEA,MAAM,SACJA,EACkC,CAClC,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,2BAA4B,CAC9D,KAAM,CACJ,KAAMA,EAAO,KACb,QAASA,EAAO,QAChB,MAAOA,EAAO,MACd,UAAWA,EAAO,UAClB,WAAYA,EAAO,UACrB,CACF,CAAC,CACH,CACF,ECtDO,IAAMC,EAAN,KAAsB,CAC3B,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,OAAOC,EAA4C,CACvD,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,OAAQ,kBAAmB,CACpD,KAAM,CAAE,KAAMA,EAAO,KAAM,MAAOA,EAAO,KAAM,CACjD,CAAC,CACH,CAEA,MAAM,MAA+C,CACnD,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,iBAAiB,CAGtD,CAEA,MAAM,IAAIA,EAA2C,CACnD,KAAK,OAAO,aAAa,EACzB,IAAMC,EAAU,mBAAmBD,EAAO,IAAI,EAC9C,OAAO,KAAK,OAAO,SACjB,MACA,mBAAmBC,CAAO,EAC5B,CACF,CAEA,MAAM,OAAOD,EAAwD,CACnE,KAAK,OAAO,aAAa,EACzB,IAAMC,EAAU,mBAAmBD,EAAO,IAAI,EAC9C,MAAM,KAAK,OAAO,SAAS,MAAO,mBAAmBC,CAAO,GAAI,CAC9D,KAAM,CAAE,MAAOD,EAAO,KAAM,CAC9B,CAAC,CACH,CAEA,MAAM,OAAOA,EAAyC,CACpD,KAAK,OAAO,aAAa,EACzB,IAAMC,EAAU,mBAAmBD,EAAO,IAAI,EAC9C,MAAM,KAAK,OAAO,SAAS,SAAU,mBAAmBC,CAAO,EAAE,CACnE,CACF,ECnCO,IAAMC,EAAN,KAAsB,CAC3B,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,IAAIC,EAA8C,CACtD,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,kBAAmB,CACpD,MAAO,CAAE,KAAMA,EAAO,IAAK,CAC7B,CAAC,CACH,CAEA,MAAM,YAA0C,CAC9C,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SACjB,MACA,wBACF,CACF,CAEA,MAAM,iBAAiBA,EAEe,CACpC,KAAK,OAAO,aAAa,EACzB,IAAMC,EAAU,mBAAmBD,EAAO,SAAS,EACnD,OAAO,KAAK,OAAO,SACjB,MACA,0BAA0BC,CAAO,UACnC,CACF,CACF,ECtBA,IAAMC,EAAmD,CACvD,CACE,MAAO,+CACP,KAAM,gBACN,OAAQ,MACR,KAAM,wBACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,8CACP,KAAM,mBACN,OAAQ,MACR,KAAM,kCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,eACN,OAAQ,MACR,KAAM,8BACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,+CACP,KAAM,uBACN,OAAQ,MACR,KAAM,+BACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,+CACP,KAAM,eACN,OAAQ,MACR,KAAM,uBACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,8CACP,KAAM,OACN,OAAQ,MACR,KAAM,sBACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,mBACN,OAAQ,MACR,KAAM,kCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,8CACP,KAAM,oBACN,OAAQ,MACR,KAAM,4BACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,8CACP,KAAM,iBACN,OAAQ,MACR,KAAM,gCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,+CACP,KAAM,eACN,OAAQ,MACR,KAAM,uBACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,gBACN,OAAQ,MACR,KAAM,+BACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,8CACP,KAAM,mBACN,OAAQ,MACR,KAAM,kCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,8CACP,KAAM,6BACN,OAAQ,MACR,KAAM,4CACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,8CACP,KAAM,eACN,OAAQ,MACR,KAAM,8BACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,mCACP,KAAM,qBACN,OAAQ,MACR,KAAM,iCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,mCACP,KAAM,WACN,OAAQ,MACR,KAAM,uBACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,mCACP,KAAM,OACN,OAAQ,MACR,KAAM,mBACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,mCACP,KAAM,oBACN,OAAQ,MACR,KAAM,gCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,6BACN,OAAQ,MACR,KAAM,qCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,4BACN,OAAQ,MACR,KAAM,oCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,8BACN,OAAQ,MACR,KAAM,kCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,sBACN,OAAQ,MACR,KAAM,oCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,yBACN,OAAQ,MACR,KAAM,iCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,wBACN,OAAQ,MACR,KAAM,gCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,0BACN,OAAQ,MACR,KAAM,8BACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,yBACN,OAAQ,MACR,KAAM,iCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,wBACN,OAAQ,MACR,KAAM,gCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,QACN,OAAQ,MACR,KAAM,+BACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,yBACN,OAAQ,MACR,KAAM,wCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,8BACN,OAAQ,MACR,KAAM,6CACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,iBACN,OAAQ,MACR,KAAM,gCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,4BACN,OAAQ,MACR,KAAM,2CACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,cACN,OAAQ,MACR,KAAM,6BACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,gCACP,KAAM,yBACN,OAAQ,MACR,KAAM,wCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,gCACP,KAAM,YACN,OAAQ,MACR,KAAM,2BACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,gCACP,KAAM,oBACN,OAAQ,MACR,KAAM,mCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,gCACP,KAAM,kBACN,OAAQ,MACR,KAAM,iCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,gCACP,KAAM,oBACN,OAAQ,MACR,KAAM,mCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,eACN,OAAQ,MACR,KAAM,8BACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,qBACN,OAAQ,MACR,KAAM,oCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,gCACP,KAAM,eACN,OAAQ,MACR,KAAM,8BACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,gCACP,KAAM,yBACN,OAAQ,MACR,KAAM,wCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,+CACP,KAAM,eACN,OAAQ,MACR,KAAM,uBACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,gCACP,KAAM,iBACN,OAAQ,MACR,KAAM,gCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,gCACP,KAAM,uBACN,OAAQ,MACR,KAAM,sCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,qBACN,OAAQ,MACR,KAAM,oCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,gCACP,KAAM,UACN,OAAQ,MACR,KAAM,yBACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,iCACP,KAAM,sBACN,OAAQ,MACR,KAAM,2CACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,iCACP,KAAM,iBACN,OAAQ,MACR,KAAM,iCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,iCACP,KAAM,6BACN,OAAQ,MACR,KAAM,4CACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,iCACP,KAAM,uCACN,OAAQ,MACR,KAAM,sDACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,iCACP,KAAM,6BACN,OAAQ,MACR,KAAM,4CACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,iCACP,KAAM,uCACN,OAAQ,MACR,KAAM,sDACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,gCACP,KAAM,uBACN,OAAQ,MACR,KAAM,sCACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,eACN,OAAQ,MACR,KAAM,8BACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,gCACP,KAAM,SACN,OAAQ,MACR,KAAM,wBACN,KAAM,SACN,2BAA4B,OAC5B,OAAQ,eACR,aAAc,EAChB,EACA,CACE,MAAO,uCACP,KAAM,iBACN,OAAQ,MACR,KAAM,gCACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,0CACP,KAAM,kBACN,OAAQ,MACR,KAAM,0BACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,8CACP,KAAM,qBACN,OAAQ,MACR,KAAM,oCACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,8CACP,KAAM,yBACN,OAAQ,MACR,KAAM,wCACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,8CACP,KAAM,4BACN,OAAQ,MACR,KAAM,2CACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,8CACP,KAAM,eACN,OAAQ,MACR,KAAM,8BACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,8CACP,KAAM,eACN,OAAQ,MACR,KAAM,8BACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,8CACP,KAAM,yBACN,OAAQ,MACR,KAAM,wCACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,8CACP,KAAM,yBACN,OAAQ,MACR,KAAM,wCACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,8CACP,KAAM,eACN,OAAQ,MACR,KAAM,8BACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,8CACP,KAAM,cACN,OAAQ,MACR,KAAM,6BACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,8CACP,KAAM,sBACN,OAAQ,MACR,KAAM,qCACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,8CACP,KAAM,gBACN,OAAQ,MACR,KAAM,wBACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,wBACN,OAAQ,MACR,KAAM,uCACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,8CACP,KAAM,gBACN,OAAQ,MACR,KAAM,+BACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,mCACP,KAAM,OACN,OAAQ,MACR,KAAM,mBACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,0BACP,KAAM,YACN,OAAQ,MACR,KAAM,4BACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,0BACP,KAAM,QACN,OAAQ,MACR,KAAM,wBACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,sCACP,KAAM,qBACN,OAAQ,MACR,KAAM,oCACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,+CACP,KAAM,iCACN,OAAQ,MACR,KAAM,gDACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,+CACP,KAAM,4BACN,OAAQ,MACR,KAAM,2CACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,+CACP,KAAM,+BACN,OAAQ,MACR,KAAM,8CACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,4CACP,KAAM,yBACN,OAAQ,MACR,KAAM,wCACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,4CACP,KAAM,eACN,OAAQ,MACR,KAAM,sCACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,gCACP,KAAM,WACN,OAAQ,MACR,KAAM,0BACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,+CACP,KAAM,qBACN,OAAQ,MACR,KAAM,oCACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,4CACP,KAAM,uBACN,OAAQ,MACR,KAAM,sCACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,4CACP,KAAM,qBACN,OAAQ,MACR,KAAM,oCACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,6BACP,KAAM,WACN,OAAQ,MACR,KAAM,uBACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,6BACP,KAAM,OACN,OAAQ,MACR,KAAM,mBACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,6BACP,KAAM,mBACN,OAAQ,MACR,KAAM,+BACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,6BACP,KAAM,SACN,OAAQ,MACR,KAAM,qBACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,6BACP,KAAM,UACN,OAAQ,MACR,KAAM,sBACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,6BACP,KAAM,UACN,OAAQ,MACR,KAAM,sBACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,6BACP,KAAM,WACN,OAAQ,MACR,KAAM,uBACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,6BACP,KAAM,KACN,OAAQ,MACR,KAAM,iBACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,6BACP,KAAM,YACN,OAAQ,MACR,KAAM,wBACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,6BACP,KAAM,QACN,OAAQ,MACR,KAAM,oBACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,6BACP,KAAM,iBACN,OAAQ,MACR,KAAM,6BACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,6BACP,KAAM,gBACN,OAAQ,MACR,KAAM,4BACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,6BACP,KAAM,SACN,OAAQ,MACR,KAAM,qBACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,6BACP,KAAM,SACN,OAAQ,MACR,KAAM,qBACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,6BACP,KAAM,SACN,OAAQ,MACR,KAAM,qBACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,6BACP,KAAM,OACN,OAAQ,MACR,KAAM,mBACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,6BACP,KAAM,SACN,OAAQ,MACR,KAAM,qBACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,6BACP,KAAM,QACN,OAAQ,MACR,KAAM,oBACN,KAAM,cACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,gCACP,KAAM,sBACN,OAAQ,MACR,KAAM,qCACN,KAAM,eACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,EACA,CACE,MAAO,uBACP,KAAM,cACN,OAAQ,MACR,KAAM,6BACN,KAAM,eACN,2BAA4B,MAC5B,OAAQ,WACR,aAAc,EAChB,CACF,EAEO,SAASC,EACdC,EACAC,EACmC,CACnC,OAAOH,EAAwB,KAC5BI,GAASA,EAAK,QAAUF,GAASE,EAAK,OAASD,CAClD,CACF,CAEO,SAASE,EACdH,EACyB,CACzB,OAAOF,EAAwB,OAAQI,GAASA,EAAK,QAAUF,CAAK,CACtE,CC1gCO,IAAMI,EAAN,KAAyB,CAC9B,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,MAA4C,CAKhD,MAAO,CACL,SALW,MAAM,KAAK,OAAO,SAAS,MAAO,iBAAkB,CAC/D,QAAS,KAAK,OAAO,cACrB,OAAQ,EACV,CAAC,GAEc,MAAQ,CAAC,GAAG,IAAKC,IAAW,CACvC,GAAGA,EACH,GAAGC,EAAwBD,EAAM,IAAI,CACvC,EAAE,CACJ,CACF,CAEA,MAAM,QAAQE,EAA6C,CACzD,IAAMC,EAAU,mBAAmBD,EAAO,IAAI,EASxCE,GARO,MAAM,KAAK,OAAO,SAC7B,MACA,kBAAkBD,CAAO,GACzB,CACE,QAAS,KAAK,OAAO,cACrB,OAAQ,EACV,CACF,GACgB,OAAO,CAAC,EACxB,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,sCAAsCF,EAAO,IAAI,GAAG,EACtE,IAAMG,EAAmBC,EAA0BJ,EAAO,IAAI,EAC9D,MAAO,CACL,GAAGE,EACH,GAAGH,EAAwBC,EAAO,IAAI,EACtC,GAAIG,EAAiB,OAAS,EAC1B,CAAE,kBAAmBA,CAAiB,EACtC,CAAC,CACP,CACF,CAEA,MAAM,SAASH,EAA2D,CACxE,IAAMC,EAAU,mBAAmBD,EAAO,IAAI,EAUxCE,GATO,MAAM,KAAK,OAAO,SAC7B,MACA,kBAAkBD,CAAO,GACzB,CACE,QAAS,KAAK,OAAO,cACrB,OAAQ,GACR,MAAO,CAAE,SAAUD,EAAO,IAAK,CACjC,CACF,GACgB,OAAO,CAAC,EACxB,GAAI,CAACE,EACH,MAAM,IAAI,MACR,uCAAuCF,EAAO,IAAI,WAAWA,EAAO,IAAI,GAC1E,EAEF,IAAMK,EAAWC,EAAyBN,EAAO,KAAMA,EAAO,IAAI,EAClE,MAAO,CACL,GAAGE,EACH,GAAIG,EAAW,CAAE,SAAAA,CAAS,EAAI,CAAC,CACjC,CACF,CACF,EAEA,SAASN,EAAwBD,EAG/B,CACA,IAAMK,EAAmBC,EAA0BN,CAAK,EACxD,GAAIK,EAAiB,SAAW,EAC9B,MAAO,CAAC,EAEV,IAAMI,EAA0B,CAAC,EAC7BC,EAAW,EACf,QAAWC,KAAYN,EACrBI,EAAOE,EAAS,IAAI,GAAKF,EAAOE,EAAS,IAAI,GAAK,GAAK,EACnDA,EAAS,eAAcD,GAAY,GAEzC,MAAO,CACL,qBAAsBD,EACtB,SAAU,CACR,eAAgBJ,EAAiB,OACjC,qBAAsBI,EACtB,UAAWC,CACb,CACF,CACF,CCnFO,SAASE,EAAqBC,EAGnC,CACA,IAAMC,EAAQD,EAAE,MAAM,GAAG,EACzB,GAAIC,EAAM,SAAW,GAAK,CAACA,EAAM,CAAC,GAAK,CAACA,EAAM,CAAC,EAC7C,MAAM,IAAIC,EACR,mBACA,2DAA2DF,CAAC,IAC5D,CACF,EAEF,MAAO,CAAE,SAAUC,EAAM,CAAC,EAAG,KAAMA,EAAM,CAAC,CAAE,CAC9C,CAEO,IAAME,EAAN,KAA6B,CAClC,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,KAAKC,EAGqC,CAC9C,IAAMC,EAAgC,CAAC,EACvC,OAAID,GAAQ,MAAKC,EAAM,IAAMD,EAAO,KAChCA,GAAQ,WAAUC,EAAM,SAAWD,EAAO,UAIvC,CAAE,QAHI,MAAM,KAAK,OAAO,SAAS,MAAO,iBAAkB,CAC/D,MAAAC,CACF,CAAC,GACoB,MAAQ,CAAC,CAAE,CAClC,CAEA,MAAM,MAAmD,CAKvD,MAAO,CAAE,MAJI,MAAM,KAAK,OAAO,SAC7B,MACA,qBACF,GACmB,MAAQ,CAAC,CAAE,CAChC,CAEA,MAAM,IAAIC,EAAwC,CAChD,GAAM,CAAE,SAAAC,EAAU,KAAAC,CAAK,EAAIV,EAAqBQ,CAAE,EAC5CG,EAAI,mBAAmBF,CAAQ,EAC/B,EAAI,mBAAmBC,CAAI,EAK3BE,GAJO,MAAM,KAAK,OAAO,SAC7B,MACA,kBAAkBD,CAAC,IAAI,CAAC,EAC1B,GACiB,OAAO,CAAC,EACzB,GAAI,CAACC,EACH,MAAM,IAAIT,EACR,YACA,0CAA0CK,CAAE,GAC5C,CACF,EAEF,OAAOI,CACT,CAEA,MAAM,KAAKJ,EAAYK,EAA0C,CAC/D,GAAM,CAAE,SAAAJ,EAAU,KAAAC,CAAK,EAAIV,EAAqBQ,CAAE,EAC5CG,EAAI,mBAAmBF,CAAQ,EAC/BK,EAAI,mBAAmBJ,CAAI,EAE3B,EAAIG,EAAK,MAAM,GAAG,EAAE,IAAI,kBAAkB,EAAE,KAAK,GAAG,EAKpDE,GAJO,MAAM,KAAK,OAAO,SAC7B,MACA,kBAAkBJ,CAAC,IAAIG,CAAC,UAAU,CAAC,EACrC,GACgB,OAAO,CAAC,EACxB,GAAI,CAACC,EACH,MAAM,IAAIZ,EACR,YACA,2CAA2CK,CAAE,SAASK,CAAI,GAC1D,CACF,EAEF,OAAOE,CACT,CACF,ECjHO,IAAMC,EAAN,KAAuB,CAC5B,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,OAAOC,EAAgD,CAC3D,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,2BAA4B,CAC9D,KAAM,CACJ,SAAUA,EAAO,SACjB,KAAMA,EAAO,KACb,QAASA,EAAO,QAChB,UAAWA,EAAO,SACpB,CACF,CAAC,CACH,CAEA,MAAM,IAAIA,EAAkD,CAC1D,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,+BAAgC,CAClE,KAAM,CAAE,WAAYA,EAAO,UAAW,CACxC,CAAC,CACH,CAEA,MAAM,MAAMA,EAAkD,CAC5D,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,iCAAkC,CACpE,KAAM,CAAE,WAAYA,EAAO,UAAW,CACxC,CAAC,CACH,CACF,EC5BO,IAAMC,EAAN,KAAoB,CACzB,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,KAAKC,EAAqC,CAC9C,KAAK,OAAO,aAAa,EACzB,MAAM,KAAK,OAAO,SAAS,OAAQ,gBAAiB,CAClD,KAAM,CACJ,MAAOA,EAAO,MACd,QAASA,EAAO,OAClB,CACF,CAAC,CACH,CACF,ECZO,IAAMC,EAAN,KAAyB,CAC9B,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,QAAQC,EAAgD,CAC5D,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,qBAAsB,CACvD,MAAO,CACL,IAAKA,EAAO,IACZ,SAAUA,EAAO,SACjB,MAAOA,EAAO,MACd,SAAUA,EAAO,SACjB,iBAAkBA,EAAO,gBACzB,mBAAoBA,EAAO,gBAC7B,CACF,CAAC,CACH,CACF,EChBO,IAAMC,EAAN,KAAmB,CACxB,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,IAA2B,CAC/B,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,YAAY,CACjD,CACF,ECEO,IAAMC,EAAN,KAAsB,CAC3B,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,UAAsC,CAC1C,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,0BAA0B,CAG/D,CAEA,MAAM,UAAUC,EAA8C,CAC5D,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,4BAA6B,CAC9D,MAAO,CAAE,UAAAA,CAAU,CACrB,CAAC,CACH,CAEA,MAAM,OAAOC,EAKe,CAC1B,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,yBAA0B,CAC3D,MAAO,CACL,UAAWA,EAAO,UAClB,OAAQA,EAAO,OACf,MAAOA,EAAO,MACd,MAAOA,EAAO,KAChB,CACF,CAAC,CACH,CAEA,MAAM,cAAcD,EAAmD,CACrE,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,gCAAiC,CAClE,MAAO,CAAE,UAAAA,CAAU,CACrB,CAAC,CACH,CAEA,MAAM,cAAcC,EAKO,CACzB,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,iCAAkC,CACnE,MAAO,CACL,UAAWA,EAAO,UAClB,UAAWA,EAAO,UAClB,QAASA,EAAO,QAChB,QAASA,EAAO,OAClB,CACF,CAAC,CACH,CAEA,MAAM,WAAsC,CAC1C,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SACjB,MACA,4BACF,CACF,CAEA,MAAM,UAAUA,EAOiB,CAC/B,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,4BAA6B,CAC/D,KAAMA,CACR,CAAC,CACH,CAEA,MAAM,YACJC,EACqC,CACrC,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,8BAA+B,CACjE,KAAM,CAAE,eAAAA,CAAe,CACzB,CAAC,CACH,CAEA,MAAM,QAAQD,EAMmB,CAC/B,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,0BAA2B,CAC7D,KAAMA,CACR,CAAC,CACH,CAEA,MAAM,gBAAgBE,EAAuD,CAC3E,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,6BAA8B,CAC/D,KAAMA,CACR,CAAC,CACH,CACF,EClHO,IAAMC,EAAN,KAAwB,CAC7B,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAGpB,MAAM,QAA2C,CAC/C,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SACjB,OACA,2BACF,CACF,CAGA,MAAM,QAA2C,CAC/C,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SACjB,MACA,2BACF,CACF,CACF,ECnBO,IAAMC,EAAN,KAA4B,CACjC,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAQpB,MAAM,aACJC,EAC2C,CAC3C,KAAK,OAAO,aAAa,EACzB,IAAMC,EAAO,oBAAoB,mBAAmBD,EAAO,QAAQ,CAAC,IAAI,mBAAmBA,EAAO,IAAI,CAAC,iBACvG,OAAO,KAAK,OAAO,SAAS,MAAOC,EAAM,CACvC,MAAOC,EAAWF,CAAM,CAC1B,CAAC,CACH,CAOA,MAAM,SACJA,EACuC,CACvC,KAAK,OAAO,aAAa,EACzB,IAAMC,EAAO,gBAAgB,mBAAmBD,EAAO,QAAQ,CAAC,IAAI,mBAAmBA,EAAO,IAAI,CAAC,iBACnG,OAAO,KAAK,OAAO,SAAS,MAAOC,EAAM,CACvC,MAAOC,EAAWF,CAAM,CAC1B,CAAC,CACH,CACF,EAEA,SAASE,EAAWF,EAAwD,CAC1E,IAAMG,EAA4B,CAAC,EACnC,OAAIH,EAAO,UAASG,EAAE,QAAUH,EAAO,SACnCA,EAAO,SAAQG,EAAE,OAASH,EAAO,QACjCA,EAAO,aAAe,QAAaA,EAAO,WAAa,IACzDG,EAAE,WAAa,OAAOH,EAAO,UAAU,GAErCA,EAAO,QAAU,QAAaA,EAAO,MAAQ,IAC/CG,EAAE,MAAQ,OAAOH,EAAO,KAAK,GAE3BA,EAAO,SAAQG,EAAE,OAASH,EAAO,QAC9BG,CACT,CChCO,IAAMC,EAAN,KAAgC,CACrC,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAQpB,MAAM,kBACJC,EACsC,CACtC,KAAK,OAAO,aAAa,EACzB,IAAMC,EAAO,uCAAuC,mBAAmBD,EAAO,QAAQ,CAAC,IAAI,mBAAmBA,EAAO,IAAI,CAAC,GAC1H,OAAO,KAAK,OAAO,SACjB,OACAC,CACF,CACF,CAMA,MAAM,oBACJD,EACwC,CACxC,KAAK,OAAO,aAAa,EACzB,IAAMC,EAAO,uCAAuC,mBAAmBD,EAAO,QAAQ,CAAC,IAAI,mBAAmBA,EAAO,IAAI,CAAC,GAC1H,OAAO,KAAK,OAAO,SACjB,SACAC,CACF,CACF,CAQA,MAAM,cACJD,EAC0C,CAC1C,KAAK,OAAO,aAAa,EACzB,IAAMC,EAAO,mCAAmC,mBAAmBD,EAAO,QAAQ,CAAC,IAAI,mBAAmBA,EAAO,IAAI,CAAC,GACtH,OAAO,KAAK,OAAO,SACjB,OACAC,CACF,CACF,CAMA,MAAM,gBACJD,EACwC,CACxC,KAAK,OAAO,aAAa,EACzB,IAAMC,EAAO,mCAAmC,mBAAmBD,EAAO,QAAQ,CAAC,IAAI,mBAAmBA,EAAO,IAAI,CAAC,GACtH,OAAO,KAAK,OAAO,SACjB,SACAC,CACF,CACF,CAOA,MAAM,KACJD,EAAqC,CAAC,EACC,CACvC,KAAK,OAAO,aAAa,EACzB,IAAME,EAAgC,CAAC,EACvC,OAAIF,EAAO,kBAAoB,SAC7BE,EAAM,gBAAkB,OAAOF,EAAO,eAAe,GAEhD,KAAK,OAAO,SAAS,MAAO,gCAAiC,CAClE,MAAAE,CACF,CAAC,CACH,CACF,ECzFO,IAAMC,EAAN,KAAwC,CAC7C,YAAoBC,EAAoB,CAApB,YAAAA,CAAqB,CAArB,OAEpB,MAAM,QACJC,EACkD,CAClD,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SACjB,MACA,8CACA,CACE,MAAO,CAAE,WAAYA,EAAO,UAAW,CACzC,CACF,CACF,CAEA,MAAM,KACJA,EAC+C,CAC/C,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,MAAO,sCAAuC,CACxE,MAAO,CAAE,WAAYA,EAAO,UAAW,CACzC,CAAC,CACH,CAEA,MAAM,UACJA,EACmD,CACnD,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SAAS,OAAQ,sCAAuC,CACzE,SAAUC,EAAaD,CAAM,CAC/B,CAAC,CACH,CAEA,MAAM,YACJA,EACmD,CACnD,YAAK,OAAO,aAAa,EAClB,KAAK,OAAO,SACjB,SACA,sCACA,CACE,SAAUC,EAAaD,CAAM,CAC/B,CACF,CACF,CACF,EAEA,SAASC,EAAaD,EAAwD,CAC5E,MAAO,iBAAiBE,EAAUF,EAAO,UAAU,CAAC,kBAAkB,KAAK,UAAUA,EAAO,WAAW,CAAC,gBAAgBE,EAAUF,EAAO,SAAS,CAAC,GACrJ,CAEA,SAASE,EAAUC,EAAgC,CACjD,GAAI,OAAOA,GAAU,SAAU,CAC7B,GACE,CAAC,OAAO,UAAUA,CAAK,GACvBA,GAAS,GACT,CAAC,OAAO,cAAcA,CAAK,EAE3B,MAAM,IAAIC,EACR,mBACA,iGACA,CACF,EAEF,OAAO,OAAOD,CAAK,CACrB,CACA,GAAI,CAAC,aAAa,KAAKA,CAAK,EAC1B,MAAM,IAAIC,EACR,mBACA,kEACA,CACF,EAEF,OAAOD,CACT,CCxEA,IAAME,EAAmB,8BACZC,EAA0B,kCAe1BC,EAAN,KAAiB,CACb,QACA,cACA,aACA,OAED,IACA,KACA,QACA,SACA,SACA,KACA,YACA,gBACA,UACA,OACA,YACA,MACA,SACA,WACA,eACA,mBACA,2BAER,YAAYC,EAA0B,CACpC,KAAK,QAAUA,EAAO,SAAWH,EACjC,KAAK,cAAgBG,EAAO,eAAiBF,EAC7C,KAAK,aAAeE,EAAO,aAC3B,KAAK,OAASA,EAAO,MACvB,CAEA,IAAI,IAAiB,CACnB,OAAQ,KAAK,MAAQ,IAAIC,EAAW,IAAI,CAC1C,CACA,IAAI,KAAmB,CACrB,OAAQ,KAAK,OAAS,IAAIC,EAAY,IAAI,CAC5C,CACA,IAAI,QAAyB,CAC3B,OAAQ,KAAK,UAAY,IAAIC,EAAe,IAAI,CAClD,CACA,IAAI,SAA2B,CAC7B,OAAQ,KAAK,WAAa,IAAIC,EAAgB,IAAI,CACpD,CACA,IAAI,SAA2B,CAC7B,OAAQ,KAAK,WAAa,IAAIC,EAAgB,IAAI,CACpD,CACA,IAAI,KAAuB,CACzB,OAAQ,KAAK,OAAS,IAAIC,EAAgB,IAAI,CAChD,CACA,IAAI,YAAiC,CACnC,OAAQ,KAAK,cAAgB,IAAIC,EAAmB,IAAI,CAC1D,CACA,IAAI,gBAAyC,CAC3C,OAAQ,KAAK,kBAAoB,IAAIC,EAAuB,IAAI,CAClE,CACA,IAAI,UAA6B,CAC/B,OAAQ,KAAK,YAAc,IAAIC,EAAiB,IAAI,CACtD,CACA,IAAI,OAAuB,CACzB,OAAQ,KAAK,SAAW,IAAIC,EAAc,IAAI,CAChD,CACA,IAAI,YAAiC,CACnC,OAAQ,KAAK,cAAgB,IAAIC,EAAmB,IAAI,CAC1D,CACA,IAAI,MAAqB,CACvB,OAAQ,KAAK,QAAU,IAAIC,EAAa,IAAI,CAC9C,CACA,IAAI,SAA2B,CAC7B,OAAQ,KAAK,WAAa,IAAIC,EAAgB,IAAI,CACpD,CACA,IAAI,WAA+B,CACjC,OAAQ,KAAK,aAAe,IAAIC,EAAkB,IAAI,CACxD,CACA,IAAI,eAAuC,CACzC,OAAQ,KAAK,iBAAmB,IAAIC,EAAsB,IAAI,CAChE,CACA,IAAI,mBAA+C,CACjD,OAAQ,KAAK,qBAAuB,IAAIC,EAA0B,IAAI,CACxE,CACA,IAAI,2BAA+D,CACjE,OAAQ,KAAK,6BACX,IAAIC,EAAkC,IAAI,CAC9C,CAEA,cAAqB,CACnB,GAAI,CAAC,KAAK,cAAgB,CAAC,KAAK,OAC9B,MAAM,IAAIC,EACR,kBACA,8EACA,GACF,CAEJ,CAEA,MAAM,SACJC,EACAC,EACAC,EACkB,CAElB,IAAIC,EAAM,GADMD,GAAS,SAAW,KAAK,OACrB,GAAGD,CAAI,GAE3B,GAAIC,GAAS,MAAO,CAClB,IAAME,EAAS,IAAI,gBACnB,OAAW,CAACC,EAAKC,CAAK,IAAK,OAAO,QAAQJ,EAAQ,KAAK,EAC1BI,GAAU,MACnCF,EAAO,IAAIC,EAAK,OAAOC,CAAK,CAAC,EAGjC,IAAMC,EAAKH,EAAO,SAAS,EACvBG,IACFJ,GAAO,IAAII,CAAE,GAEjB,CAEA,IAAMC,EAAkC,CAAC,EACpCN,GAAS,SACR,KAAK,aACPM,EAAQ,mBAAmB,EAAI,KAAK,aAC3B,KAAK,SACdA,EAAQ,gBAAgB,EAAI,KAAK,SAIrC,IAAIC,EACAP,GAAS,UAAY,QACvBM,EAAQ,cAAc,EAAI,2BAC1BC,EAAYP,EAAQ,SACXA,GAAS,WAAa,QAC/BM,EAAQ,cAAc,EAAI,mBAC1BC,EAAYP,EAAQ,UACXA,GAAS,OAAS,SAC3BM,EAAQ,cAAc,EAAI,mBAC1BC,EAAY,KAAK,UAAUP,EAAQ,IAAI,GAGzC,IAAIQ,EACJ,GAAI,CACFA,EAAW,MAAM,MAAMP,EAAK,CAC1B,OAAAH,EACA,QAAAQ,EACA,KAAMC,CACR,CAAC,CACH,OAASE,EAAK,CACZ,MAAM,IAAIZ,EACR,gBACAY,aAAe,MAAQA,EAAI,QAAU,yBACrC,CACF,CACF,CAEA,GAAI,CAACD,EAAS,GAAI,CAEhB,IAAME,EAAW,MAAMF,EAAS,KAAK,EAAE,MAAM,IAAM,EAAE,EAErD,IADoBA,EAAS,QAAQ,IAAI,cAAc,GAAK,IAC5C,SAAS,kBAAkB,GAAKE,EAC9C,GAAI,CACF,IAAMC,EAAO,KAAK,MAAMD,CAAQ,EAGhC,GAAIC,EAAK,MACP,MAAM,IAAId,EACRc,EAAK,MAAM,MAAQ,UACnBA,EAAK,MAAM,SAAW,QAAQH,EAAS,MAAM,GAC7CA,EAAS,MACX,CAEJ,OAASI,EAAG,CACV,GAAIA,aAAaf,EAAW,MAAMe,CAEpC,CAEF,MAAM,IAAIf,EACR,UACA,QAAQW,EAAS,MAAM,KAAKE,EAAS,MAAM,EAAG,GAAG,CAAC,GAClDF,EAAS,MACX,CACF,CAGA,GAAIA,EAAS,SAAW,IACtB,OAGF,IAAMK,EAAcL,EAAS,QAAQ,IAAI,cAAc,GAAK,GAC5D,OACEK,EAAY,SAAS,0BAA0B,GAC/CA,EAAY,SAAS,QAAQ,EAEtBL,EAAS,YAAY,EAGvBA,EAAS,KAAK,CACvB,CACF,ECnOO,IAAMM,EAC0B","names":["browser_exports","__export","AlvaClient","AlvaError","VERSION","AlvaError","code","message","status","FsResource","client","params","result","text","RunResource","client","params","DeployResource","client","params","id","body","ReleaseResource","client","params","SecretsResource","client","params","encoded","SdkDocsResource","client","params","encoded","SKILL_ENDPOINT_METADATA","getSkillEndpointMetadata","skill","file","item","listSkillEndpointMetadata","DataSkillsResource","client","skill","metadataSummaryForSkill","params","encoded","doc","endpointMetadata","listSkillEndpointMetadata","metadata","getSkillEndpointMetadata","counts","proCount","endpoint","parsePlaybookSkillId","s","parts","AlvaError","PlaybookSkillsResource","client","params","query","id","username","name","u","meta","path","n","out","CommentsResource","client","params","RemixResource","client","params","ScreenshotResource","client","params","UserResource","client","TradingResource","client","accountId","params","subscriptionId","rules","ArraysJwtResource","client","NotificationsResource","client","params","path","buildQuery","q","PushSubscriptionsResource","client","params","path","query","ChannelGroupSubscriptionsResource","client","params","mutationBody","idLiteral","value","AlvaError","DEFAULT_BASE_URL","DEFAULT_ARRAYS_BASE_URL","AlvaClient","config","FsResource","RunResource","DeployResource","ReleaseResource","SecretsResource","SdkDocsResource","DataSkillsResource","PlaybookSkillsResource","CommentsResource","RemixResource","ScreenshotResource","UserResource","TradingResource","ArraysJwtResource","NotificationsResource","PushSubscriptionsResource","ChannelGroupSubscriptionsResource","AlvaError","method","path","options","url","params","key","value","qs","headers","fetchBody","response","err","bodyText","data","e","contentType","VERSION"]}
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/feed.ts","../src/resources/secrets.ts","../src/resources/sdkDocs.ts","../src/resources/skillTiers.ts","../src/resources/dataSkills.ts","../src/resources/playbookSkills.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/resources/channelGroupSubscriptions.ts","../src/client.ts","../src/index.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\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 CronjobTriggerResponse,\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 /**\n * Fire the cronjob workflow once, immediately, bypassing the schedule.\n * Async — returns the Hatchet workflow run id at enqueue. The\n * `cronjob_runs` row appears only after the worker finishes the run;\n * callers verify completion by polling `listRuns({cronjob_id})` and\n * matching `runs[].workflow_run_id` against the returned id.\n *\n * Surfaces backend status as HTTP errors (handled by AlvaClient):\n * - 404 not found / cross-user\n * - 412 cronjob is paused (resume before triggering)\n * - 503 worker workflow handle not yet connected (startup race)\n */\n async trigger(params: { id: number }): Promise<CronjobTriggerResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'POST',\n `/api/v1/deploy/cronjob/${params.id}/trigger`\n ) as Promise<CronjobTriggerResponse>;\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 skill_id: params.skill_id,\n tags: params.tags,\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 readme_url: params.readme_url,\n },\n }) as Promise<PlaybookReleaseResponse>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { FeedDeleteRequest, FeedDeleteResponse } from '../types.js';\n\n/**\n * Feed lifecycle management. Backed by alva-gateway REST (mirrors the\n * GraphQL surface in `pkg/schema/feed.graphql`).\n */\nexport class FeedResource {\n constructor(private client: AlvaClient) {}\n\n /**\n * Soft-delete a feed and all its active majors. Cascades:\n * - all active feed_majors are soft-deleted in the same transaction\n * - associated producer cronjobs are removed best-effort (the cronjob\n * scavenger reconciles any leftover rows on its next sweep)\n *\n * Auth: caller must own the feed (uid match), enforced by the backend.\n */\n async delete(params: FeedDeleteRequest): Promise<FeedDeleteResponse> {\n this.client._requireAuth();\n if (!Number.isInteger(params.id) || params.id <= 0) {\n throw new Error('feed id must be a positive integer');\n }\n return this.client._request(\n 'DELETE',\n `/api/v1/feed/${encodeURIComponent(String(params.id))}`\n ) as Promise<FeedDeleteResponse>;\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","export type SkillEndpointTier = 'public' | 'alternative' | 'unstructured';\n\nexport interface SkillEndpointMetadata {\n skill: string;\n file: string;\n method: string;\n path: string;\n tier: SkillEndpointTier;\n required_subscription_tier: 'free' | 'pro';\n access: 'free_and_pro' | 'pro_only';\n pro_required: boolean;\n}\n\nconst SKILL_ENDPOINT_METADATA: SkillEndpointMetadata[] = [\n {\n skill: 'arrays-data-api-spot-market-price-and-volume',\n file: 'crypto-detail',\n method: 'GET',\n path: '/api/v1/crypto/detail',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'fear-greed-index',\n method: 'GET',\n path: '/api/v1/crypto/fear-greed-index',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-futures-data',\n file: 'funding-rate',\n method: 'GET',\n path: '/api/v1/crypto/funding-rate',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-spot-market-price-and-volume',\n file: 'crypto-futures-ohlcv',\n method: 'GET',\n path: '/api/v1/crypto/futures/ohlcv',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-spot-market-price-and-volume',\n file: 'crypto-kline',\n method: 'GET',\n path: '/api/v1/crypto/kline',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'list',\n method: 'GET',\n path: '/api/v1/crypto/list',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-futures-data',\n file: 'long-short-ratio',\n method: 'GET',\n path: '/api/v1/crypto/long-short-ratio',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'crypto-market-cap',\n method: 'GET',\n path: '/api/v1/crypto/market-cap',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'market-metrics',\n method: 'GET',\n path: '/api/v1/crypto/market-metrics',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-spot-market-price-and-volume',\n file: 'crypto-ohlcv',\n method: 'GET',\n path: '/api/v1/crypto/ohlcv',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-futures-data',\n file: 'open-interest',\n method: 'GET',\n path: '/api/v1/crypto/open-interest',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'screener-metrics',\n method: 'GET',\n path: '/api/v1/crypto/screener/metrics',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'screener-metrics-timerange',\n method: 'GET',\n path: '/api/v1/crypto/screener/metrics/timerange',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'trading-pair',\n method: 'GET',\n path: '/api/v1/crypto/trading-pair',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-etf-fundamentals',\n file: 'country-weightings',\n method: 'GET',\n path: '/api/v1/etf/country-weightings',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-etf-fundamentals',\n file: 'holdings',\n method: 'GET',\n path: '/api/v1/etf/holdings',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-etf-fundamentals',\n file: 'info',\n method: 'GET',\n path: '/api/v1/etf/info',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-etf-fundamentals',\n file: 'sector-weightings',\n method: 'GET',\n path: '/api/v1/etf/sector-weightings',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-macro-and-economics',\n file: 'macro-commodity-historical',\n method: 'GET',\n path: '/api/v1/macro/commodity/historical',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-macro-and-economics',\n file: 'macro-commodity-real-time',\n method: 'GET',\n path: '/api/v1/macro/commodity/real-time',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-macro-and-economics',\n file: 'macro-commodity-symbol-list',\n method: 'GET',\n path: '/api/v1/macro/commodity/symbols',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-macro-and-economics',\n file: 'economic-indicators',\n method: 'GET',\n path: '/api/v1/macro/economic-indicators',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-macro-and-economics',\n file: 'macro-forex-historical',\n method: 'GET',\n path: '/api/v1/macro/forex/historical',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-macro-and-economics',\n file: 'macro-forex-real-time',\n method: 'GET',\n path: '/api/v1/macro/forex/real-time',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-macro-and-economics',\n file: 'macro-forex-symbol-list',\n method: 'GET',\n path: '/api/v1/macro/forex/symbols',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-macro-and-economics',\n file: 'macro-index-historical',\n method: 'GET',\n path: '/api/v1/macro/index/historical',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-macro-and-economics',\n file: 'macro-index-real-time',\n method: 'GET',\n path: '/api/v1/macro/index/real-time',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-macro-and-economics',\n file: 'rates',\n method: 'GET',\n path: '/api/v1/macro/treasury-rates',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-fundamentals',\n file: 'company-balance-sheets',\n method: 'GET',\n path: '/api/v1/stocks/company/balance-sheets',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-fundamentals',\n file: 'company-cashflow-statements',\n method: 'GET',\n path: '/api/v1/stocks/company/cashflow-statements',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-fundamentals',\n file: 'company-detail',\n method: 'GET',\n path: '/api/v1/stocks/company/detail',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-fundamentals',\n file: 'company-income-statements',\n method: 'GET',\n path: '/api/v1/stocks/company/income-statements',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-fundamentals',\n file: 'company-kpi',\n method: 'GET',\n path: '/api/v1/stocks/company/kpi',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-events',\n file: 'crowdfunding-offerings',\n method: 'GET',\n path: '/api/v1/stocks/crowdfunding/offerings',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-events',\n file: 'dividends',\n method: 'GET',\n path: '/api/v1/stocks/dividends',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-events',\n file: 'earnings-calendar',\n method: 'GET',\n path: '/api/v1/stocks/earnings-calendar',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-events',\n file: 'equity-offering',\n method: 'GET',\n path: '/api/v1/stocks/equity-offering',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-stock-metrics',\n file: 'financial-metrics',\n method: 'GET',\n path: '/api/v1/stocks/financial-metrics',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-fundamentals',\n file: 'fiscal-dates',\n method: 'GET',\n path: '/api/v1/stocks/fiscal-dates',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-fundamentals',\n file: 'fiscal-dates-range',\n method: 'GET',\n path: '/api/v1/stocks/fiscal-dates/range',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-events',\n file: 'ipo-calendar',\n method: 'GET',\n path: '/api/v1/stocks/ipo-calendar',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-events',\n file: 'ipo-confirmed-calendar',\n method: 'GET',\n path: '/api/v1/stocks/ipo-confirmed-calendar',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-spot-market-price-and-volume',\n file: 'stocks-kline',\n method: 'GET',\n path: '/api/v1/stocks/kline',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-stock-metrics',\n file: 'market-metrics',\n method: 'GET',\n path: '/api/v1/stocks/market-metrics',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-events',\n file: 'mergers-acquisitions',\n method: 'GET',\n path: '/api/v1/stocks/mergers-acquisitions',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-fundamentals',\n file: 'outstanding-shares',\n method: 'GET',\n path: '/api/v1/stocks/outstanding-shares',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-stock-metrics',\n file: 'ratings',\n method: 'GET',\n path: '/api/v1/stocks/ratings',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-stock-screener',\n file: 'basic-info-screener',\n method: 'GET',\n path: '/api/v1/stocks/screener/basic-info/{sub}',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-stock-screener',\n file: 'event-screener',\n method: 'GET',\n path: '/api/v1/stocks/screener/events',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-stock-screener',\n file: 'screener-financial-metrics',\n method: 'GET',\n path: '/api/v1/stocks/screener/financial-metrics',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-stock-screener',\n file: 'screener-financial-metrics-timerange',\n method: 'GET',\n path: '/api/v1/stocks/screener/financial-metrics/timerange',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-stock-screener',\n file: 'screener-technical-metrics',\n method: 'GET',\n path: '/api/v1/stocks/screener/technical-metrics',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-stock-screener',\n file: 'screener-technical-metrics-timerange',\n method: 'GET',\n path: '/api/v1/stocks/screener/technical-metrics/timerange',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-events',\n file: 'sec-earnings-release',\n method: 'GET',\n path: '/api/v1/stocks/sec-earnings-release',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-fundamentals',\n file: 'shares-float',\n method: 'GET',\n path: '/api/v1/stocks/shares-float',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-equity-events',\n file: 'splits',\n method: 'GET',\n path: '/api/v1/stocks/splits',\n tier: 'public',\n required_subscription_tier: 'free',\n access: 'free_and_pro',\n pro_required: false,\n },\n {\n skill: 'arrays-data-api-crypto-exchange-flow',\n file: 'exchange-flows',\n method: 'GET',\n path: '/api/v1/crypto/exchange-flows',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-company-crypto-holdings',\n file: 'crypto-holdings',\n method: 'GET',\n path: '/api/v1/crypto/holdings',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'metrics-inflow-cdd',\n method: 'GET',\n path: '/api/v1/crypto/metrics/inflow-cdd',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'metrics-leverage-ratio',\n method: 'GET',\n path: '/api/v1/crypto/metrics/leverage-ratio',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'metrics-miner-to-exchange',\n method: 'GET',\n path: '/api/v1/crypto/metrics/miner-to-exchange',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'metrics-mvrv',\n method: 'GET',\n path: '/api/v1/crypto/metrics/mvrv',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'metrics-nupl',\n method: 'GET',\n path: '/api/v1/crypto/metrics/nupl',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'metrics-puell-multiple',\n method: 'GET',\n path: '/api/v1/crypto/metrics/puell-multiple',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'metrics-realized-price',\n method: 'GET',\n path: '/api/v1/crypto/metrics/realized-price',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'metrics-sopr',\n method: 'GET',\n path: '/api/v1/crypto/metrics/sopr',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'metrics-ssr',\n method: 'GET',\n path: '/api/v1/crypto/metrics/ssr',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'metrics-whale-ratio',\n method: 'GET',\n path: '/api/v1/crypto/metrics/whale-ratio',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'crypto-supply',\n method: 'GET',\n path: '/api/v1/crypto/supply',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-futures-data',\n file: 'taker-buy-sell-volume',\n method: 'GET',\n path: '/api/v1/crypto/taker-buy-sell-volume',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-crypto-metrics-and-screener',\n file: 'unlock-events',\n method: 'GET',\n path: '/api/v1/crypto/unlock-events',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-etf-fundamentals',\n file: 'flow',\n method: 'GET',\n path: '/api/v1/etf/flow',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-options',\n file: 'contracts',\n method: 'GET',\n path: '/api/v1/options/contracts',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-options',\n file: 'kline',\n method: 'GET',\n path: '/api/v1/options/kline',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-equity-fundamentals',\n file: 'company-executives',\n method: 'GET',\n path: '/api/v1/stocks/company/executives',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-equity-estimates-and-targets',\n file: 'company-price-target-consensus',\n method: 'GET',\n path: '/api/v1/stocks/company/price-target-consensus',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-equity-estimates-and-targets',\n file: 'company-price-target-news',\n method: 'GET',\n path: '/api/v1/stocks/company/price-target-news',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-equity-estimates-and-targets',\n file: 'company-price-target-summary',\n method: 'GET',\n path: '/api/v1/stocks/company/price-target-summary',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-equity-ownership-and-flow',\n file: 'congress-recent-trades',\n method: 'GET',\n path: '/api/v1/stocks/congress/recent-trades',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-equity-ownership-and-flow',\n file: 'senate-trade',\n method: 'GET',\n path: '/api/v1/stocks/company/senate-trade',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-stock-metrics',\n file: 'darkpool',\n method: 'GET',\n path: '/api/v1/stocks/darkpool',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-equity-estimates-and-targets',\n file: 'estimates-guidance',\n method: 'GET',\n path: '/api/v1/stocks/estimates-guidance',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-equity-ownership-and-flow',\n file: 'insider-transactions',\n method: 'GET',\n path: '/api/v1/stocks/insider/transactions',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-equity-ownership-and-flow',\n file: 'institution-holder',\n method: 'GET',\n path: '/api/v1/stocks/institution-holder',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'activity',\n method: 'GET',\n path: 'polymarket:/activity',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'book',\n method: 'GET',\n path: 'polymarket:/book',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'closed-positions',\n method: 'GET',\n path: 'polymarket:/closed-positions',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'events',\n method: 'GET',\n path: 'polymarket:/events',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'holders',\n method: 'GET',\n path: 'polymarket:/holders',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'markets',\n method: 'GET',\n path: 'polymarket:/markets',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'midpoint',\n method: 'GET',\n path: 'polymarket:/midpoint',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'oi',\n method: 'GET',\n path: 'polymarket:/oi',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'positions',\n method: 'GET',\n path: 'polymarket:/positions',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'price',\n method: 'GET',\n path: 'polymarket:/price',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'prices-history',\n method: 'GET',\n path: 'polymarket:/prices-history',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'public-search',\n method: 'GET',\n path: 'polymarket:/public-search',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'series',\n method: 'GET',\n path: 'polymarket:/series',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'sports',\n method: 'GET',\n path: 'polymarket:/sports',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'spread',\n method: 'GET',\n path: 'polymarket:/spread',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'tags',\n method: 'GET',\n path: 'polymarket:/tags',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'trades',\n method: 'GET',\n path: 'polymarket:/trades',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-polymarket',\n file: 'value',\n method: 'GET',\n path: 'polymarket:/value',\n tier: 'alternative',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-equity-events',\n file: 'earnings-transcript',\n method: 'GET',\n path: '/api/v1/stocks/earnings-transcript',\n tier: 'unstructured',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n {\n skill: 'arrays-data-api-news',\n file: 'market-news',\n method: 'GET',\n path: '/api/v1/stocks/market-news',\n tier: 'unstructured',\n required_subscription_tier: 'pro',\n access: 'pro_only',\n pro_required: true,\n },\n];\n\nexport function getSkillEndpointMetadata(\n skill: string,\n file: string\n): SkillEndpointMetadata | undefined {\n return SKILL_ENDPOINT_METADATA.find(\n (item) => item.skill === skill && item.file === file\n );\n}\n\nexport function listSkillEndpointMetadata(\n skill: string\n): SkillEndpointMetadata[] {\n return SKILL_ENDPOINT_METADATA.filter((item) => item.skill === skill);\n}\n\nexport function countSkillEndpointMetadata(): Record<\n SkillEndpointTier,\n number\n> {\n return { public: 56, alternative: 46, unstructured: 2 };\n}\n","import type { AlvaClient } from '../client.js';\nimport {\n getSkillEndpointMetadata,\n listSkillEndpointMetadata,\n type SkillEndpointMetadata,\n type SkillEndpointTier,\n} from './skillTiers.js';\n\ntype Envelope<T> = { success: boolean; data: T; request_id?: string };\ntype SkillTierCounts = Partial<Record<SkillEndpointTier, number>>;\n\nexport type { SkillEndpointMetadata, SkillEndpointTier };\n\nexport interface SkillMetadata {\n endpoint_count: number;\n endpoint_tier_counts: SkillTierCounts;\n pro_count: number;\n}\n\nexport interface SkillSummary {\n name: string;\n description: string;\n metadata?: SkillMetadata;\n endpoint_tier_counts?: SkillTierCounts;\n}\n\nexport interface SkillDoc {\n name: string;\n description: string;\n content: string;\n metadata?: SkillMetadata | SkillEndpointMetadata;\n endpoint_metadata?: SkillEndpointMetadata[];\n endpoint_tier_counts?: SkillTierCounts;\n}\n\nexport class DataSkillsResource {\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 {\n skills: (res.data ?? []).map((skill) => ({\n ...skill,\n ...metadataSummaryForSkill(skill.name),\n })),\n };\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 const endpointMetadata = listSkillEndpointMetadata(params.name);\n return {\n ...doc,\n ...metadataSummaryForSkill(params.name),\n ...(endpointMetadata.length > 0\n ? { endpoint_metadata: endpointMetadata }\n : {}),\n };\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 const metadata = getSkillEndpointMetadata(params.name, params.file);\n return {\n ...doc,\n ...(metadata ? { metadata } : {}),\n };\n }\n}\n\nfunction metadataSummaryForSkill(skill: string): {\n metadata?: SkillMetadata;\n endpoint_tier_counts?: SkillTierCounts;\n} {\n const endpointMetadata = listSkillEndpointMetadata(skill);\n if (endpointMetadata.length === 0) {\n return {};\n }\n const counts: SkillTierCounts = {};\n let proCount = 0;\n for (const endpoint of endpointMetadata) {\n counts[endpoint.tier] = (counts[endpoint.tier] ?? 0) + 1;\n if (endpoint.pro_required) proCount += 1;\n }\n return {\n endpoint_tier_counts: counts,\n metadata: {\n endpoint_count: endpointMetadata.length,\n endpoint_tier_counts: counts,\n pro_count: proCount,\n },\n };\n}\n","import type { AlvaClient } from '../client.js';\nimport { AlvaError } from '../error.js';\n\ntype Envelope<T> = { success: boolean; data: T; request_id?: string };\n\nexport interface PlaybookSkillSummary {\n username: string;\n name: string;\n description: string;\n tags: string[];\n creator_uid: number;\n updated_at: string;\n}\n\nexport interface PlaybookSkillFileMeta {\n path: string;\n size_bytes: number;\n}\n\nexport interface PlaybookSkillMeta extends PlaybookSkillSummary {\n files: PlaybookSkillFileMeta[];\n}\n\nexport interface PlaybookSkillFile {\n username: string;\n name: string;\n path: string;\n content: string;\n updated_at: string;\n}\n\nexport interface PlaybookSkillTagEntry {\n name: string;\n}\n\n/**\n * Splits \"<user>/<name>\". Throws AlvaError on malformed input.\n */\nexport function parsePlaybookSkillId(s: string): {\n username: string;\n name: string;\n} {\n const parts = s.split('/');\n if (parts.length !== 2 || !parts[0] || !parts[1]) {\n throw new AlvaError(\n 'INVALID_ARGUMENT',\n `playbook skill identifier must be \"<user>/<name>\", got \"${s}\"`,\n 0\n );\n }\n return { username: parts[0], name: parts[1] };\n}\n\nexport class PlaybookSkillsResource {\n constructor(private client: AlvaClient) {}\n\n async list(params?: {\n tag?: string;\n username?: string;\n }): Promise<{ skills: PlaybookSkillSummary[] }> {\n const query: Record<string, string> = {};\n if (params?.tag) query.tag = params.tag;\n if (params?.username) query.username = params.username;\n const res = (await this.client._request('GET', '/api/v1/skills', {\n query,\n })) as Envelope<PlaybookSkillSummary[]>;\n return { skills: res.data ?? [] };\n }\n\n async tags(): Promise<{ tags: PlaybookSkillTagEntry[] }> {\n const res = (await this.client._request(\n 'GET',\n '/api/v1/skills/tags'\n )) as Envelope<PlaybookSkillTagEntry[]>;\n return { tags: res.data ?? [] };\n }\n\n async get(id: string): Promise<PlaybookSkillMeta> {\n const { username, name } = parsePlaybookSkillId(id);\n const u = encodeURIComponent(username);\n const n = encodeURIComponent(name);\n const res = (await this.client._request(\n 'GET',\n `/api/v1/skills/${u}/${n}`\n )) as Envelope<PlaybookSkillMeta[]>;\n const meta = res.data?.[0];\n if (!meta) {\n throw new AlvaError(\n 'NOT_FOUND',\n `empty playbook skills get response for ${id}`,\n 0\n );\n }\n return meta;\n }\n\n async file(id: string, path: string): Promise<PlaybookSkillFile> {\n const { username, name } = parsePlaybookSkillId(id);\n const u = encodeURIComponent(username);\n const n = encodeURIComponent(name);\n // path may contain '/'; encode each segment separately to preserve them\n const p = path.split('/').map(encodeURIComponent).join('/');\n const res = (await this.client._request(\n 'GET',\n `/api/v1/skills/${u}/${n}/files/${p}`\n )) as Envelope<PlaybookSkillFile[]>;\n const out = res.data?.[0];\n if (!out) {\n throw new AlvaError(\n 'NOT_FOUND',\n `empty playbook skills file response for ${id} path ${path}`,\n 0\n );\n }\n return out;\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 compress: params.compress,\n compress_quality: params.compressQuality,\n compress_max_width: params.compressMaxWidth,\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 does not create or revive a push\n * subscription.\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/push-subscriptions/playbook/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}`;\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/push-subscriptions/playbook/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}`;\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/push-subscriptions/feed/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}`;\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/push-subscriptions/feed/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}`;\n return this.client._request(\n 'DELETE',\n path\n ) as Promise<UnsubscribePushTargetResponse>;\n }\n\n /**\n * List the caller's currently active personal push subscriptions.\n * Results are cursor-paginated.\n */\n async list(\n params: PushSubscriptionListParams = {}\n ): Promise<PushSubscriptionListResponse> {\n this.client._requireAuth();\n const query: Record<string, string> = {};\n if (params.first !== undefined && params.first > 0) {\n query.first = String(params.first);\n }\n if (params.cursor) query.cursor = params.cursor;\n return this.client._request('GET', '/api/v1/me/push-subscriptions', {\n query,\n }) as Promise<PushSubscriptionListResponse>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport { AlvaError } from '../error.js';\nimport type {\n ChannelGroupSubscriptionContextResponse,\n ChannelGroupSubscriptionListResponse,\n ChannelGroupSubscriptionMutationParams,\n ChannelGroupSubscriptionMutationResponse,\n ChannelGroupSubscriptionSessionParams,\n} from '../types.js';\n\n/**\n * Group push subscriptions for an external channel session.\n *\n * These APIs subscribe the Telegram/Discord group attached to `session_id`\n * to public feed/playbook push events. Mutations are idempotent no-ops unless\n * the authenticated caller is that group's Alva admin.\n */\nexport class ChannelGroupSubscriptionsResource {\n constructor(private client: AlvaClient) {}\n\n async context(\n params: ChannelGroupSubscriptionSessionParams\n ): Promise<ChannelGroupSubscriptionContextResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n '/api/v1/channel/group-subscriptions/context',\n {\n query: { session_id: params.session_id },\n }\n ) as Promise<ChannelGroupSubscriptionContextResponse>;\n }\n\n async list(\n params: ChannelGroupSubscriptionSessionParams\n ): Promise<ChannelGroupSubscriptionListResponse> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/channel/group-subscriptions', {\n query: { session_id: params.session_id },\n }) as Promise<ChannelGroupSubscriptionListResponse>;\n }\n\n async subscribe(\n params: ChannelGroupSubscriptionMutationParams\n ): Promise<ChannelGroupSubscriptionMutationResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/channel/group-subscriptions', {\n jsonBody: mutationBody(params),\n }) as Promise<ChannelGroupSubscriptionMutationResponse>;\n }\n\n async unsubscribe(\n params: ChannelGroupSubscriptionMutationParams\n ): Promise<ChannelGroupSubscriptionMutationResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'DELETE',\n '/api/v1/channel/group-subscriptions',\n {\n jsonBody: mutationBody(params),\n }\n ) as Promise<ChannelGroupSubscriptionMutationResponse>;\n }\n}\n\nfunction mutationBody(params: ChannelGroupSubscriptionMutationParams): string {\n return `{\"session_id\":${idLiteral(params.session_id)},\"target_type\":${JSON.stringify(params.target_type)},\"target_id\":${idLiteral(params.target_id)}}`;\n}\n\nfunction idLiteral(value: number | string): string {\n if (typeof value === 'number') {\n if (\n !Number.isInteger(value) ||\n value <= 0 ||\n !Number.isSafeInteger(value)\n ) {\n throw new AlvaError(\n 'INVALID_ARGUMENT',\n 'channel group subscription ids must be positive safe integers; pass large int64 ids as strings',\n 0\n );\n }\n return String(value);\n }\n if (!/^[1-9]\\d*$/.test(value)) {\n throw new AlvaError(\n 'INVALID_ARGUMENT',\n 'channel group subscription ids must be positive integer strings',\n 0\n );\n }\n return value;\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 { FeedResource } from './resources/feed.js';\nimport { SecretsResource } from './resources/secrets.js';\nimport { SdkDocsResource } from './resources/sdkDocs.js';\nimport { DataSkillsResource } from './resources/dataSkills.js';\nimport { PlaybookSkillsResource } from './resources/playbookSkills.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';\nimport { ChannelGroupSubscriptionsResource } from './resources/channelGroupSubscriptions.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 /** Raw JSON body, used when callers must preserve int64 numeric literals. */\n jsonBody?: string;\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 _feed?: FeedResource;\n private _secrets?: SecretsResource;\n private _sdk?: SdkDocsResource;\n private _dataSkills?: DataSkillsResource;\n private _playbookSkills?: PlaybookSkillsResource;\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 private _channelGroupSubscriptions?: ChannelGroupSubscriptionsResource;\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 feed(): FeedResource {\n return (this._feed ??= new FeedResource(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 dataSkills(): DataSkillsResource {\n return (this._dataSkills ??= new DataSkillsResource(this));\n }\n get playbookSkills(): PlaybookSkillsResource {\n return (this._playbookSkills ??= new PlaybookSkillsResource(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 get channelGroupSubscriptions(): ChannelGroupSubscriptionsResource {\n return (this._channelGroupSubscriptions ??=\n new ChannelGroupSubscriptionsResource(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?.jsonBody !== undefined) {\n headers['Content-Type'] = 'application/json';\n fetchBody = options.jsonBody;\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 ChannelGroupSubscriptionTargetType,\n ChannelGroupSubscriptionTarget,\n ChannelGroupSubscription,\n ChannelGroupCallerInfo,\n ChannelGroupAdminInfo,\n ChannelGroupSubscriptionSessionParams,\n ChannelGroupSubscriptionMutationParams,\n ChannelGroupSubscriptionContextResponse,\n ChannelGroupSubscriptionListResponse,\n ChannelGroupSubscriptionMutationResponse,\n FeedDeleteRequest,\n FeedDeleteResponse,\n} from './types.js';\nexport type {\n SkillDoc,\n SkillEndpointMetadata,\n SkillEndpointTier,\n SkillMetadata,\n SkillSummary,\n} from './resources/dataSkills.js';\n"],"mappings":"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","names":["browser_exports","__export","AlvaClient","AlvaError","VERSION","AlvaError","code","message","status","FsResource","client","params","result","text","RunResource","client","params","DeployResource","client","params","id","body","ReleaseResource","client","params","FeedResource","client","params","SecretsResource","client","params","encoded","SdkDocsResource","client","params","encoded","SKILL_ENDPOINT_METADATA","getSkillEndpointMetadata","skill","file","item","listSkillEndpointMetadata","DataSkillsResource","client","skill","metadataSummaryForSkill","params","encoded","doc","endpointMetadata","listSkillEndpointMetadata","metadata","getSkillEndpointMetadata","counts","proCount","endpoint","parsePlaybookSkillId","s","parts","AlvaError","PlaybookSkillsResource","client","params","query","id","username","name","u","meta","path","n","out","CommentsResource","client","params","RemixResource","client","params","ScreenshotResource","client","params","UserResource","client","TradingResource","client","accountId","params","subscriptionId","rules","ArraysJwtResource","client","NotificationsResource","client","params","path","buildQuery","q","PushSubscriptionsResource","client","params","path","query","ChannelGroupSubscriptionsResource","client","params","mutationBody","idLiteral","value","AlvaError","DEFAULT_BASE_URL","DEFAULT_ARRAYS_BASE_URL","AlvaClient","config","FsResource","RunResource","DeployResource","ReleaseResource","FeedResource","SecretsResource","SdkDocsResource","DataSkillsResource","PlaybookSkillsResource","CommentsResource","RemixResource","ScreenshotResource","UserResource","TradingResource","ArraysJwtResource","NotificationsResource","PushSubscriptionsResource","ChannelGroupSubscriptionsResource","AlvaError","method","path","options","url","params","key","value","qs","headers","fetchBody","response","err","bodyText","data","e","contentType","VERSION"]}