@timbenniks/contentstack-platform-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/dist/auth/index.cjs +607 -0
  2. package/dist/auth/index.cjs.map +1 -0
  3. package/dist/auth/index.d.cts +108 -0
  4. package/dist/auth/index.d.ts +108 -0
  5. package/dist/auth/index.mjs +25 -0
  6. package/dist/auth/index.mjs.map +1 -0
  7. package/dist/brandkit/index.cjs +525 -0
  8. package/dist/brandkit/index.cjs.map +1 -0
  9. package/dist/brandkit/index.d.cts +95 -0
  10. package/dist/brandkit/index.d.ts +95 -0
  11. package/dist/brandkit/index.mjs +11 -0
  12. package/dist/brandkit/index.mjs.map +1 -0
  13. package/dist/chunk-3C6J2BDB.mjs +84 -0
  14. package/dist/chunk-3C6J2BDB.mjs.map +1 -0
  15. package/dist/chunk-3KE63N3I.mjs +64 -0
  16. package/dist/chunk-3KE63N3I.mjs.map +1 -0
  17. package/dist/chunk-4CJ4IVPJ.mjs +212 -0
  18. package/dist/chunk-4CJ4IVPJ.mjs.map +1 -0
  19. package/dist/chunk-4JFUI7MJ.mjs +368 -0
  20. package/dist/chunk-4JFUI7MJ.mjs.map +1 -0
  21. package/dist/chunk-7VFGD32I.mjs +26 -0
  22. package/dist/chunk-7VFGD32I.mjs.map +1 -0
  23. package/dist/chunk-ARPJDW3A.mjs +44 -0
  24. package/dist/chunk-ARPJDW3A.mjs.map +1 -0
  25. package/dist/chunk-AVJHCFRK.mjs +52 -0
  26. package/dist/chunk-AVJHCFRK.mjs.map +1 -0
  27. package/dist/chunk-BK2IBTQS.mjs +131 -0
  28. package/dist/chunk-BK2IBTQS.mjs.map +1 -0
  29. package/dist/chunk-BUZ6CQHE.mjs +75 -0
  30. package/dist/chunk-BUZ6CQHE.mjs.map +1 -0
  31. package/dist/chunk-CKMAOWBQ.mjs +379 -0
  32. package/dist/chunk-CKMAOWBQ.mjs.map +1 -0
  33. package/dist/chunk-DJQLN4TR.mjs +1 -0
  34. package/dist/chunk-DJQLN4TR.mjs.map +1 -0
  35. package/dist/chunk-DMERADWM.mjs +67 -0
  36. package/dist/chunk-DMERADWM.mjs.map +1 -0
  37. package/dist/chunk-EREPKWTW.mjs +926 -0
  38. package/dist/chunk-EREPKWTW.mjs.map +1 -0
  39. package/dist/chunk-FQP4PB5X.mjs +88 -0
  40. package/dist/chunk-FQP4PB5X.mjs.map +1 -0
  41. package/dist/chunk-GNPQJBFX.mjs +144 -0
  42. package/dist/chunk-GNPQJBFX.mjs.map +1 -0
  43. package/dist/chunk-GOSB24M6.mjs +87 -0
  44. package/dist/chunk-GOSB24M6.mjs.map +1 -0
  45. package/dist/chunk-JL2E3EOT.mjs +255 -0
  46. package/dist/chunk-JL2E3EOT.mjs.map +1 -0
  47. package/dist/chunk-JYGZBKTH.mjs +222 -0
  48. package/dist/chunk-JYGZBKTH.mjs.map +1 -0
  49. package/dist/chunk-JZE2W7VW.mjs +52 -0
  50. package/dist/chunk-JZE2W7VW.mjs.map +1 -0
  51. package/dist/chunk-K76DKSHJ.mjs +18 -0
  52. package/dist/chunk-K76DKSHJ.mjs.map +1 -0
  53. package/dist/chunk-KLVIROVU.mjs +232 -0
  54. package/dist/chunk-KLVIROVU.mjs.map +1 -0
  55. package/dist/chunk-LPVVA5J3.mjs +18 -0
  56. package/dist/chunk-LPVVA5J3.mjs.map +1 -0
  57. package/dist/chunk-NKLOZ5VI.mjs +112 -0
  58. package/dist/chunk-NKLOZ5VI.mjs.map +1 -0
  59. package/dist/chunk-QGA4WBDC.mjs +7 -0
  60. package/dist/chunk-QGA4WBDC.mjs.map +1 -0
  61. package/dist/chunk-QW7TVYOA.mjs +56 -0
  62. package/dist/chunk-QW7TVYOA.mjs.map +1 -0
  63. package/dist/chunk-SU5QEKYW.mjs +83 -0
  64. package/dist/chunk-SU5QEKYW.mjs.map +1 -0
  65. package/dist/chunk-T5A2E2RI.mjs +654 -0
  66. package/dist/chunk-T5A2E2RI.mjs.map +1 -0
  67. package/dist/chunk-T5OIJQK7.mjs +116 -0
  68. package/dist/chunk-T5OIJQK7.mjs.map +1 -0
  69. package/dist/chunk-VW7DD6HV.mjs +253 -0
  70. package/dist/chunk-VW7DD6HV.mjs.map +1 -0
  71. package/dist/chunk-XH7NLHGW.mjs +133 -0
  72. package/dist/chunk-XH7NLHGW.mjs.map +1 -0
  73. package/dist/client-DJ5haQGd.d.cts +22 -0
  74. package/dist/client-DwVGVSQz.d.ts +22 -0
  75. package/dist/cma/index.cjs +1349 -0
  76. package/dist/cma/index.cjs.map +1 -0
  77. package/dist/cma/index.d.cts +22 -0
  78. package/dist/cma/index.d.ts +22 -0
  79. package/dist/cma/index.mjs +70 -0
  80. package/dist/cma/index.mjs.map +1 -0
  81. package/dist/errors-CAw-IRCP.d.cts +65 -0
  82. package/dist/errors-CAw-IRCP.d.ts +65 -0
  83. package/dist/generative-ai/index.cjs +401 -0
  84. package/dist/generative-ai/index.cjs.map +1 -0
  85. package/dist/generative-ai/index.d.cts +31 -0
  86. package/dist/generative-ai/index.d.ts +31 -0
  87. package/dist/generative-ai/index.mjs +10 -0
  88. package/dist/generative-ai/index.mjs.map +1 -0
  89. package/dist/images/index.cjs +185 -0
  90. package/dist/images/index.cjs.map +1 -0
  91. package/dist/images/index.d.cts +27 -0
  92. package/dist/images/index.d.ts +27 -0
  93. package/dist/images/index.mjs +8 -0
  94. package/dist/images/index.mjs.map +1 -0
  95. package/dist/index.cjs +2909 -0
  96. package/dist/index.cjs.map +1 -0
  97. package/dist/index.d.cts +30 -0
  98. package/dist/index.d.ts +30 -0
  99. package/dist/index.mjs +153 -0
  100. package/dist/index.mjs.map +1 -0
  101. package/dist/knowledge-vault/index.cjs +413 -0
  102. package/dist/knowledge-vault/index.cjs.map +1 -0
  103. package/dist/knowledge-vault/index.d.cts +49 -0
  104. package/dist/knowledge-vault/index.d.ts +49 -0
  105. package/dist/knowledge-vault/index.mjs +10 -0
  106. package/dist/knowledge-vault/index.mjs.map +1 -0
  107. package/dist/launch/index.cjs +624 -0
  108. package/dist/launch/index.cjs.map +1 -0
  109. package/dist/launch/index.d.cts +169 -0
  110. package/dist/launch/index.d.ts +169 -0
  111. package/dist/launch/index.mjs +11 -0
  112. package/dist/launch/index.mjs.map +1 -0
  113. package/dist/react/auth/index.cjs +113 -0
  114. package/dist/react/auth/index.cjs.map +1 -0
  115. package/dist/react/auth/index.d.cts +33 -0
  116. package/dist/react/auth/index.d.ts +33 -0
  117. package/dist/react/auth/index.mjs +13 -0
  118. package/dist/react/auth/index.mjs.map +1 -0
  119. package/dist/react/content/index.cjs +113 -0
  120. package/dist/react/content/index.cjs.map +1 -0
  121. package/dist/react/content/index.d.cts +25 -0
  122. package/dist/react/content/index.d.ts +25 -0
  123. package/dist/react/content/index.mjs +7 -0
  124. package/dist/react/content/index.mjs.map +1 -0
  125. package/dist/react/hooks/index.cjs +2097 -0
  126. package/dist/react/hooks/index.cjs.map +1 -0
  127. package/dist/react/hooks/index.d.cts +77 -0
  128. package/dist/react/hooks/index.d.ts +77 -0
  129. package/dist/react/hooks/index.mjs +46 -0
  130. package/dist/react/hooks/index.mjs.map +1 -0
  131. package/dist/react/index.cjs +2307 -0
  132. package/dist/react/index.cjs.map +1 -0
  133. package/dist/react/index.d.cts +16 -0
  134. package/dist/react/index.d.ts +16 -0
  135. package/dist/react/index.mjs +67 -0
  136. package/dist/react/index.mjs.map +1 -0
  137. package/dist/react/provider/index.cjs +83 -0
  138. package/dist/react/provider/index.cjs.map +1 -0
  139. package/dist/react/provider/index.d.cts +30 -0
  140. package/dist/react/provider/index.d.ts +30 -0
  141. package/dist/react/provider/index.mjs +11 -0
  142. package/dist/react/provider/index.mjs.map +1 -0
  143. package/dist/regions/index.cjs +171 -0
  144. package/dist/regions/index.cjs.map +1 -0
  145. package/dist/regions/index.d.cts +55 -0
  146. package/dist/regions/index.d.ts +55 -0
  147. package/dist/regions/index.mjs +13 -0
  148. package/dist/regions/index.mjs.map +1 -0
  149. package/dist/request-builders-BxeolQIw.d.ts +735 -0
  150. package/dist/request-builders-C2IG1LUo.d.cts +735 -0
  151. package/dist/rte/index.cjs +683 -0
  152. package/dist/rte/index.cjs.map +1 -0
  153. package/dist/rte/index.d.cts +33 -0
  154. package/dist/rte/index.d.ts +33 -0
  155. package/dist/rte/index.mjs +17 -0
  156. package/dist/rte/index.mjs.map +1 -0
  157. package/dist/server/index.cjs +917 -0
  158. package/dist/server/index.cjs.map +1 -0
  159. package/dist/server/index.d.cts +6 -0
  160. package/dist/server/index.d.ts +6 -0
  161. package/dist/server/index.mjs +45 -0
  162. package/dist/server/index.mjs.map +1 -0
  163. package/dist/server/middleware/index.cjs +614 -0
  164. package/dist/server/middleware/index.cjs.map +1 -0
  165. package/dist/server/middleware/index.d.cts +77 -0
  166. package/dist/server/middleware/index.d.ts +77 -0
  167. package/dist/server/middleware/index.mjs +27 -0
  168. package/dist/server/middleware/index.mjs.map +1 -0
  169. package/dist/server/proxy/index.cjs +329 -0
  170. package/dist/server/proxy/index.cjs.map +1 -0
  171. package/dist/server/proxy/index.d.cts +143 -0
  172. package/dist/server/proxy/index.d.ts +143 -0
  173. package/dist/server/proxy/index.mjs +29 -0
  174. package/dist/server/proxy/index.mjs.map +1 -0
  175. package/dist/server/webhooks/index.cjs +131 -0
  176. package/dist/server/webhooks/index.cjs.map +1 -0
  177. package/dist/server/webhooks/index.d.cts +230 -0
  178. package/dist/server/webhooks/index.d.ts +230 -0
  179. package/dist/server/webhooks/index.mjs +23 -0
  180. package/dist/server/webhooks/index.mjs.map +1 -0
  181. package/dist/types-6D9VR7pT.d.cts +26 -0
  182. package/dist/types-AelT0rFJ.d.cts +21 -0
  183. package/dist/types-AelT0rFJ.d.ts +21 -0
  184. package/dist/types-Bu5yCgmw.d.ts +26 -0
  185. package/dist/types-DgixK-ll.d.cts +23 -0
  186. package/dist/types-DgixK-ll.d.ts +23 -0
  187. package/dist/types-DrMwdlH9.d.cts +245 -0
  188. package/dist/types-DrMwdlH9.d.ts +245 -0
  189. package/dist/ui/css/index.cjs +31 -0
  190. package/dist/ui/css/index.cjs.map +1 -0
  191. package/dist/ui/css/index.d.cts +15 -0
  192. package/dist/ui/css/index.d.ts +15 -0
  193. package/dist/ui/css/index.mjs +7 -0
  194. package/dist/ui/css/index.mjs.map +1 -0
  195. package/dist/ui/index.cjs +368 -0
  196. package/dist/ui/index.cjs.map +1 -0
  197. package/dist/ui/index.d.cts +4 -0
  198. package/dist/ui/index.d.ts +4 -0
  199. package/dist/ui/index.mjs +33 -0
  200. package/dist/ui/index.mjs.map +1 -0
  201. package/dist/ui/theme/index.cjs +105 -0
  202. package/dist/ui/theme/index.cjs.map +1 -0
  203. package/dist/ui/theme/index.d.cts +33 -0
  204. package/dist/ui/theme/index.d.ts +33 -0
  205. package/dist/ui/theme/index.mjs +15 -0
  206. package/dist/ui/theme/index.mjs.map +1 -0
  207. package/dist/ui/tokens/index.cjs +286 -0
  208. package/dist/ui/tokens/index.cjs.map +1 -0
  209. package/dist/ui/tokens/index.d.cts +54 -0
  210. package/dist/ui/tokens/index.d.ts +54 -0
  211. package/dist/ui/tokens/index.mjs +17 -0
  212. package/dist/ui/tokens/index.mjs.map +1 -0
  213. package/dist/ui/tokens.css +408 -0
  214. package/dist/vue/auth/index.cjs +141 -0
  215. package/dist/vue/auth/index.cjs.map +1 -0
  216. package/dist/vue/auth/index.d.cts +78 -0
  217. package/dist/vue/auth/index.d.ts +78 -0
  218. package/dist/vue/auth/index.mjs +13 -0
  219. package/dist/vue/auth/index.mjs.map +1 -0
  220. package/dist/vue/composables/index.cjs +2108 -0
  221. package/dist/vue/composables/index.cjs.map +1 -0
  222. package/dist/vue/composables/index.d.cts +78 -0
  223. package/dist/vue/composables/index.d.ts +78 -0
  224. package/dist/vue/composables/index.mjs +46 -0
  225. package/dist/vue/composables/index.mjs.map +1 -0
  226. package/dist/vue/content/index.cjs +142 -0
  227. package/dist/vue/content/index.cjs.map +1 -0
  228. package/dist/vue/content/index.d.cts +47 -0
  229. package/dist/vue/content/index.d.ts +47 -0
  230. package/dist/vue/content/index.mjs +7 -0
  231. package/dist/vue/content/index.mjs.map +1 -0
  232. package/dist/vue/index.cjs +2389 -0
  233. package/dist/vue/index.cjs.map +1 -0
  234. package/dist/vue/index.d.cts +16 -0
  235. package/dist/vue/index.d.ts +16 -0
  236. package/dist/vue/index.mjs +69 -0
  237. package/dist/vue/index.mjs.map +1 -0
  238. package/dist/vue/provider/index.cjs +97 -0
  239. package/dist/vue/provider/index.cjs.map +1 -0
  240. package/dist/vue/provider/index.d.cts +90 -0
  241. package/dist/vue/provider/index.d.ts +90 -0
  242. package/dist/vue/provider/index.mjs +13 -0
  243. package/dist/vue/provider/index.mjs.map +1 -0
  244. package/package.json +195 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/launch/index.ts","../../src/http/errors.ts","../../src/http/client.ts","../../src/regions/endpoints.ts","../../src/regions/resolver.ts","../../src/cma/pagination.ts","../../src/launch/response.ts","../../src/launch/deployments.ts","../../src/launch/environments.ts","../../src/launch/projects.ts","../../src/launch/client.ts"],"sourcesContent":["export { createLaunchClient } from \"./client.js\"\nexport type { LaunchClient, LaunchClientConfig } from \"./client.js\"\nexport type {\n CreateDeploymentData,\n CreateEnvironmentData,\n CreateProjectData,\n DeploymentLog,\n DeploymentLogOptions,\n FrameworkPreset,\n LaunchDeployment,\n LaunchEnvironment,\n LaunchProject,\n ListDeploymentsOptions,\n ListProjectsOptions,\n RevalidateCDNData,\n ServerLog,\n ServerLogOptions,\n SignedUploadUrl,\n TransferGitRepositoryData,\n UpdateEnvironmentData,\n UpdateProjectData,\n} from \"./types.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 ContentstackAuthError,\n ContentstackError,\n ContentstackForbiddenError,\n ContentstackInvalidApiKeyError,\n ContentstackNotFoundError,\n ContentstackRateLimitError,\n ContentstackServerError,\n ContentstackValidationError,\n} from \"./errors.js\"\nimport type { HttpClientConfig, HttpResponse } from \"./types.js\"\n\nconst DEFAULT_TIMEOUT = 30_000\nconst DEFAULT_RETRY_LIMIT = 5\nconst DEFAULT_RETRY_DELAY = 300\nconst MAX_JITTER = 100\n\nexport class ContentstackHttpClient {\n private readonly config: Required<\n Pick<HttpClientConfig, \"baseUrl\" | \"timeout\" | \"retryOnError\" | \"retryLimit\" | \"retryDelay\">\n > & {\n headers: Record<string, string>\n fetch: typeof globalThis.fetch\n }\n\n constructor(config: HttpClientConfig) {\n this.config = {\n baseUrl: config.baseUrl,\n headers: config.headers ?? {},\n timeout: config.timeout ?? DEFAULT_TIMEOUT,\n retryOnError: config.retryOnError ?? true,\n retryLimit: config.retryLimit ?? DEFAULT_RETRY_LIMIT,\n retryDelay: config.retryDelay ?? DEFAULT_RETRY_DELAY,\n fetch: config.fetch ?? globalThis.fetch.bind(globalThis),\n }\n }\n\n async get<T>(path: string, params?: Record<string, string>): Promise<HttpResponse<T>> {\n let url = `${this.config.baseUrl}${path}`\n if (params) {\n const searchParams = new URLSearchParams(params)\n url += `?${searchParams.toString()}`\n }\n return this.request<T>(url, { method: \"GET\" }, path)\n }\n\n async post<T>(path: string, body?: unknown): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(\n url,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n },\n path,\n )\n }\n\n async put<T>(path: string, body?: unknown): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(\n url,\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n },\n path,\n )\n }\n\n async patch<T>(path: string, body?: unknown): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(\n url,\n {\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n },\n path,\n )\n }\n\n async delete<T>(path: string): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(url, { method: \"DELETE\" }, path)\n }\n\n async postForm<T>(path: string, params: URLSearchParams): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(\n url,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body: params.toString(),\n },\n path,\n )\n }\n\n async upload<T>(path: string, form: FormData): Promise<HttpResponse<T>> {\n const url = `${this.config.baseUrl}${path}`\n return this.request<T>(url, { method: \"POST\", body: form }, path)\n }\n\n /** Return a new client with additional headers merged */\n withHeaders(headers: Record<string, string>): ContentstackHttpClient {\n return new ContentstackHttpClient({\n ...this.config,\n headers: { ...this.config.headers, ...headers },\n })\n }\n\n /** Return a new client with a different base URL */\n withBaseUrl(baseUrl: string): ContentstackHttpClient {\n return new ContentstackHttpClient({\n ...this.config,\n baseUrl,\n })\n }\n\n private async request<T>(url: string, init: RequestInit, path: string): Promise<HttpResponse<T>> {\n const headers = new Headers(this.config.headers)\n\n if (init.headers) {\n const initHeaders =\n init.headers instanceof Headers\n ? init.headers\n : new Headers(init.headers as Record<string, string>)\n initHeaders.forEach((value, key) => headers.set(key, value))\n }\n\n let lastError: Error | undefined\n const maxAttempts = this.config.retryOnError ? this.config.retryLimit + 1 : 1\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout)\n\n try {\n const response = await this.config.fetch(url, {\n ...init,\n headers,\n signal: controller.signal,\n })\n\n if (response.ok) {\n const data = (await response.json().catch(() => ({}))) as T\n return { data, status: response.status, headers: response.headers }\n }\n\n // Check if retryable\n const isRetryable = response.status === 429 || response.status >= 500\n if (isRetryable && this.config.retryOnError && attempt < maxAttempts - 1) {\n const delay = this.calculateDelay(response, attempt)\n await sleep(delay)\n lastError = await this.createError(response, path)\n continue\n }\n\n throw await this.createError(response, path)\n } catch (error) {\n if (error instanceof ContentstackError) {\n throw error\n }\n\n if (error instanceof DOMException && error.name === \"AbortError\") {\n throw new ContentstackError(`Request timed out after ${this.config.timeout}ms`, {\n requestPath: path,\n cause: error,\n })\n }\n\n throw new ContentstackError(\"Network request failed\", {\n requestPath: path,\n cause: error instanceof Error ? error : new Error(String(error)),\n })\n } finally {\n clearTimeout(timeoutId)\n }\n }\n\n // Should not reach here, but just in case\n throw lastError ?? new ContentstackError(\"Request failed after retries\", { requestPath: path })\n }\n\n private calculateDelay(response: Response, attempt: number): number {\n const retryAfter = response.headers.get(\"Retry-After\")\n if (retryAfter) {\n const seconds = Number.parseFloat(retryAfter)\n if (!Number.isNaN(seconds)) {\n return seconds * 1000\n }\n }\n\n const jitter = Math.random() * MAX_JITTER\n return this.config.retryDelay * 2 ** attempt + jitter\n }\n\n private async createError(response: Response, path: string): Promise<ContentstackError> {\n let body: Record<string, unknown> = {}\n try {\n body = (await response.json()) as Record<string, unknown>\n } catch {\n // Response body may not be JSON\n }\n\n const message =\n (body.error_message as string | undefined) ??\n (body.error_description as string | undefined) ??\n (body.message as string | undefined) ??\n `HTTP ${response.status} error`\n const errorCode = body.error_code as number | undefined\n const errors = body.errors as Record<string, string[]> | undefined\n const retryAfter = response.headers.get(\"Retry-After\")\n\n const opts = { status: response.status, errorCode, errors, requestPath: path }\n\n switch (response.status) {\n case 400:\n return new ContentstackValidationError(message, { ...opts, status: 400 })\n case 401:\n return new ContentstackAuthError(message, opts)\n case 403:\n return new ContentstackForbiddenError(message, opts)\n case 404:\n return new ContentstackNotFoundError(message, opts)\n case 412:\n return new ContentstackInvalidApiKeyError(message, opts)\n case 422:\n return new ContentstackValidationError(message, { ...opts, status: 422 })\n case 429:\n return new ContentstackRateLimitError(message, {\n ...opts,\n retryAfter: retryAfter ? Number.parseFloat(retryAfter) : undefined,\n })\n default:\n if (response.status >= 500) {\n return new ContentstackServerError(message, opts)\n }\n return new ContentstackError(message, opts)\n }\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n","import {\n type ContentstackEndpoints as UpstreamEndpoints,\n getContentstackEndpoints,\n getRegionForString,\n} from \"@timbenniks/contentstack-endpoints\"\nimport type { ContentstackEndpoints, ContentstackRegion } from \"./resolver.js\"\n\n/** Brand Kit endpoints not available in upstream package — maintained locally */\nconst BRAND_KIT_URLS: Record<ContentstackRegion, { brandKit: string; brandKitAI: string }> = {\n us: {\n brandKit: \"https://brand-kits-api.contentstack.com\",\n brandKitAI: \"https://ai.contentstack.com/brand-kits\",\n },\n eu: {\n brandKit: \"https://eu-brand-kits-api.contentstack.com\",\n brandKitAI: \"https://eu-ai.contentstack.com/brand-kits\",\n },\n au: {\n brandKit: \"https://au-brand-kits-api.contentstack.com\",\n brandKitAI: \"https://au-ai.contentstack.com/brand-kits\",\n },\n \"azure-na\": {\n brandKit: \"https://azure-na-brand-kits-api.contentstack.com\",\n brandKitAI: \"https://azure-na-ai.contentstack.com/brand-kits\",\n },\n \"azure-eu\": {\n brandKit: \"https://azure-eu-brand-kits-api.contentstack.com\",\n brandKitAI: \"https://azure-eu-ai.contentstack.com/brand-kits\",\n },\n \"gcp-na\": {\n brandKit: \"https://gcp-na-brand-kits-api.contentstack.com\",\n brandKitAI: \"https://gcp-na-ai.contentstack.com/brand-kits\",\n },\n \"gcp-eu\": {\n brandKit: \"https://gcp-eu-brand-kits-api.contentstack.com\",\n brandKitAI: \"https://gcp-eu-ai.contentstack.com/brand-kits\",\n },\n}\n\nfunction mapEndpoints(\n upstream: UpstreamEndpoints,\n region: ContentstackRegion,\n hostsOnly: boolean,\n): ContentstackEndpoints {\n const bk = BRAND_KIT_URLS[region]\n const stripProtocol = (url: string) => url.replace(/^https?:\\/\\//, \"\")\n\n return Object.freeze({\n cma: upstream.contentManagement ?? \"\",\n cda: upstream.contentDelivery ?? \"\",\n graphql: upstream.graphqlDelivery ?? \"\",\n images: upstream.images ?? \"\",\n app: upstream.application ?? \"\",\n preview: upstream.preview ?? \"\",\n graphqlPreview: upstream.graphqlPreview ?? \"\",\n launch: upstream.launch ?? \"\",\n personalizeEdge: upstream.personalizeEdge ?? \"\",\n brandKit: hostsOnly ? stripProtocol(bk.brandKit) : bk.brandKit,\n brandKitAI: hostsOnly ? stripProtocol(bk.brandKitAI) : bk.brandKitAI,\n })\n}\n\nconst ALL_REGIONS: ContentstackRegion[] = [\n \"us\",\n \"eu\",\n \"au\",\n \"azure-na\",\n \"azure-eu\",\n \"gcp-na\",\n \"gcp-eu\",\n]\n\nfunction buildEndpointMap(): Record<ContentstackRegion, ContentstackEndpoints> {\n const map = {} as Record<ContentstackRegion, ContentstackEndpoints>\n for (const region of ALL_REGIONS) {\n map[region] = mapEndpoints(getContentstackEndpoints(region), region, false)\n }\n return Object.freeze(map)\n}\n\nfunction buildHostMap(): Record<ContentstackRegion, ContentstackEndpoints> {\n const map = {} as Record<ContentstackRegion, ContentstackEndpoints>\n for (const region of ALL_REGIONS) {\n map[region] = mapEndpoints(getContentstackEndpoints(region, true), region, true)\n }\n return Object.freeze(map)\n}\n\nexport const ENDPOINT_MAP = buildEndpointMap()\nexport const HOST_MAP = buildHostMap()\n\n/** Check if a string is a valid region via the upstream package */\nexport function isValidRegion(input: string): boolean {\n return getRegionForString(input) !== undefined\n}\n\n/** Map of extra aliases our SDK supports beyond what the upstream package handles */\nexport const EXTRA_ALIASES: Record<string, ContentstackRegion> = {\n \"north-america\": \"us\",\n europe: \"eu\",\n australia: \"au\",\n}\n","import { ContentstackConfigError } from \"../http/errors.js\"\nimport { ENDPOINT_MAP, EXTRA_ALIASES, HOST_MAP, isValidRegion } from \"./endpoints.js\"\n\n/** All 7 Contentstack regions */\nexport type ContentstackRegion = \"us\" | \"eu\" | \"au\" | \"azure-na\" | \"azure-eu\" | \"gcp-na\" | \"gcp-eu\"\n\n/** Resolved endpoint URLs for a region */\nexport interface ContentstackEndpoints {\n /** CMA base URL, e.g. \"https://api.contentstack.io\" */\n cma: string\n /** CDA REST base URL, e.g. \"https://cdn.contentstack.io\" */\n cda: string\n /** GraphQL CDA endpoint */\n graphql: string\n /** Asset/image delivery base URL */\n images: string\n /** Application URL (for OAuth), e.g. \"https://app.contentstack.com\" */\n app: string\n /** Preview API base URL */\n preview: string\n /** GraphQL preview endpoint */\n graphqlPreview: string\n /** Launch API base URL */\n launch: string\n /** Personalize edge endpoint */\n personalizeEdge: string\n /** Brand Kit Management API base URL */\n brandKit: string\n /** Brand Kit GenAI and Knowledge Vault base URL */\n brandKitAI: string\n}\n\nconst VALID_REGIONS = new Set<string>(Object.keys(ENDPOINT_MAP))\n\n/**\n * Resolve all API endpoints for a Contentstack region.\n *\n * @example\n * ```ts\n * const endpoints = resolveEndpoints(\"eu\");\n * // endpoints.cma === \"https://eu-api.contentstack.com\"\n * // endpoints.app === \"https://eu-app.contentstack.com\"\n * ```\n */\nexport function resolveEndpoints(region: ContentstackRegion): ContentstackEndpoints {\n return ENDPOINT_MAP[region]\n}\n\n/**\n * Resolve endpoints with https:// stripped (for SDK host parameters).\n *\n * @example\n * ```ts\n * const hosts = resolveHosts(\"eu\");\n * // hosts.cda === \"eu-cdn.contentstack.com\"\n * ```\n */\nexport function resolveHosts(region: ContentstackRegion): ContentstackEndpoints {\n return HOST_MAP[region]\n}\n\n/**\n * Normalize region aliases: \"na\" → \"us\", \"NA\" → \"us\", etc.\n * Case-insensitive. Throws ContentstackConfigError for unknown regions.\n */\nexport function normalizeRegion(input: string): ContentstackRegion {\n const lower = input.toLowerCase().trim()\n\n if (VALID_REGIONS.has(lower)) {\n return lower as ContentstackRegion\n }\n\n // Check extra aliases our SDK supports (north-america, europe, australia)\n const extraAlias = EXTRA_ALIASES[lower]\n if (extraAlias) {\n return extraAlias\n }\n\n // Check aliases handled by the upstream package (na, us, aws-na, etc.)\n if (isValidRegion(lower)) {\n // The upstream package recognized it — map back to our canonical region\n // \"na\" and \"us\" both map to the NA region which we call \"us\"\n if (lower === \"na\" || lower === \"aws-na\" || lower === \"aws_na\") return \"us\"\n if (lower === \"aws-eu\" || lower === \"aws_eu\") return \"eu\"\n if (lower === \"aws-au\" || lower === \"aws_au\") return \"au\"\n if (lower === \"azure_na\") return \"azure-na\"\n if (lower === \"azure_eu\") return \"azure-eu\"\n if (lower === \"gcp_na\") return \"gcp-na\"\n if (lower === \"gcp_eu\") return \"gcp-eu\"\n }\n\n const validRegions = [...VALID_REGIONS].join(\", \")\n const validAliases = [...Object.keys(EXTRA_ALIASES), \"na\", \"aws-na\", \"aws-eu\", \"aws-au\"].join(\n \", \",\n )\n throw new ContentstackConfigError(\n `Unknown region \"${input}\". Valid regions: ${validRegions}. Aliases: ${validAliases}.`,\n )\n}\n\nexport { ContentstackConfigError }\n","// @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","/**\n * Launch API response helpers.\n *\n * The Launch API returns responses in the format:\n * { pagination: { count, limit, skip }, [key]: [...] }\n *\n * For example, listing projects returns:\n * { pagination: { count: 7, limit: 25, skip: null }, projects: [...] }\n *\n * These helpers normalise the response into the shape the paginator expects.\n */\n\n/**\n * Extract a list from a Launch API response.\n *\n * Handles:\n * - `{ pagination: { count }, [key]: [...] }` — real Launch API format\n * - `{ data: T[], count? }` — legacy / fallback\n * - Plain arrays `T[]`\n */\nexport function extractList<T>(body: unknown, key: string): { items: T[]; count?: number } {\n if (Array.isArray(body)) {\n return { items: body as T[] }\n }\n\n if (body && typeof body === \"object\") {\n const obj = body as Record<string, unknown>\n\n // Launch API format: { pagination: { count }, [key]: [...] }\n if (key in obj && Array.isArray(obj[key])) {\n const pagination = obj.pagination as { count?: number } | undefined\n return { items: obj[key] as T[], count: pagination?.count }\n }\n\n // Fallback: { data: [...], count? }\n if (\"data\" in obj && Array.isArray(obj.data)) {\n return { items: obj.data as T[], count: (obj as { count?: number }).count }\n }\n }\n\n return { items: [] }\n}\n\n/** Extract a single item from a response that may be a plain object or `{ data: T }`. */\nexport function extractItem<T>(body: unknown): T {\n if (body && typeof body === \"object\" && \"data\" in body) {\n return (body as { data: T }).data\n }\n\n return body as T\n}\n","import { collectAll, paginate } from \"../cma/pagination.js\"\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { extractItem, extractList } from \"./response.js\"\nimport type {\n CreateDeploymentData,\n DeploymentLog,\n DeploymentLogOptions,\n LaunchDeployment,\n ListDeploymentsOptions,\n ServerLog,\n ServerLogOptions,\n SignedUploadUrl,\n} from \"./types.js\"\n\nexport class DeploymentsClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n private basePath(projectUid: string, environmentUid: string): string {\n return `/projects/${projectUid}/environments/${environmentUid}/deployments`\n }\n\n list(\n projectUid: string,\n environmentUid: string,\n options?: ListDeploymentsOptions,\n ): AsyncIterable<LaunchDeployment> {\n return paginate<LaunchDeployment>(\n async (skip, limit) => {\n const params: Record<string, string> = {\n skip: String(skip),\n limit: String(limit),\n }\n const response = await this.http.get<unknown>(\n this.basePath(projectUid, environmentUid),\n params,\n )\n return extractList<LaunchDeployment>(response.data, \"deployments\")\n },\n { limit: options?.limit },\n )\n }\n\n async listAll(\n projectUid: string,\n environmentUid: string,\n options?: ListDeploymentsOptions,\n ): Promise<LaunchDeployment[]> {\n return collectAll(this.list(projectUid, environmentUid, options))\n }\n\n async get(\n projectUid: string,\n environmentUid: string,\n deploymentUid: string,\n ): Promise<LaunchDeployment> {\n const response = await this.http.get<unknown>(\n `${this.basePath(projectUid, environmentUid)}/${deploymentUid}`,\n )\n return extractItem<LaunchDeployment>(response.data)\n }\n\n async create(\n projectUid: string,\n environmentUid: string,\n data: CreateDeploymentData,\n ): Promise<LaunchDeployment> {\n const response = await this.http.post<unknown>(this.basePath(projectUid, environmentUid), data)\n return extractItem<LaunchDeployment>(response.data)\n }\n\n async getDeploymentLogs(\n projectUid: string,\n environmentUid: string,\n deploymentUid: string,\n options?: DeploymentLogOptions,\n ): Promise<DeploymentLog[]> {\n const params: Record<string, string> = {}\n if (options?.timestamp) params.timestamp = options.timestamp\n\n const response = await this.http.get<unknown>(\n `${this.basePath(projectUid, environmentUid)}/${deploymentUid}/logs/deployment-logs`,\n Object.keys(params).length > 0 ? params : undefined,\n )\n return extractList<DeploymentLog>(response.data, \"logs\").items\n }\n\n async getServerLogs(\n projectUid: string,\n environmentUid: string,\n deploymentUid: string,\n options?: ServerLogOptions,\n ): Promise<ServerLog[]> {\n const params: Record<string, string> = {}\n if (options?.startTime !== undefined) params.startTime = String(options.startTime)\n if (options?.endTime !== undefined) params.endTime = String(options.endTime)\n\n const response = await this.http.get<unknown>(\n `${this.basePath(projectUid, environmentUid)}/${deploymentUid}/logs/server-logs`,\n Object.keys(params).length > 0 ? params : undefined,\n )\n return extractList<ServerLog>(response.data, \"logs\").items\n }\n\n async getUploadUrl(projectUid: string, environmentUid: string): Promise<SignedUploadUrl> {\n const response = await this.http.get<unknown>(\n `${this.basePath(projectUid, environmentUid)}/upload/signed_url`,\n )\n return extractItem<SignedUploadUrl>(response.data)\n }\n\n async getDownloadUrl(\n projectUid: string,\n environmentUid: string,\n deploymentUid: string,\n ): Promise<string> {\n const response = await this.http.get<unknown>(\n `${this.basePath(projectUid, environmentUid)}/${deploymentUid}/download/signed_url`,\n )\n const item = extractItem<{ downloadUrl: string }>(response.data)\n return item.downloadUrl\n }\n}\n","import { collectAll, paginate } from \"../cma/pagination.js\"\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { extractItem, extractList } from \"./response.js\"\nimport type {\n CreateEnvironmentData,\n LaunchEnvironment,\n RevalidateCDNData,\n SignedUploadUrl,\n UpdateEnvironmentData,\n} from \"./types.js\"\n\nexport class EnvironmentsClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n list(projectUid: string): AsyncIterable<LaunchEnvironment> {\n return paginate<LaunchEnvironment>(async (skip, limit) => {\n const response = await this.http.get<unknown>(`/projects/${projectUid}/environments`, {\n skip: String(skip),\n limit: String(limit),\n })\n return extractList<LaunchEnvironment>(response.data, \"environments\")\n })\n }\n\n async listAll(projectUid: string): Promise<LaunchEnvironment[]> {\n return collectAll(this.list(projectUid))\n }\n\n async get(projectUid: string, envUid: string): Promise<LaunchEnvironment> {\n const response = await this.http.get<unknown>(`/projects/${projectUid}/environments/${envUid}`)\n return extractItem<LaunchEnvironment>(response.data)\n }\n\n async create(projectUid: string, data: CreateEnvironmentData): Promise<LaunchEnvironment> {\n const response = await this.http.post<unknown>(`/projects/${projectUid}/environments`, data)\n return extractItem<LaunchEnvironment>(response.data)\n }\n\n async update(\n projectUid: string,\n envUid: string,\n data: UpdateEnvironmentData,\n ): Promise<LaunchEnvironment> {\n const response = await this.http.put<unknown>(\n `/projects/${projectUid}/environments/${envUid}`,\n data,\n )\n return extractItem<LaunchEnvironment>(response.data)\n }\n\n async delete(projectUid: string, envUid: string): Promise<void> {\n await this.http.delete(`/projects/${projectUid}/environments/${envUid}`)\n }\n\n async revalidateCDNCache(\n projectUid: string,\n envUid: string,\n data: RevalidateCDNData,\n ): Promise<void> {\n await this.http.post(\n `/projects/${projectUid}/environments/${envUid}/revalidate-cdn-cache`,\n data,\n )\n }\n\n async getUploadUrl(projectUid: string): Promise<SignedUploadUrl> {\n const response = await this.http.get<unknown>(\n `/projects/${projectUid}/environments/upload/signed_url`,\n )\n return extractItem<SignedUploadUrl>(response.data)\n }\n}\n","import { collectAll, paginate } from \"../cma/pagination.js\"\nimport type { ContentstackHttpClient } from \"../http/client.js\"\nimport { extractItem, extractList } from \"./response.js\"\nimport type {\n CreateProjectData,\n LaunchProject,\n ListProjectsOptions,\n SignedUploadUrl,\n TransferGitRepositoryData,\n UpdateProjectData,\n} from \"./types.js\"\n\nexport class ProjectsClient {\n constructor(private readonly http: ContentstackHttpClient) {}\n\n list(options?: ListProjectsOptions): AsyncIterable<LaunchProject> {\n return paginate<LaunchProject>(\n async (skip, limit) => {\n const response = await this.http.get<unknown>(\"/projects\", {\n skip: String(skip),\n limit: String(limit),\n })\n return extractList<LaunchProject>(response.data, \"projects\")\n },\n { limit: options?.limit },\n )\n }\n\n async listAll(options?: ListProjectsOptions): Promise<LaunchProject[]> {\n return collectAll(this.list(options))\n }\n\n async get(projectUid: string): Promise<LaunchProject> {\n const response = await this.http.get<unknown>(`/projects/${projectUid}`)\n return extractItem<LaunchProject>(response.data)\n }\n\n async create(data: CreateProjectData): Promise<LaunchProject> {\n const response = await this.http.post<unknown>(\"/projects\", data)\n return extractItem<LaunchProject>(response.data)\n }\n\n async update(projectUid: string, data: UpdateProjectData): Promise<LaunchProject> {\n const response = await this.http.put<unknown>(`/projects/${projectUid}`, data)\n return extractItem<LaunchProject>(response.data)\n }\n\n async delete(projectUid: string): Promise<void> {\n await this.http.delete(`/projects/${projectUid}`)\n }\n\n async transferGitRepository(projectUid: string, data: TransferGitRepositoryData): Promise<void> {\n await this.http.patch(`/projects/${projectUid}/git-repository`, data)\n }\n\n async getUploadUrl(): Promise<SignedUploadUrl> {\n const response = await this.http.get<unknown>(\"/projects/upload/signed_url\")\n return extractItem<SignedUploadUrl>(response.data)\n }\n}\n","import { ContentstackHttpClient } from \"../http/client.js\"\nimport type { HttpClientConfig } from \"../http/types.js\"\nimport type { ContentstackRegion } from \"../regions/resolver.js\"\nimport { resolveEndpoints } from \"../regions/resolver.js\"\nimport { DeploymentsClient } from \"./deployments.js\"\nimport { EnvironmentsClient } from \"./environments.js\"\nimport { ProjectsClient } from \"./projects.js\"\n\nexport interface LaunchClientConfig {\n region: ContentstackRegion\n organizationUid: string\n auth: { type: \"oauth\"; accessToken: string } | { type: \"authtoken\"; token: string }\n httpOptions?: Partial<HttpClientConfig>\n}\n\nexport interface LaunchClient {\n projects: ProjectsClient\n environments: EnvironmentsClient\n deployments: DeploymentsClient\n}\n\nexport function createLaunchClient(config: LaunchClientConfig): LaunchClient {\n const endpoints = resolveEndpoints(config.region)\n\n const headers: Record<string, string> = {\n organization_uid: config.organizationUid,\n }\n\n switch (config.auth.type) {\n case \"oauth\":\n headers.authorization = `Bearer ${config.auth.accessToken}`\n break\n case \"authtoken\":\n headers.authtoken = config.auth.token\n break\n }\n\n const http = new ContentstackHttpClient({\n ...config.httpOptions,\n baseUrl: config.httpOptions?.baseUrl ?? endpoints.launch,\n headers: {\n ...config.httpOptions?.headers,\n ...headers,\n },\n })\n\n return {\n projects: new ProjectsClient(http),\n environments: new EnvironmentsClient(http),\n deployments: new DeploymentsClient(http),\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,169 @@
