@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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/error.ts","../src/resources/fs.ts","../src/resources/run.ts","../src/resources/deploy.ts","../src/resources/release.ts","../src/resources/secrets.ts","../src/resources/sdkDocs.ts","../src/resources/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 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":"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","names":["contentType"]}
1
+ {"version":3,"sources":["../src/error.ts","../src/resources/fs.ts","../src/resources/run.ts","../src/resources/deploy.ts","../src/resources/release.ts","../src/resources/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 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":["contentType"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alva-ai/toolkit",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "Alva REST API SDK and CLI — interact with the Alva platform from Node.js, the browser, or the command line.",
5
5
  "type": "module",
6
6
  "exports": {