@alva-ai/toolkit 0.4.3 → 0.7.0-beta.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/skills.ts","../src/resources/comments.ts","../src/resources/remix.ts","../src/resources/screenshot.ts","../src/resources/user.ts","../src/resources/trading.ts","../src/resources/arraysJwt.ts","../src/resources/notifications.ts","../src/resources/pushSubscriptions.ts","../src/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} from '../types.js';\n\nexport class DeployResource {\n constructor(private client: AlvaClient) {}\n\n async create(params: CronjobCreateRequest): Promise<Cronjob> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/deploy/cronjob', {\n body: {\n name: params.name,\n path: params.path,\n cron_expression: params.cron_expression,\n args: params.args,\n push_notify: params.push_notify,\n },\n }) as Promise<Cronjob>;\n }\n\n async list(params?: CronjobListParams): Promise<CronjobListResponse> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/deploy/cronjobs', {\n query: { limit: params?.limit, cursor: params?.cursor },\n }) as Promise<CronjobListResponse>;\n }\n\n async get(params: { id: number }): Promise<Cronjob> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n `/api/v1/deploy/cronjob/${params.id}`\n ) as Promise<Cronjob>;\n }\n\n async update(params: CronjobUpdateRequest): Promise<Cronjob> {\n this.client._requireAuth();\n const { id, ...body } = params;\n return this.client._request('PATCH', `/api/v1/deploy/cronjob/${id}`, {\n body,\n }) as Promise<Cronjob>;\n }\n\n async delete(params: { id: number }): Promise<void> {\n this.client._requireAuth();\n await this.client._request('DELETE', `/api/v1/deploy/cronjob/${params.id}`);\n }\n\n async pause(params: { id: number }): Promise<void> {\n this.client._requireAuth();\n await this.client._request(\n 'POST',\n `/api/v1/deploy/cronjob/${params.id}/pause`\n );\n }\n\n async resume(params: { id: number }): Promise<void> {\n this.client._requireAuth();\n await this.client._request(\n 'POST',\n `/api/v1/deploy/cronjob/${params.id}/resume`\n );\n }\n\n async listRuns(\n params: CronjobRunsListParams\n ): Promise<CronjobRunsListResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n `/api/v1/deploy/cronjob/${params.cronjob_id}/runs`,\n {\n query: { first: params.first, cursor: params.cursor },\n }\n ) as Promise<CronjobRunsListResponse>;\n }\n\n async getRunLogs(params: {\n cronjob_id: number;\n run_id: number;\n }): Promise<CronjobRunLogsResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n `/api/v1/deploy/cronjob/${params.cronjob_id}/runs/${params.run_id}/logs`\n ) as Promise<CronjobRunLogsResponse>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n FeedReleaseRequest,\n FeedReleaseResponse,\n PlaybookDraftRequest,\n PlaybookDraftResponse,\n PlaybookReleaseRequest,\n PlaybookReleaseResponse,\n} from '../types.js';\n\nexport class ReleaseResource {\n constructor(private client: AlvaClient) {}\n\n async feed(params: FeedReleaseRequest): Promise<FeedReleaseResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/release/feed', {\n body: {\n name: params.name,\n version: params.version,\n cronjob_id: params.cronjob_id,\n view_json: params.view_json,\n description: params.description,\n changelog: params.changelog,\n },\n }) as Promise<FeedReleaseResponse>;\n }\n\n async playbookDraft(\n params: PlaybookDraftRequest\n ): Promise<PlaybookDraftResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/draft/playbook', {\n body: {\n name: params.name,\n display_name: params.display_name,\n description: params.description,\n feeds: params.feeds,\n trading_symbols: params.trading_symbols,\n },\n }) as Promise<PlaybookDraftResponse>;\n }\n\n async playbook(\n params: PlaybookReleaseRequest\n ): Promise<PlaybookReleaseResponse> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/release/playbook', {\n body: {\n name: params.name,\n version: params.version,\n feeds: params.feeds,\n changelog: params.changelog,\n },\n }) as Promise<PlaybookReleaseResponse>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { CreateSecretRequest, Secret, SecretMetadata } from '../types.js';\n\nexport class SecretsResource {\n constructor(private client: AlvaClient) {}\n\n async create(params: CreateSecretRequest): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/secrets', {\n body: { name: params.name, value: params.value },\n });\n }\n\n async list(): Promise<{ secrets: SecretMetadata[] }> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/secrets') as Promise<{\n secrets: SecretMetadata[];\n }>;\n }\n\n async get(params: { name: string }): Promise<Secret> {\n this.client._requireAuth();\n const encoded = encodeURIComponent(params.name);\n return this.client._request(\n 'GET',\n `/api/v1/secrets/${encoded}`\n ) as Promise<Secret>;\n }\n\n async update(params: { name: string; value: string }): Promise<void> {\n this.client._requireAuth();\n const encoded = encodeURIComponent(params.name);\n await this.client._request('PUT', `/api/v1/secrets/${encoded}`, {\n body: { value: params.value },\n });\n }\n\n async delete(params: { name: string }): Promise<void> {\n this.client._requireAuth();\n const encoded = encodeURIComponent(params.name);\n await this.client._request('DELETE', `/api/v1/secrets/${encoded}`);\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n ModuleDoc,\n PartitionsResponse,\n PartitionSummaryResponse,\n} from '../types.js';\n\nexport class SdkDocsResource {\n constructor(private client: AlvaClient) {}\n\n async doc(params: { name: string }): Promise<ModuleDoc> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/sdk/doc', {\n query: { name: params.name },\n }) as Promise<ModuleDoc>;\n }\n\n async partitions(): Promise<PartitionsResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n '/api/v1/sdk/partitions'\n ) as Promise<PartitionsResponse>;\n }\n\n async partitionSummary(params: {\n partition: string;\n }): Promise<PartitionSummaryResponse> {\n this.client._requireAuth();\n const encoded = encodeURIComponent(params.partition);\n return this.client._request(\n 'GET',\n `/api/v1/sdk/partitions/${encoded}/summary`\n ) as Promise<PartitionSummaryResponse>;\n }\n}\n","import type { AlvaClient } from '../client.js';\n\ntype Envelope<T> = { success: boolean; data: T; request_id?: string };\n\nexport interface SkillSummary {\n name: string;\n description: string;\n}\n\nexport interface SkillDoc {\n name: string;\n description: string;\n content: string;\n}\n\nexport class SkillsResource {\n constructor(private client: AlvaClient) {}\n\n async list(): Promise<{ skills: SkillSummary[] }> {\n const res = (await this.client._request('GET', '/api/v1/skills', {\n baseUrl: this.client.arraysBaseUrl,\n noAuth: true,\n })) as Envelope<SkillSummary[]>;\n return { skills: res.data ?? [] };\n }\n\n async summary(params: { name: string }): Promise<SkillDoc> {\n const encoded = encodeURIComponent(params.name);\n const res = (await this.client._request(\n 'GET',\n `/api/v1/skills/${encoded}`,\n {\n baseUrl: this.client.arraysBaseUrl,\n noAuth: true,\n }\n )) as Envelope<SkillDoc[]>;\n const doc = res.data?.[0];\n if (!doc)\n throw new Error(`empty skills summary response for \"${params.name}\"`);\n return doc;\n }\n\n async endpoint(params: { name: string; file: string }): Promise<SkillDoc> {\n const encoded = encodeURIComponent(params.name);\n const res = (await this.client._request(\n 'GET',\n `/api/v1/skills/${encoded}`,\n {\n baseUrl: this.client.arraysBaseUrl,\n noAuth: true,\n query: { endpoint: params.file },\n }\n )) as Envelope<SkillDoc[]>;\n const doc = res.data?.[0];\n if (!doc) {\n throw new Error(\n `empty skills endpoint response for \"${params.name}\" file \"${params.file}\"`\n );\n }\n return doc;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { CreateCommentRequest, Comment } from '../types.js';\n\nexport class CommentsResource {\n constructor(private client: AlvaClient) {}\n\n async create(params: CreateCommentRequest): Promise<Comment> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/playbook/comment', {\n body: {\n username: params.username,\n name: params.name,\n content: params.content,\n parent_id: params.parent_id,\n },\n }) as Promise<Comment>;\n }\n\n async pin(params: { comment_id: number }): Promise<Comment> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/playbook/comment/pin', {\n body: { comment_id: params.comment_id },\n }) as Promise<Comment>;\n }\n\n async unpin(params: { comment_id: number }): Promise<Comment> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/playbook/comment/unpin', {\n body: { comment_id: params.comment_id },\n }) as Promise<Comment>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { RemixRequest } from '../types.js';\n\nexport class RemixResource {\n constructor(private client: AlvaClient) {}\n\n async save(params: RemixRequest): Promise<void> {\n this.client._requireAuth();\n await this.client._request('POST', '/api/v1/remix', {\n body: {\n child: params.child,\n parents: params.parents,\n },\n });\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { ScreenshotParams } from '../types.js';\n\nexport class ScreenshotResource {\n constructor(private client: AlvaClient) {}\n\n async capture(params: ScreenshotParams): Promise<ArrayBuffer> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/screenshot', {\n query: {\n url: params.url,\n selector: params.selector,\n xpath: params.xpath,\n },\n }) as Promise<ArrayBuffer>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type { UserProfile } from '../types.js';\n\nexport class UserResource {\n constructor(private client: AlvaClient) {}\n\n async me(): Promise<UserProfile> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/me') as Promise<UserProfile>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n TradingAccount,\n TradingPortfolio,\n TradingOrder,\n TradingSubscription,\n EquityPoint,\n TradingRiskRule,\n TradingRiskRuleInput,\n ExecuteSignalResult,\n} from '../types.js';\n\nexport class TradingResource {\n constructor(private client: AlvaClient) {}\n\n async accounts(): Promise<TradingAccount[]> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/accounts') as Promise<\n TradingAccount[]\n >;\n }\n\n async portfolio(accountId: string): Promise<TradingPortfolio> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/portfolio', {\n query: { accountId },\n }) as Promise<TradingPortfolio>;\n }\n\n async orders(params: {\n accountId: string;\n source?: string;\n since?: number;\n limit?: number;\n }): Promise<TradingOrder[]> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/orders', {\n query: {\n accountId: params.accountId,\n source: params.source,\n since: params.since,\n limit: params.limit,\n },\n }) as Promise<TradingOrder[]>;\n }\n\n async subscriptions(accountId: string): Promise<TradingSubscription[]> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/subscriptions', {\n query: { accountId },\n }) as Promise<TradingSubscription[]>;\n }\n\n async equityHistory(params: {\n accountId: string;\n timeframe?: string;\n sinceMs?: number;\n untilMs?: number;\n }): Promise<EquityPoint[]> {\n this.client._requireAuth();\n return this.client._request('GET', '/api/v1/trading/equity-history', {\n query: {\n accountId: params.accountId,\n timeframe: params.timeframe,\n sinceMs: params.sinceMs,\n untilMs: params.untilMs,\n },\n }) as Promise<EquityPoint[]>;\n }\n\n async riskRules(): Promise<TradingRiskRule> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n '/api/v1/trading/risk-rules'\n ) as Promise<TradingRiskRule>;\n }\n\n async subscribe(params: {\n accountId: string;\n sourceUsername: string;\n sourceFeed: string;\n playbookId: string;\n playbookVersion: string;\n executeLatest?: boolean;\n }): Promise<TradingSubscription> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/trading/subscribe', {\n body: params,\n }) as Promise<TradingSubscription>;\n }\n\n async unsubscribe(\n subscriptionId: string\n ): Promise<{ unsubscribedId: string }> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/trading/unsubscribe', {\n body: { subscriptionId },\n }) as Promise<{ unsubscribedId: string }>;\n }\n\n async execute(params: {\n accountId: string;\n signalJson: string;\n dryRun: boolean;\n sourceUsername?: string;\n sourceFeed?: string;\n }): Promise<ExecuteSignalResult> {\n this.client._requireAuth();\n return this.client._request('POST', '/api/v1/trading/execute', {\n body: params,\n }) as Promise<ExecuteSignalResult>;\n }\n\n async updateRiskRules(rules: TradingRiskRuleInput): Promise<TradingRiskRule> {\n this.client._requireAuth();\n return this.client._request('PUT', '/api/v1/trading/risk-rules', {\n body: rules,\n }) as Promise<TradingRiskRule>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n EnsureArraysJwtResponse,\n ArraysJwtStatusResponse,\n} from '../types.js';\n\nexport class ArraysJwtResource {\n constructor(private client: AlvaClient) {}\n\n /** Idempotently sign-or-renew the Arrays JWT server-side. */\n async ensure(): Promise<EnsureArraysJwtResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'POST',\n '/api/v1/arrays-jwt/ensure'\n ) as Promise<EnsureArraysJwtResponse>;\n }\n\n /** Report the current Arrays JWT state for the authenticated user. */\n async status(): Promise<ArraysJwtStatusResponse> {\n this.client._requireAuth();\n return this.client._request(\n 'GET',\n '/api/v1/arrays-jwt/status'\n ) as Promise<ArraysJwtStatusResponse>;\n }\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n FeedNotificationListResponse,\n NotificationListParams,\n PlaybookNotificationListResponse,\n} from '../types.js';\n\nexport class NotificationsResource {\n constructor(private client: AlvaClient) {}\n\n /**\n * List the caller's notification history for one playbook\n * `(username, name)`. Returns `NOT_FOUND` when the playbook is\n * private or does not exist (the two cases are deliberately\n * indistinguishable to prevent namespace enumeration).\n */\n async listPlaybook(\n params: NotificationListParams\n ): Promise<PlaybookNotificationListResponse> {\n this.client._requireAuth();\n const path = `/api/v1/playbook/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/notifications`;\n return this.client._request('GET', path, {\n query: buildQuery(params),\n }) as Promise<PlaybookNotificationListResponse>;\n }\n\n /**\n * List the caller's notification history for one feed\n * `(username, name)`. Authorization is alfs read on\n * `/alva/home/<username>/feeds/<name>`.\n */\n async listFeed(\n params: NotificationListParams\n ): Promise<FeedNotificationListResponse> {\n this.client._requireAuth();\n const path = `/api/v1/feed/${encodeURIComponent(params.username)}/${encodeURIComponent(params.name)}/notifications`;\n return this.client._request('GET', path, {\n query: buildQuery(params),\n }) as Promise<FeedNotificationListResponse>;\n }\n}\n\nfunction buildQuery(params: NotificationListParams): Record<string, string> {\n const q: Record<string, string> = {};\n if (params.channel) q.channel = params.channel;\n if (params.status) q.status = params.status;\n if (params.since_time !== undefined && params.since_time > 0) {\n q.since_time = String(params.since_time);\n }\n if (params.first !== undefined && params.first > 0) {\n q.first = String(params.first);\n }\n if (params.cursor) q.cursor = params.cursor;\n return q;\n}\n","import type { AlvaClient } from '../client.js';\nimport type {\n PushSubscriptionFeedParams,\n PushSubscriptionListParams,\n PushSubscriptionListResponse,\n PushSubscriptionPlaybookParams,\n SubscribeFeedPushTargetResponse,\n SubscribePushTargetResponse,\n UnsubscribePushTargetResponse,\n} from '../types.js';\n\n/**\n * Personal push subscriptions — opt the caller in or out of personal\n * DM/web push for a target. Independent of social follow:\n *\n * - `subscribePlaybook` / `subscribeFeed` do not start following.\n * - `unsubscribePlaybook` / `unsubscribeFeed` do not unfollow.\n * - Following a playbook elsewhere will compound-subscribe automatically.\n *\n * Backed by alva-gateway REST (mirrors the GraphQL surface in\n * `pkg/schema/push_subscription.graphql`).\n */\nexport class PushSubscriptionsResource {\n constructor(private client: AlvaClient) {}\n\n /**\n * Opt into personal push for one playbook `(username, name)`.\n * Fires for any feed of that playbook. Idempotent. Auth: callers must\n * be able to read the playbook (public/paid pass; private requires\n * explicit alfs grant).\n */\n async subscribePlaybook(\n params: PushSubscriptionPlaybookParams\n ): Promise<SubscribePushTargetResponse> {\n this.client._requireAuth();\n const path = `/api/v1/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 { SkillsResource } from './resources/skills.js';\nimport { CommentsResource } from './resources/comments.js';\nimport { RemixResource } from './resources/remix.js';\nimport { ScreenshotResource } from './resources/screenshot.js';\nimport { UserResource } from './resources/user.js';\nimport { TradingResource } from './resources/trading.js';\nimport { ArraysJwtResource } from './resources/arraysJwt.js';\nimport { NotificationsResource } from './resources/notifications.js';\nimport { PushSubscriptionsResource } from './resources/pushSubscriptions.js';\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 _skills?: SkillsResource;\n private _comments?: CommentsResource;\n private _remix?: RemixResource;\n private _screenshot?: ScreenshotResource;\n private _user?: UserResource;\n private _trading?: TradingResource;\n private _arraysJwt?: ArraysJwtResource;\n private _notifications?: NotificationsResource;\n private _pushSubscriptions?: PushSubscriptionsResource;\n 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 skills(): SkillsResource {\n return (this._skills ??= new SkillsResource(this));\n }\n get comments(): CommentsResource {\n return (this._comments ??= new CommentsResource(this));\n }\n get remix(): RemixResource {\n return (this._remix ??= new RemixResource(this));\n }\n get screenshot(): ScreenshotResource {\n return (this._screenshot ??= new ScreenshotResource(this));\n }\n get user(): UserResource {\n return (this._user ??= new UserResource(this));\n }\n get trading(): TradingResource {\n return (this._trading ??= new TradingResource(this));\n }\n get arraysJwt(): ArraysJwtResource {\n return (this._arraysJwt ??= new ArraysJwtResource(this));\n }\n get notifications(): NotificationsResource {\n return (this._notifications ??= new NotificationsResource(this));\n }\n get pushSubscriptions(): PushSubscriptionsResource {\n return (this._pushSubscriptions ??= new PushSubscriptionsResource(this));\n }\n 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';\n"],"mappings":";AAAO,IAAM,YAAN,cAAwB,MAAM;AAAA,EAC1B;AAAA,EACA;AAAA,EAET,YAAY,MAAc,SAAiB,QAAgB;AACzD,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,SAAS;AAAA,EAChB;AACF;;;ACUO,IAAM,aAAN,MAAiB;AAAA,EACtB,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA;AAAA,EAGpB,MAAM,KAAK,QAAsD;AAC/D,UAAM,SAAS,MAAM,KAAK,OAAO,SAAS,OAAO,mBAAmB;AAAA,MAClE,OAAO,EAAE,MAAM,OAAO,MAAM,QAAQ,OAAO,QAAQ,MAAM,OAAO,KAAK;AAAA,IACvE,CAAC;AACD,QAAI,EAAE,kBAAkB,aAAc,QAAO;AAC7C,QAAI;AACF,YAAM,OAAO,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,MAAM;AACpE,UAAI;AACF,eAAO,KAAK,MAAM,IAAI;AAAA,MACxB,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,MAAM,QAAiD;AAC3D,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,oBAAoB;AAAA,MACtD,MAAM;AAAA,QACJ,MAAM,OAAO;AAAA,QACb,MAAM,OAAO;AAAA,QACb,eAAe,OAAO;AAAA,MACxB;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAS,QAAoD;AACjE,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,oBAAoB;AAAA,MACtD,OAAO;AAAA,QACL,MAAM,OAAO;AAAA,QACb,eAAe,OAAO;AAAA,MACxB;AAAA,MACA,SAAS,OAAO;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,KAAK,QAA2C;AACpD,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,mBAAmB;AAAA,MACpD,OAAO,EAAE,MAAM,OAAO,KAAK;AAAA,IAC7B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,QAAQ,QAAqD;AACjE,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,sBAAsB;AAAA,MACvD,OAAO,EAAE,MAAM,OAAO,MAAM,WAAW,OAAO,UAAU;AAAA,IAC1D,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,QAAsC;AAChD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,QAAQ,oBAAoB;AAAA,MACrD,MAAM,EAAE,MAAM,OAAO,KAAK;AAAA,IAC5B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,QAAuC;AAClD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,UAAU,qBAAqB;AAAA,MACxD,OAAO,EAAE,MAAM,OAAO,MAAM,WAAW,OAAO,UAAU;AAAA,IAC1D,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,QAAuC;AAClD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,QAAQ,qBAAqB;AAAA,MACtD,MAAM,EAAE,UAAU,OAAO,UAAU,UAAU,OAAO,SAAS;AAAA,IAC/D,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,KAAK,QAAqC;AAC9C,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,QAAQ,mBAAmB;AAAA,MACpD,MAAM,EAAE,UAAU,OAAO,UAAU,UAAU,OAAO,SAAS;AAAA,IAC/D,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,QAAQ,QAAwC;AACpD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,QAAQ,sBAAsB;AAAA,MACvD,MAAM;AAAA,QACJ,aAAa,OAAO;AAAA,QACpB,WAAW,OAAO;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,SAAS,QAAuD;AACpE,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,uBAAuB;AAAA,MACxD,OAAO,EAAE,MAAM,OAAO,KAAK;AAAA,IAC7B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,QAAsC;AAChD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,QAAQ,oBAAoB;AAAA,MACrD,MAAM,EAAE,MAAM,OAAO,MAAM,MAAM,OAAO,KAAK;AAAA,IAC/C,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,QAAsC;AAChD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,QAAQ,oBAAoB;AAAA,MACrD,MAAM;AAAA,QACJ,MAAM,OAAO;AAAA,QACb,SAAS,OAAO;AAAA,QAChB,YAAY,OAAO;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,QAAuC;AAClD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,QAAQ,qBAAqB;AAAA,MACtD,MAAM;AAAA,QACJ,MAAM,OAAO;AAAA,QACb,SAAS,OAAO;AAAA,QAChB,YAAY,OAAO;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ACrJO,IAAM,cAAN,MAAkB;AAAA,EACvB,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,QAAQ,QAA0C;AACtD,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,eAAe;AAAA,MACjD,MAAM;AAAA,QACJ,MAAM,OAAO;AAAA,QACb,YAAY,OAAO;AAAA,QACnB,aAAa,OAAO;AAAA,QACpB,MAAM,OAAO;AAAA,MACf;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ACLO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,OAAO,QAAgD;AAC3D,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,0BAA0B;AAAA,MAC5D,MAAM;AAAA,QACJ,MAAM,OAAO;AAAA,QACb,MAAM,OAAO;AAAA,QACb,iBAAiB,OAAO;AAAA,QACxB,MAAM,OAAO;AAAA,QACb,aAAa,OAAO;AAAA,MACtB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,KAAK,QAA0D;AACnE,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,2BAA2B;AAAA,MAC5D,OAAO,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO;AAAA,IACxD,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,QAA0C;AAClD,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA,0BAA0B,OAAO,EAAE;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,QAAgD;AAC3D,SAAK,OAAO,aAAa;AACzB,UAAM,EAAE,IAAI,GAAG,KAAK,IAAI;AACxB,WAAO,KAAK,OAAO,SAAS,SAAS,0BAA0B,EAAE,IAAI;AAAA,MACnE;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,QAAuC;AAClD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,UAAU,0BAA0B,OAAO,EAAE,EAAE;AAAA,EAC5E;AAAA,EAEA,MAAM,MAAM,QAAuC;AACjD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO;AAAA,MAChB;AAAA,MACA,0BAA0B,OAAO,EAAE;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,QAAuC;AAClD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO;AAAA,MAChB;AAAA,MACA,0BAA0B,OAAO,EAAE;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,QACkC;AAClC,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA,0BAA0B,OAAO,UAAU;AAAA,MAC3C;AAAA,QACE,OAAO,EAAE,OAAO,OAAO,OAAO,QAAQ,OAAO,OAAO;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,QAGmB;AAClC,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA,0BAA0B,OAAO,UAAU,SAAS,OAAO,MAAM;AAAA,IACnE;AAAA,EACF;AACF;;;ACrFO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,KAAK,QAA0D;AACnE,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,wBAAwB;AAAA,MAC1D,MAAM;AAAA,QACJ,MAAM,OAAO;AAAA,QACb,SAAS,OAAO;AAAA,QAChB,YAAY,OAAO;AAAA,QACnB,WAAW,OAAO;AAAA,QAClB,aAAa,OAAO;AAAA,QACpB,WAAW,OAAO;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,cACJ,QACgC;AAChC,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,0BAA0B;AAAA,MAC5D,MAAM;AAAA,QACJ,MAAM,OAAO;AAAA,QACb,cAAc,OAAO;AAAA,QACrB,aAAa,OAAO;AAAA,QACpB,OAAO,OAAO;AAAA,QACd,iBAAiB,OAAO;AAAA,MAC1B;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,SACJ,QACkC;AAClC,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,4BAA4B;AAAA,MAC9D,MAAM;AAAA,QACJ,MAAM,OAAO;AAAA,QACb,SAAS,OAAO;AAAA,QAChB,OAAO,OAAO;AAAA,QACd,WAAW,OAAO;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ACpDO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,OAAO,QAA4C;AACvD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,QAAQ,mBAAmB;AAAA,MACpD,MAAM,EAAE,MAAM,OAAO,MAAM,OAAO,OAAO,MAAM;AAAA,IACjD,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAA+C;AACnD,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,iBAAiB;AAAA,EAGtD;AAAA,EAEA,MAAM,IAAI,QAA2C;AACnD,SAAK,OAAO,aAAa;AACzB,UAAM,UAAU,mBAAmB,OAAO,IAAI;AAC9C,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA,mBAAmB,OAAO;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,QAAwD;AACnE,SAAK,OAAO,aAAa;AACzB,UAAM,UAAU,mBAAmB,OAAO,IAAI;AAC9C,UAAM,KAAK,OAAO,SAAS,OAAO,mBAAmB,OAAO,IAAI;AAAA,MAC9D,MAAM,EAAE,OAAO,OAAO,MAAM;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,QAAyC;AACpD,SAAK,OAAO,aAAa;AACzB,UAAM,UAAU,mBAAmB,OAAO,IAAI;AAC9C,UAAM,KAAK,OAAO,SAAS,UAAU,mBAAmB,OAAO,EAAE;AAAA,EACnE;AACF;;;ACnCO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,IAAI,QAA8C;AACtD,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,mBAAmB;AAAA,MACpD,OAAO,EAAE,MAAM,OAAO,KAAK;AAAA,IAC7B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,aAA0C;AAC9C,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,QAEe;AACpC,SAAK,OAAO,aAAa;AACzB,UAAM,UAAU,mBAAmB,OAAO,SAAS;AACnD,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA,0BAA0B,OAAO;AAAA,IACnC;AAAA,EACF;AACF;;;ACpBO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,OAA4C;AAChD,UAAM,MAAO,MAAM,KAAK,OAAO,SAAS,OAAO,kBAAkB;AAAA,MAC/D,SAAS,KAAK,OAAO;AAAA,MACrB,QAAQ;AAAA,IACV,CAAC;AACD,WAAO,EAAE,QAAQ,IAAI,QAAQ,CAAC,EAAE;AAAA,EAClC;AAAA,EAEA,MAAM,QAAQ,QAA6C;AACzD,UAAM,UAAU,mBAAmB,OAAO,IAAI;AAC9C,UAAM,MAAO,MAAM,KAAK,OAAO;AAAA,MAC7B;AAAA,MACA,kBAAkB,OAAO;AAAA,MACzB;AAAA,QACE,SAAS,KAAK,OAAO;AAAA,QACrB,QAAQ;AAAA,MACV;AAAA,IACF;AACA,UAAM,MAAM,IAAI,OAAO,CAAC;AACxB,QAAI,CAAC;AACH,YAAM,IAAI,MAAM,sCAAsC,OAAO,IAAI,GAAG;AACtE,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAS,QAA2D;AACxE,UAAM,UAAU,mBAAmB,OAAO,IAAI;AAC9C,UAAM,MAAO,MAAM,KAAK,OAAO;AAAA,MAC7B;AAAA,MACA,kBAAkB,OAAO;AAAA,MACzB;AAAA,QACE,SAAS,KAAK,OAAO;AAAA,QACrB,QAAQ;AAAA,QACR,OAAO,EAAE,UAAU,OAAO,KAAK;AAAA,MACjC;AAAA,IACF;AACA,UAAM,MAAM,IAAI,OAAO,CAAC;AACxB,QAAI,CAAC,KAAK;AACR,YAAM,IAAI;AAAA,QACR,uCAAuC,OAAO,IAAI,WAAW,OAAO,IAAI;AAAA,MAC1E;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;;;AC1DO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,OAAO,QAAgD;AAC3D,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,4BAA4B;AAAA,MAC9D,MAAM;AAAA,QACJ,UAAU,OAAO;AAAA,QACjB,MAAM,OAAO;AAAA,QACb,SAAS,OAAO;AAAA,QAChB,WAAW,OAAO;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,QAAkD;AAC1D,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,gCAAgC;AAAA,MAClE,MAAM,EAAE,YAAY,OAAO,WAAW;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,QAAkD;AAC5D,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,kCAAkC;AAAA,MACpE,MAAM,EAAE,YAAY,OAAO,WAAW;AAAA,IACxC,CAAC;AAAA,EACH;AACF;;;AC5BO,IAAM,gBAAN,MAAoB;AAAA,EACzB,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,KAAK,QAAqC;AAC9C,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,QAAQ,iBAAiB;AAAA,MAClD,MAAM;AAAA,QACJ,OAAO,OAAO;AAAA,QACd,SAAS,OAAO;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ACZO,IAAM,qBAAN,MAAyB;AAAA,EAC9B,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,QAAQ,QAAgD;AAC5D,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,sBAAsB;AAAA,MACvD,OAAO;AAAA,QACL,KAAK,OAAO;AAAA,QACZ,UAAU,OAAO;AAAA,QACjB,OAAO,OAAO;AAAA,MAChB;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ACbO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,KAA2B;AAC/B,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,YAAY;AAAA,EACjD;AACF;;;ACEO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,WAAsC;AAC1C,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,0BAA0B;AAAA,EAG/D;AAAA,EAEA,MAAM,UAAU,WAA8C;AAC5D,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,6BAA6B;AAAA,MAC9D,OAAO,EAAE,UAAU;AAAA,IACrB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,QAKe;AAC1B,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,0BAA0B;AAAA,MAC3D,OAAO;AAAA,QACL,WAAW,OAAO;AAAA,QAClB,QAAQ,OAAO;AAAA,QACf,OAAO,OAAO;AAAA,QACd,OAAO,OAAO;AAAA,MAChB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,cAAc,WAAmD;AACrE,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,iCAAiC;AAAA,MAClE,OAAO,EAAE,UAAU;AAAA,IACrB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,cAAc,QAKO;AACzB,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,kCAAkC;AAAA,MACnE,OAAO;AAAA,QACL,WAAW,OAAO;AAAA,QAClB,WAAW,OAAO;AAAA,QAClB,SAAS,OAAO;AAAA,QAChB,SAAS,OAAO;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YAAsC;AAC1C,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,QAOiB;AAC/B,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,6BAA6B;AAAA,MAC/D,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YACJ,gBACqC;AACrC,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,+BAA+B;AAAA,MACjE,MAAM,EAAE,eAAe;AAAA,IACzB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,QAAQ,QAMmB;AAC/B,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,2BAA2B;AAAA,MAC7D,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,gBAAgB,OAAuD;AAC3E,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,8BAA8B;AAAA,MAC/D,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AACF;;;AClHO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA;AAAA,EAGpB,MAAM,SAA2C;AAC/C,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,SAA2C;AAC/C,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;ACnBO,IAAM,wBAAN,MAA4B;AAAA,EACjC,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQpB,MAAM,aACJ,QAC2C;AAC3C,SAAK,OAAO,aAAa;AACzB,UAAM,OAAO,oBAAoB,mBAAmB,OAAO,QAAQ,CAAC,IAAI,mBAAmB,OAAO,IAAI,CAAC;AACvG,WAAO,KAAK,OAAO,SAAS,OAAO,MAAM;AAAA,MACvC,OAAO,WAAW,MAAM;AAAA,IAC1B,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,SACJ,QACuC;AACvC,SAAK,OAAO,aAAa;AACzB,UAAM,OAAO,gBAAgB,mBAAmB,OAAO,QAAQ,CAAC,IAAI,mBAAmB,OAAO,IAAI,CAAC;AACnG,WAAO,KAAK,OAAO,SAAS,OAAO,MAAM;AAAA,MACvC,OAAO,WAAW,MAAM;AAAA,IAC1B,CAAC;AAAA,EACH;AACF;AAEA,SAAS,WAAW,QAAwD;AAC1E,QAAM,IAA4B,CAAC;AACnC,MAAI,OAAO,QAAS,GAAE,UAAU,OAAO;AACvC,MAAI,OAAO,OAAQ,GAAE,SAAS,OAAO;AACrC,MAAI,OAAO,eAAe,UAAa,OAAO,aAAa,GAAG;AAC5D,MAAE,aAAa,OAAO,OAAO,UAAU;AAAA,EACzC;AACA,MAAI,OAAO,UAAU,UAAa,OAAO,QAAQ,GAAG;AAClD,MAAE,QAAQ,OAAO,OAAO,KAAK;AAAA,EAC/B;AACA,MAAI,OAAO,OAAQ,GAAE,SAAS,OAAO;AACrC,SAAO;AACT;;;AChCO,IAAM,4BAAN,MAAgC;AAAA,EACrC,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQpB,MAAM,kBACJ,QACsC;AACtC,SAAK,OAAO,aAAa;AACzB,UAAM,OAAO,uCAAuC,mBAAmB,OAAO,QAAQ,CAAC,IAAI,mBAAmB,OAAO,IAAI,CAAC;AAC1H,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,oBACJ,QACwC;AACxC,SAAK,OAAO,aAAa;AACzB,UAAM,OAAO,uCAAuC,mBAAmB,OAAO,QAAQ,CAAC,IAAI,mBAAmB,OAAO,IAAI,CAAC;AAC1H,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,cACJ,QAC0C;AAC1C,SAAK,OAAO,aAAa;AACzB,UAAM,OAAO,mCAAmC,mBAAmB,OAAO,QAAQ,CAAC,IAAI,mBAAmB,OAAO,IAAI,CAAC;AACtH,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,gBACJ,QACwC;AACxC,SAAK,OAAO,aAAa;AACzB,UAAM,OAAO,mCAAmC,mBAAmB,OAAO,QAAQ,CAAC,IAAI,mBAAmB,OAAO,IAAI,CAAC;AACtH,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,KACJ,SAAqC,CAAC,GACC;AACvC,SAAK,OAAO,aAAa;AACzB,UAAM,QAAgC,CAAC;AACvC,QAAI,OAAO,oBAAoB,QAAW;AACxC,YAAM,kBAAkB,OAAO,OAAO,eAAe;AAAA,IACvD;AACA,WAAO,KAAK,OAAO,SAAS,OAAO,iCAAiC;AAAA,MAClE;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ACzFO,IAAM,oCAAN,MAAwC;AAAA,EAC7C,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,QACJ,QACkD;AAClD,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,QACE,OAAO,EAAE,YAAY,OAAO,WAAW;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,KACJ,QAC+C;AAC/C,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,uCAAuC;AAAA,MACxE,OAAO,EAAE,YAAY,OAAO,WAAW;AAAA,IACzC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UACJ,QACmD;AACnD,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,uCAAuC;AAAA,MACzE,UAAU,aAAa,MAAM;AAAA,IAC/B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YACJ,QACmD;AACnD,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,QACE,UAAU,aAAa,MAAM;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,aAAa,QAAwD;AAC5E,SAAO,iBAAiB,UAAU,OAAO,UAAU,CAAC,kBAAkB,KAAK,UAAU,OAAO,WAAW,CAAC,gBAAgB,UAAU,OAAO,SAAS,CAAC;AACrJ;AAEA,SAAS,UAAU,OAAgC;AACjD,MAAI,OAAO,UAAU,UAAU;AAC7B,QACE,CAAC,OAAO,UAAU,KAAK,KACvB,SAAS,KACT,CAAC,OAAO,cAAc,KAAK,GAC3B;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,WAAO,OAAO,KAAK;AAAA,EACrB;AACA,MAAI,CAAC,aAAa,KAAK,KAAK,GAAG;AAC7B,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;;;ACzEA,IAAM,mBAAmB;AAClB,IAAM,0BAA0B;AAehC,IAAM,aAAN,MAAiB;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAED;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,QAA0B;AACpC,SAAK,UAAU,OAAO,WAAW;AACjC,SAAK,gBAAgB,OAAO,iBAAiB;AAC7C,SAAK,eAAe,OAAO;AAC3B,SAAK,SAAS,OAAO;AAAA,EACvB;AAAA,EAEA,IAAI,KAAiB;AACnB,WAAQ,KAAK,QAAQ,IAAI,WAAW,IAAI;AAAA,EAC1C;AAAA,EACA,IAAI,MAAmB;AACrB,WAAQ,KAAK,SAAS,IAAI,YAAY,IAAI;AAAA,EAC5C;AAAA,EACA,IAAI,SAAyB;AAC3B,WAAQ,KAAK,YAAY,IAAI,eAAe,IAAI;AAAA,EAClD;AAAA,EACA,IAAI,UAA2B;AAC7B,WAAQ,KAAK,aAAa,IAAI,gBAAgB,IAAI;AAAA,EACpD;AAAA,EACA,IAAI,UAA2B;AAC7B,WAAQ,KAAK,aAAa,IAAI,gBAAgB,IAAI;AAAA,EACpD;AAAA,EACA,IAAI,MAAuB;AACzB,WAAQ,KAAK,SAAS,IAAI,gBAAgB,IAAI;AAAA,EAChD;AAAA,EACA,IAAI,SAAyB;AAC3B,WAAQ,KAAK,YAAY,IAAI,eAAe,IAAI;AAAA,EAClD;AAAA,EACA,IAAI,WAA6B;AAC/B,WAAQ,KAAK,cAAc,IAAI,iBAAiB,IAAI;AAAA,EACtD;AAAA,EACA,IAAI,QAAuB;AACzB,WAAQ,KAAK,WAAW,IAAI,cAAc,IAAI;AAAA,EAChD;AAAA,EACA,IAAI,aAAiC;AACnC,WAAQ,KAAK,gBAAgB,IAAI,mBAAmB,IAAI;AAAA,EAC1D;AAAA,EACA,IAAI,OAAqB;AACvB,WAAQ,KAAK,UAAU,IAAI,aAAa,IAAI;AAAA,EAC9C;AAAA,EACA,IAAI,UAA2B;AAC7B,WAAQ,KAAK,aAAa,IAAI,gBAAgB,IAAI;AAAA,EACpD;AAAA,EACA,IAAI,YAA+B;AACjC,WAAQ,KAAK,eAAe,IAAI,kBAAkB,IAAI;AAAA,EACxD;AAAA,EACA,IAAI,gBAAuC;AACzC,WAAQ,KAAK,mBAAmB,IAAI,sBAAsB,IAAI;AAAA,EAChE;AAAA,EACA,IAAI,oBAA+C;AACjD,WAAQ,KAAK,uBAAuB,IAAI,0BAA0B,IAAI;AAAA,EACxE;AAAA,EACA,IAAI,4BAA+D;AACjE,WAAQ,KAAK,+BACX,IAAI,kCAAkC,IAAI;AAAA,EAC9C;AAAA,EAEA,eAAqB;AACnB,QAAI,CAAC,KAAK,gBAAgB,CAAC,KAAK,QAAQ;AACtC,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,QACA,MACA,SACkB;AAClB,UAAM,UAAU,SAAS,WAAW,KAAK;AACzC,QAAI,MAAM,GAAG,OAAO,GAAG,IAAI;AAE3B,QAAI,SAAS,OAAO;AAClB,YAAM,SAAS,IAAI,gBAAgB;AACnC,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,KAAK,GAAG;AACxD,YAAI,UAAU,UAAa,UAAU,MAAM;AACzC,iBAAO,IAAI,KAAK,OAAO,KAAK,CAAC;AAAA,QAC/B;AAAA,MACF;AACA,YAAM,KAAK,OAAO,SAAS;AAC3B,UAAI,IAAI;AACN,eAAO,IAAI,EAAE;AAAA,MACf;AAAA,IACF;AAEA,UAAM,UAAkC,CAAC;AACzC,QAAI,CAAC,SAAS,QAAQ;AACpB,UAAI,KAAK,cAAc;AACrB,gBAAQ,mBAAmB,IAAI,KAAK;AAAA,MACtC,WAAW,KAAK,QAAQ;AACtB,gBAAQ,gBAAgB,IAAI,KAAK;AAAA,MACnC;AAAA,IACF;AAEA,QAAI;AACJ,QAAI,SAAS,YAAY,QAAW;AAClC,cAAQ,cAAc,IAAI;AAC1B,kBAAY,QAAQ;AAAA,IACtB,WAAW,SAAS,aAAa,QAAW;AAC1C,cAAQ,cAAc,IAAI;AAC1B,kBAAY,QAAQ;AAAA,IACtB,WAAW,SAAS,SAAS,QAAW;AACtC,cAAQ,cAAc,IAAI;AAC1B,kBAAY,KAAK,UAAU,QAAQ,IAAI;AAAA,IACzC;AAEA,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,MAAM,KAAK;AAAA,QAC1B;AAAA,QACA;AAAA,QACA,MAAM;AAAA,MACR,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA,eAAe,QAAQ,IAAI,UAAU;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,IAAI;AAEhB,YAAM,WAAW,MAAM,SAAS,KAAK,EAAE,MAAM,MAAM,EAAE;AACrD,YAAMA,eAAc,SAAS,QAAQ,IAAI,cAAc,KAAK;AAC5D,UAAIA,aAAY,SAAS,kBAAkB,KAAK,UAAU;AACxD,YAAI;AACF,gBAAM,OAAO,KAAK,MAAM,QAAQ;AAGhC,cAAI,KAAK,OAAO;AACd,kBAAM,IAAI;AAAA,cACR,KAAK,MAAM,QAAQ;AAAA,cACnB,KAAK,MAAM,WAAW,QAAQ,SAAS,MAAM;AAAA,cAC7C,SAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF,SAAS,GAAG;AACV,cAAI,aAAa,UAAW,OAAM;AAAA,QAEpC;AAAA,MACF;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA,QAAQ,SAAS,MAAM,KAAK,SAAS,MAAM,GAAG,GAAG,CAAC;AAAA,QAClD,SAAS;AAAA,MACX;AAAA,IACF;AAGA,QAAI,SAAS,WAAW,KAAK;AAC3B,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,SAAS,QAAQ,IAAI,cAAc,KAAK;AAC5D,QACE,YAAY,SAAS,0BAA0B,KAC/C,YAAY,SAAS,QAAQ,GAC7B;AACA,aAAO,SAAS,YAAY;AAAA,IAC9B;AAEA,WAAO,SAAS,KAAK;AAAA,EACvB;AACF;;;AC9NO,IAAM,UACX,OAAqC,UAAc;","names":["contentType"]}
1
+ {"version":3,"sources":["../src/error.ts","../src/resources/fs.ts","../src/resources/run.ts","../src/resources/deploy.ts","../src/resources/release.ts","../src/resources/secrets.ts","../src/resources/sdkDocs.ts","../src/resources/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":";AAAO,IAAM,YAAN,cAAwB,MAAM;AAAA,EAC1B;AAAA,EACA;AAAA,EAET,YAAY,MAAc,SAAiB,QAAgB;AACzD,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,SAAS;AAAA,EAChB;AACF;;;ACUO,IAAM,aAAN,MAAiB;AAAA,EACtB,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA;AAAA,EAGpB,MAAM,KAAK,QAAsD;AAC/D,UAAM,SAAS,MAAM,KAAK,OAAO,SAAS,OAAO,mBAAmB;AAAA,MAClE,OAAO,EAAE,MAAM,OAAO,MAAM,QAAQ,OAAO,QAAQ,MAAM,OAAO,KAAK;AAAA,IACvE,CAAC;AACD,QAAI,EAAE,kBAAkB,aAAc,QAAO;AAC7C,QAAI;AACF,YAAM,OAAO,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,MAAM;AACpE,UAAI;AACF,eAAO,KAAK,MAAM,IAAI;AAAA,MACxB,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,MAAM,QAAiD;AAC3D,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,oBAAoB;AAAA,MACtD,MAAM;AAAA,QACJ,MAAM,OAAO;AAAA,QACb,MAAM,OAAO;AAAA,QACb,eAAe,OAAO;AAAA,MACxB;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAS,QAAoD;AACjE,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,oBAAoB;AAAA,MACtD,OAAO;AAAA,QACL,MAAM,OAAO;AAAA,QACb,eAAe,OAAO;AAAA,MACxB;AAAA,MACA,SAAS,OAAO;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,KAAK,QAA2C;AACpD,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,mBAAmB;AAAA,MACpD,OAAO,EAAE,MAAM,OAAO,KAAK;AAAA,IAC7B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,QAAQ,QAAqD;AACjE,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,sBAAsB;AAAA,MACvD,OAAO,EAAE,MAAM,OAAO,MAAM,WAAW,OAAO,UAAU;AAAA,IAC1D,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,QAAsC;AAChD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,QAAQ,oBAAoB;AAAA,MACrD,MAAM,EAAE,MAAM,OAAO,KAAK;AAAA,IAC5B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,QAAuC;AAClD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,UAAU,qBAAqB;AAAA,MACxD,OAAO,EAAE,MAAM,OAAO,MAAM,WAAW,OAAO,UAAU;AAAA,IAC1D,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,QAAuC;AAClD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,QAAQ,qBAAqB;AAAA,MACtD,MAAM,EAAE,UAAU,OAAO,UAAU,UAAU,OAAO,SAAS;AAAA,IAC/D,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,KAAK,QAAqC;AAC9C,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,QAAQ,mBAAmB;AAAA,MACpD,MAAM,EAAE,UAAU,OAAO,UAAU,UAAU,OAAO,SAAS;AAAA,IAC/D,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,QAAQ,QAAwC;AACpD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,QAAQ,sBAAsB;AAAA,MACvD,MAAM;AAAA,QACJ,aAAa,OAAO;AAAA,QACpB,WAAW,OAAO;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,SAAS,QAAuD;AACpE,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,uBAAuB;AAAA,MACxD,OAAO,EAAE,MAAM,OAAO,KAAK;AAAA,IAC7B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,QAAsC;AAChD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,QAAQ,oBAAoB;AAAA,MACrD,MAAM,EAAE,MAAM,OAAO,MAAM,MAAM,OAAO,KAAK;AAAA,IAC/C,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,QAAsC;AAChD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,QAAQ,oBAAoB;AAAA,MACrD,MAAM;AAAA,QACJ,MAAM,OAAO;AAAA,QACb,SAAS,OAAO;AAAA,QAChB,YAAY,OAAO;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,QAAuC;AAClD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,QAAQ,qBAAqB;AAAA,MACtD,MAAM;AAAA,QACJ,MAAM,OAAO;AAAA,QACb,SAAS,OAAO;AAAA,QAChB,YAAY,OAAO;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ACrJO,IAAM,cAAN,MAAkB;AAAA,EACvB,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,QAAQ,QAA0C;AACtD,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,eAAe;AAAA,MACjD,MAAM;AAAA,QACJ,MAAM,OAAO;AAAA,QACb,YAAY,OAAO;AAAA,QACnB,aAAa,OAAO;AAAA,QACpB,MAAM,OAAO;AAAA,MACf;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ACJO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,OAAO,QAAgD;AAC3D,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,0BAA0B;AAAA,MAC5D,MAAM;AAAA,QACJ,MAAM,OAAO;AAAA,QACb,MAAM,OAAO;AAAA,QACb,iBAAiB,OAAO;AAAA,QACxB,MAAM,OAAO;AAAA,QACb,aAAa,OAAO;AAAA,MACtB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,KAAK,QAA0D;AACnE,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,2BAA2B;AAAA,MAC5D,OAAO,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO;AAAA,IACxD,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,QAA0C;AAClD,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA,0BAA0B,OAAO,EAAE;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,QAAgD;AAC3D,SAAK,OAAO,aAAa;AACzB,UAAM,EAAE,IAAI,GAAG,KAAK,IAAI;AACxB,WAAO,KAAK,OAAO,SAAS,SAAS,0BAA0B,EAAE,IAAI;AAAA,MACnE;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,QAAuC;AAClD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,UAAU,0BAA0B,OAAO,EAAE,EAAE;AAAA,EAC5E;AAAA,EAEA,MAAM,MAAM,QAAuC;AACjD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO;AAAA,MAChB;AAAA,MACA,0BAA0B,OAAO,EAAE;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,QAAuC;AAClD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO;AAAA,MAChB;AAAA,MACA,0BAA0B,OAAO,EAAE;AAAA,IACrC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAM,QAAQ,QAAyD;AACrE,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA,0BAA0B,OAAO,EAAE;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,QACkC;AAClC,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA,0BAA0B,OAAO,UAAU;AAAA,MAC3C;AAAA,QACE,OAAO,EAAE,OAAO,OAAO,OAAO,QAAQ,OAAO,OAAO;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,QAGmB;AAClC,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA,0BAA0B,OAAO,UAAU,SAAS,OAAO,MAAM;AAAA,IACnE;AAAA,EACF;AACF;;;AC1GO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,KAAK,QAA0D;AACnE,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,wBAAwB;AAAA,MAC1D,MAAM;AAAA,QACJ,MAAM,OAAO;AAAA,QACb,SAAS,OAAO;AAAA,QAChB,YAAY,OAAO;AAAA,QACnB,WAAW,OAAO;AAAA,QAClB,aAAa,OAAO;AAAA,QACpB,WAAW,OAAO;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,cACJ,QACgC;AAChC,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,0BAA0B;AAAA,MAC5D,MAAM;AAAA,QACJ,MAAM,OAAO;AAAA,QACb,cAAc,OAAO;AAAA,QACrB,aAAa,OAAO;AAAA,QACpB,OAAO,OAAO;AAAA,QACd,iBAAiB,OAAO;AAAA,QACxB,aAAa,OAAO;AAAA,MACtB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,SACJ,QACkC;AAClC,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,4BAA4B;AAAA,MAC9D,MAAM;AAAA,QACJ,MAAM,OAAO;AAAA,QACb,SAAS,OAAO;AAAA,QAChB,OAAO,OAAO;AAAA,QACd,WAAW,OAAO;AAAA,QAClB,YAAY,OAAO;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ACtDO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,OAAO,QAA4C;AACvD,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,QAAQ,mBAAmB;AAAA,MACpD,MAAM,EAAE,MAAM,OAAO,MAAM,OAAO,OAAO,MAAM;AAAA,IACjD,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAA+C;AACnD,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,iBAAiB;AAAA,EAGtD;AAAA,EAEA,MAAM,IAAI,QAA2C;AACnD,SAAK,OAAO,aAAa;AACzB,UAAM,UAAU,mBAAmB,OAAO,IAAI;AAC9C,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA,mBAAmB,OAAO;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,QAAwD;AACnE,SAAK,OAAO,aAAa;AACzB,UAAM,UAAU,mBAAmB,OAAO,IAAI;AAC9C,UAAM,KAAK,OAAO,SAAS,OAAO,mBAAmB,OAAO,IAAI;AAAA,MAC9D,MAAM,EAAE,OAAO,OAAO,MAAM;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,QAAyC;AACpD,SAAK,OAAO,aAAa;AACzB,UAAM,UAAU,mBAAmB,OAAO,IAAI;AAC9C,UAAM,KAAK,OAAO,SAAS,UAAU,mBAAmB,OAAO,EAAE;AAAA,EACnE;AACF;;;ACnCO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,IAAI,QAA8C;AACtD,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,mBAAmB;AAAA,MACpD,OAAO,EAAE,MAAM,OAAO,KAAK;AAAA,IAC7B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,aAA0C;AAC9C,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,QAEe;AACpC,SAAK,OAAO,aAAa;AACzB,UAAM,UAAU,mBAAmB,OAAO,SAAS;AACnD,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA,0BAA0B,OAAO;AAAA,IACnC;AAAA,EACF;AACF;;;ACtBA,IAAM,0BAAmD;AAAA,EACvD;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,4BAA4B;AAAA,IAC5B,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AACF;AAEO,SAAS,yBACd,OACA,MACmC;AACnC,SAAO,wBAAwB;AAAA,IAC7B,CAAC,SAAS,KAAK,UAAU,SAAS,KAAK,SAAS;AAAA,EAClD;AACF;AAEO,SAAS,0BACd,OACyB;AACzB,SAAO,wBAAwB,OAAO,CAAC,SAAS,KAAK,UAAU,KAAK;AACtE;;;AC1gCO,IAAM,qBAAN,MAAyB;AAAA,EAC9B,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,OAA4C;AAChD,UAAM,MAAO,MAAM,KAAK,OAAO,SAAS,OAAO,kBAAkB;AAAA,MAC/D,SAAS,KAAK,OAAO;AAAA,MACrB,QAAQ;AAAA,IACV,CAAC;AACD,WAAO;AAAA,MACL,SAAS,IAAI,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW;AAAA,QACvC,GAAG;AAAA,QACH,GAAG,wBAAwB,MAAM,IAAI;AAAA,MACvC,EAAE;AAAA,IACJ;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,QAA6C;AACzD,UAAM,UAAU,mBAAmB,OAAO,IAAI;AAC9C,UAAM,MAAO,MAAM,KAAK,OAAO;AAAA,MAC7B;AAAA,MACA,kBAAkB,OAAO;AAAA,MACzB;AAAA,QACE,SAAS,KAAK,OAAO;AAAA,QACrB,QAAQ;AAAA,MACV;AAAA,IACF;AACA,UAAM,MAAM,IAAI,OAAO,CAAC;AACxB,QAAI,CAAC;AACH,YAAM,IAAI,MAAM,sCAAsC,OAAO,IAAI,GAAG;AACtE,UAAM,mBAAmB,0BAA0B,OAAO,IAAI;AAC9D,WAAO;AAAA,MACL,GAAG;AAAA,MACH,GAAG,wBAAwB,OAAO,IAAI;AAAA,MACtC,GAAI,iBAAiB,SAAS,IAC1B,EAAE,mBAAmB,iBAAiB,IACtC,CAAC;AAAA,IACP;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,QAA2D;AACxE,UAAM,UAAU,mBAAmB,OAAO,IAAI;AAC9C,UAAM,MAAO,MAAM,KAAK,OAAO;AAAA,MAC7B;AAAA,MACA,kBAAkB,OAAO;AAAA,MACzB;AAAA,QACE,SAAS,KAAK,OAAO;AAAA,QACrB,QAAQ;AAAA,QACR,OAAO,EAAE,UAAU,OAAO,KAAK;AAAA,MACjC;AAAA,IACF;AACA,UAAM,MAAM,IAAI,OAAO,CAAC;AACxB,QAAI,CAAC,KAAK;AACR,YAAM,IAAI;AAAA,QACR,uCAAuC,OAAO,IAAI,WAAW,OAAO,IAAI;AAAA,MAC1E;AAAA,IACF;AACA,UAAM,WAAW,yBAAyB,OAAO,MAAM,OAAO,IAAI;AAClE,WAAO;AAAA,MACL,GAAG;AAAA,MACH,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,IACjC;AAAA,EACF;AACF;AAEA,SAAS,wBAAwB,OAG/B;AACA,QAAM,mBAAmB,0BAA0B,KAAK;AACxD,MAAI,iBAAiB,WAAW,GAAG;AACjC,WAAO,CAAC;AAAA,EACV;AACA,QAAM,SAA0B,CAAC;AACjC,MAAI,WAAW;AACf,aAAW,YAAY,kBAAkB;AACvC,WAAO,SAAS,IAAI,KAAK,OAAO,SAAS,IAAI,KAAK,KAAK;AACvD,QAAI,SAAS,aAAc,aAAY;AAAA,EACzC;AACA,SAAO;AAAA,IACL,sBAAsB;AAAA,IACtB,UAAU;AAAA,MACR,gBAAgB,iBAAiB;AAAA,MACjC,sBAAsB;AAAA,MACtB,WAAW;AAAA,IACb;AAAA,EACF;AACF;;;ACnFO,SAAS,qBAAqB,GAGnC;AACA,QAAM,QAAQ,EAAE,MAAM,GAAG;AACzB,MAAI,MAAM,WAAW,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG;AAChD,UAAM,IAAI;AAAA,MACR;AAAA,MACA,2DAA2D,CAAC;AAAA,MAC5D;AAAA,IACF;AAAA,EACF;AACA,SAAO,EAAE,UAAU,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,EAAE;AAC9C;AAEO,IAAM,yBAAN,MAA6B;AAAA,EAClC,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,KAAK,QAGqC;AAC9C,UAAM,QAAgC,CAAC;AACvC,QAAI,QAAQ,IAAK,OAAM,MAAM,OAAO;AACpC,QAAI,QAAQ,SAAU,OAAM,WAAW,OAAO;AAC9C,UAAM,MAAO,MAAM,KAAK,OAAO,SAAS,OAAO,kBAAkB;AAAA,MAC/D;AAAA,IACF,CAAC;AACD,WAAO,EAAE,QAAQ,IAAI,QAAQ,CAAC,EAAE;AAAA,EAClC;AAAA,EAEA,MAAM,OAAmD;AACvD,UAAM,MAAO,MAAM,KAAK,OAAO;AAAA,MAC7B;AAAA,MACA;AAAA,IACF;AACA,WAAO,EAAE,MAAM,IAAI,QAAQ,CAAC,EAAE;AAAA,EAChC;AAAA,EAEA,MAAM,IAAI,IAAwC;AAChD,UAAM,EAAE,UAAU,KAAK,IAAI,qBAAqB,EAAE;AAClD,UAAM,IAAI,mBAAmB,QAAQ;AACrC,UAAM,IAAI,mBAAmB,IAAI;AACjC,UAAM,MAAO,MAAM,KAAK,OAAO;AAAA,MAC7B;AAAA,MACA,kBAAkB,CAAC,IAAI,CAAC;AAAA,IAC1B;AACA,UAAM,OAAO,IAAI,OAAO,CAAC;AACzB,QAAI,CAAC,MAAM;AACT,YAAM,IAAI;AAAA,QACR;AAAA,QACA,0CAA0C,EAAE;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,KAAK,IAAY,MAA0C;AAC/D,UAAM,EAAE,UAAU,KAAK,IAAI,qBAAqB,EAAE;AAClD,UAAM,IAAI,mBAAmB,QAAQ;AACrC,UAAM,IAAI,mBAAmB,IAAI;AAEjC,UAAM,IAAI,KAAK,MAAM,GAAG,EAAE,IAAI,kBAAkB,EAAE,KAAK,GAAG;AAC1D,UAAM,MAAO,MAAM,KAAK,OAAO;AAAA,MAC7B;AAAA,MACA,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAAA,IACrC;AACA,UAAM,MAAM,IAAI,OAAO,CAAC;AACxB,QAAI,CAAC,KAAK;AACR,YAAM,IAAI;AAAA,QACR;AAAA,QACA,2CAA2C,EAAE,SAAS,IAAI;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;;;ACjHO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,OAAO,QAAgD;AAC3D,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,4BAA4B;AAAA,MAC9D,MAAM;AAAA,QACJ,UAAU,OAAO;AAAA,QACjB,MAAM,OAAO;AAAA,QACb,SAAS,OAAO;AAAA,QAChB,WAAW,OAAO;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,QAAkD;AAC1D,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,gCAAgC;AAAA,MAClE,MAAM,EAAE,YAAY,OAAO,WAAW;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,QAAkD;AAC5D,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,kCAAkC;AAAA,MACpE,MAAM,EAAE,YAAY,OAAO,WAAW;AAAA,IACxC,CAAC;AAAA,EACH;AACF;;;AC5BO,IAAM,gBAAN,MAAoB;AAAA,EACzB,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,KAAK,QAAqC;AAC9C,SAAK,OAAO,aAAa;AACzB,UAAM,KAAK,OAAO,SAAS,QAAQ,iBAAiB;AAAA,MAClD,MAAM;AAAA,QACJ,OAAO,OAAO;AAAA,QACd,SAAS,OAAO;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ACZO,IAAM,qBAAN,MAAyB;AAAA,EAC9B,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,QAAQ,QAAgD;AAC5D,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,sBAAsB;AAAA,MACvD,OAAO;AAAA,QACL,KAAK,OAAO;AAAA,QACZ,UAAU,OAAO;AAAA,QACjB,OAAO,OAAO;AAAA,QACd,UAAU,OAAO;AAAA,QACjB,kBAAkB,OAAO;AAAA,QACzB,oBAAoB,OAAO;AAAA,MAC7B;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AChBO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,KAA2B;AAC/B,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,YAAY;AAAA,EACjD;AACF;;;ACEO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,WAAsC;AAC1C,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,0BAA0B;AAAA,EAG/D;AAAA,EAEA,MAAM,UAAU,WAA8C;AAC5D,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,6BAA6B;AAAA,MAC9D,OAAO,EAAE,UAAU;AAAA,IACrB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,QAKe;AAC1B,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,0BAA0B;AAAA,MAC3D,OAAO;AAAA,QACL,WAAW,OAAO;AAAA,QAClB,QAAQ,OAAO;AAAA,QACf,OAAO,OAAO;AAAA,QACd,OAAO,OAAO;AAAA,MAChB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,cAAc,WAAmD;AACrE,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,iCAAiC;AAAA,MAClE,OAAO,EAAE,UAAU;AAAA,IACrB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,cAAc,QAKO;AACzB,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,kCAAkC;AAAA,MACnE,OAAO;AAAA,QACL,WAAW,OAAO;AAAA,QAClB,WAAW,OAAO;AAAA,QAClB,SAAS,OAAO;AAAA,QAChB,SAAS,OAAO;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YAAsC;AAC1C,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,QAOiB;AAC/B,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,6BAA6B;AAAA,MAC/D,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YACJ,gBACqC;AACrC,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,+BAA+B;AAAA,MACjE,MAAM,EAAE,eAAe;AAAA,IACzB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,QAAQ,QAMmB;AAC/B,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,2BAA2B;AAAA,MAC7D,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,gBAAgB,OAAuD;AAC3E,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,8BAA8B;AAAA,MAC/D,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AACF;;;AClHO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA;AAAA,EAGpB,MAAM,SAA2C;AAC/C,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,SAA2C;AAC/C,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;ACnBO,IAAM,wBAAN,MAA4B;AAAA,EACjC,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQpB,MAAM,aACJ,QAC2C;AAC3C,SAAK,OAAO,aAAa;AACzB,UAAM,OAAO,oBAAoB,mBAAmB,OAAO,QAAQ,CAAC,IAAI,mBAAmB,OAAO,IAAI,CAAC;AACvG,WAAO,KAAK,OAAO,SAAS,OAAO,MAAM;AAAA,MACvC,OAAO,WAAW,MAAM;AAAA,IAC1B,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,SACJ,QACuC;AACvC,SAAK,OAAO,aAAa;AACzB,UAAM,OAAO,gBAAgB,mBAAmB,OAAO,QAAQ,CAAC,IAAI,mBAAmB,OAAO,IAAI,CAAC;AACnG,WAAO,KAAK,OAAO,SAAS,OAAO,MAAM;AAAA,MACvC,OAAO,WAAW,MAAM;AAAA,IAC1B,CAAC;AAAA,EACH;AACF;AAEA,SAAS,WAAW,QAAwD;AAC1E,QAAM,IAA4B,CAAC;AACnC,MAAI,OAAO,QAAS,GAAE,UAAU,OAAO;AACvC,MAAI,OAAO,OAAQ,GAAE,SAAS,OAAO;AACrC,MAAI,OAAO,eAAe,UAAa,OAAO,aAAa,GAAG;AAC5D,MAAE,aAAa,OAAO,OAAO,UAAU;AAAA,EACzC;AACA,MAAI,OAAO,UAAU,UAAa,OAAO,QAAQ,GAAG;AAClD,MAAE,QAAQ,OAAO,OAAO,KAAK;AAAA,EAC/B;AACA,MAAI,OAAO,OAAQ,GAAE,SAAS,OAAO;AACrC,SAAO;AACT;;;AChCO,IAAM,4BAAN,MAAgC;AAAA,EACrC,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQpB,MAAM,kBACJ,QACsC;AACtC,SAAK,OAAO,aAAa;AACzB,UAAM,OAAO,uCAAuC,mBAAmB,OAAO,QAAQ,CAAC,IAAI,mBAAmB,OAAO,IAAI,CAAC;AAC1H,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,oBACJ,QACwC;AACxC,SAAK,OAAO,aAAa;AACzB,UAAM,OAAO,uCAAuC,mBAAmB,OAAO,QAAQ,CAAC,IAAI,mBAAmB,OAAO,IAAI,CAAC;AAC1H,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,cACJ,QAC0C;AAC1C,SAAK,OAAO,aAAa;AACzB,UAAM,OAAO,mCAAmC,mBAAmB,OAAO,QAAQ,CAAC,IAAI,mBAAmB,OAAO,IAAI,CAAC;AACtH,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,gBACJ,QACwC;AACxC,SAAK,OAAO,aAAa;AACzB,UAAM,OAAO,mCAAmC,mBAAmB,OAAO,QAAQ,CAAC,IAAI,mBAAmB,OAAO,IAAI,CAAC;AACtH,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,KACJ,SAAqC,CAAC,GACC;AACvC,SAAK,OAAO,aAAa;AACzB,UAAM,QAAgC,CAAC;AACvC,QAAI,OAAO,oBAAoB,QAAW;AACxC,YAAM,kBAAkB,OAAO,OAAO,eAAe;AAAA,IACvD;AACA,WAAO,KAAK,OAAO,SAAS,OAAO,iCAAiC;AAAA,MAClE;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ACzFO,IAAM,oCAAN,MAAwC;AAAA,EAC7C,YAAoB,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAArB;AAAA,EAEpB,MAAM,QACJ,QACkD;AAClD,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,QACE,OAAO,EAAE,YAAY,OAAO,WAAW;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,KACJ,QAC+C;AAC/C,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,OAAO,uCAAuC;AAAA,MACxE,OAAO,EAAE,YAAY,OAAO,WAAW;AAAA,IACzC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UACJ,QACmD;AACnD,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO,SAAS,QAAQ,uCAAuC;AAAA,MACzE,UAAU,aAAa,MAAM;AAAA,IAC/B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YACJ,QACmD;AACnD,SAAK,OAAO,aAAa;AACzB,WAAO,KAAK,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,QACE,UAAU,aAAa,MAAM;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,aAAa,QAAwD;AAC5E,SAAO,iBAAiB,UAAU,OAAO,UAAU,CAAC,kBAAkB,KAAK,UAAU,OAAO,WAAW,CAAC,gBAAgB,UAAU,OAAO,SAAS,CAAC;AACrJ;AAEA,SAAS,UAAU,OAAgC;AACjD,MAAI,OAAO,UAAU,UAAU;AAC7B,QACE,CAAC,OAAO,UAAU,KAAK,KACvB,SAAS,KACT,CAAC,OAAO,cAAc,KAAK,GAC3B;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,WAAO,OAAO,KAAK;AAAA,EACrB;AACA,MAAI,CAAC,aAAa,KAAK,KAAK,GAAG;AAC7B,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;;;ACxEA,IAAM,mBAAmB;AAClB,IAAM,0BAA0B;AAehC,IAAM,aAAN,MAAiB;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAED;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,QAA0B;AACpC,SAAK,UAAU,OAAO,WAAW;AACjC,SAAK,gBAAgB,OAAO,iBAAiB;AAC7C,SAAK,eAAe,OAAO;AAC3B,SAAK,SAAS,OAAO;AAAA,EACvB;AAAA,EAEA,IAAI,KAAiB;AACnB,WAAQ,KAAK,QAAQ,IAAI,WAAW,IAAI;AAAA,EAC1C;AAAA,EACA,IAAI,MAAmB;AACrB,WAAQ,KAAK,SAAS,IAAI,YAAY,IAAI;AAAA,EAC5C;AAAA,EACA,IAAI,SAAyB;AAC3B,WAAQ,KAAK,YAAY,IAAI,eAAe,IAAI;AAAA,EAClD;AAAA,EACA,IAAI,UAA2B;AAC7B,WAAQ,KAAK,aAAa,IAAI,gBAAgB,IAAI;AAAA,EACpD;AAAA,EACA,IAAI,UAA2B;AAC7B,WAAQ,KAAK,aAAa,IAAI,gBAAgB,IAAI;AAAA,EACpD;AAAA,EACA,IAAI,MAAuB;AACzB,WAAQ,KAAK,SAAS,IAAI,gBAAgB,IAAI;AAAA,EAChD;AAAA,EACA,IAAI,aAAiC;AACnC,WAAQ,KAAK,gBAAgB,IAAI,mBAAmB,IAAI;AAAA,EAC1D;AAAA,EACA,IAAI,iBAAyC;AAC3C,WAAQ,KAAK,oBAAoB,IAAI,uBAAuB,IAAI;AAAA,EAClE;AAAA,EACA,IAAI,WAA6B;AAC/B,WAAQ,KAAK,cAAc,IAAI,iBAAiB,IAAI;AAAA,EACtD;AAAA,EACA,IAAI,QAAuB;AACzB,WAAQ,KAAK,WAAW,IAAI,cAAc,IAAI;AAAA,EAChD;AAAA,EACA,IAAI,aAAiC;AACnC,WAAQ,KAAK,gBAAgB,IAAI,mBAAmB,IAAI;AAAA,EAC1D;AAAA,EACA,IAAI,OAAqB;AACvB,WAAQ,KAAK,UAAU,IAAI,aAAa,IAAI;AAAA,EAC9C;AAAA,EACA,IAAI,UAA2B;AAC7B,WAAQ,KAAK,aAAa,IAAI,gBAAgB,IAAI;AAAA,EACpD;AAAA,EACA,IAAI,YAA+B;AACjC,WAAQ,KAAK,eAAe,IAAI,kBAAkB,IAAI;AAAA,EACxD;AAAA,EACA,IAAI,gBAAuC;AACzC,WAAQ,KAAK,mBAAmB,IAAI,sBAAsB,IAAI;AAAA,EAChE;AAAA,EACA,IAAI,oBAA+C;AACjD,WAAQ,KAAK,uBAAuB,IAAI,0BAA0B,IAAI;AAAA,EACxE;AAAA,EACA,IAAI,4BAA+D;AACjE,WAAQ,KAAK,+BACX,IAAI,kCAAkC,IAAI;AAAA,EAC9C;AAAA,EAEA,eAAqB;AACnB,QAAI,CAAC,KAAK,gBAAgB,CAAC,KAAK,QAAQ;AACtC,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,QACA,MACA,SACkB;AAClB,UAAM,UAAU,SAAS,WAAW,KAAK;AACzC,QAAI,MAAM,GAAG,OAAO,GAAG,IAAI;AAE3B,QAAI,SAAS,OAAO;AAClB,YAAM,SAAS,IAAI,gBAAgB;AACnC,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,KAAK,GAAG;AACxD,YAAI,UAAU,UAAa,UAAU,MAAM;AACzC,iBAAO,IAAI,KAAK,OAAO,KAAK,CAAC;AAAA,QAC/B;AAAA,MACF;AACA,YAAM,KAAK,OAAO,SAAS;AAC3B,UAAI,IAAI;AACN,eAAO,IAAI,EAAE;AAAA,MACf;AAAA,IACF;AAEA,UAAM,UAAkC,CAAC;AACzC,QAAI,CAAC,SAAS,QAAQ;AACpB,UAAI,KAAK,cAAc;AACrB,gBAAQ,mBAAmB,IAAI,KAAK;AAAA,MACtC,WAAW,KAAK,QAAQ;AACtB,gBAAQ,gBAAgB,IAAI,KAAK;AAAA,MACnC;AAAA,IACF;AAEA,QAAI;AACJ,QAAI,SAAS,YAAY,QAAW;AAClC,cAAQ,cAAc,IAAI;AAC1B,kBAAY,QAAQ;AAAA,IACtB,WAAW,SAAS,aAAa,QAAW;AAC1C,cAAQ,cAAc,IAAI;AAC1B,kBAAY,QAAQ;AAAA,IACtB,WAAW,SAAS,SAAS,QAAW;AACtC,cAAQ,cAAc,IAAI;AAC1B,kBAAY,KAAK,UAAU,QAAQ,IAAI;AAAA,IACzC;AAEA,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,MAAM,KAAK;AAAA,QAC1B;AAAA,QACA;AAAA,QACA,MAAM;AAAA,MACR,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA,eAAe,QAAQ,IAAI,UAAU;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,IAAI;AAEhB,YAAM,WAAW,MAAM,SAAS,KAAK,EAAE,MAAM,MAAM,EAAE;AACrD,YAAMA,eAAc,SAAS,QAAQ,IAAI,cAAc,KAAK;AAC5D,UAAIA,aAAY,SAAS,kBAAkB,KAAK,UAAU;AACxD,YAAI;AACF,gBAAM,OAAO,KAAK,MAAM,QAAQ;AAGhC,cAAI,KAAK,OAAO;AACd,kBAAM,IAAI;AAAA,cACR,KAAK,MAAM,QAAQ;AAAA,cACnB,KAAK,MAAM,WAAW,QAAQ,SAAS,MAAM;AAAA,cAC7C,SAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF,SAAS,GAAG;AACV,cAAI,aAAa,UAAW,OAAM;AAAA,QAEpC;AAAA,MACF;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA,QAAQ,SAAS,MAAM,KAAK,SAAS,MAAM,GAAG,GAAG,CAAC;AAAA,QAClD,SAAS;AAAA,MACX;AAAA,IACF;AAGA,QAAI,SAAS,WAAW,KAAK;AAC3B,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,SAAS,QAAQ,IAAI,cAAc,KAAK;AAC5D,QACE,YAAY,SAAS,0BAA0B,KAC/C,YAAY,SAAS,QAAQ,GAC7B;AACA,aAAO,SAAS,YAAY;AAAA,IAC9B;AAEA,WAAO,SAAS,KAAK;AAAA,EACvB;AACF;;;ACnOO,IAAM,UACX,OAAqC,iBAAc;","names":["contentType"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alva-ai/toolkit",
3
- "version": "0.4.3",
3
+ "version": "0.7.0-beta.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": {
@@ -39,7 +39,9 @@
39
39
  "format:check": "prettier --check .",
40
40
  "format": "prettier --write .",
41
41
  "typecheck": "tsc --noEmit",
42
- "release": "bash scripts/release.sh"
42
+ "release": "bash scripts/release.sh",
43
+ "release:stg": "bash scripts/release-stg.sh",
44
+ "prepare": "node scripts/install-git-hooks.mjs"
43
45
  },
44
46
  "repository": {
45
47
  "type": "git",