1
+ import { H as HttpClientConfig } from '../types-DgixK-ll.cjs';
2
+ import { ContentstackRegion } from '../regions/index.cjs';
3
+ import { C as ContentstackHttpClient } from '../client-DJ5haQGd.cjs';
4
+
5
+ interface LaunchProject {
6
+ uid: string;
7
+ name: string;
8
+ projectType: "GITPROVIDER" | "FILEUPLOAD";
9
+ repository?: {
10
+ repositoryName?: string;
11
+ username?: string;
12
+ repositoryUrl: string;
13
+ };
14
+ /** Environments are only included when fetching a single project, not in list responses. */
15
+ environments?: LaunchEnvironment[];
16
+ organizationUid: string;
17
+ createdAt: string;
18
+ updatedAt: string;
19
+ createdBy: string;
20
+ updatedBy: string;
21
+ }
22
+ interface LaunchEnvironment {
23
+ uid: string;
24
+ name: string;
25
+ gitBranch?: string;
26
+ frameworkPreset?: FrameworkPreset;
27
+ buildCommand?: string;
28
+ outputDirectory?: string;
29
+ domains?: string[];
30
+ status: "ACTIVE" | "INACTIVE";
31
+ latestDeployment?: LaunchDeployment;
32
+ createdAt: string;
33
+ updatedAt: string;
34
+ }
35
+ type FrameworkPreset = "NEXTJS" | "GATSBY" | "ANGULAR" | "NUXT" | "OTHER";
36
+ interface LaunchDeployment {
37
+ uid: string;
38
+ status: "QUEUED" | "BUILDING" | "DEPLOYING" | "LIVE" | "FAILED" | "CANCELLED";
39
+ environmentUid: string;
40
+ commitMessage?: string;
41
+ commitSha?: string;
42
+ createdAt: string;
43
+ updatedAt: string;
44
+ completedAt?: string;
45
+ }
46
+ interface DeploymentLog {
47
+ timestamp: string;
48
+ message: string;
49
+ level: "info" | "warn" | "error";
50
+ }
51
+ interface ServerLog {
52
+ timestamp: string;
53
+ message: string;
54
+ requestId?: string;
55
+ }
56
+ interface SignedUploadUrl {
57
+ uploadUrl: string;
58
+ expiresAt: string;
59
+ }
60
+ interface CreateProjectData {
61
+ name: string;
62
+ projectType: "GITPROVIDER" | "FILEUPLOAD";
63
+ repository?: {
64
+ repositoryUrl: string;
65
+ };
66
+ }
67
+ interface UpdateProjectData {
68
+ name?: string;
69
+ }
70
+ interface TransferGitRepositoryData {
71
+ organizationUid: string;
72
+ }
73
+ interface CreateEnvironmentData {
74
+ name: string;
75
+ gitBranch?: string;
76
+ frameworkPreset?: FrameworkPreset;
77
+ buildCommand?: string;
78
+ outputDirectory?: string;
79
+ }
80
+ interface UpdateEnvironmentData {
81
+ name?: string;
82
+ gitBranch?: string;
83
+ frameworkPreset?: FrameworkPreset;
84
+ buildCommand?: string;
85
+ outputDirectory?: string;
86
+ }
87
+ interface CreateDeploymentData {
88
+ commitSha?: string;
89
+ commitMessage?: string;
90
+ }
91
+ interface ListProjectsOptions {
92
+ limit?: number;
93
+ }
94
+ interface ListDeploymentsOptions {
95
+ limit?: number;
96
+ }
97
+ interface DeploymentLogOptions {
98
+ timestamp?: string;
99
+ }
100
+ interface ServerLogOptions {
101
+ startTime?: number;
102
+ endTime?: number;
103
+ }
104
+ interface RevalidateCDNData {
105
+ paths?: string[];
106
+ cacheTags?: string[];
107
+ hostnames?: string[];
108
+ }
109
+
110
+ declare class DeploymentsClient {
111
+ private readonly http;
112
+ constructor(http: ContentstackHttpClient);
113
+ private basePath;
114
+ list(projectUid: string, environmentUid: string, options?: ListDeploymentsOptions): AsyncIterable<LaunchDeployment>;
115
+ listAll(projectUid: string, environmentUid: string, options?: ListDeploymentsOptions): Promise<LaunchDeployment[]>;
116
+ get(projectUid: string, environmentUid: string, deploymentUid: string): Promise<LaunchDeployment>;
117
+ create(projectUid: string, environmentUid: string, data: CreateDeploymentData): Promise<LaunchDeployment>;
118
+ getDeploymentLogs(projectUid: string, environmentUid: string, deploymentUid: string, options?: DeploymentLogOptions): Promise<DeploymentLog[]>;
119
+ getServerLogs(projectUid: string, environmentUid: string, deploymentUid: string, options?: ServerLogOptions): Promise<ServerLog[]>;
120
+ getUploadUrl(projectUid: string, environmentUid: string): Promise<SignedUploadUrl>;
121
+ getDownloadUrl(projectUid: string, environmentUid: string, deploymentUid: string): Promise<string>;
122
+ }
123
+
124
+ declare class EnvironmentsClient {
125
+ private readonly http;
126
+ constructor(http: ContentstackHttpClient);
127
+ list(projectUid: string): AsyncIterable<LaunchEnvironment>;
128
+ listAll(projectUid: string): Promise<LaunchEnvironment[]>;
129
+ get(projectUid: string, envUid: string): Promise<LaunchEnvironment>;
130
+ create(projectUid: string, data: CreateEnvironmentData): Promise<LaunchEnvironment>;
131
+ update(projectUid: string, envUid: string, data: UpdateEnvironmentData): Promise<LaunchEnvironment>;
132
+ delete(projectUid: string, envUid: string): Promise<void>;
133
+ revalidateCDNCache(projectUid: string, envUid: string, data: RevalidateCDNData): Promise<void>;
134
+ getUploadUrl(projectUid: string): Promise<SignedUploadUrl>;
135
+ }
136
+
137
+ declare class ProjectsClient {
138
+ private readonly http;
139
+ constructor(http: ContentstackHttpClient);
140
+ list(options?: ListProjectsOptions): AsyncIterable<LaunchProject>;
141
+ listAll(options?: ListProjectsOptions): Promise<LaunchProject[]>;
142
+ get(projectUid: string): Promise<LaunchProject>;
143
+ create(data: CreateProjectData): Promise<LaunchProject>;
144
+ update(projectUid: string, data: UpdateProjectData): Promise<LaunchProject>;
145
+ delete(projectUid: string): Promise<void>;
146
+ transferGitRepository(projectUid: string, data: TransferGitRepositoryData): Promise<void>;
147
+ getUploadUrl(): Promise<SignedUploadUrl>;
148
+ }
149
+
150
+ interface LaunchClientConfig {
151
+ region: ContentstackRegion;
152
+ organizationUid: string;
153
+ auth: {
154
+ type: "oauth";
155
+ accessToken: string;
156
+ } | {
157
+ type: "authtoken";
158
+ token: string;
159
+ };
160
+ httpOptions?: Partial<HttpClientConfig>;
161
+ }
162
+ interface LaunchClient {
163
+ projects: ProjectsClient;
164
+ environments: EnvironmentsClient;
165
+ deployments: DeploymentsClient;
166
+ }
167
+ declare function createLaunchClient(config: LaunchClientConfig): LaunchClient;
168
+
169
+ export { type CreateDeploymentData, type CreateEnvironmentData, type CreateProjectData, type DeploymentLog, type DeploymentLogOptions, type FrameworkPreset, type LaunchClient, type LaunchClientConfig, type LaunchDeployment, type LaunchEnvironment, type LaunchProject, type ListDeploymentsOptions, type ListProjectsOptions, type RevalidateCDNData, type ServerLog, type ServerLogOptions, type SignedUploadUrl, type TransferGitRepositoryData, type UpdateEnvironmentData, type UpdateProjectData, createLaunchClient };
@@ -0,0 +1,169 @@
1
+ import { H as HttpClientConfig } from '../types-DgixK-ll.js';
2
+ import { ContentstackRegion } from '../regions/index.js';
3
+ import { C as ContentstackHttpClient } from '../client-DwVGVSQz.js';
4
+
5
+ interface LaunchProject {
6
+ uid: string;
7
+ name: string;
8
+ projectType: "GITPROVIDER" | "FILEUPLOAD";
9
+ repository?: {
10
+ repositoryName?: string;
11
+ username?: string;
12
+ repositoryUrl: string;
13
+ };
14
+ /** Environments are only included when fetching a single project, not in list responses. */
15
+ environments?: LaunchEnvironment[];
16
+ organizationUid: string;
17
+ createdAt: string;
18
+ updatedAt: string;
19
+ createdBy: string;
20
+ updatedBy: string;
21
+ }
22
+ interface LaunchEnvironment {
23
+ uid: string;
24
+ name: string;
25
+ gitBranch?: string;
26
+ frameworkPreset?: FrameworkPreset;
27
+ buildCommand?: string;
28
+ outputDirectory?: string;
29
+ domains?: string[];
30
+ status: "ACTIVE" | "INACTIVE";
31
+ latestDeployment?: LaunchDeployment;
32
+ createdAt: string;
33
+ updatedAt: string;
34
+ }
35
+ type FrameworkPreset = "NEXTJS" | "GATSBY" | "ANGULAR" | "NUXT" | "OTHER";
36
+ interface LaunchDeployment {
37
+ uid: string;
38
+ status: "QUEUED" | "BUILDING" | "DEPLOYING" | "LIVE" | "FAILED" | "CANCELLED";
39
+ environmentUid: string;
40
+ commitMessage?: string;
41
+ commitSha?: string;
42
+ createdAt: string;
43
+ updatedAt: string;
44
+ completedAt?: string;
45
+ }
46
+ interface DeploymentLog {
47
+ timestamp: string;
48
+ message: string;
49
+ level: "info" | "warn" | "error";
50
+ }
51
+ interface ServerLog {
52
+ timestamp: string;
53
+ message: string;
54
+ requestId?: string;
55
+ }
56
+ interface SignedUploadUrl {
57
+ uploadUrl: string;
58
+ expiresAt: string;
59
+ }
60
+ interface CreateProjectData {
61
+ name: string;
62
+ projectType: "GITPROVIDER" | "FILEUPLOAD";
63
+ repository?: {
64
+ repositoryUrl: string;
65
+ };
66
+ }
67
+ interface UpdateProjectData {
68
+ name?: string;
69
+ }
70
+ interface TransferGitRepositoryData {
71
+ organizationUid: string;
72
+ }
73
+ interface CreateEnvironmentData {
74
+ name: string;
75
+ gitBranch?: string;
76
+ frameworkPreset?: FrameworkPreset;
77
+ buildCommand?: string;
78
+ outputDirectory?: string;
79
+ }
80
+ interface UpdateEnvironmentData {
81
+ name?: string;
82
+ gitBranch?: string;
83
+ frameworkPreset?: FrameworkPreset;
84
+ buildCommand?: string;
85
+ outputDirectory?: string;
86
+ }
87
+ interface CreateDeploymentData {
88
+ commitSha?: string;
89
+ commitMessage?: string;
90
+ }
91
+ interface ListProjectsOptions {
92
+ limit?: number;
93
+ }
94
+ interface ListDeploymentsOptions {
95
+ limit?: number;
96
+ }
97
+ interface DeploymentLogOptions {
98
+ timestamp?: string;
99
+ }
100
+ interface ServerLogOptions {
101
+ startTime?: number;
102
+ endTime?: number;
103
+ }
104
+ interface RevalidateCDNData {
105
+ paths?: string[];
106
+ cacheTags?: string[];
107
+ hostnames?: string[];
108
+ }
109
+
110
+ declare class DeploymentsClient {
111
+ private readonly http;
112
+ constructor(http: ContentstackHttpClient);
113
+ private basePath;
114
+ list(projectUid: string, environmentUid: string, options?: ListDeploymentsOptions): AsyncIterable<LaunchDeployment>;
115
+ listAll(projectUid: string, environmentUid: string, options?: ListDeploymentsOptions): Promise<LaunchDeployment[]>;
116
+ get(projectUid: string, environmentUid: string, deploymentUid: string): Promise<LaunchDeployment>;
117
+ create(projectUid: string, environmentUid: string, data: CreateDeploymentData): Promise<LaunchDeployment>;
118
+ getDeploymentLogs(projectUid: string, environmentUid: string, deploymentUid: string, options?: DeploymentLogOptions): Promise<DeploymentLog[]>;
119
+ getServerLogs(projectUid: string, environmentUid: string, deploymentUid: string, options?: ServerLogOptions): Promise<ServerLog[]>;
120
+ getUploadUrl(projectUid: string, environmentUid: string): Promise<SignedUploadUrl>;
121
+ getDownloadUrl(projectUid: string, environmentUid: string, deploymentUid: string): Promise<string>;
122
+ }
123
+
124
+ declare class EnvironmentsClient {
125
+ private readonly http;
126
+ constructor(http: ContentstackHttpClient);
127
+ list(projectUid: string): AsyncIterable<LaunchEnvironment>;
128
+ listAll(projectUid: string): Promise<LaunchEnvironment[]>;
129
+ get(projectUid: string, envUid: string): Promise<LaunchEnvironment>;
130
+ create(projectUid: string, data: CreateEnvironmentData): Promise<LaunchEnvironment>;
131
+ update(projectUid: string, envUid: string, data: UpdateEnvironmentData): Promise<LaunchEnvironment>;
132
+ delete(projectUid: string, envUid: string): Promise<void>;
133
+ revalidateCDNCache(projectUid: string, envUid: string, data: RevalidateCDNData): Promise<void>;
134
+ getUploadUrl(projectUid: string): Promise<SignedUploadUrl>;
135
+ }
136
+
137
+ declare class ProjectsClient {
138
+ private readonly http;
139
+ constructor(http: ContentstackHttpClient);
140
+ list(options?: ListProjectsOptions): AsyncIterable<LaunchProject>;
141
+ listAll(options?: ListProjectsOptions): Promise<LaunchProject[]>;
142
+ get(projectUid: string): Promise<LaunchProject>;
143
+ create(data: CreateProjectData): Promise<LaunchProject>;
144
+ update(projectUid: string, data: UpdateProjectData): Promise<LaunchProject>;
145
+ delete(projectUid: string): Promise<void>;
146
+ transferGitRepository(projectUid: string, data: TransferGitRepositoryData): Promise<void>;
147
+ getUploadUrl(): Promise<SignedUploadUrl>;
148
+ }
149
+
150
+ interface LaunchClientConfig {
151
+ region: ContentstackRegion;
152
+ organizationUid: string;
153
+ auth: {
154
+ type: "oauth";
155
+ accessToken: string;
156
+ } | {
157
+ type: "authtoken";
158
+ token: string;
159
+ };
160
+ httpOptions?: Partial<HttpClientConfig>;
161
+ }
162
+ interface LaunchClient {
163
+ projects: ProjectsClient;
164
+ environments: EnvironmentsClient;
165
+ deployments: DeploymentsClient;
166
+ }
167
+ declare function createLaunchClient(config: LaunchClientConfig): LaunchClient;
168
+
169
+ export { type CreateDeploymentData, type CreateEnvironmentData, type CreateProjectData, type DeploymentLog, type DeploymentLogOptions, type FrameworkPreset, type LaunchClient, type LaunchClientConfig, type LaunchDeployment, type LaunchEnvironment, type LaunchProject, type ListDeploymentsOptions, type ListProjectsOptions, type RevalidateCDNData, type ServerLog, type ServerLogOptions, type SignedUploadUrl, type TransferGitRepositoryData, type UpdateEnvironmentData, type UpdateProjectData, createLaunchClient };
@@ -0,0 +1,11 @@
1
+ import {
2
+ createLaunchClient
3
+ } from "../chunk-KLVIROVU.mjs";
4
+ import "../chunk-JZE2W7VW.mjs";
5
+ import "../chunk-4CJ4IVPJ.mjs";
6
+ import "../chunk-BK2IBTQS.mjs";
7
+ import "../chunk-DMERADWM.mjs";
8
+ export {
9
+ createLaunchClient
10
+ };
11
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/react/auth/index.ts
21
+ var auth_exports = {};
22
+ __export(auth_exports, {
23
+ ContentstackAuthGuard: () => ContentstackAuthGuard,
24
+ ContentstackLoginButton: () => ContentstackLoginButton,
25
+ ContentstackLogoutButton: () => ContentstackLogoutButton,
26
+ useContentstackUser: () => useContentstackUser
27
+ });
28
+ module.exports = __toCommonJS(auth_exports);
29
+
30
+ // src/react/auth/useContentstackUser.ts
31
+ var import_react = require("react");
32
+ function useContentstackUser() {
33
+ const [user, setUser] = (0, import_react.useState)(null);
34
+ const [loading, setLoading] = (0, import_react.useState)(true);
35
+ const fetchSession = (0, import_react.useCallback)(async () => {
36
+ setLoading(true);
37
+ try {
38
+ const res = await fetch("/api/auth/session");
39
+ if (!res.ok) {
40
+ setUser(null);
41
+ return;
42
+ }
43
+ const data = await res.json();
44
+ if (data?.user) {
45
+ setUser({
46
+ uid: data.user.uid ?? data.user.id ?? "",
47
+ email: data.user.email ?? "",
48
+ firstName: data.user.firstName ?? data.user.name?.split(" ")[0],
49
+ lastName: data.user.lastName ?? data.user.name?.split(" ").slice(1).join(" "),
50
+ username: data.user.username,
51
+ profileImage: data.user.profileImage ?? data.user.image
52
+ });
53
+ } else {
54
+ setUser(null);
55
+ }
56
+ } catch {
57
+ setUser(null);
58
+ } finally {
59
+ setLoading(false);
60
+ }
61
+ }, []);
62
+ (0, import_react.useEffect)(() => {
63
+ fetchSession();
64
+ }, [fetchSession]);
65
+ return { user, loading, isAuthenticated: user !== null };
66
+ }
67
+
68
+ // src/react/auth/ContentstackLoginButton.tsx
69
+ var import_jsx_runtime = require("react/jsx-runtime");
70
+ function ContentstackLoginButton({
71
+ redirectTo,
72
+ className,
73
+ children = "Sign in with Contentstack"
74
+ }) {
75
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("form", { action: "/api/auth/signin/contentstack", method: "POST", children: [
76
+ redirectTo && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("input", { type: "hidden", name: "callbackUrl", value: redirectTo }),
77
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type: "submit", className, children })
78
+ ] });
79
+ }
80
+
81
+ // src/react/auth/ContentstackLogoutButton.tsx
82
+ var import_jsx_runtime2 = require("react/jsx-runtime");
83
+ function ContentstackLogoutButton({
84
+ redirectTo,
85
+ className,
86
+ children = "Sign out"
87
+ }) {
88
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("form", { action: "/api/auth/signout", method: "POST", children: [
89
+ redirectTo && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("input", { type: "hidden", name: "callbackUrl", value: redirectTo }),
90
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("button", { type: "submit", className, children })
91
+ ] });
92
+ }
93
+
94
+ // src/react/auth/ContentstackAuthGuard.tsx
95
+ var import_jsx_runtime3 = require("react/jsx-runtime");
96
+ function ContentstackAuthGuard({
97
+ children,
98
+ fallback,
99
+ loadingFallback = null
100
+ }) {
101
+ const { isAuthenticated, loading } = useContentstackUser();
102
+ if (loading) return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, { children: loadingFallback });
103
+ if (isAuthenticated) return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, { children });
104
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, { children: fallback ?? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(ContentstackLoginButton, {}) });
105
+ }
106
+ // Annotate the CommonJS export names for ESM import in node:
107
+ 0 && (module.exports = {
108
+ ContentstackAuthGuard,
109
+ ContentstackLoginButton,
110
+ ContentstackLogoutButton,
111
+ useContentstackUser
112
+ });
113
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/react/auth/index.ts","../../../src/react/auth/useContentstackUser.ts","../../../src/react/auth/ContentstackLoginButton.tsx","../../../src/react/auth/ContentstackLogoutButton.tsx","../../../src/react/auth/ContentstackAuthGuard.tsx"],"sourcesContent":["export { useContentstackUser, type UseContentstackUserReturn } from \"./useContentstackUser\"\nexport {\n ContentstackLoginButton,\n type ContentstackLoginButtonProps,\n} from \"./ContentstackLoginButton\"\nexport {\n ContentstackLogoutButton,\n type ContentstackLogoutButtonProps,\n} from \"./ContentstackLogoutButton\"\nexport { ContentstackAuthGuard, type ContentstackAuthGuardProps } from \"./ContentstackAuthGuard\"\n","\"use client\"\n\nimport { useCallback, useEffect, useState } from \"react\"\nimport type { ContentstackUser } from \"../../index.js\"\n\nexport interface UseContentstackUserReturn {\n user: ContentstackUser | null\n loading: boolean\n isAuthenticated: boolean\n}\n\nexport function useContentstackUser(): UseContentstackUserReturn {\n const [user, setUser] = useState<ContentstackUser | null>(null)\n const [loading, setLoading] = useState(true)\n\n const fetchSession = useCallback(async () => {\n setLoading(true)\n try {\n const res = await fetch(\"/api/auth/session\")\n if (!res.ok) {\n setUser(null)\n return\n }\n const data = await res.json()\n if (data?.user) {\n setUser({\n uid: data.user.uid ?? data.user.id ?? \"\",\n email: data.user.email ?? \"\",\n firstName: data.user.firstName ?? data.user.name?.split(\" \")[0],\n lastName: data.user.lastName ?? data.user.name?.split(\" \").slice(1).join(\" \"),\n username: data.user.username,\n profileImage: data.user.profileImage ?? data.user.image,\n })\n } else {\n setUser(null)\n }\n } catch {\n setUser(null)\n } finally {\n setLoading(false)\n }\n }, [])\n\n useEffect(() => {\n fetchSession()\n }, [fetchSession])\n\n return { user, loading, isAuthenticated: user !== null }\n}\n","export interface ContentstackLoginButtonProps {\n scopes?: string[]\n redirectTo?: string\n className?: string\n children?: React.ReactNode\n}\n\nexport function ContentstackLoginButton({\n redirectTo,\n className,\n children = \"Sign in with Contentstack\",\n}: ContentstackLoginButtonProps): React.JSX.Element {\n return (\n <form action=\"/api/auth/signin/contentstack\" method=\"POST\">\n {redirectTo && <input type=\"hidden\" name=\"callbackUrl\" value={redirectTo} />}\n <button type=\"submit\" className={className}>\n {children}\n </button>\n </form>\n )\n}\n","export interface ContentstackLogoutButtonProps {\n redirectTo?: string\n className?: string\n children?: React.ReactNode\n}\n\nexport function ContentstackLogoutButton({\n redirectTo,\n className,\n children = \"Sign out\",\n}: ContentstackLogoutButtonProps): React.JSX.Element {\n return (\n <form action=\"/api/auth/signout\" method=\"POST\">\n {redirectTo && <input type=\"hidden\" name=\"callbackUrl\" value={redirectTo} />}\n <button type=\"submit\" className={className}>\n {children}\n </button>\n </form>\n )\n}\n","\"use client\"\n\nimport { ContentstackLoginButton } from \"./ContentstackLoginButton\"\nimport { useContentstackUser } from \"./useContentstackUser\"\n\nexport interface ContentstackAuthGuardProps {\n children: React.ReactNode\n fallback?: React.ReactNode\n loadingFallback?: React.ReactNode\n}\n\nexport function ContentstackAuthGuard({\n children,\n fallback,\n loadingFallback = null,\n}: ContentstackAuthGuardProps): React.JSX.Element | null {\n const { isAuthenticated, loading } = useContentstackUser()\n\n if (loading) return <>{loadingFallback}</>\n if (isAuthenticated) return <>{children}</>\n return <>{fallback ?? <ContentstackLoginButton />}</>\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,mBAAiD;AAS1C,SAAS,sBAAiD;AAC/D,QAAM,CAAC,MAAM,OAAO,QAAI,uBAAkC,IAAI;AAC9D,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAS,IAAI;AAE3C,QAAM,mBAAe,0BAAY,YAAY;AAC3C,eAAW,IAAI;AACf,QAAI;AACF,YAAM,MAAM,MAAM,MAAM,mBAAmB;AAC3C,UAAI,CAAC,IAAI,IAAI;AACX,gBAAQ,IAAI;AACZ;AAAA,MACF;AACA,YAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,UAAI,MAAM,MAAM;AACd,gBAAQ;AAAA,UACN,KAAK,KAAK,KAAK,OAAO,KAAK,KAAK,MAAM;AAAA,UACtC,OAAO,KAAK,KAAK,SAAS;AAAA,UAC1B,WAAW,KAAK,KAAK,aAAa,KAAK,KAAK,MAAM,MAAM,GAAG,EAAE,CAAC;AAAA,UAC9D,UAAU,KAAK,KAAK,YAAY,KAAK,KAAK,MAAM,MAAM,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG;AAAA,UAC5E,UAAU,KAAK,KAAK;AAAA,UACpB,cAAc,KAAK,KAAK,gBAAgB,KAAK,KAAK;AAAA,QACpD,CAAC;AAAA,MACH,OAAO;AACL,gBAAQ,IAAI;AAAA,MACd;AAAA,IACF,QAAQ;AACN,cAAQ,IAAI;AAAA,IACd,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,8BAAU,MAAM;AACd,iBAAa;AAAA,EACf,GAAG,CAAC,YAAY,CAAC;AAEjB,SAAO,EAAE,MAAM,SAAS,iBAAiB,SAAS,KAAK;AACzD;;;ACnCI;AANG,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAoD;AAClD,SACE,6CAAC,UAAK,QAAO,iCAAgC,QAAO,QACjD;AAAA,kBAAc,4CAAC,WAAM,MAAK,UAAS,MAAK,eAAc,OAAO,YAAY;AAAA,IAC1E,4CAAC,YAAO,MAAK,UAAS,WACnB,UACH;AAAA,KACF;AAEJ;;;ACRI,IAAAA,sBAAA;AANG,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAqD;AACnD,SACE,8CAAC,UAAK,QAAO,qBAAoB,QAAO,QACrC;AAAA,kBAAc,6CAAC,WAAM,MAAK,UAAS,MAAK,eAAc,OAAO,YAAY;AAAA,IAC1E,6CAAC,YAAO,MAAK,UAAS,WACnB,UACH;AAAA,KACF;AAEJ;;;ACDsB,IAAAC,sBAAA;AAPf,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA,kBAAkB;AACpB,GAAyD;AACvD,QAAM,EAAE,iBAAiB,QAAQ,IAAI,oBAAoB;AAEzD,MAAI,QAAS,QAAO,6EAAG,2BAAgB;AACvC,MAAI,gBAAiB,QAAO,6EAAG,UAAS;AACxC,SAAO,6EAAG,sBAAY,6CAAC,2BAAwB,GAAG;AACpD;","names":["import_jsx_runtime","import_jsx_runtime"]}
@@ -0,0 +1,33 @@
1
+ import { C as ContentstackUser } from '../../types-6D9VR7pT.cjs';
2
+ import '../../regions/index.cjs';
3
+
4
+ interface UseContentstackUserReturn {
5
+ user: ContentstackUser | null;
6
+ loading: boolean;
7
+ isAuthenticated: boolean;
8
+ }
9
+ declare function useContentstackUser(): UseContentstackUserReturn;
10
+
11
+ interface ContentstackLoginButtonProps {
12
+ scopes?: string[];
13
+ redirectTo?: string;
14
+ className?: string;
15
+ children?: React.ReactNode;
16
+ }
17
+ declare function ContentstackLoginButton({ redirectTo, className, children, }: ContentstackLoginButtonProps): React.JSX.Element;
18
+
19
+ interface ContentstackLogoutButtonProps {
20
+ redirectTo?: string;
21
+ className?: string;
22
+ children?: React.ReactNode;
23
+ }
24
+ declare function ContentstackLogoutButton({ redirectTo, className, children, }: ContentstackLogoutButtonProps): React.JSX.Element;
25
+
26
+ interface ContentstackAuthGuardProps {
27
+ children: React.ReactNode;
28
+ fallback?: React.ReactNode;
29
+ loadingFallback?: React.ReactNode;
30
+ }
31
+ declare function ContentstackAuthGuard({ children, fallback, loadingFallback, }: ContentstackAuthGuardProps): React.JSX.Element | null;
32
+
33
+ export { ContentstackAuthGuard, type ContentstackAuthGuardProps, ContentstackLoginButton, type ContentstackLoginButtonProps, ContentstackLogoutButton, type ContentstackLogoutButtonProps, type UseContentstackUserReturn, useContentstackUser };