@timbenniks/contentstack-platform-sdk 0.1.4 → 0.1.7
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/README.md +11 -11
- package/dist/auth/index.cjs +179 -0
- package/dist/auth/index.cjs.map +1 -1
- package/dist/auth/index.d.cts +2 -1
- package/dist/auth/index.d.ts +2 -1
- package/dist/auth/index.mjs +5 -1
- package/dist/{chunk-2BOUGPJ5.mjs → chunk-DTMY6LNR.mjs} +4 -4
- package/dist/{chunk-OGTRGKYK.mjs → chunk-G4JKXIL2.mjs} +4 -4
- package/dist/chunk-K3QIVKGD.mjs +430 -0
- package/dist/chunk-K3QIVKGD.mjs.map +1 -0
- package/dist/{chunk-NKLOZ5VI.mjs → chunk-V33LD4WS.mjs} +1 -1
- package/dist/chunk-V33LD4WS.mjs.map +1 -0
- package/dist/{chunk-SU5QEKYW.mjs → chunk-VLZEA5NW.mjs} +3 -3
- package/dist/chunk-VLZEA5NW.mjs.map +1 -0
- package/dist/{chunk-3C6J2BDB.mjs → chunk-WFPYU6CJ.mjs} +1 -1
- package/dist/chunk-WFPYU6CJ.mjs.map +1 -0
- package/dist/index.cjs +179 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +8 -4
- package/dist/react/auth/index.cjs.map +1 -1
- package/dist/react/auth/index.d.cts +2 -2
- package/dist/react/auth/index.d.ts +2 -2
- package/dist/react/auth/index.mjs +1 -1
- package/dist/react/hooks/index.mjs +3 -3
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.mjs +4 -4
- package/dist/server/index.cjs +1 -1
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.d.cts +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.mjs +3 -3
- package/dist/server/middleware/index.cjs +1 -1
- package/dist/server/middleware/index.cjs.map +1 -1
- package/dist/server/middleware/index.d.cts +3 -2
- package/dist/server/middleware/index.d.ts +3 -2
- package/dist/server/middleware/index.mjs +3 -3
- package/dist/server/proxy/index.mjs +2 -2
- package/dist/server/webhooks/index.mjs +2 -2
- package/dist/types-BPoq1WOf.d.cts +83 -0
- package/dist/types-CUCWv0Vp.d.ts +83 -0
- package/dist/vue/auth/index.cjs.map +1 -1
- package/dist/vue/auth/index.d.cts +4 -4
- package/dist/vue/auth/index.d.ts +4 -4
- package/dist/vue/auth/index.mjs +1 -1
- package/dist/vue/composables/index.mjs +3 -3
- package/dist/vue/index.cjs.map +1 -1
- package/dist/vue/index.d.cts +1 -1
- package/dist/vue/index.d.ts +1 -1
- package/dist/vue/index.mjs +7 -7
- package/package.json +10 -3
- package/dist/chunk-3C6J2BDB.mjs.map +0 -1
- package/dist/chunk-NKLOZ5VI.mjs.map +0 -1
- package/dist/chunk-SU5QEKYW.mjs.map +0 -1
- package/dist/chunk-VW7DD6HV.mjs +0 -253
- package/dist/chunk-VW7DD6HV.mjs.map +0 -1
- package/dist/types-6D9VR7pT.d.cts +0 -26
- package/dist/types-Bu5yCgmw.d.ts +0 -26
- /package/dist/{chunk-2BOUGPJ5.mjs.map → chunk-DTMY6LNR.mjs.map} +0 -0
- /package/dist/{chunk-OGTRGKYK.mjs.map → chunk-G4JKXIL2.mjs.map} +0 -0
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/http/errors.ts","../src/regions/endpoints.ts","../src/regions/resolver.ts","../src/http/parse-error.ts","../src/http/client.ts","../src/auth/pkce.ts","../src/auth/oauth-client.ts","../src/cma/pagination.ts","../src/cma/assets.ts","../src/cma/base-client.ts","../src/cma/audit-log.ts","../src/cma/branch-aliases.ts","../src/cma/branches.ts","../src/cma/bulk.ts","../src/cma/content-types.ts","../src/cma/entries.ts","../src/cma/environments.ts","../src/cma/extensions.ts","../src/cma/global-fields.ts","../src/cma/labels.ts","../src/cma/locales.ts","../src/cma/publish-rules.ts","../src/cma/releases.ts","../src/cma/roles.ts","../src/cma/taxonomies.ts","../src/cma/tokens.ts","../src/cma/webhooks.ts","../src/cma/workflows.ts","../src/cma/client.ts","../src/cma/request-builders.ts","../src/images/builder.ts","../src/rte/to-html.ts","../src/rte/utils.ts","../src/rte/serializer.ts","../src/rte/to-markdown.ts","../src/rte/to-plaintext.ts","../src/rte/from-html.ts","../src/rte/transform.ts","../src/rte/validate.ts","../src/launch/response.ts","../src/launch/deployments.ts","../src/launch/environments.ts","../src/launch/projects.ts","../src/launch/client.ts","../src/brandkit/brand-kits.ts","../src/brandkit/voice-profiles.ts","../src/brandkit/client.ts","../src/knowledge-vault/items.ts","../src/knowledge-vault/client.ts","../src/generative-ai/client.ts"],"sourcesContent":["export * from \"./regions/index.js\"\nexport * from \"./http/index.js\"\nexport * from \"./auth/index.js\"\nexport * from \"./cma/index.js\"\nexport * from \"./images/index.js\"\nexport * from \"./rte/index.js\"\nexport * from \"./launch/index.js\"\nexport * from \"./brandkit/index.js\"\nexport * from \"./knowledge-vault/index.js\"\nexport * from \"./generative-ai/index.js\"\n","/**\n * Base error class for all Contentstack SDK errors.\n * Every error includes an actionable message and relevant context.\n */\nexport class ContentstackError extends Error {\n override readonly name: string = \"ContentstackError\"\n readonly status?: number\n readonly errorCode?: number\n readonly errors?: Record<string, string[]>\n readonly requestPath?: string\n\n constructor(\n message: string,\n options?: {\n status?: number\n errorCode?: number\n errors?: Record<string, string[]>\n requestPath?: string\n cause?: Error\n },\n ) {\n super(message, options?.cause ? { cause: options.cause } : undefined)\n this.status = options?.status\n this.errorCode = options?.errorCode\n this.errors = options?.errors\n this.requestPath = options?.requestPath\n }\n}\n\nexport class ContentstackAuthError extends ContentstackError {\n override readonly name = \"ContentstackAuthError\"\n override readonly status = 401\n}\n\nexport class ContentstackForbiddenError extends ContentstackError {\n override readonly name = \"ContentstackForbiddenError\"\n override readonly status = 403\n}\n\nexport class ContentstackNotFoundError extends ContentstackError {\n override readonly name = \"ContentstackNotFoundError\"\n override readonly status = 404\n}\n\nexport class ContentstackValidationError extends ContentstackError {\n override readonly name = \"ContentstackValidationError\"\n override readonly status: number\n\n constructor(\n message: string,\n options?: {\n status?: number\n errorCode?: number\n errors?: Record<string, string[]>\n requestPath?: string\n cause?: Error\n },\n ) {\n super(message, options)\n this.status = options?.status ?? 400\n }\n}\n\nexport class ContentstackInvalidApiKeyError extends ContentstackError {\n override readonly name = \"ContentstackInvalidApiKeyError\"\n override readonly status = 412\n}\n\nexport class ContentstackRateLimitError extends ContentstackError {\n override readonly name = \"ContentstackRateLimitError\"\n override readonly status = 429\n readonly retryAfter?: number\n\n constructor(\n message: string,\n options?: {\n errorCode?: number\n errors?: Record<string, string[]>\n requestPath?: string\n cause?: Error\n retryAfter?: number\n },\n ) {\n super(message, { ...options, status: 429 })\n this.retryAfter = options?.retryAfter\n }\n}\n\nexport class ContentstackServerError extends ContentstackError {\n override readonly name = \"ContentstackServerError\"\n}\n\nexport class ContentstackConfigError extends ContentstackError {\n override readonly name = \"ContentstackConfigError\"\n}\n","import {\n type ContentstackEndpoints as UpstreamEndpoints,\n getContentstackEndpoints,\n getRegionForString,\n} from \"@timbenniks/contentstack-endpoints\"\nimport type { ContentstackEndpoints, ContentstackRegion } from \"./resolver.js\"\n\n/** Brand Kit endpoints not available in upstream package — maintained locally */\nconst BRAND_KIT_URLS: Record<ContentstackRegion, { brandKit: string; brandKitAI: string }> = {\n us: {\n brandKit: \"https://brand-kits-api.contentstack.com\",\n brandKitAI: \"https://ai.contentstack.com/brand-kits\",\n },\n eu: {\n brandKit: \"https://eu-brand-kits-api.contentstack.com\",\n brandKitAI: \"https://eu-ai.contentstack.com/brand-kits\",\n },\n au: {\n brandKit: \"https://au-brand-kits-api.contentstack.com\",\n brandKitAI: \"https://au-ai.contentstack.com/brand-kits\",\n },\n \"azure-na\": {\n brandKit: \"https://azure-na-brand-kits-api.contentstack.com\",\n brandKitAI: \"https://azure-na-ai.contentstack.com/brand-kits\",\n },\n \"azure-eu\": {\n brandKit: \"https://azure-eu-brand-kits-api.contentstack.com\",\n brandKitAI: \"https://azure-eu-ai.contentstack.com/brand-kits\",\n },\n \"gcp-na\": {\n brandKit: \"https://gcp-na-brand-kits-api.contentstack.com\",\n brandKitAI: \"https://gcp-na-ai.contentstack.com/brand-kits\",\n },\n \"gcp-eu\": {\n brandKit: \"https://gcp-eu-brand-kits-api.contentstack.com\",\n brandKitAI: \"https://gcp-eu-ai.contentstack.com/brand-kits\",\n },\n}\n\nfunction mapEndpoints(\n upstream: UpstreamEndpoints,\n region: ContentstackRegion,\n hostsOnly: boolean,\n): ContentstackEndpoints {\n const bk = BRAND_KIT_URLS[region]\n const stripProtocol = (url: string) => url.replace(/^https?:\\/\\//, \"\")\n\n return Object.freeze({\n cma: upstream.contentManagement ?? \"\",\n cda: upstream.contentDelivery ?? \"\",\n graphql: upstream.graphqlDelivery ?? \"\",\n images: upstream.images ?? \"\",\n app: upstream.application ?? \"\",\n preview: upstream.preview ?? \"\",\n graphqlPreview: upstream.graphqlPreview ?? \"\",\n launch: upstream.launch ?? \"\",\n personalizeEdge: upstream.personalizeEdge ?? \"\",\n brandKit: hostsOnly ? stripProtocol(bk.brandKit) : bk.brandKit,\n brandKitAI: hostsOnly ? stripProtocol(bk.brandKitAI) : bk.brandKitAI,\n })\n}\n\nconst ALL_REGIONS: ContentstackRegion[] = [\n \"us\",\n \"eu\",\n \"au\",\n \"azure-na\",\n \"azure-eu\",\n \"gcp-na\",\n \"gcp-eu\",\n]\n\nfunction buildEndpointMap(): Record<ContentstackRegion, ContentstackEndpoints> {\n const map = {} as Record<ContentstackRegion, ContentstackEndpoints>\n for (const region of ALL_REGIONS) {\n map[region] = mapEndpoints(getContentstackEndpoints(region), region, false)\n }\n return Object.freeze(map)\n}\n\nfunction buildHostMap(): Record<ContentstackRegion, ContentstackEndpoints> {\n const map = {} as Record<ContentstackRegion, ContentstackEndpoints>\n for (const region of ALL_REGIONS) {\n map[region] = mapEndpoints(getContentstackEndpoints(region, true), region, true)\n }\n return Object.freeze(map)\n}\n\nexport const ENDPOINT_MAP = buildEndpointMap()\nexport const HOST_MAP = buildHostMap()\n\n/** Check if a string is a valid region via the upstream package */\nexport function isValidRegion(input: string): boolean {\n return getRegionForString(input) !== undefined\n}\n\n/** Map of extra aliases our SDK supports beyond what the upstream package handles */\nexport const EXTRA_ALIASES: Record<string, ContentstackRegion> = {\n \"north-america\": \"us\",\n europe: \"eu\",\n australia: \"au\",\n}\n","import { ContentstackConfigError } from \"../http/errors.js\"\nimport { ENDPOINT_MAP, EXTRA_ALIASES, HOST_MAP, isValidRegion } from \"./endpoints.js\"\n\n/** All 7 Contentstack regions */\nexport type ContentstackRegion = \"us\" | \"eu\" | \"au\" | \"azure-na\" | \"azure-eu\" | \"gcp-na\" | \"gcp-eu\"\n\n/** Resolved endpoint URLs for a region */\nexport interface ContentstackEndpoints {\n /** CMA base URL, e.g. \"https://api.contentstack.io\" */\n cma: string\n /** CDA REST base URL, e.g. \"https://cdn.contentstack.io\" */\n cda: string\n /** GraphQL CDA endpoint */\n graphql: string\n /** Asset/image delivery base URL */\n images: string\n /** Application URL (for OAuth), e.g. \"https://app.contentstack.com\" */\n app: string\n /** Preview API base URL */\n preview: string\n /** GraphQL preview endpoint */\n graphqlPreview: string\n /** Launch API base URL */\n launch: string\n /** Personalize edge endpoint */\n personalizeEdge: string\n /** Brand Kit Management API base URL */\n brandKit: string\n /** Brand Kit GenAI and Knowledge Vault base URL */\n brandKitAI: string\n}\n\nconst VALID_REGIONS = new Set<string>(Object.keys(ENDPOINT_MAP))\n\n/**\n * Resolve all API endpoints for a Contentstack region.\n *\n * @example\n * ```ts\n * const endpoints = resolveEndpoints(\"eu\");\n * // endpoints.cma === \"https://eu-api.contentstack.com\"\n * // endpoints.app === \"https://eu-app.contentstack.com\"\n * ```\n */\nexport function resolveEndpoints(region: ContentstackRegion): ContentstackEndpoints {\n return ENDPOINT_MAP[region]\n}\n\n/**\n * Resolve endpoints with https:// stripped (for SDK host parameters).\n *\n * @example\n * ```ts\n * const hosts = resolveHosts(\"eu\");\n * // hosts.cda === \"eu-cdn.contentstack.com\"\n * ```\n */\nexport function resolveHosts(region: ContentstackRegion): ContentstackEndpoints {\n return HOST_MAP[region]\n}\n\n/**\n * Normalize region aliases: \"na\" → \"us\", \"NA\" → \"us\", etc.\n * Case-insensitive. Throws ContentstackConfigError for unknown regions.\n */\nexport function normalizeRegion(input: string): ContentstackRegion {\n const lower = input.toLowerCase().trim()\n\n if (VALID_REGIONS.has(lower)) {\n return lower as ContentstackRegion\n }\n\n // Check extra aliases our SDK supports (north-america, europe, australia)\n const extraAlias = EXTRA_ALIASES[lower]\n if (extraAlias) {\n return extraAlias\n }\n\n // Check aliases handled by the upstream package (na, us, aws-na, etc.)\n if (isValidRegion(lower)) {\n // The upstream package recognized it — map back to our canonical region\n // \"na\" and \"us\" both map to the NA region which we call \"us\"\n if (lower === \"na\" || lower === \"aws-na\" || lower === \"aws_na\") return \"us\"\n if (lower === \"aws-eu\" || lower === \"aws_eu\") return \"eu\"\n if (lower === \"aws-au\" || lower === \"aws_au\") return \"au\"\n if (lower === \"azure_na\") return \"azure-na\"\n if (lower === \"azure_eu\") return \"azure-eu\"\n if (lower === \"gcp_na\") return \"gcp-na\"\n if (lower === \"gcp_eu\") return \"gcp-eu\"\n }\n\n const validRegions = [...VALID_REGIONS].join(\", \")\n const validAliases = [...Object.keys(EXTRA_ALIASES), \"na\", \"aws-na\", \"aws-eu\", \"aws-au\"].join(\n \", \",\n )\n throw new ContentstackConfigError(\n `Unknown region \"${input}\". Valid regions: ${validRegions}. Aliases: ${validAliases}.`,\n )\n}\n\nexport { ContentstackConfigError }\n","import { ContentstackError } from \"./errors.js\"\n\n/**\n * Parse a non-ok fetch Response into a ContentstackError.\n *\n * Handles the Contentstack API error format (error_message, error_code, errors)\n * and falls back to the HTTP status text when the body is not parseable.\n *\n * This is a shared utility used by React hooks and Vue composables to avoid\n * duplicating error-parsing logic across frameworks.\n */\nexport async function parseErrorResponse(\n response: Response,\n path: string,\n): Promise<ContentstackError> {\n try {\n const body = await response.json()\n return new ContentstackError(body.error_message ?? body.message ?? response.statusText, {\n status: response.status,\n errorCode: body.error_code,\n errors: body.errors,\n requestPath: path,\n })\n } catch {\n return new ContentstackError(response.statusText, {\n status: response.status,\n requestPath: path,\n })\n }\n}\n","import {\n ContentstackAuthError,\n ContentstackError,\n ContentstackForbiddenError,\n ContentstackInvalidApiKeyError,\n ContentstackNotFoundError,\n ContentstackRateLimitError,\n ContentstackServerError,\n ContentstackValidationError,\n} from \"./errors.js\"\nimport type { HttpClientConfig, HttpResponse } from \"./types.js\"\n\nconst DEFAULT_TIMEOUT = 30_000\nconst DEFAULT_RETRY_LIMIT = 5\nconst DEFAULT_RETRY_DELAY = 300\nconst MAX_JITTER = 100\n\nexport class ContentstackHttpClient {\n private readonly config: Required<\n Pick<HttpClientConfig, \"baseUrl\" | \"timeout\" | \"retryOnError\" | \"retryLimit\" | \"retryDelay\">\n > & {\n headers: Record<string, string>\n fetch: typeof globalThis.fetch\n }\n\n constructor(config: HttpClientConfig) {\n this.config = {\n baseUrl: config.baseUrl,\n headers: config.headers ?? {},\n timeout: config.timeout ?? DEFAULT_TIMEOUT,\n retryOnError: config.retryOnError ?? true,\n retryLimit: config.retryLimit ?? DEFAULT_RETRY_LIMIT,\n retryDelay: config.retryDelay ?? DEFAULT_RETRY_DELAY,\n fetch: config.fetch ?? globalThis.fetch.bind(globalThis),\n }\n }\n\n async get<T>(path: string, params?: Record<string, string>): Promise<HttpResponse<T>> {\n let url = `${this.config.baseUrl}${path}`\n if (params) {\n const searchParams = new URLSearchParams(params)\n url += `?${searchParams.toString()}`\n }\n return this.request<T>(url, { method: \"GET\" }, path)\n }\n\n async post<T>(path: string, body?: unknown): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(\n url,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n },\n path,\n )\n }\n\n async put<T>(path: string, body?: unknown): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(\n url,\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n },\n path,\n )\n }\n\n async patch<T>(path: string, body?: unknown): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(\n url,\n {\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n },\n path,\n )\n }\n\n async delete<T>(path: string): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(url, { method: \"DELETE\" }, path)\n }\n\n async postForm<T>(path: string, params: URLSearchParams): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(\n url,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: params.toString(),\n },\n path,\n )\n }\n\n async upload<T>(path: string, form: FormData): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(url, { method: \"POST\", body: form }, path)\n }\n\n /** Return a new client with additional headers merged */\n withHeaders(headers: Record<string, string>): ContentstackHttpClient {\n return new ContentstackHttpClient({\n ...this.config,\n headers: { ...this.config.headers, ...headers },\n })\n }\n\n /** Return a new client with a different base URL */\n withBaseUrl(baseUrl: string): ContentstackHttpClient {\n return new ContentstackHttpClient({\n ...this.config,\n baseUrl,\n })\n }\n\n private async request<T>(url: string, init: RequestInit, path: string): Promise<HttpResponse<T>> {\n const headers = new Headers(this.config.headers)\n\n if (init.headers) {\n const initHeaders =\n init.headers instanceof Headers\n ? init.headers\n : new Headers(init.headers as Record<string, string>)\n initHeaders.forEach((value, key) => headers.set(key, value))\n }\n\n let lastError: Error | undefined\n const maxAttempts = this.config.retryOnError ? this.config.retryLimit + 1 : 1\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout)\n\n try {\n const response = await this.config.fetch(url, {\n ...init,\n headers,\n signal: controller.signal,\n })\n\n if (response.ok) {\n const data = (await response.json().catch(() => ({}))) as T\n return { data, status: response.status, headers: response.headers }\n }\n\n // Check if retryable\n const isRetryable = response.status === 429 || response.status >= 500\n if (isRetryable && this.config.retryOnError && attempt < maxAttempts - 1) {\n const delay = this.calculateDelay(response, attempt)\n await sleep(delay)\n lastError = await this.createError(response, path)\n continue\n }\n\n throw await this.createError(response, path)\n } catch (error) {\n if (error instanceof ContentstackError) {\n throw error\n }\n\n if (error instanceof DOMException && error.name === \"AbortError\") {\n throw new ContentstackError(`Request timed out after ${this.config.timeout}ms`, {\n requestPath: path,\n cause: error,\n })\n }\n\n throw new ContentstackError(\"Network request failed\", {\n requestPath: path,\n cause: error instanceof Error ? error : new Error(String(error)),\n })\n } finally {\n clearTimeout(timeoutId)\n }\n }\n\n // Should not reach here, but just in case\n throw lastError ?? new ContentstackError(\"Request failed after retries\", { requestPath: path })\n }\n\n private calculateDelay(response: Response, attempt: number): number {\n const retryAfter = response.headers.get(\"Retry-After\")\n if (retryAfter) {\n const seconds = Number.parseFloat(retryAfter)\n if (!Number.isNaN(seconds)) {\n return seconds * 1000\n }\n }\n\n const jitter = Math.random() * MAX_JITTER\n return this.config.retryDelay * 2 ** attempt + jitter\n }\n\n private async createError(response: Response, path: string): Promise<ContentstackError> {\n let body: Record<string, unknown> = {}\n try {\n body = (await response.json()) as Record<string, unknown>\n } catch {\n // Response body may not be JSON\n }\n\n const message =\n (body.error_message as string | undefined) ??\n (body.error_description as string | undefined) ??\n (body.message as string | undefined) ??\n `HTTP ${response.status} error`\n const errorCode = body.error_code as number | undefined\n const errors = body.errors as Record<string, string[]> | undefined\n const retryAfter = response.headers.get(\"Retry-After\")\n\n const opts = { status: response.status, errorCode, errors, requestPath: path }\n\n switch (response.status) {\n case 400:\n return new ContentstackValidationError(message, { ...opts, status: 400 })\n case 401:\n return new ContentstackAuthError(message, opts)\n case 403:\n return new ContentstackForbiddenError(message, opts)\n case 404:\n return new ContentstackNotFoundError(message, opts)\n case 412:\n return new ContentstackInvalidApiKeyError(message, opts)\n case 422:\n return new ContentstackValidationError(message, { ...opts, status: 422 })\n case 429:\n return new ContentstackRateLimitError(message, {\n ...opts,\n retryAfter: retryAfter ? Number.parseFloat(retryAfter) : undefined,\n })\n default:\n if (response.status >= 500) {\n return new ContentstackServerError(message, opts)\n }\n return new ContentstackError(message, opts)\n }\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n","const CHARSET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~\"\n\n/**\n * Generate a cryptographically random code verifier for PKCE.\n * Returns a 43-character URL-safe string (the minimum length per RFC 7636).\n * Uses globalThis.crypto for cross-runtime compatibility (Node 18+, Deno, Bun, edge).\n */\nexport function generateCodeVerifier(): string {\n const bytes = new Uint8Array(43)\n globalThis.crypto.getRandomValues(bytes)\n let result = \"\"\n for (const byte of bytes) {\n result += CHARSET[byte % CHARSET.length]\n }\n return result\n}\n\n/**\n * Compute an S256 code challenge from a code verifier.\n * SHA-256 hash → base64url encoded (no padding).\n * Uses globalThis.crypto.subtle for cross-runtime compatibility.\n */\nexport async function generateCodeChallenge(verifier: string): Promise<string> {\n const encoder = new TextEncoder()\n const data = encoder.encode(verifier)\n const digest = await globalThis.crypto.subtle.digest(\"SHA-256\", data)\n const bytes = new Uint8Array(digest)\n let binary = \"\"\n for (const byte of bytes) {\n binary += String.fromCharCode(byte)\n }\n return btoa(binary).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\")\n}\n","import { ContentstackHttpClient } from \"../http/client.js\"\nimport {\n ContentstackAuthError,\n ContentstackConfigError,\n ContentstackError,\n} from \"../http/errors.js\"\nimport type { ContentstackRegion } from \"../regions/index.js\"\nimport { resolveEndpoints } from \"../regions/index.js\"\nimport { generateCodeChallenge, generateCodeVerifier } from \"./pkce.js\"\nimport type { ContentstackUser, OAuthConfig, OAuthTokens } from \"./types.js\"\n\ninterface AuthorizationUrlOptions {\n state?: string\n usePKCE?: boolean\n}\n\ninterface AuthorizationUrlResult {\n url: string\n state: string\n codeVerifier?: string\n}\n\ninterface ExchangeCodeOptions {\n codeVerifier?: string\n}\n\nfunction validateConfig(config: OAuthConfig): void {\n if (!config.appId) {\n throw new ContentstackConfigError(\n \"appId is required for OAuth. This is your Contentstack app's UID, not the client ID.\",\n )\n }\n if (config.appId === config.clientId) {\n throw new ContentstackConfigError(\n \"appId and clientId must be different. appId is your Contentstack app UID; clientId is the OAuth client identifier.\",\n )\n }\n}\n\n/**\n * Build a Contentstack OAuth authorization URL.\n *\n * @example\n * ```ts\n * const { url, state, codeVerifier } = await buildAuthorizationUrl({\n * region: \"us\",\n * appId: \"app-uid\",\n * clientId: \"client-id\",\n * clientSecret: \"secret\",\n * scopes: [\"user:read\"],\n * redirectUri: \"http://localhost:3000/api/auth/callback/contentstack\",\n * }, { usePKCE: true })\n * ```\n */\nexport async function buildAuthorizationUrl(\n config: OAuthConfig,\n options?: AuthorizationUrlOptions,\n): Promise<AuthorizationUrlResult> {\n validateConfig(config)\n\n const endpoints = resolveEndpoints(config.region)\n const authorizationUrl = `${endpoints.app}/apps/${config.appId}/authorize`\n\n const state = options?.state ?? generateCodeVerifier()\n\n const params = new URLSearchParams({\n response_type: \"code\",\n client_id: config.clientId,\n redirect_uri: config.redirectUri,\n scope: config.scopes.join(\" \"),\n state,\n })\n\n let codeVerifier: string | undefined\n if (options?.usePKCE) {\n codeVerifier = generateCodeVerifier()\n const codeChallenge = await generateCodeChallenge(codeVerifier)\n params.set(\"code_challenge\", codeChallenge)\n params.set(\"code_challenge_method\", \"S256\")\n }\n\n return {\n url: `${authorizationUrl}?${params.toString()}`,\n state,\n codeVerifier,\n }\n}\n\nfunction mapTokenResponse(data: Record<string, unknown>): OAuthTokens {\n return {\n accessToken: data.access_token as string,\n refreshToken: data.refresh_token as string,\n expiresIn: data.expires_in as number,\n tokenType: data.token_type as string,\n }\n}\n\nasync function makeTokenRequest(\n appBaseUrl: string,\n body: URLSearchParams,\n errorMessage: string,\n): Promise<OAuthTokens> {\n const client = new ContentstackHttpClient({ baseUrl: appBaseUrl })\n try {\n const { data } = await client.postForm<Record<string, unknown>>(\"/apps-api/token\", body)\n return mapTokenResponse(data)\n } catch (err) {\n if (err instanceof ContentstackError) {\n throw new ContentstackAuthError(err.message || errorMessage, {\n status: err.status,\n requestPath: \"/apps-api/token\",\n cause: err,\n })\n }\n throw new ContentstackAuthError(errorMessage, {\n requestPath: \"/apps-api/token\",\n cause: err instanceof Error ? err : undefined,\n })\n }\n}\n\n/**\n * Exchange an authorization code for OAuth tokens.\n */\nexport async function exchangeCode(\n config: OAuthConfig,\n code: string,\n options?: ExchangeCodeOptions,\n): Promise<OAuthTokens> {\n const endpoints = resolveEndpoints(config.region)\n\n const body = new URLSearchParams({\n grant_type: \"authorization_code\",\n code,\n redirect_uri: config.redirectUri,\n client_id: config.clientId,\n client_secret: config.clientSecret,\n })\n\n if (options?.codeVerifier) {\n body.set(\"code_verifier\", options.codeVerifier)\n }\n\n return makeTokenRequest(endpoints.app, body, \"Failed to exchange authorization code\")\n}\n\n/**\n * Refresh an expired access token using a refresh token.\n */\nexport async function refreshToken(config: OAuthConfig, token: string): Promise<OAuthTokens> {\n const endpoints = resolveEndpoints(config.region)\n\n const body = new URLSearchParams({\n grant_type: \"refresh_token\",\n refresh_token: token,\n client_id: config.clientId,\n client_secret: config.clientSecret,\n })\n\n return makeTokenRequest(endpoints.app, body, \"Failed to refresh token\")\n}\n\nfunction mapUser(user: Record<string, unknown>): ContentstackUser {\n return {\n uid: user.uid as string,\n email: user.email as string,\n firstName: (user.first_name as string) ?? undefined,\n lastName: (user.last_name as string) ?? undefined,\n username: (user.username as string) ?? undefined,\n profileImage: (user.profile_image as string) ?? undefined,\n }\n}\n\n/**\n * Fetch the authenticated user's profile from Contentstack.\n * Unwraps the nested `user` key and maps snake_case → camelCase.\n */\nexport async function getUser(\n region: ContentstackRegion,\n accessToken: string,\n): Promise<ContentstackUser> {\n const endpoints = resolveEndpoints(region)\n const client = new ContentstackHttpClient({\n baseUrl: `${endpoints.cma}/v3`,\n headers: { Authorization: `Bearer ${accessToken}` },\n })\n\n try {\n const { data } = await client.get<{ user: Record<string, unknown> }>(\"/user\")\n return mapUser(data.user)\n } catch (err) {\n if (err instanceof ContentstackError) {\n throw new ContentstackAuthError(err.message || \"Failed to fetch user profile\", {\n status: err.status,\n requestPath: \"/v3/user\",\n cause: err,\n })\n }\n throw new ContentstackAuthError(\"Failed to fetch user profile\", {\n requestPath: \"/v3/user\",\n cause: err instanceof Error ? err : undefined,\n })\n }\n}\n\n/**\n * Create an Auth.js v5 provider config object for Contentstack.\n *\n * No Auth.js dependency is required in this package — the returned object\n * conforms to the Auth.js OAuthConfig shape and can be passed directly to\n * `next-auth` or `@auth/core`.\n *\n * @example\n * ```ts\n * // app/api/auth/[...nextauth]/route.ts\n * import NextAuth from \"next-auth\"\n * import { createAuthProvider } from \"@timbenniks/contentstack-platform-sdk/auth\"\n *\n * export const { handlers, signIn, signOut, auth } = NextAuth({\n * providers: [createAuthProvider({ region: \"us\", appId: \"...\", ... })],\n * })\n * ```\n */\nexport function createAuthProvider(config: OAuthConfig): Record<string, unknown> {\n validateConfig(config)\n\n const endpoints = resolveEndpoints(config.region)\n const userClient = new ContentstackHttpClient({ baseUrl: `${endpoints.cma}/v3` })\n\n return {\n id: \"contentstack\",\n name: \"Contentstack\",\n type: \"oauth\",\n checks: [\"state\"],\n authorization: {\n url: `${endpoints.app}/apps/${config.appId}/authorize`,\n params: {\n response_type: \"code\",\n scope: config.scopes.join(\" \"),\n },\n },\n token: `${endpoints.app}/apps-api/token`,\n userinfo: {\n url: `${endpoints.cma}/v3/user`,\n async request({ tokens }: { tokens: { access_token: string } }) {\n const authedClient = userClient.withHeaders({\n Authorization: `Bearer ${tokens.access_token}`,\n })\n const { data } = await authedClient.get<Record<string, unknown>>(\"/user\")\n return data\n },\n },\n profile(profile: { user: Record<string, unknown> }) {\n const user = profile.user\n return {\n id: user.uid as string,\n name:\n [user.first_name, user.last_name].filter(Boolean).join(\" \") || (user.username as string),\n email: user.email as string,\n image: (user.profile_image as string) ?? null,\n }\n },\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n }\n}\n\n/**\n * Create Auth.js v5 callbacks for token persistence and automatic refresh.\n *\n * The `jwt` callback persists OAuth tokens on initial sign-in and attempts\n * to refresh expired tokens (with a 60-second safety window).\n *\n * The `session` callback exposes the access token and any refresh errors\n * on the session object.\n *\n * @example\n * ```ts\n * import NextAuth from \"next-auth\"\n * import { createAuthProvider, contentstackAuthCallbacks } from \"@timbenniks/contentstack-platform-sdk/auth\"\n *\n * export const { handlers, auth } = NextAuth({\n * providers: [createAuthProvider({ ... })],\n * callbacks: contentstackAuthCallbacks({ region: \"us\", ... }),\n * })\n * ```\n */\nexport function contentstackAuthCallbacks(config: OAuthConfig) {\n return {\n async jwt({\n token,\n account,\n }: { token: Record<string, unknown>; account?: Record<string, unknown> | null }) {\n // Initial sign-in: persist tokens from the OAuth account\n if (account) {\n token.accessToken = account.access_token\n token.refreshToken = account.refresh_token\n token.accessTokenExpiresAt = Date.now() + ((account.expires_in as number) ?? 3600) * 1000\n return token\n }\n\n // Subsequent calls: check if token needs refresh (60s safety window)\n const expiresAt = token.accessTokenExpiresAt as number | undefined\n if (expiresAt && Date.now() < expiresAt - 60_000) {\n return token\n }\n\n // Token is expired or about to expire — attempt refresh\n const currentRefreshToken = token.refreshToken as string | undefined\n if (!currentRefreshToken) {\n token.error = \"RefreshAccessTokenError\"\n return token\n }\n\n try {\n const tokens = await refreshToken(config, currentRefreshToken)\n token.accessToken = tokens.accessToken\n token.refreshToken = tokens.refreshToken\n token.accessTokenExpiresAt = Date.now() + tokens.expiresIn * 1000\n token.error = undefined\n } catch {\n token.error = \"RefreshAccessTokenError\"\n }\n\n return token\n },\n async session({\n session,\n token,\n }: { session: Record<string, unknown>; token: Record<string, unknown> }) {\n session.accessToken = token.accessToken\n if (token.error) {\n session.error = token.error\n }\n return session\n },\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA pagination helper\n\nconst DEFAULT_PAGE_SIZE = 25\n\n/**\n * Create an AsyncIterable that lazily paginates through CMA results.\n * Pages are fetched on demand — only when items are consumed.\n */\nexport function paginate<T>(\n fetchPage: (skip: number, limit: number) => Promise<{ items: T[]; count?: number }>,\n options?: { limit?: number },\n): AsyncIterable<T> {\n const pageSize = options?.limit ?? DEFAULT_PAGE_SIZE\n\n return {\n [Symbol.asyncIterator]() {\n let skip = 0\n let done = false\n let buffer: T[] = []\n let bufferIndex = 0\n let totalCount: number | undefined\n\n return {\n async next(): Promise<IteratorResult<T>> {\n if (bufferIndex < buffer.length) {\n return { value: buffer[bufferIndex++] as T, done: false }\n }\n\n if (done) {\n return { value: undefined as unknown as T, done: true }\n }\n\n const page = await fetchPage(skip, pageSize)\n buffer = page.items\n bufferIndex = 0\n skip += page.items.length\n\n if (typeof page.count === \"number\") {\n totalCount = page.count\n }\n\n if (page.items.length === 0) {\n done = true\n return { value: undefined as unknown as T, done: true }\n }\n\n if (typeof totalCount === \"number\" && skip >= totalCount) {\n done = true\n }\n\n return { value: buffer[bufferIndex++] as T, done: false }\n },\n }\n },\n }\n}\n\n/**\n * Collect all items from an AsyncIterable into an array.\n * Replaces the repeated listAll() pattern across sub-clients.\n */\nexport async function collectAll<T>(iterable: AsyncIterable<T>): Promise<T[]> {\n const items: T[] = []\n for await (const item of iterable) {\n items.push(item)\n }\n return items\n}\n","// @timbenniks/contentstack-platform-sdk — CMA AssetsClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { collectAll, paginate } from \"./pagination.js\"\nimport type { Asset, AssetFolder, BasePublishAction } from \"./types.js\"\n\nexport type AssetPublishAction = BasePublishAction\n\nexport class AssetsClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n list(opts?: { limit?: number; folder?: string }): AsyncIterable<Asset> {\n return paginate<Asset>(\n async (skip, limit) => {\n const params: Record<string, string> = {\n skip: String(skip),\n limit: String(limit),\n }\n if (opts?.folder) params.folder = opts.folder\n\n const response = await this.http.get<{ assets: Asset[]; count?: number }>(\"/assets\", params)\n return { items: response.data.assets ?? [], count: response.data.count }\n },\n { limit: opts?.limit },\n )\n }\n\n async listAll(opts?: { limit?: number; folder?: string }): Promise<Asset[]> {\n return collectAll(this.list(opts))\n }\n\n async get(uid: string): Promise<Asset> {\n const response = await this.http.get<{ asset: Asset }>(`/assets/${uid}`)\n return response.data.asset\n }\n\n async upload(form: FormData): Promise<Asset> {\n const response = await this.http.upload<{ asset: Asset }>(\"/assets\", form)\n return response.data.asset\n }\n\n async update(uid: string, data: Partial<Asset>): Promise<Asset> {\n const response = await this.http.put<{ asset: Asset }>(`/assets/${uid}`, { asset: data })\n return response.data.asset\n }\n\n async delete(uid: string): Promise<void> {\n await this.http.delete(`/assets/${uid}`)\n }\n\n async publish(uid: string, data: AssetPublishAction): Promise<void> {\n await this.http.post(`/assets/${uid}/publish`, { asset: data })\n }\n\n async unpublish(uid: string, data: AssetPublishAction): Promise<void> {\n await this.http.post(`/assets/${uid}/unpublish`, { asset: data })\n }\n\n // ─── Folders ──────────────────────────────────────────────────────\n\n async listFolders(opts?: { limit?: number }): Promise<AssetFolder[]> {\n const response = await this.http.get<{ assets: AssetFolder[] }>(\"/assets/folders\", {\n limit: String(opts?.limit ?? 100),\n })\n return response.data.assets ?? []\n }\n\n async getFolder(uid: string): Promise<AssetFolder> {\n const response = await this.http.get<{ asset: AssetFolder }>(`/assets/folders/${uid}`)\n return response.data.asset\n }\n\n async createFolder(data: { name: string; parent_uid?: string }): Promise<AssetFolder> {\n const response = await this.http.post<{ asset: AssetFolder }>(\"/assets/folders\", {\n asset: data,\n })\n return response.data.asset\n }\n\n async updateFolder(uid: string, data: { name: string }): Promise<AssetFolder> {\n const response = await this.http.put<{ asset: AssetFolder }>(`/assets/folders/${uid}`, {\n asset: data,\n })\n return response.data.asset\n }\n\n async deleteFolder(uid: string): Promise<void> {\n await this.http.delete(`/assets/folders/${uid}`)\n }\n\n // ─── Additional Operations ──────────────────────────────────────\n\n async replace(uid: string, form: FormData): Promise<Asset> {\n const response = await this.http.upload<{ asset: Asset }>(`/assets/${uid}`, form)\n return response.data.asset\n }\n\n async getReferences(uid: string): Promise<unknown[]> {\n const response = await this.http.get<{ references: unknown[] }>(`/assets/${uid}/references`)\n return response.data.references ?? []\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA base CRUD client\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { collectAll, paginate } from \"./pagination.js\"\n\nexport interface CrudConfig {\n basePath: string\n singularKey: string\n pluralKey: string\n}\n\nexport class CrudClient<T> {\n constructor(\n protected readonly http: ContentstackHttpClient,\n protected readonly config: CrudConfig,\n ) {}\n\n list(opts?: { limit?: number }): AsyncIterable<T> {\n return paginate<T>(\n async (skip, limit) => {\n const response = await this.http.get<Record<string, unknown>>(this.config.basePath, {\n skip: String(skip),\n limit: String(limit),\n })\n const items = (response.data[this.config.pluralKey] as T[]) ?? []\n return { items, count: response.data.count as number | undefined }\n },\n { limit: opts?.limit },\n )\n }\n\n async listAll(opts?: { limit?: number }): Promise<T[]> {\n return collectAll(this.list(opts))\n }\n\n async get(uid: string): Promise<T> {\n const response = await this.http.get<Record<string, unknown>>(`${this.config.basePath}/${uid}`)\n return response.data[this.config.singularKey] as T\n }\n\n async create(data: Partial<T>): Promise<T> {\n const response = await this.http.post<Record<string, unknown>>(this.config.basePath, {\n [this.config.singularKey]: data,\n })\n return response.data[this.config.singularKey] as T\n }\n\n async update(uid: string, data: Partial<T>): Promise<T> {\n const response = await this.http.put<Record<string, unknown>>(\n `${this.config.basePath}/${uid}`,\n { [this.config.singularKey]: data },\n )\n return response.data[this.config.singularKey] as T\n }\n\n async delete(uid: string): Promise<void> {\n await this.http.delete(`${this.config.basePath}/${uid}`)\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA AuditLogClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport type { AuditLogEntry } from \"./types.js\"\n\nexport class AuditLogClient extends CrudClient<AuditLogEntry> {\n constructor(http: ContentstackHttpClient) {\n super(http, { basePath: \"/audit-logs\", singularKey: \"audit_log\", pluralKey: \"audit_logs\" })\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA BranchAliasesClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport type { BranchAlias } from \"./types.js\"\n\nexport class BranchAliasesClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n async list(): Promise<BranchAlias[]> {\n const response = await this.http.get<{ branch_aliases: BranchAlias[] }>(\n \"/stacks/branch_aliases\",\n )\n return response.data.branch_aliases ?? []\n }\n\n async get(uid: string): Promise<BranchAlias> {\n const response = await this.http.get<{ branch_alias: BranchAlias }>(\n `/stacks/branch_aliases/${uid}`,\n )\n return response.data.branch_alias\n }\n\n async createOrUpdate(uid: string, targetBranch: string): Promise<BranchAlias> {\n const response = await this.http.put<{ branch_alias: BranchAlias }>(\n `/stacks/branch_aliases/${uid}`,\n { branch_alias: { target_branch: targetBranch } },\n )\n return response.data.branch_alias\n }\n\n async delete(uid: string): Promise<void> {\n await this.http.delete(`/stacks/branch_aliases/${uid}`)\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA BranchesClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { collectAll, paginate } from \"./pagination.js\"\nimport type { Branch, MergeJob } from \"./types.js\"\n\nexport interface MergeRequest {\n base_branch: string\n compare_branch: string\n default_merge_strategy:\n | \"merge_prefer_base\"\n | \"merge_prefer_compare\"\n | \"overwrite_with_compare\"\n | \"merge_new_only\"\n | \"ignore\"\n merge_comment?: string\n item_merge_strategies?: Record<string, string>\n}\n\nexport class BranchesClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n list(opts?: { limit?: number }): AsyncIterable<Branch> {\n return paginate<Branch>(\n async (skip, limit) => {\n const response = await this.http.get<{ branches: Branch[]; count?: number }>(\n \"/stacks/branches\",\n { skip: String(skip), limit: String(limit) },\n )\n return { items: response.data.branches ?? [], count: response.data.count }\n },\n { limit: opts?.limit },\n )\n }\n\n async listAll(opts?: { limit?: number }): Promise<Branch[]> {\n return collectAll(this.list(opts))\n }\n\n async get(uid: string): Promise<Branch> {\n const response = await this.http.get<{ branch: Branch }>(`/stacks/branches/${uid}`)\n return response.data.branch\n }\n\n async create(data: { uid: string; source: string }): Promise<Branch> {\n const response = await this.http.post<{ branch: Branch }>(\"/stacks/branches\", {\n branch: data,\n })\n return response.data.branch\n }\n\n async delete(uid: string): Promise<void> {\n await this.http.delete(`/stacks/branches/${uid}`)\n }\n\n async compare(baseBranch: string, compareBranch: string): Promise<unknown> {\n const response = await this.http.get<unknown>(\"/stacks/branches_compare\", {\n base_branch: baseBranch,\n compare_branch: compareBranch,\n })\n return response.data\n }\n\n async merge(data: MergeRequest): Promise<MergeJob> {\n const response = await this.http.post<{ merge_job: MergeJob }>(\"/stacks/branches_merge\", data)\n return response.data.merge_job\n }\n\n async listMergeJobs(): Promise<MergeJob[]> {\n const response = await this.http.get<{ merge_jobs: MergeJob[] }>(\"/stacks/branches_queue\")\n return response.data.merge_jobs ?? []\n }\n\n async getMergeJob(uid: string): Promise<MergeJob> {\n const response = await this.http.get<{ merge_job: MergeJob }>(`/stacks/branches_queue/${uid}`)\n return response.data.merge_job\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA BulkOperationsClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport type { BasePublishAction } from \"./types.js\"\n\nexport interface BulkEntry {\n uid: string\n content_type: string\n locale: string\n version?: number\n}\n\nexport interface BulkPublishAction extends BasePublishAction {\n entries?: BulkEntry[]\n assets?: Array<{ uid: string }>\n}\n\nexport interface BulkWorkflowAction {\n entries: Array<{\n uid: string\n content_type: string\n locale: string\n }>\n workflow_stage: {\n uid: string\n comment?: string\n }\n}\n\nexport class BulkOperationsClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n async publish(data: BulkPublishAction): Promise<void> {\n await this.http.post(\"/bulk/publish\", data)\n }\n\n async unpublish(data: BulkPublishAction): Promise<void> {\n await this.http.post(\"/bulk/unpublish\", data)\n }\n\n async delete(data: {\n entries?: Array<{ uid: string; content_type: string; locale: string }>\n assets?: Array<{ uid: string }>\n }): Promise<void> {\n await this.http.post(\"/bulk/delete\", data)\n }\n\n async updateWorkflow(data: BulkWorkflowAction): Promise<void> {\n await this.http.post(\"/bulk/workflow\", data)\n }\n\n async addItems(data: Record<string, unknown>): Promise<void> {\n await this.http.post(\"/bulk/add\", data)\n }\n\n async updateItems(data: Record<string, unknown>): Promise<void> {\n await this.http.post(\"/bulk/update\", data)\n }\n\n async jobStatus(jobId: string): Promise<unknown> {\n const response = await this.http.get<{ job: unknown }>(`/bulk/jobs/${jobId}`)\n return response.data.job\n }\n\n async getJobItems(jobId: string, opts?: { limit?: number; skip?: number }): Promise<unknown[]> {\n const params: Record<string, string> = {}\n if (opts?.limit) params.limit = String(opts.limit)\n if (opts?.skip) params.skip = String(opts.skip)\n const response = await this.http.get<{ items: unknown[] }>(\n `/bulk/jobs/${jobId}/items`,\n Object.keys(params).length > 0 ? params : undefined,\n )\n return response.data.items ?? []\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA ContentTypesClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport { collectAll, paginate } from \"./pagination.js\"\nimport type { ContentType } from \"./types.js\"\n\nexport class ContentTypesClient extends CrudClient<ContentType> {\n constructor(http: ContentstackHttpClient) {\n super(http, {\n basePath: \"/content_types\",\n singularKey: \"content_type\",\n pluralKey: \"content_types\",\n })\n }\n\n override list(opts?: { limit?: number; include_count?: boolean }): AsyncIterable<ContentType> {\n return paginate<ContentType>(\n async (skip, limit) => {\n const params: Record<string, string> = {\n skip: String(skip),\n limit: String(limit),\n }\n if (opts?.include_count) params.include_count = \"true\"\n\n const response = await this.http.get<{\n content_types: ContentType[]\n count?: number\n }>(\"/content_types\", params)\n return { items: response.data.content_types ?? [], count: response.data.count }\n },\n { limit: opts?.limit },\n )\n }\n\n override async listAll(opts?: { limit?: number; include_count?: boolean }): Promise<\n ContentType[]\n > {\n return collectAll(this.list(opts))\n }\n\n async export(uid: string): Promise<ContentType> {\n const response = await this.http.get<{ content_type: ContentType }>(\n `/content_types/${uid}/export`,\n )\n return response.data.content_type\n }\n\n async import(data: Record<string, unknown>): Promise<ContentType> {\n const response = await this.http.post<{ content_type: ContentType }>(\n \"/content_types/import\",\n data,\n )\n return response.data.content_type\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA EntriesClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { collectAll, paginate } from \"./pagination.js\"\nimport type { BasePublishAction, Entry } from \"./types.js\"\n\nexport interface EntryListOptions {\n locale?: string\n include_publish_details?: boolean\n include_workflow?: boolean\n include_count?: boolean\n query?: Record<string, unknown>\n asc?: string\n desc?: string\n limit?: number\n}\n\nexport interface EntryGetOptions {\n locale?: string\n include_publish_details?: boolean\n include_workflow?: boolean\n version?: number\n}\n\nexport type PublishAction = BasePublishAction\n\nexport interface WorkflowStageAction {\n workflow_stage: {\n uid: string\n comment?: string\n due_date?: string\n assigned_to?: Array<{ uid: string; name: string; email: string }>\n notify?: boolean\n }\n}\n\nexport class EntriesClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n private basePath(ctUid: string): string {\n return `/content_types/${ctUid}/entries`\n }\n\n list(ctUid: string, opts?: EntryListOptions): AsyncIterable<Entry> {\n return paginate<Entry>(\n async (skip, limit) => {\n const params: Record<string, string> = {\n skip: String(skip),\n limit: String(limit),\n }\n if (opts?.locale) params.locale = opts.locale\n if (opts?.include_publish_details) params.include_publish_details = \"true\"\n if (opts?.include_workflow) params.include_workflow = \"true\"\n if (opts?.include_count) params.include_count = \"true\"\n if (opts?.query) params.query = JSON.stringify(opts.query)\n if (opts?.asc) params.asc = opts.asc\n if (opts?.desc) params.desc = opts.desc\n\n const response = await this.http.get<{ entries: Entry[]; count?: number }>(\n this.basePath(ctUid),\n params,\n )\n return { items: response.data.entries ?? [], count: response.data.count }\n },\n { limit: opts?.limit },\n )\n }\n\n async listAll(ctUid: string, opts?: EntryListOptions): Promise<Entry[]> {\n return collectAll(this.list(ctUid, opts))\n }\n\n async get(ctUid: string, entryUid: string, opts?: EntryGetOptions): Promise<Entry> {\n const params: Record<string, string> = {}\n if (opts?.locale) params.locale = opts.locale\n if (opts?.include_publish_details) params.include_publish_details = \"true\"\n if (opts?.include_workflow) params.include_workflow = \"true\"\n if (opts?.version) params.version = String(opts.version)\n\n const response = await this.http.get<{ entry: Entry }>(\n `${this.basePath(ctUid)}/${entryUid}`,\n Object.keys(params).length > 0 ? params : undefined,\n )\n return response.data.entry\n }\n\n async create(ctUid: string, data: Partial<Entry>): Promise<Entry> {\n const response = await this.http.post<{ entry: Entry }>(this.basePath(ctUid), { entry: data })\n return response.data.entry\n }\n\n async update(ctUid: string, entryUid: string, data: Partial<Entry>): Promise<Entry> {\n const response = await this.http.put<{ entry: Entry }>(`${this.basePath(ctUid)}/${entryUid}`, {\n entry: data,\n })\n return response.data.entry\n }\n\n async delete(ctUid: string, entryUid: string, opts?: { locale?: string }): Promise<void> {\n let path = `${this.basePath(ctUid)}/${entryUid}`\n if (opts?.locale) path += `?locale=${encodeURIComponent(opts.locale)}`\n await this.http.delete(path)\n }\n\n async publish(ctUid: string, entryUid: string, data: PublishAction): Promise<void> {\n await this.http.post(`${this.basePath(ctUid)}/${entryUid}/publish`, { entry: data })\n }\n\n async unpublish(ctUid: string, entryUid: string, data: PublishAction): Promise<void> {\n await this.http.post(`${this.basePath(ctUid)}/${entryUid}/unpublish`, { entry: data })\n }\n\n async localize(ctUid: string, entryUid: string, data: Record<string, unknown>): Promise<Entry> {\n const response = await this.http.post<{ entry: Entry }>(\n `${this.basePath(ctUid)}/${entryUid}/localize`,\n { entry: data },\n )\n return response.data.entry\n }\n\n async setWorkflowStage(\n ctUid: string,\n entryUid: string,\n data: WorkflowStageAction,\n ): Promise<void> {\n await this.http.post(`${this.basePath(ctUid)}/${entryUid}/workflow`, data)\n }\n\n async references(ctUid: string, entryUid: string): Promise<unknown[]> {\n const response = await this.http.get<{ references: unknown[] }>(\n `${this.basePath(ctUid)}/${entryUid}/references`,\n )\n return response.data.references ?? []\n }\n\n async languages(ctUid: string, entryUid: string): Promise<unknown[]> {\n const response = await this.http.get<{ locales: unknown[] }>(\n `${this.basePath(ctUid)}/${entryUid}/languages`,\n )\n return response.data.locales ?? []\n }\n\n async versions(ctUid: string, entryUid: string): Promise<unknown[]> {\n const response = await this.http.get<{ versions: unknown[] }>(\n `${this.basePath(ctUid)}/${entryUid}/versions`,\n )\n return response.data.versions ?? []\n }\n\n async import(\n ctUid: string,\n data: Record<string, unknown>,\n opts?: { locale?: string; overwrite?: boolean },\n ): Promise<Entry> {\n let path = `${this.basePath(ctUid)}/import`\n const params: string[] = []\n if (opts?.locale) params.push(`locale=${encodeURIComponent(opts.locale)}`)\n if (opts?.overwrite) params.push(\"overwrite=true\")\n if (params.length > 0) path += `?${params.join(\"&\")}`\n\n const response = await this.http.post<{ entry: Entry }>(path, data)\n return response.data.entry\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA EnvironmentsClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport type { Environment } from \"./types.js\"\n\nexport class EnvironmentsClient extends CrudClient<Environment> {\n constructor(http: ContentstackHttpClient) {\n super(http, {\n basePath: \"/environments\",\n singularKey: \"environment\",\n pluralKey: \"environments\",\n })\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA ExtensionsClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport type { Extension } from \"./types.js\"\n\nexport class ExtensionsClient extends CrudClient<Extension> {\n constructor(http: ContentstackHttpClient) {\n super(http, { basePath: \"/extensions\", singularKey: \"extension\", pluralKey: \"extensions\" })\n }\n\n async upload(form: FormData): Promise<Extension> {\n const response = await this.http.upload<{ extension: Extension }>(\"/extensions\", form)\n return response.data.extension\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA GlobalFieldsClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport type { GlobalField } from \"./types.js\"\n\nexport class GlobalFieldsClient extends CrudClient<GlobalField> {\n constructor(http: ContentstackHttpClient) {\n super(http, {\n basePath: \"/global_fields\",\n singularKey: \"global_field\",\n pluralKey: \"global_fields\",\n })\n }\n\n async export(uid: string): Promise<GlobalField> {\n const response = await this.http.get<{ global_field: GlobalField }>(\n `/global_fields/${uid}/export`,\n )\n return response.data.global_field\n }\n\n async import(data: Record<string, unknown>): Promise<GlobalField> {\n const response = await this.http.post<{ global_field: GlobalField }>(\n \"/global_fields/import\",\n data,\n )\n return response.data.global_field\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA LabelsClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport type { Label } from \"./types.js\"\n\nexport class LabelsClient extends CrudClient<Label> {\n constructor(http: ContentstackHttpClient) {\n super(http, { basePath: \"/labels\", singularKey: \"label\", pluralKey: \"labels\" })\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA LocalesClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport type { Locale } from \"./types.js\"\n\nexport class LocalesClient extends CrudClient<Locale> {\n constructor(http: ContentstackHttpClient) {\n super(http, { basePath: \"/locales\", singularKey: \"locale\", pluralKey: \"locales\" })\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA PublishRulesClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport type { PublishRule } from \"./types.js\"\n\nexport class PublishRulesClient extends CrudClient<PublishRule> {\n constructor(http: ContentstackHttpClient) {\n super(http, {\n basePath: \"/workflows/publishing_rules\",\n singularKey: \"publishing_rule\",\n pluralKey: \"publishing_rules\",\n })\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA ReleasesClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { collectAll, paginate } from \"./pagination.js\"\nimport type { BasePublishAction, Release, ReleaseItem } from \"./types.js\"\n\nexport interface DeployAction extends BasePublishAction {\n action?: \"publish\" | \"unpublish\"\n}\n\nexport class ReleasesClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n list(opts?: { limit?: number; include_count?: boolean }): AsyncIterable<Release> {\n return paginate<Release>(\n async (skip, limit) => {\n const params: Record<string, string> = {\n skip: String(skip),\n limit: String(limit),\n }\n if (opts?.include_count) params.include_count = \"true\"\n\n const response = await this.http.get<{ releases: Release[]; count?: number }>(\n \"/releases\",\n params,\n )\n return { items: response.data.releases ?? [], count: response.data.count }\n },\n { limit: opts?.limit },\n )\n }\n\n async listAll(opts?: { limit?: number }): Promise<Release[]> {\n return collectAll(this.list(opts))\n }\n\n async get(uid: string): Promise<Release> {\n const response = await this.http.get<{ release: Release }>(`/releases/${uid}`)\n return response.data.release\n }\n\n async create(data: Partial<Release>): Promise<Release> {\n const response = await this.http.post<{ release: Release }>(\"/releases\", { release: data })\n return response.data.release\n }\n\n async update(uid: string, data: Partial<Release>): Promise<Release> {\n const response = await this.http.put<{ release: Release }>(`/releases/${uid}`, {\n release: data,\n })\n return response.data.release\n }\n\n async delete(uid: string): Promise<void> {\n await this.http.delete(`/releases/${uid}`)\n }\n\n async deploy(uid: string, data: DeployAction): Promise<void> {\n await this.http.post(`/releases/${uid}/deploy`, { release: data })\n }\n\n // ─── Items ──────────────────────────────────────────────────────\n\n async listItems(uid: string): Promise<ReleaseItem[]> {\n const response = await this.http.get<{ items: ReleaseItem[] }>(`/releases/${uid}/items`)\n return response.data.items ?? []\n }\n\n async addItem(uid: string, item: Partial<ReleaseItem>): Promise<void> {\n await this.http.post(`/releases/${uid}/items`, { item })\n }\n\n async removeItem(\n uid: string,\n item: {\n uid: string\n content_type_uid: string\n locale: string\n version: number\n action: string\n },\n ): Promise<void> {\n await this.http.post(`/releases/${uid}/items/delete`, { item })\n }\n\n async clone(uid: string, data: { name: string; description?: string }): Promise<Release> {\n const response = await this.http.post<{ release: Release }>(`/releases/${uid}/clone`, {\n release: data,\n })\n return response.data.release\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA RolesClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport type { Role } from \"./types.js\"\n\nexport class RolesClient extends CrudClient<Role> {\n constructor(http: ContentstackHttpClient) {\n super(http, { basePath: \"/roles\", singularKey: \"role\", pluralKey: \"roles\" })\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA TaxonomiesClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { collectAll, paginate } from \"./pagination.js\"\nimport type { Taxonomy, TaxonomyTerm } from \"./types.js\"\n\nexport class TaxonomiesClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n // ─── Taxonomies ───────────────────────────────────────────────────\n\n list(opts?: { limit?: number }): AsyncIterable<Taxonomy> {\n return paginate<Taxonomy>(\n async (skip, limit) => {\n const response = await this.http.get<{ taxonomies: Taxonomy[]; count?: number }>(\n \"/taxonomies\",\n { skip: String(skip), limit: String(limit) },\n )\n return { items: response.data.taxonomies ?? [], count: response.data.count }\n },\n { limit: opts?.limit },\n )\n }\n\n async listAll(opts?: { limit?: number }): Promise<Taxonomy[]> {\n return collectAll(this.list(opts))\n }\n\n async get(uid: string): Promise<Taxonomy> {\n const response = await this.http.get<{ taxonomy: Taxonomy }>(`/taxonomies/${uid}`)\n return response.data.taxonomy\n }\n\n async create(data: Partial<Taxonomy>): Promise<Taxonomy> {\n const response = await this.http.post<{ taxonomy: Taxonomy }>(\"/taxonomies\", {\n taxonomy: data,\n })\n return response.data.taxonomy\n }\n\n async update(uid: string, data: Partial<Taxonomy>): Promise<Taxonomy> {\n const response = await this.http.put<{ taxonomy: Taxonomy }>(`/taxonomies/${uid}`, {\n taxonomy: data,\n })\n return response.data.taxonomy\n }\n\n async delete(uid: string): Promise<void> {\n await this.http.delete(`/taxonomies/${uid}`)\n }\n\n // ─── Terms ────────────────────────────────────────────────────────\n\n listTerms(taxonomyUid: string, opts?: { limit?: number }): AsyncIterable<TaxonomyTerm> {\n return paginate<TaxonomyTerm>(\n async (skip, limit) => {\n const response = await this.http.get<{ terms: TaxonomyTerm[]; count?: number }>(\n `/taxonomies/${taxonomyUid}/terms`,\n { skip: String(skip), limit: String(limit) },\n )\n return { items: response.data.terms ?? [], count: response.data.count }\n },\n { limit: opts?.limit },\n )\n }\n\n async listAllTerms(taxonomyUid: string, opts?: { limit?: number }): Promise<TaxonomyTerm[]> {\n return collectAll(this.listTerms(taxonomyUid, opts))\n }\n\n async getTerm(taxonomyUid: string, termUid: string): Promise<TaxonomyTerm> {\n const response = await this.http.get<{ term: TaxonomyTerm }>(\n `/taxonomies/${taxonomyUid}/terms/${termUid}`,\n )\n return response.data.term\n }\n\n async createTerm(taxonomyUid: string, data: Partial<TaxonomyTerm>): Promise<TaxonomyTerm> {\n const response = await this.http.post<{ term: TaxonomyTerm }>(\n `/taxonomies/${taxonomyUid}/terms`,\n { term: data },\n )\n return response.data.term\n }\n\n async updateTerm(\n taxonomyUid: string,\n termUid: string,\n data: Partial<TaxonomyTerm>,\n ): Promise<TaxonomyTerm> {\n const response = await this.http.put<{ term: TaxonomyTerm }>(\n `/taxonomies/${taxonomyUid}/terms/${termUid}`,\n { term: data },\n )\n return response.data.term\n }\n\n async deleteTerm(taxonomyUid: string, termUid: string): Promise<void> {\n await this.http.delete(`/taxonomies/${taxonomyUid}/terms/${termUid}`)\n }\n\n async ancestors(taxonomyUid: string, termUid: string): Promise<TaxonomyTerm[]> {\n const response = await this.http.get<{ terms: TaxonomyTerm[] }>(\n `/taxonomies/${taxonomyUid}/terms/${termUid}/ancestors`,\n )\n return response.data.terms ?? []\n }\n\n async descendants(taxonomyUid: string, termUid: string): Promise<TaxonomyTerm[]> {\n const response = await this.http.get<{ terms: TaxonomyTerm[] }>(\n `/taxonomies/${taxonomyUid}/terms/${termUid}/descendants`,\n )\n return response.data.terms ?? []\n }\n\n async moveTerm(\n taxonomyUid: string,\n termUid: string,\n data: { parent_uid?: string; order: number },\n ): Promise<TaxonomyTerm> {\n const response = await this.http.put<{ term: TaxonomyTerm }>(\n `/taxonomies/${taxonomyUid}/terms/${termUid}/move`,\n { term: data },\n )\n return response.data.term\n }\n\n // ─── Import / Export ──────────────────────────────────────────────\n\n async export(uid: string): Promise<Taxonomy> {\n const response = await this.http.get<{ taxonomy: Taxonomy }>(`/taxonomies/${uid}/export`)\n return response.data.taxonomy\n }\n\n async import(data: Record<string, unknown>): Promise<Taxonomy> {\n const response = await this.http.post<{ taxonomy: Taxonomy }>(\"/taxonomies/import\", data)\n return response.data.taxonomy\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA TokensClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport type { DeliveryToken, ManagementToken, PreviewToken } from \"./types.js\"\n\nfunction tokenCrud<T>(http: ContentstackHttpClient, basePath: string) {\n return {\n async list(): Promise<T[]> {\n const response = await http.get<{ tokens: T[] }>(basePath)\n return response.data.tokens ?? []\n },\n async get(uid: string): Promise<T> {\n const response = await http.get<{ token: T }>(`${basePath}/${uid}`)\n return response.data.token\n },\n async create(data: Partial<T>): Promise<T> {\n const response = await http.post<{ token: T }>(basePath, { token: data })\n return response.data.token\n },\n async update(uid: string, data: Partial<T>): Promise<T> {\n const response = await http.put<{ token: T }>(`${basePath}/${uid}`, { token: data })\n return response.data.token\n },\n async delete(uid: string): Promise<void> {\n await http.delete(`${basePath}/${uid}`)\n },\n }\n}\n\nexport class TokensClient {\n private management: ReturnType<typeof tokenCrud<ManagementToken>>\n private delivery: ReturnType<typeof tokenCrud<DeliveryToken>>\n private preview: ReturnType<typeof tokenCrud<PreviewToken>>\n\n constructor(http: ContentstackHttpClient) {\n this.management = tokenCrud<ManagementToken>(http, \"/stacks/management_tokens\")\n this.delivery = tokenCrud<DeliveryToken>(http, \"/stacks/delivery_tokens\")\n this.preview = tokenCrud<PreviewToken>(http, \"/stacks/preview_tokens\")\n }\n\n // ─── Management Tokens ────────────────────────────────────────────\n\n listManagementTokens() {\n return this.management.list()\n }\n getManagementToken(uid: string) {\n return this.management.get(uid)\n }\n createManagementToken(data: Partial<ManagementToken>) {\n return this.management.create(data)\n }\n updateManagementToken(uid: string, data: Partial<ManagementToken>) {\n return this.management.update(uid, data)\n }\n deleteManagementToken(uid: string) {\n return this.management.delete(uid)\n }\n\n // ─── Delivery Tokens ──────────────────────────────────────────────\n\n listDeliveryTokens() {\n return this.delivery.list()\n }\n getDeliveryToken(uid: string) {\n return this.delivery.get(uid)\n }\n createDeliveryToken(data: Partial<DeliveryToken>) {\n return this.delivery.create(data)\n }\n updateDeliveryToken(uid: string, data: Partial<DeliveryToken>) {\n return this.delivery.update(uid, data)\n }\n deleteDeliveryToken(uid: string) {\n return this.delivery.delete(uid)\n }\n\n // ─── Preview Tokens ──────────────────────────────────────────────\n\n listPreviewTokens() {\n return this.preview.list()\n }\n getPreviewToken(uid: string) {\n return this.preview.get(uid)\n }\n createPreviewToken(data: Partial<PreviewToken>) {\n return this.preview.create(data)\n }\n updatePreviewToken(uid: string, data: Partial<PreviewToken>) {\n return this.preview.update(uid, data)\n }\n deletePreviewToken(uid: string) {\n return this.preview.delete(uid)\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA WebhooksClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport type { Webhook } from \"./types.js\"\n\nexport class WebhooksClient extends CrudClient<Webhook> {\n constructor(http: ContentstackHttpClient) {\n super(http, { basePath: \"/webhooks\", singularKey: \"webhook\", pluralKey: \"webhooks\" })\n }\n\n async logs(uid: string): Promise<unknown[]> {\n const response = await this.http.get<{ logs: unknown[] }>(`/webhooks/${uid}/logs`)\n return response.data.logs ?? []\n }\n\n async retry(uid: string, executionUid: string): Promise<void> {\n await this.http.post(`/webhooks/${uid}/retry/${executionUid}`, {})\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA WorkflowsClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport type { Workflow } from \"./types.js\"\n\nexport class WorkflowsClient extends CrudClient<Workflow> {\n constructor(http: ContentstackHttpClient) {\n super(http, { basePath: \"/workflows\", singularKey: \"workflow\", pluralKey: \"workflows\" })\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA client factory\n\nimport { ContentstackHttpClient } from \"../http/client.js\"\nimport type { HttpClientConfig } from \"../http/types.js\"\nimport type { ContentstackRegion } from \"../regions/resolver.js\"\nimport { resolveEndpoints } from \"../regions/resolver.js\"\nimport { AssetsClient } from \"./assets.js\"\nimport { AuditLogClient } from \"./audit-log.js\"\nimport { BranchAliasesClient } from \"./branch-aliases.js\"\nimport { BranchesClient } from \"./branches.js\"\nimport { BulkOperationsClient } from \"./bulk.js\"\nimport { ContentTypesClient } from \"./content-types.js\"\nimport { EntriesClient } from \"./entries.js\"\nimport { EnvironmentsClient } from \"./environments.js\"\nimport { ExtensionsClient } from \"./extensions.js\"\nimport { GlobalFieldsClient } from \"./global-fields.js\"\nimport { LabelsClient } from \"./labels.js\"\nimport { LocalesClient } from \"./locales.js\"\nimport { PublishRulesClient } from \"./publish-rules.js\"\nimport { ReleasesClient } from \"./releases.js\"\nimport { RolesClient } from \"./roles.js\"\nimport { TaxonomiesClient } from \"./taxonomies.js\"\nimport { TokensClient } from \"./tokens.js\"\nimport { WebhooksClient } from \"./webhooks.js\"\nimport { WorkflowsClient } from \"./workflows.js\"\n\nexport interface CMAClientConfig {\n region: ContentstackRegion\n apiKey: string\n auth:\n | { type: \"management-token\"; token: string }\n | { type: \"oauth\"; accessToken: string }\n | { type: \"authtoken\"; token: string }\n branch?: string\n httpOptions?: Partial<HttpClientConfig>\n}\n\nexport interface CMAClient {\n entries: EntriesClient\n contentTypes: ContentTypesClient\n assets: AssetsClient\n environments: EnvironmentsClient\n locales: LocalesClient\n globalFields: GlobalFieldsClient\n webhooks: WebhooksClient\n workflows: WorkflowsClient\n releases: ReleasesClient\n branches: BranchesClient\n branchAliases: BranchAliasesClient\n taxonomies: TaxonomiesClient\n bulk: BulkOperationsClient\n tokens: TokensClient\n labels: LabelsClient\n roles: RolesClient\n auditLog: AuditLogClient\n extensions: ExtensionsClient\n publishRules: PublishRulesClient\n onBranch(branchUid: string): CMAClient\n}\n\nexport function createCMAClient(config: CMAClientConfig): CMAClient {\n const endpoints = resolveEndpoints(config.region)\n\n const headers: Record<string, string> = { api_key: config.apiKey }\n\n switch (config.auth.type) {\n case \"management-token\":\n headers.authorization = config.auth.token\n break\n case \"oauth\":\n headers.authorization = `Bearer ${config.auth.accessToken}`\n break\n case \"authtoken\":\n headers.authtoken = config.auth.token\n break\n }\n\n if (config.branch) {\n headers.branch = config.branch\n }\n\n const http = new ContentstackHttpClient({\n ...config.httpOptions,\n baseUrl: config.httpOptions?.baseUrl ?? `${endpoints.cma}/v3`,\n headers: {\n ...config.httpOptions?.headers,\n ...headers,\n },\n })\n\n return {\n entries: new EntriesClient(http),\n contentTypes: new ContentTypesClient(http),\n assets: new AssetsClient(http),\n environments: new EnvironmentsClient(http),\n locales: new LocalesClient(http),\n globalFields: new GlobalFieldsClient(http),\n webhooks: new WebhooksClient(http),\n workflows: new WorkflowsClient(http),\n releases: new ReleasesClient(http),\n branches: new BranchesClient(http),\n branchAliases: new BranchAliasesClient(http),\n taxonomies: new TaxonomiesClient(http),\n bulk: new BulkOperationsClient(http),\n tokens: new TokensClient(http),\n labels: new LabelsClient(http),\n roles: new RolesClient(http),\n auditLog: new AuditLogClient(http),\n extensions: new ExtensionsClient(http),\n publishRules: new PublishRulesClient(http),\n onBranch(branchUid: string): CMAClient {\n return createCMAClient({ ...config, branch: branchUid })\n },\n }\n}\n","/**\n * Framework-agnostic request builders for CMA operations.\n *\n * These pure functions build paths, query parameters, and request bodies\n * for Contentstack CMA endpoints. Both React hooks and Vue composables\n * use them to avoid duplicating request construction logic.\n */\n\n// ── Query parameter types ───────────────────────────────────────────────────\n\nexport interface EntryQueryParams {\n locale?: string\n version?: number\n includePublishDetails?: boolean\n}\n\nexport interface EntriesQueryParams {\n locale?: string\n limit?: number\n skip?: number\n includePublishDetails?: boolean\n query?: Record<string, unknown>\n}\n\nexport interface AssetsQueryParams {\n folder?: string\n limit?: number\n skip?: number\n}\n\n// ── Mutation variable types ─────────────────────────────────────────────────\n\nexport interface CreateEntryVariables {\n contentTypeUid: string\n entry: Record<string, unknown>\n locale?: string\n}\n\nexport interface UpdateEntryVariables {\n contentTypeUid: string\n entryUid: string\n entry: Record<string, unknown>\n locale?: string\n}\n\nexport interface DeleteEntryVariables {\n contentTypeUid: string\n entryUid: string\n locale?: string\n deleteAllLocalized?: boolean\n}\n\nexport interface PublishEntryVariables {\n contentTypeUid: string\n entryUid: string\n environments: string[]\n locales: string[]\n scheduledAt?: string\n}\n\n// ── Param builders ──────────────────────────────────────────────────────────\n\nfunction nonEmptyParams(params: Record<string, string>): Record<string, string> | undefined {\n return Object.keys(params).length > 0 ? params : undefined\n}\n\nexport function buildEntryParams(options?: EntryQueryParams): Record<string, string> | undefined {\n if (!options) return undefined\n const params: Record<string, string> = {}\n if (options.locale) params.locale = options.locale\n if (options.version !== undefined) params.version = String(options.version)\n if (options.includePublishDetails) params.include_publish_details = \"true\"\n return nonEmptyParams(params)\n}\n\nexport function buildEntriesParams(\n options?: EntriesQueryParams,\n): Record<string, string> | undefined {\n if (!options) return undefined\n const params: Record<string, string> = {}\n if (options.locale) params.locale = options.locale\n if (options.limit !== undefined) params.limit = String(options.limit)\n if (options.skip !== undefined) params.skip = String(options.skip)\n if (options.includePublishDetails) params.include_publish_details = \"true\"\n if (options.query) params.query = JSON.stringify(options.query)\n return nonEmptyParams(params)\n}\n\nexport function buildAssetsParams(options?: AssetsQueryParams): Record<string, string> | undefined {\n if (!options) return undefined\n const params: Record<string, string> = {}\n if (options.folder) params.folder = options.folder\n if (options.limit !== undefined) params.limit = String(options.limit)\n if (options.skip !== undefined) params.skip = String(options.skip)\n return nonEmptyParams(params)\n}\n\n// ── Request builders (for mutations) ────────────────────────────────────────\n\nfunction appendQueryString(path: string, params: URLSearchParams): string {\n const query = params.toString()\n return query ? `${path}?${query}` : path\n}\n\nexport function buildCreateEntryRequest(vars: CreateEntryVariables): {\n path: string\n body: unknown\n} {\n const params = new URLSearchParams()\n if (vars.locale) params.set(\"locale\", vars.locale)\n return {\n path: appendQueryString(`/content_types/${vars.contentTypeUid}/entries`, params),\n body: { entry: vars.entry },\n }\n}\n\nexport function buildUpdateEntryRequest(vars: UpdateEntryVariables): {\n path: string\n body: unknown\n} {\n const params = new URLSearchParams()\n if (vars.locale) params.set(\"locale\", vars.locale)\n return {\n path: appendQueryString(\n `/content_types/${vars.contentTypeUid}/entries/${vars.entryUid}`,\n params,\n ),\n body: { entry: vars.entry },\n }\n}\n\nexport function buildDeleteEntryRequest(vars: DeleteEntryVariables): { path: string } {\n const params = new URLSearchParams()\n if (vars.locale) params.set(\"locale\", vars.locale)\n if (vars.deleteAllLocalized) params.set(\"delete_all_localized\", \"true\")\n return {\n path: appendQueryString(\n `/content_types/${vars.contentTypeUid}/entries/${vars.entryUid}`,\n params,\n ),\n }\n}\n\nexport function buildPublishEntryRequest(vars: PublishEntryVariables): {\n path: string\n body: unknown\n} {\n return {\n path: `/content_types/${vars.contentTypeUid}/entries/${vars.entryUid}/publish`,\n body: {\n entry: {\n environments: vars.environments,\n locales: vars.locales,\n ...(vars.scheduledAt ? { scheduled_at: vars.scheduledAt } : {}),\n },\n },\n }\n}\n","import { ContentstackConfigError } from \"../http/errors.js\"\nimport type {\n ImageFitMode,\n ImageFormat,\n ImageOrientation,\n ImageResizeFilter,\n ImageTransformBuilder,\n} from \"./types.js\"\n\nconst VALID_FORMATS = new Set<ImageFormat>([\"webp\", \"jpg\", \"png\", \"gif\", \"avif\", \"pjpg\"])\nconst VALID_FITS = new Set<ImageFitMode>([\"bounds\", \"crop\", \"cover\"])\nconst VALID_FILTERS = new Set<ImageResizeFilter>([\n \"nearest\",\n \"bilinear\",\n \"bicubic\",\n \"lanczos2\",\n \"lanczos3\",\n])\n\nclass ImageTransformBuilderImpl implements ImageTransformBuilder {\n constructor(\n private readonly assetUrl: string,\n private readonly params: Record<string, string> = {},\n ) {}\n\n width(px: number): ImageTransformBuilder {\n assertPositiveInteger(\"width\", px)\n return this.with(\"width\", String(px))\n }\n\n height(px: number): ImageTransformBuilder {\n assertPositiveInteger(\"height\", px)\n return this.with(\"height\", String(px))\n }\n\n quality(q: number): ImageTransformBuilder {\n if (!Number.isInteger(q) || q < 1 || q > 100) {\n throw new ContentstackConfigError(\"quality() expects an integer between 1 and 100\")\n }\n return this.with(\"quality\", String(q))\n }\n\n format(fmt: ImageFormat): ImageTransformBuilder {\n if (!VALID_FORMATS.has(fmt)) {\n throw new ContentstackConfigError(`Unsupported image format: ${fmt}`)\n }\n return this.with(\"format\", fmt)\n }\n\n fit(mode: ImageFitMode): ImageTransformBuilder {\n if (!VALID_FITS.has(mode)) {\n throw new ContentstackConfigError(`Unsupported fit mode: ${mode}`)\n }\n return this.with(\"fit\", mode)\n }\n\n crop(params: string): ImageTransformBuilder {\n return this.withNonEmptyString(\"crop\", params)\n }\n\n trim(edges: string): ImageTransformBuilder {\n return this.withNonEmptyString(\"trim\", edges)\n }\n\n orient(angle: ImageOrientation): ImageTransformBuilder {\n if (!Number.isInteger(angle) || angle < 1 || angle > 8) {\n throw new ContentstackConfigError(\"orient() expects a value between 1 and 8\")\n }\n return this.with(\"orient\", String(angle))\n }\n\n overlay(params: Record<string, string>): ImageTransformBuilder {\n const entries = Object.entries(params)\n .filter(([, value]) => value.trim().length > 0)\n .sort(([a], [b]) => a.localeCompare(b))\n\n if (entries.length === 0) {\n throw new ContentstackConfigError(\"overlay() requires at least one non-empty key/value pair\")\n }\n\n const value = entries.map(([key, val]) => `${key}:${val}`).join(\",\")\n return this.with(\"overlay\", value)\n }\n\n pad(pixels: string): ImageTransformBuilder {\n return this.withNonEmptyString(\"pad\", pixels)\n }\n\n bgColor(hex: string): ImageTransformBuilder {\n const normalized = hex.trim().replace(/^#/, \"\")\n if (!/^[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/.test(normalized)) {\n throw new ContentstackConfigError(\"bgColor() expects a 3 or 6 character hex value\")\n }\n return this.with(\"bg-color\", normalized.toLowerCase())\n }\n\n dpr(ratio: number): ImageTransformBuilder {\n if (!Number.isFinite(ratio) || ratio <= 0) {\n throw new ContentstackConfigError(\"dpr() expects a positive number\")\n }\n return this.with(\"dpr\", String(ratio))\n }\n\n disableUpscale(): ImageTransformBuilder {\n return this.with(\"disable\", \"upscale\")\n }\n\n resizeFilter(filter: ImageResizeFilter): ImageTransformBuilder {\n if (!VALID_FILTERS.has(filter)) {\n throw new ContentstackConfigError(`Unsupported resize filter: ${filter}`)\n }\n return this.with(\"resize-filter\", filter)\n }\n\n toURL(): string {\n if (Object.keys(this.params).length === 0) {\n return this.assetUrl\n }\n\n const query = new URLSearchParams(this.params)\n\n try {\n const url = new URL(this.assetUrl)\n for (const [key, value] of query.entries()) {\n url.searchParams.set(key, value)\n }\n return url.toString()\n } catch {\n const separator = this.assetUrl.includes(\"?\") ? \"&\" : \"?\"\n return `${this.assetUrl}${separator}${query.toString()}`\n }\n }\n\n toSrcSet(widths: number[]): string {\n return widths\n .map((width) => {\n assertPositiveInteger(\"toSrcSet width\", width)\n return `${this.width(width).toURL()} ${width}w`\n })\n .join(\", \")\n }\n\n toParams(): Record<string, string> {\n return { ...this.params }\n }\n\n private with(key: string, value: string): ImageTransformBuilder {\n return new ImageTransformBuilderImpl(this.assetUrl, {\n ...this.params,\n [key]: value,\n })\n }\n\n private withNonEmptyString(key: string, value: string): ImageTransformBuilder {\n if (!value.trim()) {\n throw new ContentstackConfigError(`${key}() requires a non-empty string value`)\n }\n return this.with(key, value)\n }\n}\n\nexport function imageTransform(assetUrl: string): ImageTransformBuilder {\n if (!assetUrl.trim()) {\n throw new ContentstackConfigError(\"imageTransform() requires a non-empty asset URL\")\n }\n\n return new ImageTransformBuilderImpl(assetUrl)\n}\n\nfunction assertPositiveInteger(name: string, value: number): void {\n if (!Number.isInteger(value) || value <= 0) {\n throw new ContentstackConfigError(`${name} expects a positive integer`)\n }\n}\n","import {\n type IJsonToHtmlElementTags,\n type IJsonToHtmlOptions,\n jsonToHtml,\n} from \"@contentstack/json-rte-serializer\"\nimport { normalizeForSerializer } from \"./serializer.js\"\nimport type { RTEDocNode, RTENode } from \"./types.js\"\nimport { isRecord } from \"./utils.js\"\n\nexport interface ToHTMLOptions {\n renderEntry?: (attrs: Record<string, unknown>, node: RTENode) => string\n renderAsset?: (attrs: Record<string, unknown>, node: RTENode) => string\n serializerOptions?: IJsonToHtmlOptions\n}\n\nexport function toHTML(doc: RTEDocNode, options: ToHTMLOptions = {}): string {\n return jsonToHtml(\n normalizeForSerializer(doc) as unknown as Record<string, unknown>,\n buildSerializerOptions(options),\n )\n}\n\nfunction buildSerializerOptions(options: ToHTMLOptions): IJsonToHtmlOptions | undefined {\n const { renderEntry, renderAsset, serializerOptions } = options\n\n if (!renderEntry && !renderAsset) {\n return serializerOptions\n }\n\n const customElementTypes: IJsonToHtmlElementTags = {\n ...(serializerOptions?.customElementTypes ?? {}),\n }\n\n const existingReferenceRenderer = customElementTypes.reference\n\n customElementTypes.reference = (attrs, child, jsonBlock, extraProps) => {\n const block = asRTENode(jsonBlock)\n const referenceAttrs = isRecord(block.attrs) ? block.attrs : {}\n\n if (referenceAttrs.type === \"entry\" && renderEntry) {\n return renderEntry(referenceAttrs, block)\n }\n\n if (referenceAttrs.type === \"asset\" && renderAsset) {\n return renderAsset(referenceAttrs, block)\n }\n\n return typeof existingReferenceRenderer === \"function\"\n ? existingReferenceRenderer(attrs, child, jsonBlock, extraProps)\n : \"\"\n }\n\n return {\n ...serializerOptions,\n customElementTypes,\n }\n}\n\nfunction asRTENode(value: unknown): RTENode {\n if (isRecord(value) && typeof value.type === \"string\" && typeof value.uid === \"string\") {\n return value as unknown as RTENode\n }\n\n return {\n type: \"reference\",\n uid: \"reference\",\n }\n}\n","import type { RTENode, RTETextNode } from \"./types.js\"\n\nexport const KNOWN_RTE_TYPES = new Set([\n \"doc\",\n \"p\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"ul\",\n \"ol\",\n \"li\",\n \"blockquote\",\n \"code\",\n \"img\",\n \"a\",\n \"table\",\n \"tr\",\n \"td\",\n \"th\",\n \"hr\",\n \"reference\",\n])\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null\n}\n\nexport function isTextNode(value: unknown): value is RTETextNode {\n return isRecord(value) && typeof value.text === \"string\" && typeof value.type !== \"string\"\n}\n\nexport function isElementNode(value: unknown): value is RTENode {\n return isRecord(value) && typeof value.type === \"string\" && typeof value.uid === \"string\"\n}\n\nexport function escapeHTML(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\\\"/g, \""\")\n .replace(/'/g, \"'\")\n}\n\nexport function decodeHTML(value: string): string {\n return value\n .replace(/ /g, \" \")\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/&/g, \"&\")\n}\n\nexport function createUid(): string {\n const uuid = globalThis.crypto?.randomUUID\n if (typeof uuid === \"function\") {\n return uuid.call(globalThis.crypto)\n }\n\n return `rte-${Math.random().toString(36).slice(2, 10)}`\n}\n","import type { RTEDocNode, RTENode, RTETextNode } from \"./types.js\"\nimport { isRecord, isTextNode } from \"./utils.js\"\n\nconst DEFAULT_TABLE_COLUMN_WIDTH = 250\n\nexport function normalizeForSerializer(doc: RTEDocNode): RTEDocNode {\n const normalized = normalizeNode(doc)\n\n if (!isTextNode(normalized) && normalized.type === \"doc\") {\n return normalized as RTEDocNode\n }\n\n return {\n ...doc,\n children: [],\n }\n}\n\nfunction normalizeNode(node: RTENode | RTETextNode): RTENode | RTETextNode {\n if (isTextNode(node)) {\n return { ...node }\n }\n\n const children = node.children?.map((child) => normalizeNode(child))\n const attrs = isRecord(node.attrs) ? { ...node.attrs } : {}\n\n if (node.type === \"a\" && typeof attrs.url !== \"string\" && typeof attrs.href === \"string\") {\n attrs.url = attrs.href\n }\n\n if (node.type === \"img\" && typeof attrs.url !== \"string\" && typeof attrs.src === \"string\") {\n attrs.url = attrs.src\n }\n\n if (node.type === \"table\") {\n const tableRows = (children ?? []).filter(\n (row): row is RTENode => !isTextNode(row) && row.type === \"tr\",\n )\n\n const inferredCols = tableRows.reduce((max, row) => {\n const columnCount = (row.children ?? []).filter(\n (cell) => !isTextNode(cell) && (cell.type === \"td\" || cell.type === \"th\"),\n ).length\n return Math.max(max, columnCount)\n }, 0)\n\n const normalizedCols =\n typeof attrs.cols === \"number\" && attrs.cols > 0 ? attrs.cols : inferredCols\n const normalizedRows =\n typeof attrs.rows === \"number\" && attrs.rows > 0 ? attrs.rows : tableRows.length\n const normalizedWidths =\n Array.isArray(attrs.colWidths) &&\n attrs.colWidths.length > 0 &&\n attrs.colWidths.every((width) => typeof width === \"number\")\n ? attrs.colWidths\n : Array.from({ length: Math.max(normalizedCols, 1) }, () => DEFAULT_TABLE_COLUMN_WIDTH)\n\n return {\n ...node,\n attrs: {\n ...attrs,\n rows: normalizedRows,\n cols: Math.max(normalizedCols, 1),\n colWidths: normalizedWidths,\n },\n ...(children ? { children } : {}),\n }\n }\n\n return {\n ...node,\n attrs,\n ...(children ? { children } : {}),\n }\n}\n","import { jsonToMarkdown } from \"@contentstack/json-rte-serializer\"\nimport { normalizeForSerializer } from \"./serializer.js\"\nimport type { RTEDocNode, RTENode, RTETextNode } from \"./types.js\"\nimport { isTextNode } from \"./utils.js\"\n\nexport interface ToMarkdownOptions {\n renderEntry?: (attrs: Record<string, unknown>, node: RTENode) => string\n renderAsset?: (attrs: Record<string, unknown>, node: RTENode) => string\n}\n\nexport function toMarkdown(doc: RTEDocNode, options: ToMarkdownOptions = {}): string {\n const mappedDoc =\n options.renderEntry || options.renderAsset ? mapReferenceNodes(doc, options) : doc\n const markdown = jsonToMarkdown(normalizeForSerializer(mappedDoc)).trim()\n return normalizeMarkdownOutput(markdown)\n}\n\nfunction mapReferenceNodes(doc: RTEDocNode, options: ToMarkdownOptions): RTEDocNode {\n const mapped = mapNode(doc, options)\n if (isTextNode(mapped)) {\n return {\n ...doc,\n children: [],\n }\n }\n\n return {\n ...doc,\n ...mapped,\n type: \"doc\",\n uid: mapped.uid ?? doc.uid,\n }\n}\n\nfunction mapNode(node: RTENode | RTETextNode, options: ToMarkdownOptions): RTENode | RTETextNode {\n if (isTextNode(node)) {\n return { ...node }\n }\n\n if (node.type === \"reference\") {\n const attrs = node.attrs ?? {}\n if (attrs.type === \"entry\" && options.renderEntry) {\n return { text: options.renderEntry(attrs, node) }\n }\n if (attrs.type === \"asset\" && options.renderAsset) {\n return { text: options.renderAsset(attrs, node) }\n }\n return { text: \"\" }\n }\n\n return {\n ...node,\n ...(node.children ? { children: node.children.map((child) => mapNode(child, options)) } : {}),\n }\n}\n\nfunction normalizeMarkdownOutput(markdown: string): string {\n return markdown.replace(/!\\[([^\\]]*)\\]\\s*\\n\\s*\\(([^)\\n]+)\\)/g, \"\")\n}\n","import type { RTEDocNode, RTENode, RTETextNode } from \"./types.js\"\nimport { isTextNode } from \"./utils.js\"\n\nconst DOUBLE_BREAK_TYPES = new Set([\n \"p\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"blockquote\",\n \"code\",\n \"ul\",\n \"ol\",\n \"table\",\n])\n\nconst SINGLE_BREAK_TYPES = new Set([\"li\", \"tr\", \"td\", \"th\"])\n\nexport function toPlainText(doc: RTEDocNode): string {\n return renderNode(doc)\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .trim()\n}\n\nfunction renderNode(node: RTENode | RTETextNode): string {\n if (isTextNode(node)) {\n return node.text\n }\n\n const children = (node.children ?? []).map((child) => renderNode(child)).join(\"\")\n\n if (node.type === \"doc\") {\n return children\n }\n\n if (node.type === \"img\") {\n const alt = node.attrs?.alt\n if (typeof alt === \"string\" && alt.trim()) {\n return `${alt}\\n\\n`\n }\n return \"\\n\"\n }\n\n if (node.type === \"a\") {\n const href = node.attrs?.href\n const text = children || (typeof href === \"string\" ? href : \"\")\n return text\n }\n\n if (node.type === \"hr\") {\n return \"\\n\"\n }\n\n if (node.type === \"reference\") {\n return \"\"\n }\n\n if (DOUBLE_BREAK_TYPES.has(node.type)) {\n return `${children}\\n\\n`\n }\n\n if (SINGLE_BREAK_TYPES.has(node.type)) {\n return `${children}\\n`\n }\n\n return children\n}\n","import { type IHtmlToJsonOptions, htmlToJson } from \"@contentstack/json-rte-serializer\"\nimport type { RTEDocNode, RTENode, RTETextNode } from \"./types.js\"\nimport { createUid, decodeHTML, isRecord } from \"./utils.js\"\n\ninterface ParsedElement {\n kind: \"element\"\n tag: string\n attrs: Record<string, string>\n children: ParsedNode[]\n}\n\ninterface ParsedText {\n kind: \"text\"\n value: string\n}\n\ntype ParsedNode = ParsedElement | ParsedText\n\ntype TextMarks = Pick<\n RTETextNode,\n \"bold\" | \"italic\" | \"underline\" | \"strikethrough\" | \"code\" | \"superscript\" | \"subscript\"\n>\n\nconst VOID_TAGS = new Set([\"img\", \"hr\", \"br\", \"meta\", \"link\", \"input\"])\n\nexport interface FromHTMLOptions {\n serializerOptions?: IHtmlToJsonOptions\n}\n\nexport function fromHTML(html: string, options: FromHTMLOptions = {}): RTEDocNode {\n const parsed = parseWithSerializer(html, options)\n if (parsed) {\n return parsed\n }\n\n return parseWithFallback(html)\n}\n\nfunction parseWithSerializer(html: string, options: FromHTMLOptions): RTEDocNode | null {\n try {\n const parsed = htmlToJson(html, options.serializerOptions)\n return normalizeDoc(parsed)\n } catch {\n return null\n }\n}\n\nfunction normalizeDoc(value: unknown): RTEDocNode | null {\n if (isRecord(value) && value.type === \"doc\" && Array.isArray(value.children)) {\n return {\n ...value,\n type: \"doc\",\n uid: typeof value.uid === \"string\" && value.uid.length > 0 ? value.uid : createUid(),\n children: value.children as Array<RTENode | RTETextNode>,\n } as RTEDocNode\n }\n\n return null\n}\n\nfunction parseWithFallback(html: string): RTEDocNode {\n const root = parseHTML(html)\n const children = convertNodes(root.children)\n\n return {\n type: \"doc\",\n uid: createUid(),\n children,\n }\n}\n\nfunction parseHTML(html: string): ParsedElement {\n const root: ParsedElement = {\n kind: \"element\",\n tag: \"root\",\n attrs: {},\n children: [],\n }\n\n const stack: ParsedElement[] = [root]\n const tokenPattern = /<!--[\\s\\S]*?-->|<\\/?[^>]+>|[^<]+/g\n const tokens = html.match(tokenPattern) ?? []\n\n for (const token of tokens) {\n if (!token) {\n continue\n }\n\n if (token.startsWith(\"<!--\")) {\n continue\n }\n\n if (!token.startsWith(\"<\")) {\n const text = decodeHTML(token)\n if (text.length === 0) {\n continue\n }\n\n const parent = stack[stack.length - 1]\n if (!parent) {\n continue\n }\n\n parent.children.push({\n kind: \"text\",\n value: text,\n })\n continue\n }\n\n if (token.startsWith(\"</\")) {\n const closingTag = token.slice(2, -1).trim().toLowerCase()\n while (stack.length > 1) {\n const current = stack.pop()\n if (current?.tag === closingTag) {\n break\n }\n }\n continue\n }\n\n const parsed = parseOpeningTag(token)\n if (!parsed) {\n continue\n }\n\n const parent = stack[stack.length - 1]\n if (!parent) {\n continue\n }\n\n parent.children.push(parsed.element)\n\n const isVoid = parsed.selfClosing || VOID_TAGS.has(parsed.element.tag)\n if (!isVoid) {\n stack.push(parsed.element)\n }\n }\n\n return root\n}\n\nfunction parseOpeningTag(token: string): { element: ParsedElement; selfClosing: boolean } | null {\n const isSelfClosing = token.endsWith(\"/>\")\n const content = token.slice(1, token.length - (isSelfClosing ? 2 : 1)).trim()\n\n if (!content) {\n return null\n }\n\n const tagMatch = content.match(/^([a-zA-Z0-9-]+)/)\n if (!tagMatch?.[1]) {\n return null\n }\n\n const tag = tagMatch[1].toLowerCase()\n const attrs = parseAttributes(content.slice(tag.length).trim())\n\n return {\n element: {\n kind: \"element\",\n tag,\n attrs,\n children: [],\n },\n selfClosing: isSelfClosing,\n }\n}\n\nfunction parseAttributes(input: string): Record<string, string> {\n const attrs: Record<string, string> = {}\n const attrPattern = /([:@a-zA-Z0-9_-]+)(?:\\s*=\\s*(\"([^\"]*)\"|'([^']*)'|([^\\s\"'>/]+)))?/g\n\n let match = attrPattern.exec(input)\n while (match) {\n const key = match[1]\n if (key) {\n const value = decodeHTML(match[3] ?? match[4] ?? match[5] ?? \"\")\n attrs[key] = value\n }\n match = attrPattern.exec(input)\n }\n\n return attrs\n}\n\nfunction convertNodes(nodes: ParsedNode[], marks: TextMarks = {}): Array<RTENode | RTETextNode> {\n const output: Array<RTENode | RTETextNode> = []\n\n for (const node of nodes) {\n if (node.kind === \"text\") {\n const cleaned = normalizeText(node.value)\n if (!cleaned) {\n continue\n }\n\n output.push({\n text: cleaned,\n ...(marks.bold ? { bold: true } : {}),\n ...(marks.italic ? { italic: true } : {}),\n ...(marks.underline ? { underline: true } : {}),\n ...(marks.strikethrough ? { strikethrough: true } : {}),\n ...(marks.code ? { code: true } : {}),\n ...(marks.superscript ? { superscript: true } : {}),\n ...(marks.subscript ? { subscript: true } : {}),\n })\n continue\n }\n\n output.push(...convertElement(node, marks))\n }\n\n return output\n}\n\nfunction convertElement(element: ParsedElement, marks: TextMarks): Array<RTENode | RTETextNode> {\n switch (element.tag) {\n case \"strong\":\n case \"b\":\n return convertNodes(element.children, { ...marks, bold: true })\n case \"em\":\n case \"i\":\n return convertNodes(element.children, { ...marks, italic: true })\n case \"u\":\n return convertNodes(element.children, { ...marks, underline: true })\n case \"s\":\n case \"strike\":\n case \"del\":\n return convertNodes(element.children, { ...marks, strikethrough: true })\n case \"sup\":\n return convertNodes(element.children, { ...marks, superscript: true })\n case \"sub\":\n return convertNodes(element.children, { ...marks, subscript: true })\n case \"code\":\n return convertNodes(element.children, { ...marks, code: true })\n case \"br\":\n return [{ text: \"\\n\" }]\n case \"img\":\n return [\n {\n type: \"img\",\n uid: createUid(),\n attrs: {\n src: element.attrs.src ?? \"\",\n alt: element.attrs.alt ?? \"\",\n },\n },\n ]\n case \"hr\":\n return [\n {\n type: \"hr\",\n uid: createUid(),\n },\n ]\n case \"a\":\n return [\n {\n type: \"a\",\n uid: createUid(),\n attrs: {\n href: element.attrs.href ?? \"\",\n ...(element.attrs.target ? { target: element.attrs.target } : {}),\n },\n children: convertNodes(element.children),\n },\n ]\n case \"reference\":\n return [\n {\n type: \"reference\",\n uid: createUid(),\n attrs: {\n ...element.attrs,\n },\n },\n ]\n case \"pre\": {\n const codeText = extractTextContent(element)\n return [\n {\n type: \"code\",\n uid: createUid(),\n children: codeText ? [{ text: codeText }] : [],\n },\n ]\n }\n case \"p\":\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n case \"ul\":\n case \"ol\":\n case \"li\":\n case \"blockquote\":\n case \"table\":\n case \"tr\":\n case \"td\":\n case \"th\":\n return [\n {\n type: element.tag,\n uid: createUid(),\n children: convertNodes(element.children),\n },\n ]\n default:\n return convertNodes(element.children, marks)\n }\n}\n\nfunction extractTextContent(node: ParsedNode): string {\n if (node.kind === \"text\") {\n return decodeHTML(node.value)\n }\n\n return node.children.map((child) => extractTextContent(child)).join(\"\")\n}\n\nfunction normalizeText(value: string): string {\n const collapsed = value.replace(/\\s+/g, \" \")\n if (collapsed.trim().length === 0) {\n return \" \"\n }\n return collapsed\n}\n","import type { RTEDocNode, RTENode, RTETextNode } from \"./types.js\"\nimport { isTextNode } from \"./utils.js\"\n\nexport function transform(\n doc: RTEDocNode,\n visitors: Record<string, (node: RTENode) => RTENode | undefined>,\n): RTEDocNode {\n const transformed = visitNode(doc, visitors)\n\n if (!transformed || isTextNode(transformed) || transformed.type !== \"doc\") {\n return {\n ...doc,\n children: [],\n }\n }\n\n return transformed as RTEDocNode\n}\n\nfunction visitNode(\n node: RTENode | RTETextNode,\n visitors: Record<string, (node: RTENode) => RTENode | undefined>,\n): RTENode | RTETextNode | undefined {\n if (isTextNode(node)) {\n return { ...node }\n }\n\n const nextChildren = (node.children ?? [])\n .map((child) => visitNode(child, visitors))\n .filter((child): child is RTENode | RTETextNode => Boolean(child))\n\n const withChildren: RTENode = {\n ...node,\n ...(node.children ? { children: nextChildren } : {}),\n }\n\n const visitor = visitors[withChildren.type]\n if (!visitor) {\n return withChildren\n }\n\n return visitor(withChildren)\n}\n","import type { RTEDocNode, RTENode, RTETextNode } from \"./types.js\"\nimport { KNOWN_RTE_TYPES, isElementNode, isRecord, isTextNode } from \"./utils.js\"\n\nexport function validate(doc: unknown): { valid: boolean; errors: string[] } {\n const errors: string[] = []\n\n if (!isElementNode(doc)) {\n errors.push(\"Document must be an object node with type and uid\")\n return { valid: false, errors }\n }\n\n if (doc.type !== \"doc\") {\n errors.push('Document root node must have type \"doc\"')\n }\n\n if (!Array.isArray(doc.children)) {\n errors.push('Document root node must include a \"children\" array')\n } else {\n validateChildren(doc.children, \"doc.children\", errors)\n }\n\n return { valid: errors.length === 0, errors }\n}\n\nfunction validateChildren(\n children: unknown[],\n path: string,\n errors: string[],\n): asserts children is Array<RTENode | RTETextNode> {\n children.forEach((child, index) => {\n validateNode(child, `${path}[${index}]`, errors)\n })\n}\n\nfunction validateNode(node: unknown, path: string, errors: string[]): void {\n if (isTextNode(node)) {\n if (typeof node.text !== \"string\") {\n errors.push(`${path} must have a string text value`)\n }\n return\n }\n\n if (!isElementNode(node)) {\n errors.push(`${path} must be a valid element node or text node`)\n return\n }\n\n validateElementNode(node, path, errors)\n}\n\nfunction validateElementNode(node: RTENode, path: string, errors: string[]): void {\n if (!KNOWN_RTE_TYPES.has(node.type)) {\n errors.push(`${path}.type \"${node.type}\" is not a supported RTE node type`)\n }\n\n if (typeof node.uid !== \"string\" || node.uid.trim().length === 0) {\n errors.push(`${path}.uid must be a non-empty string`)\n }\n\n if (node.children !== undefined) {\n if (!Array.isArray(node.children)) {\n errors.push(`${path}.children must be an array when provided`)\n } else {\n validateChildren(node.children, `${path}.children`, errors)\n }\n }\n\n switch (node.type) {\n case \"img\":\n validateImgNode(node, path, errors)\n break\n case \"a\":\n validateAnchorNode(node, path, errors)\n break\n case \"reference\":\n validateReferenceNode(node, path, errors)\n break\n case \"hr\":\n if (Array.isArray(node.children) && node.children.length > 0) {\n errors.push(`${path}.children must be empty for hr nodes`)\n }\n break\n }\n}\n\nfunction validateImgNode(node: RTENode, path: string, errors: string[]): void {\n if (!isRecord(node.attrs) || typeof node.attrs.src !== \"string\" || node.attrs.src.length === 0) {\n errors.push(`${path}.attrs.src must be a non-empty string for img nodes`)\n }\n\n if (isRecord(node.attrs) && node.attrs.alt !== undefined && typeof node.attrs.alt !== \"string\") {\n errors.push(`${path}.attrs.alt must be a string when provided`)\n }\n}\n\nfunction validateAnchorNode(node: RTENode, path: string, errors: string[]): void {\n if (\n !isRecord(node.attrs) ||\n typeof node.attrs.href !== \"string\" ||\n node.attrs.href.length === 0\n ) {\n errors.push(`${path}.attrs.href must be a non-empty string for a nodes`)\n }\n\n if (\n isRecord(node.attrs) &&\n node.attrs.target !== undefined &&\n typeof node.attrs.target !== \"string\"\n ) {\n errors.push(`${path}.attrs.target must be a string when provided`)\n }\n}\n\nfunction validateReferenceNode(node: RTENode, path: string, errors: string[]): void {\n if (!isRecord(node.attrs)) {\n errors.push(`${path}.attrs must be present for reference nodes`)\n return\n }\n\n const refType = node.attrs.type\n if (refType !== \"entry\" && refType !== \"asset\") {\n errors.push(`${path}.attrs.type must be \"entry\" or \"asset\" for reference nodes`)\n return\n }\n\n if (refType === \"entry\" && typeof node.attrs[\"entry-uid\"] !== \"string\") {\n errors.push(`${path}.attrs[\"entry-uid\"] must be provided for entry references`)\n }\n\n if (refType === \"asset\" && typeof node.attrs[\"asset-uid\"] !== \"string\") {\n errors.push(`${path}.attrs[\"asset-uid\"] must be provided for asset references`)\n }\n}\n\nexport type { RTEDocNode }\n","/**\n * Launch API response helpers.\n *\n * The Launch API returns responses in the format:\n * { pagination: { count, limit, skip }, [key]: [...] }\n *\n * For example, listing projects returns:\n * { pagination: { count: 7, limit: 25, skip: null }, projects: [...] }\n *\n * These helpers normalise the response into the shape the paginator expects.\n */\n\n/**\n * Extract a list from a Launch API response.\n *\n * Handles:\n * - `{ pagination: { count }, [key]: [...] }` — real Launch API format\n * - `{ data: T[], count? }` — legacy / fallback\n * - Plain arrays `T[]`\n */\nexport function extractList<T>(body: unknown, key: string): { items: T[]; count?: number } {\n if (Array.isArray(body)) {\n return { items: body as T[] }\n }\n\n if (body && typeof body === \"object\") {\n const obj = body as Record<string, unknown>\n\n // Launch API format: { pagination: { count }, [key]: [...] }\n if (key in obj && Array.isArray(obj[key])) {\n const pagination = obj.pagination as { count?: number } | undefined\n return { items: obj[key] as T[], count: pagination?.count }\n }\n\n // Fallback: { data: [...], count? }\n if (\"data\" in obj && Array.isArray(obj.data)) {\n return { items: obj.data as T[], count: (obj as { count?: number }).count }\n }\n }\n\n return { items: [] }\n}\n\n/** Extract a single item from a response that may be a plain object or `{ data: T }`. */\nexport function extractItem<T>(body: unknown): T {\n if (body && typeof body === \"object\" && \"data\" in body) {\n return (body as { data: T }).data\n }\n\n return body as T\n}\n","import { collectAll, paginate } from \"../cma/pagination.js\"\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { extractItem, extractList } from \"./response.js\"\nimport type {\n CreateDeploymentData,\n DeploymentLog,\n DeploymentLogOptions,\n LaunchDeployment,\n ListDeploymentsOptions,\n ServerLog,\n ServerLogOptions,\n SignedUploadUrl,\n} from \"./types.js\"\n\nexport class DeploymentsClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n private basePath(projectUid: string, environmentUid: string): string {\n return `/projects/${projectUid}/environments/${environmentUid}/deployments`\n }\n\n list(\n projectUid: string,\n environmentUid: string,\n options?: ListDeploymentsOptions,\n ): AsyncIterable<LaunchDeployment> {\n return paginate<LaunchDeployment>(\n async (skip, limit) => {\n const params: Record<string, string> = {\n skip: String(skip),\n limit: String(limit),\n }\n const response = await this.http.get<unknown>(\n this.basePath(projectUid, environmentUid),\n params,\n )\n return extractList<LaunchDeployment>(response.data, \"deployments\")\n },\n { limit: options?.limit },\n )\n }\n\n async listAll(\n projectUid: string,\n environmentUid: string,\n options?: ListDeploymentsOptions,\n ): Promise<LaunchDeployment[]> {\n return collectAll(this.list(projectUid, environmentUid, options))\n }\n\n async get(\n projectUid: string,\n environmentUid: string,\n deploymentUid: string,\n ): Promise<LaunchDeployment> {\n const response = await this.http.get<unknown>(\n `${this.basePath(projectUid, environmentUid)}/${deploymentUid}`,\n )\n return extractItem<LaunchDeployment>(response.data)\n }\n\n async create(\n projectUid: string,\n environmentUid: string,\n data: CreateDeploymentData,\n ): Promise<LaunchDeployment> {\n const response = await this.http.post<unknown>(this.basePath(projectUid, environmentUid), data)\n return extractItem<LaunchDeployment>(response.data)\n }\n\n async getDeploymentLogs(\n projectUid: string,\n environmentUid: string,\n deploymentUid: string,\n options?: DeploymentLogOptions,\n ): Promise<DeploymentLog[]> {\n const params: Record<string, string> = {}\n if (options?.timestamp) params.timestamp = options.timestamp\n\n const response = await this.http.get<unknown>(\n `${this.basePath(projectUid, environmentUid)}/${deploymentUid}/logs/deployment-logs`,\n Object.keys(params).length > 0 ? params : undefined,\n )\n return extractList<DeploymentLog>(response.data, \"logs\").items\n }\n\n async getServerLogs(\n projectUid: string,\n environmentUid: string,\n deploymentUid: string,\n options?: ServerLogOptions,\n ): Promise<ServerLog[]> {\n const params: Record<string, string> = {}\n if (options?.startTime !== undefined) params.startTime = String(options.startTime)\n if (options?.endTime !== undefined) params.endTime = String(options.endTime)\n\n const response = await this.http.get<unknown>(\n `${this.basePath(projectUid, environmentUid)}/${deploymentUid}/logs/server-logs`,\n Object.keys(params).length > 0 ? params : undefined,\n )\n return extractList<ServerLog>(response.data, \"logs\").items\n }\n\n async getUploadUrl(projectUid: string, environmentUid: string): Promise<SignedUploadUrl> {\n const response = await this.http.get<unknown>(\n `${this.basePath(projectUid, environmentUid)}/upload/signed_url`,\n )\n return extractItem<SignedUploadUrl>(response.data)\n }\n\n async getDownloadUrl(\n projectUid: string,\n environmentUid: string,\n deploymentUid: string,\n ): Promise<string> {\n const response = await this.http.get<unknown>(\n `${this.basePath(projectUid, environmentUid)}/${deploymentUid}/download/signed_url`,\n )\n const item = extractItem<{ downloadUrl: string }>(response.data)\n return item.downloadUrl\n }\n}\n","import { collectAll, paginate } from \"../cma/pagination.js\"\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { extractItem, extractList } from \"./response.js\"\nimport type {\n CreateEnvironmentData,\n LaunchEnvironment,\n RevalidateCDNData,\n SignedUploadUrl,\n UpdateEnvironmentData,\n} from \"./types.js\"\n\nexport class EnvironmentsClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n list(projectUid: string): AsyncIterable<LaunchEnvironment> {\n return paginate<LaunchEnvironment>(async (skip, limit) => {\n const response = await this.http.get<unknown>(`/projects/${projectUid}/environments`, {\n skip: String(skip),\n limit: String(limit),\n })\n return extractList<LaunchEnvironment>(response.data, \"environments\")\n })\n }\n\n async listAll(projectUid: string): Promise<LaunchEnvironment[]> {\n return collectAll(this.list(projectUid))\n }\n\n async get(projectUid: string, envUid: string): Promise<LaunchEnvironment> {\n const response = await this.http.get<unknown>(`/projects/${projectUid}/environments/${envUid}`)\n return extractItem<LaunchEnvironment>(response.data)\n }\n\n async create(projectUid: string, data: CreateEnvironmentData): Promise<LaunchEnvironment> {\n const response = await this.http.post<unknown>(`/projects/${projectUid}/environments`, data)\n return extractItem<LaunchEnvironment>(response.data)\n }\n\n async update(\n projectUid: string,\n envUid: string,\n data: UpdateEnvironmentData,\n ): Promise<LaunchEnvironment> {\n const response = await this.http.put<unknown>(\n `/projects/${projectUid}/environments/${envUid}`,\n data,\n )\n return extractItem<LaunchEnvironment>(response.data)\n }\n\n async delete(projectUid: string, envUid: string): Promise<void> {\n await this.http.delete(`/projects/${projectUid}/environments/${envUid}`)\n }\n\n async revalidateCDNCache(\n projectUid: string,\n envUid: string,\n data: RevalidateCDNData,\n ): Promise<void> {\n await this.http.post(\n `/projects/${projectUid}/environments/${envUid}/revalidate-cdn-cache`,\n data,\n )\n }\n\n async getUploadUrl(projectUid: string): Promise<SignedUploadUrl> {\n const response = await this.http.get<unknown>(\n `/projects/${projectUid}/environments/upload/signed_url`,\n )\n return extractItem<SignedUploadUrl>(response.data)\n }\n}\n","import { collectAll, paginate } from \"../cma/pagination.js\"\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { extractItem, extractList } from \"./response.js\"\nimport type {\n CreateProjectData,\n LaunchProject,\n ListProjectsOptions,\n SignedUploadUrl,\n TransferGitRepositoryData,\n UpdateProjectData,\n} from \"./types.js\"\n\nexport class ProjectsClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n list(options?: ListProjectsOptions): AsyncIterable<LaunchProject> {\n return paginate<LaunchProject>(\n async (skip, limit) => {\n const response = await this.http.get<unknown>(\"/projects\", {\n skip: String(skip),\n limit: String(limit),\n })\n return extractList<LaunchProject>(response.data, \"projects\")\n },\n { limit: options?.limit },\n )\n }\n\n async listAll(options?: ListProjectsOptions): Promise<LaunchProject[]> {\n return collectAll(this.list(options))\n }\n\n async get(projectUid: string): Promise<LaunchProject> {\n const response = await this.http.get<unknown>(`/projects/${projectUid}`)\n return extractItem<LaunchProject>(response.data)\n }\n\n async create(data: CreateProjectData): Promise<LaunchProject> {\n const response = await this.http.post<unknown>(\"/projects\", data)\n return extractItem<LaunchProject>(response.data)\n }\n\n async update(projectUid: string, data: UpdateProjectData): Promise<LaunchProject> {\n const response = await this.http.put<unknown>(`/projects/${projectUid}`, data)\n return extractItem<LaunchProject>(response.data)\n }\n\n async delete(projectUid: string): Promise<void> {\n await this.http.delete(`/projects/${projectUid}`)\n }\n\n async transferGitRepository(projectUid: string, data: TransferGitRepositoryData): Promise<void> {\n await this.http.patch(`/projects/${projectUid}/git-repository`, data)\n }\n\n async getUploadUrl(): Promise<SignedUploadUrl> {\n const response = await this.http.get<unknown>(\"/projects/upload/signed_url\")\n return extractItem<SignedUploadUrl>(response.data)\n }\n}\n","import { ContentstackHttpClient } from \"../http/client.js\"\nimport type { HttpClientConfig } from \"../http/types.js\"\nimport type { ContentstackRegion } from \"../regions/resolver.js\"\nimport { resolveEndpoints } from \"../regions/resolver.js\"\nimport { DeploymentsClient } from \"./deployments.js\"\nimport { EnvironmentsClient } from \"./environments.js\"\nimport { ProjectsClient } from \"./projects.js\"\n\nexport interface LaunchClientConfig {\n region: ContentstackRegion\n organizationUid: string\n auth: { type: \"oauth\"; accessToken: string } | { type: \"authtoken\"; token: string }\n httpOptions?: Partial<HttpClientConfig>\n}\n\nexport interface LaunchClient {\n projects: ProjectsClient\n environments: EnvironmentsClient\n deployments: DeploymentsClient\n}\n\nexport function createLaunchClient(config: LaunchClientConfig): LaunchClient {\n const endpoints = resolveEndpoints(config.region)\n\n const headers: Record<string, string> = {\n organization_uid: config.organizationUid,\n }\n\n switch (config.auth.type) {\n case \"oauth\":\n headers.authorization = `Bearer ${config.auth.accessToken}`\n break\n case \"authtoken\":\n headers.authtoken = config.auth.token\n break\n }\n\n const http = new ContentstackHttpClient({\n ...config.httpOptions,\n baseUrl: config.httpOptions?.baseUrl ?? endpoints.launch,\n headers: {\n ...config.httpOptions?.headers,\n ...headers,\n },\n })\n\n return {\n projects: new ProjectsClient(http),\n environments: new EnvironmentsClient(http),\n deployments: new DeploymentsClient(http),\n }\n}\n","import { collectAll, paginate } from \"../cma/pagination.js\"\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport type {\n BrandKit,\n CreateBrandKitData,\n ListBrandKitsOptions,\n UpdateBrandKitData,\n} from \"./types.js\"\n\nexport class BrandKitsSubClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n list(options?: ListBrandKitsOptions): AsyncIterable<BrandKit> {\n return paginate<BrandKit>(\n async (skip, limit) => {\n const response = await this.http.get<{ data: BrandKit[]; count?: number }>(\n \"/v1/brand-kits\",\n {\n skip: String(skip),\n limit: String(limit),\n },\n )\n return { items: response.data.data ?? [], count: response.data.count }\n },\n { limit: options?.limit },\n )\n }\n\n async listAll(options?: ListBrandKitsOptions): Promise<BrandKit[]> {\n return collectAll(this.list(options))\n }\n\n async get(brandKitUid: string): Promise<BrandKit> {\n const response = await this.http.get<{ data: BrandKit }>(`/v1/brand-kits/${brandKitUid}`)\n return response.data.data\n }\n\n async create(data: CreateBrandKitData): Promise<BrandKit> {\n const response = await this.http.post<{ data: BrandKit }>(\"/v1/brand-kits\", data)\n return response.data.data\n }\n\n async update(brandKitUid: string, data: UpdateBrandKitData): Promise<BrandKit> {\n const response = await this.http.put<{ data: BrandKit }>(`/v1/brand-kits/${brandKitUid}`, data)\n return response.data.data\n }\n\n async delete(brandKitUid: string): Promise<void> {\n await this.http.delete(`/v1/brand-kits/${brandKitUid}`)\n }\n}\n","import { collectAll, paginate } from \"../cma/pagination.js\"\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport type {\n CreateVoiceProfileData,\n ListVoiceProfilesOptions,\n UpdateVoiceProfileData,\n VoiceProfile,\n} from \"./types.js\"\n\nexport class VoiceProfilesSubClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n list(brandKitUid: string, options?: ListVoiceProfilesOptions): AsyncIterable<VoiceProfile> {\n const scoped = this.http.withHeaders({ brand_kit_uid: brandKitUid })\n return paginate<VoiceProfile>(\n async (skip, limit) => {\n const response = await scoped.get<{ data: VoiceProfile[]; count?: number }>(\n `/v1/brand-kits/${brandKitUid}/voice-profiles`,\n { skip: String(skip), limit: String(limit) },\n )\n return { items: response.data.data ?? [], count: response.data.count }\n },\n { limit: options?.limit },\n )\n }\n\n async listAll(brandKitUid: string, options?: ListVoiceProfilesOptions): Promise<VoiceProfile[]> {\n return collectAll(this.list(brandKitUid, options))\n }\n\n async get(brandKitUid: string, voiceProfileUid: string): Promise<VoiceProfile> {\n const scoped = this.http.withHeaders({ brand_kit_uid: brandKitUid })\n const response = await scoped.get<{ data: VoiceProfile }>(\n `/v1/brand-kits/${brandKitUid}/voice-profiles/${voiceProfileUid}`,\n )\n return response.data.data\n }\n\n async create(brandKitUid: string, data: CreateVoiceProfileData): Promise<VoiceProfile> {\n const scoped = this.http.withHeaders({ brand_kit_uid: brandKitUid })\n const response = await scoped.post<{ data: VoiceProfile }>(\n `/v1/brand-kits/${brandKitUid}/voice-profiles`,\n data,\n )\n return response.data.data\n }\n\n async update(\n brandKitUid: string,\n voiceProfileUid: string,\n data: UpdateVoiceProfileData,\n ): Promise<VoiceProfile> {\n const scoped = this.http.withHeaders({ brand_kit_uid: brandKitUid })\n const response = await scoped.put<{ data: VoiceProfile }>(\n `/v1/brand-kits/${brandKitUid}/voice-profiles/${voiceProfileUid}`,\n data,\n )\n return response.data.data\n }\n\n async delete(brandKitUid: string, voiceProfileUid: string): Promise<void> {\n const scoped = this.http.withHeaders({ brand_kit_uid: brandKitUid })\n await scoped.delete(`/v1/brand-kits/${brandKitUid}/voice-profiles/${voiceProfileUid}`)\n }\n}\n","import { ContentstackHttpClient } from \"../http/client.js\"\nimport type { HttpClientConfig } from \"../http/types.js\"\nimport type { ContentstackRegion } from \"../regions/resolver.js\"\nimport { resolveEndpoints } from \"../regions/resolver.js\"\nimport { BrandKitsSubClient } from \"./brand-kits.js\"\nimport { VoiceProfilesSubClient } from \"./voice-profiles.js\"\n\nexport interface BrandKitClientConfig {\n region: ContentstackRegion\n organizationUid: string\n auth: { type: \"oauth\"; accessToken: string } | { type: \"authtoken\"; token: string }\n httpOptions?: Partial<HttpClientConfig>\n}\n\nexport interface BrandKitClient {\n brandKits: BrandKitsSubClient\n voiceProfiles: VoiceProfilesSubClient\n}\n\nexport function createBrandKitClient(config: BrandKitClientConfig): BrandKitClient {\n const endpoints = resolveEndpoints(config.region)\n\n const headers: Record<string, string> = {\n organization_uid: config.organizationUid,\n }\n\n switch (config.auth.type) {\n case \"oauth\":\n headers.authorization = `Bearer ${config.auth.accessToken}`\n break\n case \"authtoken\":\n headers.authtoken = config.auth.token\n break\n }\n\n const http = new ContentstackHttpClient({\n ...config.httpOptions,\n baseUrl: config.httpOptions?.baseUrl ?? endpoints.brandKit,\n headers: {\n ...config.httpOptions?.headers,\n ...headers,\n },\n })\n\n return {\n brandKits: new BrandKitsSubClient(http),\n voiceProfiles: new VoiceProfilesSubClient(http),\n }\n}\n","import type { ContentstackHttpClient } from \"../http/client.js\"\nimport type {\n IngestContentData,\n KnowledgeVaultItem,\n KnowledgeVaultUsage,\n UpdateContentData,\n} from \"./types.js\"\n\nexport class KnowledgeVaultItemsClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n async ingest(data: IngestContentData): Promise<KnowledgeVaultItem> {\n const response = await this.http.post<{ data: KnowledgeVaultItem }>(\"/v1/knowledge-vault\", data)\n return response.data.data\n }\n\n async update(itemUid: string, data: UpdateContentData): Promise<KnowledgeVaultItem> {\n const response = await this.http.put<{ data: KnowledgeVaultItem }>(\n `/v1/knowledge-vault/${itemUid}`,\n data,\n )\n return response.data.data\n }\n\n async delete(itemUid: string): Promise<void> {\n await this.http.delete(`/v1/knowledge-vault/${itemUid}`)\n }\n\n async getUsage(): Promise<KnowledgeVaultUsage> {\n const response = await this.http.get<{ data: KnowledgeVaultUsage }>(\"/v1/knowledge-vault/usage\")\n return response.data.data\n }\n}\n","import { ContentstackHttpClient } from \"../http/client.js\"\nimport type { HttpClientConfig } from \"../http/types.js\"\nimport type { ContentstackRegion } from \"../regions/resolver.js\"\nimport { resolveEndpoints } from \"../regions/resolver.js\"\nimport { KnowledgeVaultItemsClient } from \"./items.js\"\n\nexport interface KnowledgeVaultClientConfig {\n region: ContentstackRegion\n organizationUid: string\n brandKitUid: string\n auth: { type: \"oauth\"; accessToken: string } | { type: \"authtoken\"; token: string }\n httpOptions?: Partial<HttpClientConfig>\n}\n\nexport interface KnowledgeVaultClient {\n items: KnowledgeVaultItemsClient\n}\n\nexport function createKnowledgeVaultClient(\n config: KnowledgeVaultClientConfig,\n): KnowledgeVaultClient {\n const endpoints = resolveEndpoints(config.region)\n\n const headers: Record<string, string> = {\n organization_uid: config.organizationUid,\n brand_kit_uid: config.brandKitUid,\n }\n\n switch (config.auth.type) {\n case \"oauth\":\n headers.authorization = `Bearer ${config.auth.accessToken}`\n break\n case \"authtoken\":\n headers.authtoken = config.auth.token\n break\n }\n\n const http = new ContentstackHttpClient({\n ...config.httpOptions,\n baseUrl: config.httpOptions?.baseUrl ?? endpoints.brandKitAI,\n headers: {\n ...config.httpOptions?.headers,\n ...headers,\n },\n })\n\n return {\n items: new KnowledgeVaultItemsClient(http),\n }\n}\n","import { ContentstackHttpClient } from \"../http/client.js\"\nimport type { HttpClientConfig } from \"../http/types.js\"\nimport type { ContentstackRegion } from \"../regions/resolver.js\"\nimport { resolveEndpoints } from \"../regions/resolver.js\"\nimport type { GenerateContentData, GenerateContentResult } from \"./types.js\"\n\nexport interface GenerativeAIClientConfig {\n region: ContentstackRegion\n organizationUid: string\n brandKitUid: string\n auth: { type: \"oauth\"; accessToken: string } | { type: \"authtoken\"; token: string }\n httpOptions?: Partial<HttpClientConfig>\n}\n\nexport interface GenerativeAIClient {\n generate(data: GenerateContentData): Promise<GenerateContentResult>\n}\n\nexport function createGenerativeAIClient(config: GenerativeAIClientConfig): GenerativeAIClient {\n const endpoints = resolveEndpoints(config.region)\n\n const headers: Record<string, string> = {\n organization_uid: config.organizationUid,\n brand_kit_uid: config.brandKitUid,\n }\n\n switch (config.auth.type) {\n case \"oauth\":\n headers.authorization = `Bearer ${config.auth.accessToken}`\n break\n case \"authtoken\":\n headers.authtoken = config.auth.token\n break\n }\n\n const http = new ContentstackHttpClient({\n ...config.httpOptions,\n baseUrl: config.httpOptions?.baseUrl ?? endpoints.brandKitAI,\n headers: {\n ...config.httpOptions?.headers,\n ...headers,\n },\n })\n\n return {\n async generate(data: GenerateContentData): Promise<GenerateContentResult> {\n const body: Record<string, unknown> = { prompt: data.prompt }\n if (data.voiceProfileUid) {\n body.voice_profile_uid = data.voiceProfileUid\n }\n if (data.useKnowledgeVault !== undefined) {\n body.knowledge_vault = data.useKnowledgeVault\n }\n const response = await http.post<{ data: GenerateContentResult }>(\n \"/v1/generative-ai/generate\",\n body,\n )\n return response.data.data\n },\n }\n}\n"],"mappings":"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","names":["value","import_json_rte_serializer","import_json_rte_serializer","parent","EnvironmentsClient","EnvironmentsClient"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/http/errors.ts","../src/regions/endpoints.ts","../src/regions/resolver.ts","../src/http/parse-error.ts","../src/auth/scopes.ts","../src/http/client.ts","../src/auth/pkce.ts","../src/auth/oauth-client.ts","../src/cma/pagination.ts","../src/cma/assets.ts","../src/cma/base-client.ts","../src/cma/audit-log.ts","../src/cma/branch-aliases.ts","../src/cma/branches.ts","../src/cma/bulk.ts","../src/cma/content-types.ts","../src/cma/entries.ts","../src/cma/environments.ts","../src/cma/extensions.ts","../src/cma/global-fields.ts","../src/cma/labels.ts","../src/cma/locales.ts","../src/cma/publish-rules.ts","../src/cma/releases.ts","../src/cma/roles.ts","../src/cma/taxonomies.ts","../src/cma/tokens.ts","../src/cma/webhooks.ts","../src/cma/workflows.ts","../src/cma/client.ts","../src/cma/request-builders.ts","../src/images/builder.ts","../src/rte/to-html.ts","../src/rte/utils.ts","../src/rte/serializer.ts","../src/rte/to-markdown.ts","../src/rte/to-plaintext.ts","../src/rte/from-html.ts","../src/rte/transform.ts","../src/rte/validate.ts","../src/launch/response.ts","../src/launch/deployments.ts","../src/launch/environments.ts","../src/launch/projects.ts","../src/launch/client.ts","../src/brandkit/brand-kits.ts","../src/brandkit/voice-profiles.ts","../src/brandkit/client.ts","../src/knowledge-vault/items.ts","../src/knowledge-vault/client.ts","../src/generative-ai/client.ts"],"sourcesContent":["export * from \"./regions/index.js\"\nexport * from \"./http/index.js\"\nexport * from \"./auth/index.js\"\nexport * from \"./cma/index.js\"\nexport * from \"./images/index.js\"\nexport * from \"./rte/index.js\"\nexport * from \"./launch/index.js\"\nexport * from \"./brandkit/index.js\"\nexport * from \"./knowledge-vault/index.js\"\nexport * from \"./generative-ai/index.js\"\n","/**\n * Base error class for all Contentstack SDK errors.\n * Every error includes an actionable message and relevant context.\n */\nexport class ContentstackError extends Error {\n override readonly name: string = \"ContentstackError\"\n readonly status?: number\n readonly errorCode?: number\n readonly errors?: Record<string, string[]>\n readonly requestPath?: string\n\n constructor(\n message: string,\n options?: {\n status?: number\n errorCode?: number\n errors?: Record<string, string[]>\n requestPath?: string\n cause?: Error\n },\n ) {\n super(message, options?.cause ? { cause: options.cause } : undefined)\n this.status = options?.status\n this.errorCode = options?.errorCode\n this.errors = options?.errors\n this.requestPath = options?.requestPath\n }\n}\n\nexport class ContentstackAuthError extends ContentstackError {\n override readonly name = \"ContentstackAuthError\"\n override readonly status = 401\n}\n\nexport class ContentstackForbiddenError extends ContentstackError {\n override readonly name = \"ContentstackForbiddenError\"\n override readonly status = 403\n}\n\nexport class ContentstackNotFoundError extends ContentstackError {\n override readonly name = \"ContentstackNotFoundError\"\n override readonly status = 404\n}\n\nexport class ContentstackValidationError extends ContentstackError {\n override readonly name = \"ContentstackValidationError\"\n override readonly status: number\n\n constructor(\n message: string,\n options?: {\n status?: number\n errorCode?: number\n errors?: Record<string, string[]>\n requestPath?: string\n cause?: Error\n },\n ) {\n super(message, options)\n this.status = options?.status ?? 400\n }\n}\n\nexport class ContentstackInvalidApiKeyError extends ContentstackError {\n override readonly name = \"ContentstackInvalidApiKeyError\"\n override readonly status = 412\n}\n\nexport class ContentstackRateLimitError extends ContentstackError {\n override readonly name = \"ContentstackRateLimitError\"\n override readonly status = 429\n readonly retryAfter?: number\n\n constructor(\n message: string,\n options?: {\n errorCode?: number\n errors?: Record<string, string[]>\n requestPath?: string\n cause?: Error\n retryAfter?: number\n },\n ) {\n super(message, { ...options, status: 429 })\n this.retryAfter = options?.retryAfter\n }\n}\n\nexport class ContentstackServerError extends ContentstackError {\n override readonly name = \"ContentstackServerError\"\n}\n\nexport class ContentstackConfigError extends ContentstackError {\n override readonly name = \"ContentstackConfigError\"\n}\n","import {\n type ContentstackEndpoints as UpstreamEndpoints,\n getContentstackEndpoints,\n getRegionForString,\n} from \"@timbenniks/contentstack-endpoints\"\nimport type { ContentstackEndpoints, ContentstackRegion } from \"./resolver.js\"\n\n/** Brand Kit endpoints not available in upstream package — maintained locally */\nconst BRAND_KIT_URLS: Record<ContentstackRegion, { brandKit: string; brandKitAI: string }> = {\n us: {\n brandKit: \"https://brand-kits-api.contentstack.com\",\n brandKitAI: \"https://ai.contentstack.com/brand-kits\",\n },\n eu: {\n brandKit: \"https://eu-brand-kits-api.contentstack.com\",\n brandKitAI: \"https://eu-ai.contentstack.com/brand-kits\",\n },\n au: {\n brandKit: \"https://au-brand-kits-api.contentstack.com\",\n brandKitAI: \"https://au-ai.contentstack.com/brand-kits\",\n },\n \"azure-na\": {\n brandKit: \"https://azure-na-brand-kits-api.contentstack.com\",\n brandKitAI: \"https://azure-na-ai.contentstack.com/brand-kits\",\n },\n \"azure-eu\": {\n brandKit: \"https://azure-eu-brand-kits-api.contentstack.com\",\n brandKitAI: \"https://azure-eu-ai.contentstack.com/brand-kits\",\n },\n \"gcp-na\": {\n brandKit: \"https://gcp-na-brand-kits-api.contentstack.com\",\n brandKitAI: \"https://gcp-na-ai.contentstack.com/brand-kits\",\n },\n \"gcp-eu\": {\n brandKit: \"https://gcp-eu-brand-kits-api.contentstack.com\",\n brandKitAI: \"https://gcp-eu-ai.contentstack.com/brand-kits\",\n },\n}\n\nfunction mapEndpoints(\n upstream: UpstreamEndpoints,\n region: ContentstackRegion,\n hostsOnly: boolean,\n): ContentstackEndpoints {\n const bk = BRAND_KIT_URLS[region]\n const stripProtocol = (url: string) => url.replace(/^https?:\\/\\//, \"\")\n\n return Object.freeze({\n cma: upstream.contentManagement ?? \"\",\n cda: upstream.contentDelivery ?? \"\",\n graphql: upstream.graphqlDelivery ?? \"\",\n images: upstream.images ?? \"\",\n app: upstream.application ?? \"\",\n preview: upstream.preview ?? \"\",\n graphqlPreview: upstream.graphqlPreview ?? \"\",\n launch: upstream.launch ?? \"\",\n personalizeEdge: upstream.personalizeEdge ?? \"\",\n brandKit: hostsOnly ? stripProtocol(bk.brandKit) : bk.brandKit,\n brandKitAI: hostsOnly ? stripProtocol(bk.brandKitAI) : bk.brandKitAI,\n })\n}\n\nconst ALL_REGIONS: ContentstackRegion[] = [\n \"us\",\n \"eu\",\n \"au\",\n \"azure-na\",\n \"azure-eu\",\n \"gcp-na\",\n \"gcp-eu\",\n]\n\nfunction buildEndpointMap(): Record<ContentstackRegion, ContentstackEndpoints> {\n const map = {} as Record<ContentstackRegion, ContentstackEndpoints>\n for (const region of ALL_REGIONS) {\n map[region] = mapEndpoints(getContentstackEndpoints(region), region, false)\n }\n return Object.freeze(map)\n}\n\nfunction buildHostMap(): Record<ContentstackRegion, ContentstackEndpoints> {\n const map = {} as Record<ContentstackRegion, ContentstackEndpoints>\n for (const region of ALL_REGIONS) {\n map[region] = mapEndpoints(getContentstackEndpoints(region, true), region, true)\n }\n return Object.freeze(map)\n}\n\nexport const ENDPOINT_MAP = buildEndpointMap()\nexport const HOST_MAP = buildHostMap()\n\n/** Check if a string is a valid region via the upstream package */\nexport function isValidRegion(input: string): boolean {\n return getRegionForString(input) !== undefined\n}\n\n/** Map of extra aliases our SDK supports beyond what the upstream package handles */\nexport const EXTRA_ALIASES: Record<string, ContentstackRegion> = {\n \"north-america\": \"us\",\n europe: \"eu\",\n australia: \"au\",\n}\n","import { ContentstackConfigError } from \"../http/errors.js\"\nimport { ENDPOINT_MAP, EXTRA_ALIASES, HOST_MAP, isValidRegion } from \"./endpoints.js\"\n\n/** All 7 Contentstack regions */\nexport type ContentstackRegion = \"us\" | \"eu\" | \"au\" | \"azure-na\" | \"azure-eu\" | \"gcp-na\" | \"gcp-eu\"\n\n/** Resolved endpoint URLs for a region */\nexport interface ContentstackEndpoints {\n /** CMA base URL, e.g. \"https://api.contentstack.io\" */\n cma: string\n /** CDA REST base URL, e.g. \"https://cdn.contentstack.io\" */\n cda: string\n /** GraphQL CDA endpoint */\n graphql: string\n /** Asset/image delivery base URL */\n images: string\n /** Application URL (for OAuth), e.g. \"https://app.contentstack.com\" */\n app: string\n /** Preview API base URL */\n preview: string\n /** GraphQL preview endpoint */\n graphqlPreview: string\n /** Launch API base URL */\n launch: string\n /** Personalize edge endpoint */\n personalizeEdge: string\n /** Brand Kit Management API base URL */\n brandKit: string\n /** Brand Kit GenAI and Knowledge Vault base URL */\n brandKitAI: string\n}\n\nconst VALID_REGIONS = new Set<string>(Object.keys(ENDPOINT_MAP))\n\n/**\n * Resolve all API endpoints for a Contentstack region.\n *\n * @example\n * ```ts\n * const endpoints = resolveEndpoints(\"eu\");\n * // endpoints.cma === \"https://eu-api.contentstack.com\"\n * // endpoints.app === \"https://eu-app.contentstack.com\"\n * ```\n */\nexport function resolveEndpoints(region: ContentstackRegion): ContentstackEndpoints {\n return ENDPOINT_MAP[region]\n}\n\n/**\n * Resolve endpoints with https:// stripped (for SDK host parameters).\n *\n * @example\n * ```ts\n * const hosts = resolveHosts(\"eu\");\n * // hosts.cda === \"eu-cdn.contentstack.com\"\n * ```\n */\nexport function resolveHosts(region: ContentstackRegion): ContentstackEndpoints {\n return HOST_MAP[region]\n}\n\n/**\n * Normalize region aliases: \"na\" → \"us\", \"NA\" → \"us\", etc.\n * Case-insensitive. Throws ContentstackConfigError for unknown regions.\n */\nexport function normalizeRegion(input: string): ContentstackRegion {\n const lower = input.toLowerCase().trim()\n\n if (VALID_REGIONS.has(lower)) {\n return lower as ContentstackRegion\n }\n\n // Check extra aliases our SDK supports (north-america, europe, australia)\n const extraAlias = EXTRA_ALIASES[lower]\n if (extraAlias) {\n return extraAlias\n }\n\n // Check aliases handled by the upstream package (na, us, aws-na, etc.)\n if (isValidRegion(lower)) {\n // The upstream package recognized it — map back to our canonical region\n // \"na\" and \"us\" both map to the NA region which we call \"us\"\n if (lower === \"na\" || lower === \"aws-na\" || lower === \"aws_na\") return \"us\"\n if (lower === \"aws-eu\" || lower === \"aws_eu\") return \"eu\"\n if (lower === \"aws-au\" || lower === \"aws_au\") return \"au\"\n if (lower === \"azure_na\") return \"azure-na\"\n if (lower === \"azure_eu\") return \"azure-eu\"\n if (lower === \"gcp_na\") return \"gcp-na\"\n if (lower === \"gcp_eu\") return \"gcp-eu\"\n }\n\n const validRegions = [...VALID_REGIONS].join(\", \")\n const validAliases = [...Object.keys(EXTRA_ALIASES), \"na\", \"aws-na\", \"aws-eu\", \"aws-au\"].join(\n \", \",\n )\n throw new ContentstackConfigError(\n `Unknown region \"${input}\". Valid regions: ${validRegions}. Aliases: ${validAliases}.`,\n )\n}\n\nexport { ContentstackConfigError }\n","import { ContentstackError } from \"./errors.js\"\n\n/**\n * Parse a non-ok fetch Response into a ContentstackError.\n *\n * Handles the Contentstack API error format (error_message, error_code, errors)\n * and falls back to the HTTP status text when the body is not parseable.\n *\n * This is a shared utility used by React hooks and Vue composables to avoid\n * duplicating error-parsing logic across frameworks.\n */\nexport async function parseErrorResponse(\n response: Response,\n path: string,\n): Promise<ContentstackError> {\n try {\n const body = await response.json()\n return new ContentstackError(body.error_message ?? body.message ?? response.statusText, {\n status: response.status,\n errorCode: body.error_code,\n errors: body.errors,\n requestPath: path,\n })\n } catch {\n return new ContentstackError(response.statusText, {\n status: response.status,\n requestPath: path,\n })\n }\n}\n","/**\n * All available Contentstack OAuth scopes.\n *\n * Use `OAUTH_SCOPE_DESCRIPTIONS` for human-readable explanations of each scope.\n * Use `OAUTH_SCOPE_PRESETS` for common scope combinations.\n *\n * @see https://www.contentstack.com/docs/developers/developer-hub/oauth-scopes\n */\nexport type ContentstackOAuthScope =\n // ── User ──────────────────────────────────────────────────────────────\n | \"user:read\"\n | \"user:write\"\n | \"user.assignments:read\"\n\n // ── Organization ──────────────────────────────────────────────────────\n | \"organizations:read\"\n | \"organization:read\"\n | \"organization.logs:read\"\n | \"organization.ownership:write\"\n | \"organization.roles:read\"\n | \"organization.share:write\"\n | \"organization.share:read\"\n\n // ── Stack management ──────────────────────────────────────────────────\n | \"cm.stacks.management:read\"\n | \"cm.stacks.management:write\"\n | \"cm.stack.users:read\"\n | \"cm.stack.users:write\"\n | \"cm.stack.management:write\"\n | \"cm.stack.settings:read\"\n | \"cm.stack:share\"\n | \"cm.stack:unshare\"\n\n // ── Tokens ────────────────────────────────────────────────────────────\n | \"cm.stack.delivery-tokens:read\"\n | \"cm.stack.delivery-tokens:write\"\n | \"cm.stack.management-tokens:read\"\n | \"cm.stack.management-tokens:write\"\n\n // ── Content types ─────────────────────────────────────────────────────\n | \"cm.content-types.management:read\"\n | \"cm.content-types.management:write\"\n | \"cm.content-type:read\"\n | \"cm.content-types:export\"\n | \"cm.content-types:import\"\n\n // ── Global fields ─────────────────────────────────────────────────────\n | \"cm.global-fields.management:read\"\n | \"cm.global-fields.management:write\"\n | \"cm.global-fields:import\"\n\n // ── Entries ────────────────────────────────────────────────────────────\n | \"cm.entries.management:read\"\n | \"cm.entries.management:write\"\n | \"cm.entry:write\"\n | \"cm.entry:read\"\n | \"cm.entries:export\"\n | \"cm.entries:import\"\n | \"cm.entry:publish\"\n | \"cm.entry:unpublish\"\n | \"cm.entry.workflow:write\"\n\n // ── Bulk operations ───────────────────────────────────────────────────\n | \"cm.bulk-operations:publish\"\n | \"cm.bulk-operations:unpublish\"\n | \"cm.bulk-operations:delete\"\n | \"cm.bulk-operations:workflow\"\n\n // ── Assets ────────────────────────────────────────────────────────────\n | \"cm.assets.management:read\"\n | \"cm.assets.management:write\"\n | \"cm.assets:download\"\n | \"cm.assets.rt:read\"\n | \"cm.asset:write\"\n | \"cm.asset:read\"\n | \"cm.asset:publish\"\n | \"cm.asset:unpublish\"\n\n // ── Extensions ────────────────────────────────────────────────────────\n | \"cm.extensions.management:read\"\n | \"cm.extensions.management:write\"\n\n // ── Releases ──────────────────────────────────────────────────────────\n | \"cm.releases.management:read\"\n | \"cm.releases.management:write\"\n | \"cm.release:read\"\n | \"cm.release:write\"\n | \"cm.release:deploy\"\n | \"cm.release:clone\"\n\n // ── Workflows ─────────────────────────────────────────────────────────\n | \"cm.workflows.management:read\"\n | \"cm.workflows.management:write\"\n | \"cm.workflows.publishing-rules:write\"\n | \"cm.workflows.publishing-rules:read\"\n\n // ── Labels ────────────────────────────────────────────────────────────\n | \"cm.labels.management:read\"\n | \"cm.labels.management:write\"\n\n // ── Languages ─────────────────────────────────────────────────────────\n | \"cm.languages.management:read\"\n | \"cm.languages.management:write\"\n\n // ── Environments ──────────────────────────────────────────────────────\n | \"cm.environments.management:read\"\n | \"cm.environments.management:write\"\n\n // ── Roles ─────────────────────────────────────────────────────────────\n | \"cm.roles.management:read\"\n | \"cm.roles.management:write\"\n\n // ── Webhooks ──────────────────────────────────────────────────────────\n | \"cm.webhooks.management:read\"\n | \"cm.webhooks.management:write\"\n | \"cm.webhooks:export\"\n | \"cm.webhooks:import\"\n | \"cm.webhook:read\"\n\n // ── Audit & publish queue ─────────────────────────────────────────────\n | \"cm.audit-logs:read\"\n | \"cm.publish-queue.management:read\"\n | \"cm.publish-queue.management:write\"\n\n // ── Branches ──────────────────────────────────────────────────────────\n | \"cm.branches.management:read\"\n | \"cm.branches.management:write\"\n | \"cm.branch-aliases.management:read\"\n | \"cm.branch-aliases.management:write\"\n\n // ── Taxonomies ────────────────────────────────────────────────────────\n | \"cm.taxonomies.management:read\"\n | \"cm.taxonomies.management:write\"\n | \"cm.taxonomy.terms:read\"\n | \"cm.taxonomy.terms:write\"\n\n // ── Brand Kit ─────────────────────────────────────────────────────────\n | \"brand-kits:read\"\n | \"brand-kits:manage\"\n\n // ── Personalization ───────────────────────────────────────────────────\n | \"personalize:read\"\n | \"personalize:manage\"\n\n // ── Launch ────────────────────────────────────────────────────────────\n | \"launch:manage\"\n | \"launch.projects:read\"\n | \"launch.projects:write\"\n | \"launch.projects:delete\"\n\n/**\n * Human-readable descriptions for every Contentstack OAuth scope.\n *\n * Useful for AI agents, documentation generators, and UI scope pickers.\n *\n * @example\n * ```ts\n * import { OAUTH_SCOPE_DESCRIPTIONS } from \"@timbenniks/contentstack-platform-sdk/auth\"\n *\n * // Get description for a scope\n * console.log(OAUTH_SCOPE_DESCRIPTIONS[\"cm.entries.management:read\"])\n * // → \"View all entries\"\n * ```\n */\nexport const OAUTH_SCOPE_DESCRIPTIONS: Record<ContentstackOAuthScope, string> = {\n // User\n \"user:read\": \"View user details\",\n \"user:write\": \"Update user details\",\n \"user.assignments:read\": \"View user assignments\",\n\n // Organization\n \"organizations:read\": \"View details of all organizations associated with the user\",\n \"organization:read\": \"View details of an organization\",\n \"organization.logs:read\": \"View organization logs\",\n \"organization.ownership:write\": \"Transfer organization ownership\",\n \"organization.roles:read\": \"View organization-level roles\",\n \"organization.share:write\": \"Update or remove organization invitation shares\",\n \"organization.share:read\": \"View details of organization invitations shared with users\",\n\n // Stack management\n \"cm.stacks.management:read\": \"View all stacks\",\n \"cm.stacks.management:write\": \"Create, update, or remove stacks\",\n \"cm.stack.users:read\": \"View users associated with a stack\",\n \"cm.stack.users:write\": \"Update user roles and user associations\",\n \"cm.stack.management:write\": \"Update stack management properties\",\n \"cm.stack.settings:read\": \"View stack settings\",\n \"cm.stack:share\": \"Share stack invitation with users\",\n \"cm.stack:unshare\": \"Unshare stack invitations\",\n\n // Tokens\n \"cm.stack.delivery-tokens:read\": \"View delivery tokens associated with a stack\",\n \"cm.stack.delivery-tokens:write\": \"Create, update, or remove delivery tokens\",\n \"cm.stack.management-tokens:read\": \"View management tokens associated with a stack\",\n \"cm.stack.management-tokens:write\": \"Create, update, or remove management tokens\",\n\n // Content types\n \"cm.content-types.management:read\": \"View all content types\",\n \"cm.content-types.management:write\": \"Create, update, or remove content types\",\n \"cm.content-type:read\": \"View content type details\",\n \"cm.content-types:export\": \"Export content types\",\n \"cm.content-types:import\": \"Import content types\",\n\n // Global fields\n \"cm.global-fields.management:read\": \"View all global fields\",\n \"cm.global-fields.management:write\": \"Create, update, or remove global fields\",\n \"cm.global-fields:import\": \"Import global fields\",\n\n // Entries\n \"cm.entries.management:read\": \"View all entries\",\n \"cm.entries.management:write\": \"Create, update, or remove entries\",\n \"cm.entry:write\": \"Update details associated with an entry\",\n \"cm.entry:read\": \"View details associated with an entry\",\n \"cm.entries:export\": \"Export entries\",\n \"cm.entries:import\": \"Import entries\",\n \"cm.entry:publish\": \"Publish an entry\",\n \"cm.entry:unpublish\": \"Unpublish an entry\",\n \"cm.entry.workflow:write\": \"Set workflow stage for an entry\",\n\n // Bulk operations\n \"cm.bulk-operations:publish\": \"Publish items in bulk\",\n \"cm.bulk-operations:unpublish\": \"Unpublish items in bulk\",\n \"cm.bulk-operations:delete\": \"Delete items in bulk\",\n \"cm.bulk-operations:workflow\": \"Set workflow stage in bulk\",\n\n // Assets\n \"cm.assets.management:read\": \"View all assets\",\n \"cm.assets.management:write\": \"Create, update, or remove assets\",\n \"cm.assets:download\": \"Download assets\",\n \"cm.assets.rt:read\": \"View all RTE assets\",\n \"cm.asset:write\": \"Create, update, or remove an asset\",\n \"cm.asset:read\": \"View asset details\",\n \"cm.asset:publish\": \"Publish an asset\",\n \"cm.asset:unpublish\": \"Unpublish an asset\",\n\n // Extensions\n \"cm.extensions.management:read\": \"View all extensions\",\n \"cm.extensions.management:write\": \"Create, update, or remove extensions\",\n\n // Releases\n \"cm.releases.management:read\": \"View all releases\",\n \"cm.releases.management:write\": \"Create, update, or remove releases\",\n \"cm.release:read\": \"View details associated with a release\",\n \"cm.release:write\": \"Update details associated with a release\",\n \"cm.release:deploy\": \"Deploy a release\",\n \"cm.release:clone\": \"Clone a release\",\n\n // Workflows\n \"cm.workflows.management:read\": \"View all workflows\",\n \"cm.workflows.management:write\": \"Create, update, or remove workflows\",\n \"cm.workflows.publishing-rules:write\": \"Create, update, or remove workflow publishing rules\",\n \"cm.workflows.publishing-rules:read\": \"View all workflow publishing rules\",\n\n // Labels\n \"cm.labels.management:read\": \"View all labels\",\n \"cm.labels.management:write\": \"Create, update, or remove labels\",\n\n // Languages\n \"cm.languages.management:read\": \"View all languages\",\n \"cm.languages.management:write\": \"Create, update, or remove languages\",\n\n // Environments\n \"cm.environments.management:read\": \"View all environments\",\n \"cm.environments.management:write\": \"Create, update, or remove environments\",\n\n // Roles\n \"cm.roles.management:read\": \"View all roles\",\n \"cm.roles.management:write\": \"Create, update, or remove roles\",\n\n // Webhooks\n \"cm.webhooks.management:read\": \"View all webhooks\",\n \"cm.webhooks.management:write\": \"Create, update, or remove webhooks\",\n \"cm.webhooks:export\": \"Export webhooks\",\n \"cm.webhooks:import\": \"Import webhooks\",\n \"cm.webhook:read\": \"View webhook details\",\n\n // Audit & publish queue\n \"cm.audit-logs:read\": \"View all audit logs\",\n \"cm.publish-queue.management:read\": \"View all publish queue items\",\n \"cm.publish-queue.management:write\": \"Create, update, or remove publish queue items\",\n\n // Branches\n \"cm.branches.management:read\": \"View all branches\",\n \"cm.branches.management:write\": \"Create or delete a branch\",\n \"cm.branch-aliases.management:read\": \"View all branch aliases\",\n \"cm.branch-aliases.management:write\": \"Create, assign, or delete a branch alias\",\n\n // Taxonomies\n \"cm.taxonomies.management:read\": \"View all taxonomies\",\n \"cm.taxonomies.management:write\": \"Create, update, or delete taxonomies\",\n \"cm.taxonomy.terms:read\": \"View all terms of a taxonomy\",\n \"cm.taxonomy.terms:write\": \"Create, update, move, or delete taxonomy terms\",\n\n // Brand Kit\n \"brand-kits:read\": \"View Brand Kits and Voice Profiles; use generative AI content generation\",\n \"brand-kits:manage\":\n \"Create, update, or delete Brand Kits, Voice Profiles, and Knowledge Vault items\",\n\n // Personalization\n \"personalize:read\":\n \"View attributes, audiences, events, experiences, analytics, and regional data\",\n \"personalize:manage\": \"Create, update, or delete personalization components\",\n\n // Launch\n \"launch:manage\": \"Read, update, and manage all Launch resources\",\n \"launch.projects:read\": \"Read Launch projects and deployments\",\n \"launch.projects:write\": \"Create and update Launch projects and deployments\",\n \"launch.projects:delete\": \"Delete Launch projects\",\n} as const\n\n/**\n * Pre-built scope combinations for common use cases.\n *\n * Each preset includes `user:read` as a baseline since it is required\n * for all OAuth flows that need user profile information.\n *\n * @example\n * ```ts\n * import { OAUTH_SCOPE_PRESETS } from \"@timbenniks/contentstack-platform-sdk/auth\"\n *\n * const config: OAuthConfig = {\n * scopes: OAUTH_SCOPE_PRESETS.cmsAuthoring,\n * // ...\n * }\n * ```\n */\nexport const OAUTH_SCOPE_PRESETS = {\n /** Minimal: only read the authenticated user's profile. */\n readOnly: [\"user:read\"] as const,\n\n /** Read content types, entries, and assets. */\n contentReader: [\n \"user:read\",\n \"cm.content-types.management:read\",\n \"cm.entries.management:read\",\n \"cm.assets.management:read\",\n ] as const,\n\n /** Read and write entries and assets; read content types. */\n cmsAuthoring: [\n \"user:read\",\n \"cm.content-types.management:read\",\n \"cm.entries.management:read\",\n \"cm.entries.management:write\",\n \"cm.entry:publish\",\n \"cm.entry:unpublish\",\n \"cm.assets.management:read\",\n \"cm.assets.management:write\",\n \"cm.asset:publish\",\n \"cm.asset:unpublish\",\n ] as const,\n\n /** CMS authoring plus taxonomy management. */\n cmsAuthoringWithTaxonomies: [\n \"user:read\",\n \"cm.content-types.management:read\",\n \"cm.entries.management:read\",\n \"cm.entries.management:write\",\n \"cm.entry:publish\",\n \"cm.entry:unpublish\",\n \"cm.assets.management:read\",\n \"cm.assets.management:write\",\n \"cm.asset:publish\",\n \"cm.asset:unpublish\",\n \"cm.taxonomies.management:read\",\n \"cm.taxonomies.management:write\",\n \"cm.taxonomy.terms:read\",\n \"cm.taxonomy.terms:write\",\n ] as const,\n\n /** Brand Kit: read and manage voice profiles and knowledge vault. */\n brandKit: [\"user:read\", \"brand-kits:read\", \"brand-kits:manage\"] as const,\n\n /** Launch: manage projects and deployments. */\n launch: [\n \"user:read\",\n \"launch:manage\",\n \"launch.projects:read\",\n \"launch.projects:write\",\n \"launch.projects:delete\",\n ] as const,\n\n /** Personalization: read and manage experiences. */\n personalization: [\"user:read\", \"personalize:read\", \"personalize:manage\"] as const,\n} satisfies Record<string, readonly ContentstackOAuthScope[]>\n","import {\n ContentstackAuthError,\n ContentstackError,\n ContentstackForbiddenError,\n ContentstackInvalidApiKeyError,\n ContentstackNotFoundError,\n ContentstackRateLimitError,\n ContentstackServerError,\n ContentstackValidationError,\n} from \"./errors.js\"\nimport type { HttpClientConfig, HttpResponse } from \"./types.js\"\n\nconst DEFAULT_TIMEOUT = 30_000\nconst DEFAULT_RETRY_LIMIT = 5\nconst DEFAULT_RETRY_DELAY = 300\nconst MAX_JITTER = 100\n\nexport class ContentstackHttpClient {\n private readonly config: Required<\n Pick<HttpClientConfig, \"baseUrl\" | \"timeout\" | \"retryOnError\" | \"retryLimit\" | \"retryDelay\">\n > & {\n headers: Record<string, string>\n fetch: typeof globalThis.fetch\n }\n\n constructor(config: HttpClientConfig) {\n this.config = {\n baseUrl: config.baseUrl,\n headers: config.headers ?? {},\n timeout: config.timeout ?? DEFAULT_TIMEOUT,\n retryOnError: config.retryOnError ?? true,\n retryLimit: config.retryLimit ?? DEFAULT_RETRY_LIMIT,\n retryDelay: config.retryDelay ?? DEFAULT_RETRY_DELAY,\n fetch: config.fetch ?? globalThis.fetch.bind(globalThis),\n }\n }\n\n async get<T>(path: string, params?: Record<string, string>): Promise<HttpResponse<T>> {\n let url = `${this.config.baseUrl}${path}`\n if (params) {\n const searchParams = new URLSearchParams(params)\n url += `?${searchParams.toString()}`\n }\n return this.request<T>(url, { method: \"GET\" }, path)\n }\n\n async post<T>(path: string, body?: unknown): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(\n url,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n },\n path,\n )\n }\n\n async put<T>(path: string, body?: unknown): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(\n url,\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n },\n path,\n )\n }\n\n async patch<T>(path: string, body?: unknown): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(\n url,\n {\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n },\n path,\n )\n }\n\n async delete<T>(path: string): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(url, { method: \"DELETE\" }, path)\n }\n\n async postForm<T>(path: string, params: URLSearchParams): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(\n url,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: params.toString(),\n },\n path,\n )\n }\n\n async upload<T>(path: string, form: FormData): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(url, { method: \"POST\", body: form }, path)\n }\n\n /** Return a new client with additional headers merged */\n withHeaders(headers: Record<string, string>): ContentstackHttpClient {\n return new ContentstackHttpClient({\n ...this.config,\n headers: { ...this.config.headers, ...headers },\n })\n }\n\n /** Return a new client with a different base URL */\n withBaseUrl(baseUrl: string): ContentstackHttpClient {\n return new ContentstackHttpClient({\n ...this.config,\n baseUrl,\n })\n }\n\n private async request<T>(url: string, init: RequestInit, path: string): Promise<HttpResponse<T>> {\n const headers = new Headers(this.config.headers)\n\n if (init.headers) {\n const initHeaders =\n init.headers instanceof Headers\n ? init.headers\n : new Headers(init.headers as Record<string, string>)\n initHeaders.forEach((value, key) => headers.set(key, value))\n }\n\n let lastError: Error | undefined\n const maxAttempts = this.config.retryOnError ? this.config.retryLimit + 1 : 1\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout)\n\n try {\n const response = await this.config.fetch(url, {\n ...init,\n headers,\n signal: controller.signal,\n })\n\n if (response.ok) {\n const data = (await response.json().catch(() => ({}))) as T\n return { data, status: response.status, headers: response.headers }\n }\n\n // Check if retryable\n const isRetryable = response.status === 429 || response.status >= 500\n if (isRetryable && this.config.retryOnError && attempt < maxAttempts - 1) {\n const delay = this.calculateDelay(response, attempt)\n await sleep(delay)\n lastError = await this.createError(response, path)\n continue\n }\n\n throw await this.createError(response, path)\n } catch (error) {\n if (error instanceof ContentstackError) {\n throw error\n }\n\n if (error instanceof DOMException && error.name === \"AbortError\") {\n throw new ContentstackError(`Request timed out after ${this.config.timeout}ms`, {\n requestPath: path,\n cause: error,\n })\n }\n\n throw new ContentstackError(\"Network request failed\", {\n requestPath: path,\n cause: error instanceof Error ? error : new Error(String(error)),\n })\n } finally {\n clearTimeout(timeoutId)\n }\n }\n\n // Should not reach here, but just in case\n throw lastError ?? new ContentstackError(\"Request failed after retries\", { requestPath: path })\n }\n\n private calculateDelay(response: Response, attempt: number): number {\n const retryAfter = response.headers.get(\"Retry-After\")\n if (retryAfter) {\n const seconds = Number.parseFloat(retryAfter)\n if (!Number.isNaN(seconds)) {\n return seconds * 1000\n }\n }\n\n const jitter = Math.random() * MAX_JITTER\n return this.config.retryDelay * 2 ** attempt + jitter\n }\n\n private async createError(response: Response, path: string): Promise<ContentstackError> {\n let body: Record<string, unknown> = {}\n try {\n body = (await response.json()) as Record<string, unknown>\n } catch {\n // Response body may not be JSON\n }\n\n const message =\n (body.error_message as string | undefined) ??\n (body.error_description as string | undefined) ??\n (body.message as string | undefined) ??\n `HTTP ${response.status} error`\n const errorCode = body.error_code as number | undefined\n const errors = body.errors as Record<string, string[]> | undefined\n const retryAfter = response.headers.get(\"Retry-After\")\n\n const opts = { status: response.status, errorCode, errors, requestPath: path }\n\n switch (response.status) {\n case 400:\n return new ContentstackValidationError(message, { ...opts, status: 400 })\n case 401:\n return new ContentstackAuthError(message, opts)\n case 403:\n return new ContentstackForbiddenError(message, opts)\n case 404:\n return new ContentstackNotFoundError(message, opts)\n case 412:\n return new ContentstackInvalidApiKeyError(message, opts)\n case 422:\n return new ContentstackValidationError(message, { ...opts, status: 422 })\n case 429:\n return new ContentstackRateLimitError(message, {\n ...opts,\n retryAfter: retryAfter ? Number.parseFloat(retryAfter) : undefined,\n })\n default:\n if (response.status >= 500) {\n return new ContentstackServerError(message, opts)\n }\n return new ContentstackError(message, opts)\n }\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n","const CHARSET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~\"\n\n/**\n * Generate a cryptographically random code verifier for PKCE.\n * Returns a 43-character URL-safe string (the minimum length per RFC 7636).\n * Uses globalThis.crypto for cross-runtime compatibility (Node 18+, Deno, Bun, edge).\n */\nexport function generateCodeVerifier(): string {\n const bytes = new Uint8Array(43)\n globalThis.crypto.getRandomValues(bytes)\n let result = \"\"\n for (const byte of bytes) {\n result += CHARSET[byte % CHARSET.length]\n }\n return result\n}\n\n/**\n * Compute an S256 code challenge from a code verifier.\n * SHA-256 hash → base64url encoded (no padding).\n * Uses globalThis.crypto.subtle for cross-runtime compatibility.\n */\nexport async function generateCodeChallenge(verifier: string): Promise<string> {\n const encoder = new TextEncoder()\n const data = encoder.encode(verifier)\n const digest = await globalThis.crypto.subtle.digest(\"SHA-256\", data)\n const bytes = new Uint8Array(digest)\n let binary = \"\"\n for (const byte of bytes) {\n binary += String.fromCharCode(byte)\n }\n return btoa(binary).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\")\n}\n","import { ContentstackHttpClient } from \"../http/client.js\"\nimport {\n ContentstackAuthError,\n ContentstackConfigError,\n ContentstackError,\n} from \"../http/errors.js\"\nimport type { ContentstackRegion } from \"../regions/index.js\"\nimport { resolveEndpoints } from \"../regions/index.js\"\nimport { generateCodeChallenge, generateCodeVerifier } from \"./pkce.js\"\nimport type { ContentstackUser, OAuthConfig, OAuthTokens } from \"./types.js\"\n\ninterface AuthorizationUrlOptions {\n state?: string\n usePKCE?: boolean\n}\n\ninterface AuthorizationUrlResult {\n url: string\n state: string\n codeVerifier?: string\n}\n\ninterface ExchangeCodeOptions {\n codeVerifier?: string\n}\n\nfunction validateConfig(config: OAuthConfig): void {\n if (!config.appId) {\n throw new ContentstackConfigError(\n \"appId is required for OAuth. This is your Contentstack app's UID, not the client ID.\",\n )\n }\n if (config.appId === config.clientId) {\n throw new ContentstackConfigError(\n \"appId and clientId must be different. appId is your Contentstack app UID; clientId is the OAuth client identifier.\",\n )\n }\n}\n\n/**\n * Build a Contentstack OAuth authorization URL.\n *\n * @example\n * ```ts\n * const { url, state, codeVerifier } = await buildAuthorizationUrl({\n * region: \"us\",\n * appId: \"app-uid\",\n * clientId: \"client-id\",\n * clientSecret: \"secret\",\n * scopes: [\"user:read\"],\n * redirectUri: \"http://localhost:3000/api/auth/callback/contentstack\",\n * }, { usePKCE: true })\n * ```\n */\nexport async function buildAuthorizationUrl(\n config: OAuthConfig,\n options?: AuthorizationUrlOptions,\n): Promise<AuthorizationUrlResult> {\n validateConfig(config)\n\n const endpoints = resolveEndpoints(config.region)\n const authorizationUrl = `${endpoints.app}/apps/${config.appId}/authorize`\n\n const state = options?.state ?? generateCodeVerifier()\n\n const params = new URLSearchParams({\n response_type: \"code\",\n client_id: config.clientId,\n redirect_uri: config.redirectUri,\n scope: config.scopes.join(\" \"),\n state,\n })\n\n let codeVerifier: string | undefined\n if (options?.usePKCE) {\n codeVerifier = generateCodeVerifier()\n const codeChallenge = await generateCodeChallenge(codeVerifier)\n params.set(\"code_challenge\", codeChallenge)\n params.set(\"code_challenge_method\", \"S256\")\n }\n\n return {\n url: `${authorizationUrl}?${params.toString()}`,\n state,\n codeVerifier,\n }\n}\n\nfunction mapTokenResponse(data: Record<string, unknown>): OAuthTokens {\n return {\n accessToken: data.access_token as string,\n refreshToken: data.refresh_token as string,\n expiresIn: data.expires_in as number,\n tokenType: data.token_type as string,\n }\n}\n\nasync function makeTokenRequest(\n appBaseUrl: string,\n body: URLSearchParams,\n errorMessage: string,\n): Promise<OAuthTokens> {\n const client = new ContentstackHttpClient({ baseUrl: appBaseUrl })\n try {\n const { data } = await client.postForm<Record<string, unknown>>(\"/apps-api/token\", body)\n return mapTokenResponse(data)\n } catch (err) {\n if (err instanceof ContentstackError) {\n throw new ContentstackAuthError(err.message || errorMessage, {\n status: err.status,\n requestPath: \"/apps-api/token\",\n cause: err,\n })\n }\n throw new ContentstackAuthError(errorMessage, {\n requestPath: \"/apps-api/token\",\n cause: err instanceof Error ? err : undefined,\n })\n }\n}\n\n/**\n * Exchange an authorization code for OAuth tokens.\n */\nexport async function exchangeCode(\n config: OAuthConfig,\n code: string,\n options?: ExchangeCodeOptions,\n): Promise<OAuthTokens> {\n const endpoints = resolveEndpoints(config.region)\n\n const body = new URLSearchParams({\n grant_type: \"authorization_code\",\n code,\n redirect_uri: config.redirectUri,\n client_id: config.clientId,\n client_secret: config.clientSecret,\n })\n\n if (options?.codeVerifier) {\n body.set(\"code_verifier\", options.codeVerifier)\n }\n\n return makeTokenRequest(endpoints.app, body, \"Failed to exchange authorization code\")\n}\n\n/**\n * Refresh an expired access token using a refresh token.\n */\nexport async function refreshToken(config: OAuthConfig, token: string): Promise<OAuthTokens> {\n const endpoints = resolveEndpoints(config.region)\n\n const body = new URLSearchParams({\n grant_type: \"refresh_token\",\n refresh_token: token,\n client_id: config.clientId,\n client_secret: config.clientSecret,\n })\n\n return makeTokenRequest(endpoints.app, body, \"Failed to refresh token\")\n}\n\nfunction mapUser(user: Record<string, unknown>): ContentstackUser {\n return {\n uid: user.uid as string,\n email: user.email as string,\n firstName: (user.first_name as string) ?? undefined,\n lastName: (user.last_name as string) ?? undefined,\n username: (user.username as string) ?? undefined,\n profileImage: (user.profile_image as string) ?? undefined,\n }\n}\n\n/**\n * Fetch the authenticated user's profile from Contentstack.\n * Unwraps the nested `user` key and maps snake_case → camelCase.\n */\nexport async function getUser(\n region: ContentstackRegion,\n accessToken: string,\n): Promise<ContentstackUser> {\n const endpoints = resolveEndpoints(region)\n const client = new ContentstackHttpClient({\n baseUrl: `${endpoints.cma}/v3`,\n headers: { Authorization: `Bearer ${accessToken}` },\n })\n\n try {\n const { data } = await client.get<{ user: Record<string, unknown> }>(\"/user\")\n return mapUser(data.user)\n } catch (err) {\n if (err instanceof ContentstackError) {\n throw new ContentstackAuthError(err.message || \"Failed to fetch user profile\", {\n status: err.status,\n requestPath: \"/v3/user\",\n cause: err,\n })\n }\n throw new ContentstackAuthError(\"Failed to fetch user profile\", {\n requestPath: \"/v3/user\",\n cause: err instanceof Error ? err : undefined,\n })\n }\n}\n\n/**\n * Create an Auth.js v5 provider config object for Contentstack.\n *\n * No Auth.js dependency is required in this package — the returned object\n * conforms to the Auth.js OAuthConfig shape and can be passed directly to\n * `next-auth` or `@auth/core`.\n *\n * @example\n * ```ts\n * // app/api/auth/[...nextauth]/route.ts\n * import NextAuth from \"next-auth\"\n * import { createAuthProvider } from \"@timbenniks/contentstack-platform-sdk/auth\"\n *\n * export const { handlers, signIn, signOut, auth } = NextAuth({\n * providers: [createAuthProvider({ region: \"us\", appId: \"...\", ... })],\n * })\n * ```\n */\nexport function createAuthProvider(config: OAuthConfig): Record<string, unknown> {\n validateConfig(config)\n\n const endpoints = resolveEndpoints(config.region)\n const userClient = new ContentstackHttpClient({ baseUrl: `${endpoints.cma}/v3` })\n\n return {\n id: \"contentstack\",\n name: \"Contentstack\",\n type: \"oauth\",\n checks: [\"state\"],\n authorization: {\n url: `${endpoints.app}/apps/${config.appId}/authorize`,\n params: {\n response_type: \"code\",\n scope: config.scopes.join(\" \"),\n },\n },\n token: `${endpoints.app}/apps-api/token`,\n userinfo: {\n url: `${endpoints.cma}/v3/user`,\n async request({ tokens }: { tokens: { access_token: string } }) {\n const authedClient = userClient.withHeaders({\n Authorization: `Bearer ${tokens.access_token}`,\n })\n const { data } = await authedClient.get<Record<string, unknown>>(\"/user\")\n return data\n },\n },\n profile(profile: { user: Record<string, unknown> }) {\n const user = profile.user\n return {\n id: user.uid as string,\n name:\n [user.first_name, user.last_name].filter(Boolean).join(\" \") || (user.username as string),\n email: user.email as string,\n image: (user.profile_image as string) ?? null,\n }\n },\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n }\n}\n\n/**\n * Create Auth.js v5 callbacks for token persistence and automatic refresh.\n *\n * The `jwt` callback persists OAuth tokens on initial sign-in and attempts\n * to refresh expired tokens (with a 60-second safety window).\n *\n * The `session` callback exposes the access token and any refresh errors\n * on the session object.\n *\n * @example\n * ```ts\n * import NextAuth from \"next-auth\"\n * import { createAuthProvider, contentstackAuthCallbacks } from \"@timbenniks/contentstack-platform-sdk/auth\"\n *\n * export const { handlers, auth } = NextAuth({\n * providers: [createAuthProvider({ ... })],\n * callbacks: contentstackAuthCallbacks({ region: \"us\", ... }),\n * })\n * ```\n */\nexport function contentstackAuthCallbacks(config: OAuthConfig) {\n return {\n async jwt({\n token,\n account,\n }: { token: Record<string, unknown>; account?: Record<string, unknown> | null }) {\n // Initial sign-in: persist tokens from the OAuth account\n if (account) {\n token.accessToken = account.access_token\n token.refreshToken = account.refresh_token\n token.accessTokenExpiresAt = Date.now() + ((account.expires_in as number) ?? 3600) * 1000\n return token\n }\n\n // Subsequent calls: check if token needs refresh (60s safety window)\n const expiresAt = token.accessTokenExpiresAt as number | undefined\n if (expiresAt && Date.now() < expiresAt - 60_000) {\n return token\n }\n\n // Token is expired or about to expire — attempt refresh\n const currentRefreshToken = token.refreshToken as string | undefined\n if (!currentRefreshToken) {\n token.error = \"RefreshAccessTokenError\"\n return token\n }\n\n try {\n const tokens = await refreshToken(config, currentRefreshToken)\n token.accessToken = tokens.accessToken\n token.refreshToken = tokens.refreshToken\n token.accessTokenExpiresAt = Date.now() + tokens.expiresIn * 1000\n token.error = undefined\n } catch {\n token.error = \"RefreshAccessTokenError\"\n }\n\n return token\n },\n async session({\n session,\n token,\n }: { session: Record<string, unknown>; token: Record<string, unknown> }) {\n session.accessToken = token.accessToken\n if (token.error) {\n session.error = token.error\n }\n return session\n },\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA pagination helper\n\nconst DEFAULT_PAGE_SIZE = 25\n\n/**\n * Create an AsyncIterable that lazily paginates through CMA results.\n * Pages are fetched on demand — only when items are consumed.\n */\nexport function paginate<T>(\n fetchPage: (skip: number, limit: number) => Promise<{ items: T[]; count?: number }>,\n options?: { limit?: number },\n): AsyncIterable<T> {\n const pageSize = options?.limit ?? DEFAULT_PAGE_SIZE\n\n return {\n [Symbol.asyncIterator]() {\n let skip = 0\n let done = false\n let buffer: T[] = []\n let bufferIndex = 0\n let totalCount: number | undefined\n\n return {\n async next(): Promise<IteratorResult<T>> {\n if (bufferIndex < buffer.length) {\n return { value: buffer[bufferIndex++] as T, done: false }\n }\n\n if (done) {\n return { value: undefined as unknown as T, done: true }\n }\n\n const page = await fetchPage(skip, pageSize)\n buffer = page.items\n bufferIndex = 0\n skip += page.items.length\n\n if (typeof page.count === \"number\") {\n totalCount = page.count\n }\n\n if (page.items.length === 0) {\n done = true\n return { value: undefined as unknown as T, done: true }\n }\n\n if (typeof totalCount === \"number\" && skip >= totalCount) {\n done = true\n }\n\n return { value: buffer[bufferIndex++] as T, done: false }\n },\n }\n },\n }\n}\n\n/**\n * Collect all items from an AsyncIterable into an array.\n * Replaces the repeated listAll() pattern across sub-clients.\n */\nexport async function collectAll<T>(iterable: AsyncIterable<T>): Promise<T[]> {\n const items: T[] = []\n for await (const item of iterable) {\n items.push(item)\n }\n return items\n}\n","// @timbenniks/contentstack-platform-sdk — CMA AssetsClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { collectAll, paginate } from \"./pagination.js\"\nimport type { Asset, AssetFolder, BasePublishAction } from \"./types.js\"\n\nexport type AssetPublishAction = BasePublishAction\n\nexport class AssetsClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n list(opts?: { limit?: number; folder?: string }): AsyncIterable<Asset> {\n return paginate<Asset>(\n async (skip, limit) => {\n const params: Record<string, string> = {\n skip: String(skip),\n limit: String(limit),\n }\n if (opts?.folder) params.folder = opts.folder\n\n const response = await this.http.get<{ assets: Asset[]; count?: number }>(\"/assets\", params)\n return { items: response.data.assets ?? [], count: response.data.count }\n },\n { limit: opts?.limit },\n )\n }\n\n async listAll(opts?: { limit?: number; folder?: string }): Promise<Asset[]> {\n return collectAll(this.list(opts))\n }\n\n async get(uid: string): Promise<Asset> {\n const response = await this.http.get<{ asset: Asset }>(`/assets/${uid}`)\n return response.data.asset\n }\n\n async upload(form: FormData): Promise<Asset> {\n const response = await this.http.upload<{ asset: Asset }>(\"/assets\", form)\n return response.data.asset\n }\n\n async update(uid: string, data: Partial<Asset>): Promise<Asset> {\n const response = await this.http.put<{ asset: Asset }>(`/assets/${uid}`, { asset: data })\n return response.data.asset\n }\n\n async delete(uid: string): Promise<void> {\n await this.http.delete(`/assets/${uid}`)\n }\n\n async publish(uid: string, data: AssetPublishAction): Promise<void> {\n await this.http.post(`/assets/${uid}/publish`, { asset: data })\n }\n\n async unpublish(uid: string, data: AssetPublishAction): Promise<void> {\n await this.http.post(`/assets/${uid}/unpublish`, { asset: data })\n }\n\n // ─── Folders ──────────────────────────────────────────────────────\n\n async listFolders(opts?: { limit?: number }): Promise<AssetFolder[]> {\n const response = await this.http.get<{ assets: AssetFolder[] }>(\"/assets/folders\", {\n limit: String(opts?.limit ?? 100),\n })\n return response.data.assets ?? []\n }\n\n async getFolder(uid: string): Promise<AssetFolder> {\n const response = await this.http.get<{ asset: AssetFolder }>(`/assets/folders/${uid}`)\n return response.data.asset\n }\n\n async createFolder(data: { name: string; parent_uid?: string }): Promise<AssetFolder> {\n const response = await this.http.post<{ asset: AssetFolder }>(\"/assets/folders\", {\n asset: data,\n })\n return response.data.asset\n }\n\n async updateFolder(uid: string, data: { name: string }): Promise<AssetFolder> {\n const response = await this.http.put<{ asset: AssetFolder }>(`/assets/folders/${uid}`, {\n asset: data,\n })\n return response.data.asset\n }\n\n async deleteFolder(uid: string): Promise<void> {\n await this.http.delete(`/assets/folders/${uid}`)\n }\n\n // ─── Additional Operations ──────────────────────────────────────\n\n async replace(uid: string, form: FormData): Promise<Asset> {\n const response = await this.http.upload<{ asset: Asset }>(`/assets/${uid}`, form)\n return response.data.asset\n }\n\n async getReferences(uid: string): Promise<unknown[]> {\n const response = await this.http.get<{ references: unknown[] }>(`/assets/${uid}/references`)\n return response.data.references ?? []\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA base CRUD client\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { collectAll, paginate } from \"./pagination.js\"\n\nexport interface CrudConfig {\n basePath: string\n singularKey: string\n pluralKey: string\n}\n\nexport class CrudClient<T> {\n constructor(\n protected readonly http: ContentstackHttpClient,\n protected readonly config: CrudConfig,\n ) {}\n\n list(opts?: { limit?: number }): AsyncIterable<T> {\n return paginate<T>(\n async (skip, limit) => {\n const response = await this.http.get<Record<string, unknown>>(this.config.basePath, {\n skip: String(skip),\n limit: String(limit),\n })\n const items = (response.data[this.config.pluralKey] as T[]) ?? []\n return { items, count: response.data.count as number | undefined }\n },\n { limit: opts?.limit },\n )\n }\n\n async listAll(opts?: { limit?: number }): Promise<T[]> {\n return collectAll(this.list(opts))\n }\n\n async get(uid: string): Promise<T> {\n const response = await this.http.get<Record<string, unknown>>(`${this.config.basePath}/${uid}`)\n return response.data[this.config.singularKey] as T\n }\n\n async create(data: Partial<T>): Promise<T> {\n const response = await this.http.post<Record<string, unknown>>(this.config.basePath, {\n [this.config.singularKey]: data,\n })\n return response.data[this.config.singularKey] as T\n }\n\n async update(uid: string, data: Partial<T>): Promise<T> {\n const response = await this.http.put<Record<string, unknown>>(\n `${this.config.basePath}/${uid}`,\n { [this.config.singularKey]: data },\n )\n return response.data[this.config.singularKey] as T\n }\n\n async delete(uid: string): Promise<void> {\n await this.http.delete(`${this.config.basePath}/${uid}`)\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA AuditLogClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport type { AuditLogEntry } from \"./types.js\"\n\nexport class AuditLogClient extends CrudClient<AuditLogEntry> {\n constructor(http: ContentstackHttpClient) {\n super(http, { basePath: \"/audit-logs\", singularKey: \"audit_log\", pluralKey: \"audit_logs\" })\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA BranchAliasesClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport type { BranchAlias } from \"./types.js\"\n\nexport class BranchAliasesClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n async list(): Promise<BranchAlias[]> {\n const response = await this.http.get<{ branch_aliases: BranchAlias[] }>(\n \"/stacks/branch_aliases\",\n )\n return response.data.branch_aliases ?? []\n }\n\n async get(uid: string): Promise<BranchAlias> {\n const response = await this.http.get<{ branch_alias: BranchAlias }>(\n `/stacks/branch_aliases/${uid}`,\n )\n return response.data.branch_alias\n }\n\n async createOrUpdate(uid: string, targetBranch: string): Promise<BranchAlias> {\n const response = await this.http.put<{ branch_alias: BranchAlias }>(\n `/stacks/branch_aliases/${uid}`,\n { branch_alias: { target_branch: targetBranch } },\n )\n return response.data.branch_alias\n }\n\n async delete(uid: string): Promise<void> {\n await this.http.delete(`/stacks/branch_aliases/${uid}`)\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA BranchesClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { collectAll, paginate } from \"./pagination.js\"\nimport type { Branch, MergeJob } from \"./types.js\"\n\nexport interface MergeRequest {\n base_branch: string\n compare_branch: string\n default_merge_strategy:\n | \"merge_prefer_base\"\n | \"merge_prefer_compare\"\n | \"overwrite_with_compare\"\n | \"merge_new_only\"\n | \"ignore\"\n merge_comment?: string\n item_merge_strategies?: Record<string, string>\n}\n\nexport class BranchesClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n list(opts?: { limit?: number }): AsyncIterable<Branch> {\n return paginate<Branch>(\n async (skip, limit) => {\n const response = await this.http.get<{ branches: Branch[]; count?: number }>(\n \"/stacks/branches\",\n { skip: String(skip), limit: String(limit) },\n )\n return { items: response.data.branches ?? [], count: response.data.count }\n },\n { limit: opts?.limit },\n )\n }\n\n async listAll(opts?: { limit?: number }): Promise<Branch[]> {\n return collectAll(this.list(opts))\n }\n\n async get(uid: string): Promise<Branch> {\n const response = await this.http.get<{ branch: Branch }>(`/stacks/branches/${uid}`)\n return response.data.branch\n }\n\n async create(data: { uid: string; source: string }): Promise<Branch> {\n const response = await this.http.post<{ branch: Branch }>(\"/stacks/branches\", {\n branch: data,\n })\n return response.data.branch\n }\n\n async delete(uid: string): Promise<void> {\n await this.http.delete(`/stacks/branches/${uid}`)\n }\n\n async compare(baseBranch: string, compareBranch: string): Promise<unknown> {\n const response = await this.http.get<unknown>(\"/stacks/branches_compare\", {\n base_branch: baseBranch,\n compare_branch: compareBranch,\n })\n return response.data\n }\n\n async merge(data: MergeRequest): Promise<MergeJob> {\n const response = await this.http.post<{ merge_job: MergeJob }>(\"/stacks/branches_merge\", data)\n return response.data.merge_job\n }\n\n async listMergeJobs(): Promise<MergeJob[]> {\n const response = await this.http.get<{ merge_jobs: MergeJob[] }>(\"/stacks/branches_queue\")\n return response.data.merge_jobs ?? []\n }\n\n async getMergeJob(uid: string): Promise<MergeJob> {\n const response = await this.http.get<{ merge_job: MergeJob }>(`/stacks/branches_queue/${uid}`)\n return response.data.merge_job\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA BulkOperationsClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport type { BasePublishAction } from \"./types.js\"\n\nexport interface BulkEntry {\n uid: string\n content_type: string\n locale: string\n version?: number\n}\n\nexport interface BulkPublishAction extends BasePublishAction {\n entries?: BulkEntry[]\n assets?: Array<{ uid: string }>\n}\n\nexport interface BulkWorkflowAction {\n entries: Array<{\n uid: string\n content_type: string\n locale: string\n }>\n workflow_stage: {\n uid: string\n comment?: string\n }\n}\n\nexport class BulkOperationsClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n async publish(data: BulkPublishAction): Promise<void> {\n await this.http.post(\"/bulk/publish\", data)\n }\n\n async unpublish(data: BulkPublishAction): Promise<void> {\n await this.http.post(\"/bulk/unpublish\", data)\n }\n\n async delete(data: {\n entries?: Array<{ uid: string; content_type: string; locale: string }>\n assets?: Array<{ uid: string }>\n }): Promise<void> {\n await this.http.post(\"/bulk/delete\", data)\n }\n\n async updateWorkflow(data: BulkWorkflowAction): Promise<void> {\n await this.http.post(\"/bulk/workflow\", data)\n }\n\n async addItems(data: Record<string, unknown>): Promise<void> {\n await this.http.post(\"/bulk/add\", data)\n }\n\n async updateItems(data: Record<string, unknown>): Promise<void> {\n await this.http.post(\"/bulk/update\", data)\n }\n\n async jobStatus(jobId: string): Promise<unknown> {\n const response = await this.http.get<{ job: unknown }>(`/bulk/jobs/${jobId}`)\n return response.data.job\n }\n\n async getJobItems(jobId: string, opts?: { limit?: number; skip?: number }): Promise<unknown[]> {\n const params: Record<string, string> = {}\n if (opts?.limit) params.limit = String(opts.limit)\n if (opts?.skip) params.skip = String(opts.skip)\n const response = await this.http.get<{ items: unknown[] }>(\n `/bulk/jobs/${jobId}/items`,\n Object.keys(params).length > 0 ? params : undefined,\n )\n return response.data.items ?? []\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA ContentTypesClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport { collectAll, paginate } from \"./pagination.js\"\nimport type { ContentType } from \"./types.js\"\n\nexport class ContentTypesClient extends CrudClient<ContentType> {\n constructor(http: ContentstackHttpClient) {\n super(http, {\n basePath: \"/content_types\",\n singularKey: \"content_type\",\n pluralKey: \"content_types\",\n })\n }\n\n override list(opts?: { limit?: number; include_count?: boolean }): AsyncIterable<ContentType> {\n return paginate<ContentType>(\n async (skip, limit) => {\n const params: Record<string, string> = {\n skip: String(skip),\n limit: String(limit),\n }\n if (opts?.include_count) params.include_count = \"true\"\n\n const response = await this.http.get<{\n content_types: ContentType[]\n count?: number\n }>(\"/content_types\", params)\n return { items: response.data.content_types ?? [], count: response.data.count }\n },\n { limit: opts?.limit },\n )\n }\n\n override async listAll(opts?: { limit?: number; include_count?: boolean }): Promise<\n ContentType[]\n > {\n return collectAll(this.list(opts))\n }\n\n async export(uid: string): Promise<ContentType> {\n const response = await this.http.get<{ content_type: ContentType }>(\n `/content_types/${uid}/export`,\n )\n return response.data.content_type\n }\n\n async import(data: Record<string, unknown>): Promise<ContentType> {\n const response = await this.http.post<{ content_type: ContentType }>(\n \"/content_types/import\",\n data,\n )\n return response.data.content_type\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA EntriesClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { collectAll, paginate } from \"./pagination.js\"\nimport type { BasePublishAction, Entry } from \"./types.js\"\n\nexport interface EntryListOptions {\n locale?: string\n include_publish_details?: boolean\n include_workflow?: boolean\n include_count?: boolean\n query?: Record<string, unknown>\n asc?: string\n desc?: string\n limit?: number\n}\n\nexport interface EntryGetOptions {\n locale?: string\n include_publish_details?: boolean\n include_workflow?: boolean\n version?: number\n}\n\nexport type PublishAction = BasePublishAction\n\nexport interface WorkflowStageAction {\n workflow_stage: {\n uid: string\n comment?: string\n due_date?: string\n assigned_to?: Array<{ uid: string; name: string; email: string }>\n notify?: boolean\n }\n}\n\nexport class EntriesClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n private basePath(ctUid: string): string {\n return `/content_types/${ctUid}/entries`\n }\n\n list(ctUid: string, opts?: EntryListOptions): AsyncIterable<Entry> {\n return paginate<Entry>(\n async (skip, limit) => {\n const params: Record<string, string> = {\n skip: String(skip),\n limit: String(limit),\n }\n if (opts?.locale) params.locale = opts.locale\n if (opts?.include_publish_details) params.include_publish_details = \"true\"\n if (opts?.include_workflow) params.include_workflow = \"true\"\n if (opts?.include_count) params.include_count = \"true\"\n if (opts?.query) params.query = JSON.stringify(opts.query)\n if (opts?.asc) params.asc = opts.asc\n if (opts?.desc) params.desc = opts.desc\n\n const response = await this.http.get<{ entries: Entry[]; count?: number }>(\n this.basePath(ctUid),\n params,\n )\n return { items: response.data.entries ?? [], count: response.data.count }\n },\n { limit: opts?.limit },\n )\n }\n\n async listAll(ctUid: string, opts?: EntryListOptions): Promise<Entry[]> {\n return collectAll(this.list(ctUid, opts))\n }\n\n async get(ctUid: string, entryUid: string, opts?: EntryGetOptions): Promise<Entry> {\n const params: Record<string, string> = {}\n if (opts?.locale) params.locale = opts.locale\n if (opts?.include_publish_details) params.include_publish_details = \"true\"\n if (opts?.include_workflow) params.include_workflow = \"true\"\n if (opts?.version) params.version = String(opts.version)\n\n const response = await this.http.get<{ entry: Entry }>(\n `${this.basePath(ctUid)}/${entryUid}`,\n Object.keys(params).length > 0 ? params : undefined,\n )\n return response.data.entry\n }\n\n async create(ctUid: string, data: Partial<Entry>): Promise<Entry> {\n const response = await this.http.post<{ entry: Entry }>(this.basePath(ctUid), { entry: data })\n return response.data.entry\n }\n\n async update(ctUid: string, entryUid: string, data: Partial<Entry>): Promise<Entry> {\n const response = await this.http.put<{ entry: Entry }>(`${this.basePath(ctUid)}/${entryUid}`, {\n entry: data,\n })\n return response.data.entry\n }\n\n async delete(ctUid: string, entryUid: string, opts?: { locale?: string }): Promise<void> {\n let path = `${this.basePath(ctUid)}/${entryUid}`\n if (opts?.locale) path += `?locale=${encodeURIComponent(opts.locale)}`\n await this.http.delete(path)\n }\n\n async publish(ctUid: string, entryUid: string, data: PublishAction): Promise<void> {\n await this.http.post(`${this.basePath(ctUid)}/${entryUid}/publish`, { entry: data })\n }\n\n async unpublish(ctUid: string, entryUid: string, data: PublishAction): Promise<void> {\n await this.http.post(`${this.basePath(ctUid)}/${entryUid}/unpublish`, { entry: data })\n }\n\n async localize(ctUid: string, entryUid: string, data: Record<string, unknown>): Promise<Entry> {\n const response = await this.http.post<{ entry: Entry }>(\n `${this.basePath(ctUid)}/${entryUid}/localize`,\n { entry: data },\n )\n return response.data.entry\n }\n\n async setWorkflowStage(\n ctUid: string,\n entryUid: string,\n data: WorkflowStageAction,\n ): Promise<void> {\n await this.http.post(`${this.basePath(ctUid)}/${entryUid}/workflow`, data)\n }\n\n async references(ctUid: string, entryUid: string): Promise<unknown[]> {\n const response = await this.http.get<{ references: unknown[] }>(\n `${this.basePath(ctUid)}/${entryUid}/references`,\n )\n return response.data.references ?? []\n }\n\n async languages(ctUid: string, entryUid: string): Promise<unknown[]> {\n const response = await this.http.get<{ locales: unknown[] }>(\n `${this.basePath(ctUid)}/${entryUid}/languages`,\n )\n return response.data.locales ?? []\n }\n\n async versions(ctUid: string, entryUid: string): Promise<unknown[]> {\n const response = await this.http.get<{ versions: unknown[] }>(\n `${this.basePath(ctUid)}/${entryUid}/versions`,\n )\n return response.data.versions ?? []\n }\n\n async import(\n ctUid: string,\n data: Record<string, unknown>,\n opts?: { locale?: string; overwrite?: boolean },\n ): Promise<Entry> {\n let path = `${this.basePath(ctUid)}/import`\n const params: string[] = []\n if (opts?.locale) params.push(`locale=${encodeURIComponent(opts.locale)}`)\n if (opts?.overwrite) params.push(\"overwrite=true\")\n if (params.length > 0) path += `?${params.join(\"&\")}`\n\n const response = await this.http.post<{ entry: Entry }>(path, data)\n return response.data.entry\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA EnvironmentsClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport type { Environment } from \"./types.js\"\n\nexport class EnvironmentsClient extends CrudClient<Environment> {\n constructor(http: ContentstackHttpClient) {\n super(http, {\n basePath: \"/environments\",\n singularKey: \"environment\",\n pluralKey: \"environments\",\n })\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA ExtensionsClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport type { Extension } from \"./types.js\"\n\nexport class ExtensionsClient extends CrudClient<Extension> {\n constructor(http: ContentstackHttpClient) {\n super(http, { basePath: \"/extensions\", singularKey: \"extension\", pluralKey: \"extensions\" })\n }\n\n async upload(form: FormData): Promise<Extension> {\n const response = await this.http.upload<{ extension: Extension }>(\"/extensions\", form)\n return response.data.extension\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA GlobalFieldsClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport type { GlobalField } from \"./types.js\"\n\nexport class GlobalFieldsClient extends CrudClient<GlobalField> {\n constructor(http: ContentstackHttpClient) {\n super(http, {\n basePath: \"/global_fields\",\n singularKey: \"global_field\",\n pluralKey: \"global_fields\",\n })\n }\n\n async export(uid: string): Promise<GlobalField> {\n const response = await this.http.get<{ global_field: GlobalField }>(\n `/global_fields/${uid}/export`,\n )\n return response.data.global_field\n }\n\n async import(data: Record<string, unknown>): Promise<GlobalField> {\n const response = await this.http.post<{ global_field: GlobalField }>(\n \"/global_fields/import\",\n data,\n )\n return response.data.global_field\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA LabelsClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport type { Label } from \"./types.js\"\n\nexport class LabelsClient extends CrudClient<Label> {\n constructor(http: ContentstackHttpClient) {\n super(http, { basePath: \"/labels\", singularKey: \"label\", pluralKey: \"labels\" })\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA LocalesClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport type { Locale } from \"./types.js\"\n\nexport class LocalesClient extends CrudClient<Locale> {\n constructor(http: ContentstackHttpClient) {\n super(http, { basePath: \"/locales\", singularKey: \"locale\", pluralKey: \"locales\" })\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA PublishRulesClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport type { PublishRule } from \"./types.js\"\n\nexport class PublishRulesClient extends CrudClient<PublishRule> {\n constructor(http: ContentstackHttpClient) {\n super(http, {\n basePath: \"/workflows/publishing_rules\",\n singularKey: \"publishing_rule\",\n pluralKey: \"publishing_rules\",\n })\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA ReleasesClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { collectAll, paginate } from \"./pagination.js\"\nimport type { BasePublishAction, Release, ReleaseItem } from \"./types.js\"\n\nexport interface DeployAction extends BasePublishAction {\n action?: \"publish\" | \"unpublish\"\n}\n\nexport class ReleasesClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n list(opts?: { limit?: number; include_count?: boolean }): AsyncIterable<Release> {\n return paginate<Release>(\n async (skip, limit) => {\n const params: Record<string, string> = {\n skip: String(skip),\n limit: String(limit),\n }\n if (opts?.include_count) params.include_count = \"true\"\n\n const response = await this.http.get<{ releases: Release[]; count?: number }>(\n \"/releases\",\n params,\n )\n return { items: response.data.releases ?? [], count: response.data.count }\n },\n { limit: opts?.limit },\n )\n }\n\n async listAll(opts?: { limit?: number }): Promise<Release[]> {\n return collectAll(this.list(opts))\n }\n\n async get(uid: string): Promise<Release> {\n const response = await this.http.get<{ release: Release }>(`/releases/${uid}`)\n return response.data.release\n }\n\n async create(data: Partial<Release>): Promise<Release> {\n const response = await this.http.post<{ release: Release }>(\"/releases\", { release: data })\n return response.data.release\n }\n\n async update(uid: string, data: Partial<Release>): Promise<Release> {\n const response = await this.http.put<{ release: Release }>(`/releases/${uid}`, {\n release: data,\n })\n return response.data.release\n }\n\n async delete(uid: string): Promise<void> {\n await this.http.delete(`/releases/${uid}`)\n }\n\n async deploy(uid: string, data: DeployAction): Promise<void> {\n await this.http.post(`/releases/${uid}/deploy`, { release: data })\n }\n\n // ─── Items ──────────────────────────────────────────────────────\n\n async listItems(uid: string): Promise<ReleaseItem[]> {\n const response = await this.http.get<{ items: ReleaseItem[] }>(`/releases/${uid}/items`)\n return response.data.items ?? []\n }\n\n async addItem(uid: string, item: Partial<ReleaseItem>): Promise<void> {\n await this.http.post(`/releases/${uid}/items`, { item })\n }\n\n async removeItem(\n uid: string,\n item: {\n uid: string\n content_type_uid: string\n locale: string\n version: number\n action: string\n },\n ): Promise<void> {\n await this.http.post(`/releases/${uid}/items/delete`, { item })\n }\n\n async clone(uid: string, data: { name: string; description?: string }): Promise<Release> {\n const response = await this.http.post<{ release: Release }>(`/releases/${uid}/clone`, {\n release: data,\n })\n return response.data.release\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA RolesClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport type { Role } from \"./types.js\"\n\nexport class RolesClient extends CrudClient<Role> {\n constructor(http: ContentstackHttpClient) {\n super(http, { basePath: \"/roles\", singularKey: \"role\", pluralKey: \"roles\" })\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA TaxonomiesClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { collectAll, paginate } from \"./pagination.js\"\nimport type { Taxonomy, TaxonomyTerm } from \"./types.js\"\n\nexport class TaxonomiesClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n // ─── Taxonomies ───────────────────────────────────────────────────\n\n list(opts?: { limit?: number }): AsyncIterable<Taxonomy> {\n return paginate<Taxonomy>(\n async (skip, limit) => {\n const response = await this.http.get<{ taxonomies: Taxonomy[]; count?: number }>(\n \"/taxonomies\",\n { skip: String(skip), limit: String(limit) },\n )\n return { items: response.data.taxonomies ?? [], count: response.data.count }\n },\n { limit: opts?.limit },\n )\n }\n\n async listAll(opts?: { limit?: number }): Promise<Taxonomy[]> {\n return collectAll(this.list(opts))\n }\n\n async get(uid: string): Promise<Taxonomy> {\n const response = await this.http.get<{ taxonomy: Taxonomy }>(`/taxonomies/${uid}`)\n return response.data.taxonomy\n }\n\n async create(data: Partial<Taxonomy>): Promise<Taxonomy> {\n const response = await this.http.post<{ taxonomy: Taxonomy }>(\"/taxonomies\", {\n taxonomy: data,\n })\n return response.data.taxonomy\n }\n\n async update(uid: string, data: Partial<Taxonomy>): Promise<Taxonomy> {\n const response = await this.http.put<{ taxonomy: Taxonomy }>(`/taxonomies/${uid}`, {\n taxonomy: data,\n })\n return response.data.taxonomy\n }\n\n async delete(uid: string): Promise<void> {\n await this.http.delete(`/taxonomies/${uid}`)\n }\n\n // ─── Terms ────────────────────────────────────────────────────────\n\n listTerms(taxonomyUid: string, opts?: { limit?: number }): AsyncIterable<TaxonomyTerm> {\n return paginate<TaxonomyTerm>(\n async (skip, limit) => {\n const response = await this.http.get<{ terms: TaxonomyTerm[]; count?: number }>(\n `/taxonomies/${taxonomyUid}/terms`,\n { skip: String(skip), limit: String(limit) },\n )\n return { items: response.data.terms ?? [], count: response.data.count }\n },\n { limit: opts?.limit },\n )\n }\n\n async listAllTerms(taxonomyUid: string, opts?: { limit?: number }): Promise<TaxonomyTerm[]> {\n return collectAll(this.listTerms(taxonomyUid, opts))\n }\n\n async getTerm(taxonomyUid: string, termUid: string): Promise<TaxonomyTerm> {\n const response = await this.http.get<{ term: TaxonomyTerm }>(\n `/taxonomies/${taxonomyUid}/terms/${termUid}`,\n )\n return response.data.term\n }\n\n async createTerm(taxonomyUid: string, data: Partial<TaxonomyTerm>): Promise<TaxonomyTerm> {\n const response = await this.http.post<{ term: TaxonomyTerm }>(\n `/taxonomies/${taxonomyUid}/terms`,\n { term: data },\n )\n return response.data.term\n }\n\n async updateTerm(\n taxonomyUid: string,\n termUid: string,\n data: Partial<TaxonomyTerm>,\n ): Promise<TaxonomyTerm> {\n const response = await this.http.put<{ term: TaxonomyTerm }>(\n `/taxonomies/${taxonomyUid}/terms/${termUid}`,\n { term: data },\n )\n return response.data.term\n }\n\n async deleteTerm(taxonomyUid: string, termUid: string): Promise<void> {\n await this.http.delete(`/taxonomies/${taxonomyUid}/terms/${termUid}`)\n }\n\n async ancestors(taxonomyUid: string, termUid: string): Promise<TaxonomyTerm[]> {\n const response = await this.http.get<{ terms: TaxonomyTerm[] }>(\n `/taxonomies/${taxonomyUid}/terms/${termUid}/ancestors`,\n )\n return response.data.terms ?? []\n }\n\n async descendants(taxonomyUid: string, termUid: string): Promise<TaxonomyTerm[]> {\n const response = await this.http.get<{ terms: TaxonomyTerm[] }>(\n `/taxonomies/${taxonomyUid}/terms/${termUid}/descendants`,\n )\n return response.data.terms ?? []\n }\n\n async moveTerm(\n taxonomyUid: string,\n termUid: string,\n data: { parent_uid?: string; order: number },\n ): Promise<TaxonomyTerm> {\n const response = await this.http.put<{ term: TaxonomyTerm }>(\n `/taxonomies/${taxonomyUid}/terms/${termUid}/move`,\n { term: data },\n )\n return response.data.term\n }\n\n // ─── Import / Export ──────────────────────────────────────────────\n\n async export(uid: string): Promise<Taxonomy> {\n const response = await this.http.get<{ taxonomy: Taxonomy }>(`/taxonomies/${uid}/export`)\n return response.data.taxonomy\n }\n\n async import(data: Record<string, unknown>): Promise<Taxonomy> {\n const response = await this.http.post<{ taxonomy: Taxonomy }>(\"/taxonomies/import\", data)\n return response.data.taxonomy\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA TokensClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport type { DeliveryToken, ManagementToken, PreviewToken } from \"./types.js\"\n\nfunction tokenCrud<T>(http: ContentstackHttpClient, basePath: string) {\n return {\n async list(): Promise<T[]> {\n const response = await http.get<{ tokens: T[] }>(basePath)\n return response.data.tokens ?? []\n },\n async get(uid: string): Promise<T> {\n const response = await http.get<{ token: T }>(`${basePath}/${uid}`)\n return response.data.token\n },\n async create(data: Partial<T>): Promise<T> {\n const response = await http.post<{ token: T }>(basePath, { token: data })\n return response.data.token\n },\n async update(uid: string, data: Partial<T>): Promise<T> {\n const response = await http.put<{ token: T }>(`${basePath}/${uid}`, { token: data })\n return response.data.token\n },\n async delete(uid: string): Promise<void> {\n await http.delete(`${basePath}/${uid}`)\n },\n }\n}\n\nexport class TokensClient {\n private management: ReturnType<typeof tokenCrud<ManagementToken>>\n private delivery: ReturnType<typeof tokenCrud<DeliveryToken>>\n private preview: ReturnType<typeof tokenCrud<PreviewToken>>\n\n constructor(http: ContentstackHttpClient) {\n this.management = tokenCrud<ManagementToken>(http, \"/stacks/management_tokens\")\n this.delivery = tokenCrud<DeliveryToken>(http, \"/stacks/delivery_tokens\")\n this.preview = tokenCrud<PreviewToken>(http, \"/stacks/preview_tokens\")\n }\n\n // ─── Management Tokens ────────────────────────────────────────────\n\n listManagementTokens() {\n return this.management.list()\n }\n getManagementToken(uid: string) {\n return this.management.get(uid)\n }\n createManagementToken(data: Partial<ManagementToken>) {\n return this.management.create(data)\n }\n updateManagementToken(uid: string, data: Partial<ManagementToken>) {\n return this.management.update(uid, data)\n }\n deleteManagementToken(uid: string) {\n return this.management.delete(uid)\n }\n\n // ─── Delivery Tokens ──────────────────────────────────────────────\n\n listDeliveryTokens() {\n return this.delivery.list()\n }\n getDeliveryToken(uid: string) {\n return this.delivery.get(uid)\n }\n createDeliveryToken(data: Partial<DeliveryToken>) {\n return this.delivery.create(data)\n }\n updateDeliveryToken(uid: string, data: Partial<DeliveryToken>) {\n return this.delivery.update(uid, data)\n }\n deleteDeliveryToken(uid: string) {\n return this.delivery.delete(uid)\n }\n\n // ─── Preview Tokens ──────────────────────────────────────────────\n\n listPreviewTokens() {\n return this.preview.list()\n }\n getPreviewToken(uid: string) {\n return this.preview.get(uid)\n }\n createPreviewToken(data: Partial<PreviewToken>) {\n return this.preview.create(data)\n }\n updatePreviewToken(uid: string, data: Partial<PreviewToken>) {\n return this.preview.update(uid, data)\n }\n deletePreviewToken(uid: string) {\n return this.preview.delete(uid)\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA WebhooksClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport type { Webhook } from \"./types.js\"\n\nexport class WebhooksClient extends CrudClient<Webhook> {\n constructor(http: ContentstackHttpClient) {\n super(http, { basePath: \"/webhooks\", singularKey: \"webhook\", pluralKey: \"webhooks\" })\n }\n\n async logs(uid: string): Promise<unknown[]> {\n const response = await this.http.get<{ logs: unknown[] }>(`/webhooks/${uid}/logs`)\n return response.data.logs ?? []\n }\n\n async retry(uid: string, executionUid: string): Promise<void> {\n await this.http.post(`/webhooks/${uid}/retry/${executionUid}`, {})\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA WorkflowsClient\n\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { CrudClient } from \"./base-client.js\"\nimport type { Workflow } from \"./types.js\"\n\nexport class WorkflowsClient extends CrudClient<Workflow> {\n constructor(http: ContentstackHttpClient) {\n super(http, { basePath: \"/workflows\", singularKey: \"workflow\", pluralKey: \"workflows\" })\n }\n}\n","// @timbenniks/contentstack-platform-sdk — CMA client factory\n\nimport { ContentstackHttpClient } from \"../http/client.js\"\nimport type { HttpClientConfig } from \"../http/types.js\"\nimport type { ContentstackRegion } from \"../regions/resolver.js\"\nimport { resolveEndpoints } from \"../regions/resolver.js\"\nimport { AssetsClient } from \"./assets.js\"\nimport { AuditLogClient } from \"./audit-log.js\"\nimport { BranchAliasesClient } from \"./branch-aliases.js\"\nimport { BranchesClient } from \"./branches.js\"\nimport { BulkOperationsClient } from \"./bulk.js\"\nimport { ContentTypesClient } from \"./content-types.js\"\nimport { EntriesClient } from \"./entries.js\"\nimport { EnvironmentsClient } from \"./environments.js\"\nimport { ExtensionsClient } from \"./extensions.js\"\nimport { GlobalFieldsClient } from \"./global-fields.js\"\nimport { LabelsClient } from \"./labels.js\"\nimport { LocalesClient } from \"./locales.js\"\nimport { PublishRulesClient } from \"./publish-rules.js\"\nimport { ReleasesClient } from \"./releases.js\"\nimport { RolesClient } from \"./roles.js\"\nimport { TaxonomiesClient } from \"./taxonomies.js\"\nimport { TokensClient } from \"./tokens.js\"\nimport { WebhooksClient } from \"./webhooks.js\"\nimport { WorkflowsClient } from \"./workflows.js\"\n\nexport interface CMAClientConfig {\n region: ContentstackRegion\n apiKey: string\n auth:\n | { type: \"management-token\"; token: string }\n | { type: \"oauth\"; accessToken: string }\n | { type: \"authtoken\"; token: string }\n branch?: string\n httpOptions?: Partial<HttpClientConfig>\n}\n\nexport interface CMAClient {\n entries: EntriesClient\n contentTypes: ContentTypesClient\n assets: AssetsClient\n environments: EnvironmentsClient\n locales: LocalesClient\n globalFields: GlobalFieldsClient\n webhooks: WebhooksClient\n workflows: WorkflowsClient\n releases: ReleasesClient\n branches: BranchesClient\n branchAliases: BranchAliasesClient\n taxonomies: TaxonomiesClient\n bulk: BulkOperationsClient\n tokens: TokensClient\n labels: LabelsClient\n roles: RolesClient\n auditLog: AuditLogClient\n extensions: ExtensionsClient\n publishRules: PublishRulesClient\n onBranch(branchUid: string): CMAClient\n}\n\nexport function createCMAClient(config: CMAClientConfig): CMAClient {\n const endpoints = resolveEndpoints(config.region)\n\n const headers: Record<string, string> = { api_key: config.apiKey }\n\n switch (config.auth.type) {\n case \"management-token\":\n headers.authorization = config.auth.token\n break\n case \"oauth\":\n headers.authorization = `Bearer ${config.auth.accessToken}`\n break\n case \"authtoken\":\n headers.authtoken = config.auth.token\n break\n }\n\n if (config.branch) {\n headers.branch = config.branch\n }\n\n const http = new ContentstackHttpClient({\n ...config.httpOptions,\n baseUrl: config.httpOptions?.baseUrl ?? `${endpoints.cma}/v3`,\n headers: {\n ...config.httpOptions?.headers,\n ...headers,\n },\n })\n\n return {\n entries: new EntriesClient(http),\n contentTypes: new ContentTypesClient(http),\n assets: new AssetsClient(http),\n environments: new EnvironmentsClient(http),\n locales: new LocalesClient(http),\n globalFields: new GlobalFieldsClient(http),\n webhooks: new WebhooksClient(http),\n workflows: new WorkflowsClient(http),\n releases: new ReleasesClient(http),\n branches: new BranchesClient(http),\n branchAliases: new BranchAliasesClient(http),\n taxonomies: new TaxonomiesClient(http),\n bulk: new BulkOperationsClient(http),\n tokens: new TokensClient(http),\n labels: new LabelsClient(http),\n roles: new RolesClient(http),\n auditLog: new AuditLogClient(http),\n extensions: new ExtensionsClient(http),\n publishRules: new PublishRulesClient(http),\n onBranch(branchUid: string): CMAClient {\n return createCMAClient({ ...config, branch: branchUid })\n },\n }\n}\n","/**\n * Framework-agnostic request builders for CMA operations.\n *\n * These pure functions build paths, query parameters, and request bodies\n * for Contentstack CMA endpoints. Both React hooks and Vue composables\n * use them to avoid duplicating request construction logic.\n */\n\n// ── Query parameter types ───────────────────────────────────────────────────\n\nexport interface EntryQueryParams {\n locale?: string\n version?: number\n includePublishDetails?: boolean\n}\n\nexport interface EntriesQueryParams {\n locale?: string\n limit?: number\n skip?: number\n includePublishDetails?: boolean\n query?: Record<string, unknown>\n}\n\nexport interface AssetsQueryParams {\n folder?: string\n limit?: number\n skip?: number\n}\n\n// ── Mutation variable types ─────────────────────────────────────────────────\n\nexport interface CreateEntryVariables {\n contentTypeUid: string\n entry: Record<string, unknown>\n locale?: string\n}\n\nexport interface UpdateEntryVariables {\n contentTypeUid: string\n entryUid: string\n entry: Record<string, unknown>\n locale?: string\n}\n\nexport interface DeleteEntryVariables {\n contentTypeUid: string\n entryUid: string\n locale?: string\n deleteAllLocalized?: boolean\n}\n\nexport interface PublishEntryVariables {\n contentTypeUid: string\n entryUid: string\n environments: string[]\n locales: string[]\n scheduledAt?: string\n}\n\n// ── Param builders ──────────────────────────────────────────────────────────\n\nfunction nonEmptyParams(params: Record<string, string>): Record<string, string> | undefined {\n return Object.keys(params).length > 0 ? params : undefined\n}\n\nexport function buildEntryParams(options?: EntryQueryParams): Record<string, string> | undefined {\n if (!options) return undefined\n const params: Record<string, string> = {}\n if (options.locale) params.locale = options.locale\n if (options.version !== undefined) params.version = String(options.version)\n if (options.includePublishDetails) params.include_publish_details = \"true\"\n return nonEmptyParams(params)\n}\n\nexport function buildEntriesParams(\n options?: EntriesQueryParams,\n): Record<string, string> | undefined {\n if (!options) return undefined\n const params: Record<string, string> = {}\n if (options.locale) params.locale = options.locale\n if (options.limit !== undefined) params.limit = String(options.limit)\n if (options.skip !== undefined) params.skip = String(options.skip)\n if (options.includePublishDetails) params.include_publish_details = \"true\"\n if (options.query) params.query = JSON.stringify(options.query)\n return nonEmptyParams(params)\n}\n\nexport function buildAssetsParams(options?: AssetsQueryParams): Record<string, string> | undefined {\n if (!options) return undefined\n const params: Record<string, string> = {}\n if (options.folder) params.folder = options.folder\n if (options.limit !== undefined) params.limit = String(options.limit)\n if (options.skip !== undefined) params.skip = String(options.skip)\n return nonEmptyParams(params)\n}\n\n// ── Request builders (for mutations) ────────────────────────────────────────\n\nfunction appendQueryString(path: string, params: URLSearchParams): string {\n const query = params.toString()\n return query ? `${path}?${query}` : path\n}\n\nexport function buildCreateEntryRequest(vars: CreateEntryVariables): {\n path: string\n body: unknown\n} {\n const params = new URLSearchParams()\n if (vars.locale) params.set(\"locale\", vars.locale)\n return {\n path: appendQueryString(`/content_types/${vars.contentTypeUid}/entries`, params),\n body: { entry: vars.entry },\n }\n}\n\nexport function buildUpdateEntryRequest(vars: UpdateEntryVariables): {\n path: string\n body: unknown\n} {\n const params = new URLSearchParams()\n if (vars.locale) params.set(\"locale\", vars.locale)\n return {\n path: appendQueryString(\n `/content_types/${vars.contentTypeUid}/entries/${vars.entryUid}`,\n params,\n ),\n body: { entry: vars.entry },\n }\n}\n\nexport function buildDeleteEntryRequest(vars: DeleteEntryVariables): { path: string } {\n const params = new URLSearchParams()\n if (vars.locale) params.set(\"locale\", vars.locale)\n if (vars.deleteAllLocalized) params.set(\"delete_all_localized\", \"true\")\n return {\n path: appendQueryString(\n `/content_types/${vars.contentTypeUid}/entries/${vars.entryUid}`,\n params,\n ),\n }\n}\n\nexport function buildPublishEntryRequest(vars: PublishEntryVariables): {\n path: string\n body: unknown\n} {\n return {\n path: `/content_types/${vars.contentTypeUid}/entries/${vars.entryUid}/publish`,\n body: {\n entry: {\n environments: vars.environments,\n locales: vars.locales,\n ...(vars.scheduledAt ? { scheduled_at: vars.scheduledAt } : {}),\n },\n },\n }\n}\n","import { ContentstackConfigError } from \"../http/errors.js\"\nimport type {\n ImageFitMode,\n ImageFormat,\n ImageOrientation,\n ImageResizeFilter,\n ImageTransformBuilder,\n} from \"./types.js\"\n\nconst VALID_FORMATS = new Set<ImageFormat>([\"webp\", \"jpg\", \"png\", \"gif\", \"avif\", \"pjpg\"])\nconst VALID_FITS = new Set<ImageFitMode>([\"bounds\", \"crop\", \"cover\"])\nconst VALID_FILTERS = new Set<ImageResizeFilter>([\n \"nearest\",\n \"bilinear\",\n \"bicubic\",\n \"lanczos2\",\n \"lanczos3\",\n])\n\nclass ImageTransformBuilderImpl implements ImageTransformBuilder {\n constructor(\n private readonly assetUrl: string,\n private readonly params: Record<string, string> = {},\n ) {}\n\n width(px: number): ImageTransformBuilder {\n assertPositiveInteger(\"width\", px)\n return this.with(\"width\", String(px))\n }\n\n height(px: number): ImageTransformBuilder {\n assertPositiveInteger(\"height\", px)\n return this.with(\"height\", String(px))\n }\n\n quality(q: number): ImageTransformBuilder {\n if (!Number.isInteger(q) || q < 1 || q > 100) {\n throw new ContentstackConfigError(\"quality() expects an integer between 1 and 100\")\n }\n return this.with(\"quality\", String(q))\n }\n\n format(fmt: ImageFormat): ImageTransformBuilder {\n if (!VALID_FORMATS.has(fmt)) {\n throw new ContentstackConfigError(`Unsupported image format: ${fmt}`)\n }\n return this.with(\"format\", fmt)\n }\n\n fit(mode: ImageFitMode): ImageTransformBuilder {\n if (!VALID_FITS.has(mode)) {\n throw new ContentstackConfigError(`Unsupported fit mode: ${mode}`)\n }\n return this.with(\"fit\", mode)\n }\n\n crop(params: string): ImageTransformBuilder {\n return this.withNonEmptyString(\"crop\", params)\n }\n\n trim(edges: string): ImageTransformBuilder {\n return this.withNonEmptyString(\"trim\", edges)\n }\n\n orient(angle: ImageOrientation): ImageTransformBuilder {\n if (!Number.isInteger(angle) || angle < 1 || angle > 8) {\n throw new ContentstackConfigError(\"orient() expects a value between 1 and 8\")\n }\n return this.with(\"orient\", String(angle))\n }\n\n overlay(params: Record<string, string>): ImageTransformBuilder {\n const entries = Object.entries(params)\n .filter(([, value]) => value.trim().length > 0)\n .sort(([a], [b]) => a.localeCompare(b))\n\n if (entries.length === 0) {\n throw new ContentstackConfigError(\"overlay() requires at least one non-empty key/value pair\")\n }\n\n const value = entries.map(([key, val]) => `${key}:${val}`).join(\",\")\n return this.with(\"overlay\", value)\n }\n\n pad(pixels: string): ImageTransformBuilder {\n return this.withNonEmptyString(\"pad\", pixels)\n }\n\n bgColor(hex: string): ImageTransformBuilder {\n const normalized = hex.trim().replace(/^#/, \"\")\n if (!/^[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/.test(normalized)) {\n throw new ContentstackConfigError(\"bgColor() expects a 3 or 6 character hex value\")\n }\n return this.with(\"bg-color\", normalized.toLowerCase())\n }\n\n dpr(ratio: number): ImageTransformBuilder {\n if (!Number.isFinite(ratio) || ratio <= 0) {\n throw new ContentstackConfigError(\"dpr() expects a positive number\")\n }\n return this.with(\"dpr\", String(ratio))\n }\n\n disableUpscale(): ImageTransformBuilder {\n return this.with(\"disable\", \"upscale\")\n }\n\n resizeFilter(filter: ImageResizeFilter): ImageTransformBuilder {\n if (!VALID_FILTERS.has(filter)) {\n throw new ContentstackConfigError(`Unsupported resize filter: ${filter}`)\n }\n return this.with(\"resize-filter\", filter)\n }\n\n toURL(): string {\n if (Object.keys(this.params).length === 0) {\n return this.assetUrl\n }\n\n const query = new URLSearchParams(this.params)\n\n try {\n const url = new URL(this.assetUrl)\n for (const [key, value] of query.entries()) {\n url.searchParams.set(key, value)\n }\n return url.toString()\n } catch {\n const separator = this.assetUrl.includes(\"?\") ? \"&\" : \"?\"\n return `${this.assetUrl}${separator}${query.toString()}`\n }\n }\n\n toSrcSet(widths: number[]): string {\n return widths\n .map((width) => {\n assertPositiveInteger(\"toSrcSet width\", width)\n return `${this.width(width).toURL()} ${width}w`\n })\n .join(\", \")\n }\n\n toParams(): Record<string, string> {\n return { ...this.params }\n }\n\n private with(key: string, value: string): ImageTransformBuilder {\n return new ImageTransformBuilderImpl(this.assetUrl, {\n ...this.params,\n [key]: value,\n })\n }\n\n private withNonEmptyString(key: string, value: string): ImageTransformBuilder {\n if (!value.trim()) {\n throw new ContentstackConfigError(`${key}() requires a non-empty string value`)\n }\n return this.with(key, value)\n }\n}\n\nexport function imageTransform(assetUrl: string): ImageTransformBuilder {\n if (!assetUrl.trim()) {\n throw new ContentstackConfigError(\"imageTransform() requires a non-empty asset URL\")\n }\n\n return new ImageTransformBuilderImpl(assetUrl)\n}\n\nfunction assertPositiveInteger(name: string, value: number): void {\n if (!Number.isInteger(value) || value <= 0) {\n throw new ContentstackConfigError(`${name} expects a positive integer`)\n }\n}\n","import {\n type IJsonToHtmlElementTags,\n type IJsonToHtmlOptions,\n jsonToHtml,\n} from \"@contentstack/json-rte-serializer\"\nimport { normalizeForSerializer } from \"./serializer.js\"\nimport type { RTEDocNode, RTENode } from \"./types.js\"\nimport { isRecord } from \"./utils.js\"\n\nexport interface ToHTMLOptions {\n renderEntry?: (attrs: Record<string, unknown>, node: RTENode) => string\n renderAsset?: (attrs: Record<string, unknown>, node: RTENode) => string\n serializerOptions?: IJsonToHtmlOptions\n}\n\nexport function toHTML(doc: RTEDocNode, options: ToHTMLOptions = {}): string {\n return jsonToHtml(\n normalizeForSerializer(doc) as unknown as Record<string, unknown>,\n buildSerializerOptions(options),\n )\n}\n\nfunction buildSerializerOptions(options: ToHTMLOptions): IJsonToHtmlOptions | undefined {\n const { renderEntry, renderAsset, serializerOptions } = options\n\n if (!renderEntry && !renderAsset) {\n return serializerOptions\n }\n\n const customElementTypes: IJsonToHtmlElementTags = {\n ...(serializerOptions?.customElementTypes ?? {}),\n }\n\n const existingReferenceRenderer = customElementTypes.reference\n\n customElementTypes.reference = (attrs, child, jsonBlock, extraProps) => {\n const block = asRTENode(jsonBlock)\n const referenceAttrs = isRecord(block.attrs) ? block.attrs : {}\n\n if (referenceAttrs.type === \"entry\" && renderEntry) {\n return renderEntry(referenceAttrs, block)\n }\n\n if (referenceAttrs.type === \"asset\" && renderAsset) {\n return renderAsset(referenceAttrs, block)\n }\n\n return typeof existingReferenceRenderer === \"function\"\n ? existingReferenceRenderer(attrs, child, jsonBlock, extraProps)\n : \"\"\n }\n\n return {\n ...serializerOptions,\n customElementTypes,\n }\n}\n\nfunction asRTENode(value: unknown): RTENode {\n if (isRecord(value) && typeof value.type === \"string\" && typeof value.uid === \"string\") {\n return value as unknown as RTENode\n }\n\n return {\n type: \"reference\",\n uid: \"reference\",\n }\n}\n","import type { RTENode, RTETextNode } from \"./types.js\"\n\nexport const KNOWN_RTE_TYPES = new Set([\n \"doc\",\n \"p\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"ul\",\n \"ol\",\n \"li\",\n \"blockquote\",\n \"code\",\n \"img\",\n \"a\",\n \"table\",\n \"tr\",\n \"td\",\n \"th\",\n \"hr\",\n \"reference\",\n])\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null\n}\n\nexport function isTextNode(value: unknown): value is RTETextNode {\n return isRecord(value) && typeof value.text === \"string\" && typeof value.type !== \"string\"\n}\n\nexport function isElementNode(value: unknown): value is RTENode {\n return isRecord(value) && typeof value.type === \"string\" && typeof value.uid === \"string\"\n}\n\nexport function escapeHTML(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\\\"/g, \""\")\n .replace(/'/g, \"'\")\n}\n\nexport function decodeHTML(value: string): string {\n return value\n .replace(/ /g, \" \")\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/&/g, \"&\")\n}\n\nexport function createUid(): string {\n const uuid = globalThis.crypto?.randomUUID\n if (typeof uuid === \"function\") {\n return uuid.call(globalThis.crypto)\n }\n\n return `rte-${Math.random().toString(36).slice(2, 10)}`\n}\n","import type { RTEDocNode, RTENode, RTETextNode } from \"./types.js\"\nimport { isRecord, isTextNode } from \"./utils.js\"\n\nconst DEFAULT_TABLE_COLUMN_WIDTH = 250\n\nexport function normalizeForSerializer(doc: RTEDocNode): RTEDocNode {\n const normalized = normalizeNode(doc)\n\n if (!isTextNode(normalized) && normalized.type === \"doc\") {\n return normalized as RTEDocNode\n }\n\n return {\n ...doc,\n children: [],\n }\n}\n\nfunction normalizeNode(node: RTENode | RTETextNode): RTENode | RTETextNode {\n if (isTextNode(node)) {\n return { ...node }\n }\n\n const children = node.children?.map((child) => normalizeNode(child))\n const attrs = isRecord(node.attrs) ? { ...node.attrs } : {}\n\n if (node.type === \"a\" && typeof attrs.url !== \"string\" && typeof attrs.href === \"string\") {\n attrs.url = attrs.href\n }\n\n if (node.type === \"img\" && typeof attrs.url !== \"string\" && typeof attrs.src === \"string\") {\n attrs.url = attrs.src\n }\n\n if (node.type === \"table\") {\n const tableRows = (children ?? []).filter(\n (row): row is RTENode => !isTextNode(row) && row.type === \"tr\",\n )\n\n const inferredCols = tableRows.reduce((max, row) => {\n const columnCount = (row.children ?? []).filter(\n (cell) => !isTextNode(cell) && (cell.type === \"td\" || cell.type === \"th\"),\n ).length\n return Math.max(max, columnCount)\n }, 0)\n\n const normalizedCols =\n typeof attrs.cols === \"number\" && attrs.cols > 0 ? attrs.cols : inferredCols\n const normalizedRows =\n typeof attrs.rows === \"number\" && attrs.rows > 0 ? attrs.rows : tableRows.length\n const normalizedWidths =\n Array.isArray(attrs.colWidths) &&\n attrs.colWidths.length > 0 &&\n attrs.colWidths.every((width) => typeof width === \"number\")\n ? attrs.colWidths\n : Array.from({ length: Math.max(normalizedCols, 1) }, () => DEFAULT_TABLE_COLUMN_WIDTH)\n\n return {\n ...node,\n attrs: {\n ...attrs,\n rows: normalizedRows,\n cols: Math.max(normalizedCols, 1),\n colWidths: normalizedWidths,\n },\n ...(children ? { children } : {}),\n }\n }\n\n return {\n ...node,\n attrs,\n ...(children ? { children } : {}),\n }\n}\n","import { jsonToMarkdown } from \"@contentstack/json-rte-serializer\"\nimport { normalizeForSerializer } from \"./serializer.js\"\nimport type { RTEDocNode, RTENode, RTETextNode } from \"./types.js\"\nimport { isTextNode } from \"./utils.js\"\n\nexport interface ToMarkdownOptions {\n renderEntry?: (attrs: Record<string, unknown>, node: RTENode) => string\n renderAsset?: (attrs: Record<string, unknown>, node: RTENode) => string\n}\n\nexport function toMarkdown(doc: RTEDocNode, options: ToMarkdownOptions = {}): string {\n const mappedDoc =\n options.renderEntry || options.renderAsset ? mapReferenceNodes(doc, options) : doc\n const markdown = jsonToMarkdown(normalizeForSerializer(mappedDoc)).trim()\n return normalizeMarkdownOutput(markdown)\n}\n\nfunction mapReferenceNodes(doc: RTEDocNode, options: ToMarkdownOptions): RTEDocNode {\n const mapped = mapNode(doc, options)\n if (isTextNode(mapped)) {\n return {\n ...doc,\n children: [],\n }\n }\n\n return {\n ...doc,\n ...mapped,\n type: \"doc\",\n uid: mapped.uid ?? doc.uid,\n }\n}\n\nfunction mapNode(node: RTENode | RTETextNode, options: ToMarkdownOptions): RTENode | RTETextNode {\n if (isTextNode(node)) {\n return { ...node }\n }\n\n if (node.type === \"reference\") {\n const attrs = node.attrs ?? {}\n if (attrs.type === \"entry\" && options.renderEntry) {\n return { text: options.renderEntry(attrs, node) }\n }\n if (attrs.type === \"asset\" && options.renderAsset) {\n return { text: options.renderAsset(attrs, node) }\n }\n return { text: \"\" }\n }\n\n return {\n ...node,\n ...(node.children ? { children: node.children.map((child) => mapNode(child, options)) } : {}),\n }\n}\n\nfunction normalizeMarkdownOutput(markdown: string): string {\n return markdown.replace(/!\\[([^\\]]*)\\]\\s*\\n\\s*\\(([^)\\n]+)\\)/g, \"\")\n}\n","import type { RTEDocNode, RTENode, RTETextNode } from \"./types.js\"\nimport { isTextNode } from \"./utils.js\"\n\nconst DOUBLE_BREAK_TYPES = new Set([\n \"p\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"blockquote\",\n \"code\",\n \"ul\",\n \"ol\",\n \"table\",\n])\n\nconst SINGLE_BREAK_TYPES = new Set([\"li\", \"tr\", \"td\", \"th\"])\n\nexport function toPlainText(doc: RTEDocNode): string {\n return renderNode(doc)\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .trim()\n}\n\nfunction renderNode(node: RTENode | RTETextNode): string {\n if (isTextNode(node)) {\n return node.text\n }\n\n const children = (node.children ?? []).map((child) => renderNode(child)).join(\"\")\n\n if (node.type === \"doc\") {\n return children\n }\n\n if (node.type === \"img\") {\n const alt = node.attrs?.alt\n if (typeof alt === \"string\" && alt.trim()) {\n return `${alt}\\n\\n`\n }\n return \"\\n\"\n }\n\n if (node.type === \"a\") {\n const href = node.attrs?.href\n const text = children || (typeof href === \"string\" ? href : \"\")\n return text\n }\n\n if (node.type === \"hr\") {\n return \"\\n\"\n }\n\n if (node.type === \"reference\") {\n return \"\"\n }\n\n if (DOUBLE_BREAK_TYPES.has(node.type)) {\n return `${children}\\n\\n`\n }\n\n if (SINGLE_BREAK_TYPES.has(node.type)) {\n return `${children}\\n`\n }\n\n return children\n}\n","import { type IHtmlToJsonOptions, htmlToJson } from \"@contentstack/json-rte-serializer\"\nimport type { RTEDocNode, RTENode, RTETextNode } from \"./types.js\"\nimport { createUid, decodeHTML, isRecord } from \"./utils.js\"\n\ninterface ParsedElement {\n kind: \"element\"\n tag: string\n attrs: Record<string, string>\n children: ParsedNode[]\n}\n\ninterface ParsedText {\n kind: \"text\"\n value: string\n}\n\ntype ParsedNode = ParsedElement | ParsedText\n\ntype TextMarks = Pick<\n RTETextNode,\n \"bold\" | \"italic\" | \"underline\" | \"strikethrough\" | \"code\" | \"superscript\" | \"subscript\"\n>\n\nconst VOID_TAGS = new Set([\"img\", \"hr\", \"br\", \"meta\", \"link\", \"input\"])\n\nexport interface FromHTMLOptions {\n serializerOptions?: IHtmlToJsonOptions\n}\n\nexport function fromHTML(html: string, options: FromHTMLOptions = {}): RTEDocNode {\n const parsed = parseWithSerializer(html, options)\n if (parsed) {\n return parsed\n }\n\n return parseWithFallback(html)\n}\n\nfunction parseWithSerializer(html: string, options: FromHTMLOptions): RTEDocNode | null {\n try {\n const parsed = htmlToJson(html, options.serializerOptions)\n return normalizeDoc(parsed)\n } catch {\n return null\n }\n}\n\nfunction normalizeDoc(value: unknown): RTEDocNode | null {\n if (isRecord(value) && value.type === \"doc\" && Array.isArray(value.children)) {\n return {\n ...value,\n type: \"doc\",\n uid: typeof value.uid === \"string\" && value.uid.length > 0 ? value.uid : createUid(),\n children: value.children as Array<RTENode | RTETextNode>,\n } as RTEDocNode\n }\n\n return null\n}\n\nfunction parseWithFallback(html: string): RTEDocNode {\n const root = parseHTML(html)\n const children = convertNodes(root.children)\n\n return {\n type: \"doc\",\n uid: createUid(),\n children,\n }\n}\n\nfunction parseHTML(html: string): ParsedElement {\n const root: ParsedElement = {\n kind: \"element\",\n tag: \"root\",\n attrs: {},\n children: [],\n }\n\n const stack: ParsedElement[] = [root]\n const tokenPattern = /<!--[\\s\\S]*?-->|<\\/?[^>]+>|[^<]+/g\n const tokens = html.match(tokenPattern) ?? []\n\n for (const token of tokens) {\n if (!token) {\n continue\n }\n\n if (token.startsWith(\"<!--\")) {\n continue\n }\n\n if (!token.startsWith(\"<\")) {\n const text = decodeHTML(token)\n if (text.length === 0) {\n continue\n }\n\n const parent = stack[stack.length - 1]\n if (!parent) {\n continue\n }\n\n parent.children.push({\n kind: \"text\",\n value: text,\n })\n continue\n }\n\n if (token.startsWith(\"</\")) {\n const closingTag = token.slice(2, -1).trim().toLowerCase()\n while (stack.length > 1) {\n const current = stack.pop()\n if (current?.tag === closingTag) {\n break\n }\n }\n continue\n }\n\n const parsed = parseOpeningTag(token)\n if (!parsed) {\n continue\n }\n\n const parent = stack[stack.length - 1]\n if (!parent) {\n continue\n }\n\n parent.children.push(parsed.element)\n\n const isVoid = parsed.selfClosing || VOID_TAGS.has(parsed.element.tag)\n if (!isVoid) {\n stack.push(parsed.element)\n }\n }\n\n return root\n}\n\nfunction parseOpeningTag(token: string): { element: ParsedElement; selfClosing: boolean } | null {\n const isSelfClosing = token.endsWith(\"/>\")\n const content = token.slice(1, token.length - (isSelfClosing ? 2 : 1)).trim()\n\n if (!content) {\n return null\n }\n\n const tagMatch = content.match(/^([a-zA-Z0-9-]+)/)\n if (!tagMatch?.[1]) {\n return null\n }\n\n const tag = tagMatch[1].toLowerCase()\n const attrs = parseAttributes(content.slice(tag.length).trim())\n\n return {\n element: {\n kind: \"element\",\n tag,\n attrs,\n children: [],\n },\n selfClosing: isSelfClosing,\n }\n}\n\nfunction parseAttributes(input: string): Record<string, string> {\n const attrs: Record<string, string> = {}\n const attrPattern = /([:@a-zA-Z0-9_-]+)(?:\\s*=\\s*(\"([^\"]*)\"|'([^']*)'|([^\\s\"'>/]+)))?/g\n\n let match = attrPattern.exec(input)\n while (match) {\n const key = match[1]\n if (key) {\n const value = decodeHTML(match[3] ?? match[4] ?? match[5] ?? \"\")\n attrs[key] = value\n }\n match = attrPattern.exec(input)\n }\n\n return attrs\n}\n\nfunction convertNodes(nodes: ParsedNode[], marks: TextMarks = {}): Array<RTENode | RTETextNode> {\n const output: Array<RTENode | RTETextNode> = []\n\n for (const node of nodes) {\n if (node.kind === \"text\") {\n const cleaned = normalizeText(node.value)\n if (!cleaned) {\n continue\n }\n\n output.push({\n text: cleaned,\n ...(marks.bold ? { bold: true } : {}),\n ...(marks.italic ? { italic: true } : {}),\n ...(marks.underline ? { underline: true } : {}),\n ...(marks.strikethrough ? { strikethrough: true } : {}),\n ...(marks.code ? { code: true } : {}),\n ...(marks.superscript ? { superscript: true } : {}),\n ...(marks.subscript ? { subscript: true } : {}),\n })\n continue\n }\n\n output.push(...convertElement(node, marks))\n }\n\n return output\n}\n\nfunction convertElement(element: ParsedElement, marks: TextMarks): Array<RTENode | RTETextNode> {\n switch (element.tag) {\n case \"strong\":\n case \"b\":\n return convertNodes(element.children, { ...marks, bold: true })\n case \"em\":\n case \"i\":\n return convertNodes(element.children, { ...marks, italic: true })\n case \"u\":\n return convertNodes(element.children, { ...marks, underline: true })\n case \"s\":\n case \"strike\":\n case \"del\":\n return convertNodes(element.children, { ...marks, strikethrough: true })\n case \"sup\":\n return convertNodes(element.children, { ...marks, superscript: true })\n case \"sub\":\n return convertNodes(element.children, { ...marks, subscript: true })\n case \"code\":\n return convertNodes(element.children, { ...marks, code: true })\n case \"br\":\n return [{ text: \"\\n\" }]\n case \"img\":\n return [\n {\n type: \"img\",\n uid: createUid(),\n attrs: {\n src: element.attrs.src ?? \"\",\n alt: element.attrs.alt ?? \"\",\n },\n },\n ]\n case \"hr\":\n return [\n {\n type: \"hr\",\n uid: createUid(),\n },\n ]\n case \"a\":\n return [\n {\n type: \"a\",\n uid: createUid(),\n attrs: {\n href: element.attrs.href ?? \"\",\n ...(element.attrs.target ? { target: element.attrs.target } : {}),\n },\n children: convertNodes(element.children),\n },\n ]\n case \"reference\":\n return [\n {\n type: \"reference\",\n uid: createUid(),\n attrs: {\n ...element.attrs,\n },\n },\n ]\n case \"pre\": {\n const codeText = extractTextContent(element)\n return [\n {\n type: \"code\",\n uid: createUid(),\n children: codeText ? [{ text: codeText }] : [],\n },\n ]\n }\n case \"p\":\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n case \"ul\":\n case \"ol\":\n case \"li\":\n case \"blockquote\":\n case \"table\":\n case \"tr\":\n case \"td\":\n case \"th\":\n return [\n {\n type: element.tag,\n uid: createUid(),\n children: convertNodes(element.children),\n },\n ]\n default:\n return convertNodes(element.children, marks)\n }\n}\n\nfunction extractTextContent(node: ParsedNode): string {\n if (node.kind === \"text\") {\n return decodeHTML(node.value)\n }\n\n return node.children.map((child) => extractTextContent(child)).join(\"\")\n}\n\nfunction normalizeText(value: string): string {\n const collapsed = value.replace(/\\s+/g, \" \")\n if (collapsed.trim().length === 0) {\n return \" \"\n }\n return collapsed\n}\n","import type { RTEDocNode, RTENode, RTETextNode } from \"./types.js\"\nimport { isTextNode } from \"./utils.js\"\n\nexport function transform(\n doc: RTEDocNode,\n visitors: Record<string, (node: RTENode) => RTENode | undefined>,\n): RTEDocNode {\n const transformed = visitNode(doc, visitors)\n\n if (!transformed || isTextNode(transformed) || transformed.type !== \"doc\") {\n return {\n ...doc,\n children: [],\n }\n }\n\n return transformed as RTEDocNode\n}\n\nfunction visitNode(\n node: RTENode | RTETextNode,\n visitors: Record<string, (node: RTENode) => RTENode | undefined>,\n): RTENode | RTETextNode | undefined {\n if (isTextNode(node)) {\n return { ...node }\n }\n\n const nextChildren = (node.children ?? [])\n .map((child) => visitNode(child, visitors))\n .filter((child): child is RTENode | RTETextNode => Boolean(child))\n\n const withChildren: RTENode = {\n ...node,\n ...(node.children ? { children: nextChildren } : {}),\n }\n\n const visitor = visitors[withChildren.type]\n if (!visitor) {\n return withChildren\n }\n\n return visitor(withChildren)\n}\n","import type { RTEDocNode, RTENode, RTETextNode } from \"./types.js\"\nimport { KNOWN_RTE_TYPES, isElementNode, isRecord, isTextNode } from \"./utils.js\"\n\nexport function validate(doc: unknown): { valid: boolean; errors: string[] } {\n const errors: string[] = []\n\n if (!isElementNode(doc)) {\n errors.push(\"Document must be an object node with type and uid\")\n return { valid: false, errors }\n }\n\n if (doc.type !== \"doc\") {\n errors.push('Document root node must have type \"doc\"')\n }\n\n if (!Array.isArray(doc.children)) {\n errors.push('Document root node must include a \"children\" array')\n } else {\n validateChildren(doc.children, \"doc.children\", errors)\n }\n\n return { valid: errors.length === 0, errors }\n}\n\nfunction validateChildren(\n children: unknown[],\n path: string,\n errors: string[],\n): asserts children is Array<RTENode | RTETextNode> {\n children.forEach((child, index) => {\n validateNode(child, `${path}[${index}]`, errors)\n })\n}\n\nfunction validateNode(node: unknown, path: string, errors: string[]): void {\n if (isTextNode(node)) {\n if (typeof node.text !== \"string\") {\n errors.push(`${path} must have a string text value`)\n }\n return\n }\n\n if (!isElementNode(node)) {\n errors.push(`${path} must be a valid element node or text node`)\n return\n }\n\n validateElementNode(node, path, errors)\n}\n\nfunction validateElementNode(node: RTENode, path: string, errors: string[]): void {\n if (!KNOWN_RTE_TYPES.has(node.type)) {\n errors.push(`${path}.type \"${node.type}\" is not a supported RTE node type`)\n }\n\n if (typeof node.uid !== \"string\" || node.uid.trim().length === 0) {\n errors.push(`${path}.uid must be a non-empty string`)\n }\n\n if (node.children !== undefined) {\n if (!Array.isArray(node.children)) {\n errors.push(`${path}.children must be an array when provided`)\n } else {\n validateChildren(node.children, `${path}.children`, errors)\n }\n }\n\n switch (node.type) {\n case \"img\":\n validateImgNode(node, path, errors)\n break\n case \"a\":\n validateAnchorNode(node, path, errors)\n break\n case \"reference\":\n validateReferenceNode(node, path, errors)\n break\n case \"hr\":\n if (Array.isArray(node.children) && node.children.length > 0) {\n errors.push(`${path}.children must be empty for hr nodes`)\n }\n break\n }\n}\n\nfunction validateImgNode(node: RTENode, path: string, errors: string[]): void {\n if (!isRecord(node.attrs) || typeof node.attrs.src !== \"string\" || node.attrs.src.length === 0) {\n errors.push(`${path}.attrs.src must be a non-empty string for img nodes`)\n }\n\n if (isRecord(node.attrs) && node.attrs.alt !== undefined && typeof node.attrs.alt !== \"string\") {\n errors.push(`${path}.attrs.alt must be a string when provided`)\n }\n}\n\nfunction validateAnchorNode(node: RTENode, path: string, errors: string[]): void {\n if (\n !isRecord(node.attrs) ||\n typeof node.attrs.href !== \"string\" ||\n node.attrs.href.length === 0\n ) {\n errors.push(`${path}.attrs.href must be a non-empty string for a nodes`)\n }\n\n if (\n isRecord(node.attrs) &&\n node.attrs.target !== undefined &&\n typeof node.attrs.target !== \"string\"\n ) {\n errors.push(`${path}.attrs.target must be a string when provided`)\n }\n}\n\nfunction validateReferenceNode(node: RTENode, path: string, errors: string[]): void {\n if (!isRecord(node.attrs)) {\n errors.push(`${path}.attrs must be present for reference nodes`)\n return\n }\n\n const refType = node.attrs.type\n if (refType !== \"entry\" && refType !== \"asset\") {\n errors.push(`${path}.attrs.type must be \"entry\" or \"asset\" for reference nodes`)\n return\n }\n\n if (refType === \"entry\" && typeof node.attrs[\"entry-uid\"] !== \"string\") {\n errors.push(`${path}.attrs[\"entry-uid\"] must be provided for entry references`)\n }\n\n if (refType === \"asset\" && typeof node.attrs[\"asset-uid\"] !== \"string\") {\n errors.push(`${path}.attrs[\"asset-uid\"] must be provided for asset references`)\n }\n}\n\nexport type { RTEDocNode }\n","/**\n * Launch API response helpers.\n *\n * The Launch API returns responses in the format:\n * { pagination: { count, limit, skip }, [key]: [...] }\n *\n * For example, listing projects returns:\n * { pagination: { count: 7, limit: 25, skip: null }, projects: [...] }\n *\n * These helpers normalise the response into the shape the paginator expects.\n */\n\n/**\n * Extract a list from a Launch API response.\n *\n * Handles:\n * - `{ pagination: { count }, [key]: [...] }` — real Launch API format\n * - `{ data: T[], count? }` — legacy / fallback\n * - Plain arrays `T[]`\n */\nexport function extractList<T>(body: unknown, key: string): { items: T[]; count?: number } {\n if (Array.isArray(body)) {\n return { items: body as T[] }\n }\n\n if (body && typeof body === \"object\") {\n const obj = body as Record<string, unknown>\n\n // Launch API format: { pagination: { count }, [key]: [...] }\n if (key in obj && Array.isArray(obj[key])) {\n const pagination = obj.pagination as { count?: number } | undefined\n return { items: obj[key] as T[], count: pagination?.count }\n }\n\n // Fallback: { data: [...], count? }\n if (\"data\" in obj && Array.isArray(obj.data)) {\n return { items: obj.data as T[], count: (obj as { count?: number }).count }\n }\n }\n\n return { items: [] }\n}\n\n/** Extract a single item from a response that may be a plain object or `{ data: T }`. */\nexport function extractItem<T>(body: unknown): T {\n if (body && typeof body === \"object\" && \"data\" in body) {\n return (body as { data: T }).data\n }\n\n return body as T\n}\n","import { collectAll, paginate } from \"../cma/pagination.js\"\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { extractItem, extractList } from \"./response.js\"\nimport type {\n CreateDeploymentData,\n DeploymentLog,\n DeploymentLogOptions,\n LaunchDeployment,\n ListDeploymentsOptions,\n ServerLog,\n ServerLogOptions,\n SignedUploadUrl,\n} from \"./types.js\"\n\nexport class DeploymentsClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n private basePath(projectUid: string, environmentUid: string): string {\n return `/projects/${projectUid}/environments/${environmentUid}/deployments`\n }\n\n list(\n projectUid: string,\n environmentUid: string,\n options?: ListDeploymentsOptions,\n ): AsyncIterable<LaunchDeployment> {\n return paginate<LaunchDeployment>(\n async (skip, limit) => {\n const params: Record<string, string> = {\n skip: String(skip),\n limit: String(limit),\n }\n const response = await this.http.get<unknown>(\n this.basePath(projectUid, environmentUid),\n params,\n )\n return extractList<LaunchDeployment>(response.data, \"deployments\")\n },\n { limit: options?.limit },\n )\n }\n\n async listAll(\n projectUid: string,\n environmentUid: string,\n options?: ListDeploymentsOptions,\n ): Promise<LaunchDeployment[]> {\n return collectAll(this.list(projectUid, environmentUid, options))\n }\n\n async get(\n projectUid: string,\n environmentUid: string,\n deploymentUid: string,\n ): Promise<LaunchDeployment> {\n const response = await this.http.get<unknown>(\n `${this.basePath(projectUid, environmentUid)}/${deploymentUid}`,\n )\n return extractItem<LaunchDeployment>(response.data)\n }\n\n async create(\n projectUid: string,\n environmentUid: string,\n data: CreateDeploymentData,\n ): Promise<LaunchDeployment> {\n const response = await this.http.post<unknown>(this.basePath(projectUid, environmentUid), data)\n return extractItem<LaunchDeployment>(response.data)\n }\n\n async getDeploymentLogs(\n projectUid: string,\n environmentUid: string,\n deploymentUid: string,\n options?: DeploymentLogOptions,\n ): Promise<DeploymentLog[]> {\n const params: Record<string, string> = {}\n if (options?.timestamp) params.timestamp = options.timestamp\n\n const response = await this.http.get<unknown>(\n `${this.basePath(projectUid, environmentUid)}/${deploymentUid}/logs/deployment-logs`,\n Object.keys(params).length > 0 ? params : undefined,\n )\n return extractList<DeploymentLog>(response.data, \"logs\").items\n }\n\n async getServerLogs(\n projectUid: string,\n environmentUid: string,\n deploymentUid: string,\n options?: ServerLogOptions,\n ): Promise<ServerLog[]> {\n const params: Record<string, string> = {}\n if (options?.startTime !== undefined) params.startTime = String(options.startTime)\n if (options?.endTime !== undefined) params.endTime = String(options.endTime)\n\n const response = await this.http.get<unknown>(\n `${this.basePath(projectUid, environmentUid)}/${deploymentUid}/logs/server-logs`,\n Object.keys(params).length > 0 ? params : undefined,\n )\n return extractList<ServerLog>(response.data, \"logs\").items\n }\n\n async getUploadUrl(projectUid: string, environmentUid: string): Promise<SignedUploadUrl> {\n const response = await this.http.get<unknown>(\n `${this.basePath(projectUid, environmentUid)}/upload/signed_url`,\n )\n return extractItem<SignedUploadUrl>(response.data)\n }\n\n async getDownloadUrl(\n projectUid: string,\n environmentUid: string,\n deploymentUid: string,\n ): Promise<string> {\n const response = await this.http.get<unknown>(\n `${this.basePath(projectUid, environmentUid)}/${deploymentUid}/download/signed_url`,\n )\n const item = extractItem<{ downloadUrl: string }>(response.data)\n return item.downloadUrl\n }\n}\n","import { collectAll, paginate } from \"../cma/pagination.js\"\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { extractItem, extractList } from \"./response.js\"\nimport type {\n CreateEnvironmentData,\n LaunchEnvironment,\n RevalidateCDNData,\n SignedUploadUrl,\n UpdateEnvironmentData,\n} from \"./types.js\"\n\nexport class EnvironmentsClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n list(projectUid: string): AsyncIterable<LaunchEnvironment> {\n return paginate<LaunchEnvironment>(async (skip, limit) => {\n const response = await this.http.get<unknown>(`/projects/${projectUid}/environments`, {\n skip: String(skip),\n limit: String(limit),\n })\n return extractList<LaunchEnvironment>(response.data, \"environments\")\n })\n }\n\n async listAll(projectUid: string): Promise<LaunchEnvironment[]> {\n return collectAll(this.list(projectUid))\n }\n\n async get(projectUid: string, envUid: string): Promise<LaunchEnvironment> {\n const response = await this.http.get<unknown>(`/projects/${projectUid}/environments/${envUid}`)\n return extractItem<LaunchEnvironment>(response.data)\n }\n\n async create(projectUid: string, data: CreateEnvironmentData): Promise<LaunchEnvironment> {\n const response = await this.http.post<unknown>(`/projects/${projectUid}/environments`, data)\n return extractItem<LaunchEnvironment>(response.data)\n }\n\n async update(\n projectUid: string,\n envUid: string,\n data: UpdateEnvironmentData,\n ): Promise<LaunchEnvironment> {\n const response = await this.http.put<unknown>(\n `/projects/${projectUid}/environments/${envUid}`,\n data,\n )\n return extractItem<LaunchEnvironment>(response.data)\n }\n\n async delete(projectUid: string, envUid: string): Promise<void> {\n await this.http.delete(`/projects/${projectUid}/environments/${envUid}`)\n }\n\n async revalidateCDNCache(\n projectUid: string,\n envUid: string,\n data: RevalidateCDNData,\n ): Promise<void> {\n await this.http.post(\n `/projects/${projectUid}/environments/${envUid}/revalidate-cdn-cache`,\n data,\n )\n }\n\n async getUploadUrl(projectUid: string): Promise<SignedUploadUrl> {\n const response = await this.http.get<unknown>(\n `/projects/${projectUid}/environments/upload/signed_url`,\n )\n return extractItem<SignedUploadUrl>(response.data)\n }\n}\n","import { collectAll, paginate } from \"../cma/pagination.js\"\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { extractItem, extractList } from \"./response.js\"\nimport type {\n CreateProjectData,\n LaunchProject,\n ListProjectsOptions,\n SignedUploadUrl,\n TransferGitRepositoryData,\n UpdateProjectData,\n} from \"./types.js\"\n\nexport class ProjectsClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n list(options?: ListProjectsOptions): AsyncIterable<LaunchProject> {\n return paginate<LaunchProject>(\n async (skip, limit) => {\n const response = await this.http.get<unknown>(\"/projects\", {\n skip: String(skip),\n limit: String(limit),\n })\n return extractList<LaunchProject>(response.data, \"projects\")\n },\n { limit: options?.limit },\n )\n }\n\n async listAll(options?: ListProjectsOptions): Promise<LaunchProject[]> {\n return collectAll(this.list(options))\n }\n\n async get(projectUid: string): Promise<LaunchProject> {\n const response = await this.http.get<unknown>(`/projects/${projectUid}`)\n return extractItem<LaunchProject>(response.data)\n }\n\n async create(data: CreateProjectData): Promise<LaunchProject> {\n const response = await this.http.post<unknown>(\"/projects\", data)\n return extractItem<LaunchProject>(response.data)\n }\n\n async update(projectUid: string, data: UpdateProjectData): Promise<LaunchProject> {\n const response = await this.http.put<unknown>(`/projects/${projectUid}`, data)\n return extractItem<LaunchProject>(response.data)\n }\n\n async delete(projectUid: string): Promise<void> {\n await this.http.delete(`/projects/${projectUid}`)\n }\n\n async transferGitRepository(projectUid: string, data: TransferGitRepositoryData): Promise<void> {\n await this.http.patch(`/projects/${projectUid}/git-repository`, data)\n }\n\n async getUploadUrl(): Promise<SignedUploadUrl> {\n const response = await this.http.get<unknown>(\"/projects/upload/signed_url\")\n return extractItem<SignedUploadUrl>(response.data)\n }\n}\n","import { ContentstackHttpClient } from \"../http/client.js\"\nimport type { HttpClientConfig } from \"../http/types.js\"\nimport type { ContentstackRegion } from \"../regions/resolver.js\"\nimport { resolveEndpoints } from \"../regions/resolver.js\"\nimport { DeploymentsClient } from \"./deployments.js\"\nimport { EnvironmentsClient } from \"./environments.js\"\nimport { ProjectsClient } from \"./projects.js\"\n\nexport interface LaunchClientConfig {\n region: ContentstackRegion\n organizationUid: string\n auth: { type: \"oauth\"; accessToken: string } | { type: \"authtoken\"; token: string }\n httpOptions?: Partial<HttpClientConfig>\n}\n\nexport interface LaunchClient {\n projects: ProjectsClient\n environments: EnvironmentsClient\n deployments: DeploymentsClient\n}\n\nexport function createLaunchClient(config: LaunchClientConfig): LaunchClient {\n const endpoints = resolveEndpoints(config.region)\n\n const headers: Record<string, string> = {\n organization_uid: config.organizationUid,\n }\n\n switch (config.auth.type) {\n case \"oauth\":\n headers.authorization = `Bearer ${config.auth.accessToken}`\n break\n case \"authtoken\":\n headers.authtoken = config.auth.token\n break\n }\n\n const http = new ContentstackHttpClient({\n ...config.httpOptions,\n baseUrl: config.httpOptions?.baseUrl ?? endpoints.launch,\n headers: {\n ...config.httpOptions?.headers,\n ...headers,\n },\n })\n\n return {\n projects: new ProjectsClient(http),\n environments: new EnvironmentsClient(http),\n deployments: new DeploymentsClient(http),\n }\n}\n","import { collectAll, paginate } from \"../cma/pagination.js\"\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport type {\n BrandKit,\n CreateBrandKitData,\n ListBrandKitsOptions,\n UpdateBrandKitData,\n} from \"./types.js\"\n\nexport class BrandKitsSubClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n list(options?: ListBrandKitsOptions): AsyncIterable<BrandKit> {\n return paginate<BrandKit>(\n async (skip, limit) => {\n const response = await this.http.get<{ data: BrandKit[]; count?: number }>(\n \"/v1/brand-kits\",\n {\n skip: String(skip),\n limit: String(limit),\n },\n )\n return { items: response.data.data ?? [], count: response.data.count }\n },\n { limit: options?.limit },\n )\n }\n\n async listAll(options?: ListBrandKitsOptions): Promise<BrandKit[]> {\n return collectAll(this.list(options))\n }\n\n async get(brandKitUid: string): Promise<BrandKit> {\n const response = await this.http.get<{ data: BrandKit }>(`/v1/brand-kits/${brandKitUid}`)\n return response.data.data\n }\n\n async create(data: CreateBrandKitData): Promise<BrandKit> {\n const response = await this.http.post<{ data: BrandKit }>(\"/v1/brand-kits\", data)\n return response.data.data\n }\n\n async update(brandKitUid: string, data: UpdateBrandKitData): Promise<BrandKit> {\n const response = await this.http.put<{ data: BrandKit }>(`/v1/brand-kits/${brandKitUid}`, data)\n return response.data.data\n }\n\n async delete(brandKitUid: string): Promise<void> {\n await this.http.delete(`/v1/brand-kits/${brandKitUid}`)\n }\n}\n","import { collectAll, paginate } from \"../cma/pagination.js\"\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport type {\n CreateVoiceProfileData,\n ListVoiceProfilesOptions,\n UpdateVoiceProfileData,\n VoiceProfile,\n} from \"./types.js\"\n\nexport class VoiceProfilesSubClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n list(brandKitUid: string, options?: ListVoiceProfilesOptions): AsyncIterable<VoiceProfile> {\n const scoped = this.http.withHeaders({ brand_kit_uid: brandKitUid })\n return paginate<VoiceProfile>(\n async (skip, limit) => {\n const response = await scoped.get<{ data: VoiceProfile[]; count?: number }>(\n `/v1/brand-kits/${brandKitUid}/voice-profiles`,\n { skip: String(skip), limit: String(limit) },\n )\n return { items: response.data.data ?? [], count: response.data.count }\n },\n { limit: options?.limit },\n )\n }\n\n async listAll(brandKitUid: string, options?: ListVoiceProfilesOptions): Promise<VoiceProfile[]> {\n return collectAll(this.list(brandKitUid, options))\n }\n\n async get(brandKitUid: string, voiceProfileUid: string): Promise<VoiceProfile> {\n const scoped = this.http.withHeaders({ brand_kit_uid: brandKitUid })\n const response = await scoped.get<{ data: VoiceProfile }>(\n `/v1/brand-kits/${brandKitUid}/voice-profiles/${voiceProfileUid}`,\n )\n return response.data.data\n }\n\n async create(brandKitUid: string, data: CreateVoiceProfileData): Promise<VoiceProfile> {\n const scoped = this.http.withHeaders({ brand_kit_uid: brandKitUid })\n const response = await scoped.post<{ data: VoiceProfile }>(\n `/v1/brand-kits/${brandKitUid}/voice-profiles`,\n data,\n )\n return response.data.data\n }\n\n async update(\n brandKitUid: string,\n voiceProfileUid: string,\n data: UpdateVoiceProfileData,\n ): Promise<VoiceProfile> {\n const scoped = this.http.withHeaders({ brand_kit_uid: brandKitUid })\n const response = await scoped.put<{ data: VoiceProfile }>(\n `/v1/brand-kits/${brandKitUid}/voice-profiles/${voiceProfileUid}`,\n data,\n )\n return response.data.data\n }\n\n async delete(brandKitUid: string, voiceProfileUid: string): Promise<void> {\n const scoped = this.http.withHeaders({ brand_kit_uid: brandKitUid })\n await scoped.delete(`/v1/brand-kits/${brandKitUid}/voice-profiles/${voiceProfileUid}`)\n }\n}\n","import { ContentstackHttpClient } from \"../http/client.js\"\nimport type { HttpClientConfig } from \"../http/types.js\"\nimport type { ContentstackRegion } from \"../regions/resolver.js\"\nimport { resolveEndpoints } from \"../regions/resolver.js\"\nimport { BrandKitsSubClient } from \"./brand-kits.js\"\nimport { VoiceProfilesSubClient } from \"./voice-profiles.js\"\n\nexport interface BrandKitClientConfig {\n region: ContentstackRegion\n organizationUid: string\n auth: { type: \"oauth\"; accessToken: string } | { type: \"authtoken\"; token: string }\n httpOptions?: Partial<HttpClientConfig>\n}\n\nexport interface BrandKitClient {\n brandKits: BrandKitsSubClient\n voiceProfiles: VoiceProfilesSubClient\n}\n\nexport function createBrandKitClient(config: BrandKitClientConfig): BrandKitClient {\n const endpoints = resolveEndpoints(config.region)\n\n const headers: Record<string, string> = {\n organization_uid: config.organizationUid,\n }\n\n switch (config.auth.type) {\n case \"oauth\":\n headers.authorization = `Bearer ${config.auth.accessToken}`\n break\n case \"authtoken\":\n headers.authtoken = config.auth.token\n break\n }\n\n const http = new ContentstackHttpClient({\n ...config.httpOptions,\n baseUrl: config.httpOptions?.baseUrl ?? endpoints.brandKit,\n headers: {\n ...config.httpOptions?.headers,\n ...headers,\n },\n })\n\n return {\n brandKits: new BrandKitsSubClient(http),\n voiceProfiles: new VoiceProfilesSubClient(http),\n }\n}\n","import type { ContentstackHttpClient } from \"../http/client.js\"\nimport type {\n IngestContentData,\n KnowledgeVaultItem,\n KnowledgeVaultUsage,\n UpdateContentData,\n} from \"./types.js\"\n\nexport class KnowledgeVaultItemsClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n async ingest(data: IngestContentData): Promise<KnowledgeVaultItem> {\n const response = await this.http.post<{ data: KnowledgeVaultItem }>(\"/v1/knowledge-vault\", data)\n return response.data.data\n }\n\n async update(itemUid: string, data: UpdateContentData): Promise<KnowledgeVaultItem> {\n const response = await this.http.put<{ data: KnowledgeVaultItem }>(\n `/v1/knowledge-vault/${itemUid}`,\n data,\n )\n return response.data.data\n }\n\n async delete(itemUid: string): Promise<void> {\n await this.http.delete(`/v1/knowledge-vault/${itemUid}`)\n }\n\n async getUsage(): Promise<KnowledgeVaultUsage> {\n const response = await this.http.get<{ data: KnowledgeVaultUsage }>(\"/v1/knowledge-vault/usage\")\n return response.data.data\n }\n}\n","import { ContentstackHttpClient } from \"../http/client.js\"\nimport type { HttpClientConfig } from \"../http/types.js\"\nimport type { ContentstackRegion } from \"../regions/resolver.js\"\nimport { resolveEndpoints } from \"../regions/resolver.js\"\nimport { KnowledgeVaultItemsClient } from \"./items.js\"\n\nexport interface KnowledgeVaultClientConfig {\n region: ContentstackRegion\n organizationUid: string\n brandKitUid: string\n auth: { type: \"oauth\"; accessToken: string } | { type: \"authtoken\"; token: string }\n httpOptions?: Partial<HttpClientConfig>\n}\n\nexport interface KnowledgeVaultClient {\n items: KnowledgeVaultItemsClient\n}\n\nexport function createKnowledgeVaultClient(\n config: KnowledgeVaultClientConfig,\n): KnowledgeVaultClient {\n const endpoints = resolveEndpoints(config.region)\n\n const headers: Record<string, string> = {\n organization_uid: config.organizationUid,\n brand_kit_uid: config.brandKitUid,\n }\n\n switch (config.auth.type) {\n case \"oauth\":\n headers.authorization = `Bearer ${config.auth.accessToken}`\n break\n case \"authtoken\":\n headers.authtoken = config.auth.token\n break\n }\n\n const http = new ContentstackHttpClient({\n ...config.httpOptions,\n baseUrl: config.httpOptions?.baseUrl ?? endpoints.brandKitAI,\n headers: {\n ...config.httpOptions?.headers,\n ...headers,\n },\n })\n\n return {\n items: new KnowledgeVaultItemsClient(http),\n }\n}\n","import { ContentstackHttpClient } from \"../http/client.js\"\nimport type { HttpClientConfig } from \"../http/types.js\"\nimport type { ContentstackRegion } from \"../regions/resolver.js\"\nimport { resolveEndpoints } from \"../regions/resolver.js\"\nimport type { GenerateContentData, GenerateContentResult } from \"./types.js\"\n\nexport interface GenerativeAIClientConfig {\n region: ContentstackRegion\n organizationUid: string\n brandKitUid: string\n auth: { type: \"oauth\"; accessToken: string } | { type: \"authtoken\"; token: string }\n httpOptions?: Partial<HttpClientConfig>\n}\n\nexport interface GenerativeAIClient {\n generate(data: GenerateContentData): Promise<GenerateContentResult>\n}\n\nexport function createGenerativeAIClient(config: GenerativeAIClientConfig): GenerativeAIClient {\n const endpoints = resolveEndpoints(config.region)\n\n const headers: Record<string, string> = {\n organization_uid: config.organizationUid,\n brand_kit_uid: config.brandKitUid,\n }\n\n switch (config.auth.type) {\n case \"oauth\":\n headers.authorization = `Bearer ${config.auth.accessToken}`\n break\n case \"authtoken\":\n headers.authtoken = config.auth.token\n break\n }\n\n const http = new ContentstackHttpClient({\n ...config.httpOptions,\n baseUrl: config.httpOptions?.baseUrl ?? endpoints.brandKitAI,\n headers: {\n ...config.httpOptions?.headers,\n ...headers,\n },\n })\n\n return {\n async generate(data: GenerateContentData): Promise<GenerateContentResult> {\n const body: Record<string, unknown> = { prompt: data.prompt }\n if (data.voiceProfileUid) {\n body.voice_profile_uid = data.voiceProfileUid\n }\n if (data.useKnowledgeVault !== undefined) {\n body.knowledge_vault = data.useKnowledgeVault\n }\n const response = await http.post<{ data: GenerateContentResult }>(\n \"/v1/generative-ai/generate\",\n body,\n )\n return response.data.data\n },\n }\n}\n"],"mappings":"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","names":["value","import_json_rte_serializer","import_json_rte_serializer","parent","EnvironmentsClient","EnvironmentsClient"]}
|