{"version":3,"sources":["../src/launch/response.ts","../src/launch/deployments.ts","../src/launch/environments.ts","../src/launch/projects.ts","../src/launch/client.ts","../src/launch/utils.ts"],"sourcesContent":["/**\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"],"mappings":"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","names":[]}