{"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/auth/management-session.ts","../src/cma/pagination.ts","../src/cma/assets.ts","../src/cma/base-client.ts","../src/cma/audit-log.ts","../src/cma/auth.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/launch/utils.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","../src/developer-hub/response.ts","../src/developer-hub/apps.ts","../src/developer-hub/authorizations.ts","../src/developer-hub/hosting.ts","../src/developer-hub/installations.ts","../src/developer-hub/oauth.ts","../src/developer-hub/requests.ts","../src/developer-hub/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\"\nexport * from \"./developer-hub/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    developerHub: hostsOnly\n      ? stripProtocol(upstream.developerHub ?? \"\")\n      : (upstream.developerHub ?? \"\"),\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  /** Developer Hub (Marketplace) API base URL */\n  developerHub: 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 * Sourced from the Developer Hub API (`/manifests/oauth/scopes` endpoint).\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  // ── Developer Hub (Apps) ────────────────────────────────────────────\n  | \"app.manifests:read\"\n  | \"app.manifest:read\"\n  | \"app.manifest:write\"\n  | \"app.hosting:read\"\n  | \"app.hosting:write\"\n  | \"app.installations:read\"\n  | \"app.installations.management:read\"\n  | \"app.installations.management:write\"\n  | \"app.authorizations:manage\"\n  | \"app.authorizations.management:write\"\n  | \"app.requests:write\"\n  | \"app.requests.management:write\"\n\n  // ── SCIM ────────────────────────────────────────────────────────────\n  | \"scim:manage\"\n\n  // ── User ────────────────────────────────────────────────────────────\n  | \"user.profile:read\"\n  | \"user:read\"\n  | \"user:write\"\n  | \"user.tfa:write\"\n  | \"user.assignments:read\"\n  | \"user.assignments:write\"\n  | \"user.notifications:read\"\n  | \"user.notifications:write\"\n\n  // ── Organization ────────────────────────────────────────────────────\n  | \"organizations:read\"\n  | \"organization:read\"\n  | \"organization.roles:read\"\n  | \"organization.share:read\"\n  | \"organization.share:write\"\n  | \"organization.ownership:write\"\n  | \"organization.settings:write\"\n  | \"organization.logs:read\"\n  | \"organization.usage:read\"\n  | \"organization.jobs:read\"\n  | \"organization.jobs:write\"\n\n  // ── Stack management ────────────────────────────────────────────────\n  | \"cm.stacks.management:read\"\n  | \"cm.stacks.management:write\"\n  | \"cm.stack.management:read\"\n  | \"cm.stack.management:write\"\n  | \"cm.stack.settings:read\"\n  | \"cm.stack.settings:write\"\n  | \"cm.stack:share\"\n  | \"cm.stack:unshare\"\n  | \"cm.stack.users:read\"\n  | \"cm.stack.users:write\"\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-types:import\"\n  | \"cm.content-types:export\"\n  | \"cm.content-type:read\"\n  | \"cm.content-type:write\"\n  | \"cm.content-type:copy\"\n\n  // ── Global fields ───────────────────────────────────────────────────\n  | \"cm.global-fields.management:read\"\n  | \"cm.global-fields.management:write\"\n  | \"cm.global-fields:import\"\n  | \"cm.global-fields:export\"\n\n  // ── Entries ──────────────────────────────────────────────────────────\n  | \"cm.entries.management:read\"\n  | \"cm.entries.management:write\"\n  | \"cm.entries:import\"\n  | \"cm.entries:export\"\n  | \"cm.entry:read\"\n  | \"cm.entry:write\"\n  | \"cm.entry:publish\"\n  | \"cm.entry:unpublish\"\n  | \"cm.entry.workflow:write\"\n\n  // ── Webhooks ────────────────────────────────────────────────────────\n  | \"cm.webhooks.management:read\"\n  | \"cm.webhooks.management:write\"\n  | \"cm.webhooks:import\"\n  | \"cm.webhooks:export\"\n  | \"cm.webhook:read\"\n  | \"cm.webhook:write\"\n\n  // ── Assets ──────────────────────────────────────────────────────────\n  | \"cm.assets.management:read\"\n  | \"cm.assets.management:write\"\n  | \"cm.assets.rt:read\"\n  | \"cm.assets.rt:write\"\n  | \"cm.assets:download\"\n  | \"cm.asset:read\"\n  | \"cm.asset:write\"\n  | \"cm.asset:publish\"\n  | \"cm.asset:unpublish\"\n\n  // ── Workflows ───────────────────────────────────────────────────────\n  | \"cm.workflows.management:read\"\n  | \"cm.workflows.management:write\"\n  | \"cm.workflows.publishing-rules:read\"\n  | \"cm.workflows.publishing-rules:write\"\n\n  // ── Environments ────────────────────────────────────────────────────\n  | \"cm.environments.management:read\"\n  | \"cm.environments.management:write\"\n\n  // ── Extensions ──────────────────────────────────────────────────────\n  | \"cm.extensions.management:read\"\n  | \"cm.extensions.management:write\"\n\n  // ── Languages ───────────────────────────────────────────────────────\n  | \"cm.languages.management:read\"\n  | \"cm.languages.management:write\"\n\n  // ── Labels ──────────────────────────────────────────────────────────\n  | \"cm.labels.management:read\"\n  | \"cm.labels.management:write\"\n\n  // ── Bulk operations ─────────────────────────────────────────────────\n  | \"cm.bulk-operations:publish\"\n  | \"cm.bulk-operations:unpublish\"\n  | \"cm.bulk-operations:add-to-release\"\n  | \"cm.bulk-operations:delete\"\n  | \"cm.bulk-operations:move-to-folder\"\n  | \"cm.bulk-operations:workflow\"\n\n  // ── Releases ────────────────────────────────────────────────────────\n  | \"cm.releases.management:read\"\n  | \"cm.releases.management:write\"\n  | \"cm.release:read\"\n  | \"cm.release:write\"\n  | \"cm.release:clone\"\n  | \"cm.release:deploy\"\n\n  // ── Roles ───────────────────────────────────────────────────────────\n  | \"cm.roles.management:read\"\n  | \"cm.roles.management:write\"\n\n  // ── Audit & publish queue ───────────────────────────────────────────\n  | \"cm.audit-logs:read\"\n  | \"cm.publish-queue.management:read\"\n  | \"cm.publish-queue.management:write\"\n\n  // ── Personalization ─────────────────────────────────────────────────\n  | \"personalize:read\"\n  | \"personalize:manage\"\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  // ── Branches ────────────────────────────────────────────────────────\n  | \"cm.branches.management:read\"\n  | \"cm.branches.management:write\"\n  | \"cm.branches:compare-merge\"\n  | \"cm.branch-aliases.management:read\"\n  | \"cm.branch-aliases.management:write\"\n\n  // ── Launch ──────────────────────────────────────────────────────────\n  | \"launch:manage\"\n  | \"launch.projects:read\"\n  | \"launch.projects:write\"\n  | \"launch.projects:delete\"\n  | \"launch.gitproviders:manage\"\n\n  // ── Automation Hub ──────────────────────────────────────────────────\n  | \"automationhub.projects.management:read\"\n  | \"automationhub.projects.management:write\"\n  | \"automationhub.automations:read\"\n  | \"automationhub.automations:write\"\n  | \"automationhub.executions:read\"\n  | \"automationhub.audit-logs:read\"\n  | \"automationhub.variables:read\"\n  | \"automationhub.variables:write\"\n  | \"automationhub.accounts:read\"\n\n  // ── Brand Kit ───────────────────────────────────────────────────────\n  | \"brand-kits:read\"\n  | \"brand-kits:manage\"\n\n  // ── Variants ────────────────────────────────────────────────────────\n  | \"cm.variant:read\"\n  | \"cm.variant:write\"\n\n  // ── Analytics & Audit ───────────────────────────────────────────────\n  | \"analytics:read\"\n  | \"auditlogs:read\"\n\n  // ── Teams ───────────────────────────────────────────────────────────\n  | \"teams:read\"\n  | \"teams:write\"\n\n/**\n * Human-readable descriptions for every Contentstack OAuth scope.\n *\n * Sourced from the Developer Hub API (`/manifests/oauth/scopes` endpoint).\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  // Developer Hub (Apps)\n  \"app.manifests:read\": \"View all manifests\",\n  \"app.manifest:read\": \"View manifest details\",\n  \"app.manifest:write\": \"Create, update, remove manifests\",\n  \"app.hosting:read\": \"View hosting\",\n  \"app.hosting:write\": \"Create, update, remove hosting\",\n  \"app.installations:read\": \"View all installations\",\n  \"app.installations.management:read\": \"View installation details\",\n  \"app.installations.management:write\": \"Create, update, remove installations\",\n  \"app.authorizations:manage\": \"Manage all authorizations\",\n  \"app.authorizations.management:write\": \"Revoke all authorizations\",\n  \"app.requests:write\": \"Create app request\",\n  \"app.requests.management:write\": \"Revoke app request\",\n\n  // SCIM\n  \"scim:manage\": \"Manage users and groups using SCIM\",\n\n  // User\n  \"user.profile:read\": \"View user profile\",\n  \"user:read\": \"View user details\",\n  \"user:write\": \"Update user details\",\n  \"user.tfa:write\": \"Verify, enable, disable and cancel user two-factor authentication\",\n  \"user.assignments:read\": \"View user assignments\",\n  \"user.assignments:write\": \"Update, remove user assignments\",\n  \"user.notifications:read\": \"View user notifications\",\n  \"user.notifications:write\": \"Update, remove user notifications\",\n\n  // Organization\n  \"organizations:read\": \"View details of organizations associated with the user\",\n  \"organization:read\": \"View details of an organization\",\n  \"organization.roles:read\": \"View organization level roles\",\n  \"organization.share:read\": \"View details of organization invitations shared with users\",\n  \"organization.share:write\": \"Update, remove organization invitation shares\",\n  \"organization.ownership:write\": \"Create, update of organization ownership transfer\",\n  \"organization.settings:write\": \"Update organization settings\",\n  \"organization.logs:read\": \"View organization logs\",\n  \"organization.usage:read\": \"View organization usage details\",\n  \"organization.jobs:read\": \"View organization job details\",\n  \"organization.jobs:write\": \"Remove, retry organization jobs\",\n\n  // Stack management\n  \"cm.stacks.management:read\": \"View all stacks\",\n  \"cm.stacks.management:write\": \"Create, update, remove stacks\",\n  \"cm.stack.management:read\": \"View a single stack details\",\n  \"cm.stack.management:write\": \"Update stack management properties\",\n  \"cm.stack.settings:read\": \"View stack settings details\",\n  \"cm.stack.settings:write\": \"Update stack settings\",\n  \"cm.stack:share\": \"Share stack invitation with users\",\n  \"cm.stack:unshare\": \"Unshare stack invitations\",\n  \"cm.stack.users:read\": \"View users associated with a stack\",\n  \"cm.stack.users:write\": \"Update user roles and user associations with a stack\",\n\n  // Tokens\n  \"cm.stack.delivery-tokens:read\": \"View delivery tokens associated with a stack\",\n  \"cm.stack.delivery-tokens:write\": \"Create, update, remove delivery tokens in a stack\",\n  \"cm.stack.management-tokens:read\": \"View management tokens associated with a stack\",\n  \"cm.stack.management-tokens:write\": \"Create, update, remove management tokens in a stack\",\n\n  // Content types\n  \"cm.content-types.management:read\": \"View all content types\",\n  \"cm.content-types.management:write\": \"Create, update, remove content types\",\n  \"cm.content-types:import\": \"Import content types\",\n  \"cm.content-types:export\": \"Export content types\",\n  \"cm.content-type:read\": \"View content type details\",\n  \"cm.content-type:write\": \"Update content type details\",\n  \"cm.content-type:copy\": \"Copy a content type\",\n\n  // Global fields\n  \"cm.global-fields.management:read\": \"View all global fields\",\n  \"cm.global-fields.management:write\": \"Create, update, remove global fields\",\n  \"cm.global-fields:import\": \"Import global fields\",\n  \"cm.global-fields:export\": \"Export global fields\",\n\n  // Entries\n  \"cm.entries.management:read\": \"View all entries\",\n  \"cm.entries.management:write\": \"Create, update, remove entries\",\n  \"cm.entries:import\": \"Import entries\",\n  \"cm.entries:export\": \"Export entries\",\n  \"cm.entry:read\": \"View details associated with an entry\",\n  \"cm.entry:write\": \"Update details associated with an entry\",\n  \"cm.entry:publish\": \"Publish an entry\",\n  \"cm.entry:unpublish\": \"Unpublish an entry\",\n  \"cm.entry.workflow:write\": \"Create a workflow for an entry\",\n\n  // Webhooks\n  \"cm.webhooks.management:read\": \"View all webhooks\",\n  \"cm.webhooks.management:write\": \"Create, update, remove webhooks\",\n  \"cm.webhooks:import\": \"Import webhooks\",\n  \"cm.webhooks:export\": \"Export webhooks\",\n  \"cm.webhook:read\": \"View webhook details\",\n  \"cm.webhook:write\": \"Update webhook details\",\n\n  // Assets\n  \"cm.assets.management:read\": \"View all assets\",\n  \"cm.assets.management:write\": \"Create, update, remove assets\",\n  \"cm.assets.rt:read\": \"View all RTE assets\",\n  \"cm.assets.rt:write\": \"Create, update, remove RTE assets\",\n  \"cm.assets:download\": \"Download assets\",\n  \"cm.asset:read\": \"View asset details\",\n  \"cm.asset:write\": \"Update asset details\",\n  \"cm.asset:publish\": \"Publish an asset\",\n  \"cm.asset:unpublish\": \"Unpublish an asset\",\n\n  // Workflows\n  \"cm.workflows.management:read\": \"View all workflows\",\n  \"cm.workflows.management:write\": \"Create, update, remove workflows\",\n  \"cm.workflows.publishing-rules:read\": \"View all workflow publishing rules\",\n  \"cm.workflows.publishing-rules:write\": \"Create, update, remove workflow publishing rules\",\n\n  // Environments\n  \"cm.environments.management:read\": \"View all environments\",\n  \"cm.environments.management:write\": \"Create, update, remove environments\",\n\n  // Extensions\n  \"cm.extensions.management:read\": \"View all extensions\",\n  \"cm.extensions.management:write\": \"Create, update, remove extensions\",\n\n  // Languages\n  \"cm.languages.management:read\": \"View all languages\",\n  \"cm.languages.management:write\": \"Create, update, remove languages\",\n\n  // Labels\n  \"cm.labels.management:read\": \"View all labels\",\n  \"cm.labels.management:write\": \"Create, update, remove labels\",\n\n  // Bulk operations\n  \"cm.bulk-operations:publish\": \"Publish bulk operations\",\n  \"cm.bulk-operations:unpublish\": \"Unpublish bulk operations\",\n  \"cm.bulk-operations:add-to-release\": \"Add to release bulk operations\",\n  \"cm.bulk-operations:delete\": \"Delete bulk operations\",\n  \"cm.bulk-operations:move-to-folder\": \"Move to folder bulk operations\",\n  \"cm.bulk-operations:workflow\": \"Workflow bulk operations\",\n\n  // Releases\n  \"cm.releases.management:read\": \"View all releases\",\n  \"cm.releases.management:write\": \"Create, update, 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:clone\": \"Clone a release\",\n  \"cm.release:deploy\": \"Deploy a release\",\n\n  // Roles\n  \"cm.roles.management:read\": \"View all roles\",\n  \"cm.roles.management:write\": \"Create, update, remove roles\",\n\n  // Audit & publish queue\n  \"cm.audit-logs:read\": \"View all audit logs\",\n  \"cm.publish-queue.management:read\": \"View all publish queues\",\n  \"cm.publish-queue.management:write\": \"Create, update, remove publish queues\",\n\n  // Personalization\n  \"personalize:read\": \"View all resources in a project\",\n  \"personalize:manage\": \"Create, update and delete resources in a project\",\n\n  // Taxonomies\n  \"cm.taxonomies.management:read\": \"View all taxonomies\",\n  \"cm.taxonomies.management:write\": \"Create, update, delete taxonomies\",\n  \"cm.taxonomy.terms:read\": \"View all terms of a taxonomy\",\n  \"cm.taxonomy.terms:write\": \"Create, update, move, delete term(s) of a taxonomy\",\n\n  // Branches\n  \"cm.branches.management:read\": \"View all branches\",\n  \"cm.branches.management:write\": \"Create, delete branches\",\n  \"cm.branches:compare-merge\": \"Compare, merge branches\",\n  \"cm.branch-aliases.management:read\": \"View all branch aliases\",\n  \"cm.branch-aliases.management:write\": \"Assign, delete branch aliases\",\n\n  // Launch\n  \"launch:manage\": \"Manage Contentstack Launch projects\",\n  \"launch.projects:read\": \"View all projects\",\n  \"launch.projects:write\": \"Create and update projects\",\n  \"launch.projects:delete\": \"Delete projects\",\n  \"launch.gitproviders:manage\": \"Manage External Git providers in Launch\",\n\n  // Automation Hub\n  \"automationhub.projects.management:read\": \"View all organization projects\",\n  \"automationhub.projects.management:write\": \"Create, update and remove projects\",\n  \"automationhub.automations:read\": \"View all automations in a project\",\n  \"automationhub.automations:write\": \"Update automation settings\",\n  \"automationhub.executions:read\": \"View all execution logs\",\n  \"automationhub.audit-logs:read\": \"View all audit logs\",\n  \"automationhub.variables:read\": \"View all project variables\",\n  \"automationhub.variables:write\": \"Create, update, remove variables\",\n  \"automationhub.accounts:read\": \"View all connected apps\",\n\n  // Brand Kit\n  \"brand-kits:read\": \"View all brand kits\",\n  \"brand-kits:manage\": \"Create, read, update, and delete brand kits\",\n\n  // Variants\n  \"cm.variant:read\": \"View all variant groups and its variants\",\n  \"cm.variant:write\": \"Create, update and remove variant groups and its variants\",\n\n  // Analytics & Audit\n  \"analytics:read\": \"View organization analytics\",\n  \"auditlogs:read\": \"View organization auditlog\",\n\n  // Teams\n  \"teams:read\": \"View all teams\",\n  \"teams:write\": \"Create, update and delete teams\",\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\n  /** Developer Hub: read and manage apps, installations, authorizations, and hosting. */\n  developerHub: [\n    \"user:read\",\n    \"app.manifests:read\",\n    \"app.manifest:read\",\n    \"app.manifest:write\",\n    \"app.hosting:read\",\n    \"app.hosting:write\",\n    \"app.installations:read\",\n    \"app.installations.management:read\",\n    \"app.installations.management:write\",\n    \"app.authorizations:manage\",\n    \"app.authorizations.management:write\",\n    \"app.requests:write\",\n    \"app.requests.management:write\",\n  ] as const,\n\n  /** Automation Hub: manage automations and variables. */\n  automationHub: [\n    \"user:read\",\n    \"automationhub.projects.management:read\",\n    \"automationhub.projects.management:write\",\n    \"automationhub.automations:read\",\n    \"automationhub.automations:write\",\n    \"automationhub.executions:read\",\n    \"automationhub.variables:read\",\n    \"automationhub.variables:write\",\n    \"automationhub.accounts:read\",\n  ] as const,\n} satisfies Record<string, readonly ContentstackOAuthScope[]>\n","import {\n  ContentstackAuthError,\n  ContentstackConfigError,\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    resolveHeaders?: HttpClientConfig[\"resolveHeaders\"]\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      resolveHeaders: config.resolveHeaders,\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    const resolvedHeaders = await this.config.resolveHeaders?.()\n\n    if (resolvedHeaders) {\n      for (const [key, value] of Object.entries(resolvedHeaders)) {\n        headers.set(key, value)\n      }\n    }\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 ContentstackConfigError) {\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 { AuthHttpOptions, 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  httpOptions?: AuthHttpOptions\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 | undefined) ?? \"\",\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  httpOptions?: AuthHttpOptions,\n): Promise<OAuthTokens> {\n  const client = new ContentstackHttpClient({ ...httpOptions, 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(\n    endpoints.app,\n    body,\n    \"Failed to exchange authorization code\",\n    options?.httpOptions,\n  )\n}\n\n/**\n * Refresh an expired access token using a refresh token.\n */\nexport async function refreshToken(\n  config: OAuthConfig,\n  token: string,\n  options?: { httpOptions?: AuthHttpOptions },\n): 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\", options?.httpOptions)\n}\n\nexport interface AppTokenCredentials {\n  clientId: string\n  clientSecret: string\n}\n\n/**\n * Obtain an app token (client credentials grant) for machine-to-machine integrations.\n * Requires the app's `app_token_config` to be enabled with the needed scopes.\n */\nexport async function exchangeAppToken(\n  region: ContentstackRegion,\n  credentials: AppTokenCredentials,\n  options?: { httpOptions?: AuthHttpOptions },\n): Promise<OAuthTokens> {\n  const endpoints = resolveEndpoints(region)\n\n  const body = new URLSearchParams({\n    grant_type: \"client_credentials\",\n    client_id: credentials.clientId,\n    client_secret: credentials.clientSecret,\n  })\n\n  return makeTokenRequest(endpoints.app, body, \"Failed to obtain app token\", options?.httpOptions)\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  options?: { httpOptions?: AuthHttpOptions },\n): Promise<ContentstackUser> {\n  const endpoints = resolveEndpoints(region)\n  const client = new ContentstackHttpClient({\n    ...options?.httpOptions,\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","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 type {\n  AuthHttpOptions,\n  ContentstackCredentials,\n  ContentstackCredentialsSession,\n  ContentstackUser,\n} from \"./types.js\"\n\ntype SessionAuth = { type: \"oauth\"; accessToken: string } | { type: \"authtoken\"; token: string }\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\nfunction createCMAHttpClient(\n  region: ContentstackRegion,\n  options?: AuthHttpOptions,\n  headers?: Record<string, string>,\n): ContentstackHttpClient {\n  const endpoints = resolveEndpoints(region)\n\n  return new ContentstackHttpClient({\n    ...options,\n    baseUrl: `${endpoints.cma}/v3`,\n    headers,\n  })\n}\n\nfunction resolveTfaToken(credentials: ContentstackCredentials): string | undefined {\n  return credentials.otp ?? credentials.tfaToken\n}\n\nexport async function loginWithCredentials(\n  region: ContentstackRegion,\n  credentials: ContentstackCredentials,\n  options?: { httpOptions?: AuthHttpOptions },\n): Promise<ContentstackCredentialsSession> {\n  if (!credentials.email) {\n    throw new ContentstackConfigError(\"email is required for credentials login\")\n  }\n\n  if (!credentials.password) {\n    throw new ContentstackConfigError(\"password is required for credentials login\")\n  }\n\n  const client = createCMAHttpClient(region, options?.httpOptions)\n  const tfaToken = resolveTfaToken(credentials)\n\n  try {\n    const { data } = await client.post<{\n      notice?: string\n      user?: Record<string, unknown> & { authtoken?: string }\n    }>(\"/user-session\", {\n      user: {\n        email: credentials.email,\n        password: credentials.password,\n        ...(tfaToken ? { tfa_token: tfaToken } : {}),\n      },\n    })\n\n    const authtoken = data.user?.authtoken\n    if (!data.user || !authtoken) {\n      throw new ContentstackAuthError(\"Credentials login did not return an authtoken\", {\n        requestPath: \"/user-session\",\n      })\n    }\n\n    return {\n      authtoken,\n      user: mapUser(data.user),\n      notice: data.notice,\n    }\n  } catch (error) {\n    if (error instanceof ContentstackError) {\n      throw error\n    }\n\n    throw new ContentstackAuthError(\"Failed to log in with Contentstack credentials\", {\n      requestPath: \"/user-session\",\n      cause: error instanceof Error ? error : undefined,\n    })\n  }\n}\n\nexport async function logoutUserSession(\n  region: ContentstackRegion,\n  authtoken: string,\n  options?: { httpOptions?: AuthHttpOptions },\n): Promise<void> {\n  if (!authtoken) {\n    throw new ContentstackConfigError(\"authtoken is required to log out a user session\")\n  }\n\n  const client = createCMAHttpClient(region, options?.httpOptions, { authtoken })\n  await client.delete(\"/user-session\")\n}\n\nexport async function getCurrentUser(\n  region: ContentstackRegion,\n  auth: SessionAuth,\n  options?: { httpOptions?: AuthHttpOptions },\n): Promise<ContentstackUser> {\n  const headers: Record<string, string> = {}\n\n  if (auth.type === \"oauth\") {\n    headers.Authorization = `Bearer ${auth.accessToken}`\n  } else {\n    headers.authtoken = auth.token\n  }\n\n  const client = createCMAHttpClient(region, options?.httpOptions, headers)\n\n  try {\n    const { data } = await client.get<{ user: Record<string, unknown> }>(\"/user\")\n    return mapUser(data.user)\n  } catch (error) {\n    if (error instanceof ContentstackError) {\n      throw new ContentstackAuthError(error.message || \"Failed to fetch user profile\", {\n        status: error.status,\n        requestPath: \"/user\",\n        cause: error,\n      })\n    }\n\n    throw new ContentstackAuthError(\"Failed to fetch user profile\", {\n      requestPath: \"/user\",\n      cause: error instanceof Error ? error : undefined,\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","import { exchangeCode, loginWithCredentials, refreshToken } from \"../auth/index.js\"\nimport type {\n  AuthHttpOptions,\n  ContentstackCredentials,\n  OAuthConfig,\n  OAuthTokens,\n} from \"../auth/types.js\"\nimport { ContentstackConfigError } from \"../http/errors.js\"\nimport type { HttpHeadersResolver } from \"../http/types.js\"\nimport type { ContentstackRegion } from \"../regions/resolver.js\"\n\nconst DEFAULT_OAUTH_REFRESH_THRESHOLD_MS = 60_000\n\nexport interface CMAClientManagementTokenAuth {\n  type: \"management-token\"\n  token: string\n}\n\nexport interface CMAClientOAuthAuth {\n  type: \"oauth\"\n  accessToken?: string\n  getAccessToken?: () => string | Promise<string>\n}\n\nexport interface CMAClientAuthtokenAuth {\n  type: \"authtoken\"\n  token: string\n}\n\nexport interface CMAClientCredentialsAuth extends ContentstackCredentials {\n  type: \"credentials\"\n}\n\nexport interface CMAClientOAuthFlowAuth {\n  type: \"oauth-flow\"\n  config: OAuthConfig\n  tokens?: OAuthTokens\n  code?: string\n  codeVerifier?: string\n  obtainedAt?: number\n  refreshThresholdMs?: number\n  onTokens?: (tokens: OAuthTokens & { obtainedAt: number }) => void | Promise<void>\n}\n\nexport type CMAClientAuth =\n  | CMAClientManagementTokenAuth\n  | CMAClientOAuthAuth\n  | CMAClientAuthtokenAuth\n  | CMAClientCredentialsAuth\n  | CMAClientOAuthFlowAuth\n\ninterface StoredOAuthTokens extends OAuthTokens {\n  obtainedAt: number\n}\n\nfunction getStoredTokens(auth: CMAClientOAuthFlowAuth): StoredOAuthTokens | undefined {\n  if (!auth.tokens) {\n    return undefined\n  }\n\n  return {\n    ...auth.tokens,\n    obtainedAt: auth.obtainedAt ?? Date.now(),\n  }\n}\n\nfunction isTokenExpired(tokens: StoredOAuthTokens, refreshThresholdMs: number): boolean {\n  return Date.now() >= tokens.obtainedAt + tokens.expiresIn * 1000 - refreshThresholdMs\n}\n\nexport function createCMAAuthResolver(\n  region: ContentstackRegion,\n  auth: CMAClientAuth,\n  httpOptions?: AuthHttpOptions,\n): HttpHeadersResolver {\n  switch (auth.type) {\n    case \"management-token\":\n      return () => ({ authorization: auth.token })\n    case \"authtoken\":\n      return () => ({ authtoken: auth.token })\n    case \"oauth\":\n      return async () => {\n        const accessToken = auth.accessToken ?? (await auth.getAccessToken?.())\n        if (!accessToken) {\n          throw new ContentstackConfigError(\"OAuth auth requires accessToken or getAccessToken()\")\n        }\n\n        return { authorization: `Bearer ${accessToken}` }\n      }\n    case \"credentials\": {\n      let authtoken: string | undefined\n      let loginPromise: Promise<string> | undefined\n\n      return async () => {\n        if (authtoken) {\n          return { authtoken }\n        }\n\n        if (!loginPromise) {\n          loginPromise = loginWithCredentials(\n            region,\n            {\n              email: auth.email,\n              password: auth.password,\n              otp: auth.otp,\n              tfaToken: auth.tfaToken,\n            },\n            { httpOptions },\n          )\n            .then((session) => {\n              authtoken = session.authtoken\n              return authtoken\n            })\n            .finally(() => {\n              loginPromise = undefined\n            })\n        }\n\n        return { authtoken: await loginPromise }\n      }\n    }\n    case \"oauth-flow\": {\n      let currentTokens = getStoredTokens(auth)\n      let tokenPromise: Promise<StoredOAuthTokens> | undefined\n      const refreshThresholdMs = auth.refreshThresholdMs ?? DEFAULT_OAUTH_REFRESH_THRESHOLD_MS\n\n      const persistTokens = async (tokens: OAuthTokens): Promise<StoredOAuthTokens> => {\n        currentTokens = {\n          ...tokens,\n          obtainedAt: Date.now(),\n        }\n        await auth.onTokens?.(currentTokens)\n        return currentTokens\n      }\n\n      const ensureTokens = async (): Promise<StoredOAuthTokens> => {\n        if (currentTokens && !isTokenExpired(currentTokens, refreshThresholdMs)) {\n          return currentTokens\n        }\n\n        if (!tokenPromise) {\n          tokenPromise = (async () => {\n            if (!currentTokens) {\n              if (!auth.code) {\n                throw new ContentstackConfigError(\n                  \"OAuth flow auth requires tokens or an authorization code\",\n                )\n              }\n\n              return persistTokens(\n                await exchangeCode(auth.config, auth.code, {\n                  codeVerifier: auth.codeVerifier,\n                  httpOptions,\n                }),\n              )\n            }\n\n            return persistTokens(\n              await refreshToken(auth.config, currentTokens.refreshToken, {\n                httpOptions,\n              }),\n            )\n          })().finally(() => {\n            tokenPromise = undefined\n          })\n        }\n\n        return tokenPromise\n      }\n\n      return async () => {\n        const tokens = await ensureTokens()\n        return { authorization: `Bearer ${tokens.accessToken}` }\n      }\n    }\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 { createCMAAuthResolver } from \"./auth.js\"\nimport type { CMAClientAuth } from \"./auth.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: CMAClientAuth\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  if (config.branch) {\n    headers.branch = config.branch\n  }\n\n  const authResolver = createCMAAuthResolver(config.region, config.auth, config.httpOptions)\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    resolveHeaders: async () => {\n      const extraHeaders = await config.httpOptions?.resolveHeaders?.()\n      const authHeaders = await authResolver()\n      return {\n        ...extraHeaders,\n        ...authHeaders,\n      }\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, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\\\"/g, \"&quot;\")\n    .replace(/'/g, \"&#39;\")\n}\n\nexport function decodeHTML(value: string): string {\n  return value\n    .replace(/&nbsp;/g, \" \")\n    .replace(/&quot;/g, '\"')\n    .replace(/&#39;/g, \"'\")\n    .replace(/&lt;/g, \"<\")\n    .replace(/&gt;/g, \">\")\n    .replace(/&amp;/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, \"![$1]($2)\")\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  /**\n   * Returns the most recently created deployment for an environment.\n   * Prefer this over `environment.latestDeployment` when polling deployment status.\n   */\n  async getLatest(\n    projectUid: string,\n    environmentUid: string,\n  ): Promise<LaunchDeployment | undefined> {\n    const deployments = await this.listAll(projectUid, environmentUid)\n    if (deployments.length === 0) return undefined\n\n    return [...deployments].sort((a, b) => b.createdAt.localeCompare(a.createdAt))[0]\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 { ContentstackConfigError } from \"../http/errors.js\"\nimport { extractItem, extractList } from \"./response.js\"\nimport type {\n  CreateEnvironmentData,\n  LaunchEnvironment,\n  RevalidateCDNData,\n  SignedUploadUrl,\n  UpdateEnvironmentData,\n  WaitForEnvironmentOptions,\n} from \"./types.js\"\n\nconst DEFAULT_WAIT_RETRIES = 6\nconst DEFAULT_WAIT_INTERVAL_MS = 2000\n\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))\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  /**\n   * Poll until the first environment appears. Launch provisions environments asynchronously\n   * after `projects.create`, so an immediate `listAll` may return an empty array.\n   */\n  async waitForFirst(\n    projectUid: string,\n    options?: WaitForEnvironmentOptions,\n  ): Promise<LaunchEnvironment> {\n    const retries = options?.retries ?? DEFAULT_WAIT_RETRIES\n    const intervalMs = options?.intervalMs ?? DEFAULT_WAIT_INTERVAL_MS\n\n    for (let attempt = 0; attempt < retries; attempt++) {\n      if (attempt > 0) await sleep(intervalMs)\n      const environments = await this.listAll(projectUid)\n      const first = environments[0]\n      if (first) return first\n    }\n\n    throw new ContentstackConfigError(\n      `No environment found for project ${projectUid} after ${retries} attempts`,\n    )\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 type { LaunchDomain, LaunchEnvironment } from \"./types.js\"\n\n/** Returns the hostname from a Launch domain entry (handles both object and legacy string shapes). */\nexport function getDomainHost(domain: LaunchDomain | string | undefined): string | undefined {\n  if (!domain) return undefined\n  if (typeof domain === \"string\") return domain\n  return domain.url\n}\n\n/** Returns `https://{hostname}` for the environment's primary domain, if assigned. */\nexport function getEnvironmentUrl(environment: LaunchEnvironment): string | undefined {\n  const host = getDomainHost(environment.domains?.[0])\n  return host ? `https://${host}` : undefined\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","/**\n * Developer Hub API response helpers.\n *\n * The Developer Hub API returns responses in varying formats:\n *   - `{ data: T }` for single items\n *   - `{ data: T[] }` for lists with optional `count`\n *   - Direct object for some endpoints\n *\n * These helpers normalise the response into shapes the paginator expects.\n */\n\n/**\n * Extract a list from a Developer Hub API response.\n *\n * Handles:\n * - `{ data: T[], count? }` — standard list format\n * - Plain arrays `T[]`\n * - `{ [key]: T[], count? }` — keyed list format\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    // Keyed format: { [key]: [...], count? }\n    if (key && key in obj && Array.isArray(obj[key])) {\n      return { items: obj[key] as T[], count: obj.count as number | undefined }\n    }\n\n    // Standard format: { data: [...], count? }\n    if (\"data\" in obj && Array.isArray(obj.data)) {\n      return { items: obj.data as T[], count: obj.count as number | undefined }\n    }\n  }\n\n  return { items: [] }\n}\n\n/** Extract a single item from a response that may be `{ data: T }` or a plain object. */\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  AppInstallation,\n  AuthorizeAppData,\n  CreateAppData,\n  DeveloperHubApp,\n  InstallAppData,\n  ListAppInstallationsOptions,\n  ListAppsOptions,\n  ReinstallAppData,\n  UpdateAppData,\n} from \"./types.js\"\n\nexport class AppsClient {\n  constructor(private readonly http: ContentstackHttpClient) {}\n\n  list(options?: ListAppsOptions): AsyncIterable<DeveloperHubApp> {\n    return paginate<DeveloperHubApp>(\n      async (skip, limit) => {\n        const params: Record<string, string> = {\n          skip: String(skip),\n          limit: String(limit),\n        }\n        if (options?.sort) params.sort = options.sort\n        if (options?.order) params.order = options.order\n        if (options?.search) params.search = options.search\n        if (options?.target_type) params.target_type = options.target_type\n        if (options?.include_update_details) params.include_update_details = \"true\"\n\n        const response = await this.http.get<unknown>(\"/manifests\", params)\n        return extractList<DeveloperHubApp>(response.data, \"data\")\n      },\n      { limit: options?.limit },\n    )\n  }\n\n  async listAll(options?: ListAppsOptions): Promise<DeveloperHubApp[]> {\n    return collectAll(this.list(options))\n  }\n\n  async search(\n    term: string,\n    options?: Omit<ListAppsOptions, \"search\">,\n  ): Promise<DeveloperHubApp[]> {\n    const params: Record<string, string> = { term }\n    if (options?.limit) params.limit = String(options.limit)\n    if (options?.skip) params.skip = String(options.skip)\n    if (options?.sort) params.sort = options.sort\n    if (options?.order) params.order = options.order\n    if (options?.target_type) params.target_type = options.target_type\n\n    const response = await this.http.get<unknown>(\"/manifests\", params)\n    return extractList<DeveloperHubApp>(response.data, \"data\").items\n  }\n\n  async get(appUid: string): Promise<DeveloperHubApp> {\n    const response = await this.http.get<unknown>(`/manifests/${appUid}`)\n    return extractItem<DeveloperHubApp>(response.data)\n  }\n\n  async create(data: CreateAppData): Promise<DeveloperHubApp> {\n    const response = await this.http.post<unknown>(\"/manifests\", data)\n    return extractItem<DeveloperHubApp>(response.data)\n  }\n\n  async update(appUid: string, data: UpdateAppData): Promise<DeveloperHubApp> {\n    const response = await this.http.put<unknown>(`/manifests/${appUid}`, data)\n    return extractItem<DeveloperHubApp>(response.data)\n  }\n\n  async delete(appUid: string): Promise<void> {\n    await this.http.delete(`/manifests/${appUid}`)\n  }\n\n  async install(appUid: string, data: InstallAppData): Promise<AppInstallation> {\n    const response = await this.http.post<unknown>(`/manifests/${appUid}/install`, data)\n    return extractItem<AppInstallation>(response.data)\n  }\n\n  async reinstall(appUid: string, data: ReinstallAppData): Promise<AppInstallation> {\n    const response = await this.http.put<unknown>(`/manifests/${appUid}/reinstall`, data)\n    return extractItem<AppInstallation>(response.data)\n  }\n\n  async authorize(appUid: string, data: AuthorizeAppData): Promise<{ redirect_uri: string }> {\n    const response = await this.http.post<unknown>(`/manifests/${appUid}/authorize`, data)\n    return extractItem<{ redirect_uri: string }>(response.data)\n  }\n\n  async listAuthorized(): Promise<DeveloperHubApp[]> {\n    const response = await this.http.get<unknown>(\"/authorized-apps\")\n    return extractList<DeveloperHubApp>(response.data, \"data\").items\n  }\n\n  listInstallations(\n    appUid: string,\n    options?: ListAppInstallationsOptions,\n  ): AsyncIterable<AppInstallation> {\n    return paginate<AppInstallation>(\n      async (skip, limit) => {\n        const response = await this.http.get<unknown>(`/manifests/${appUid}/installations`, {\n          skip: String(skip),\n          limit: String(limit),\n        })\n        return extractList<AppInstallation>(response.data, \"data\")\n      },\n      { limit: options?.limit },\n    )\n  }\n\n  async listInstallationsAll(\n    appUid: string,\n    options?: ListAppInstallationsOptions,\n  ): Promise<AppInstallation[]> {\n    return collectAll(this.listInstallations(appUid, options))\n  }\n\n  async listRequests(appUid: string): Promise<unknown[]> {\n    const response = await this.http.get<unknown>(`/manifests/${appUid}/requests`)\n    return extractList<unknown>(response.data, \"data\").items\n  }\n}\n","import type { ContentstackHttpClient } from \"../http/client.js\"\nimport { extractList } from \"./response.js\"\nimport type { AppAuthorization, ListAuthorizationsOptions } from \"./types.js\"\n\nexport class AuthorizationsClient {\n  constructor(private readonly http: ContentstackHttpClient) {}\n\n  async list(appUid: string, options?: ListAuthorizationsOptions): Promise<AppAuthorization[]> {\n    const params: Record<string, string> = {}\n    if (options?.limit) params.limit = String(options.limit)\n    if (options?.skip) params.skip = String(options.skip)\n\n    const response = await this.http.get<unknown>(`/manifests/${appUid}/authorizations`, params)\n    return extractList<AppAuthorization>(response.data, \"data\").items\n  }\n\n  async revokeAll(appUid: string): Promise<void> {\n    await this.http.delete(`/manifests/${appUid}/authorizations`)\n  }\n\n  async revoke(appUid: string, authorizationUid: string): Promise<void> {\n    await this.http.delete(`/manifests/${appUid}/authorizations/${authorizationUid}`)\n  }\n}\n","import { collectAll, paginate } from \"../cma/pagination.js\"\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { ContentstackConfigError } from \"../http/errors.js\"\nimport type { AppsClient } from \"./apps.js\"\nimport { extractItem, extractList } from \"./response.js\"\nimport type {\n  DeveloperHubApp,\n  DeveloperHubCreateDeploymentData,\n  DeveloperHubListDeploymentsOptions,\n  DisconnectHostingData,\n  HostingDeployment,\n  HostingDeploymentLog,\n  HostingStatus,\n  SetExternalHostingData,\n} from \"./types.js\"\n\nexport class HostingClient {\n  constructor(\n    private readonly http: ContentstackHttpClient,\n    private readonly apps?: AppsClient,\n  ) {}\n\n  private hostingPath(appUid: string): string {\n    return `/manifests/${appUid}/hosting`\n  }\n\n  private deploymentsPath(appUid: string): string {\n    return `${this.hostingPath(appUid)}/deployments`\n  }\n\n  // ── Hosting status ─────────────────────────────────────\n\n  async getStatus(appUid: string): Promise<HostingStatus> {\n    const response = await this.http.get<unknown>(this.hostingPath(appUid))\n    return extractItem<HostingStatus>(response.data)\n  }\n\n  async enable(appUid: string): Promise<void> {\n    await this.http.patch(`${this.hostingPath(appUid)}/enable`, {})\n  }\n\n  async disable(appUid: string): Promise<void> {\n    await this.http.patch(`${this.hostingPath(appUid)}/disable`, {})\n  }\n\n  async disconnect(appUid: string, data?: DisconnectHostingData): Promise<void> {\n    await this.http.patch(`${this.hostingPath(appUid)}/disconnect`, data ?? {})\n  }\n\n  /**\n   * Set custom/external hosting (\"App URL\" in Developer Hub). Updates the manifest's\n   * `hosting.deployment_url` field — distinct from Launch-backed hosting (`enable`, etc.).\n   */\n  async setExternal(appUid: string, data: SetExternalHostingData): Promise<DeveloperHubApp> {\n    if (!this.apps) {\n      throw new ContentstackConfigError(\"HostingClient requires AppsClient for setExternal()\")\n    }\n\n    return this.apps.update(appUid, {\n      hosting: {\n        provider: data.provider ?? \"external\",\n        deployment_url: data.deployment_url,\n      },\n    })\n  }\n\n  async createUploadUrl(appUid: string): Promise<{ upload_uid: string; upload_url: string }> {\n    const response = await this.http.post<unknown>(\n      `${this.hostingPath(appUid)}/signedUploadUrl`,\n      {},\n    )\n    return extractItem<{ upload_uid: string; upload_url: string }>(response.data)\n  }\n\n  async getLatestLiveDeployment(appUid: string): Promise<HostingDeployment> {\n    const response = await this.http.get<unknown>(\n      `${this.hostingPath(appUid)}/latestLiveDeployment`,\n    )\n    return extractItem<HostingDeployment>(response.data)\n  }\n\n  // ── Deployments ────────────────────────────────────────\n\n  listDeployments(\n    appUid: string,\n    options?: DeveloperHubListDeploymentsOptions,\n  ): AsyncIterable<HostingDeployment> {\n    return paginate<HostingDeployment>(\n      async (skip, limit) => {\n        const response = await this.http.get<unknown>(this.deploymentsPath(appUid), {\n          skip: String(skip),\n          limit: String(limit),\n        })\n        return extractList<HostingDeployment>(response.data, \"data\")\n      },\n      { limit: options?.limit },\n    )\n  }\n\n  async listDeploymentsAll(\n    appUid: string,\n    options?: DeveloperHubListDeploymentsOptions,\n  ): Promise<HostingDeployment[]> {\n    return collectAll(this.listDeployments(appUid, options))\n  }\n\n  async getDeployment(appUid: string, deploymentUid: string): Promise<HostingDeployment> {\n    const response = await this.http.get<unknown>(\n      `${this.deploymentsPath(appUid)}/${deploymentUid}`,\n    )\n    return extractItem<HostingDeployment>(response.data)\n  }\n\n  async createDeployment(\n    appUid: string,\n    data: DeveloperHubCreateDeploymentData,\n  ): Promise<HostingDeployment> {\n    const response = await this.http.post<unknown>(this.deploymentsPath(appUid), data)\n    return extractItem<HostingDeployment>(response.data)\n  }\n\n  async getDeploymentLogs(appUid: string, deploymentUid: string): Promise<HostingDeploymentLog[]> {\n    const response = await this.http.get<unknown>(\n      `${this.deploymentsPath(appUid)}/${deploymentUid}/logs`,\n    )\n    return extractList<HostingDeploymentLog>(response.data, \"data\").items\n  }\n\n  async getDeploymentDownloadUrl(\n    appUid: string,\n    deploymentUid: string,\n  ): Promise<{ download_url: string }> {\n    const response = await this.http.post<unknown>(\n      `${this.deploymentsPath(appUid)}/${deploymentUid}/signedDownloadUrl`,\n      {},\n    )\n    return extractItem<{ download_url: string }>(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 { AppInstallation, ListInstallationsOptions, WebhookExecution } from \"./types.js\"\n\nexport class InstallationsClient {\n  constructor(private readonly http: ContentstackHttpClient) {}\n\n  // ── CRUD ───────────────────────────────────────────────\n\n  list(options?: ListInstallationsOptions): AsyncIterable<AppInstallation> {\n    return paginate<AppInstallation>(\n      async (skip, limit) => {\n        const params: Record<string, string> = {\n          skip: String(skip),\n          limit: String(limit),\n        }\n        if (options?.app_uids) params.app_uids = options.app_uids.join(\",\")\n        if (options?.installation_uids)\n          params.installation_uids = options.installation_uids.join(\",\")\n        if (options?.target_uids) params.target_uids = options.target_uids.join(\",\")\n\n        const response = await this.http.get<unknown>(\"/installations\", params)\n        return extractList<AppInstallation>(response.data, \"data\")\n      },\n      { limit: options?.limit },\n    )\n  }\n\n  async listAll(options?: ListInstallationsOptions): Promise<AppInstallation[]> {\n    return collectAll(this.list(options))\n  }\n\n  async get(installationUid: string): Promise<AppInstallation> {\n    const response = await this.http.get<unknown>(`/installations/${installationUid}`)\n    return extractItem<AppInstallation>(response.data)\n  }\n\n  async update(installationUid: string, data: Partial<AppInstallation>): Promise<AppInstallation> {\n    const response = await this.http.put<unknown>(`/installations/${installationUid}`, data)\n    return extractItem<AppInstallation>(response.data)\n  }\n\n  async delete(installationUid: string): Promise<void> {\n    await this.http.delete(`/installations/${installationUid}`)\n  }\n\n  // ── Configuration ──────────────────────────────────────\n\n  async getConfiguration(installationUid: string): Promise<Record<string, unknown>> {\n    const response = await this.http.get<unknown>(`/installations/${installationUid}/configuration`)\n    return extractItem<Record<string, unknown>>(response.data)\n  }\n\n  async setConfiguration(\n    installationUid: string,\n    data: Record<string, unknown>,\n  ): Promise<Record<string, unknown>> {\n    const response = await this.http.put<unknown>(\n      `/installations/${installationUid}/configuration`,\n      data,\n    )\n    return extractItem<Record<string, unknown>>(response.data)\n  }\n\n  async getServerConfiguration(installationUid: string): Promise<Record<string, unknown>> {\n    const response = await this.http.get<unknown>(\n      `/installations/${installationUid}/server-configuration`,\n    )\n    return extractItem<Record<string, unknown>>(response.data)\n  }\n\n  async setServerConfiguration(\n    installationUid: string,\n    data: Record<string, unknown>,\n  ): Promise<Record<string, unknown>> {\n    const response = await this.http.put<unknown>(\n      `/installations/${installationUid}/server-configuration`,\n      data,\n    )\n    return extractItem<Record<string, unknown>>(response.data)\n  }\n\n  async getInstallationData(installationUid: string): Promise<Record<string, unknown>> {\n    const response = await this.http.get<unknown>(\n      `/installations/${installationUid}/installationData`,\n    )\n    return extractItem<Record<string, unknown>>(response.data)\n  }\n\n  async getConfigLocation(installationUid: string): Promise<Record<string, unknown>> {\n    const response = await this.http.get<unknown>(\n      `/installations/${installationUid}/locations/configuration`,\n    )\n    return extractItem<Record<string, unknown>>(response.data)\n  }\n\n  // ── View endpoints ─────────────────────────────────────\n\n  async listInstalledApps(): Promise<unknown[]> {\n    const response = await this.http.get<unknown>(\"/installations/view/apps\")\n    return extractList<unknown>(response.data, \"data\").items\n  }\n\n  async listInstalledUsers(): Promise<unknown[]> {\n    const response = await this.http.get<unknown>(\"/installations/view/users\")\n    return extractList<unknown>(response.data, \"data\").items\n  }\n\n  async listInstalledStacks(): Promise<unknown[]> {\n    const response = await this.http.get<unknown>(\"/installations/view/stacks\")\n    return extractList<unknown>(response.data, \"data\").items\n  }\n\n  // ── Webhook executions ─────────────────────────────────\n\n  async listWebhookExecutions(\n    installationUid: string,\n    webhookUid: string,\n  ): Promise<WebhookExecution[]> {\n    const response = await this.http.get<unknown>(\n      `/installations/${installationUid}/webhooks/${webhookUid}/executions`,\n    )\n    return extractList<WebhookExecution>(response.data, \"data\").items\n  }\n\n  async getWebhookExecution(\n    installationUid: string,\n    webhookUid: string,\n    executionUid: string,\n  ): Promise<WebhookExecution> {\n    const response = await this.http.get<unknown>(\n      `/installations/${installationUid}/webhooks/${webhookUid}/executions/${executionUid}`,\n    )\n    return extractItem<WebhookExecution>(response.data)\n  }\n\n  async retryWebhookExecution(\n    installationUid: string,\n    webhookUid: string,\n    executionUid: string,\n  ): Promise<void> {\n    await this.http.post(\n      `/installations/${installationUid}/webhooks/${webhookUid}/executions/${executionUid}/retry`,\n      {},\n    )\n  }\n}\n","import type { ContentstackHttpClient } from \"../http/client.js\"\nimport { extractItem, extractList } from \"./response.js\"\nimport type { AppOAuthConfig, OAuthScope, UpdateOAuthConfigData } from \"./types.js\"\n\nexport class OAuthClient {\n  constructor(private readonly http: ContentstackHttpClient) {}\n\n  async get(appUid: string): Promise<AppOAuthConfig> {\n    const response = await this.http.get<unknown>(`/manifests/${appUid}/oauth`)\n    return extractItem<AppOAuthConfig>(response.data)\n  }\n\n  async update(appUid: string, data: UpdateOAuthConfigData): Promise<AppOAuthConfig> {\n    const response = await this.http.put<unknown>(`/manifests/${appUid}/oauth`, data)\n    return extractItem<AppOAuthConfig>(response.data)\n  }\n\n  async listScopes(): Promise<OAuthScope[]> {\n    const response = await this.http.get<unknown>(\"/manifests/oauth/scopes\")\n    return extractList<OAuthScope>(response.data, \"data\").items\n  }\n}\n","import type { ContentstackHttpClient } from \"../http/client.js\"\nimport { extractItem, extractList } from \"./response.js\"\nimport type { AppRequest, CreateAppRequestData, ListRequestsOptions } from \"./types.js\"\n\nexport class RequestsClient {\n  constructor(private readonly http: ContentstackHttpClient) {}\n\n  async list(options?: ListRequestsOptions): Promise<AppRequest[]> {\n    const params: Record<string, string> = {}\n    if (options?.limit) params.limit = String(options.limit)\n    if (options?.skip) params.skip = String(options.skip)\n\n    const response = await this.http.get<unknown>(\"/requests\", params)\n    return extractList<AppRequest>(response.data, \"data\").items\n  }\n\n  async create(data: CreateAppRequestData): Promise<AppRequest> {\n    const response = await this.http.post<unknown>(\"/requests\", data)\n    return extractItem<AppRequest>(response.data)\n  }\n\n  async delete(requestUid: string): Promise<void> {\n    await this.http.delete(`/requests/${requestUid}`)\n  }\n}\n","import { exchangeAppToken } from \"../auth/oauth-client.js\"\nimport { ContentstackHttpClient } from \"../http/client.js\"\nimport { ContentstackConfigError } from \"../http/errors.js\"\nimport type { HttpClientConfig } from \"../http/types.js\"\nimport type { ContentstackRegion } from \"../regions/resolver.js\"\nimport { resolveEndpoints } from \"../regions/resolver.js\"\nimport { AppsClient } from \"./apps.js\"\nimport { AuthorizationsClient } from \"./authorizations.js\"\nimport { HostingClient } from \"./hosting.js\"\nimport { InstallationsClient } from \"./installations.js\"\nimport { OAuthClient } from \"./oauth.js\"\nimport { RequestsClient } from \"./requests.js\"\n\nexport type DeveloperHubClientAuth =\n  | { type: \"oauth\"; accessToken: string }\n  | { type: \"authtoken\"; token: string }\n  | { type: \"app-token\"; accessToken: string }\n  | { type: \"app-token\"; clientId: string; clientSecret: string }\n\nexport interface DeveloperHubClientConfig {\n  region: ContentstackRegion\n  organizationUid: string\n  auth: DeveloperHubClientAuth\n  httpOptions?: Partial<HttpClientConfig>\n}\n\nexport interface DeveloperHubClient {\n  apps: AppsClient\n  oauth: OAuthClient\n  authorizations: AuthorizationsClient\n  hosting: HostingClient\n  installations: InstallationsClient\n  requests: RequestsClient\n}\n\nexport function createDeveloperHubClient(config: DeveloperHubClientConfig): DeveloperHubClient {\n  const endpoints = resolveEndpoints(config.region)\n\n  const headers: Record<string, string> = {\n    organization_uid: config.organizationUid,\n  }\n\n  let resolveHeaders: HttpClientConfig[\"resolveHeaders\"]\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    case \"app-token\": {\n      if (\"accessToken\" in config.auth) {\n        headers.authorization = `Bearer ${config.auth.accessToken}`\n        break\n      }\n\n      if (!(\"clientId\" in config.auth) || !(\"clientSecret\" in config.auth)) {\n        throw new ContentstackConfigError(\n          \"app-token auth requires accessToken or clientId + clientSecret\",\n        )\n      }\n\n      const { clientId, clientSecret } = config.auth\n      let cachedAccessToken: string | undefined\n      let tokenPromise: Promise<string> | undefined\n\n      resolveHeaders = async () => {\n        if (cachedAccessToken) {\n          return { authorization: `Bearer ${cachedAccessToken}` }\n        }\n\n        if (!tokenPromise) {\n          tokenPromise = exchangeAppToken(\n            config.region,\n            { clientId, clientSecret },\n            { httpOptions: config.httpOptions },\n          )\n            .then((tokens) => {\n              cachedAccessToken = tokens.accessToken\n              return cachedAccessToken\n            })\n            .finally(() => {\n              tokenPromise = undefined\n            })\n        }\n\n        return { authorization: `Bearer ${await tokenPromise}` }\n      }\n      break\n    }\n  }\n\n  const http = new ContentstackHttpClient({\n    ...config.httpOptions,\n    baseUrl: config.httpOptions?.baseUrl ?? endpoints.developerHub,\n    headers: {\n      ...config.httpOptions?.headers,\n      ...headers,\n    },\n    resolveHeaders,\n  })\n\n  const apps = new AppsClient(http)\n\n  return {\n    apps,\n    oauth: new OAuthClient(http),\n    authorizations: new AuthorizationsClient(http),\n    hosting: new HostingClient(http, apps),\n    installations: new InstallationsClient(http),\n    requests: new RequestsClient(http),\n  }\n}\n"],"mappings":"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","names":["mapUser","value","import_json_rte_serializer","import_json_rte_serializer","parent","sleep","EnvironmentsClient","EnvironmentsClient","extractList","extractItem","extractList","extractItem","extractList","extractItem","extractList","extractList","extractItem","extractItem","extractList","extractList","extractItem"]}