@myna-sh/cli 0.1.4 → 0.2.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/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/main.ts","../../sdk/src/errors.ts","../../sdk/src/http.ts","../../sdk/src/management.ts","../../sdk/src/codegen.ts","../src/config.ts","../src/output.ts","../src/client.ts","../src/runtime.ts","../src/util.ts","../src/commands/auth.ts","../src/commands/workspace.ts","../src/commands/schema.ts","../src/schema-loader.ts","../../schema/src/canonical.ts","../src/dsl-emit.ts","../src/commands/entries.ts","../src/commands/changes.ts","../src/commands/previews.ts","../src/commands/assets.ts","../src/commands/admin.ts"],"sourcesContent":["import { Command, CommanderError } from \"commander\";\nimport { registerAuth } from \"./commands/auth.js\";\nimport { registerWorkspace } from \"./commands/workspace.js\";\nimport { registerSchema } from \"./commands/schema.js\";\nimport { registerEntries } from \"./commands/entries.js\";\nimport { registerChanges } from \"./commands/changes.js\";\nimport { registerPreviews } from \"./commands/previews.js\";\nimport { registerAssets } from \"./commands/assets.js\";\nimport { registerAdmin } from \"./commands/admin.js\";\n\nconst VERSION = \"0.1.4\";\n\nconst GLOBAL_VALUE_FLAGS = new Set([\"--project\", \"--organization\", \"--token\", \"--api-url\"]);\nconst GLOBAL_BOOL_FLAGS = new Set([\"--json\", \"--no-interactive\", \"--interactive\"]);\n\n/**\n * Hoist global flags (which may appear anywhere) to the front so Commander,\n * which only recognizes them on the root program, always parses them.\n */\nfunction normalizeGlobals(argv: string[]): string[] {\n const [node, script, ...rest] = argv;\n const globals: string[] = [];\n const remaining: string[] = [];\n for (let i = 0; i < rest.length; i++) {\n const arg = rest[i]!;\n const eq = arg.indexOf(\"=\");\n const name = eq === -1 ? arg : arg.slice(0, eq);\n if (GLOBAL_BOOL_FLAGS.has(name)) {\n globals.push(arg);\n } else if (GLOBAL_VALUE_FLAGS.has(name)) {\n if (eq === -1) {\n globals.push(arg);\n if (i + 1 < rest.length) globals.push(rest[++i]!);\n } else {\n globals.push(arg);\n }\n } else {\n remaining.push(arg);\n }\n }\n return [node!, script!, ...globals, ...remaining];\n}\n\nexport function buildProgram(): Command {\n const program = new Command();\n program\n .name(\"myna\")\n .description(\"Myna — content infrastructure for developers and agents\")\n .version(VERSION, \"-v, --version\")\n .option(\"--json\", \"emit a single machine-readable JSON value on stdout\")\n .option(\"--project <ref>\", \"project id or slug\")\n .option(\"--organization <ref>\", \"organization id or slug\")\n .option(\"--token <token>\", \"API token (overrides stored credentials)\")\n .option(\"--api-url <url>\", \"API base URL\")\n .option(\"--no-interactive\", \"disable prompts and browser opening\")\n .showHelpAfterError();\n\n registerAuth(program);\n registerWorkspace(program);\n registerSchema(program);\n registerEntries(program);\n registerChanges(program);\n registerPreviews(program);\n registerAssets(program);\n registerAdmin(program);\n\n return program;\n}\n\nexport async function main(argv: string[] = process.argv): Promise<void> {\n const program = buildProgram();\n program.exitOverride();\n try {\n await program.parseAsync(normalizeGlobals(argv));\n } catch (error) {\n if (error instanceof CommanderError) {\n if (\n error.code === \"commander.helpDisplayed\" ||\n error.code === \"commander.version\" ||\n error.code === \"commander.help\"\n ) {\n process.exitCode = 0;\n return;\n }\n process.exitCode = 2;\n return;\n }\n process.stderr.write(`error: ${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n }\n}\n","import type { FieldErrorContract, ProblemDetailsContract } from \"../../api-contracts/src/common.js\";\n\n/**\n * Error thrown by both SDK clients when the API returns a non-2xx response.\n * Carries the parsed RFC 9457 problem-details document so callers can branch on\n * the stable `code`, inspect field-level `fields`, and surface the `requestId`.\n */\nexport class MynaApiError extends Error {\n /** HTTP status code. */\n readonly status: number;\n /** Stable machine-readable error code (e.g. `VALIDATION_FAILED`). */\n readonly code: string;\n /** RFC 9457 `type` URI. */\n readonly type: string | undefined;\n /** Human-facing title. */\n readonly title: string;\n /** Longer human-facing detail, when provided. */\n readonly detail: string | undefined;\n /** Server request id for support/correlation. */\n readonly requestId: string | undefined;\n /** Field-level validation errors, when present. */\n readonly fields: FieldErrorContract[] | undefined;\n /** The full parsed problem document (or a synthesized one). */\n readonly problem: ProblemDetailsContract;\n\n constructor(problem: ProblemDetailsContract) {\n super(problem.detail ?? problem.title ?? `Request failed (${problem.status})`);\n this.name = \"MynaApiError\";\n this.status = problem.status;\n this.code = problem.code;\n this.type = problem.type;\n this.title = problem.title;\n this.detail = problem.detail;\n this.requestId = problem.requestId;\n this.fields = problem.fields;\n this.problem = problem;\n Object.setPrototypeOf(this, MynaApiError.prototype);\n }\n\n static is(value: unknown): value is MynaApiError {\n return value instanceof MynaApiError;\n }\n}\n\n/** Type guard for `MynaApiError`. */\nexport function isMynaApiError(value: unknown): value is MynaApiError {\n return value instanceof MynaApiError;\n}\n\n/** Build a `MynaApiError` from an arbitrary response body and status. */\nexport function problemFromResponse(status: number, body: unknown, fallbackTitle: string): MynaApiError {\n if (body && typeof body === \"object\" && \"code\" in body && \"status\" in body) {\n return new MynaApiError(body as ProblemDetailsContract);\n }\n const detail =\n body && typeof body === \"object\" && \"error\" in body && typeof (body as { error: unknown }).error === \"string\"\n ? (body as { error: string }).error\n : typeof body === \"string\" && body\n ? body\n : undefined;\n return new MynaApiError({\n type: \"about:blank\",\n title: fallbackTitle,\n status,\n code: status >= 500 ? \"INTERNAL\" : \"REQUEST_FAILED\",\n detail,\n } as ProblemDetailsContract);\n}\n","import { problemFromResponse } from \"./errors.js\";\n\n/** A fetch-compatible function. */\nexport type FetchLike = (input: string, init?: RequestInit) => Promise<Response>;\n\nexport interface RetryOptions {\n /** Maximum number of retries (in addition to the first attempt). Default 3. */\n maxRetries?: number;\n /** Base backoff in milliseconds (exponential). Default 200. */\n baseDelayMs?: number;\n /** Cap on any single backoff. Default 5000. */\n maxDelayMs?: number;\n}\n\nexport interface HttpClientOptions {\n /** Base URL including the version prefix, e.g. `https://api.myna.sh/v1`. */\n baseUrl: string;\n /** Bearer credential (API key, preview token, or CLI token). */\n token?: string | undefined;\n /** Custom fetch implementation (browser/undici/node). */\n fetch?: FetchLike | undefined;\n /** Extra default headers merged into every request. */\n headers?: Record<string, string> | undefined;\n /** Retry policy. Retries apply to safe reads and idempotent mutations only. */\n retry?: RetryOptions | undefined;\n}\n\nexport interface RequestOptions {\n query?: Record<string, unknown> | undefined;\n body?: unknown;\n headers?: Record<string, string> | undefined;\n signal?: AbortSignal | undefined;\n /** Sending an idempotency key makes a mutation eligible for automatic retry. */\n idempotencyKey?: string | undefined;\n /** Override the bearer token for a single request (e.g. a preview token). */\n token?: string | undefined;\n}\n\nconst RETRYABLE_STATUS = new Set([408, 425, 429, 500, 502, 503, 504]);\nconst SAFE_METHODS = new Set([\"GET\", \"HEAD\", \"OPTIONS\"]);\n\nfunction resolveFetch(custom?: FetchLike): FetchLike {\n if (custom) return custom;\n if (typeof globalThis.fetch === \"function\") return globalThis.fetch.bind(globalThis) as FetchLike;\n throw new Error(\"No fetch implementation available. Pass `fetch` to the Myna client.\");\n}\n\n/** Serialize a query object, supporting nested `filter[field][op]` shapes. */\nexport function buildQuery(query: Record<string, unknown> | undefined): string {\n if (!query) return \"\";\n const params = new URLSearchParams();\n const append = (key: string, value: unknown): void => {\n if (value === undefined || value === null) return;\n if (Array.isArray(value)) {\n params.set(key, value.join(\",\"));\n return;\n }\n if (typeof value === \"object\") {\n for (const [op, v] of Object.entries(value as Record<string, unknown>)) {\n append(`${key}[${op}]`, v);\n }\n return;\n }\n params.set(key, String(value));\n };\n for (const [key, value] of Object.entries(query)) append(key, value);\n const qs = params.toString();\n return qs ? `?${qs}` : \"\";\n}\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) return reject(signal.reason ?? new Error(\"Aborted\"));\n const timer = setTimeout(resolve, ms);\n signal?.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n reject(signal.reason ?? new Error(\"Aborted\"));\n },\n { once: true },\n );\n });\n}\n\nexport class HttpClient {\n private readonly baseUrl: string;\n private readonly token: string | undefined;\n private readonly fetchImpl: FetchLike;\n private readonly defaultHeaders: Record<string, string>;\n private readonly retry: Required<RetryOptions>;\n\n constructor(options: HttpClientOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/+$/, \"\");\n this.token = options.token;\n this.fetchImpl = resolveFetch(options.fetch);\n this.defaultHeaders = options.headers ?? {};\n this.retry = {\n maxRetries: options.retry?.maxRetries ?? 3,\n baseDelayMs: options.retry?.baseDelayMs ?? 200,\n maxDelayMs: options.retry?.maxDelayMs ?? 5000,\n };\n }\n\n /** Perform a request and unwrap the `{ data }` envelope. */\n async request<T>(method: string, path: string, options: RequestOptions = {}): Promise<T> {\n const raw = await this.requestRaw(method, path, options);\n if (raw.status === 204 || raw.status === 304) return undefined as T;\n const parsed = (await raw.json().catch(() => undefined)) as { data?: T } | undefined;\n return (parsed && \"data\" in parsed ? parsed.data : (parsed as unknown)) as T;\n }\n\n /** Perform a request and return the full parsed body (envelope included). */\n async requestEnvelope<T>(method: string, path: string, options: RequestOptions = {}): Promise<T> {\n const raw = await this.requestRaw(method, path, options);\n return (await raw.json().catch(() => ({}))) as T;\n }\n\n /** Low-level request with retries; throws `MynaApiError` on non-2xx. */\n async requestRaw(method: string, path: string, options: RequestOptions = {}): Promise<Response> {\n const url = `${this.baseUrl}${path}${buildQuery(options.query)}`;\n const headers: Record<string, string> = {\n accept: \"application/json\",\n ...this.defaultHeaders,\n ...options.headers,\n };\n const token = options.token ?? this.token;\n if (token) headers.authorization = `Bearer ${token}`;\n\n let payload: BodyInit | undefined;\n if (options.body !== undefined) {\n if (options.body instanceof Uint8Array || typeof options.body === \"string\") {\n payload = options.body as BodyInit;\n } else {\n headers[\"content-type\"] = \"application/json\";\n payload = JSON.stringify(options.body);\n }\n }\n if (options.idempotencyKey) headers[\"idempotency-key\"] = options.idempotencyKey;\n\n const idempotent = SAFE_METHODS.has(method.toUpperCase()) || Boolean(options.idempotencyKey);\n const init: RequestInit = { method, headers };\n if (payload !== undefined) init.body = payload;\n if (options.signal) init.signal = options.signal;\n\n let attempt = 0;\n for (;;) {\n let response: Response;\n try {\n response = await this.fetchImpl(url, init);\n } catch (error) {\n if (idempotent && attempt < this.retry.maxRetries && !isAbort(error)) {\n await sleep(this.backoff(attempt), options.signal);\n attempt++;\n continue;\n }\n throw error;\n }\n\n if (response.ok) return response;\n\n if (idempotent && RETRYABLE_STATUS.has(response.status) && attempt < this.retry.maxRetries) {\n const retryAfter = retryAfterMs(response);\n await sleep(retryAfter ?? this.backoff(attempt), options.signal);\n attempt++;\n continue;\n }\n\n const body = await response.json().catch(() => undefined);\n throw problemFromResponse(response.status, body, response.statusText || \"Request failed\");\n }\n }\n\n private backoff(attempt: number): number {\n const base = Math.min(this.retry.baseDelayMs * 2 ** attempt, this.retry.maxDelayMs);\n return Math.round(base * (0.5 + Math.random() * 0.5));\n }\n}\n\nfunction retryAfterMs(response: Response): number | undefined {\n const header = response.headers.get(\"retry-after\");\n if (!header) return undefined;\n const seconds = Number(header);\n return Number.isFinite(seconds) ? seconds * 1000 : undefined;\n}\n\nfunction isAbort(error: unknown): boolean {\n return (\n error instanceof Error &&\n (error.name === \"AbortError\" || error.name === \"TimeoutError\")\n );\n}\n","import { createHash, randomUUID } from \"node:crypto\";\nimport { readFile } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport type {\n AcceptInvitationResponse,\n ApiKeyContract,\n CreateApiKeyRequest,\n CreateApiKeyResponse,\n CreateInvitationRequest,\n CreateOrganizationRequest,\n InvitationContract,\n MemberContract,\n OrganizationContract,\n UpdateMemberRequest,\n UpdateOrganizationRequest,\n} from \"../../api-contracts/src/organizations.js\";\nimport type { ActivityEventContract } from \"../../api-contracts/src/activity.js\";\nimport type {\n AssetContract,\n CompleteUploadResponse,\n CreateUploadRequest,\n CreateUploadResponse,\n UpdateAssetRequest,\n} from \"../../api-contracts/src/assets.js\";\nimport type {\n BillingResponse,\n CheckoutRequest,\n CheckoutResponse,\n PortalResponse,\n} from \"../../api-contracts/src/billing.js\";\nimport type {\n ChangeSetContract,\n CreateChangeSetRequest,\n UpdateChangeSetRequest,\n} from \"../../api-contracts/src/change-sets.js\";\nimport type {\n CollectionContract,\n CollectionVersionContract,\n SchemaDiffResponse,\n SchemaPushResponse,\n} from \"../../api-contracts/src/collections.js\";\nimport type {\n EntryContract,\n RestoreRevisionResponse,\n RevisionContract,\n} from \"../../api-contracts/src/entries.js\";\nimport type { CreatePreviewRequest, PreviewContract } from \"../../api-contracts/src/previews.js\";\nimport type {\n CreateProjectRequest,\n ProjectContract,\n UpdateProjectRequest,\n} from \"../../api-contracts/src/projects.js\";\nimport type { UsageResponse } from \"../../api-contracts/src/usage.js\";\nimport type {\n CreateWebhookRequest,\n CreateWebhookResponse,\n UpdateWebhookRequest,\n WebhookDeliveryContract,\n WebhookEndpointContract,\n} from \"../../api-contracts/src/webhooks.js\";\nimport { HttpClient, type FetchLike, type RetryOptions } from \"./http.js\";\n\nconst DEFAULT_API_URL = \"https://api.myna.sh\";\n\nexport interface ManagementClientOptions {\n /** Management/CLI credential (`myna_sk_...`). */\n token: string;\n /** API origin. Defaults to `https://api.myna.sh`. */\n apiUrl?: string;\n fetch?: FetchLike;\n retry?: RetryOptions;\n /**\n * Idempotency-key factory for mutations. Defaults to a random UUID per call.\n * Pass a stable value to make a specific mutation replay-safe.\n */\n idempotencyKey?: () => string;\n}\n\nexport interface ListOptions {\n limit?: number;\n cursor?: string;\n signal?: AbortSignal;\n}\n\nexport interface Page<T> {\n data: T[];\n nextCursor: string | null;\n}\n\nexport interface UploadAssetMeta {\n filename?: string;\n contentType?: string;\n /** Override the automatically detected byte length. */\n byteSize?: number;\n}\n\n/** Bytes or a filesystem path accepted by `uploadAsset`. */\nexport type AssetInput = string | Uint8Array | ArrayBuffer;\n\n/**\n * Server-only management client (SPEC 12). Typed wrappers over the full\n * management API surface. Mutations automatically carry an `Idempotency-Key`.\n */\nexport class ManagementClient {\n private readonly http: HttpClient;\n private readonly newIdempotencyKey: () => string;\n private readonly fetchImpl: FetchLike;\n\n constructor(options: ManagementClientOptions) {\n if (!options.token) throw new Error(\"createManagementClient: `token` is required.\");\n this.newIdempotencyKey = options.idempotencyKey ?? (() => randomUUID());\n this.fetchImpl = options.fetch ?? ((input, init) => fetch(input, init));\n this.http = new HttpClient({\n baseUrl: `${(options.apiUrl ?? DEFAULT_API_URL).replace(/\\/+$/, \"\")}/v1`,\n token: options.token,\n fetch: options.fetch,\n retry: options.retry,\n });\n }\n\n // Convenience: idempotency key for a mutation.\n private idem(): string {\n return this.newIdempotencyKey();\n }\n\n private get<T>(path: string, query?: Record<string, unknown>, signal?: AbortSignal): Promise<T> {\n return this.http.request<T>(\"GET\", path, { query, signal });\n }\n\n private async page<T>(path: string, opts: ListOptions = {}): Promise<Page<T>> {\n const body = await this.http.requestEnvelope<{ data: T[]; pagination: { nextCursor: string | null } }>(\n \"GET\",\n path,\n { query: { limit: opts.limit, cursor: opts.cursor }, signal: opts.signal },\n );\n return { data: body.data, nextCursor: body.pagination?.nextCursor ?? null };\n }\n\n private mutate<T>(method: string, path: string, body?: unknown, query?: Record<string, unknown>): Promise<T> {\n return this.http.request<T>(method, path, { body, query, idempotencyKey: this.idem() });\n }\n\n // --- Organizations --------------------------------------------------------\n readonly organizations = {\n list: (signal?: AbortSignal): Promise<OrganizationContract[]> =>\n this.get<OrganizationContract[]>(\"/organizations\", undefined, signal),\n create: (body: CreateOrganizationRequest): Promise<OrganizationContract> =>\n this.mutate<OrganizationContract>(\"POST\", \"/organizations\", body),\n get: (organization: string, signal?: AbortSignal): Promise<OrganizationContract> =>\n this.get<OrganizationContract>(`/organizations/${enc(organization)}`, undefined, signal),\n update: (organization: string, body: UpdateOrganizationRequest): Promise<OrganizationContract> =>\n this.mutate<OrganizationContract>(\"PATCH\", `/organizations/${enc(organization)}`, body),\n delete: (organization: string): Promise<{ ok: boolean; recoverableForDays: number }> =>\n this.mutate(\"DELETE\", `/organizations/${enc(organization)}`),\n export: (organization: string): Promise<{ jobId: string; storageKey: string; downloadUrl: string; ready: boolean }> =>\n this.mutate(\"POST\", `/organizations/${enc(organization)}/export`),\n usage: (organization: string, signal?: AbortSignal): Promise<UsageResponse> =>\n this.get<UsageResponse>(`/organizations/${enc(organization)}/usage`, undefined, signal),\n };\n\n // --- Members & invitations ------------------------------------------------\n readonly members = {\n list: (organization: string, signal?: AbortSignal): Promise<MemberContract[]> =>\n this.get<MemberContract[]>(`/organizations/${enc(organization)}/members`, undefined, signal),\n update: (organization: string, user: string, body: UpdateMemberRequest): Promise<{ ok: boolean }> =>\n this.mutate(\"PATCH\", `/organizations/${enc(organization)}/members/${enc(user)}`, body),\n remove: (organization: string, user: string): Promise<{ ok: boolean }> =>\n this.mutate(\"DELETE\", `/organizations/${enc(organization)}/members/${enc(user)}`),\n };\n\n readonly invitations = {\n list: (organization: string, signal?: AbortSignal): Promise<InvitationContract[]> =>\n this.get<InvitationContract[]>(`/organizations/${enc(organization)}/invitations`, undefined, signal),\n create: (organization: string, body: CreateInvitationRequest): Promise<InvitationContract> =>\n this.mutate<InvitationContract>(\"POST\", `/organizations/${enc(organization)}/invitations`, body),\n revoke: (organization: string, invitation: string): Promise<{ ok: boolean }> =>\n this.mutate(\"DELETE\", `/organizations/${enc(organization)}/invitations/${enc(invitation)}`),\n accept: (token: string): Promise<AcceptInvitationResponse> =>\n this.mutate<AcceptInvitationResponse>(\"POST\", `/invitations/${enc(token)}/accept`),\n };\n\n // --- Projects -------------------------------------------------------------\n readonly projects = {\n list: (organization: string, signal?: AbortSignal): Promise<ProjectContract[]> =>\n this.get<ProjectContract[]>(`/organizations/${enc(organization)}/projects`, undefined, signal),\n create: (organization: string, body: CreateProjectRequest): Promise<ProjectContract> =>\n this.mutate<ProjectContract>(\"POST\", `/organizations/${enc(organization)}/projects`, body),\n get: (project: string, signal?: AbortSignal): Promise<ProjectContract> =>\n this.get<ProjectContract>(`/projects/${enc(project)}`, undefined, signal),\n update: (project: string, body: UpdateProjectRequest): Promise<ProjectContract> =>\n this.mutate<ProjectContract>(\"PATCH\", `/projects/${enc(project)}`, body),\n archive: (project: string): Promise<ProjectContract> =>\n this.mutate<ProjectContract>(\"POST\", `/projects/${enc(project)}/archive`),\n };\n\n // --- Schema ---------------------------------------------------------------\n readonly schema = {\n collections: (project: string, signal?: AbortSignal): Promise<CollectionContract[]> =>\n this.get<CollectionContract[]>(`/projects/${enc(project)}/collections`, undefined, signal),\n collection: (project: string, key: string, signal?: AbortSignal): Promise<CollectionContract> =>\n this.get<CollectionContract>(`/projects/${enc(project)}/collections/${enc(key)}`, undefined, signal),\n versions: (project: string, key: string, signal?: AbortSignal): Promise<CollectionVersionContract[]> =>\n this.get<CollectionVersionContract[]>(`/projects/${enc(project)}/collections/${enc(key)}/versions`, undefined, signal),\n diff: (project: string, collections: Record<string, unknown>[]): Promise<SchemaDiffResponse> =>\n this.mutate<SchemaDiffResponse>(\"POST\", `/projects/${enc(project)}/schema/diff`, { collections }),\n push: (\n project: string,\n collections: Record<string, unknown>[],\n opts: { allowDestructive?: boolean; changeSummary?: string } = {},\n ): Promise<SchemaPushResponse> =>\n this.mutate<SchemaPushResponse>(\"POST\", `/projects/${enc(project)}/schema/push`, {\n collections,\n allowDestructive: opts.allowDestructive ?? false,\n changeSummary: opts.changeSummary,\n }),\n };\n\n // --- Entries & revisions --------------------------------------------------\n readonly entries = {\n list: (\n project: string,\n opts: ListOptions & { collection?: string; status?: string } = {},\n ): Promise<Page<EntryContract>> =>\n this.page<EntryContract>(\n `/projects/${enc(project)}/entries` + query({ collection: opts.collection, status: opts.status }),\n opts,\n ),\n create: (\n project: string,\n body: { collection: string; slug?: string; data: Record<string, unknown>; changeSetId?: string; changeSummary?: string },\n ): Promise<EntryContract> => this.mutate<EntryContract>(\"POST\", `/projects/${enc(project)}/entries`, body),\n get: (project: string, entry: string, signal?: AbortSignal): Promise<EntryContract> =>\n this.get<EntryContract>(`/projects/${enc(project)}/entries/${enc(entry)}`, undefined, signal),\n update: (\n project: string,\n entry: string,\n body: {\n data?: Record<string, unknown>;\n slug?: string;\n expectedRevisionId?: string;\n changeSetId?: string;\n changeSummary?: string;\n },\n ): Promise<EntryContract> => this.mutate<EntryContract>(\"PATCH\", `/projects/${enc(project)}/entries/${enc(entry)}`, body),\n delete: (project: string, entry: string, changeSetId?: string): Promise<{ changeSetId: string; staged: string }> =>\n this.mutate(\"DELETE\", `/projects/${enc(project)}/entries/${enc(entry)}`, undefined, { changeSetId }),\n unpublish: (project: string, entry: string, changeSetId?: string): Promise<{ changeSetId: string; staged: string }> =>\n this.mutate(\"POST\", `/projects/${enc(project)}/entries/${enc(entry)}/unpublish`, undefined, { changeSetId }),\n restore: (project: string, entry: string): Promise<RestoreRevisionResponse> =>\n this.mutate<RestoreRevisionResponse>(\"POST\", `/projects/${enc(project)}/entries/${enc(entry)}/restore`),\n revisions: (project: string, entry: string, signal?: AbortSignal): Promise<RevisionContract[]> =>\n this.get<RevisionContract[]>(`/projects/${enc(project)}/entries/${enc(entry)}/revisions`, undefined, signal),\n revision: (project: string, entry: string, revision: string, signal?: AbortSignal): Promise<RevisionContract> =>\n this.get<RevisionContract>(`/projects/${enc(project)}/entries/${enc(entry)}/revisions/${enc(revision)}`, undefined, signal),\n restoreRevision: (project: string, entry: string, revision: string): Promise<RestoreRevisionResponse> =>\n this.mutate<RestoreRevisionResponse>(\n \"POST\",\n `/projects/${enc(project)}/entries/${enc(entry)}/revisions/${enc(revision)}/restore`,\n ),\n };\n\n // --- Change sets ----------------------------------------------------------\n readonly changeSets = {\n list: (project: string, opts: ListOptions & { status?: string } = {}): Promise<Page<ChangeSetContract>> =>\n this.page<ChangeSetContract>(`/projects/${enc(project)}/change-sets` + query({ status: opts.status }), opts),\n create: (project: string, body: CreateChangeSetRequest): Promise<ChangeSetContract> =>\n this.mutate<ChangeSetContract>(\"POST\", `/projects/${enc(project)}/change-sets`, body),\n get: (project: string, changeSet: string, signal?: AbortSignal): Promise<ChangeSetContract> =>\n this.get<ChangeSetContract>(`/projects/${enc(project)}/change-sets/${enc(changeSet)}`, undefined, signal),\n update: (project: string, changeSet: string, body: UpdateChangeSetRequest): Promise<ChangeSetContract> =>\n this.mutate<ChangeSetContract>(\"PATCH\", `/projects/${enc(project)}/change-sets/${enc(changeSet)}`, body),\n validate: (project: string, changeSet: string): Promise<{ valid: boolean; errors: ValidationIssue[] }> =>\n this.mutate(\"POST\", `/projects/${enc(project)}/change-sets/${enc(changeSet)}/validate`),\n publish: (\n project: string,\n changeSet: string,\n ): Promise<{ changeSet: ChangeSetContract; publishedEntryIds: string[] }> =>\n this.mutate(\"POST\", `/projects/${enc(project)}/change-sets/${enc(changeSet)}/publish`, { confirm: true }),\n close: (project: string, changeSet: string): Promise<ChangeSetContract> =>\n this.mutate<ChangeSetContract>(\"POST\", `/projects/${enc(project)}/change-sets/${enc(changeSet)}/close`),\n };\n\n // --- Previews -------------------------------------------------------------\n readonly previews = {\n create: (project: string, body: CreatePreviewRequest): Promise<PreviewContract> =>\n this.mutate<PreviewContract>(\"POST\", `/projects/${enc(project)}/previews`, body),\n list: (project: string, signal?: AbortSignal): Promise<PreviewContract[]> =>\n this.get<PreviewContract[]>(`/projects/${enc(project)}/previews`, undefined, signal),\n revoke: (project: string, preview: string): Promise<{ ok: boolean }> =>\n this.mutate(\"DELETE\", `/projects/${enc(project)}/previews/${enc(preview)}`),\n };\n\n // --- Assets ---------------------------------------------------------------\n readonly assets = {\n createUpload: (project: string, body: CreateUploadRequest): Promise<CreateUploadResponse> =>\n this.mutate<CreateUploadResponse>(\"POST\", `/projects/${enc(project)}/assets/uploads`, body),\n completeUpload: (project: string, upload: string): Promise<AssetContract> =>\n this.mutate<CompleteUploadResponse>(\"POST\", `/projects/${enc(project)}/assets/uploads/${enc(upload)}/complete`).then(\n (r) => r.asset,\n ),\n list: (project: string, opts: ListOptions = {}): Promise<Page<AssetContract>> =>\n this.page<AssetContract>(`/projects/${enc(project)}/assets`, opts),\n get: (project: string, asset: string, signal?: AbortSignal): Promise<AssetContract> =>\n this.get<AssetContract>(`/projects/${enc(project)}/assets/${enc(asset)}`, undefined, signal),\n usage: (project: string, asset: string, signal?: AbortSignal): Promise<{ asset: AssetContract; usage: { entryIds: string[] } }> =>\n this.get(`/projects/${enc(project)}/assets/${enc(asset)}`, { usage: \"true\" }, signal),\n update: (project: string, asset: string, body: UpdateAssetRequest): Promise<AssetContract> =>\n this.mutate<AssetContract>(\"PATCH\", `/projects/${enc(project)}/assets/${enc(asset)}`, body),\n delete: (project: string, asset: string): Promise<{ ok: boolean }> =>\n this.mutate(\"DELETE\", `/projects/${enc(project)}/assets/${enc(asset)}`),\n /** Full presigned upload flow: create → PUT bytes → complete. */\n upload: (project: string, input: AssetInput, meta: UploadAssetMeta = {}): Promise<AssetContract> =>\n this.uploadAsset(project, input, meta),\n };\n\n // --- API keys -------------------------------------------------------------\n readonly apiKeys = {\n listForOrganization: (organization: string, signal?: AbortSignal): Promise<ApiKeyContract[]> =>\n this.get<ApiKeyContract[]>(`/organizations/${enc(organization)}/api-keys`, undefined, signal),\n createForOrganization: (organization: string, body: CreateApiKeyRequest): Promise<CreateApiKeyResponse> =>\n this.mutate<CreateApiKeyResponse>(\"POST\", `/organizations/${enc(organization)}/api-keys`, body),\n revokeForOrganization: (organization: string, key: string): Promise<{ ok: boolean }> =>\n this.mutate(\"DELETE\", `/organizations/${enc(organization)}/api-keys/${enc(key)}`),\n listForProject: (project: string, signal?: AbortSignal): Promise<ApiKeyContract[]> =>\n this.get<ApiKeyContract[]>(`/projects/${enc(project)}/api-keys`, undefined, signal),\n createForProject: (project: string, body: CreateApiKeyRequest): Promise<CreateApiKeyResponse> =>\n this.mutate<CreateApiKeyResponse>(\"POST\", `/projects/${enc(project)}/api-keys`, body),\n revokeForProject: (project: string, key: string): Promise<{ ok: boolean }> =>\n this.mutate(\"DELETE\", `/projects/${enc(project)}/api-keys/${enc(key)}`),\n };\n\n // --- Webhooks -------------------------------------------------------------\n readonly webhooks = {\n list: (project: string, signal?: AbortSignal): Promise<WebhookEndpointContract[]> =>\n this.get<WebhookEndpointContract[]>(`/projects/${enc(project)}/webhooks`, undefined, signal),\n create: (project: string, body: CreateWebhookRequest): Promise<CreateWebhookResponse> =>\n this.mutate<CreateWebhookResponse>(\"POST\", `/projects/${enc(project)}/webhooks`, body),\n update: (project: string, webhook: string, body: UpdateWebhookRequest): Promise<WebhookEndpointContract> =>\n this.mutate<WebhookEndpointContract>(\"PATCH\", `/projects/${enc(project)}/webhooks/${enc(webhook)}`, body),\n delete: (project: string, webhook: string): Promise<{ ok: boolean }> =>\n this.mutate(\"DELETE\", `/projects/${enc(project)}/webhooks/${enc(webhook)}`),\n deliveries: (project: string, webhook: string, signal?: AbortSignal): Promise<WebhookDeliveryContract[]> =>\n this.get<WebhookDeliveryContract[]>(`/projects/${enc(project)}/webhooks/${enc(webhook)}/deliveries`, undefined, signal),\n retry: (project: string, webhook: string, delivery: string): Promise<{ ok: boolean }> =>\n this.mutate(\"POST\", `/projects/${enc(project)}/webhooks/${enc(webhook)}/deliveries/${enc(delivery)}/retry`),\n };\n\n // --- Activity -------------------------------------------------------------\n activity(\n project: string,\n opts: ListOptions & { actorType?: string; action?: string; targetType?: string; from?: string; to?: string } = {},\n ): Promise<Page<ActivityEventContract>> {\n return this.page<ActivityEventContract>(\n `/projects/${enc(project)}/activity` +\n query({\n actorType: opts.actorType,\n action: opts.action,\n targetType: opts.targetType,\n from: opts.from,\n to: opts.to,\n }),\n opts,\n );\n }\n\n // --- Billing --------------------------------------------------------------\n readonly billing = {\n status: (organization: string, signal?: AbortSignal): Promise<BillingResponse> =>\n this.get<BillingResponse>(`/organizations/${enc(organization)}/billing`, undefined, signal),\n checkout: (organization: string, body: CheckoutRequest): Promise<CheckoutResponse> =>\n this.mutate<CheckoutResponse>(\"POST\", `/organizations/${enc(organization)}/billing/checkout`, body),\n portal: (organization: string): Promise<PortalResponse> =>\n this.mutate<PortalResponse>(\"POST\", `/organizations/${enc(organization)}/billing/portal`),\n };\n\n // --- Upload helper --------------------------------------------------------\n private async uploadAsset(project: string, input: AssetInput, meta: UploadAssetMeta): Promise<AssetContract> {\n const { bytes, filename } = await readInput(input, meta.filename);\n const contentType = meta.contentType ?? guessContentType(filename);\n const checksum = createHash(\"md5\").update(bytes).digest(\"hex\");\n\n const upload = await this.assets.createUpload(project, {\n filename,\n contentType,\n byteSize: meta.byteSize ?? bytes.byteLength,\n checksum,\n });\n\n // The presigned URL is absolute (storage host) and must bypass the API base.\n const put = await this.fetchImpl(upload.url, {\n method: upload.method,\n headers: upload.headers,\n body: bytes as unknown as BodyInit,\n });\n if (!put.ok) {\n throw new Error(`Asset upload PUT failed with status ${put.status}.`);\n }\n\n return this.assets.completeUpload(project, upload.uploadId);\n }\n}\n\ninterface ValidationIssue {\n resourceType: string;\n resourceId: string;\n path: string;\n message: string;\n code?: string;\n}\n\nasync function readInput(input: AssetInput, filenameOverride?: string): Promise<{ bytes: Uint8Array; filename: string }> {\n if (typeof input === \"string\") {\n const bytes = await readFile(input);\n return { bytes: new Uint8Array(bytes), filename: filenameOverride ?? basename(input) };\n }\n const bytes = input instanceof Uint8Array ? input : new Uint8Array(input);\n return { bytes, filename: filenameOverride ?? \"upload.bin\" };\n}\n\nconst CONTENT_TYPES: Record<string, string> = {\n png: \"image/png\",\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n gif: \"image/gif\",\n webp: \"image/webp\",\n avif: \"image/avif\",\n pdf: \"application/pdf\",\n json: \"application/json\",\n txt: \"text/plain\",\n md: \"text/markdown\",\n csv: \"text/csv\",\n mp4: \"video/mp4\",\n webm: \"video/webm\",\n mp3: \"audio/mpeg\",\n wav: \"audio/wav\",\n};\n\nfunction guessContentType(filename: string): string {\n const ext = filename.split(\".\").pop()?.toLowerCase() ?? \"\";\n return CONTENT_TYPES[ext] ?? \"application/octet-stream\";\n}\n\nfunction enc(segment: string): string {\n return encodeURIComponent(segment);\n}\n\nfunction query(params: Record<string, string | undefined>): string {\n const entries = Object.entries(params).filter(([, v]) => v !== undefined && v !== \"\");\n if (entries.length === 0) return \"\";\n return \"?\" + entries.map(([k, v]) => `${k}=${encodeURIComponent(v as string)}`).join(\"&\");\n}\n\n/** Create a management client. */\nexport function createManagementClient(options: ManagementClientOptions): ManagementClient {\n return new ManagementClient(options);\n}\n\nexport { generateTypes, generateTypesModule } from \"./codegen.js\";\nexport { MynaApiError, isMynaApiError } from \"./errors.js\";\nexport type { FetchLike, RetryOptions } from \"./http.js\";\n","import type {\n CollectionSchema,\n FieldDef,\n ListItem,\n ObjectField,\n} from \"../../schema/src/types.js\";\n\n/**\n * Deterministic TypeScript type generation from canonical collection schemas\n * (SPEC 12). Pure and stable: the same input always yields byte-identical\n * output, and no user-written files are touched. Consumed by `myna types\n * generate`.\n */\nexport function generateTypes(collections: CollectionSchema[]): string {\n const sorted = [...collections].sort((a, b) => a.name.localeCompare(b.name));\n const blocks: string[] = [];\n\n for (const collection of sorted) {\n blocks.push(renderInterface(collection));\n }\n\n const registry = sorted\n .map((c) => ` ${JSON.stringify(c.name)}: ${pascal(c.name)};`)\n .join(\"\\n\");\n\n const header = [\n \"// Generated by `myna types generate`. Do not edit by hand.\",\n \"// This file is safe to commit and regenerate.\",\n \"\",\n ].join(\"\\n\");\n\n return `${header}${blocks.join(\"\\n\\n\")}\\n\\nexport interface MynaCollections {\\n${registry}\\n}\\n`;\n}\n\nfunction renderInterface(collection: CollectionSchema): string {\n const name = pascal(collection.name);\n const lines = collection.fields.map((f) => renderField(f, 1));\n const label = collection.label ? ` ${collection.label}` : \"\";\n return `/**${label} (${collection.kind}) */\\nexport interface ${name} {\\n${lines.join(\"\\n\")}\\n}`;\n}\n\nfunction renderField(field: FieldDef, depth: number): string {\n const indent = \" \".repeat(depth);\n const optional = field.required ? \"\" : \"?\";\n const doc = field.description ? `${indent}/** ${escapeComment(field.description)} */\\n` : \"\";\n return `${doc}${indent}${safeKey(field.key)}${optional}: ${fieldType(field, depth)};`;\n}\n\nfunction fieldType(field: FieldDef, depth: number): string {\n switch (field.type) {\n case \"text\":\n return field.enum && field.enum.length > 0 ? field.enum.map((v) => JSON.stringify(v)).join(\" | \") : \"string\";\n case \"slug\":\n return \"string\";\n case \"markdown\":\n return \"string\";\n case \"number\":\n return \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"date\":\n case \"datetime\":\n return \"string\";\n case \"json\":\n return \"JsonValue\";\n case \"asset\":\n return field.multiple ? \"string[]\" : \"string\";\n case \"reference\":\n return field.multiple ? \"string[]\" : \"string\";\n case \"object\":\n return renderObject(field, depth);\n case \"list\":\n return `${listItemType(field.item, depth)}[]`;\n default:\n return \"unknown\";\n }\n}\n\nfunction renderObject(field: ObjectField, depth: number): string {\n const lines = field.fields.map((f) => renderField(f, depth + 1));\n const closingIndent = \" \".repeat(depth);\n return `{\\n${lines.join(\"\\n\")}\\n${closingIndent}}`;\n}\n\nfunction listItemType(item: ListItem, depth: number): string {\n switch (item.kind) {\n case \"text\":\n return item.enum && item.enum.length > 0 ? `(${item.enum.map((v) => JSON.stringify(v)).join(\" | \")})` : \"string\";\n case \"number\":\n return \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"date\":\n case \"datetime\":\n return \"string\";\n case \"markdown\":\n return \"string\";\n case \"json\":\n return \"JsonValue\";\n case \"reference\":\n return \"string\";\n case \"asset\":\n return \"string\";\n case \"object\": {\n const lines = item.fields.map((f) => renderField(f, depth + 1));\n const closingIndent = \" \".repeat(depth);\n return `{\\n${lines.join(\"\\n\")}\\n${closingIndent}}`;\n }\n default:\n return \"unknown\";\n }\n}\n\nconst JSON_VALUE = \"export type JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue };\";\n\n/** Generate types plus the shared `JsonValue` helper as a standalone module. */\nexport function generateTypesModule(collections: CollectionSchema[]): string {\n return `${JSON_VALUE}\\n\\n${generateTypes(collections)}`;\n}\n\nfunction pascal(key: string): string {\n return key\n .split(/[-_\\s]+/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\"\");\n}\n\nfunction safeKey(key: string): string {\n return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key) ? key : JSON.stringify(key);\n}\n\nfunction escapeComment(text: string): string {\n return text.replace(/\\*\\//g, \"*\\\\/\");\n}\n","import { execFileSync } from \"node:child_process\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync, chmodSync, rmSync } from \"node:fs\";\nimport { homedir, platform } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\n\n/**\n * Configuration resolution and credential storage (SPEC 11).\n *\n * Resolution order for every value: explicit flag > environment variable >\n * linked project (`.myna/project.json`) > user default (`config.json`).\n * Credentials are never written to the linked project file; they live in the OS\n * keychain when possible, otherwise a `0600` config file.\n */\n\nexport const DEFAULT_API_URL = \"https://api.myna.sh\";\nconst KEYCHAIN_SERVICE = \"sh.myna.cli\";\n\nexport interface GlobalFlags {\n apiUrl?: string;\n project?: string;\n organization?: string;\n token?: string;\n json?: boolean;\n interactive?: boolean;\n}\n\nexport interface LinkedProject {\n project: string;\n organization?: string;\n apiUrl?: string;\n}\n\nexport interface UserConfig {\n apiUrl?: string;\n defaultOrganization?: string;\n defaultProject?: string;\n}\n\nexport interface ResolvedContext {\n apiUrl: string;\n token: string | undefined;\n project: string | undefined;\n organization: string | undefined;\n json: boolean;\n interactive: boolean;\n linked: LinkedProject | undefined;\n linkedRoot: string | undefined;\n}\n\nfunction configDir(): string {\n const base = process.env.XDG_CONFIG_HOME ?? join(homedir(), \".config\");\n return join(base, \"myna\");\n}\n\nfunction configFile(): string {\n return join(configDir(), \"config.json\");\n}\n\nfunction credentialsFile(): string {\n return join(configDir(), \"credentials.json\");\n}\n\nexport function readUserConfig(): UserConfig {\n try {\n return JSON.parse(readFileSync(configFile(), \"utf8\")) as UserConfig;\n } catch {\n return {};\n }\n}\n\nexport function writeUserConfig(patch: Partial<UserConfig>): UserConfig {\n const current = readUserConfig();\n const next = { ...current, ...patch };\n ensureDir(configDir());\n writeFileSync(configFile(), JSON.stringify(next, null, 2) + \"\\n\");\n return next;\n}\n\nfunction ensureDir(dir: string): void {\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true, mode: 0o700 });\n}\n\n// --- Linked project ---------------------------------------------------------\n\nexport function findLinkedProject(startDir = process.cwd()): { linked: LinkedProject; root: string } | undefined {\n let dir = resolve(startDir);\n for (;;) {\n const file = join(dir, \".myna\", \"project.json\");\n if (existsSync(file)) {\n try {\n const linked = JSON.parse(readFileSync(file, \"utf8\")) as LinkedProject;\n return { linked, root: dir };\n } catch {\n return undefined;\n }\n }\n const parent = dirname(dir);\n if (parent === dir) return undefined;\n dir = parent;\n }\n}\n\nexport function writeLinkedProject(root: string, linked: LinkedProject): void {\n const dir = join(root, \".myna\");\n ensureDir(dir);\n writeFileSync(join(dir, \"project.json\"), JSON.stringify(linked, null, 2) + \"\\n\");\n}\n\nexport function removeLinkedProject(root: string): boolean {\n const file = join(root, \".myna\", \"project.json\");\n if (existsSync(file)) {\n rmSync(file);\n return true;\n }\n return false;\n}\n\n// --- Credential storage -----------------------------------------------------\n\nfunction isMac(): boolean {\n return platform() === \"darwin\";\n}\n\nfunction keychainAccount(apiUrl: string): string {\n return apiUrl.replace(/\\/+$/, \"\");\n}\n\nexport function storeToken(apiUrl: string, token: string): \"keychain\" | \"file\" {\n const account = keychainAccount(apiUrl);\n if (isMac()) {\n try {\n execFileSync(\n \"security\",\n [\"add-generic-password\", \"-U\", \"-s\", KEYCHAIN_SERVICE, \"-a\", account, \"-w\", token],\n { stdio: \"ignore\" },\n );\n return \"keychain\";\n } catch {\n // Fall through to file storage.\n }\n }\n const file = credentialsFile();\n const store = readCredentialFile();\n store[account] = token;\n ensureDir(configDir());\n writeFileSync(file, JSON.stringify(store, null, 2) + \"\\n\");\n chmodSync(file, 0o600);\n return \"file\";\n}\n\nexport function loadToken(apiUrl: string): string | undefined {\n const account = keychainAccount(apiUrl);\n if (isMac()) {\n try {\n const out = execFileSync(\n \"security\",\n [\"find-generic-password\", \"-s\", KEYCHAIN_SERVICE, \"-a\", account, \"-w\"],\n { stdio: [\"ignore\", \"pipe\", \"ignore\"] },\n );\n const token = out.toString(\"utf8\").trim();\n if (token) return token;\n } catch {\n // Not in keychain; try file.\n }\n }\n return readCredentialFile()[account];\n}\n\nexport function clearToken(apiUrl: string): void {\n const account = keychainAccount(apiUrl);\n if (isMac()) {\n try {\n execFileSync(\"security\", [\"delete-generic-password\", \"-s\", KEYCHAIN_SERVICE, \"-a\", account], {\n stdio: \"ignore\",\n });\n } catch {\n // Ignore.\n }\n }\n const store = readCredentialFile();\n if (account in store) {\n delete store[account];\n writeFileSync(credentialsFile(), JSON.stringify(store, null, 2) + \"\\n\");\n chmodSync(credentialsFile(), 0o600);\n }\n}\n\nfunction readCredentialFile(): Record<string, string> {\n try {\n return JSON.parse(readFileSync(credentialsFile(), \"utf8\")) as Record<string, string>;\n } catch {\n return {};\n }\n}\n\n// --- Resolution -------------------------------------------------------------\n\nexport function resolveContext(flags: GlobalFlags): ResolvedContext {\n const link = findLinkedProject();\n const user = readUserConfig();\n\n const apiUrl =\n flags.apiUrl ??\n process.env.MYNA_API_URL ??\n link?.linked.apiUrl ??\n user.apiUrl ??\n DEFAULT_API_URL;\n\n const token = flags.token ?? process.env.MYNA_TOKEN ?? loadToken(apiUrl);\n\n const project =\n flags.project ??\n process.env.MYNA_PROJECT ??\n link?.linked.project ??\n user.defaultProject;\n\n const organization =\n flags.organization ??\n process.env.MYNA_ORGANIZATION ??\n link?.linked.organization ??\n user.defaultOrganization;\n\n return {\n apiUrl: apiUrl.replace(/\\/+$/, \"\"),\n token,\n project,\n organization,\n json: Boolean(flags.json),\n interactive: flags.interactive !== false && process.stdout.isTTY === true,\n linked: link?.linked,\n linkedRoot: link?.root,\n };\n}\n","import { isMynaApiError } from \"@myna-sh/sdk/management\";\n\n/** Structured output, tables, and exit-code discipline (SPEC 11). */\n\nexport const CLI_JSON_VERSION = 1;\n\n/** Usage error → exit code 2. */\nexport class UsageError extends Error {}\n\n/** Operational error → exit code 1. */\nexport class CliError extends Error {}\n\nexport interface OutputMode {\n json: boolean;\n}\n\nlet mode: OutputMode = { json: false };\n\nexport function setOutputMode(next: OutputMode): void {\n mode = next;\n}\n\nexport function isJson(): boolean {\n return mode.json;\n}\n\n/** Diagnostics go to stderr and are suppressed in JSON mode. */\nexport function diag(message: string): void {\n if (!mode.json) process.stderr.write(message + \"\\n\");\n}\n\n/** Emit the single result value. JSON mode prints one versioned document. */\nexport function emit(value: unknown, human?: () => void): void {\n if (mode.json) {\n process.stdout.write(JSON.stringify({ version: CLI_JSON_VERSION, data: value }) + \"\\n\");\n return;\n }\n if (human) {\n human();\n } else {\n process.stdout.write(prettyValue(value) + \"\\n\");\n }\n}\n\n/** Render an error and return the process exit code. */\nexport function reportError(error: unknown): number {\n if (isMynaApiError(error)) {\n const problem = {\n code: error.code,\n status: error.status,\n title: error.title,\n detail: error.detail,\n requestId: error.requestId,\n fields: error.fields,\n };\n if (mode.json) {\n process.stdout.write(JSON.stringify({ version: CLI_JSON_VERSION, error: problem }) + \"\\n\");\n } else {\n process.stderr.write(`error: ${error.code} — ${error.detail ?? error.title}\\n`);\n for (const f of error.fields ?? []) {\n process.stderr.write(` · ${f.path}: ${f.message}\\n`);\n }\n if (error.requestId) process.stderr.write(` requestId: ${error.requestId}\\n`);\n }\n return 1;\n }\n\n const usage = error instanceof UsageError;\n const message = error instanceof Error ? error.message : String(error);\n if (mode.json) {\n process.stdout.write(\n JSON.stringify({ version: CLI_JSON_VERSION, error: { code: usage ? \"USAGE\" : \"ERROR\", detail: message } }) + \"\\n\",\n );\n } else {\n process.stderr.write(`error: ${message}\\n`);\n }\n return usage ? 2 : 1;\n}\n\n// --- Human tables -----------------------------------------------------------\n\nexport interface Column<T> {\n header: string;\n value: (row: T) => string;\n}\n\nexport function table<T>(rows: T[], columns: Column<T>[]): void {\n if (rows.length === 0) {\n process.stdout.write(\"(none)\\n\");\n return;\n }\n const headers = columns.map((c) => c.header);\n const cells = rows.map((r) => columns.map((c) => c.value(r) ?? \"\"));\n const widths = headers.map((h, i) => Math.max(h.length, ...cells.map((row) => stripLen(row[i] ?? \"\"))));\n const line = (values: string[]): string =>\n values.map((v, i) => pad(v, widths[i] ?? v.length)).join(\" \").replace(/\\s+$/, \"\");\n process.stdout.write(line(headers) + \"\\n\");\n process.stdout.write(widths.map((w) => \"─\".repeat(w)).join(\" \") + \"\\n\");\n for (const row of cells) process.stdout.write(line(row) + \"\\n\");\n}\n\nexport function keyValues(pairs: Array<[string, string]>): void {\n const width = Math.max(...pairs.map(([k]) => k.length));\n for (const [k, v] of pairs) {\n process.stdout.write(`${pad(k + \":\", width + 1)} ${v}\\n`);\n }\n}\n\nfunction pad(value: string, width: number): string {\n const len = stripLen(value);\n return len >= width ? value : value + \" \".repeat(width - len);\n}\n\nfunction stripLen(value: string): number {\n return value.length;\n}\n\nfunction prettyValue(value: unknown): string {\n if (typeof value === \"string\") return value;\n return JSON.stringify(value, null, 2);\n}\n","import { createManagementClient, type ManagementClient } from \"@myna-sh/sdk/management\";\nimport { resolveContext, type GlobalFlags, type ResolvedContext } from \"./config.js\";\nimport { CliError, UsageError } from \"./output.js\";\n\n/** Per-command context: resolved config plus lazily-built API clients. */\nexport interface Ctx extends ResolvedContext {\n management(): ManagementClient;\n requireProject(): string;\n requireOrganization(): string;\n}\n\nexport function buildContext(flags: GlobalFlags): Ctx {\n const resolved = resolveContext(flags);\n let mgmt: ManagementClient | undefined;\n\n return {\n ...resolved,\n management(): ManagementClient {\n if (!resolved.token) {\n throw new CliError(\"Not authenticated. Run `myna login` or pass --token / set MYNA_TOKEN.\");\n }\n mgmt ??= createManagementClient({ token: resolved.token, apiUrl: resolved.apiUrl });\n return mgmt;\n },\n requireProject(): string {\n if (!resolved.project) {\n throw new UsageError(\"No project selected. Pass --project, set MYNA_PROJECT, or run `myna link`.\");\n }\n return resolved.project;\n },\n requireOrganization(): string {\n if (!resolved.organization) {\n throw new UsageError(\"No organization selected. Pass --organization or set a default with `myna organizations use`.\");\n }\n return resolved.organization;\n },\n };\n}\n","import type { Command } from \"commander\";\nimport { buildContext, type Ctx } from \"./client.js\";\nimport type { GlobalFlags } from \"./config.js\";\nimport { reportError, setOutputMode } from \"./output.js\";\n\n/**\n * Wrap a command action: build the resolved context, set the output mode from\n * `--json`, run the handler, and translate thrown errors into exit codes.\n */\nexport function handle(\n fn: (ctx: Ctx, args: unknown[], opts: Record<string, unknown>) => Promise<void>,\n): (...cbArgs: unknown[]) => Promise<void> {\n return async (...cbArgs: unknown[]): Promise<void> => {\n const command = cbArgs[cbArgs.length - 1] as Command;\n const ctx = buildContext(command.optsWithGlobals() as GlobalFlags);\n setOutputMode({ json: ctx.json });\n try {\n await fn(ctx, command.processedArgs as unknown[], command.opts());\n } catch (error) {\n process.exitCode = reportError(error);\n }\n };\n}\n","import { execFile } from \"node:child_process\";\nimport { readFileSync } from \"node:fs\";\nimport { platform } from \"node:os\";\nimport type { ManagementClient } from \"@myna-sh/sdk/management\";\nimport { CliError, UsageError } from \"./output.js\";\n\n/** Parse `--data <json-or-@file>` into an object. */\nexport function parseData(input: string | undefined): Record<string, unknown> {\n if (!input) return {};\n const raw = input.startsWith(\"@\") ? readFileSync(input.slice(1), \"utf8\") : input;\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (error) {\n throw new UsageError(`Invalid JSON for --data: ${error instanceof Error ? error.message : String(error)}`);\n }\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n throw new UsageError(\"--data must be a JSON object.\");\n }\n return parsed as Record<string, unknown>;\n}\n\n/** Apply `--set path=value` assignments (dot paths, JSON-or-string values). */\nexport function applySets(target: Record<string, unknown>, sets: string[] | undefined): Record<string, unknown> {\n if (!sets) return target;\n for (const assignment of sets) {\n const eq = assignment.indexOf(\"=\");\n if (eq === -1) throw new UsageError(`Invalid --set \"${assignment}\". Expected path=value.`);\n const path = assignment.slice(0, eq);\n const rawValue = assignment.slice(eq + 1);\n let value: unknown;\n try {\n value = JSON.parse(rawValue);\n } catch {\n value = rawValue;\n }\n setPath(target, path.split(\".\"), value);\n }\n return target;\n}\n\nfunction setPath(obj: Record<string, unknown>, parts: string[], value: unknown): void {\n let cursor: Record<string, unknown> = obj;\n for (let i = 0; i < parts.length - 1; i++) {\n const key = parts[i]!;\n if (typeof cursor[key] !== \"object\" || cursor[key] === null) cursor[key] = {};\n cursor = cursor[key] as Record<string, unknown>;\n }\n cursor[parts[parts.length - 1]!] = value;\n}\n\n/** Open a URL in the default browser (best effort; never throws). */\nexport function openBrowser(url: string): void {\n const cmd = platform() === \"darwin\" ? \"open\" : platform() === \"win32\" ? \"cmd\" : \"xdg-open\";\n const args = platform() === \"win32\" ? [\"/c\", \"start\", \"\", url] : [url];\n execFile(cmd, args, () => undefined);\n}\n\nexport interface EntryRef {\n collection?: string;\n slugOrId: string;\n}\n\n/** Parse `<collection>/<slug-or-id>` or a bare entry id. */\nexport function parseEntryRef(ref: string): EntryRef {\n if (ref.startsWith(\"ent_\") && !ref.includes(\"/\")) return { slugOrId: ref };\n const slash = ref.indexOf(\"/\");\n if (slash === -1) return { slugOrId: ref };\n return { collection: ref.slice(0, slash), slugOrId: ref.slice(slash + 1) };\n}\n\n/** Resolve an entry ref to a concrete entry id, listing by slug when needed. */\nexport async function resolveEntryId(\n mgmt: ManagementClient,\n project: string,\n ref: string,\n): Promise<string> {\n const parsed = parseEntryRef(ref);\n if (parsed.slugOrId.startsWith(\"ent_\")) return parsed.slugOrId;\n if (!parsed.collection) {\n throw new UsageError(`Provide the entry as <collection>/<slug> or an ent_ id (got \"${ref}\").`);\n }\n let cursor: string | undefined;\n for (let guard = 0; guard < 50; guard++) {\n const page = await mgmt.entries.list(project, { collection: parsed.collection, limit: 100, cursor });\n const match = page.data.find((e) => e.slug === parsed.slugOrId || e.id === parsed.slugOrId);\n if (match) return match.id;\n if (!page.nextCursor) break;\n cursor = page.nextCursor;\n }\n throw new CliError(`Entry not found: ${ref}`);\n}\n","import type { Command } from \"commander\";\nimport { isMynaApiError } from \"@myna-sh/sdk/management\";\nimport { clearToken, loadToken, storeToken } from \"../config.js\";\nimport { CliError, diag, emit, keyValues } from \"../output.js\";\nimport { handle } from \"../runtime.js\";\nimport { openBrowser } from \"../util.js\";\n\ninterface DeviceStart {\n deviceCode: string;\n userCode: string;\n verificationUri: string;\n expiresIn: number;\n interval: number;\n}\n\ninterface DeviceToken {\n status: \"pending\" | \"approved\" | \"denied\" | \"expired\";\n token?: string;\n}\n\ninterface AuthIdentity {\n credential: \"user\" | \"api_key\" | \"preview\";\n user?: { username?: string | null };\n}\n\nasync function apiPost<T>(apiUrl: string, path: string, body: unknown): Promise<T> {\n const res = await fetch(`${apiUrl}/v1${path}`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", accept: \"application/json\" },\n body: JSON.stringify(body),\n });\n const json = (await res.json().catch(() => ({}))) as { data?: T; detail?: string };\n if (!res.ok) throw new CliError(json.detail ?? `Request failed (${res.status}).`);\n return json.data as T;\n}\n\nconst sleep = (ms: number): Promise<void> => new Promise((r) => setTimeout(r, ms));\n\nexport function registerAuth(program: Command): void {\n program\n .command(\"login\")\n .description(\"Authenticate via the browser device-authorization flow\")\n .action(\n handle(async (ctx) => {\n const start = await apiPost<DeviceStart>(ctx.apiUrl, \"/auth/device\", {});\n diag(`\\n To authenticate, open:\\n ${start.verificationUri}\\n and enter the code: ${start.userCode}\\n`);\n if (ctx.interactive) openBrowser(start.verificationUri);\n\n const deadline = Date.now() + start.expiresIn * 1000;\n let token: string | undefined;\n while (Date.now() < deadline) {\n await sleep(Math.max(1, start.interval) * 1000);\n const poll = await apiPost<DeviceToken>(ctx.apiUrl, `/auth/device/${start.deviceCode}/token`, {\n deviceCode: start.deviceCode,\n });\n if (poll.status === \"approved\" && poll.token) {\n token = poll.token;\n break;\n }\n if (poll.status === \"denied\" || poll.status === \"expired\") {\n throw new CliError(`Authorization ${poll.status}.`);\n }\n }\n if (!token) throw new CliError(\"Device authorization timed out.\");\n\n const location = storeToken(ctx.apiUrl, token);\n diag(` Stored credential (${location}).`);\n emit(\n { ok: true, apiUrl: ctx.apiUrl, storage: location },\n () => process.stdout.write(`Logged in to ${ctx.apiUrl}\\n`),\n );\n }),\n );\n\n program\n .command(\"logout\")\n .description(\"Remove the stored credential for the current API URL\")\n .action(\n handle(async (ctx) => {\n clearToken(ctx.apiUrl);\n emit({ ok: true }, () => process.stdout.write(`Logged out of ${ctx.apiUrl}\\n`));\n }),\n );\n\n program\n .command(\"whoami\")\n .description(\"Show the authenticated identity\")\n .action(\n handle(async (ctx) => {\n const token = ctx.token ?? loadToken(ctx.apiUrl);\n if (!token) throw new CliError(\"Not authenticated. Run `myna login`.\");\n\n const identityResponse = await fetch(`${ctx.apiUrl}/v1/auth/whoami`, {\n headers: { authorization: `Bearer ${token}`, accept: \"application/json\" },\n });\n const identityBody = (await identityResponse.json().catch(() => ({}))) as {\n data?: AuthIdentity;\n detail?: string;\n };\n if (!identityResponse.ok || !identityBody.data) {\n throw new CliError(identityBody.detail ?? \"Stored credential is invalid. Run `myna login` again.\");\n }\n const identity = identityBody.data;\n\n let organization: { name: string; role: string; slug: string } | undefined;\n if (ctx.organization) {\n organization = await ctx\n .management()\n .organizations.get(ctx.organization)\n .then((o) => ({ name: o.name, role: o.role, slug: o.slug }))\n .catch((e: unknown) => {\n if (isMynaApiError(e)) return undefined;\n throw e;\n });\n }\n\n emit({ apiUrl: ctx.apiUrl, authenticated: true, identity, organization: organization ?? null }, () => {\n const pairs: Array<[string, string]> = [[\"API\", ctx.apiUrl], [\"Authenticated\", \"yes\"]];\n if (identity.credential === \"user\") {\n pairs.push([\"User\", identity.user?.username ?? \"(unknown)\"]);\n } else {\n pairs.push([\"Credential\", identity.credential === \"api_key\" ? \"API key\" : \"Preview token\"]);\n }\n if (organization) pairs.push([\"Organization\", `${organization.name} (${organization.role})`]);\n keyValues(pairs);\n });\n }),\n );\n}\n","import { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { Command } from \"commander\";\nimport {\n findLinkedProject,\n loadToken,\n removeLinkedProject,\n writeLinkedProject,\n DEFAULT_API_URL,\n} from \"../config.js\";\nimport { CliError, UsageError, diag, emit, keyValues } from \"../output.js\";\nimport { handle } from \"../runtime.js\";\nimport { openBrowser } from \"../util.js\";\n\nconst EXAMPLE_SCHEMA = `import { collection, field } from \"@myna-sh/sdk/schema\";\n\n/**\n * Example collection. Edit freely, then run:\n * myna schema diff\n * myna schema push\n */\nexport const posts = collection({\n name: \"posts\",\n label: \"Blog posts\",\n visibility: \"public\",\n titleField: \"title\",\n path: \"/blog/{slug}\",\n fields: {\n title: field.text({ required: true, maxLength: 120 }),\n slug: field.slug({ from: \"title\", required: true }),\n description: field.text({ multiline: true }),\n body: field.markdown({ required: true }),\n cover: field.asset({ allowed: [\"image/*\"] }),\n publishedAt: field.datetime(),\n },\n});\n`;\n\nfunction appUrlFor(apiUrl: string): string {\n try {\n const url = new URL(apiUrl);\n if (url.hostname.startsWith(\"api.\")) {\n url.hostname = \"app.\" + url.hostname.slice(4);\n return url.origin;\n }\n return apiUrl;\n } catch {\n return apiUrl;\n }\n}\n\nexport function registerWorkspace(program: Command): void {\n program\n .command(\"init\")\n .description(\"Scaffold a local `myna/` schema directory (and link if a project is set)\")\n .option(\"--schema-dir <dir>\", \"schema directory\", \"myna\")\n .action(\n handle(async (ctx, _args, opts) => {\n const dir = (opts.schemaDir as string) ?? \"myna\";\n mkdirSync(dir, { recursive: true });\n const file = join(dir, \"posts.ts\");\n const created: string[] = [];\n if (!existsSync(file)) {\n writeFileSync(file, EXAMPLE_SCHEMA);\n created.push(file);\n }\n let linked = false;\n if (ctx.project) {\n writeLinkedProject(process.cwd(), {\n project: ctx.project,\n organization: ctx.organization,\n ...(ctx.apiUrl !== DEFAULT_API_URL ? { apiUrl: ctx.apiUrl } : {}),\n });\n created.push(\".myna/project.json\");\n linked = true;\n }\n emit({ schemaDir: dir, created, linked }, () => {\n diag(`Initialized ${dir}/`);\n for (const c of created) process.stdout.write(` created ${c}\\n`);\n if (!linked) process.stdout.write(` run \\`myna link --project <ref>\\` to link a project\\n`);\n });\n }),\n );\n\n program\n .command(\"link\")\n .description(\"Link the current directory to a project (writes .myna/project.json, no secrets)\")\n .argument(\"[project]\", \"project id or slug\")\n .action(\n handle(async (ctx, args) => {\n const project = (args[0] as string | undefined) ?? ctx.project;\n if (!project) throw new UsageError(\"Provide a project: `myna link <project>` or --project.\");\n // Validate the project exists and capture its organization.\n const resolved = await ctx.management().projects.get(project);\n writeLinkedProject(process.cwd(), {\n project,\n organization: ctx.organization ?? resolved.organizationId,\n ...(ctx.apiUrl !== DEFAULT_API_URL ? { apiUrl: ctx.apiUrl } : {}),\n });\n emit({ linked: true, project: resolved.slug, organizationId: resolved.organizationId }, () =>\n process.stdout.write(`Linked to ${resolved.name} (${resolved.slug})\\n`),\n );\n }),\n );\n\n program\n .command(\"unlink\")\n .description(\"Remove the project link from the current directory tree\")\n .action(\n handle(async () => {\n const found = findLinkedProject();\n if (!found) throw new CliError(\"No linked project found.\");\n removeLinkedProject(found.root);\n emit({ unlinked: true }, () => process.stdout.write(`Unlinked ${found.linked.project}\\n`));\n }),\n );\n\n program\n .command(\"status\")\n .description(\"Show the resolved configuration and project link\")\n .action(\n handle(async (ctx) => {\n const hasToken = Boolean(ctx.token ?? loadToken(ctx.apiUrl));\n emit(\n {\n apiUrl: ctx.apiUrl,\n authenticated: hasToken,\n project: ctx.project ?? null,\n organization: ctx.organization ?? null,\n linkedRoot: ctx.linkedRoot ?? null,\n },\n () =>\n keyValues([\n [\"API URL\", ctx.apiUrl],\n [\"Authenticated\", hasToken ? \"yes\" : \"no\"],\n [\"Project\", ctx.project ?? \"(none)\"],\n [\"Organization\", ctx.organization ?? \"(none)\"],\n [\"Linked at\", ctx.linkedRoot ?? \"(none)\"],\n ]),\n );\n }),\n );\n\n program\n .command(\"open\")\n .description(\"Open the current project in the dashboard\")\n .action(\n handle(async (ctx) => {\n const app = appUrlFor(ctx.apiUrl);\n const path = ctx.organization && ctx.project ? `/${ctx.organization}/${ctx.project}` : \"\";\n const url = `${app}${path}`;\n if (ctx.interactive) openBrowser(url);\n emit({ url }, () => process.stdout.write(`${url}\\n`));\n }),\n );\n}\n","import { mkdirSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { Command } from \"commander\";\nimport { isMynaApiError, generateTypesModule } from \"@myna-sh/sdk/management\";\nimport type { CollectionSchema } from \"@myna-sh/schema\";\nimport { CliError, UsageError, diag, emit, table } from \"../output.js\";\nimport { handle } from \"../runtime.js\";\nimport { canonicalJson, loadLocalSchemas, schemaDirFor } from \"../schema-loader.js\";\nimport { schemaToDsl } from \"../dsl-emit.js\";\nimport type { Ctx } from \"../client.js\";\n\n/** Fetch deployed canonical schemas (latest version per collection). */\nasync function deployedSchemas(ctx: Ctx, project: string): Promise<CollectionSchema[]> {\n const mgmt = ctx.management();\n const collections = await mgmt.schema.collections(project);\n const out: CollectionSchema[] = [];\n for (const c of collections) {\n const versions = await mgmt.schema.versions(project, c.key);\n const latest = versions[0];\n if (latest) out.push(latest.schemaJson as unknown as CollectionSchema);\n }\n return out.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport function registerSchema(program: Command): void {\n const schema = program.command(\"schema\").description(\"Inspect and deploy code-owned schemas\");\n\n schema\n .command(\"inspect\")\n .description(\"Show deployed collections, or one collection's fields\")\n .argument(\"[collection]\", \"collection key\")\n .action(\n handle(async (ctx, args) => {\n const project = ctx.requireProject();\n const key = args[0] as string | undefined;\n if (!key) {\n const collections = await ctx.management().schema.collections(project);\n emit(collections, () =>\n table(collections, [\n { header: \"KEY\", value: (c) => c.key },\n { header: \"NAME\", value: (c) => c.displayName },\n { header: \"KIND\", value: (c) => c.kind },\n { header: \"VISIBILITY\", value: (c) => c.visibility },\n ]),\n );\n return;\n }\n const versions = await ctx.management().schema.versions(project, key);\n const latest = versions[0];\n if (!latest) throw new CliError(`Collection ${key} has no versions.`);\n const s = latest.schemaJson as unknown as CollectionSchema;\n emit({ collection: key, version: latest.version, schema: s }, () => {\n diag(`${key} — v${latest.version} (${s.kind}, ${s.visibility})`);\n table(s.fields, [\n { header: \"FIELD\", value: (f) => f.key },\n { header: \"TYPE\", value: (f) => f.type },\n { header: \"REQUIRED\", value: (f) => (f.required ? \"yes\" : \"\") },\n ]);\n });\n }),\n );\n\n schema\n .command(\"pull\")\n .description(\"Write deployed schemas to local DSL files\")\n .option(\"--schema-dir <dir>\", \"target schema directory\")\n .action(\n handle(async (ctx, _args, opts) => {\n const project = ctx.requireProject();\n const dir = schemaDirFor(ctx.linkedRoot, opts.schemaDir as string | undefined);\n const schemas = await deployedSchemas(ctx, project);\n mkdirSync(dir, { recursive: true });\n const written: string[] = [];\n for (const s of schemas) {\n const file = join(dir, `${s.name}.ts`);\n writeFileSync(file, schemaToDsl(s));\n written.push(file);\n }\n emit({ pulled: schemas.length, files: written }, () => {\n for (const f of written) process.stdout.write(` wrote ${f}\\n`);\n });\n }),\n );\n\n schema\n .command(\"diff\")\n .description(\"Diff local schemas against the deployed schemas\")\n .option(\"--schema-dir <dir>\", \"schema directory\")\n .action(\n handle(async (ctx, _args, opts) => {\n const project = ctx.requireProject();\n const dir = schemaDirFor(ctx.linkedRoot, opts.schemaDir as string | undefined);\n const local = await loadLocalSchemas(dir);\n const result = await ctx.management().schema.diff(project, canonicalJson(local));\n emit(result, () => renderDiff(result));\n }),\n );\n\n schema\n .command(\"push\")\n .description(\"Apply local schemas, creating immutable versions\")\n .option(\"--schema-dir <dir>\", \"schema directory\")\n .option(\"--allow-destructive\", \"permit destructive schema changes\", false)\n .option(\"--summary <text>\", \"change summary\")\n .action(\n handle(async (ctx, _args, opts) => {\n const project = ctx.requireProject();\n const dir = schemaDirFor(ctx.linkedRoot, opts.schemaDir as string | undefined);\n const local = await loadLocalSchemas(dir);\n const collections = canonicalJson(local);\n const allowDestructive = Boolean(opts.allowDestructive);\n\n const plan = await ctx.management().schema.diff(project, collections);\n if (!ctx.json) renderDiff(plan);\n\n if (plan.hasDestructive && !allowDestructive) {\n throw new UsageError(\n \"This change is destructive. Re-run with --allow-destructive to proceed.\",\n );\n }\n if (plan.ops.length === 0) {\n emit({ applied: false, reason: \"no-changes\", diff: plan }, () => diag(\"No schema changes to apply.\"));\n return;\n }\n\n const pushed = await ctx\n .management()\n .schema.push(project, collections, { allowDestructive, changeSummary: opts.summary as string | undefined })\n .catch((error: unknown) => {\n if (isMynaApiError(error) && error.code === \"SCHEMA_CHANGE_DESTRUCTIVE\") {\n throw new UsageError(\"Destructive schema change rejected. Pass --allow-destructive.\");\n }\n throw error;\n });\n emit(pushed, () =>\n diag(`Applied ${pushed.versions.length} schema version(s) (${pushed.diff.classification}).`),\n );\n }),\n );\n\n const types = program.command(\"types\").description(\"Generate content types\");\n types\n .command(\"generate\")\n .description(\"Generate deterministic TypeScript types from schemas\")\n .option(\"--schema-dir <dir>\", \"schema directory\")\n .option(\"--deployed\", \"use deployed schemas instead of local files\", false)\n .option(\"--out <file>\", \"write to a file instead of stdout\")\n .action(\n handle(async (ctx, _args, opts) => {\n let schemas: CollectionSchema[];\n if (opts.deployed) {\n schemas = await deployedSchemas(ctx, ctx.requireProject());\n } else {\n const dir = schemaDirFor(ctx.linkedRoot, opts.schemaDir as string | undefined);\n schemas = await loadLocalSchemas(dir);\n }\n const code = generateTypesModule(schemas);\n const out = opts.out as string | undefined;\n if (out) {\n writeFileSync(out, code);\n emit({ written: out, collections: schemas.length }, () => diag(`Wrote ${out}`));\n } else if (ctx.json) {\n emit({ code, collections: schemas.length });\n } else {\n process.stdout.write(code);\n }\n }),\n );\n}\n\ninterface DiffLike {\n ops: Array<{ kind: string; collection: string; field?: string; classification: string; detail: string }>;\n classification: string;\n hasDestructive: boolean;\n contentValidationErrors: Array<{ collection: string; path: string; message: string }>;\n}\n\nfunction renderDiff(diff: DiffLike): void {\n if (diff.ops.length === 0) {\n diag(\"No changes.\");\n return;\n }\n for (const op of diff.ops) {\n const marker = op.classification === \"destructive\" ? \"!\" : op.classification === \"conditionally_destructive\" ? \"~\" : \"+\";\n const target = op.field ? `${op.collection}.${op.field}` : op.collection;\n process.stdout.write(` ${marker} ${op.kind} ${target} — ${op.detail}\\n`);\n }\n process.stdout.write(` classification: ${diff.classification}\\n`);\n for (const err of diff.contentValidationErrors) {\n process.stderr.write(` content error: ${err.collection} ${err.path} — ${err.message}\\n`);\n }\n}\n","import { existsSync, readdirSync, statSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { build, type Plugin } from \"esbuild\";\nimport { toCanonical, type CollectionSchema } from \"@myna-sh/schema\";\nimport { CliError } from \"./output.js\";\n\n/**\n * Load local schema definitions through a controlled esbuild bundle-to-memory,\n * then import the compiled module (SPEC 7 / 11). Each `.ts`/`.js`/`.mjs` file in\n * the schema directory may default-export a collection, export an array of\n * collections, or export several named collections.\n */\n\nexport const DEFAULT_SCHEMA_DIR = \"myna\";\n\n/**\n * Resolve DSL imports in user schema files to the copy bundled with the CLI\n * (`dsl.ts`, built to a sibling `dsl.js`). Schema loading therefore works\n * without `@myna-sh/sdk` installed, and canonicalization always runs against\n * the exact DSL version this CLI ships.\n */\nfunction dslAliasPlugin(): Plugin {\n let dslPath = fileURLToPath(new URL(\"./dsl.js\", import.meta.url));\n if (!existsSync(dslPath)) dslPath = dslPath.replace(/\\.js$/, \".ts\");\n return {\n name: \"myna-dsl-alias\",\n setup(builder) {\n builder.onResolve({ filter: /^@myna-sh\\/(schema|sdk\\/schema)$/ }, () => ({\n path: dslPath,\n }));\n },\n };\n}\n\nfunction looksLikeCollection(value: unknown): value is CollectionSchema {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { name?: unknown }).name === \"string\" &&\n Array.isArray((value as { fields?: unknown }).fields)\n );\n}\n\nfunction collectFromModule(mod: Record<string, unknown>, out: Map<string, CollectionSchema>): void {\n const consider = (value: unknown): void => {\n if (Array.isArray(value)) {\n for (const v of value) consider(v);\n return;\n }\n if (looksLikeCollection(value)) out.set(value.name, value);\n };\n for (const value of Object.values(mod)) consider(value);\n}\n\nfunction listSchemaFiles(dir: string): string[] {\n const files: string[] = [];\n for (const entry of readdirSync(dir)) {\n if (entry.startsWith(\".\") || entry === \"node_modules\" || entry === \"dist\") continue;\n const full = join(dir, entry);\n const st = statSync(full);\n if (st.isDirectory()) {\n files.push(...listSchemaFiles(full));\n } else if (/\\.(ts|mts|js|mjs)$/.test(entry) && !/\\.d\\.ts$/.test(entry)) {\n files.push(full);\n }\n }\n return files.sort();\n}\n\nexport async function loadLocalSchemas(schemaDir = DEFAULT_SCHEMA_DIR): Promise<CollectionSchema[]> {\n const dir = resolve(schemaDir);\n if (!existsSync(dir)) {\n throw new CliError(`Schema directory not found: ${schemaDir}. Run \\`myna init\\` to scaffold it.`);\n }\n const files = listSchemaFiles(dir);\n if (files.length === 0) {\n throw new CliError(`No schema files found in ${schemaDir}.`);\n }\n\n const collections = new Map<string, CollectionSchema>();\n for (const file of files) {\n const result = await build({\n entryPoints: [file],\n bundle: true,\n write: false,\n format: \"esm\",\n platform: \"node\",\n target: \"node20\",\n logLevel: \"silent\",\n absWorkingDir: process.cwd(),\n plugins: [dslAliasPlugin()],\n }).catch((error: unknown) => {\n throw new CliError(`Failed to compile ${file}: ${error instanceof Error ? error.message : String(error)}`);\n });\n\n const code = result.outputFiles[0]?.text ?? \"\";\n const dataUrl = `data:text/javascript;base64,${Buffer.from(code).toString(\"base64\")}`;\n const mod = (await import(dataUrl)) as Record<string, unknown>;\n collectFromModule(mod, collections);\n }\n\n if (collections.size === 0) {\n throw new CliError(\"No collections were exported from the schema directory.\");\n }\n\n return [...collections.values()]\n .map((c) => toCanonical(c))\n .sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport function canonicalJson(schemas: CollectionSchema[]): Record<string, unknown>[] {\n return schemas.map((s) => s as unknown as Record<string, unknown>);\n}\n\n/** Resolve the schema directory relative to the linked project root if set. */\nexport function schemaDirFor(root: string | undefined, override?: string): string {\n if (override) return override;\n if (root) {\n const candidate = join(root, DEFAULT_SCHEMA_DIR);\n if (existsSync(candidate)) return candidate;\n }\n return DEFAULT_SCHEMA_DIR;\n}\n","import type { CollectionSchema } from \"./types.js\";\n\n/**\n * Deterministic JSON serialization: object keys are emitted in sorted order,\n * arrays preserve their order (field order is significant). Produces a stable\n * string suitable for hashing and equality checks.\n */\nexport function canonicalStringify(value: unknown): string {\n return JSON.stringify(sortValue(value));\n}\n\nfunction sortValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortValue);\n if (value && typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(value as Record<string, unknown>).sort()) {\n const v = (value as Record<string, unknown>)[key];\n if (v === undefined) continue;\n out[key] = sortValue(v);\n }\n return out;\n }\n return value;\n}\n\n/**\n * Return a deep-cloned, canonically-ordered copy of a schema. This is the exact\n * shape persisted as `collection_versions.schema_json`.\n */\nexport function toCanonical(schema: CollectionSchema): CollectionSchema {\n return JSON.parse(canonicalStringify(schema)) as CollectionSchema;\n}\n","import type { CollectionSchema, FieldDef, ListItem } from \"@myna-sh/schema\";\n\n/**\n * Emit editable `@myna-sh/sdk/schema` DSL source from a canonical collection schema.\n * Used by `myna schema pull` to materialize deployed schemas as local TS.\n */\nexport function schemaToDsl(schema: CollectionSchema): string {\n const opts: string[] = [\n `name: ${str(schema.name)}`,\n `label: ${str(schema.label)}`,\n ];\n if (schema.kind !== \"collection\") opts.push(`kind: ${str(schema.kind)}`);\n opts.push(`visibility: ${str(schema.visibility)}`);\n if (schema.titleField) opts.push(`titleField: ${str(schema.titleField)}`);\n if (schema.path) opts.push(`path: ${str(schema.path)}`);\n\n const fieldLines = schema.fields.map((f) => ` ${ident(f.key)}: ${emitField(f)},`).join(\"\\n\");\n\n return [\n `import { collection, field, item } from \"@myna-sh/sdk/schema\";`,\n ``,\n `export const ${varName(schema.name)} = collection({`,\n ` ${opts.join(\",\\n \")},`,\n ` fields: {`,\n fieldLines,\n ` },`,\n `});`,\n ``,\n ].join(\"\\n\");\n}\n\nfunction emitField(field: FieldDef): string {\n const o: Record<string, unknown> = {};\n if (field.label && field.label !== field.key) o.label = field.label;\n if (field.description) o.description = field.description;\n if (field.required) o.required = true;\n\n switch (field.type) {\n case \"text\":\n assign(o, { multiline: field.multiline || undefined, minLength: field.minLength, maxLength: field.maxLength, pattern: field.pattern, enum: field.enum, default: field.default });\n return call(\"text\", o);\n case \"slug\":\n assign(o, { from: field.from });\n return call(\"slug\", o);\n case \"markdown\":\n assign(o, { minLength: field.minLength, maxLength: field.maxLength, default: field.default });\n return call(\"markdown\", o);\n case \"number\":\n assign(o, { integer: field.integer || undefined, min: field.min, max: field.max, default: field.default });\n return call(\"number\", o);\n case \"boolean\":\n assign(o, { default: field.default });\n return call(\"boolean\", o);\n case \"date\":\n case \"datetime\":\n assign(o, { min: field.min, max: field.max, default: field.default });\n return call(field.type, o);\n case \"json\":\n assign(o, { default: field.default });\n return call(\"json\", o);\n case \"asset\":\n assign(o, { allowed: field.allowed, multiple: field.multiple || undefined });\n return call(\"asset\", o);\n case \"reference\":\n assign(o, { to: field.target, multiple: field.multiple || undefined });\n return call(\"reference\", o);\n case \"object\": {\n const inner = field.fields.map((f) => ` ${ident(f.key)}: ${emitField(f)}`).join(\",\\n\");\n o.fields = `__RAW__{\\n${inner},\\n }`;\n return call(\"object\", o);\n }\n case \"list\":\n o.of = `__RAW__${emitItem(field.item)}`;\n assign(o, { minItems: field.minItems, maxItems: field.maxItems });\n return call(\"list\", o);\n default:\n return `field.json({})`;\n }\n}\n\nfunction emitItem(item: ListItem): string {\n switch (item.kind) {\n case \"reference\":\n return `item.reference({ to: ${str(item.target)} })`;\n case \"asset\":\n return `item.asset({ allowed: ${JSON.stringify(item.allowed)} })`;\n case \"object\": {\n const inner = item.fields.map((f) => ` ${ident(f.key)}: ${emitField(f)}`).join(\",\\n\");\n return `item.object({ fields: {\\n${inner},\\n } })`;\n }\n default:\n return `item.${item.kind}()`;\n }\n}\n\nfunction call(name: string, opts: Record<string, unknown>): string {\n const entries = Object.entries(opts);\n if (entries.length === 0) return `field.${name}()`;\n const body = entries.map(([k, v]) => `${ident(k)}: ${literal(v)}`).join(\", \");\n return `field.${name}({ ${body} })`;\n}\n\nfunction assign(target: Record<string, unknown>, values: Record<string, unknown>): void {\n for (const [k, v] of Object.entries(values)) {\n if (v !== undefined) target[k] = v;\n }\n}\n\nfunction literal(value: unknown): string {\n if (typeof value === \"string\" && value.startsWith(\"__RAW__\")) return value.slice(\"__RAW__\".length);\n return JSON.stringify(value);\n}\n\nfunction str(value: string): string {\n return JSON.stringify(value);\n}\n\nfunction ident(key: string): string {\n return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key) ? key : JSON.stringify(key);\n}\n\nfunction varName(name: string): string {\n const camel = name.replace(/[-_\\s]+(.)/g, (_, c: string) => c.toUpperCase());\n return /^[A-Za-z_$]/.test(camel) ? camel : `_${camel}`;\n}\n","import type { Command } from \"commander\";\nimport { UsageError, diag, emit, table } from \"../output.js\";\nimport { handle } from \"../runtime.js\";\nimport { applySets, parseData, resolveEntryId } from \"../util.js\";\n\nexport function registerEntries(program: Command): void {\n const entries = program.command(\"entries\").description(\"Create, read, update, and manage entries\");\n\n entries\n .command(\"list\")\n .description(\"List entries in a collection\")\n .argument(\"<collection>\", \"collection key\")\n .option(\"--status <status>\", \"filter by status\")\n .option(\"--limit <n>\", \"page size\", \"25\")\n .option(\"--cursor <cursor>\", \"pagination cursor\")\n .action(\n handle(async (ctx, args, opts) => {\n const project = ctx.requireProject();\n const page = await ctx.management().entries.list(project, {\n collection: args[0] as string,\n status: opts.status as string | undefined,\n limit: Number(opts.limit),\n cursor: opts.cursor as string | undefined,\n });\n emit({ data: page.data, nextCursor: page.nextCursor }, () =>\n table(page.data, [\n { header: \"ID\", value: (e) => e.id },\n { header: \"SLUG\", value: (e) => e.slug ?? \"\" },\n { header: \"STATUS\", value: (e) => e.status },\n { header: \"UPDATED\", value: (e) => e.updatedAt },\n ]),\n );\n }),\n );\n\n entries\n .command(\"get\")\n .description(\"Get one entry by <collection>/<slug-or-id>\")\n .argument(\"<ref>\", \"collection/slug or entry id\")\n .action(\n handle(async (ctx, args) => {\n const project = ctx.requireProject();\n const id = await resolveEntryId(ctx.management(), project, args[0] as string);\n const entry = await ctx.management().entries.get(project, id);\n emit(entry);\n }),\n );\n\n entries\n .command(\"create\")\n .description(\"Create an entry\")\n .argument(\"<collection>\", \"collection key\")\n .option(\"--data <json-or-@file>\", \"entry data as JSON or @file\")\n .option(\"--set <path=value...>\", \"set individual fields\", collect, [])\n .option(\"--slug <slug>\", \"explicit slug\")\n .option(\"--change-set <id>\", \"attach to a change set\")\n .option(\"--summary <text>\", \"change summary\")\n .action(\n handle(async (ctx, args, opts) => {\n const project = ctx.requireProject();\n const data = applySets(parseData(opts.data as string | undefined), opts.set as string[]);\n const entry = await ctx.management().entries.create(project, {\n collection: args[0] as string,\n data,\n slug: opts.slug as string | undefined,\n changeSetId: opts.changeSet as string | undefined,\n changeSummary: opts.summary as string | undefined,\n });\n emit(entry, () => diag(`Created ${entry.id} (${entry.status}).`));\n }),\n );\n\n entries\n .command(\"update\")\n .description(\"Update an entry\")\n .argument(\"<ref>\", \"collection/slug or entry id\")\n .option(\"--data <json-or-@file>\", \"replacement data as JSON or @file\")\n .option(\"--set <path=value...>\", \"set individual fields\", collect, [])\n .option(\"--slug <slug>\", \"new slug\")\n .option(\"--expected-revision <id>\", \"optimistic concurrency guard\")\n .option(\"--change-set <id>\", \"attach to a change set\")\n .option(\"--summary <text>\", \"change summary\")\n .action(\n handle(async (ctx, args, opts) => {\n const project = ctx.requireProject();\n const id = await resolveEntryId(ctx.management(), project, args[0] as string);\n const sets = opts.set as string[];\n let data: Record<string, unknown> | undefined;\n if (opts.data !== undefined || sets.length > 0) {\n const base = opts.data !== undefined ? parseData(opts.data as string) : (await ctx.management().entries.get(project, id)).data;\n data = applySets(base, sets);\n }\n if (!data && !opts.slug) throw new UsageError(\"Nothing to update. Pass --data, --set, or --slug.\");\n const entry = await ctx.management().entries.update(project, id, {\n data,\n slug: opts.slug as string | undefined,\n expectedRevisionId: opts.expectedRevision as string | undefined,\n changeSetId: opts.changeSet as string | undefined,\n changeSummary: opts.summary as string | undefined,\n });\n emit(entry, () => diag(`Updated ${entry.id} (${entry.status}).`));\n }),\n );\n\n entries\n .command(\"delete\")\n .description(\"Stage an entry deletion on a change set\")\n .argument(\"<ref>\", \"collection/slug or entry id\")\n .option(\"--confirm-delete\", \"required consequence flag\", false)\n .option(\"--change-set <id>\", \"attach to a change set\")\n .action(\n handle(async (ctx, args, opts) => {\n if (!opts.confirmDelete) throw new UsageError(\"Deletion requires --confirm-delete.\");\n const project = ctx.requireProject();\n const id = await resolveEntryId(ctx.management(), project, args[0] as string);\n const result = await ctx.management().entries.delete(project, id, opts.changeSet as string | undefined);\n emit(result, () => diag(`Staged delete of ${id} on change set ${result.changeSetId}.`));\n }),\n );\n\n entries\n .command(\"unpublish\")\n .description(\"Stage an entry unpublish on a change set\")\n .argument(\"<ref>\", \"collection/slug or entry id\")\n .option(\"--change-set <id>\", \"attach to a change set\")\n .action(\n handle(async (ctx, args, opts) => {\n const project = ctx.requireProject();\n const id = await resolveEntryId(ctx.management(), project, args[0] as string);\n const result = await ctx.management().entries.unpublish(project, id, opts.changeSet as string | undefined);\n emit(result, () => diag(`Staged unpublish of ${id} on change set ${result.changeSetId}.`));\n }),\n );\n\n entries\n .command(\"revisions\")\n .description(\"List an entry's revisions\")\n .argument(\"<ref>\", \"collection/slug or entry id\")\n .action(\n handle(async (ctx, args) => {\n const project = ctx.requireProject();\n const id = await resolveEntryId(ctx.management(), project, args[0] as string);\n const revisions = await ctx.management().entries.revisions(project, id);\n emit(revisions, () =>\n table(revisions, [\n { header: \"ID\", value: (r) => r.id },\n { header: \"#\", value: (r) => String(r.revisionNumber) },\n { header: \"BY\", value: (r) => r.createdByType },\n { header: \"CREATED\", value: (r) => r.createdAt },\n ]),\n );\n }),\n );\n\n entries\n .command(\"restore\")\n .description(\"Restore a historical revision into a new draft\")\n .argument(\"<ref>\", \"collection/slug or entry id\")\n .requiredOption(\"--revision <id>\", \"revision id to restore\")\n .action(\n handle(async (ctx, args, opts) => {\n const project = ctx.requireProject();\n const id = await resolveEntryId(ctx.management(), project, args[0] as string);\n const result = await ctx.management().entries.restoreRevision(project, id, opts.revision as string);\n emit(result, () => diag(`Restored revision ${opts.revision as string} into ${result.revision.id}.`));\n }),\n );\n}\n\nfunction collect(value: string, previous: string[]): string[] {\n return [...previous, value];\n}\n","import type { Command } from \"commander\";\nimport { UsageError, diag, emit, table } from \"../output.js\";\nimport { handle } from \"../runtime.js\";\n\nexport function registerChanges(program: Command): void {\n const changes = program.command(\"changes\").description(\"Manage change sets: validate, preview, publish\");\n\n changes\n .command(\"list\")\n .description(\"List change sets\")\n .option(\"--status <status>\", \"filter by status\")\n .option(\"--limit <n>\", \"page size\", \"25\")\n .action(\n handle(async (ctx, _args, opts) => {\n const project = ctx.requireProject();\n const page = await ctx.management().changeSets.list(project, {\n status: opts.status as string | undefined,\n limit: Number(opts.limit),\n });\n emit({ data: page.data, nextCursor: page.nextCursor }, () =>\n table(page.data, [\n { header: \"ID\", value: (c) => c.id },\n { header: \"TITLE\", value: (c) => c.title },\n { header: \"STATUS\", value: (c) => c.status },\n { header: \"ITEMS\", value: (c) => String(c.items.length) },\n ]),\n );\n }),\n );\n\n changes\n .command(\"create\")\n .description(\"Create a change set\")\n .requiredOption(\"--title <title>\", \"change set title\")\n .option(\"--description <text>\", \"change set description\")\n .action(\n handle(async (ctx, _args, opts) => {\n const project = ctx.requireProject();\n const cs = await ctx.management().changeSets.create(project, {\n title: opts.title as string,\n description: opts.description as string | undefined,\n });\n emit(cs, () => diag(`Created change set ${cs.id}.`));\n }),\n );\n\n changes\n .command(\"inspect\")\n .description(\"Show a change set and its items\")\n .argument(\"<id>\", \"change set id\")\n .action(\n handle(async (ctx, args) => {\n const project = ctx.requireProject();\n const cs = await ctx.management().changeSets.get(project, args[0] as string);\n emit(cs, () => {\n diag(`${cs.title} — ${cs.status}`);\n table(cs.items, [\n { header: \"TYPE\", value: (i) => i.resourceType },\n { header: \"RESOURCE\", value: (i) => i.resourceId },\n { header: \"OP\", value: (i) => i.operation },\n ]);\n });\n }),\n );\n\n changes\n .command(\"validate\")\n .description(\"Validate a change set against deployed schemas\")\n .argument(\"<id>\", \"change set id\")\n .action(\n handle(async (ctx, args) => {\n const project = ctx.requireProject();\n const result = await ctx.management().changeSets.validate(project, args[0] as string);\n emit(result, () => {\n if (result.valid) {\n diag(\"valid\");\n } else {\n for (const e of result.errors) {\n process.stderr.write(` ${e.resourceId} ${e.path} — ${e.message}\\n`);\n }\n }\n });\n if (!result.valid) process.exitCode = 1;\n }),\n );\n\n changes\n .command(\"preview\")\n .description(\"Create a preview for a change set\")\n .argument(\"<id>\", \"change set id\")\n .action(\n handle(async (ctx, args) => {\n const project = ctx.requireProject();\n const preview = await ctx.management().previews.create(project, { changeSetId: args[0] as string });\n emit(preview, () => {\n process.stdout.write(`${preview.url}\\n`);\n diag(`fallback: ${preview.fallbackUrl}`);\n });\n }),\n );\n\n changes\n .command(\"publish\")\n .description(\"Atomically publish a change set\")\n .argument(\"<id>\", \"change set id\")\n .option(\"--confirm-publish\", \"required consequence flag\", false)\n .action(\n handle(async (ctx, args, opts) => {\n if (!opts.confirmPublish) throw new UsageError(\"Publishing requires --confirm-publish.\");\n const project = ctx.requireProject();\n const result = await ctx.management().changeSets.publish(project, args[0] as string);\n emit(result, () =>\n diag(`Published ${result.publishedEntryIds.length} entr(y/ies): ${result.publishedEntryIds.join(\", \")}`),\n );\n }),\n );\n\n changes\n .command(\"close\")\n .description(\"Close a change set without publishing\")\n .argument(\"<id>\", \"change set id\")\n .action(\n handle(async (ctx, args) => {\n const project = ctx.requireProject();\n const cs = await ctx.management().changeSets.close(project, args[0] as string);\n emit(cs, () => diag(`Closed ${cs.id}.`));\n }),\n );\n}\n","import type { Command } from \"commander\";\nimport { UsageError, diag, emit, table } from \"../output.js\";\nimport { handle } from \"../runtime.js\";\nimport { openBrowser } from \"../util.js\";\nimport type { Ctx } from \"../client.js\";\nimport type { CreatePreviewRequest } from \"@myna-sh/api-contracts\";\n\nfunction previewTarget(ref: string): CreatePreviewRequest {\n if (ref.startsWith(\"chs_\")) return { changeSetId: ref };\n if (ref.startsWith(\"ent_\")) return { entryId: ref };\n throw new UsageError(`Preview target must be a change-set (chs_) or entry (ent_) id: ${ref}`);\n}\n\nasync function create(ctx: Ctx, ref: string) {\n return ctx.management().previews.create(ctx.requireProject(), previewTarget(ref));\n}\n\nexport function registerPreviews(program: Command): void {\n const preview = program.command(\"preview\").description(\"Create and manage preview links\");\n\n preview\n .command(\"create\")\n .description(\"Create a preview for a change set or entry\")\n .argument(\"<change-set-or-entry>\", \"chs_ or ent_ id\")\n .action(\n handle(async (ctx, args) => {\n const p = await create(ctx, args[0] as string);\n emit(p, () => {\n process.stdout.write(`${p.url}\\n`);\n diag(`fallback: ${p.fallbackUrl}`);\n });\n }),\n );\n\n preview\n .command(\"open\")\n .description(\"Create a preview and open it in the browser\")\n .argument(\"<change-set-or-entry>\", \"chs_ or ent_ id\")\n .action(\n handle(async (ctx, args) => {\n const p = await create(ctx, args[0] as string);\n if (ctx.interactive) openBrowser(p.url);\n emit(p, () => process.stdout.write(`${p.url}\\n`));\n }),\n );\n\n preview\n .command(\"list\")\n .description(\"List preview tokens for the project\")\n .action(\n handle(async (ctx) => {\n const previews = await ctx.management().previews.list(ctx.requireProject());\n emit(previews, () =>\n table(previews, [\n { header: \"ID\", value: (p) => p.id },\n { header: \"SCOPE\", value: (p) => p.changeSetId ?? p.entryId ?? \"\" },\n { header: \"EXPIRES\", value: (p) => p.expiresAt },\n { header: \"REVOKED\", value: (p) => (p.revokedAt ? \"yes\" : \"\") },\n ]),\n );\n }),\n );\n\n preview\n .command(\"revoke\")\n .description(\"Revoke a preview token\")\n .argument(\"<id>\", \"preview id (prv_)\")\n .action(\n handle(async (ctx, args) => {\n await ctx.management().previews.revoke(ctx.requireProject(), args[0] as string);\n emit({ ok: true }, () => diag(`Revoked ${args[0] as string}.`));\n }),\n );\n}\n","import type { Command } from \"commander\";\nimport type { AssetContract } from \"@myna-sh/api-contracts\";\nimport { UsageError, diag, emit, keyValues, table } from \"../output.js\";\nimport { handle } from \"../runtime.js\";\n\nexport function registerAssets(program: Command): void {\n const assets = program.command(\"assets\").description(\"Upload and manage assets\");\n\n assets\n .command(\"upload\")\n .description(\"Upload one or more files via the presigned flow\")\n .argument(\"<path...>\", \"file path(s)\")\n .option(\"--alt <text>\", \"default alt text applied to each asset\")\n .action(\n handle(async (ctx, args, opts) => {\n const project = ctx.requireProject();\n const paths = args[0] as string[];\n const uploaded: AssetContract[] = [];\n for (const path of paths) {\n diag(`uploading ${path} …`);\n let asset = await ctx.management().assets.upload(project, path);\n if (opts.alt) asset = await ctx.management().assets.update(project, asset.id, { defaultAlt: opts.alt as string });\n uploaded.push(asset);\n }\n emit(uploaded.length === 1 ? uploaded[0] : uploaded, () =>\n table(uploaded, [\n { header: \"ID\", value: (a) => a.id },\n { header: \"FILENAME\", value: (a) => a.displayFilename },\n { header: \"TYPE\", value: (a) => a.contentType },\n { header: \"SIZE\", value: (a) => String(a.byteSize) },\n { header: \"STATE\", value: (a) => a.state },\n ]),\n );\n }),\n );\n\n assets\n .command(\"list\")\n .description(\"List assets\")\n .option(\"--limit <n>\", \"page size\", \"25\")\n .option(\"--cursor <cursor>\", \"pagination cursor\")\n .action(\n handle(async (ctx, _args, opts) => {\n const project = ctx.requireProject();\n const page = await ctx.management().assets.list(project, {\n limit: Number(opts.limit),\n cursor: opts.cursor as string | undefined,\n });\n emit({ data: page.data, nextCursor: page.nextCursor }, () =>\n table(page.data, [\n { header: \"ID\", value: (a) => a.id },\n { header: \"FILENAME\", value: (a) => a.displayFilename },\n { header: \"TYPE\", value: (a) => a.contentType },\n { header: \"STATE\", value: (a) => a.state },\n ]),\n );\n }),\n );\n\n assets\n .command(\"inspect\")\n .description(\"Show an asset and its usage\")\n .argument(\"<id>\", \"asset id (ast_)\")\n .action(\n handle(async (ctx, args) => {\n const project = ctx.requireProject();\n const result = await ctx.management().assets.usage(project, args[0] as string);\n emit(result, () => {\n keyValues([\n [\"ID\", result.asset.id],\n [\"Filename\", result.asset.displayFilename],\n [\"Type\", result.asset.contentType],\n [\"Size\", String(result.asset.byteSize)],\n [\"State\", result.asset.state],\n [\"URL\", result.asset.url],\n [\"Referenced by\", result.usage.entryIds.join(\", \") || \"(none)\"],\n ]);\n });\n }),\n );\n\n assets\n .command(\"delete\")\n .description(\"Soft-delete an asset\")\n .argument(\"<id>\", \"asset id (ast_)\")\n .option(\"--confirm-delete\", \"required consequence flag\", false)\n .action(\n handle(async (ctx, args, opts) => {\n if (!opts.confirmDelete) throw new UsageError(\"Deletion requires --confirm-delete.\");\n await ctx.management().assets.delete(ctx.requireProject(), args[0] as string);\n emit({ ok: true }, () => diag(`Deleted ${args[0] as string}.`));\n }),\n );\n}\n","import type { Command } from \"commander\";\nimport type { ApiKeyScope, OrgRole, UpdateProjectRequest, WebhookEventType } from \"@myna-sh/api-contracts\";\nimport { writeUserConfig } from \"../config.js\";\nimport { UsageError, diag, emit, keyValues, table } from \"../output.js\";\nimport { handle } from \"../runtime.js\";\nimport { openBrowser } from \"../util.js\";\n\nfunction csv<T extends string>(value: string): T[] {\n return value.split(\",\").map((s) => s.trim()).filter(Boolean) as T[];\n}\n\nexport function registerAdmin(program: Command): void {\n registerOrganizations(program);\n registerProjects(program);\n registerKeys(program);\n registerMembers(program);\n registerWebhooks(program);\n registerActivity(program);\n registerBilling(program);\n}\n\nfunction registerOrganizations(program: Command): void {\n const orgs = program.command(\"organizations\").alias(\"orgs\").description(\"Manage organizations\");\n\n orgs\n .command(\"list\")\n .description(\"List organizations you belong to\")\n .action(\n handle(async (ctx) => {\n const list = await ctx.management().organizations.list();\n emit(list, () =>\n table(list, [\n { header: \"SLUG\", value: (o) => o.slug },\n { header: \"NAME\", value: (o) => o.name },\n { header: \"ROLE\", value: (o) => o.role },\n { header: \"PLAN\", value: (o) => o.planKey },\n ]),\n );\n }),\n );\n\n orgs\n .command(\"create\")\n .description(\"Create an organization\")\n .requiredOption(\"--name <name>\", \"organization name\")\n .option(\"--slug <slug>\", \"organization slug\")\n .action(\n handle(async (ctx, _args, opts) => {\n const org = await ctx.management().organizations.create({\n name: opts.name as string,\n slug: opts.slug as string | undefined,\n });\n emit(org, () => diag(`Created ${org.slug} (${org.id}).`));\n }),\n );\n\n orgs\n .command(\"use\")\n .description(\"Set the default organization\")\n .argument(\"<slug>\", \"organization slug or id\")\n .action(\n handle(async (_ctx, args) => {\n writeUserConfig({ defaultOrganization: args[0] as string });\n emit({ defaultOrganization: args[0] as string }, () => diag(`Default organization set to ${args[0] as string}.`));\n }),\n );\n}\n\nfunction registerProjects(program: Command): void {\n const projects = program.command(\"projects\").description(\"Manage projects\");\n\n projects\n .command(\"list\")\n .description(\"List projects in the organization\")\n .action(\n handle(async (ctx) => {\n const list = await ctx.management().projects.list(ctx.requireOrganization());\n emit(list, () =>\n table(list, [\n { header: \"SLUG\", value: (p) => p.slug },\n { header: \"NAME\", value: (p) => p.name },\n { header: \"PUBLIC API\", value: (p) => (p.publicApiEnabled ? \"on\" : \"off\") },\n { header: \"ARCHIVED\", value: (p) => (p.archivedAt ? \"yes\" : \"\") },\n ]),\n );\n }),\n );\n\n projects\n .command(\"create\")\n .description(\"Create a project\")\n .requiredOption(\"--name <name>\", \"project name\")\n .option(\"--slug <slug>\", \"project slug\")\n .option(\"--timezone <tz>\", \"project timezone\")\n .action(\n handle(async (ctx, _args, opts) => {\n const project = await ctx.management().projects.create(ctx.requireOrganization(), {\n name: opts.name as string,\n slug: opts.slug as string | undefined,\n timezone: opts.timezone as string | undefined,\n });\n emit(project, () => diag(`Created ${project.slug} (${project.id}).`));\n }),\n );\n\n projects\n .command(\"inspect\")\n .description(\"Show project details\")\n .argument(\"[project]\", \"project id or slug\")\n .action(\n handle(async (ctx, args) => {\n const ref = (args[0] as string | undefined) ?? ctx.requireProject();\n const project = await ctx.management().projects.get(ref);\n emit(project, () =>\n keyValues([\n [\"ID\", project.id],\n [\"Name\", project.name],\n [\"Slug\", project.slug],\n [\"Timezone\", project.timezone],\n [\"Public API\", project.publicApiEnabled ? \"on\" : \"off\"],\n [\"Origins\", project.origins.join(\", \") || \"(none)\"],\n ]),\n );\n }),\n );\n\n projects\n .command(\"update\")\n .description(\"Update project settings\")\n .argument(\"[project]\", \"project id or slug\")\n .option(\"--name <name>\", \"project name\")\n .option(\"--timezone <timezone>\", \"IANA timezone\")\n .option(\"--public-api <state>\", \"public API state (on|off)\")\n .option(\"--default-preview-template <template>\", \"default preview URL template\")\n .option(\"--clear-default-preview-template\", \"remove the default preview URL template\")\n .option(\"--origins <urls>\", \"comma-separated allowed origins\")\n .option(\"--clear-origins\", \"remove all allowed origins\")\n .action(\n handle(async (ctx, args, opts) => {\n const ref = (args[0] as string | undefined) ?? ctx.requireProject();\n const patch: UpdateProjectRequest = {};\n if (opts.name !== undefined) patch.name = opts.name as string;\n if (opts.timezone !== undefined) patch.timezone = opts.timezone as string;\n if (opts.publicApi !== undefined) {\n const state = String(opts.publicApi).toLowerCase();\n if (![\"on\", \"off\", \"true\", \"false\"].includes(state)) {\n throw new UsageError(\"--public-api must be on or off.\");\n }\n patch.publicApiEnabled = state === \"on\" || state === \"true\";\n }\n if (opts.defaultPreviewTemplate !== undefined && opts.clearDefaultPreviewTemplate) {\n throw new UsageError(\"Use either --default-preview-template or --clear-default-preview-template, not both.\");\n }\n if (opts.defaultPreviewTemplate !== undefined) {\n patch.defaultPreviewTemplate = opts.defaultPreviewTemplate as string;\n }\n if (opts.clearDefaultPreviewTemplate) patch.defaultPreviewTemplate = null;\n if (opts.origins !== undefined && opts.clearOrigins) {\n throw new UsageError(\"Use either --origins or --clear-origins, not both.\");\n }\n if (opts.origins !== undefined) patch.origins = csv<string>(opts.origins as string);\n if (opts.clearOrigins) patch.origins = [];\n if (Object.keys(patch).length === 0) {\n throw new UsageError(\"Specify at least one project setting to update.\");\n }\n const project = await ctx.management().projects.update(ref, patch);\n emit(project, () => diag(`Updated ${project.slug}.`));\n }),\n );\n\n projects\n .command(\"archive\")\n .description(\"Archive a project\")\n .argument(\"[project]\", \"project id or slug\")\n .action(\n handle(async (ctx, args) => {\n const ref = (args[0] as string | undefined) ?? ctx.requireProject();\n const project = await ctx.management().projects.archive(ref);\n emit(project, () => diag(`Archived ${project.slug}.`));\n }),\n );\n}\n\nfunction registerKeys(program: Command): void {\n const keys = program.command(\"keys\").description(\"Manage API keys\");\n\n keys\n .command(\"list\")\n .description(\"List API keys for the project (or organization with --org-scope)\")\n .option(\"--org-scope\", \"list organization-scoped keys\", false)\n .action(\n handle(async (ctx, _args, opts) => {\n const list = opts.orgScope\n ? await ctx.management().apiKeys.listForOrganization(ctx.requireOrganization())\n : await ctx.management().apiKeys.listForProject(ctx.requireProject());\n emit(list, () =>\n table(list, [\n { header: \"ID\", value: (k) => k.id },\n { header: \"NAME\", value: (k) => k.name },\n { header: \"SCOPES\", value: (k) => k.scopes.join(\",\") },\n { header: \"REVOKED\", value: (k) => (k.revokedAt ? \"yes\" : \"\") },\n ]),\n );\n }),\n );\n\n keys\n .command(\"create\")\n .description(\"Create an API key (project-scoped by default)\")\n .requiredOption(\"--name <name>\", \"key name\")\n .requiredOption(\"--scopes <scopes>\", \"comma-separated scopes\")\n .option(\"--label <label>\", \"agent/integration label\")\n .option(\"--org-scope\", \"create an organization-scoped key\", false)\n .option(\"--expires-at <iso>\", \"expiry (ISO 8601)\")\n .action(\n handle(async (ctx, _args, opts) => {\n const body = {\n name: opts.name as string,\n scopes: csv<ApiKeyScope>(opts.scopes as string),\n label: opts.label as string | undefined,\n expiresAt: opts.expiresAt as string | undefined,\n };\n const result = opts.orgScope\n ? await ctx.management().apiKeys.createForOrganization(ctx.requireOrganization(), body)\n : await ctx.management().apiKeys.createForProject(ctx.requireProject(), body);\n emit(result, () => {\n diag(\"Store this secret now — it will not be shown again.\");\n keyValues([\n [\"ID\", result.key.id],\n [\"Name\", result.key.name],\n [\"Secret\", result.secret],\n ]);\n });\n }),\n );\n\n keys\n .command(\"revoke\")\n .description(\"Revoke an API key\")\n .argument(\"<id>\", \"key id (key_)\")\n .option(\"--org-scope\", \"revoke an organization-scoped key\", false)\n .action(\n handle(async (ctx, args, opts) => {\n if (opts.orgScope) {\n await ctx.management().apiKeys.revokeForOrganization(ctx.requireOrganization(), args[0] as string);\n } else {\n await ctx.management().apiKeys.revokeForProject(ctx.requireProject(), args[0] as string);\n }\n emit({ ok: true }, () => diag(`Revoked ${args[0] as string}.`));\n }),\n );\n}\n\nfunction registerMembers(program: Command): void {\n const members = program.command(\"members\").description(\"Manage organization members\");\n\n members\n .command(\"list\")\n .description(\"List members and pending invitations\")\n .action(\n handle(async (ctx) => {\n const org = ctx.requireOrganization();\n const [list, invites] = await Promise.all([\n ctx.management().members.list(org),\n ctx.management().invitations.list(org).catch(() => []),\n ]);\n emit({ members: list, invitations: invites }, () => {\n table(list, [\n { header: \"USER\", value: (m) => m.username ?? m.userId },\n { header: \"EMAIL\", value: (m) => m.email },\n { header: \"ROLE\", value: (m) => m.role },\n ]);\n if (invites.length > 0) {\n diag(\"\\nPending invitations:\");\n table(invites, [\n { header: \"EMAIL\", value: (i) => i.email },\n { header: \"ROLE\", value: (i) => i.role },\n { header: \"EXPIRES\", value: (i) => i.expiresAt },\n ]);\n }\n });\n }),\n );\n\n members\n .command(\"invite\")\n .description(\"Invite a member by email\")\n .requiredOption(\"--email <email>\", \"invitee email\")\n .requiredOption(\"--role <role>\", \"role (admin|editor|viewer)\")\n .action(\n handle(async (ctx, _args, opts) => {\n const invite = await ctx.management().invitations.create(ctx.requireOrganization(), {\n email: opts.email as string,\n role: opts.role as Exclude<OrgRole, \"owner\">,\n });\n emit(invite, () => diag(`Invited ${invite.email} as ${invite.role}.`));\n }),\n );\n\n members\n .command(\"update\")\n .description(\"Update a member's role\")\n .argument(\"<user>\", \"user id\")\n .requiredOption(\"--role <role>\", \"new role\")\n .action(\n handle(async (ctx, args, opts) => {\n await ctx.management().members.update(ctx.requireOrganization(), args[0] as string, {\n role: opts.role as OrgRole,\n });\n emit({ ok: true }, () => diag(`Updated ${args[0] as string} to ${opts.role as string}.`));\n }),\n );\n\n members\n .command(\"remove\")\n .description(\"Remove a member\")\n .argument(\"<user>\", \"user id\")\n .action(\n handle(async (ctx, args) => {\n await ctx.management().members.remove(ctx.requireOrganization(), args[0] as string);\n emit({ ok: true }, () => diag(`Removed ${args[0] as string}.`));\n }),\n );\n}\n\nfunction registerWebhooks(program: Command): void {\n const webhooks = program.command(\"webhooks\").description(\"Manage webhook endpoints\");\n\n webhooks\n .command(\"list\")\n .description(\"List webhook endpoints\")\n .action(\n handle(async (ctx) => {\n const list = await ctx.management().webhooks.list(ctx.requireProject());\n emit(list, () =>\n table(list, [\n { header: \"ID\", value: (w) => w.id },\n { header: \"URL\", value: (w) => w.url },\n { header: \"EVENTS\", value: (w) => w.events.join(\",\") },\n { header: \"ENABLED\", value: (w) => (w.enabled ? \"yes\" : \"no\") },\n ]),\n );\n }),\n );\n\n webhooks\n .command(\"create\")\n .description(\"Create a webhook endpoint\")\n .requiredOption(\"--url <url>\", \"endpoint URL\")\n .requiredOption(\"--events <events>\", \"comma-separated event types\")\n .action(\n handle(async (ctx, _args, opts) => {\n const result = await ctx.management().webhooks.create(ctx.requireProject(), {\n url: opts.url as string,\n events: csv<WebhookEventType>(opts.events as string),\n enabled: true,\n });\n emit(result, () => {\n diag(\"Store this signing secret now — it will not be shown again.\");\n keyValues([\n [\"ID\", result.endpoint.id],\n [\"URL\", result.endpoint.url],\n [\"Signing secret\", result.signingSecret],\n ]);\n });\n }),\n );\n\n webhooks\n .command(\"update\")\n .description(\"Update a webhook endpoint\")\n .argument(\"<id>\", \"webhook id\")\n .option(\"--url <url>\", \"new URL\")\n .option(\"--events <events>\", \"comma-separated event types\")\n .option(\"--enabled <bool>\", \"enable/disable (true|false)\")\n .action(\n handle(async (ctx, args, opts) => {\n const patch: { url?: string; events?: WebhookEventType[]; enabled?: boolean } = {};\n if (opts.url) patch.url = opts.url as string;\n if (opts.events) patch.events = csv<WebhookEventType>(opts.events as string);\n if (opts.enabled !== undefined) patch.enabled = opts.enabled === \"true\";\n const endpoint = await ctx.management().webhooks.update(ctx.requireProject(), args[0] as string, patch);\n emit(endpoint, () => diag(`Updated ${endpoint.id}.`));\n }),\n );\n\n webhooks\n .command(\"delete\")\n .description(\"Delete a webhook endpoint\")\n .argument(\"<id>\", \"webhook id\")\n .action(\n handle(async (ctx, args) => {\n await ctx.management().webhooks.delete(ctx.requireProject(), args[0] as string);\n emit({ ok: true }, () => diag(`Deleted ${args[0] as string}.`));\n }),\n );\n\n webhooks\n .command(\"deliveries\")\n .description(\"List recent deliveries for a webhook\")\n .argument(\"<id>\", \"webhook id\")\n .action(\n handle(async (ctx, args) => {\n const list = await ctx.management().webhooks.deliveries(ctx.requireProject(), args[0] as string);\n emit(list, () =>\n table(list, [\n { header: \"ID\", value: (d) => d.id },\n { header: \"EVENT\", value: (d) => d.eventType },\n { header: \"ATTEMPT\", value: (d) => String(d.attempt) },\n { header: \"STATUS\", value: (d) => d.status },\n { header: \"HTTP\", value: (d) => (d.responseStatus ? String(d.responseStatus) : \"\") },\n ]),\n );\n }),\n );\n\n webhooks\n .command(\"retry\")\n .description(\"Retry a webhook delivery\")\n .argument(\"<webhook>\", \"webhook id\")\n .argument(\"<delivery>\", \"delivery id\")\n .action(\n handle(async (ctx, args) => {\n await ctx.management().webhooks.retry(ctx.requireProject(), args[0] as string, args[1] as string);\n emit({ ok: true }, () => diag(`Retrying delivery ${args[1] as string}.`));\n }),\n );\n}\n\nfunction registerActivity(program: Command): void {\n program\n .command(\"activity\")\n .description(\"Show the project activity feed\")\n .option(\"--actor-type <type>\", \"filter by actor type\")\n .option(\"--action <action>\", \"filter by action\")\n .option(\"--limit <n>\", \"page size\", \"25\")\n .action(\n handle(async (ctx, _args, opts) => {\n const page = await ctx.management().activity(ctx.requireProject(), {\n actorType: opts.actorType as string | undefined,\n action: opts.action as string | undefined,\n limit: Number(opts.limit),\n });\n emit({ data: page.data, nextCursor: page.nextCursor }, () =>\n table(page.data, [\n { header: \"WHEN\", value: (a) => a.createdAt },\n { header: \"ACTOR\", value: (a) => a.actorType },\n { header: \"ACTION\", value: (a) => a.action },\n { header: \"TARGET\", value: (a) => `${a.targetType ?? \"\"} ${a.targetId ?? \"\"}`.trim() },\n ]),\n );\n }),\n );\n}\n\nfunction registerBilling(program: Command): void {\n const billing = program.command(\"billing\").description(\"Billing status and management\");\n\n billing\n .command(\"status\")\n .description(\"Show the organization's plan and usage\")\n .action(\n handle(async (ctx) => {\n const org = ctx.requireOrganization();\n const [status, usage] = await Promise.all([\n ctx.management().billing.status(org),\n ctx.management().organizations.usage(org).catch(() => undefined),\n ]);\n emit({ billing: status, usage }, () => {\n keyValues([\n [\"Plan\", status.subscription.planKey],\n [\"Status\", status.subscription.status],\n [\"Provider customer\", status.hasProviderCustomer ? \"yes\" : \"no\"],\n ]);\n if (usage) {\n diag(\"\\nUsage:\");\n table(usage.metrics, [\n { header: \"METRIC\", value: (m) => m.metric },\n { header: \"USED\", value: (m) => String(m.quantity) },\n { header: \"LIMIT\", value: (m) => (m.limit === null ? \"∞\" : String(m.limit)) },\n ]);\n }\n });\n }),\n );\n\n billing\n .command(\"upgrade\")\n .description(\"Start a Pro checkout\")\n .option(\"--interval <interval>\", \"month|year\", \"month\")\n .action(\n handle(async (ctx, _args, opts) => {\n const result = await ctx.management().billing.checkout(ctx.requireOrganization(), {\n interval: (opts.interval as \"month\" | \"year\") ?? \"month\",\n });\n if (ctx.interactive) openBrowser(result.checkoutUrl);\n emit(result, () => process.stdout.write(`${result.checkoutUrl}\\n`));\n }),\n );\n\n billing\n .command(\"portal\")\n .description(\"Open the billing portal\")\n .action(\n handle(async (ctx) => {\n const result = await ctx.management().billing.portal(ctx.requireOrganization());\n if (ctx.interactive) openBrowser(result.portalUrl);\n emit(result, () => process.stdout.write(`${result.portalUrl}\\n`));\n }),\n );\n}\n"],"mappings":"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","names":["query","resolve","query","bytes","DEFAULT_API_URL","readFileSync","platform","readFileSync","platform","sleep","existsSync","mkdirSync","writeFileSync","join","mkdirSync","join","existsSync","writeFileSync","DEFAULT_API_URL","mkdirSync","writeFileSync","join","existsSync","join","resolve","existsSync","join","resolve","mkdirSync","join","writeFileSync"]}
1
+ {"version":3,"sources":["../src/main.ts","../../sdk/src/errors.ts","../../sdk/src/http.ts","../../sdk/src/management.ts","../../sdk/src/codegen.ts","../src/config.ts","../src/output.ts","../src/client.ts","../src/runtime.ts","../src/util.ts","../src/commands/auth.ts","../src/commands/workspace.ts","../src/commands/schema.ts","../src/schema-loader.ts","../../schema/src/canonical.ts","../src/dsl-emit.ts","../src/commands/entries.ts","../src/commands/changes.ts","../src/commands/previews.ts","../src/commands/assets.ts","../src/commands/admin.ts"],"sourcesContent":["import { Command, CommanderError } from \"commander\";\nimport { registerAuth } from \"./commands/auth.js\";\nimport { registerWorkspace } from \"./commands/workspace.js\";\nimport { registerSchema } from \"./commands/schema.js\";\nimport { registerEntries } from \"./commands/entries.js\";\nimport { registerChanges } from \"./commands/changes.js\";\nimport { registerPreviews } from \"./commands/previews.js\";\nimport { registerAssets } from \"./commands/assets.js\";\nimport { registerAdmin } from \"./commands/admin.js\";\n\nconst VERSION = \"0.2.0\";\n\nconst GLOBAL_VALUE_FLAGS = new Set([\"--project\", \"--organization\", \"--token\", \"--api-url\"]);\nconst GLOBAL_BOOL_FLAGS = new Set([\"--json\", \"--no-interactive\", \"--interactive\"]);\n\n/**\n * Hoist global flags (which may appear anywhere) to the front so Commander,\n * which only recognizes them on the root program, always parses them.\n */\nfunction normalizeGlobals(argv: string[]): string[] {\n const [node, script, ...rest] = argv;\n const globals: string[] = [];\n const remaining: string[] = [];\n for (let i = 0; i < rest.length; i++) {\n const arg = rest[i]!;\n const eq = arg.indexOf(\"=\");\n const name = eq === -1 ? arg : arg.slice(0, eq);\n if (GLOBAL_BOOL_FLAGS.has(name)) {\n globals.push(arg);\n } else if (GLOBAL_VALUE_FLAGS.has(name)) {\n if (eq === -1) {\n globals.push(arg);\n if (i + 1 < rest.length) globals.push(rest[++i]!);\n } else {\n globals.push(arg);\n }\n } else {\n remaining.push(arg);\n }\n }\n return [node!, script!, ...globals, ...remaining];\n}\n\nexport function buildProgram(): Command {\n const program = new Command();\n program\n .name(\"myna\")\n .description(\"Myna — content infrastructure for developers and agents\")\n .version(VERSION, \"-v, --version\")\n .option(\"--json\", \"emit a single machine-readable JSON value on stdout\")\n .option(\"--project <ref>\", \"project id or slug\")\n .option(\"--organization <ref>\", \"organization id or slug\")\n .option(\"--token <token>\", \"API token (overrides stored credentials)\")\n .option(\"--api-url <url>\", \"API base URL\")\n .option(\"--no-interactive\", \"disable prompts and browser opening\")\n .showHelpAfterError();\n\n registerAuth(program);\n registerWorkspace(program);\n registerSchema(program);\n registerEntries(program);\n registerChanges(program);\n registerPreviews(program);\n registerAssets(program);\n registerAdmin(program);\n\n return program;\n}\n\nexport async function main(argv: string[] = process.argv): Promise<void> {\n const program = buildProgram();\n program.exitOverride();\n try {\n await program.parseAsync(normalizeGlobals(argv));\n } catch (error) {\n if (error instanceof CommanderError) {\n if (\n error.code === \"commander.helpDisplayed\" ||\n error.code === \"commander.version\" ||\n error.code === \"commander.help\"\n ) {\n process.exitCode = 0;\n return;\n }\n process.exitCode = 2;\n return;\n }\n process.stderr.write(`error: ${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n }\n}\n","import type { FieldErrorContract, ProblemDetailsContract } from \"../../api-contracts/src/common.js\";\n\n/**\n * Error thrown by both SDK clients when the API returns a non-2xx response.\n * Carries the parsed RFC 9457 problem-details document so callers can branch on\n * the stable `code`, inspect field-level `fields`, and surface the `requestId`.\n */\nexport class MynaApiError extends Error {\n /** HTTP status code. */\n readonly status: number;\n /** Stable machine-readable error code (e.g. `VALIDATION_FAILED`). */\n readonly code: string;\n /** RFC 9457 `type` URI. */\n readonly type: string | undefined;\n /** Human-facing title. */\n readonly title: string;\n /** Longer human-facing detail, when provided. */\n readonly detail: string | undefined;\n /** Server request id for support/correlation. */\n readonly requestId: string | undefined;\n /** Field-level validation errors, when present. */\n readonly fields: FieldErrorContract[] | undefined;\n /** The full parsed problem document (or a synthesized one). */\n readonly problem: ProblemDetailsContract;\n\n constructor(problem: ProblemDetailsContract) {\n super(problem.detail ?? problem.title ?? `Request failed (${problem.status})`);\n this.name = \"MynaApiError\";\n this.status = problem.status;\n this.code = problem.code;\n this.type = problem.type;\n this.title = problem.title;\n this.detail = problem.detail;\n this.requestId = problem.requestId;\n this.fields = problem.fields;\n this.problem = problem;\n Object.setPrototypeOf(this, MynaApiError.prototype);\n }\n\n static is(value: unknown): value is MynaApiError {\n return value instanceof MynaApiError;\n }\n}\n\n/** Type guard for `MynaApiError`. */\nexport function isMynaApiError(value: unknown): value is MynaApiError {\n return value instanceof MynaApiError;\n}\n\n/** Build a `MynaApiError` from an arbitrary response body and status. */\nexport function problemFromResponse(status: number, body: unknown, fallbackTitle: string): MynaApiError {\n if (body && typeof body === \"object\" && \"code\" in body && \"status\" in body) {\n return new MynaApiError(body as ProblemDetailsContract);\n }\n const detail =\n body && typeof body === \"object\" && \"error\" in body && typeof (body as { error: unknown }).error === \"string\"\n ? (body as { error: string }).error\n : typeof body === \"string\" && body\n ? body\n : undefined;\n return new MynaApiError({\n type: \"about:blank\",\n title: fallbackTitle,\n status,\n code: status >= 500 ? \"INTERNAL\" : \"REQUEST_FAILED\",\n detail,\n } as ProblemDetailsContract);\n}\n","import { problemFromResponse } from \"./errors.js\";\n\n/** A fetch-compatible function. */\nexport type FetchLike = (input: string, init?: RequestInit) => Promise<Response>;\n\nexport interface RetryOptions {\n /** Maximum number of retries (in addition to the first attempt). Default 3. */\n maxRetries?: number;\n /** Base backoff in milliseconds (exponential). Default 200. */\n baseDelayMs?: number;\n /** Cap on any single backoff. Default 5000. */\n maxDelayMs?: number;\n}\n\nexport interface HttpClientOptions {\n /** Base URL including the version prefix, e.g. `https://api.myna.sh/v1`. */\n baseUrl: string;\n /** Bearer credential (API key, preview token, or CLI token). */\n token?: string | undefined;\n /** Custom fetch implementation (browser/undici/node). */\n fetch?: FetchLike | undefined;\n /** Extra default headers merged into every request. */\n headers?: Record<string, string> | undefined;\n /** Retry policy. Retries apply to safe reads and idempotent mutations only. */\n retry?: RetryOptions | undefined;\n}\n\nexport interface RequestOptions {\n query?: Record<string, unknown> | undefined;\n body?: unknown;\n headers?: Record<string, string> | undefined;\n signal?: AbortSignal | undefined;\n /** Sending an idempotency key makes a mutation eligible for automatic retry. */\n idempotencyKey?: string | undefined;\n /** Override the bearer token for a single request (e.g. a preview token). */\n token?: string | undefined;\n}\n\nconst RETRYABLE_STATUS = new Set([408, 425, 429, 500, 502, 503, 504]);\nconst SAFE_METHODS = new Set([\"GET\", \"HEAD\", \"OPTIONS\"]);\n\nfunction resolveFetch(custom?: FetchLike): FetchLike {\n if (custom) return custom;\n if (typeof globalThis.fetch === \"function\") return globalThis.fetch.bind(globalThis) as FetchLike;\n throw new Error(\"No fetch implementation available. Pass `fetch` to the Myna client.\");\n}\n\n/** Serialize a query object, supporting nested `filter[field][op]` shapes. */\nexport function buildQuery(query: Record<string, unknown> | undefined): string {\n if (!query) return \"\";\n const params = new URLSearchParams();\n const append = (key: string, value: unknown): void => {\n if (value === undefined || value === null) return;\n if (Array.isArray(value)) {\n params.set(key, value.join(\",\"));\n return;\n }\n if (typeof value === \"object\") {\n for (const [op, v] of Object.entries(value as Record<string, unknown>)) {\n append(`${key}[${op}]`, v);\n }\n return;\n }\n params.set(key, String(value));\n };\n for (const [key, value] of Object.entries(query)) append(key, value);\n const qs = params.toString();\n return qs ? `?${qs}` : \"\";\n}\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) return reject(signal.reason ?? new Error(\"Aborted\"));\n const timer = setTimeout(resolve, ms);\n signal?.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n reject(signal.reason ?? new Error(\"Aborted\"));\n },\n { once: true },\n );\n });\n}\n\nexport class HttpClient {\n private readonly baseUrl: string;\n private readonly token: string | undefined;\n private readonly fetchImpl: FetchLike;\n private readonly defaultHeaders: Record<string, string>;\n private readonly retry: Required<RetryOptions>;\n\n constructor(options: HttpClientOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/+$/, \"\");\n this.token = options.token;\n this.fetchImpl = resolveFetch(options.fetch);\n this.defaultHeaders = options.headers ?? {};\n this.retry = {\n maxRetries: options.retry?.maxRetries ?? 3,\n baseDelayMs: options.retry?.baseDelayMs ?? 200,\n maxDelayMs: options.retry?.maxDelayMs ?? 5000,\n };\n }\n\n /** Perform a request and unwrap the `{ data }` envelope. */\n async request<T>(method: string, path: string, options: RequestOptions = {}): Promise<T> {\n const raw = await this.requestRaw(method, path, options);\n if (raw.status === 204 || raw.status === 304) return undefined as T;\n const parsed = (await raw.json().catch(() => undefined)) as { data?: T } | undefined;\n return (parsed && \"data\" in parsed ? parsed.data : (parsed as unknown)) as T;\n }\n\n /** Perform a request and return the full parsed body (envelope included). */\n async requestEnvelope<T>(method: string, path: string, options: RequestOptions = {}): Promise<T> {\n const raw = await this.requestRaw(method, path, options);\n return (await raw.json().catch(() => ({}))) as T;\n }\n\n /** Low-level request with retries; throws `MynaApiError` on non-2xx. */\n async requestRaw(method: string, path: string, options: RequestOptions = {}): Promise<Response> {\n const url = `${this.baseUrl}${path}${buildQuery(options.query)}`;\n const headers: Record<string, string> = {\n accept: \"application/json\",\n ...this.defaultHeaders,\n ...options.headers,\n };\n const token = options.token ?? this.token;\n if (token) headers.authorization = `Bearer ${token}`;\n\n let payload: BodyInit | undefined;\n if (options.body !== undefined) {\n if (options.body instanceof Uint8Array || typeof options.body === \"string\") {\n payload = options.body as BodyInit;\n } else {\n headers[\"content-type\"] = \"application/json\";\n payload = JSON.stringify(options.body);\n }\n }\n if (options.idempotencyKey) headers[\"idempotency-key\"] = options.idempotencyKey;\n\n const idempotent = SAFE_METHODS.has(method.toUpperCase()) || Boolean(options.idempotencyKey);\n const init: RequestInit = { method, headers };\n if (payload !== undefined) init.body = payload;\n if (options.signal) init.signal = options.signal;\n\n let attempt = 0;\n for (;;) {\n let response: Response;\n try {\n response = await this.fetchImpl(url, init);\n } catch (error) {\n if (idempotent && attempt < this.retry.maxRetries && !isAbort(error)) {\n await sleep(this.backoff(attempt), options.signal);\n attempt++;\n continue;\n }\n throw error;\n }\n\n if (response.ok) return response;\n\n if (idempotent && RETRYABLE_STATUS.has(response.status) && attempt < this.retry.maxRetries) {\n const retryAfter = retryAfterMs(response);\n await sleep(retryAfter ?? this.backoff(attempt), options.signal);\n attempt++;\n continue;\n }\n\n const body = await response.json().catch(() => undefined);\n throw problemFromResponse(response.status, body, response.statusText || \"Request failed\");\n }\n }\n\n private backoff(attempt: number): number {\n const base = Math.min(this.retry.baseDelayMs * 2 ** attempt, this.retry.maxDelayMs);\n return Math.round(base * (0.5 + Math.random() * 0.5));\n }\n}\n\nfunction retryAfterMs(response: Response): number | undefined {\n const header = response.headers.get(\"retry-after\");\n if (!header) return undefined;\n const seconds = Number(header);\n return Number.isFinite(seconds) ? seconds * 1000 : undefined;\n}\n\nfunction isAbort(error: unknown): boolean {\n return (\n error instanceof Error &&\n (error.name === \"AbortError\" || error.name === \"TimeoutError\")\n );\n}\n","import { createHash, randomUUID } from \"node:crypto\";\nimport { readFile } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport type {\n AcceptInvitationResponse,\n ApiKeyContract,\n CreateApiKeyRequest,\n CreateApiKeyResponse,\n CreateInvitationRequest,\n CreateOrganizationRequest,\n InvitationContract,\n MemberContract,\n OrganizationContract,\n UpdateMemberRequest,\n UpdateOrganizationRequest,\n} from \"../../api-contracts/src/organizations.js\";\nimport type { ActivityEventContract } from \"../../api-contracts/src/activity.js\";\nimport type {\n AssetContract,\n CompleteUploadResponse,\n CreateUploadRequest,\n CreateUploadResponse,\n ReplaceAssetRequest,\n UpdateAssetRequest,\n} from \"../../api-contracts/src/assets.js\";\nimport type {\n BillingResponse,\n CheckoutRequest,\n CheckoutResponse,\n PortalResponse,\n} from \"../../api-contracts/src/billing.js\";\nimport type {\n ChangeSetCheckContract,\n ChangeSetCommentContract,\n ChangeSetContract,\n ChangeSetReviewContract,\n CreateChangeSetCommentRequest,\n CreateChangeSetRequest,\n RequestReviewRequest,\n ReviewDecisionRequest,\n RunChecksResponse,\n UpdateChangeSetRequest,\n} from \"../../api-contracts/src/change-sets.js\";\nimport type {\n CollectionContract,\n CollectionVersionContract,\n SchemaDiffResponse,\n SchemaDriftResponse,\n SchemaPushResponse,\n} from \"../../api-contracts/src/collections.js\";\nimport type {\n BulkEntriesRequest,\n BulkEntriesResponse,\n EntryContract,\n EntryReferencesResponse,\n ImportEntriesRequest,\n ImportEntriesResponse,\n RestoreRevisionResponse,\n RevisionContract,\n} from \"../../api-contracts/src/entries.js\";\nimport type { CreatePreviewRequest, PreviewContract } from \"../../api-contracts/src/previews.js\";\nimport type {\n CreateProjectRequest,\n CreateSavedViewRequest,\n ProjectContract,\n ProjectExportResponse,\n SavedViewContract,\n UpdateProjectRequest,\n} from \"../../api-contracts/src/projects.js\";\nimport type { UsageResponse } from \"../../api-contracts/src/usage.js\";\nimport type {\n CreateWebhookRequest,\n CreateWebhookResponse,\n UpdateWebhookRequest,\n WebhookDeliveryContract,\n WebhookEndpointContract,\n} from \"../../api-contracts/src/webhooks.js\";\nimport { HttpClient, type FetchLike, type RetryOptions } from \"./http.js\";\n\nconst DEFAULT_API_URL = \"https://api.myna.sh\";\n\nexport interface ManagementClientOptions {\n /** Management/CLI credential (`myna_sk_...`). */\n token: string;\n /** API origin. Defaults to `https://api.myna.sh`. */\n apiUrl?: string;\n fetch?: FetchLike;\n retry?: RetryOptions;\n /**\n * Idempotency-key factory for mutations. Defaults to a random UUID per call.\n * Pass a stable value to make a specific mutation replay-safe.\n */\n idempotencyKey?: () => string;\n}\n\nexport interface ListOptions {\n limit?: number;\n cursor?: string;\n signal?: AbortSignal;\n}\n\nexport interface Page<T> {\n data: T[];\n nextCursor: string | null;\n}\n\nexport interface UploadAssetMeta {\n filename?: string;\n contentType?: string;\n /** Override the automatically detected byte length. */\n byteSize?: number;\n}\n\n/** Bytes or a filesystem path accepted by `uploadAsset`. */\nexport type AssetInput = string | Uint8Array | ArrayBuffer;\n\n/**\n * Server-only management client (SPEC 12). Typed wrappers over the full\n * management API surface. Mutations automatically carry an `Idempotency-Key`.\n */\nexport class ManagementClient {\n private readonly http: HttpClient;\n private readonly newIdempotencyKey: () => string;\n private readonly fetchImpl: FetchLike;\n\n constructor(options: ManagementClientOptions) {\n if (!options.token) throw new Error(\"createManagementClient: `token` is required.\");\n this.newIdempotencyKey = options.idempotencyKey ?? (() => randomUUID());\n this.fetchImpl = options.fetch ?? ((input, init) => fetch(input, init));\n this.http = new HttpClient({\n baseUrl: `${(options.apiUrl ?? DEFAULT_API_URL).replace(/\\/+$/, \"\")}/v1`,\n token: options.token,\n fetch: options.fetch,\n retry: options.retry,\n });\n }\n\n // Convenience: idempotency key for a mutation.\n private idem(): string {\n return this.newIdempotencyKey();\n }\n\n private get<T>(path: string, query?: Record<string, unknown>, signal?: AbortSignal): Promise<T> {\n return this.http.request<T>(\"GET\", path, { query, signal });\n }\n\n private async page<T>(path: string, opts: ListOptions = {}): Promise<Page<T>> {\n const body = await this.http.requestEnvelope<{ data: T[]; pagination: { nextCursor: string | null } }>(\n \"GET\",\n path,\n { query: { limit: opts.limit, cursor: opts.cursor }, signal: opts.signal },\n );\n return { data: body.data, nextCursor: body.pagination?.nextCursor ?? null };\n }\n\n private mutate<T>(method: string, path: string, body?: unknown, query?: Record<string, unknown>): Promise<T> {\n return this.http.request<T>(method, path, { body, query, idempotencyKey: this.idem() });\n }\n\n // --- Organizations --------------------------------------------------------\n readonly organizations = {\n list: (signal?: AbortSignal): Promise<OrganizationContract[]> =>\n this.get<OrganizationContract[]>(\"/organizations\", undefined, signal),\n create: (body: CreateOrganizationRequest): Promise<OrganizationContract> =>\n this.mutate<OrganizationContract>(\"POST\", \"/organizations\", body),\n get: (organization: string, signal?: AbortSignal): Promise<OrganizationContract> =>\n this.get<OrganizationContract>(`/organizations/${enc(organization)}`, undefined, signal),\n update: (organization: string, body: UpdateOrganizationRequest): Promise<OrganizationContract> =>\n this.mutate<OrganizationContract>(\"PATCH\", `/organizations/${enc(organization)}`, body),\n delete: (organization: string): Promise<{ ok: boolean; recoverableForDays: number }> =>\n this.mutate(\"DELETE\", `/organizations/${enc(organization)}`),\n export: (organization: string): Promise<{ jobId: string; storageKey: string; downloadUrl: string; ready: boolean }> =>\n this.mutate(\"POST\", `/organizations/${enc(organization)}/export`),\n usage: (organization: string, signal?: AbortSignal): Promise<UsageResponse> =>\n this.get<UsageResponse>(`/organizations/${enc(organization)}/usage`, undefined, signal),\n };\n\n // --- Members & invitations ------------------------------------------------\n readonly members = {\n list: (organization: string, signal?: AbortSignal): Promise<MemberContract[]> =>\n this.get<MemberContract[]>(`/organizations/${enc(organization)}/members`, undefined, signal),\n update: (organization: string, user: string, body: UpdateMemberRequest): Promise<{ ok: boolean }> =>\n this.mutate(\"PATCH\", `/organizations/${enc(organization)}/members/${enc(user)}`, body),\n remove: (organization: string, user: string): Promise<{ ok: boolean }> =>\n this.mutate(\"DELETE\", `/organizations/${enc(organization)}/members/${enc(user)}`),\n };\n\n readonly invitations = {\n list: (organization: string, signal?: AbortSignal): Promise<InvitationContract[]> =>\n this.get<InvitationContract[]>(`/organizations/${enc(organization)}/invitations`, undefined, signal),\n create: (organization: string, body: CreateInvitationRequest): Promise<InvitationContract> =>\n this.mutate<InvitationContract>(\"POST\", `/organizations/${enc(organization)}/invitations`, body),\n revoke: (organization: string, invitation: string): Promise<{ ok: boolean }> =>\n this.mutate(\"DELETE\", `/organizations/${enc(organization)}/invitations/${enc(invitation)}`),\n accept: (token: string): Promise<AcceptInvitationResponse> =>\n this.mutate<AcceptInvitationResponse>(\"POST\", `/invitations/${enc(token)}/accept`),\n };\n\n // --- Projects -------------------------------------------------------------\n readonly projects = {\n list: (organization: string, signal?: AbortSignal): Promise<ProjectContract[]> =>\n this.get<ProjectContract[]>(`/organizations/${enc(organization)}/projects`, undefined, signal),\n create: (organization: string, body: CreateProjectRequest): Promise<ProjectContract> =>\n this.mutate<ProjectContract>(\"POST\", `/organizations/${enc(organization)}/projects`, body),\n get: (project: string, signal?: AbortSignal): Promise<ProjectContract> =>\n this.get<ProjectContract>(`/projects/${enc(project)}`, undefined, signal),\n update: (project: string, body: UpdateProjectRequest): Promise<ProjectContract> =>\n this.mutate<ProjectContract>(\"PATCH\", `/projects/${enc(project)}`, body),\n archive: (project: string): Promise<ProjectContract> =>\n this.mutate<ProjectContract>(\"POST\", `/projects/${enc(project)}/archive`),\n /** Full project export: schemas, entries (draft + published), asset metadata. */\n export: (project: string, signal?: AbortSignal): Promise<ProjectExportResponse> =>\n this.get<ProjectExportResponse>(`/projects/${enc(project)}/export`, undefined, signal),\n views: (project: string, signal?: AbortSignal): Promise<SavedViewContract[]> =>\n this.get<SavedViewContract[]>(`/projects/${enc(project)}/views`, undefined, signal),\n createView: (project: string, body: CreateSavedViewRequest): Promise<SavedViewContract> =>\n this.mutate<SavedViewContract>(\"POST\", `/projects/${enc(project)}/views`, body),\n deleteView: (project: string, view: string): Promise<{ ok: boolean }> =>\n this.mutate(\"DELETE\", `/projects/${enc(project)}/views/${enc(view)}`),\n };\n\n // --- Schema ---------------------------------------------------------------\n readonly schema = {\n collections: (project: string, signal?: AbortSignal): Promise<CollectionContract[]> =>\n this.get<CollectionContract[]>(`/projects/${enc(project)}/collections`, undefined, signal),\n collection: (project: string, key: string, signal?: AbortSignal): Promise<CollectionContract> =>\n this.get<CollectionContract>(`/projects/${enc(project)}/collections/${enc(key)}`, undefined, signal),\n versions: (project: string, key: string, signal?: AbortSignal): Promise<CollectionVersionContract[]> =>\n this.get<CollectionVersionContract[]>(`/projects/${enc(project)}/collections/${enc(key)}/versions`, undefined, signal),\n diff: (project: string, collections: Record<string, unknown>[]): Promise<SchemaDiffResponse> =>\n this.mutate<SchemaDiffResponse>(\"POST\", `/projects/${enc(project)}/schema/diff`, { collections }),\n push: (\n project: string,\n collections: Record<string, unknown>[],\n opts: { allowDestructive?: boolean; changeSummary?: string } = {},\n ): Promise<SchemaPushResponse> =>\n this.mutate<SchemaPushResponse>(\"POST\", `/projects/${enc(project)}/schema/push`, {\n collections,\n allowDestructive: opts.allowDestructive ?? false,\n changeSummary: opts.changeSummary,\n }),\n // Environments as projects\n drift: (project: string, against: string, signal?: AbortSignal): Promise<SchemaDriftResponse> =>\n this.get<SchemaDriftResponse>(`/projects/${enc(project)}/schema/drift`, { against }, signal),\n promote: (\n project: string,\n fromProject: string,\n opts: { allowDestructive?: boolean } = {},\n ): Promise<SchemaPushResponse> =>\n this.mutate<SchemaPushResponse>(\"POST\", `/projects/${enc(project)}/schema/promote`, {\n fromProject,\n allowDestructive: opts.allowDestructive ?? false,\n confirm: true,\n }),\n };\n\n // --- Entries & revisions --------------------------------------------------\n readonly entries = {\n list: (\n project: string,\n opts: ListOptions & { collection?: string; status?: string } = {},\n ): Promise<Page<EntryContract>> =>\n this.page<EntryContract>(\n `/projects/${enc(project)}/entries` + query({ collection: opts.collection, status: opts.status }),\n opts,\n ),\n create: (\n project: string,\n body: { collection: string; slug?: string; data: Record<string, unknown>; changeSetId?: string; changeSummary?: string },\n ): Promise<EntryContract> => this.mutate<EntryContract>(\"POST\", `/projects/${enc(project)}/entries`, body),\n get: (project: string, entry: string, signal?: AbortSignal): Promise<EntryContract> =>\n this.get<EntryContract>(`/projects/${enc(project)}/entries/${enc(entry)}`, undefined, signal),\n update: (\n project: string,\n entry: string,\n body: {\n data?: Record<string, unknown>;\n slug?: string;\n expectedRevisionId?: string;\n changeSetId?: string;\n changeSummary?: string;\n },\n ): Promise<EntryContract> => this.mutate<EntryContract>(\"PATCH\", `/projects/${enc(project)}/entries/${enc(entry)}`, body),\n delete: (project: string, entry: string, changeSetId?: string): Promise<{ changeSetId: string; staged: string }> =>\n this.mutate(\"DELETE\", `/projects/${enc(project)}/entries/${enc(entry)}`, undefined, { changeSetId }),\n unpublish: (project: string, entry: string, changeSetId?: string): Promise<{ changeSetId: string; staged: string }> =>\n this.mutate(\"POST\", `/projects/${enc(project)}/entries/${enc(entry)}/unpublish`, undefined, { changeSetId }),\n restore: (project: string, entry: string): Promise<RestoreRevisionResponse> =>\n this.mutate<RestoreRevisionResponse>(\"POST\", `/projects/${enc(project)}/entries/${enc(entry)}/restore`),\n duplicate: (project: string, entry: string, changeSetId?: string): Promise<EntryContract> =>\n this.mutate<EntryContract>(\"POST\", `/projects/${enc(project)}/entries/${enc(entry)}/duplicate`, {\n changeSetId,\n }),\n bulk: (project: string, body: BulkEntriesRequest): Promise<BulkEntriesResponse> =>\n this.mutate<BulkEntriesResponse>(\"POST\", `/projects/${enc(project)}/entries/bulk`, body),\n import: (project: string, body: ImportEntriesRequest): Promise<ImportEntriesResponse> =>\n this.mutate<ImportEntriesResponse>(\"POST\", `/projects/${enc(project)}/entries/import`, body),\n references: (project: string, entry: string, signal?: AbortSignal): Promise<EntryReferencesResponse> =>\n this.get<EntryReferencesResponse>(`/projects/${enc(project)}/entries/${enc(entry)}/references`, undefined, signal),\n revisions: (project: string, entry: string, signal?: AbortSignal): Promise<RevisionContract[]> =>\n this.get<RevisionContract[]>(`/projects/${enc(project)}/entries/${enc(entry)}/revisions`, undefined, signal),\n revision: (project: string, entry: string, revision: string, signal?: AbortSignal): Promise<RevisionContract> =>\n this.get<RevisionContract>(`/projects/${enc(project)}/entries/${enc(entry)}/revisions/${enc(revision)}`, undefined, signal),\n restoreRevision: (project: string, entry: string, revision: string): Promise<RestoreRevisionResponse> =>\n this.mutate<RestoreRevisionResponse>(\n \"POST\",\n `/projects/${enc(project)}/entries/${enc(entry)}/revisions/${enc(revision)}/restore`,\n ),\n };\n\n // --- Change sets ----------------------------------------------------------\n readonly changeSets = {\n list: (project: string, opts: ListOptions & { status?: string } = {}): Promise<Page<ChangeSetContract>> =>\n this.page<ChangeSetContract>(`/projects/${enc(project)}/change-sets` + query({ status: opts.status }), opts),\n create: (project: string, body: CreateChangeSetRequest): Promise<ChangeSetContract> =>\n this.mutate<ChangeSetContract>(\"POST\", `/projects/${enc(project)}/change-sets`, body),\n get: (project: string, changeSet: string, signal?: AbortSignal): Promise<ChangeSetContract> =>\n this.get<ChangeSetContract>(`/projects/${enc(project)}/change-sets/${enc(changeSet)}`, undefined, signal),\n update: (project: string, changeSet: string, body: UpdateChangeSetRequest): Promise<ChangeSetContract> =>\n this.mutate<ChangeSetContract>(\"PATCH\", `/projects/${enc(project)}/change-sets/${enc(changeSet)}`, body),\n validate: (project: string, changeSet: string): Promise<{ valid: boolean; errors: ValidationIssue[] }> =>\n this.mutate(\"POST\", `/projects/${enc(project)}/change-sets/${enc(changeSet)}/validate`),\n publish: (\n project: string,\n changeSet: string,\n ): Promise<{ changeSet: ChangeSetContract; publishedEntryIds: string[] }> =>\n this.mutate(\"POST\", `/projects/${enc(project)}/change-sets/${enc(changeSet)}/publish`, { confirm: true }),\n close: (project: string, changeSet: string): Promise<ChangeSetContract> =>\n this.mutate<ChangeSetContract>(\"POST\", `/projects/${enc(project)}/change-sets/${enc(changeSet)}/close`),\n // Scheduled publishing\n schedule: (project: string, changeSet: string, publishAt: string): Promise<ChangeSetContract> =>\n this.mutate<ChangeSetContract>(\"POST\", `/projects/${enc(project)}/change-sets/${enc(changeSet)}/schedule`, {\n publishAt,\n }),\n cancelSchedule: (project: string, changeSet: string): Promise<ChangeSetContract> =>\n this.mutate<ChangeSetContract>(\"DELETE\", `/projects/${enc(project)}/change-sets/${enc(changeSet)}/schedule`),\n // Reviews & approvals\n reviews: (project: string, changeSet: string, signal?: AbortSignal): Promise<ChangeSetReviewContract[]> =>\n this.get<ChangeSetReviewContract[]>(\n `/projects/${enc(project)}/change-sets/${enc(changeSet)}/reviews`,\n undefined,\n signal,\n ),\n requestReview: (project: string, changeSet: string, body: RequestReviewRequest): Promise<ChangeSetReviewContract[]> =>\n this.mutate<ChangeSetReviewContract[]>(\"POST\", `/projects/${enc(project)}/change-sets/${enc(changeSet)}/reviews`, body),\n removeReviewer: (project: string, changeSet: string, reviewer: string): Promise<ChangeSetReviewContract[]> =>\n this.mutate<ChangeSetReviewContract[]>(\n \"DELETE\",\n `/projects/${enc(project)}/change-sets/${enc(changeSet)}/reviews/${enc(reviewer)}`,\n ),\n approve: (project: string, changeSet: string, body: ReviewDecisionRequest = {}): Promise<ChangeSetReviewContract[]> =>\n this.mutate<ChangeSetReviewContract[]>(\"POST\", `/projects/${enc(project)}/change-sets/${enc(changeSet)}/approve`, body),\n requestChanges: (project: string, changeSet: string, body: ReviewDecisionRequest = {}): Promise<ChangeSetReviewContract[]> =>\n this.mutate<ChangeSetReviewContract[]>(\n \"POST\",\n `/projects/${enc(project)}/change-sets/${enc(changeSet)}/request-changes`,\n body,\n ),\n // Comments\n comments: (project: string, changeSet: string, signal?: AbortSignal): Promise<ChangeSetCommentContract[]> =>\n this.get<ChangeSetCommentContract[]>(\n `/projects/${enc(project)}/change-sets/${enc(changeSet)}/comments`,\n undefined,\n signal,\n ),\n comment: (project: string, changeSet: string, body: CreateChangeSetCommentRequest): Promise<ChangeSetCommentContract> =>\n this.mutate<ChangeSetCommentContract>(\"POST\", `/projects/${enc(project)}/change-sets/${enc(changeSet)}/comments`, body),\n resolveComment: (project: string, changeSet: string, comment: string, resolved = true): Promise<ChangeSetCommentContract> =>\n this.mutate<ChangeSetCommentContract>(\n \"PATCH\",\n `/projects/${enc(project)}/change-sets/${enc(changeSet)}/comments/${enc(comment)}`,\n { resolved },\n ),\n // Automated checks\n checks: (project: string, changeSet: string, signal?: AbortSignal): Promise<ChangeSetCheckContract[]> =>\n this.get<ChangeSetCheckContract[]>(\n `/projects/${enc(project)}/change-sets/${enc(changeSet)}/checks`,\n undefined,\n signal,\n ),\n runChecks: (project: string, changeSet: string): Promise<RunChecksResponse> =>\n this.mutate<RunChecksResponse>(\"POST\", `/projects/${enc(project)}/change-sets/${enc(changeSet)}/checks/run`),\n };\n\n // --- Previews -------------------------------------------------------------\n readonly previews = {\n create: (project: string, body: CreatePreviewRequest): Promise<PreviewContract> =>\n this.mutate<PreviewContract>(\"POST\", `/projects/${enc(project)}/previews`, body),\n list: (project: string, signal?: AbortSignal): Promise<PreviewContract[]> =>\n this.get<PreviewContract[]>(`/projects/${enc(project)}/previews`, undefined, signal),\n revoke: (project: string, preview: string): Promise<{ ok: boolean }> =>\n this.mutate(\"DELETE\", `/projects/${enc(project)}/previews/${enc(preview)}`),\n };\n\n // --- Assets ---------------------------------------------------------------\n readonly assets = {\n createUpload: (project: string, body: CreateUploadRequest): Promise<CreateUploadResponse> =>\n this.mutate<CreateUploadResponse>(\"POST\", `/projects/${enc(project)}/assets/uploads`, body),\n completeUpload: (project: string, upload: string): Promise<AssetContract> =>\n this.mutate<CompleteUploadResponse>(\"POST\", `/projects/${enc(project)}/assets/uploads/${enc(upload)}/complete`).then(\n (r) => r.asset,\n ),\n list: (project: string, opts: ListOptions = {}): Promise<Page<AssetContract>> =>\n this.page<AssetContract>(`/projects/${enc(project)}/assets`, opts),\n get: (project: string, asset: string, signal?: AbortSignal): Promise<AssetContract> =>\n this.get<AssetContract>(`/projects/${enc(project)}/assets/${enc(asset)}`, undefined, signal),\n usage: (project: string, asset: string, signal?: AbortSignal): Promise<{ asset: AssetContract; usage: { entryIds: string[] } }> =>\n this.get(`/projects/${enc(project)}/assets/${enc(asset)}`, { usage: \"true\" }, signal),\n update: (project: string, asset: string, body: UpdateAssetRequest): Promise<AssetContract> =>\n this.mutate<AssetContract>(\"PATCH\", `/projects/${enc(project)}/assets/${enc(asset)}`, body),\n replace: (project: string, asset: string, body: ReplaceAssetRequest): Promise<AssetContract> =>\n this.mutate<AssetContract>(\"POST\", `/projects/${enc(project)}/assets/${enc(asset)}/replace`, body),\n delete: (project: string, asset: string): Promise<{ ok: boolean }> =>\n this.mutate(\"DELETE\", `/projects/${enc(project)}/assets/${enc(asset)}`),\n /** Full presigned upload flow: create → PUT bytes → complete. */\n upload: (project: string, input: AssetInput, meta: UploadAssetMeta = {}): Promise<AssetContract> =>\n this.uploadAsset(project, input, meta),\n };\n\n // --- API keys -------------------------------------------------------------\n readonly apiKeys = {\n listForOrganization: (organization: string, signal?: AbortSignal): Promise<ApiKeyContract[]> =>\n this.get<ApiKeyContract[]>(`/organizations/${enc(organization)}/api-keys`, undefined, signal),\n createForOrganization: (organization: string, body: CreateApiKeyRequest): Promise<CreateApiKeyResponse> =>\n this.mutate<CreateApiKeyResponse>(\"POST\", `/organizations/${enc(organization)}/api-keys`, body),\n revokeForOrganization: (organization: string, key: string): Promise<{ ok: boolean }> =>\n this.mutate(\"DELETE\", `/organizations/${enc(organization)}/api-keys/${enc(key)}`),\n listForProject: (project: string, signal?: AbortSignal): Promise<ApiKeyContract[]> =>\n this.get<ApiKeyContract[]>(`/projects/${enc(project)}/api-keys`, undefined, signal),\n createForProject: (project: string, body: CreateApiKeyRequest): Promise<CreateApiKeyResponse> =>\n this.mutate<CreateApiKeyResponse>(\"POST\", `/projects/${enc(project)}/api-keys`, body),\n revokeForProject: (project: string, key: string): Promise<{ ok: boolean }> =>\n this.mutate(\"DELETE\", `/projects/${enc(project)}/api-keys/${enc(key)}`),\n };\n\n // --- Webhooks -------------------------------------------------------------\n readonly webhooks = {\n list: (project: string, signal?: AbortSignal): Promise<WebhookEndpointContract[]> =>\n this.get<WebhookEndpointContract[]>(`/projects/${enc(project)}/webhooks`, undefined, signal),\n create: (project: string, body: CreateWebhookRequest): Promise<CreateWebhookResponse> =>\n this.mutate<CreateWebhookResponse>(\"POST\", `/projects/${enc(project)}/webhooks`, body),\n update: (project: string, webhook: string, body: UpdateWebhookRequest): Promise<WebhookEndpointContract> =>\n this.mutate<WebhookEndpointContract>(\"PATCH\", `/projects/${enc(project)}/webhooks/${enc(webhook)}`, body),\n delete: (project: string, webhook: string): Promise<{ ok: boolean }> =>\n this.mutate(\"DELETE\", `/projects/${enc(project)}/webhooks/${enc(webhook)}`),\n deliveries: (project: string, webhook: string, signal?: AbortSignal): Promise<WebhookDeliveryContract[]> =>\n this.get<WebhookDeliveryContract[]>(`/projects/${enc(project)}/webhooks/${enc(webhook)}/deliveries`, undefined, signal),\n retry: (project: string, webhook: string, delivery: string): Promise<{ ok: boolean }> =>\n this.mutate(\"POST\", `/projects/${enc(project)}/webhooks/${enc(webhook)}/deliveries/${enc(delivery)}/retry`),\n };\n\n // --- Activity -------------------------------------------------------------\n activity(\n project: string,\n opts: ListOptions & { actorType?: string; action?: string; targetType?: string; from?: string; to?: string } = {},\n ): Promise<Page<ActivityEventContract>> {\n return this.page<ActivityEventContract>(\n `/projects/${enc(project)}/activity` +\n query({\n actorType: opts.actorType,\n action: opts.action,\n targetType: opts.targetType,\n from: opts.from,\n to: opts.to,\n }),\n opts,\n );\n }\n\n // --- Billing --------------------------------------------------------------\n readonly billing = {\n status: (organization: string, signal?: AbortSignal): Promise<BillingResponse> =>\n this.get<BillingResponse>(`/organizations/${enc(organization)}/billing`, undefined, signal),\n checkout: (organization: string, body: CheckoutRequest): Promise<CheckoutResponse> =>\n this.mutate<CheckoutResponse>(\"POST\", `/organizations/${enc(organization)}/billing/checkout`, body),\n portal: (organization: string): Promise<PortalResponse> =>\n this.mutate<PortalResponse>(\"POST\", `/organizations/${enc(organization)}/billing/portal`),\n };\n\n // --- Upload helper --------------------------------------------------------\n private async uploadAsset(project: string, input: AssetInput, meta: UploadAssetMeta): Promise<AssetContract> {\n const { bytes, filename } = await readInput(input, meta.filename);\n const contentType = meta.contentType ?? guessContentType(filename);\n const checksum = createHash(\"md5\").update(bytes).digest(\"hex\");\n\n const upload = await this.assets.createUpload(project, {\n filename,\n contentType,\n byteSize: meta.byteSize ?? bytes.byteLength,\n checksum,\n });\n\n // The presigned URL is absolute (storage host) and must bypass the API base.\n const put = await this.fetchImpl(upload.url, {\n method: upload.method,\n headers: upload.headers,\n body: bytes as unknown as BodyInit,\n });\n if (!put.ok) {\n throw new Error(`Asset upload PUT failed with status ${put.status}.`);\n }\n\n return this.assets.completeUpload(project, upload.uploadId);\n }\n}\n\ninterface ValidationIssue {\n resourceType: string;\n resourceId: string;\n path: string;\n message: string;\n code?: string;\n}\n\nasync function readInput(input: AssetInput, filenameOverride?: string): Promise<{ bytes: Uint8Array; filename: string }> {\n if (typeof input === \"string\") {\n const bytes = await readFile(input);\n return { bytes: new Uint8Array(bytes), filename: filenameOverride ?? basename(input) };\n }\n const bytes = input instanceof Uint8Array ? input : new Uint8Array(input);\n return { bytes, filename: filenameOverride ?? \"upload.bin\" };\n}\n\nconst CONTENT_TYPES: Record<string, string> = {\n png: \"image/png\",\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n gif: \"image/gif\",\n webp: \"image/webp\",\n avif: \"image/avif\",\n pdf: \"application/pdf\",\n json: \"application/json\",\n txt: \"text/plain\",\n md: \"text/markdown\",\n csv: \"text/csv\",\n mp4: \"video/mp4\",\n webm: \"video/webm\",\n mp3: \"audio/mpeg\",\n wav: \"audio/wav\",\n};\n\nfunction guessContentType(filename: string): string {\n const ext = filename.split(\".\").pop()?.toLowerCase() ?? \"\";\n return CONTENT_TYPES[ext] ?? \"application/octet-stream\";\n}\n\nfunction enc(segment: string): string {\n return encodeURIComponent(segment);\n}\n\nfunction query(params: Record<string, string | undefined>): string {\n const entries = Object.entries(params).filter(([, v]) => v !== undefined && v !== \"\");\n if (entries.length === 0) return \"\";\n return \"?\" + entries.map(([k, v]) => `${k}=${encodeURIComponent(v as string)}`).join(\"&\");\n}\n\n/** Create a management client. */\nexport function createManagementClient(options: ManagementClientOptions): ManagementClient {\n return new ManagementClient(options);\n}\n\nexport { generateTypes, generateTypesModule } from \"./codegen.js\";\nexport { MynaApiError, isMynaApiError } from \"./errors.js\";\nexport type { FetchLike, RetryOptions } from \"./http.js\";\n","import type {\n CollectionSchema,\n FieldDef,\n ListItem,\n ObjectField,\n} from \"../../schema/src/types.js\";\n\n/**\n * Deterministic TypeScript type generation from canonical collection schemas\n * (SPEC 12). Pure and stable: the same input always yields byte-identical\n * output, and no user-written files are touched. Consumed by `myna types\n * generate`.\n */\nexport function generateTypes(collections: CollectionSchema[]): string {\n const sorted = [...collections].sort((a, b) => a.name.localeCompare(b.name));\n const blocks: string[] = [];\n\n for (const collection of sorted) {\n blocks.push(renderInterface(collection));\n }\n\n const registry = sorted\n .map((c) => ` ${JSON.stringify(c.name)}: ${pascal(c.name)};`)\n .join(\"\\n\");\n\n const header = [\n \"// Generated by `myna types generate`. Do not edit by hand.\",\n \"// This file is safe to commit and regenerate.\",\n \"\",\n ].join(\"\\n\");\n\n return `${header}${blocks.join(\"\\n\\n\")}\\n\\nexport interface MynaCollections {\\n${registry}\\n}\\n`;\n}\n\nfunction renderInterface(collection: CollectionSchema): string {\n const name = pascal(collection.name);\n const lines = collection.fields.map((f) => renderField(f, 1));\n const label = collection.label ? ` ${collection.label}` : \"\";\n return `/**${label} (${collection.kind}) */\\nexport interface ${name} {\\n${lines.join(\"\\n\")}\\n}`;\n}\n\nfunction renderField(field: FieldDef, depth: number): string {\n const indent = \" \".repeat(depth);\n const optional = field.required ? \"\" : \"?\";\n const doc = field.description ? `${indent}/** ${escapeComment(field.description)} */\\n` : \"\";\n const base = fieldType(field, depth);\n // Localized fields store one value per project locale.\n const type = field.localized ? `{ [locale: string]: ${base} }` : base;\n return `${doc}${indent}${safeKey(field.key)}${optional}: ${type};`;\n}\n\nfunction fieldType(field: FieldDef, depth: number): string {\n switch (field.type) {\n case \"text\":\n return field.enum && field.enum.length > 0 ? field.enum.map((v) => JSON.stringify(v)).join(\" | \") : \"string\";\n case \"slug\":\n return \"string\";\n case \"markdown\":\n return \"string\";\n case \"number\":\n return \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"date\":\n case \"datetime\":\n return \"string\";\n case \"json\":\n return \"JsonValue\";\n case \"asset\":\n return field.multiple ? \"string[]\" : \"string\";\n case \"reference\":\n return field.multiple ? \"string[]\" : \"string\";\n case \"object\":\n return renderObject(field, depth);\n case \"list\":\n return `${listItemType(field.item, depth)}[]`;\n case \"richText\":\n return \"RichTextDoc\";\n case \"blocks\": {\n // Discriminated union over the allowed block components.\n const inner = \" \".repeat(depth + 1);\n const options = field.blocks.map((b) => {\n const lines = b.fields.map((f) => renderField(f, depth + 2));\n return `{ type: ${JSON.stringify(b.key)}; fields: {\\n${lines.join(\"\\n\")}\\n${inner}} }`;\n });\n return `Array<\\n${inner}${options.join(`\\n${inner}| `)}\\n${\" \".repeat(depth)}>`;\n }\n default:\n return \"unknown\";\n }\n}\n\nfunction renderObject(field: ObjectField, depth: number): string {\n const lines = field.fields.map((f) => renderField(f, depth + 1));\n const closingIndent = \" \".repeat(depth);\n return `{\\n${lines.join(\"\\n\")}\\n${closingIndent}}`;\n}\n\nfunction listItemType(item: ListItem, depth: number): string {\n switch (item.kind) {\n case \"text\":\n return item.enum && item.enum.length > 0 ? `(${item.enum.map((v) => JSON.stringify(v)).join(\" | \")})` : \"string\";\n case \"number\":\n return \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"date\":\n case \"datetime\":\n return \"string\";\n case \"markdown\":\n return \"string\";\n case \"json\":\n return \"JsonValue\";\n case \"reference\":\n return \"string\";\n case \"asset\":\n return \"string\";\n case \"object\": {\n const lines = item.fields.map((f) => renderField(f, depth + 1));\n const closingIndent = \" \".repeat(depth);\n return `{\\n${lines.join(\"\\n\")}\\n${closingIndent}}`;\n }\n default:\n return \"unknown\";\n }\n}\n\nconst JSON_VALUE = [\n \"export type JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue };\",\n \"\",\n \"/** Portable rich-text document tree (never rendered HTML). */\",\n \"export interface RichTextDoc { type: \\\"doc\\\"; content: Array<{ type: string; [key: string]: unknown }>; }\",\n].join(\"\\n\");\n\n/** Generate types plus the shared `JsonValue` helper as a standalone module. */\nexport function generateTypesModule(collections: CollectionSchema[]): string {\n return `${JSON_VALUE}\\n\\n${generateTypes(collections)}`;\n}\n\nfunction pascal(key: string): string {\n return key\n .split(/[-_\\s]+/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\"\");\n}\n\nfunction safeKey(key: string): string {\n return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key) ? key : JSON.stringify(key);\n}\n\nfunction escapeComment(text: string): string {\n return text.replace(/\\*\\//g, \"*\\\\/\");\n}\n","import { execFileSync } from \"node:child_process\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync, chmodSync, rmSync } from \"node:fs\";\nimport { homedir, platform } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\n\n/**\n * Configuration resolution and credential storage (SPEC 11).\n *\n * Resolution order for every value: explicit flag > environment variable >\n * linked project (`.myna/project.json`) > user default (`config.json`).\n * Credentials are never written to the linked project file; they live in the OS\n * keychain when possible, otherwise a `0600` config file.\n */\n\nexport const DEFAULT_API_URL = \"https://api.myna.sh\";\nconst KEYCHAIN_SERVICE = \"sh.myna.cli\";\n\nexport interface GlobalFlags {\n apiUrl?: string;\n project?: string;\n organization?: string;\n token?: string;\n json?: boolean;\n interactive?: boolean;\n}\n\nexport interface LinkedProject {\n project: string;\n organization?: string;\n apiUrl?: string;\n}\n\nexport interface UserConfig {\n apiUrl?: string;\n defaultOrganization?: string;\n defaultProject?: string;\n}\n\nexport interface ResolvedContext {\n apiUrl: string;\n token: string | undefined;\n project: string | undefined;\n organization: string | undefined;\n json: boolean;\n interactive: boolean;\n linked: LinkedProject | undefined;\n linkedRoot: string | undefined;\n}\n\nfunction configDir(): string {\n const base = process.env.XDG_CONFIG_HOME ?? join(homedir(), \".config\");\n return join(base, \"myna\");\n}\n\nfunction configFile(): string {\n return join(configDir(), \"config.json\");\n}\n\nfunction credentialsFile(): string {\n return join(configDir(), \"credentials.json\");\n}\n\nexport function readUserConfig(): UserConfig {\n try {\n return JSON.parse(readFileSync(configFile(), \"utf8\")) as UserConfig;\n } catch {\n return {};\n }\n}\n\nexport function writeUserConfig(patch: Partial<UserConfig>): UserConfig {\n const current = readUserConfig();\n const next = { ...current, ...patch };\n ensureDir(configDir());\n writeFileSync(configFile(), JSON.stringify(next, null, 2) + \"\\n\");\n return next;\n}\n\nfunction ensureDir(dir: string): void {\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true, mode: 0o700 });\n}\n\n// --- Linked project ---------------------------------------------------------\n\nexport function findLinkedProject(startDir = process.cwd()): { linked: LinkedProject; root: string } | undefined {\n let dir = resolve(startDir);\n for (;;) {\n const file = join(dir, \".myna\", \"project.json\");\n if (existsSync(file)) {\n try {\n const linked = JSON.parse(readFileSync(file, \"utf8\")) as LinkedProject;\n return { linked, root: dir };\n } catch {\n return undefined;\n }\n }\n const parent = dirname(dir);\n if (parent === dir) return undefined;\n dir = parent;\n }\n}\n\nexport function writeLinkedProject(root: string, linked: LinkedProject): void {\n const dir = join(root, \".myna\");\n ensureDir(dir);\n writeFileSync(join(dir, \"project.json\"), JSON.stringify(linked, null, 2) + \"\\n\");\n}\n\nexport function removeLinkedProject(root: string): boolean {\n const file = join(root, \".myna\", \"project.json\");\n if (existsSync(file)) {\n rmSync(file);\n return true;\n }\n return false;\n}\n\n// --- Credential storage -----------------------------------------------------\n\nfunction isMac(): boolean {\n return platform() === \"darwin\";\n}\n\nfunction keychainAccount(apiUrl: string): string {\n return apiUrl.replace(/\\/+$/, \"\");\n}\n\nexport function storeToken(apiUrl: string, token: string): \"keychain\" | \"file\" {\n const account = keychainAccount(apiUrl);\n if (isMac()) {\n try {\n execFileSync(\n \"security\",\n [\"add-generic-password\", \"-U\", \"-s\", KEYCHAIN_SERVICE, \"-a\", account, \"-w\", token],\n { stdio: \"ignore\" },\n );\n return \"keychain\";\n } catch {\n // Fall through to file storage.\n }\n }\n const file = credentialsFile();\n const store = readCredentialFile();\n store[account] = token;\n ensureDir(configDir());\n writeFileSync(file, JSON.stringify(store, null, 2) + \"\\n\");\n chmodSync(file, 0o600);\n return \"file\";\n}\n\nexport function loadToken(apiUrl: string): string | undefined {\n const account = keychainAccount(apiUrl);\n if (isMac()) {\n try {\n const out = execFileSync(\n \"security\",\n [\"find-generic-password\", \"-s\", KEYCHAIN_SERVICE, \"-a\", account, \"-w\"],\n { stdio: [\"ignore\", \"pipe\", \"ignore\"] },\n );\n const token = out.toString(\"utf8\").trim();\n if (token) return token;\n } catch {\n // Not in keychain; try file.\n }\n }\n return readCredentialFile()[account];\n}\n\nexport function clearToken(apiUrl: string): void {\n const account = keychainAccount(apiUrl);\n if (isMac()) {\n try {\n execFileSync(\"security\", [\"delete-generic-password\", \"-s\", KEYCHAIN_SERVICE, \"-a\", account], {\n stdio: \"ignore\",\n });\n } catch {\n // Ignore.\n }\n }\n const store = readCredentialFile();\n if (account in store) {\n delete store[account];\n writeFileSync(credentialsFile(), JSON.stringify(store, null, 2) + \"\\n\");\n chmodSync(credentialsFile(), 0o600);\n }\n}\n\nfunction readCredentialFile(): Record<string, string> {\n try {\n return JSON.parse(readFileSync(credentialsFile(), \"utf8\")) as Record<string, string>;\n } catch {\n return {};\n }\n}\n\n// --- Resolution -------------------------------------------------------------\n\nexport function resolveContext(flags: GlobalFlags): ResolvedContext {\n const link = findLinkedProject();\n const user = readUserConfig();\n\n const apiUrl =\n flags.apiUrl ??\n process.env.MYNA_API_URL ??\n link?.linked.apiUrl ??\n user.apiUrl ??\n DEFAULT_API_URL;\n\n const token = flags.token ?? process.env.MYNA_TOKEN ?? loadToken(apiUrl);\n\n const project =\n flags.project ??\n process.env.MYNA_PROJECT ??\n link?.linked.project ??\n user.defaultProject;\n\n const organization =\n flags.organization ??\n process.env.MYNA_ORGANIZATION ??\n link?.linked.organization ??\n user.defaultOrganization;\n\n return {\n apiUrl: apiUrl.replace(/\\/+$/, \"\"),\n token,\n project,\n organization,\n json: Boolean(flags.json),\n interactive: flags.interactive !== false && process.stdout.isTTY === true,\n linked: link?.linked,\n linkedRoot: link?.root,\n };\n}\n","import { isMynaApiError } from \"@myna-sh/sdk/management\";\n\n/** Structured output, tables, and exit-code discipline (SPEC 11). */\n\nexport const CLI_JSON_VERSION = 1;\n\n/** Usage error → exit code 2. */\nexport class UsageError extends Error {}\n\n/** Operational error → exit code 1. */\nexport class CliError extends Error {}\n\nexport interface OutputMode {\n json: boolean;\n}\n\nlet mode: OutputMode = { json: false };\n\nexport function setOutputMode(next: OutputMode): void {\n mode = next;\n}\n\nexport function isJson(): boolean {\n return mode.json;\n}\n\n/** Diagnostics go to stderr and are suppressed in JSON mode. */\nexport function diag(message: string): void {\n if (!mode.json) process.stderr.write(message + \"\\n\");\n}\n\n/** Emit the single result value. JSON mode prints one versioned document. */\nexport function emit(value: unknown, human?: () => void): void {\n if (mode.json) {\n process.stdout.write(JSON.stringify({ version: CLI_JSON_VERSION, data: value }) + \"\\n\");\n return;\n }\n if (human) {\n human();\n } else {\n process.stdout.write(prettyValue(value) + \"\\n\");\n }\n}\n\n/** Render an error and return the process exit code. */\nexport function reportError(error: unknown): number {\n if (isMynaApiError(error)) {\n const problem = {\n code: error.code,\n status: error.status,\n title: error.title,\n detail: error.detail,\n requestId: error.requestId,\n fields: error.fields,\n };\n if (mode.json) {\n process.stdout.write(JSON.stringify({ version: CLI_JSON_VERSION, error: problem }) + \"\\n\");\n } else {\n process.stderr.write(`error: ${error.code} — ${error.detail ?? error.title}\\n`);\n for (const f of error.fields ?? []) {\n process.stderr.write(` · ${f.path}: ${f.message}\\n`);\n }\n if (error.requestId) process.stderr.write(` requestId: ${error.requestId}\\n`);\n }\n return 1;\n }\n\n const usage = error instanceof UsageError;\n const message = error instanceof Error ? error.message : String(error);\n if (mode.json) {\n process.stdout.write(\n JSON.stringify({ version: CLI_JSON_VERSION, error: { code: usage ? \"USAGE\" : \"ERROR\", detail: message } }) + \"\\n\",\n );\n } else {\n process.stderr.write(`error: ${message}\\n`);\n }\n return usage ? 2 : 1;\n}\n\n// --- Human tables -----------------------------------------------------------\n\nexport interface Column<T> {\n header: string;\n value: (row: T) => string;\n}\n\nexport function table<T>(rows: T[], columns: Column<T>[]): void {\n if (rows.length === 0) {\n process.stdout.write(\"(none)\\n\");\n return;\n }\n const headers = columns.map((c) => c.header);\n const cells = rows.map((r) => columns.map((c) => c.value(r) ?? \"\"));\n const widths = headers.map((h, i) => Math.max(h.length, ...cells.map((row) => stripLen(row[i] ?? \"\"))));\n const line = (values: string[]): string =>\n values.map((v, i) => pad(v, widths[i] ?? v.length)).join(\" \").replace(/\\s+$/, \"\");\n process.stdout.write(line(headers) + \"\\n\");\n process.stdout.write(widths.map((w) => \"─\".repeat(w)).join(\" \") + \"\\n\");\n for (const row of cells) process.stdout.write(line(row) + \"\\n\");\n}\n\nexport function keyValues(pairs: Array<[string, string]>): void {\n const width = Math.max(...pairs.map(([k]) => k.length));\n for (const [k, v] of pairs) {\n process.stdout.write(`${pad(k + \":\", width + 1)} ${v}\\n`);\n }\n}\n\nfunction pad(value: string, width: number): string {\n const len = stripLen(value);\n return len >= width ? value : value + \" \".repeat(width - len);\n}\n\nfunction stripLen(value: string): number {\n return value.length;\n}\n\nfunction prettyValue(value: unknown): string {\n if (typeof value === \"string\") return value;\n return JSON.stringify(value, null, 2);\n}\n","import { createManagementClient, type ManagementClient } from \"@myna-sh/sdk/management\";\nimport { resolveContext, type GlobalFlags, type ResolvedContext } from \"./config.js\";\nimport { CliError, UsageError } from \"./output.js\";\n\n/** Per-command context: resolved config plus lazily-built API clients. */\nexport interface Ctx extends ResolvedContext {\n management(): ManagementClient;\n requireProject(): string;\n requireOrganization(): string;\n}\n\nexport function buildContext(flags: GlobalFlags): Ctx {\n const resolved = resolveContext(flags);\n let mgmt: ManagementClient | undefined;\n\n return {\n ...resolved,\n management(): ManagementClient {\n if (!resolved.token) {\n throw new CliError(\"Not authenticated. Run `myna login` or pass --token / set MYNA_TOKEN.\");\n }\n mgmt ??= createManagementClient({ token: resolved.token, apiUrl: resolved.apiUrl });\n return mgmt;\n },\n requireProject(): string {\n if (!resolved.project) {\n throw new UsageError(\"No project selected. Pass --project, set MYNA_PROJECT, or run `myna link`.\");\n }\n return resolved.project;\n },\n requireOrganization(): string {\n if (!resolved.organization) {\n throw new UsageError(\"No organization selected. Pass --organization or set a default with `myna organizations use`.\");\n }\n return resolved.organization;\n },\n };\n}\n","import type { Command } from \"commander\";\nimport { buildContext, type Ctx } from \"./client.js\";\nimport type { GlobalFlags } from \"./config.js\";\nimport { reportError, setOutputMode } from \"./output.js\";\n\n/**\n * Wrap a command action: build the resolved context, set the output mode from\n * `--json`, run the handler, and translate thrown errors into exit codes.\n */\nexport function handle(\n fn: (ctx: Ctx, args: unknown[], opts: Record<string, unknown>) => Promise<void>,\n): (...cbArgs: unknown[]) => Promise<void> {\n return async (...cbArgs: unknown[]): Promise<void> => {\n const command = cbArgs[cbArgs.length - 1] as Command;\n const ctx = buildContext(command.optsWithGlobals() as GlobalFlags);\n setOutputMode({ json: ctx.json });\n try {\n await fn(ctx, command.processedArgs as unknown[], command.opts());\n } catch (error) {\n process.exitCode = reportError(error);\n }\n };\n}\n","import { execFile } from \"node:child_process\";\nimport { readFileSync } from \"node:fs\";\nimport { platform } from \"node:os\";\nimport type { ManagementClient } from \"@myna-sh/sdk/management\";\nimport { CliError, UsageError } from \"./output.js\";\n\n/** Parse `--data <json-or-@file>` into an object. */\nexport function parseData(input: string | undefined): Record<string, unknown> {\n if (!input) return {};\n const raw = input.startsWith(\"@\") ? readFileSync(input.slice(1), \"utf8\") : input;\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (error) {\n throw new UsageError(`Invalid JSON for --data: ${error instanceof Error ? error.message : String(error)}`);\n }\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n throw new UsageError(\"--data must be a JSON object.\");\n }\n return parsed as Record<string, unknown>;\n}\n\n/** Apply `--set path=value` assignments (dot paths, JSON-or-string values). */\nexport function applySets(target: Record<string, unknown>, sets: string[] | undefined): Record<string, unknown> {\n if (!sets) return target;\n for (const assignment of sets) {\n const eq = assignment.indexOf(\"=\");\n if (eq === -1) throw new UsageError(`Invalid --set \"${assignment}\". Expected path=value.`);\n const path = assignment.slice(0, eq);\n const rawValue = assignment.slice(eq + 1);\n let value: unknown;\n try {\n value = JSON.parse(rawValue);\n } catch {\n value = rawValue;\n }\n setPath(target, path.split(\".\"), value);\n }\n return target;\n}\n\nfunction setPath(obj: Record<string, unknown>, parts: string[], value: unknown): void {\n let cursor: Record<string, unknown> = obj;\n for (let i = 0; i < parts.length - 1; i++) {\n const key = parts[i]!;\n if (typeof cursor[key] !== \"object\" || cursor[key] === null) cursor[key] = {};\n cursor = cursor[key] as Record<string, unknown>;\n }\n cursor[parts[parts.length - 1]!] = value;\n}\n\n/** Open a URL in the default browser (best effort; never throws). */\nexport function openBrowser(url: string): void {\n const cmd = platform() === \"darwin\" ? \"open\" : platform() === \"win32\" ? \"cmd\" : \"xdg-open\";\n const args = platform() === \"win32\" ? [\"/c\", \"start\", \"\", url] : [url];\n execFile(cmd, args, () => undefined);\n}\n\nexport interface EntryRef {\n collection?: string;\n slugOrId: string;\n}\n\n/** Parse `<collection>/<slug-or-id>` or a bare entry id. */\nexport function parseEntryRef(ref: string): EntryRef {\n if (ref.startsWith(\"ent_\") && !ref.includes(\"/\")) return { slugOrId: ref };\n const slash = ref.indexOf(\"/\");\n if (slash === -1) return { slugOrId: ref };\n return { collection: ref.slice(0, slash), slugOrId: ref.slice(slash + 1) };\n}\n\n/** Resolve an entry ref to a concrete entry id, listing by slug when needed. */\nexport async function resolveEntryId(\n mgmt: ManagementClient,\n project: string,\n ref: string,\n): Promise<string> {\n const parsed = parseEntryRef(ref);\n if (parsed.slugOrId.startsWith(\"ent_\")) return parsed.slugOrId;\n if (!parsed.collection) {\n throw new UsageError(`Provide the entry as <collection>/<slug> or an ent_ id (got \"${ref}\").`);\n }\n let cursor: string | undefined;\n for (let guard = 0; guard < 50; guard++) {\n const page = await mgmt.entries.list(project, { collection: parsed.collection, limit: 100, cursor });\n const match = page.data.find((e) => e.slug === parsed.slugOrId || e.id === parsed.slugOrId);\n if (match) return match.id;\n if (!page.nextCursor) break;\n cursor = page.nextCursor;\n }\n throw new CliError(`Entry not found: ${ref}`);\n}\n","import type { Command } from \"commander\";\nimport { isMynaApiError } from \"@myna-sh/sdk/management\";\nimport { clearToken, loadToken, storeToken } from \"../config.js\";\nimport { CliError, diag, emit, keyValues } from \"../output.js\";\nimport { handle } from \"../runtime.js\";\nimport { openBrowser } from \"../util.js\";\n\ninterface DeviceStart {\n deviceCode: string;\n userCode: string;\n verificationUri: string;\n expiresIn: number;\n interval: number;\n}\n\ninterface DeviceToken {\n status: \"pending\" | \"approved\" | \"denied\" | \"expired\";\n token?: string;\n}\n\ninterface AuthIdentity {\n credential: \"user\" | \"api_key\" | \"preview\";\n user?: { username?: string | null };\n}\n\nasync function apiPost<T>(apiUrl: string, path: string, body: unknown): Promise<T> {\n const res = await fetch(`${apiUrl}/v1${path}`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", accept: \"application/json\" },\n body: JSON.stringify(body),\n });\n const json = (await res.json().catch(() => ({}))) as { data?: T; detail?: string };\n if (!res.ok) throw new CliError(json.detail ?? `Request failed (${res.status}).`);\n return json.data as T;\n}\n\nconst sleep = (ms: number): Promise<void> => new Promise((r) => setTimeout(r, ms));\n\nexport function registerAuth(program: Command): void {\n program\n .command(\"login\")\n .description(\"Authenticate via the browser device-authorization flow\")\n .action(\n handle(async (ctx) => {\n const start = await apiPost<DeviceStart>(ctx.apiUrl, \"/auth/device\", {});\n diag(`\\n To authenticate, open:\\n ${start.verificationUri}\\n and enter the code: ${start.userCode}\\n`);\n if (ctx.interactive) openBrowser(start.verificationUri);\n\n const deadline = Date.now() + start.expiresIn * 1000;\n let token: string | undefined;\n while (Date.now() < deadline) {\n await sleep(Math.max(1, start.interval) * 1000);\n const poll = await apiPost<DeviceToken>(ctx.apiUrl, `/auth/device/${start.deviceCode}/token`, {\n deviceCode: start.deviceCode,\n });\n if (poll.status === \"approved\" && poll.token) {\n token = poll.token;\n break;\n }\n if (poll.status === \"denied\" || poll.status === \"expired\") {\n throw new CliError(`Authorization ${poll.status}.`);\n }\n }\n if (!token) throw new CliError(\"Device authorization timed out.\");\n\n const location = storeToken(ctx.apiUrl, token);\n diag(` Stored credential (${location}).`);\n emit(\n { ok: true, apiUrl: ctx.apiUrl, storage: location },\n () => process.stdout.write(`Logged in to ${ctx.apiUrl}\\n`),\n );\n }),\n );\n\n program\n .command(\"logout\")\n .description(\"Remove the stored credential for the current API URL\")\n .action(\n handle(async (ctx) => {\n clearToken(ctx.apiUrl);\n emit({ ok: true }, () => process.stdout.write(`Logged out of ${ctx.apiUrl}\\n`));\n }),\n );\n\n program\n .command(\"whoami\")\n .description(\"Show the authenticated identity\")\n .action(\n handle(async (ctx) => {\n const token = ctx.token ?? loadToken(ctx.apiUrl);\n if (!token) throw new CliError(\"Not authenticated. Run `myna login`.\");\n\n const identityResponse = await fetch(`${ctx.apiUrl}/v1/auth/whoami`, {\n headers: { authorization: `Bearer ${token}`, accept: \"application/json\" },\n });\n const identityBody = (await identityResponse.json().catch(() => ({}))) as {\n data?: AuthIdentity;\n detail?: string;\n };\n if (!identityResponse.ok || !identityBody.data) {\n throw new CliError(identityBody.detail ?? \"Stored credential is invalid. Run `myna login` again.\");\n }\n const identity = identityBody.data;\n\n let organization: { name: string; role: string; slug: string } | undefined;\n if (ctx.organization) {\n organization = await ctx\n .management()\n .organizations.get(ctx.organization)\n .then((o) => ({ name: o.name, role: o.role, slug: o.slug }))\n .catch((e: unknown) => {\n if (isMynaApiError(e)) return undefined;\n throw e;\n });\n }\n\n emit({ apiUrl: ctx.apiUrl, authenticated: true, identity, organization: organization ?? null }, () => {\n const pairs: Array<[string, string]> = [[\"API\", ctx.apiUrl], [\"Authenticated\", \"yes\"]];\n if (identity.credential === \"user\") {\n pairs.push([\"User\", identity.user?.username ?? \"(unknown)\"]);\n } else {\n pairs.push([\"Credential\", identity.credential === \"api_key\" ? \"API key\" : \"Preview token\"]);\n }\n if (organization) pairs.push([\"Organization\", `${organization.name} (${organization.role})`]);\n keyValues(pairs);\n });\n }),\n );\n}\n","import { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { Command } from \"commander\";\nimport {\n findLinkedProject,\n loadToken,\n removeLinkedProject,\n writeLinkedProject,\n DEFAULT_API_URL,\n} from \"../config.js\";\nimport { CliError, UsageError, diag, emit, keyValues } from \"../output.js\";\nimport { handle } from \"../runtime.js\";\nimport { openBrowser } from \"../util.js\";\n\nconst EXAMPLE_SCHEMA = `import { collection, field } from \"@myna-sh/sdk/schema\";\n\n/**\n * Example collection. Edit freely, then run:\n * myna schema diff\n * myna schema push\n */\nexport const posts = collection({\n name: \"posts\",\n label: \"Blog posts\",\n visibility: \"public\",\n titleField: \"title\",\n path: \"/blog/{slug}\",\n fields: {\n title: field.text({ required: true, maxLength: 120 }),\n slug: field.slug({ from: \"title\", required: true }),\n description: field.text({ multiline: true }),\n body: field.markdown({ required: true }),\n cover: field.asset({ allowed: [\"image/*\"] }),\n publishedAt: field.datetime(),\n },\n});\n`;\n\nfunction appUrlFor(apiUrl: string): string {\n try {\n const url = new URL(apiUrl);\n if (url.hostname.startsWith(\"api.\")) {\n url.hostname = \"app.\" + url.hostname.slice(4);\n return url.origin;\n }\n return apiUrl;\n } catch {\n return apiUrl;\n }\n}\n\nexport function registerWorkspace(program: Command): void {\n program\n .command(\"init\")\n .description(\"Scaffold a local `myna/` schema directory (and link if a project is set)\")\n .option(\"--schema-dir <dir>\", \"schema directory\", \"myna\")\n .action(\n handle(async (ctx, _args, opts) => {\n const dir = (opts.schemaDir as string) ?? \"myna\";\n mkdirSync(dir, { recursive: true });\n const file = join(dir, \"posts.ts\");\n const created: string[] = [];\n if (!existsSync(file)) {\n writeFileSync(file, EXAMPLE_SCHEMA);\n created.push(file);\n }\n let linked = false;\n if (ctx.project) {\n writeLinkedProject(process.cwd(), {\n project: ctx.project,\n organization: ctx.organization,\n ...(ctx.apiUrl !== DEFAULT_API_URL ? { apiUrl: ctx.apiUrl } : {}),\n });\n created.push(\".myna/project.json\");\n linked = true;\n }\n emit({ schemaDir: dir, created, linked }, () => {\n diag(`Initialized ${dir}/`);\n for (const c of created) process.stdout.write(` created ${c}\\n`);\n if (!linked) process.stdout.write(` run \\`myna link --project <ref>\\` to link a project\\n`);\n });\n }),\n );\n\n program\n .command(\"link\")\n .description(\"Link the current directory to a project (writes .myna/project.json, no secrets)\")\n .argument(\"[project]\", \"project id or slug\")\n .action(\n handle(async (ctx, args) => {\n const project = (args[0] as string | undefined) ?? ctx.project;\n if (!project) throw new UsageError(\"Provide a project: `myna link <project>` or --project.\");\n // Validate the project exists and capture its organization.\n const resolved = await ctx.management().projects.get(project);\n writeLinkedProject(process.cwd(), {\n project,\n organization: ctx.organization ?? resolved.organizationId,\n ...(ctx.apiUrl !== DEFAULT_API_URL ? { apiUrl: ctx.apiUrl } : {}),\n });\n emit({ linked: true, project: resolved.slug, organizationId: resolved.organizationId }, () =>\n process.stdout.write(`Linked to ${resolved.name} (${resolved.slug})\\n`),\n );\n }),\n );\n\n program\n .command(\"unlink\")\n .description(\"Remove the project link from the current directory tree\")\n .action(\n handle(async () => {\n const found = findLinkedProject();\n if (!found) throw new CliError(\"No linked project found.\");\n removeLinkedProject(found.root);\n emit({ unlinked: true }, () => process.stdout.write(`Unlinked ${found.linked.project}\\n`));\n }),\n );\n\n program\n .command(\"status\")\n .description(\"Show the resolved configuration and project link\")\n .action(\n handle(async (ctx) => {\n const hasToken = Boolean(ctx.token ?? loadToken(ctx.apiUrl));\n emit(\n {\n apiUrl: ctx.apiUrl,\n authenticated: hasToken,\n project: ctx.project ?? null,\n organization: ctx.organization ?? null,\n linkedRoot: ctx.linkedRoot ?? null,\n },\n () =>\n keyValues([\n [\"API URL\", ctx.apiUrl],\n [\"Authenticated\", hasToken ? \"yes\" : \"no\"],\n [\"Project\", ctx.project ?? \"(none)\"],\n [\"Organization\", ctx.organization ?? \"(none)\"],\n [\"Linked at\", ctx.linkedRoot ?? \"(none)\"],\n ]),\n );\n }),\n );\n\n program\n .command(\"open\")\n .description(\"Open the current project in the dashboard\")\n .action(\n handle(async (ctx) => {\n const app = appUrlFor(ctx.apiUrl);\n const path = ctx.organization && ctx.project ? `/${ctx.organization}/${ctx.project}` : \"\";\n const url = `${app}${path}`;\n if (ctx.interactive) openBrowser(url);\n emit({ url }, () => process.stdout.write(`${url}\\n`));\n }),\n );\n}\n","import { mkdirSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { Command } from \"commander\";\nimport { isMynaApiError, generateTypesModule } from \"@myna-sh/sdk/management\";\nimport type { CollectionSchema } from \"@myna-sh/schema\";\nimport { CliError, UsageError, diag, emit, table } from \"../output.js\";\nimport { handle } from \"../runtime.js\";\nimport { canonicalJson, loadLocalSchemas, schemaDirFor } from \"../schema-loader.js\";\nimport { schemaToDsl } from \"../dsl-emit.js\";\nimport type { Ctx } from \"../client.js\";\n\n/** Fetch deployed canonical schemas (latest version per collection). */\nasync function deployedSchemas(ctx: Ctx, project: string): Promise<CollectionSchema[]> {\n const mgmt = ctx.management();\n const collections = await mgmt.schema.collections(project);\n const out: CollectionSchema[] = [];\n for (const c of collections) {\n const versions = await mgmt.schema.versions(project, c.key);\n const latest = versions[0];\n if (latest) out.push(latest.schemaJson as unknown as CollectionSchema);\n }\n return out.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport function registerSchema(program: Command): void {\n const schema = program.command(\"schema\").description(\"Inspect and deploy code-owned schemas\");\n\n schema\n .command(\"inspect\")\n .description(\"Show deployed collections, or one collection's fields\")\n .argument(\"[collection]\", \"collection key\")\n .action(\n handle(async (ctx, args) => {\n const project = ctx.requireProject();\n const key = args[0] as string | undefined;\n if (!key) {\n const collections = await ctx.management().schema.collections(project);\n emit(collections, () =>\n table(collections, [\n { header: \"KEY\", value: (c) => c.key },\n { header: \"NAME\", value: (c) => c.displayName },\n { header: \"KIND\", value: (c) => c.kind },\n { header: \"VISIBILITY\", value: (c) => c.visibility },\n ]),\n );\n return;\n }\n const versions = await ctx.management().schema.versions(project, key);\n const latest = versions[0];\n if (!latest) throw new CliError(`Collection ${key} has no versions.`);\n const s = latest.schemaJson as unknown as CollectionSchema;\n emit({ collection: key, version: latest.version, schema: s }, () => {\n diag(`${key} — v${latest.version} (${s.kind}, ${s.visibility})`);\n table(s.fields, [\n { header: \"FIELD\", value: (f) => f.key },\n { header: \"TYPE\", value: (f) => f.type },\n { header: \"REQUIRED\", value: (f) => (f.required ? \"yes\" : \"\") },\n ]);\n });\n }),\n );\n\n schema\n .command(\"pull\")\n .description(\"Write deployed schemas to local DSL files\")\n .option(\"--schema-dir <dir>\", \"target schema directory\")\n .action(\n handle(async (ctx, _args, opts) => {\n const project = ctx.requireProject();\n const dir = schemaDirFor(ctx.linkedRoot, opts.schemaDir as string | undefined);\n const schemas = await deployedSchemas(ctx, project);\n mkdirSync(dir, { recursive: true });\n const written: string[] = [];\n for (const s of schemas) {\n const file = join(dir, `${s.name}.ts`);\n writeFileSync(file, schemaToDsl(s));\n written.push(file);\n }\n emit({ pulled: schemas.length, files: written }, () => {\n for (const f of written) process.stdout.write(` wrote ${f}\\n`);\n });\n }),\n );\n\n schema\n .command(\"diff\")\n .description(\"Diff local schemas against the deployed schemas\")\n .option(\"--schema-dir <dir>\", \"schema directory\")\n .action(\n handle(async (ctx, _args, opts) => {\n const project = ctx.requireProject();\n const dir = schemaDirFor(ctx.linkedRoot, opts.schemaDir as string | undefined);\n const local = await loadLocalSchemas(dir);\n const result = await ctx.management().schema.diff(project, canonicalJson(local));\n emit(result, () => renderDiff(result));\n }),\n );\n\n schema\n .command(\"drift\")\n .description(\"Show schema drift between this project and another (e.g. staging)\")\n .requiredOption(\"--against <project>\", \"project id or slug to compare with\")\n .action(\n handle(async (ctx, _args, opts) => {\n const project = ctx.requireProject();\n const result = await ctx.management().schema.drift(project, opts.against as string);\n emit(result, () => {\n if (result.inSync) diag(\"Schemas are in sync.\");\n else {\n diag(`${result.ops.length} op(s) of drift (${result.classification}):`);\n for (const op of result.ops) {\n process.stderr.write(` ${op.kind} ${op.collection}${op.field ? `.${op.field}` : \"\"} — ${op.detail}\\n`);\n }\n }\n });\n if (!result.inSync) process.exitCode = 1;\n }),\n );\n\n schema\n .command(\"promote\")\n .description(\"Promote another project's deployed schemas into this project\")\n .requiredOption(\"--from <project>\", \"source project id or slug\")\n .option(\"--allow-destructive\", \"permit destructive schema changes\", false)\n .action(\n handle(async (ctx, _args, opts) => {\n const project = ctx.requireProject();\n const result = await ctx.management().schema.promote(project, opts.from as string, {\n allowDestructive: Boolean(opts.allowDestructive),\n });\n emit(result, () => {\n renderDiff(result.diff);\n diag(result.applied ? `Promoted ${result.versions.length} version(s).` : \"Nothing to promote.\");\n });\n }),\n );\n\n schema\n .command(\"push\")\n .description(\"Apply local schemas, creating immutable versions\")\n .option(\"--schema-dir <dir>\", \"schema directory\")\n .option(\"--allow-destructive\", \"permit destructive schema changes\", false)\n .option(\"--summary <text>\", \"change summary\")\n .action(\n handle(async (ctx, _args, opts) => {\n const project = ctx.requireProject();\n const dir = schemaDirFor(ctx.linkedRoot, opts.schemaDir as string | undefined);\n const local = await loadLocalSchemas(dir);\n const collections = canonicalJson(local);\n const allowDestructive = Boolean(opts.allowDestructive);\n\n const plan = await ctx.management().schema.diff(project, collections);\n if (!ctx.json) renderDiff(plan);\n\n if (plan.hasDestructive && !allowDestructive) {\n throw new UsageError(\n \"This change is destructive. Re-run with --allow-destructive to proceed.\",\n );\n }\n if (plan.ops.length === 0) {\n emit({ applied: false, reason: \"no-changes\", diff: plan }, () => diag(\"No schema changes to apply.\"));\n return;\n }\n\n const pushed = await ctx\n .management()\n .schema.push(project, collections, { allowDestructive, changeSummary: opts.summary as string | undefined })\n .catch((error: unknown) => {\n if (isMynaApiError(error) && error.code === \"SCHEMA_CHANGE_DESTRUCTIVE\") {\n throw new UsageError(\"Destructive schema change rejected. Pass --allow-destructive.\");\n }\n throw error;\n });\n emit(pushed, () =>\n diag(`Applied ${pushed.versions.length} schema version(s) (${pushed.diff.classification}).`),\n );\n }),\n );\n\n const types = program.command(\"types\").description(\"Generate content types\");\n types\n .command(\"generate\")\n .description(\"Generate deterministic TypeScript types from schemas\")\n .option(\"--schema-dir <dir>\", \"schema directory\")\n .option(\"--deployed\", \"use deployed schemas instead of local files\", false)\n .option(\"--out <file>\", \"write to a file instead of stdout\")\n .action(\n handle(async (ctx, _args, opts) => {\n let schemas: CollectionSchema[];\n if (opts.deployed) {\n schemas = await deployedSchemas(ctx, ctx.requireProject());\n } else {\n const dir = schemaDirFor(ctx.linkedRoot, opts.schemaDir as string | undefined);\n schemas = await loadLocalSchemas(dir);\n }\n const code = generateTypesModule(schemas);\n const out = opts.out as string | undefined;\n if (out) {\n writeFileSync(out, code);\n emit({ written: out, collections: schemas.length }, () => diag(`Wrote ${out}`));\n } else if (ctx.json) {\n emit({ code, collections: schemas.length });\n } else {\n process.stdout.write(code);\n }\n }),\n );\n}\n\ninterface DiffLike {\n ops: Array<{ kind: string; collection: string; field?: string; classification: string; detail: string }>;\n classification: string;\n hasDestructive: boolean;\n contentValidationErrors: Array<{ collection: string; path: string; message: string }>;\n}\n\nfunction renderDiff(diff: DiffLike): void {\n if (diff.ops.length === 0) {\n diag(\"No changes.\");\n return;\n }\n for (const op of diff.ops) {\n const marker = op.classification === \"destructive\" ? \"!\" : op.classification === \"conditionally_destructive\" ? \"~\" : \"+\";\n const target = op.field ? `${op.collection}.${op.field}` : op.collection;\n process.stdout.write(` ${marker} ${op.kind} ${target} — ${op.detail}\\n`);\n }\n process.stdout.write(` classification: ${diff.classification}\\n`);\n for (const err of diff.contentValidationErrors) {\n process.stderr.write(` content error: ${err.collection} ${err.path} — ${err.message}\\n`);\n }\n}\n","import { existsSync, readdirSync, statSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { build, type Plugin } from \"esbuild\";\nimport { toCanonical, type CollectionSchema } from \"@myna-sh/schema\";\nimport { CliError } from \"./output.js\";\n\n/**\n * Load local schema definitions through a controlled esbuild bundle-to-memory,\n * then import the compiled module (SPEC 7 / 11). Each `.ts`/`.js`/`.mjs` file in\n * the schema directory may default-export a collection, export an array of\n * collections, or export several named collections.\n */\n\nexport const DEFAULT_SCHEMA_DIR = \"myna\";\n\n/**\n * Resolve DSL imports in user schema files to the copy bundled with the CLI\n * (`dsl.ts`, built to a sibling `dsl.js`). Schema loading therefore works\n * without `@myna-sh/sdk` installed, and canonicalization always runs against\n * the exact DSL version this CLI ships.\n */\nfunction dslAliasPlugin(): Plugin {\n let dslPath = fileURLToPath(new URL(\"./dsl.js\", import.meta.url));\n if (!existsSync(dslPath)) dslPath = dslPath.replace(/\\.js$/, \".ts\");\n return {\n name: \"myna-dsl-alias\",\n setup(builder) {\n builder.onResolve({ filter: /^@myna-sh\\/(schema|sdk\\/schema)$/ }, () => ({\n path: dslPath,\n }));\n },\n };\n}\n\nfunction looksLikeCollection(value: unknown): value is CollectionSchema {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { name?: unknown }).name === \"string\" &&\n Array.isArray((value as { fields?: unknown }).fields)\n );\n}\n\nfunction collectFromModule(mod: Record<string, unknown>, out: Map<string, CollectionSchema>): void {\n const consider = (value: unknown): void => {\n if (Array.isArray(value)) {\n for (const v of value) consider(v);\n return;\n }\n if (looksLikeCollection(value)) out.set(value.name, value);\n };\n for (const value of Object.values(mod)) consider(value);\n}\n\nfunction listSchemaFiles(dir: string): string[] {\n const files: string[] = [];\n for (const entry of readdirSync(dir)) {\n if (entry.startsWith(\".\") || entry === \"node_modules\" || entry === \"dist\") continue;\n const full = join(dir, entry);\n const st = statSync(full);\n if (st.isDirectory()) {\n files.push(...listSchemaFiles(full));\n } else if (/\\.(ts|mts|js|mjs)$/.test(entry) && !/\\.d\\.ts$/.test(entry)) {\n files.push(full);\n }\n }\n return files.sort();\n}\n\nexport async function loadLocalSchemas(schemaDir = DEFAULT_SCHEMA_DIR): Promise<CollectionSchema[]> {\n const dir = resolve(schemaDir);\n if (!existsSync(dir)) {\n throw new CliError(`Schema directory not found: ${schemaDir}. Run \\`myna init\\` to scaffold it.`);\n }\n const files = listSchemaFiles(dir);\n if (files.length === 0) {\n throw new CliError(`No schema files found in ${schemaDir}.`);\n }\n\n const collections = new Map<string, CollectionSchema>();\n for (const file of files) {\n const result = await build({\n entryPoints: [file],\n bundle: true,\n write: false,\n format: \"esm\",\n platform: \"node\",\n target: \"node20\",\n logLevel: \"silent\",\n absWorkingDir: process.cwd(),\n plugins: [dslAliasPlugin()],\n }).catch((error: unknown) => {\n throw new CliError(`Failed to compile ${file}: ${error instanceof Error ? error.message : String(error)}`);\n });\n\n const code = result.outputFiles[0]?.text ?? \"\";\n const dataUrl = `data:text/javascript;base64,${Buffer.from(code).toString(\"base64\")}`;\n const mod = (await import(dataUrl)) as Record<string, unknown>;\n collectFromModule(mod, collections);\n }\n\n if (collections.size === 0) {\n throw new CliError(\"No collections were exported from the schema directory.\");\n }\n\n return [...collections.values()]\n .map((c) => toCanonical(c))\n .sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport function canonicalJson(schemas: CollectionSchema[]): Record<string, unknown>[] {\n return schemas.map((s) => s as unknown as Record<string, unknown>);\n}\n\n/** Resolve the schema directory relative to the linked project root if set. */\nexport function schemaDirFor(root: string | undefined, override?: string): string {\n if (override) return override;\n if (root) {\n const candidate = join(root, DEFAULT_SCHEMA_DIR);\n if (existsSync(candidate)) return candidate;\n }\n return DEFAULT_SCHEMA_DIR;\n}\n","import type { CollectionSchema } from \"./types.js\";\n\n/**\n * Deterministic JSON serialization: object keys are emitted in sorted order,\n * arrays preserve their order (field order is significant). Produces a stable\n * string suitable for hashing and equality checks.\n */\nexport function canonicalStringify(value: unknown): string {\n return JSON.stringify(sortValue(value));\n}\n\nfunction sortValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortValue);\n if (value && typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(value as Record<string, unknown>).sort()) {\n const v = (value as Record<string, unknown>)[key];\n if (v === undefined) continue;\n out[key] = sortValue(v);\n }\n return out;\n }\n return value;\n}\n\n/**\n * Return a deep-cloned, canonically-ordered copy of a schema. This is the exact\n * shape persisted as `collection_versions.schema_json`.\n */\nexport function toCanonical(schema: CollectionSchema): CollectionSchema {\n return JSON.parse(canonicalStringify(schema)) as CollectionSchema;\n}\n","import type { CollectionSchema, FieldDef, ListItem } from \"@myna-sh/schema\";\n\n/**\n * Emit editable `@myna-sh/sdk/schema` DSL source from a canonical collection schema.\n * Used by `myna schema pull` to materialize deployed schemas as local TS.\n */\nexport function schemaToDsl(schema: CollectionSchema): string {\n const opts: string[] = [\n `name: ${str(schema.name)}`,\n `label: ${str(schema.label)}`,\n ];\n if (schema.kind !== \"collection\") opts.push(`kind: ${str(schema.kind)}`);\n opts.push(`visibility: ${str(schema.visibility)}`);\n if (schema.titleField) opts.push(`titleField: ${str(schema.titleField)}`);\n if (schema.path) opts.push(`path: ${str(schema.path)}`);\n\n const fieldLines = schema.fields.map((f) => ` ${ident(f.key)}: ${emitField(f)},`).join(\"\\n\");\n\n return [\n `import { collection, field, item } from \"@myna-sh/sdk/schema\";`,\n ``,\n `export const ${varName(schema.name)} = collection({`,\n ` ${opts.join(\",\\n \")},`,\n ` fields: {`,\n fieldLines,\n ` },`,\n `});`,\n ``,\n ].join(\"\\n\");\n}\n\nfunction emitField(field: FieldDef): string {\n const o: Record<string, unknown> = {};\n if (field.label && field.label !== field.key) o.label = field.label;\n if (field.description) o.description = field.description;\n if (field.required) o.required = true;\n\n switch (field.type) {\n case \"text\":\n assign(o, { multiline: field.multiline || undefined, minLength: field.minLength, maxLength: field.maxLength, pattern: field.pattern, enum: field.enum, default: field.default });\n return call(\"text\", o);\n case \"slug\":\n assign(o, { from: field.from });\n return call(\"slug\", o);\n case \"markdown\":\n assign(o, { minLength: field.minLength, maxLength: field.maxLength, default: field.default });\n return call(\"markdown\", o);\n case \"number\":\n assign(o, { integer: field.integer || undefined, min: field.min, max: field.max, default: field.default });\n return call(\"number\", o);\n case \"boolean\":\n assign(o, { default: field.default });\n return call(\"boolean\", o);\n case \"date\":\n case \"datetime\":\n assign(o, { min: field.min, max: field.max, default: field.default });\n return call(field.type, o);\n case \"json\":\n assign(o, { default: field.default });\n return call(\"json\", o);\n case \"asset\":\n assign(o, { allowed: field.allowed, multiple: field.multiple || undefined });\n return call(\"asset\", o);\n case \"reference\":\n assign(o, { to: field.target, multiple: field.multiple || undefined });\n return call(\"reference\", o);\n case \"object\": {\n const inner = field.fields.map((f) => ` ${ident(f.key)}: ${emitField(f)}`).join(\",\\n\");\n o.fields = `__RAW__{\\n${inner},\\n }`;\n return call(\"object\", o);\n }\n case \"list\":\n o.of = `__RAW__${emitItem(field.item)}`;\n assign(o, { minItems: field.minItems, maxItems: field.maxItems });\n return call(\"list\", o);\n default:\n return `field.json({})`;\n }\n}\n\nfunction emitItem(item: ListItem): string {\n switch (item.kind) {\n case \"reference\":\n return `item.reference({ to: ${str(item.target)} })`;\n case \"asset\":\n return `item.asset({ allowed: ${JSON.stringify(item.allowed)} })`;\n case \"object\": {\n const inner = item.fields.map((f) => ` ${ident(f.key)}: ${emitField(f)}`).join(\",\\n\");\n return `item.object({ fields: {\\n${inner},\\n } })`;\n }\n default:\n return `item.${item.kind}()`;\n }\n}\n\nfunction call(name: string, opts: Record<string, unknown>): string {\n const entries = Object.entries(opts);\n if (entries.length === 0) return `field.${name}()`;\n const body = entries.map(([k, v]) => `${ident(k)}: ${literal(v)}`).join(\", \");\n return `field.${name}({ ${body} })`;\n}\n\nfunction assign(target: Record<string, unknown>, values: Record<string, unknown>): void {\n for (const [k, v] of Object.entries(values)) {\n if (v !== undefined) target[k] = v;\n }\n}\n\nfunction literal(value: unknown): string {\n if (typeof value === \"string\" && value.startsWith(\"__RAW__\")) return value.slice(\"__RAW__\".length);\n return JSON.stringify(value);\n}\n\nfunction str(value: string): string {\n return JSON.stringify(value);\n}\n\nfunction ident(key: string): string {\n return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key) ? key : JSON.stringify(key);\n}\n\nfunction varName(name: string): string {\n const camel = name.replace(/[-_\\s]+(.)/g, (_, c: string) => c.toUpperCase());\n return /^[A-Za-z_$]/.test(camel) ? camel : `_${camel}`;\n}\n","import { readFile } from \"node:fs/promises\";\nimport type { Command } from \"commander\";\nimport { UsageError, diag, emit, table } from \"../output.js\";\nimport { handle } from \"../runtime.js\";\nimport { applySets, parseData, resolveEntryId } from \"../util.js\";\n\nexport function registerEntries(program: Command): void {\n const entries = program.command(\"entries\").description(\"Create, read, update, and manage entries\");\n\n entries\n .command(\"list\")\n .description(\"List entries in a collection\")\n .argument(\"<collection>\", \"collection key\")\n .option(\"--status <status>\", \"filter by status\")\n .option(\"--limit <n>\", \"page size\", \"25\")\n .option(\"--cursor <cursor>\", \"pagination cursor\")\n .action(\n handle(async (ctx, args, opts) => {\n const project = ctx.requireProject();\n const page = await ctx.management().entries.list(project, {\n collection: args[0] as string,\n status: opts.status as string | undefined,\n limit: Number(opts.limit),\n cursor: opts.cursor as string | undefined,\n });\n emit({ data: page.data, nextCursor: page.nextCursor }, () =>\n table(page.data, [\n { header: \"ID\", value: (e) => e.id },\n { header: \"SLUG\", value: (e) => e.slug ?? \"\" },\n { header: \"STATUS\", value: (e) => e.status },\n { header: \"UPDATED\", value: (e) => e.updatedAt },\n ]),\n );\n }),\n );\n\n entries\n .command(\"get\")\n .description(\"Get one entry by <collection>/<slug-or-id>\")\n .argument(\"<ref>\", \"collection/slug or entry id\")\n .action(\n handle(async (ctx, args) => {\n const project = ctx.requireProject();\n const id = await resolveEntryId(ctx.management(), project, args[0] as string);\n const entry = await ctx.management().entries.get(project, id);\n emit(entry);\n }),\n );\n\n entries\n .command(\"create\")\n .description(\"Create an entry\")\n .argument(\"<collection>\", \"collection key\")\n .option(\"--data <json-or-@file>\", \"entry data as JSON or @file\")\n .option(\"--set <path=value...>\", \"set individual fields\", collect, [])\n .option(\"--slug <slug>\", \"explicit slug\")\n .option(\"--change-set <id>\", \"attach to a change set\")\n .option(\"--summary <text>\", \"change summary\")\n .action(\n handle(async (ctx, args, opts) => {\n const project = ctx.requireProject();\n const data = applySets(parseData(opts.data as string | undefined), opts.set as string[]);\n const entry = await ctx.management().entries.create(project, {\n collection: args[0] as string,\n data,\n slug: opts.slug as string | undefined,\n changeSetId: opts.changeSet as string | undefined,\n changeSummary: opts.summary as string | undefined,\n });\n emit(entry, () => diag(`Created ${entry.id} (${entry.status}).`));\n }),\n );\n\n entries\n .command(\"update\")\n .description(\"Update an entry\")\n .argument(\"<ref>\", \"collection/slug or entry id\")\n .option(\"--data <json-or-@file>\", \"replacement data as JSON or @file\")\n .option(\"--set <path=value...>\", \"set individual fields\", collect, [])\n .option(\"--slug <slug>\", \"new slug\")\n .option(\"--expected-revision <id>\", \"optimistic concurrency guard\")\n .option(\"--change-set <id>\", \"attach to a change set\")\n .option(\"--summary <text>\", \"change summary\")\n .action(\n handle(async (ctx, args, opts) => {\n const project = ctx.requireProject();\n const id = await resolveEntryId(ctx.management(), project, args[0] as string);\n const sets = opts.set as string[];\n let data: Record<string, unknown> | undefined;\n if (opts.data !== undefined || sets.length > 0) {\n const base = opts.data !== undefined ? parseData(opts.data as string) : (await ctx.management().entries.get(project, id)).data;\n data = applySets(base, sets);\n }\n if (!data && !opts.slug) throw new UsageError(\"Nothing to update. Pass --data, --set, or --slug.\");\n const entry = await ctx.management().entries.update(project, id, {\n data,\n slug: opts.slug as string | undefined,\n expectedRevisionId: opts.expectedRevision as string | undefined,\n changeSetId: opts.changeSet as string | undefined,\n changeSummary: opts.summary as string | undefined,\n });\n emit(entry, () => diag(`Updated ${entry.id} (${entry.status}).`));\n }),\n );\n\n entries\n .command(\"delete\")\n .description(\"Stage an entry deletion on a change set\")\n .argument(\"<ref>\", \"collection/slug or entry id\")\n .option(\"--confirm-delete\", \"required consequence flag\", false)\n .option(\"--change-set <id>\", \"attach to a change set\")\n .action(\n handle(async (ctx, args, opts) => {\n if (!opts.confirmDelete) throw new UsageError(\"Deletion requires --confirm-delete.\");\n const project = ctx.requireProject();\n const id = await resolveEntryId(ctx.management(), project, args[0] as string);\n const result = await ctx.management().entries.delete(project, id, opts.changeSet as string | undefined);\n emit(result, () => diag(`Staged delete of ${id} on change set ${result.changeSetId}.`));\n }),\n );\n\n entries\n .command(\"unpublish\")\n .description(\"Stage an entry unpublish on a change set\")\n .argument(\"<ref>\", \"collection/slug or entry id\")\n .option(\"--change-set <id>\", \"attach to a change set\")\n .action(\n handle(async (ctx, args, opts) => {\n const project = ctx.requireProject();\n const id = await resolveEntryId(ctx.management(), project, args[0] as string);\n const result = await ctx.management().entries.unpublish(project, id, opts.changeSet as string | undefined);\n emit(result, () => diag(`Staged unpublish of ${id} on change set ${result.changeSetId}.`));\n }),\n );\n\n entries\n .command(\"revisions\")\n .description(\"List an entry's revisions\")\n .argument(\"<ref>\", \"collection/slug or entry id\")\n .action(\n handle(async (ctx, args) => {\n const project = ctx.requireProject();\n const id = await resolveEntryId(ctx.management(), project, args[0] as string);\n const revisions = await ctx.management().entries.revisions(project, id);\n emit(revisions, () =>\n table(revisions, [\n { header: \"ID\", value: (r) => r.id },\n { header: \"#\", value: (r) => String(r.revisionNumber) },\n { header: \"BY\", value: (r) => r.createdByType },\n { header: \"CREATED\", value: (r) => r.createdAt },\n ]),\n );\n }),\n );\n\n entries\n .command(\"duplicate\")\n .description(\"Duplicate an entry into a new draft\")\n .argument(\"<ref>\", \"collection/slug or entry id\")\n .option(\"--change-set <id>\", \"stage on an explicit change set\")\n .action(\n handle(async (ctx, args, opts) => {\n const project = ctx.requireProject();\n const id = await resolveEntryId(ctx.management(), project, args[0] as string);\n const entry = await ctx.management().entries.duplicate(project, id, opts.changeSet as string | undefined);\n emit(entry, () => diag(`Duplicated into ${entry.id} (${entry.slug ?? \"no slug\"}).`));\n }),\n );\n\n entries\n .command(\"bulk\")\n .description(\"Stage a delete or unpublish for many entries at once\")\n .requiredOption(\"--action <action>\", \"delete or unpublish\")\n .requiredOption(\"--ids <ids>\", \"comma-separated entry ids\")\n .option(\"--change-set <id>\", \"stage on an explicit change set\")\n .action(\n handle(async (ctx, _args, opts) => {\n const action = opts.action as string;\n if (action !== \"delete\" && action !== \"unpublish\") {\n throw new UsageError(\"--action must be delete or unpublish.\");\n }\n const project = ctx.requireProject();\n const result = await ctx.management().entries.bulk(project, {\n action,\n entryIds: (opts.ids as string).split(\",\").map((s) => s.trim()).filter(Boolean),\n changeSetId: opts.changeSet as string | undefined,\n });\n emit(result, () =>\n table(result.results, [\n { header: \"ENTRY\", value: (r) => r.entryId },\n { header: \"OK\", value: (r) => (r.ok ? \"yes\" : \"no\") },\n { header: \"CHANGE SET\", value: (r) => r.changeSetId ?? \"—\" },\n { header: \"ERROR\", value: (r) => r.error ?? \"\" },\n ]),\n );\n if (result.results.some((r) => !r.ok)) process.exitCode = 1;\n }),\n );\n\n entries\n .command(\"import\")\n .description(\"Import entries from a JSON file, with dry-run validation\")\n .argument(\"<file>\", \"JSON file: { \\\"collection\\\": \\\"posts\\\", \\\"entries\\\": [{ \\\"slug\\\"?, \\\"data\\\" }] }\")\n .option(\"--dry-run\", \"validate without creating anything\", false)\n .action(\n handle(async (ctx, args, opts) => {\n const project = ctx.requireProject();\n const raw = JSON.parse(await readFile(args[0] as string, \"utf8\")) as {\n collection: string;\n entries: { slug?: string; data: Record<string, unknown> }[];\n };\n const result = await ctx.management().entries.import(project, {\n collection: raw.collection,\n entries: raw.entries,\n dryRun: Boolean(opts.dryRun),\n });\n emit(result, () => {\n diag(\n result.dryRun\n ? `Dry run: ${result.valid ? \"all rows valid\" : \"validation failed\"}.`\n : `Imported ${result.results.filter((r) => r.ok).length}/${result.results.length} into change set ${result.changeSetId}.`,\n );\n for (const row of result.results.filter((r) => !r.ok)) {\n for (const e of row.errors ?? []) {\n process.stderr.write(` row ${row.index}${row.slug ? ` (${row.slug})` : \"\"}: ${e.path} ${e.message}\\n`);\n }\n }\n });\n if (!result.valid) process.exitCode = 1;\n }),\n );\n\n entries\n .command(\"references\")\n .description(\"Show which entries reference this one and what it references\")\n .argument(\"<ref>\", \"collection/slug or entry id\")\n .action(\n handle(async (ctx, args) => {\n const project = ctx.requireProject();\n const id = await resolveEntryId(ctx.management(), project, args[0] as string);\n const refs = await ctx.management().entries.references(project, id);\n emit(refs, () => {\n diag(`Referenced by ${refs.referencedBy.length} entr(y/ies):`);\n table(refs.referencedBy, [\n { header: \"ENTRY\", value: (r) => `${r.collectionKey}/${r.slug ?? r.id}` },\n { header: \"IN DRAFT\", value: (r) => (r.inDraft ? \"yes\" : \"no\") },\n { header: \"IN PUBLISHED\", value: (r) => (r.inPublished ? \"yes\" : \"no\") },\n ]);\n diag(`References ${refs.references.length} entr(y/ies):`);\n table(refs.references, [\n { header: \"ENTRY\", value: (r) => (r.collectionKey ? `${r.collectionKey}/${r.slug ?? r.id}` : r.id) },\n { header: \"STATE\", value: (r) => (!r.exists ? \"missing\" : r.published ? \"published\" : \"unpublished\") },\n ]);\n });\n }),\n );\n\n entries\n .command(\"restore\")\n .description(\"Restore a historical revision into a new draft\")\n .argument(\"<ref>\", \"collection/slug or entry id\")\n .requiredOption(\"--revision <id>\", \"revision id to restore\")\n .action(\n handle(async (ctx, args, opts) => {\n const project = ctx.requireProject();\n const id = await resolveEntryId(ctx.management(), project, args[0] as string);\n const result = await ctx.management().entries.restoreRevision(project, id, opts.revision as string);\n emit(result, () => diag(`Restored revision ${opts.revision as string} into ${result.revision.id}.`));\n }),\n );\n}\n\nfunction collect(value: string, previous: string[]): string[] {\n return [...previous, value];\n}\n","import type { Command } from \"commander\";\nimport { UsageError, diag, emit, table } from \"../output.js\";\nimport { handle } from \"../runtime.js\";\n\nexport function registerChanges(program: Command): void {\n const changes = program.command(\"changes\").description(\"Manage change sets: validate, preview, publish\");\n\n changes\n .command(\"list\")\n .description(\"List change sets\")\n .option(\"--status <status>\", \"filter by status\")\n .option(\"--limit <n>\", \"page size\", \"25\")\n .action(\n handle(async (ctx, _args, opts) => {\n const project = ctx.requireProject();\n const page = await ctx.management().changeSets.list(project, {\n status: opts.status as string | undefined,\n limit: Number(opts.limit),\n });\n emit({ data: page.data, nextCursor: page.nextCursor }, () =>\n table(page.data, [\n { header: \"ID\", value: (c) => c.id },\n { header: \"TITLE\", value: (c) => c.title },\n { header: \"STATUS\", value: (c) => c.status },\n { header: \"ITEMS\", value: (c) => String(c.items.length) },\n ]),\n );\n }),\n );\n\n changes\n .command(\"create\")\n .description(\"Create a change set\")\n .requiredOption(\"--title <title>\", \"change set title\")\n .option(\"--description <text>\", \"change set description\")\n .action(\n handle(async (ctx, _args, opts) => {\n const project = ctx.requireProject();\n const cs = await ctx.management().changeSets.create(project, {\n title: opts.title as string,\n description: opts.description as string | undefined,\n });\n emit(cs, () => diag(`Created change set ${cs.id}.`));\n }),\n );\n\n changes\n .command(\"inspect\")\n .description(\"Show a change set and its items\")\n .argument(\"<id>\", \"change set id\")\n .action(\n handle(async (ctx, args) => {\n const project = ctx.requireProject();\n const cs = await ctx.management().changeSets.get(project, args[0] as string);\n emit(cs, () => {\n diag(`${cs.title} — ${cs.status}`);\n table(cs.items, [\n { header: \"TYPE\", value: (i) => i.resourceType },\n { header: \"RESOURCE\", value: (i) => i.resourceId },\n { header: \"OP\", value: (i) => i.operation },\n ]);\n });\n }),\n );\n\n changes\n .command(\"validate\")\n .description(\"Validate a change set against deployed schemas\")\n .argument(\"<id>\", \"change set id\")\n .action(\n handle(async (ctx, args) => {\n const project = ctx.requireProject();\n const result = await ctx.management().changeSets.validate(project, args[0] as string);\n emit(result, () => {\n if (result.valid) {\n diag(\"valid\");\n } else {\n for (const e of result.errors) {\n process.stderr.write(` ${e.resourceId} ${e.path} — ${e.message}\\n`);\n }\n }\n });\n if (!result.valid) process.exitCode = 1;\n }),\n );\n\n changes\n .command(\"preview\")\n .description(\"Create a preview for a change set\")\n .argument(\"<id>\", \"change set id\")\n .action(\n handle(async (ctx, args) => {\n const project = ctx.requireProject();\n const preview = await ctx.management().previews.create(project, { changeSetId: args[0] as string });\n emit(preview, () => {\n process.stdout.write(`${preview.url}\\n`);\n diag(`fallback: ${preview.fallbackUrl}`);\n });\n }),\n );\n\n changes\n .command(\"publish\")\n .description(\"Atomically publish a change set\")\n .argument(\"<id>\", \"change set id\")\n .option(\"--confirm-publish\", \"required consequence flag\", false)\n .action(\n handle(async (ctx, args, opts) => {\n if (!opts.confirmPublish) throw new UsageError(\"Publishing requires --confirm-publish.\");\n const project = ctx.requireProject();\n const result = await ctx.management().changeSets.publish(project, args[0] as string);\n emit(result, () =>\n diag(`Published ${result.publishedEntryIds.length} entr(y/ies): ${result.publishedEntryIds.join(\", \")}`),\n );\n }),\n );\n\n changes\n .command(\"close\")\n .description(\"Close a change set without publishing\")\n .argument(\"<id>\", \"change set id\")\n .action(\n handle(async (ctx, args) => {\n const project = ctx.requireProject();\n const cs = await ctx.management().changeSets.close(project, args[0] as string);\n emit(cs, () => diag(`Closed ${cs.id}.`));\n }),\n );\n\n changes\n .command(\"schedule\")\n .description(\"Schedule, reschedule, or cancel a change set's publish\")\n .argument(\"<id>\", \"change set id\")\n .option(\"--at <datetime>\", \"ISO 8601 datetime to publish at\")\n .option(\"--cancel\", \"cancel the scheduled publish\", false)\n .action(\n handle(async (ctx, args, opts) => {\n const project = ctx.requireProject();\n if (Boolean(opts.at) === Boolean(opts.cancel)) {\n throw new UsageError(\"Provide exactly one of --at <datetime> or --cancel.\");\n }\n const client = ctx.management();\n const cs = opts.cancel\n ? await client.changeSets.cancelSchedule(project, args[0] as string)\n : await client.changeSets.schedule(project, args[0] as string, new Date(opts.at as string).toISOString());\n emit(cs, () =>\n diag(cs.scheduledAt ? `Scheduled to publish at ${cs.scheduledAt}.` : \"Schedule cancelled.\"),\n );\n }),\n );\n\n changes\n .command(\"reviews\")\n .description(\"List reviews and approvals for a change set\")\n .argument(\"<id>\", \"change set id\")\n .action(\n handle(async (ctx, args) => {\n const project = ctx.requireProject();\n const reviews = await ctx.management().changeSets.reviews(project, args[0] as string);\n emit(reviews, () =>\n table(reviews, [\n { header: \"REVIEWER\", value: (r) => `${r.reviewerType}:${r.reviewerId}` },\n { header: \"STATUS\", value: (r) => r.status },\n { header: \"STALE\", value: (r) => (r.stale ? \"yes\" : \"no\") },\n { header: \"DECIDED\", value: (r) => r.decidedAt ?? \"—\" },\n ]),\n );\n }),\n );\n\n changes\n .command(\"request-review\")\n .description(\"Assign a reviewer to a change set\")\n .argument(\"<id>\", \"change set id\")\n .requiredOption(\"--reviewer <id>\", \"reviewer id (user, api key, or agent id)\")\n .option(\"--reviewer-type <type>\", \"reviewer actor type\", \"user\")\n .action(\n handle(async (ctx, args, opts) => {\n const project = ctx.requireProject();\n const reviews = await ctx.management().changeSets.requestReview(project, args[0] as string, {\n reviewerType: opts.reviewerType as \"user\" | \"api_key\" | \"agent\" | \"system\",\n reviewerId: opts.reviewer as string,\n });\n emit(reviews, () => diag(`Requested review from ${opts.reviewer as string}.`));\n }),\n );\n\n changes\n .command(\"approve\")\n .description(\"Approve a change set\")\n .argument(\"<id>\", \"change set id\")\n .option(\"--comment <text>\", \"optional review comment\")\n .action(\n handle(async (ctx, args, opts) => {\n const project = ctx.requireProject();\n const reviews = await ctx.management().changeSets.approve(project, args[0] as string, {\n comment: opts.comment as string | undefined,\n });\n emit(reviews, () => diag(\"Approved.\"));\n }),\n );\n\n changes\n .command(\"request-changes\")\n .description(\"Request changes on a change set\")\n .argument(\"<id>\", \"change set id\")\n .option(\"--comment <text>\", \"optional review comment\")\n .action(\n handle(async (ctx, args, opts) => {\n const project = ctx.requireProject();\n const reviews = await ctx.management().changeSets.requestChanges(project, args[0] as string, {\n comment: opts.comment as string | undefined,\n });\n emit(reviews, () => diag(\"Requested changes.\"));\n }),\n );\n\n changes\n .command(\"comments\")\n .description(\"List comments on a change set\")\n .argument(\"<id>\", \"change set id\")\n .action(\n handle(async (ctx, args) => {\n const project = ctx.requireProject();\n const comments = await ctx.management().changeSets.comments(project, args[0] as string);\n emit(comments, () =>\n table(comments, [\n { header: \"AUTHOR\", value: (c) => `${c.authorType}:${c.authorId ?? \"—\"}` },\n { header: \"ANCHOR\", value: (c) => (c.resourceId ? `${c.resourceId}${c.fieldPath ? `#${c.fieldPath}` : \"\"}` : \"—\") },\n { header: \"RESOLVED\", value: (c) => (c.resolvedAt ? \"yes\" : \"no\") },\n { header: \"BODY\", value: (c) => (c.body.length > 60 ? `${c.body.slice(0, 57)}...` : c.body) },\n ]),\n );\n }),\n );\n\n changes\n .command(\"comment\")\n .description(\"Comment on a change set (optionally anchored to a field)\")\n .argument(\"<id>\", \"change set id\")\n .argument(\"<body>\", \"comment body\")\n .option(\"--entry <id>\", \"anchor to an entry in the change set\")\n .option(\"--field <path>\", \"anchor to a field path, e.g. fields.title\")\n .action(\n handle(async (ctx, args, opts) => {\n const project = ctx.requireProject();\n const comment = await ctx.management().changeSets.comment(project, args[0] as string, {\n body: args[1] as string,\n resourceType: opts.entry ? \"entry\" : undefined,\n resourceId: opts.entry as string | undefined,\n fieldPath: opts.field as string | undefined,\n });\n emit(comment, () => diag(`Commented ${comment.id}.`));\n }),\n );\n\n changes\n .command(\"checks\")\n .description(\"Show the latest check run for a change set\")\n .argument(\"<id>\", \"change set id\")\n .option(\"--run\", \"run checks before showing results\", false)\n .action(\n handle(async (ctx, args, opts) => {\n const project = ctx.requireProject();\n const client = ctx.management();\n const checks = opts.run\n ? (await client.changeSets.runChecks(project, args[0] as string)).checks\n : await client.changeSets.checks(project, args[0] as string);\n emit(checks, () =>\n table(checks, [\n { header: \"CHECK\", value: (c) => c.name },\n { header: \"STATUS\", value: (c) => c.status },\n { header: \"STALE\", value: (c) => (c.stale ? \"yes\" : \"no\") },\n { header: \"ISSUES\", value: (c) => String(c.details?.length ?? 0) },\n ]),\n );\n if (checks.some((c) => c.status === \"failed\")) process.exitCode = 1;\n }),\n );\n}\n","import type { Command } from \"commander\";\nimport { UsageError, diag, emit, table } from \"../output.js\";\nimport { handle } from \"../runtime.js\";\nimport { openBrowser } from \"../util.js\";\nimport type { Ctx } from \"../client.js\";\nimport type { CreatePreviewRequest } from \"@myna-sh/api-contracts\";\n\nfunction previewTarget(ref: string): CreatePreviewRequest {\n if (ref.startsWith(\"chs_\")) return { changeSetId: ref };\n if (ref.startsWith(\"ent_\")) return { entryId: ref };\n throw new UsageError(`Preview target must be a change-set (chs_) or entry (ent_) id: ${ref}`);\n}\n\nasync function create(ctx: Ctx, ref: string) {\n return ctx.management().previews.create(ctx.requireProject(), previewTarget(ref));\n}\n\nexport function registerPreviews(program: Command): void {\n const preview = program.command(\"preview\").description(\"Create and manage preview links\");\n\n preview\n .command(\"create\")\n .description(\"Create a preview for a change set or entry\")\n .argument(\"<change-set-or-entry>\", \"chs_ or ent_ id\")\n .action(\n handle(async (ctx, args) => {\n const p = await create(ctx, args[0] as string);\n emit(p, () => {\n process.stdout.write(`${p.url}\\n`);\n diag(`fallback: ${p.fallbackUrl}`);\n });\n }),\n );\n\n preview\n .command(\"open\")\n .description(\"Create a preview and open it in the browser\")\n .argument(\"<change-set-or-entry>\", \"chs_ or ent_ id\")\n .action(\n handle(async (ctx, args) => {\n const p = await create(ctx, args[0] as string);\n if (ctx.interactive) openBrowser(p.url);\n emit(p, () => process.stdout.write(`${p.url}\\n`));\n }),\n );\n\n preview\n .command(\"list\")\n .description(\"List preview tokens for the project\")\n .action(\n handle(async (ctx) => {\n const previews = await ctx.management().previews.list(ctx.requireProject());\n emit(previews, () =>\n table(previews, [\n { header: \"ID\", value: (p) => p.id },\n { header: \"SCOPE\", value: (p) => p.changeSetId ?? p.entryId ?? \"\" },\n { header: \"EXPIRES\", value: (p) => p.expiresAt },\n { header: \"REVOKED\", value: (p) => (p.revokedAt ? \"yes\" : \"\") },\n ]),\n );\n }),\n );\n\n preview\n .command(\"revoke\")\n .description(\"Revoke a preview token\")\n .argument(\"<id>\", \"preview id (prv_)\")\n .action(\n handle(async (ctx, args) => {\n await ctx.management().previews.revoke(ctx.requireProject(), args[0] as string);\n emit({ ok: true }, () => diag(`Revoked ${args[0] as string}.`));\n }),\n );\n}\n","import type { Command } from \"commander\";\nimport type { AssetContract } from \"@myna-sh/api-contracts\";\nimport { UsageError, diag, emit, keyValues, table } from \"../output.js\";\nimport { handle } from \"../runtime.js\";\n\nexport function registerAssets(program: Command): void {\n const assets = program.command(\"assets\").description(\"Upload and manage assets\");\n\n assets\n .command(\"upload\")\n .description(\"Upload one or more files via the presigned flow\")\n .argument(\"<path...>\", \"file path(s)\")\n .option(\"--alt <text>\", \"default alt text applied to each asset\")\n .action(\n handle(async (ctx, args, opts) => {\n const project = ctx.requireProject();\n const paths = args[0] as string[];\n const uploaded: AssetContract[] = [];\n for (const path of paths) {\n diag(`uploading ${path} …`);\n let asset = await ctx.management().assets.upload(project, path);\n if (opts.alt) asset = await ctx.management().assets.update(project, asset.id, { defaultAlt: opts.alt as string });\n uploaded.push(asset);\n }\n emit(uploaded.length === 1 ? uploaded[0] : uploaded, () =>\n table(uploaded, [\n { header: \"ID\", value: (a) => a.id },\n { header: \"FILENAME\", value: (a) => a.displayFilename },\n { header: \"TYPE\", value: (a) => a.contentType },\n { header: \"SIZE\", value: (a) => String(a.byteSize) },\n { header: \"STATE\", value: (a) => a.state },\n ]),\n );\n }),\n );\n\n assets\n .command(\"list\")\n .description(\"List assets\")\n .option(\"--limit <n>\", \"page size\", \"25\")\n .option(\"--cursor <cursor>\", \"pagination cursor\")\n .action(\n handle(async (ctx, _args, opts) => {\n const project = ctx.requireProject();\n const page = await ctx.management().assets.list(project, {\n limit: Number(opts.limit),\n cursor: opts.cursor as string | undefined,\n });\n emit({ data: page.data, nextCursor: page.nextCursor }, () =>\n table(page.data, [\n { header: \"ID\", value: (a) => a.id },\n { header: \"FILENAME\", value: (a) => a.displayFilename },\n { header: \"TYPE\", value: (a) => a.contentType },\n { header: \"STATE\", value: (a) => a.state },\n ]),\n );\n }),\n );\n\n assets\n .command(\"inspect\")\n .description(\"Show an asset and its usage\")\n .argument(\"<id>\", \"asset id (ast_)\")\n .action(\n handle(async (ctx, args) => {\n const project = ctx.requireProject();\n const result = await ctx.management().assets.usage(project, args[0] as string);\n emit(result, () => {\n keyValues([\n [\"ID\", result.asset.id],\n [\"Filename\", result.asset.displayFilename],\n [\"Type\", result.asset.contentType],\n [\"Size\", String(result.asset.byteSize)],\n [\"State\", result.asset.state],\n [\"URL\", result.asset.url],\n [\"Referenced by\", result.usage.entryIds.join(\", \") || \"(none)\"],\n ]);\n });\n }),\n );\n\n assets\n .command(\"delete\")\n .description(\"Soft-delete an asset\")\n .argument(\"<id>\", \"asset id (ast_)\")\n .option(\"--confirm-delete\", \"required consequence flag\", false)\n .action(\n handle(async (ctx, args, opts) => {\n if (!opts.confirmDelete) throw new UsageError(\"Deletion requires --confirm-delete.\");\n await ctx.management().assets.delete(ctx.requireProject(), args[0] as string);\n emit({ ok: true }, () => diag(`Deleted ${args[0] as string}.`));\n }),\n );\n}\n","import type { Command } from \"commander\";\nimport type { ApiKeyScope, OrgRole, UpdateProjectRequest, WebhookEventType } from \"@myna-sh/api-contracts\";\nimport { writeUserConfig } from \"../config.js\";\nimport { UsageError, diag, emit, keyValues, table } from \"../output.js\";\nimport { handle } from \"../runtime.js\";\nimport { openBrowser } from \"../util.js\";\n\nfunction csv<T extends string>(value: string): T[] {\n return value.split(\",\").map((s) => s.trim()).filter(Boolean) as T[];\n}\n\nexport function registerAdmin(program: Command): void {\n registerOrganizations(program);\n registerProjects(program);\n registerKeys(program);\n registerMembers(program);\n registerWebhooks(program);\n registerActivity(program);\n registerBilling(program);\n}\n\nfunction registerOrganizations(program: Command): void {\n const orgs = program.command(\"organizations\").alias(\"orgs\").description(\"Manage organizations\");\n\n orgs\n .command(\"list\")\n .description(\"List organizations you belong to\")\n .action(\n handle(async (ctx) => {\n const list = await ctx.management().organizations.list();\n emit(list, () =>\n table(list, [\n { header: \"SLUG\", value: (o) => o.slug },\n { header: \"NAME\", value: (o) => o.name },\n { header: \"ROLE\", value: (o) => o.role },\n { header: \"PLAN\", value: (o) => o.planKey },\n ]),\n );\n }),\n );\n\n orgs\n .command(\"create\")\n .description(\"Create an organization\")\n .requiredOption(\"--name <name>\", \"organization name\")\n .option(\"--slug <slug>\", \"organization slug\")\n .action(\n handle(async (ctx, _args, opts) => {\n const org = await ctx.management().organizations.create({\n name: opts.name as string,\n slug: opts.slug as string | undefined,\n });\n emit(org, () => diag(`Created ${org.slug} (${org.id}).`));\n }),\n );\n\n orgs\n .command(\"use\")\n .description(\"Set the default organization\")\n .argument(\"<slug>\", \"organization slug or id\")\n .action(\n handle(async (_ctx, args) => {\n writeUserConfig({ defaultOrganization: args[0] as string });\n emit({ defaultOrganization: args[0] as string }, () => diag(`Default organization set to ${args[0] as string}.`));\n }),\n );\n}\n\nfunction registerProjects(program: Command): void {\n const projects = program.command(\"projects\").description(\"Manage projects\");\n\n projects\n .command(\"list\")\n .description(\"List projects in the organization\")\n .action(\n handle(async (ctx) => {\n const list = await ctx.management().projects.list(ctx.requireOrganization());\n emit(list, () =>\n table(list, [\n { header: \"SLUG\", value: (p) => p.slug },\n { header: \"NAME\", value: (p) => p.name },\n { header: \"PUBLIC API\", value: (p) => (p.publicApiEnabled ? \"on\" : \"off\") },\n { header: \"ARCHIVED\", value: (p) => (p.archivedAt ? \"yes\" : \"\") },\n ]),\n );\n }),\n );\n\n projects\n .command(\"create\")\n .description(\"Create a project\")\n .requiredOption(\"--name <name>\", \"project name\")\n .option(\"--slug <slug>\", \"project slug\")\n .option(\"--timezone <tz>\", \"project timezone\")\n .action(\n handle(async (ctx, _args, opts) => {\n const project = await ctx.management().projects.create(ctx.requireOrganization(), {\n name: opts.name as string,\n slug: opts.slug as string | undefined,\n timezone: opts.timezone as string | undefined,\n });\n emit(project, () => diag(`Created ${project.slug} (${project.id}).`));\n }),\n );\n\n projects\n .command(\"inspect\")\n .description(\"Show project details\")\n .argument(\"[project]\", \"project id or slug\")\n .action(\n handle(async (ctx, args) => {\n const ref = (args[0] as string | undefined) ?? ctx.requireProject();\n const project = await ctx.management().projects.get(ref);\n emit(project, () =>\n keyValues([\n [\"ID\", project.id],\n [\"Name\", project.name],\n [\"Slug\", project.slug],\n [\"Timezone\", project.timezone],\n [\"Public API\", project.publicApiEnabled ? \"on\" : \"off\"],\n [\"Origins\", project.origins.join(\", \") || \"(none)\"],\n ]),\n );\n }),\n );\n\n projects\n .command(\"export\")\n .description(\"Export the full project (schemas, entries, asset metadata) as JSON\")\n .argument(\"[project]\", \"project id or slug\")\n .action(\n handle(async (ctx, args) => {\n const ref = (args[0] as string | undefined) ?? ctx.requireProject();\n const data = await ctx.management().projects.export(ref);\n process.stdout.write(`${JSON.stringify(data, null, 2)}\\n`);\n }),\n );\n\n projects\n .command(\"update\")\n .description(\"Update project settings\")\n .argument(\"[project]\", \"project id or slug\")\n .option(\"--name <name>\", \"project name\")\n .option(\"--timezone <timezone>\", \"IANA timezone\")\n .option(\"--public-api <state>\", \"public API state (on|off)\")\n .option(\"--default-preview-template <template>\", \"default preview URL template\")\n .option(\"--clear-default-preview-template\", \"remove the default preview URL template\")\n .option(\"--origins <urls>\", \"comma-separated allowed origins\")\n .option(\"--clear-origins\", \"remove all allowed origins\")\n .action(\n handle(async (ctx, args, opts) => {\n const ref = (args[0] as string | undefined) ?? ctx.requireProject();\n const patch: UpdateProjectRequest = {};\n if (opts.name !== undefined) patch.name = opts.name as string;\n if (opts.timezone !== undefined) patch.timezone = opts.timezone as string;\n if (opts.publicApi !== undefined) {\n const state = String(opts.publicApi).toLowerCase();\n if (![\"on\", \"off\", \"true\", \"false\"].includes(state)) {\n throw new UsageError(\"--public-api must be on or off.\");\n }\n patch.publicApiEnabled = state === \"on\" || state === \"true\";\n }\n if (opts.defaultPreviewTemplate !== undefined && opts.clearDefaultPreviewTemplate) {\n throw new UsageError(\"Use either --default-preview-template or --clear-default-preview-template, not both.\");\n }\n if (opts.defaultPreviewTemplate !== undefined) {\n patch.defaultPreviewTemplate = opts.defaultPreviewTemplate as string;\n }\n if (opts.clearDefaultPreviewTemplate) patch.defaultPreviewTemplate = null;\n if (opts.origins !== undefined && opts.clearOrigins) {\n throw new UsageError(\"Use either --origins or --clear-origins, not both.\");\n }\n if (opts.origins !== undefined) patch.origins = csv<string>(opts.origins as string);\n if (opts.clearOrigins) patch.origins = [];\n if (Object.keys(patch).length === 0) {\n throw new UsageError(\"Specify at least one project setting to update.\");\n }\n const project = await ctx.management().projects.update(ref, patch);\n emit(project, () => diag(`Updated ${project.slug}.`));\n }),\n );\n\n projects\n .command(\"archive\")\n .description(\"Archive a project\")\n .argument(\"[project]\", \"project id or slug\")\n .action(\n handle(async (ctx, args) => {\n const ref = (args[0] as string | undefined) ?? ctx.requireProject();\n const project = await ctx.management().projects.archive(ref);\n emit(project, () => diag(`Archived ${project.slug}.`));\n }),\n );\n}\n\nfunction registerKeys(program: Command): void {\n const keys = program.command(\"keys\").description(\"Manage API keys\");\n\n keys\n .command(\"list\")\n .description(\"List API keys for the project (or organization with --org-scope)\")\n .option(\"--org-scope\", \"list organization-scoped keys\", false)\n .action(\n handle(async (ctx, _args, opts) => {\n const list = opts.orgScope\n ? await ctx.management().apiKeys.listForOrganization(ctx.requireOrganization())\n : await ctx.management().apiKeys.listForProject(ctx.requireProject());\n emit(list, () =>\n table(list, [\n { header: \"ID\", value: (k) => k.id },\n { header: \"NAME\", value: (k) => k.name },\n { header: \"SCOPES\", value: (k) => k.scopes.join(\",\") },\n { header: \"REVOKED\", value: (k) => (k.revokedAt ? \"yes\" : \"\") },\n ]),\n );\n }),\n );\n\n keys\n .command(\"create\")\n .description(\"Create an API key (project-scoped by default)\")\n .requiredOption(\"--name <name>\", \"key name\")\n .requiredOption(\"--scopes <scopes>\", \"comma-separated scopes\")\n .option(\"--label <label>\", \"agent/integration label\")\n .option(\"--org-scope\", \"create an organization-scoped key\", false)\n .option(\"--expires-at <iso>\", \"expiry (ISO 8601)\")\n .action(\n handle(async (ctx, _args, opts) => {\n const body = {\n name: opts.name as string,\n scopes: csv<ApiKeyScope>(opts.scopes as string),\n label: opts.label as string | undefined,\n expiresAt: opts.expiresAt as string | undefined,\n };\n const result = opts.orgScope\n ? await ctx.management().apiKeys.createForOrganization(ctx.requireOrganization(), body)\n : await ctx.management().apiKeys.createForProject(ctx.requireProject(), body);\n emit(result, () => {\n diag(\"Store this secret now — it will not be shown again.\");\n keyValues([\n [\"ID\", result.key.id],\n [\"Name\", result.key.name],\n [\"Secret\", result.secret],\n ]);\n });\n }),\n );\n\n keys\n .command(\"revoke\")\n .description(\"Revoke an API key\")\n .argument(\"<id>\", \"key id (key_)\")\n .option(\"--org-scope\", \"revoke an organization-scoped key\", false)\n .action(\n handle(async (ctx, args, opts) => {\n if (opts.orgScope) {\n await ctx.management().apiKeys.revokeForOrganization(ctx.requireOrganization(), args[0] as string);\n } else {\n await ctx.management().apiKeys.revokeForProject(ctx.requireProject(), args[0] as string);\n }\n emit({ ok: true }, () => diag(`Revoked ${args[0] as string}.`));\n }),\n );\n}\n\nfunction registerMembers(program: Command): void {\n const members = program.command(\"members\").description(\"Manage organization members\");\n\n members\n .command(\"list\")\n .description(\"List members and pending invitations\")\n .action(\n handle(async (ctx) => {\n const org = ctx.requireOrganization();\n const [list, invites] = await Promise.all([\n ctx.management().members.list(org),\n ctx.management().invitations.list(org).catch(() => []),\n ]);\n emit({ members: list, invitations: invites }, () => {\n table(list, [\n { header: \"USER\", value: (m) => m.username ?? m.userId },\n { header: \"EMAIL\", value: (m) => m.email },\n { header: \"ROLE\", value: (m) => m.role },\n ]);\n if (invites.length > 0) {\n diag(\"\\nPending invitations:\");\n table(invites, [\n { header: \"EMAIL\", value: (i) => i.email },\n { header: \"ROLE\", value: (i) => i.role },\n { header: \"EXPIRES\", value: (i) => i.expiresAt },\n ]);\n }\n });\n }),\n );\n\n members\n .command(\"invite\")\n .description(\"Invite a member by email\")\n .requiredOption(\"--email <email>\", \"invitee email\")\n .requiredOption(\"--role <role>\", \"role (admin|editor|viewer)\")\n .action(\n handle(async (ctx, _args, opts) => {\n const invite = await ctx.management().invitations.create(ctx.requireOrganization(), {\n email: opts.email as string,\n role: opts.role as Exclude<OrgRole, \"owner\">,\n });\n emit(invite, () => diag(`Invited ${invite.email} as ${invite.role}.`));\n }),\n );\n\n members\n .command(\"update\")\n .description(\"Update a member's role\")\n .argument(\"<user>\", \"user id\")\n .requiredOption(\"--role <role>\", \"new role\")\n .action(\n handle(async (ctx, args, opts) => {\n await ctx.management().members.update(ctx.requireOrganization(), args[0] as string, {\n role: opts.role as OrgRole,\n });\n emit({ ok: true }, () => diag(`Updated ${args[0] as string} to ${opts.role as string}.`));\n }),\n );\n\n members\n .command(\"remove\")\n .description(\"Remove a member\")\n .argument(\"<user>\", \"user id\")\n .action(\n handle(async (ctx, args) => {\n await ctx.management().members.remove(ctx.requireOrganization(), args[0] as string);\n emit({ ok: true }, () => diag(`Removed ${args[0] as string}.`));\n }),\n );\n}\n\nfunction registerWebhooks(program: Command): void {\n const webhooks = program.command(\"webhooks\").description(\"Manage webhook endpoints\");\n\n webhooks\n .command(\"list\")\n .description(\"List webhook endpoints\")\n .action(\n handle(async (ctx) => {\n const list = await ctx.management().webhooks.list(ctx.requireProject());\n emit(list, () =>\n table(list, [\n { header: \"ID\", value: (w) => w.id },\n { header: \"URL\", value: (w) => w.url },\n { header: \"EVENTS\", value: (w) => w.events.join(\",\") },\n { header: \"ENABLED\", value: (w) => (w.enabled ? \"yes\" : \"no\") },\n ]),\n );\n }),\n );\n\n webhooks\n .command(\"create\")\n .description(\"Create a webhook endpoint\")\n .requiredOption(\"--url <url>\", \"endpoint URL\")\n .requiredOption(\"--events <events>\", \"comma-separated event types\")\n .action(\n handle(async (ctx, _args, opts) => {\n const result = await ctx.management().webhooks.create(ctx.requireProject(), {\n url: opts.url as string,\n events: csv<WebhookEventType>(opts.events as string),\n enabled: true,\n });\n emit(result, () => {\n diag(\"Store this signing secret now — it will not be shown again.\");\n keyValues([\n [\"ID\", result.endpoint.id],\n [\"URL\", result.endpoint.url],\n [\"Signing secret\", result.signingSecret],\n ]);\n });\n }),\n );\n\n webhooks\n .command(\"update\")\n .description(\"Update a webhook endpoint\")\n .argument(\"<id>\", \"webhook id\")\n .option(\"--url <url>\", \"new URL\")\n .option(\"--events <events>\", \"comma-separated event types\")\n .option(\"--enabled <bool>\", \"enable/disable (true|false)\")\n .action(\n handle(async (ctx, args, opts) => {\n const patch: { url?: string; events?: WebhookEventType[]; enabled?: boolean } = {};\n if (opts.url) patch.url = opts.url as string;\n if (opts.events) patch.events = csv<WebhookEventType>(opts.events as string);\n if (opts.enabled !== undefined) patch.enabled = opts.enabled === \"true\";\n const endpoint = await ctx.management().webhooks.update(ctx.requireProject(), args[0] as string, patch);\n emit(endpoint, () => diag(`Updated ${endpoint.id}.`));\n }),\n );\n\n webhooks\n .command(\"delete\")\n .description(\"Delete a webhook endpoint\")\n .argument(\"<id>\", \"webhook id\")\n .action(\n handle(async (ctx, args) => {\n await ctx.management().webhooks.delete(ctx.requireProject(), args[0] as string);\n emit({ ok: true }, () => diag(`Deleted ${args[0] as string}.`));\n }),\n );\n\n webhooks\n .command(\"deliveries\")\n .description(\"List recent deliveries for a webhook\")\n .argument(\"<id>\", \"webhook id\")\n .action(\n handle(async (ctx, args) => {\n const list = await ctx.management().webhooks.deliveries(ctx.requireProject(), args[0] as string);\n emit(list, () =>\n table(list, [\n { header: \"ID\", value: (d) => d.id },\n { header: \"EVENT\", value: (d) => d.eventType },\n { header: \"ATTEMPT\", value: (d) => String(d.attempt) },\n { header: \"STATUS\", value: (d) => d.status },\n { header: \"HTTP\", value: (d) => (d.responseStatus ? String(d.responseStatus) : \"\") },\n ]),\n );\n }),\n );\n\n webhooks\n .command(\"retry\")\n .description(\"Retry a webhook delivery\")\n .argument(\"<webhook>\", \"webhook id\")\n .argument(\"<delivery>\", \"delivery id\")\n .action(\n handle(async (ctx, args) => {\n await ctx.management().webhooks.retry(ctx.requireProject(), args[0] as string, args[1] as string);\n emit({ ok: true }, () => diag(`Retrying delivery ${args[1] as string}.`));\n }),\n );\n}\n\nfunction registerActivity(program: Command): void {\n program\n .command(\"activity\")\n .description(\"Show the project activity feed\")\n .option(\"--actor-type <type>\", \"filter by actor type\")\n .option(\"--action <action>\", \"filter by action\")\n .option(\"--limit <n>\", \"page size\", \"25\")\n .action(\n handle(async (ctx, _args, opts) => {\n const page = await ctx.management().activity(ctx.requireProject(), {\n actorType: opts.actorType as string | undefined,\n action: opts.action as string | undefined,\n limit: Number(opts.limit),\n });\n emit({ data: page.data, nextCursor: page.nextCursor }, () =>\n table(page.data, [\n { header: \"WHEN\", value: (a) => a.createdAt },\n { header: \"ACTOR\", value: (a) => a.actorType },\n { header: \"ACTION\", value: (a) => a.action },\n { header: \"TARGET\", value: (a) => `${a.targetType ?? \"\"} ${a.targetId ?? \"\"}`.trim() },\n ]),\n );\n }),\n );\n}\n\nfunction registerBilling(program: Command): void {\n const billing = program.command(\"billing\").description(\"Billing status and management\");\n\n billing\n .command(\"status\")\n .description(\"Show the organization's plan and usage\")\n .action(\n handle(async (ctx) => {\n const org = ctx.requireOrganization();\n const [status, usage] = await Promise.all([\n ctx.management().billing.status(org),\n ctx.management().organizations.usage(org).catch(() => undefined),\n ]);\n emit({ billing: status, usage }, () => {\n keyValues([\n [\"Plan\", status.subscription.planKey],\n [\"Status\", status.subscription.status],\n [\"Provider customer\", status.hasProviderCustomer ? \"yes\" : \"no\"],\n ]);\n if (usage) {\n diag(\"\\nUsage:\");\n table(usage.metrics, [\n { header: \"METRIC\", value: (m) => m.metric },\n { header: \"USED\", value: (m) => String(m.quantity) },\n { header: \"LIMIT\", value: (m) => (m.limit === null ? \"∞\" : String(m.limit)) },\n ]);\n }\n });\n }),\n );\n\n billing\n .command(\"upgrade\")\n .description(\"Start a Pro checkout\")\n .option(\"--interval <interval>\", \"month|year\", \"month\")\n .action(\n handle(async (ctx, _args, opts) => {\n const result = await ctx.management().billing.checkout(ctx.requireOrganization(), {\n interval: (opts.interval as \"month\" | \"year\") ?? \"month\",\n });\n if (ctx.interactive) openBrowser(result.checkoutUrl);\n emit(result, () => process.stdout.write(`${result.checkoutUrl}\\n`));\n }),\n );\n\n billing\n .command(\"portal\")\n .description(\"Open the billing portal\")\n .action(\n handle(async (ctx) => {\n const result = await ctx.management().billing.portal(ctx.requireOrganization());\n if (ctx.interactive) openBrowser(result.portalUrl);\n emit(result, () => process.stdout.write(`${result.portalUrl}\\n`));\n }),\n );\n}\n"],"mappings":"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","names":["query","resolve","query","bytes","DEFAULT_API_URL","readFileSync","platform","readFileSync","platform","sleep","existsSync","mkdirSync","writeFileSync","join","mkdirSync","join","existsSync","writeFileSync","DEFAULT_API_URL","mkdirSync","writeFileSync","join","existsSync","join","resolve","existsSync","join","resolve","mkdirSync","join","writeFileSync","readFile","readFile"]}