@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,232 @@
1
+ import {
2
+ collectAll,
3
+ paginate
4
+ } from "./chunk-JZE2W7VW.mjs";
5
+ import {
6
+ ContentstackHttpClient
7
+ } from "./chunk-4CJ4IVPJ.mjs";
8
+ import {
9
+ resolveEndpoints
10
+ } from "./chunk-BK2IBTQS.mjs";
11
+
12
+ // src/launch/response.ts
13
+ function extractList(body, key) {
14
+ if (Array.isArray(body)) {
15
+ return { items: body };
16
+ }
17
+ if (body && typeof body === "object") {
18
+ const obj = body;
19
+ if (key in obj && Array.isArray(obj[key])) {
20
+ const pagination = obj.pagination;
21
+ return { items: obj[key], count: pagination?.count };
22
+ }
23
+ if ("data" in obj && Array.isArray(obj.data)) {
24
+ return { items: obj.data, count: obj.count };
25
+ }
26
+ }
27
+ return { items: [] };
28
+ }
29
+ function extractItem(body) {
30
+ if (body && typeof body === "object" && "data" in body) {
31
+ return body.data;
32
+ }
33
+ return body;
34
+ }
35
+
36
+ // src/launch/deployments.ts
37
+ var DeploymentsClient = class {
38
+ constructor(http) {
39
+ this.http = http;
40
+ }
41
+ basePath(projectUid, environmentUid) {
42
+ return `/projects/${projectUid}/environments/${environmentUid}/deployments`;
43
+ }
44
+ list(projectUid, environmentUid, options) {
45
+ return paginate(
46
+ async (skip, limit) => {
47
+ const params = {
48
+ skip: String(skip),
49
+ limit: String(limit)
50
+ };
51
+ const response = await this.http.get(
52
+ this.basePath(projectUid, environmentUid),
53
+ params
54
+ );
55
+ return extractList(response.data, "deployments");
56
+ },
57
+ { limit: options?.limit }
58
+ );
59
+ }
60
+ async listAll(projectUid, environmentUid, options) {
61
+ return collectAll(this.list(projectUid, environmentUid, options));
62
+ }
63
+ async get(projectUid, environmentUid, deploymentUid) {
64
+ const response = await this.http.get(
65
+ `${this.basePath(projectUid, environmentUid)}/${deploymentUid}`
66
+ );
67
+ return extractItem(response.data);
68
+ }
69
+ async create(projectUid, environmentUid, data) {
70
+ const response = await this.http.post(this.basePath(projectUid, environmentUid), data);
71
+ return extractItem(response.data);
72
+ }
73
+ async getDeploymentLogs(projectUid, environmentUid, deploymentUid, options) {
74
+ const params = {};
75
+ if (options?.timestamp) params.timestamp = options.timestamp;
76
+ const response = await this.http.get(
77
+ `${this.basePath(projectUid, environmentUid)}/${deploymentUid}/logs/deployment-logs`,
78
+ Object.keys(params).length > 0 ? params : void 0
79
+ );
80
+ return extractList(response.data, "logs").items;
81
+ }
82
+ async getServerLogs(projectUid, environmentUid, deploymentUid, options) {
83
+ const params = {};
84
+ if (options?.startTime !== void 0) params.startTime = String(options.startTime);
85
+ if (options?.endTime !== void 0) params.endTime = String(options.endTime);
86
+ const response = await this.http.get(
87
+ `${this.basePath(projectUid, environmentUid)}/${deploymentUid}/logs/server-logs`,
88
+ Object.keys(params).length > 0 ? params : void 0
89
+ );
90
+ return extractList(response.data, "logs").items;
91
+ }
92
+ async getUploadUrl(projectUid, environmentUid) {
93
+ const response = await this.http.get(
94
+ `${this.basePath(projectUid, environmentUid)}/upload/signed_url`
95
+ );
96
+ return extractItem(response.data);
97
+ }
98
+ async getDownloadUrl(projectUid, environmentUid, deploymentUid) {
99
+ const response = await this.http.get(
100
+ `${this.basePath(projectUid, environmentUid)}/${deploymentUid}/download/signed_url`
101
+ );
102
+ const item = extractItem(response.data);
103
+ return item.downloadUrl;
104
+ }
105
+ };
106
+
107
+ // src/launch/environments.ts
108
+ var EnvironmentsClient = class {
109
+ constructor(http) {
110
+ this.http = http;
111
+ }
112
+ list(projectUid) {
113
+ return paginate(async (skip, limit) => {
114
+ const response = await this.http.get(`/projects/${projectUid}/environments`, {
115
+ skip: String(skip),
116
+ limit: String(limit)
117
+ });
118
+ return extractList(response.data, "environments");
119
+ });
120
+ }
121
+ async listAll(projectUid) {
122
+ return collectAll(this.list(projectUid));
123
+ }
124
+ async get(projectUid, envUid) {
125
+ const response = await this.http.get(`/projects/${projectUid}/environments/${envUid}`);
126
+ return extractItem(response.data);
127
+ }
128
+ async create(projectUid, data) {
129
+ const response = await this.http.post(`/projects/${projectUid}/environments`, data);
130
+ return extractItem(response.data);
131
+ }
132
+ async update(projectUid, envUid, data) {
133
+ const response = await this.http.put(
134
+ `/projects/${projectUid}/environments/${envUid}`,
135
+ data
136
+ );
137
+ return extractItem(response.data);
138
+ }
139
+ async delete(projectUid, envUid) {
140
+ await this.http.delete(`/projects/${projectUid}/environments/${envUid}`);
141
+ }
142
+ async revalidateCDNCache(projectUid, envUid, data) {
143
+ await this.http.post(
144
+ `/projects/${projectUid}/environments/${envUid}/revalidate-cdn-cache`,
145
+ data
146
+ );
147
+ }
148
+ async getUploadUrl(projectUid) {
149
+ const response = await this.http.get(
150
+ `/projects/${projectUid}/environments/upload/signed_url`
151
+ );
152
+ return extractItem(response.data);
153
+ }
154
+ };
155
+
156
+ // src/launch/projects.ts
157
+ var ProjectsClient = class {
158
+ constructor(http) {
159
+ this.http = http;
160
+ }
161
+ list(options) {
162
+ return paginate(
163
+ async (skip, limit) => {
164
+ const response = await this.http.get("/projects", {
165
+ skip: String(skip),
166
+ limit: String(limit)
167
+ });
168
+ return extractList(response.data, "projects");
169
+ },
170
+ { limit: options?.limit }
171
+ );
172
+ }
173
+ async listAll(options) {
174
+ return collectAll(this.list(options));
175
+ }
176
+ async get(projectUid) {
177
+ const response = await this.http.get(`/projects/${projectUid}`);
178
+ return extractItem(response.data);
179
+ }
180
+ async create(data) {
181
+ const response = await this.http.post("/projects", data);
182
+ return extractItem(response.data);
183
+ }
184
+ async update(projectUid, data) {
185
+ const response = await this.http.put(`/projects/${projectUid}`, data);
186
+ return extractItem(response.data);
187
+ }
188
+ async delete(projectUid) {
189
+ await this.http.delete(`/projects/${projectUid}`);
190
+ }
191
+ async transferGitRepository(projectUid, data) {
192
+ await this.http.patch(`/projects/${projectUid}/git-repository`, data);
193
+ }
194
+ async getUploadUrl() {
195
+ const response = await this.http.get("/projects/upload/signed_url");
196
+ return extractItem(response.data);
197
+ }
198
+ };
199
+
200
+ // src/launch/client.ts
201
+ function createLaunchClient(config) {
202
+ const endpoints = resolveEndpoints(config.region);
203
+ const headers = {
204
+ organization_uid: config.organizationUid
205
+ };
206
+ switch (config.auth.type) {
207
+ case "oauth":
208
+ headers.authorization = `Bearer ${config.auth.accessToken}`;
209
+ break;
210
+ case "authtoken":
211
+ headers.authtoken = config.auth.token;
212
+ break;
213
+ }
214
+ const http = new ContentstackHttpClient({
215
+ ...config.httpOptions,
216
+ baseUrl: config.httpOptions?.baseUrl ?? endpoints.launch,
217
+ headers: {
218
+ ...config.httpOptions?.headers,
219
+ ...headers
220
+ }
221
+ });
222
+ return {
223
+ projects: new ProjectsClient(http),
224
+ environments: new EnvironmentsClient(http),
225
+ deployments: new DeploymentsClient(http)
226
+ };
227
+ }
228
+
229
+ export {
230
+ createLaunchClient
231
+ };
232
+ //# sourceMappingURL=chunk-KLVIROVU.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/launch/response.ts","../src/launch/deployments.ts","../src/launch/environments.ts","../src/launch/projects.ts","../src/launch/client.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 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,18 @@
1
+ // src/vue/provider/context.ts
2
+ import { inject } from "vue";
3
+ var CONTENTSTACK_KEY = /* @__PURE__ */ Symbol("contentstack");
4
+ function useContentstackContext() {
5
+ const ctx = inject(CONTENTSTACK_KEY);
6
+ if (!ctx) {
7
+ throw new Error(
8
+ 'useContentstackContext must be used within a <ContentstackProvider>. Wrap your app with <ContentstackProvider :region="..." proxy-base-path="/api/cma">.'
9
+ );
10
+ }
11
+ return ctx;
12
+ }
13
+
14
+ export {
15
+ CONTENTSTACK_KEY,
16
+ useContentstackContext
17
+ };
18
+ //# sourceMappingURL=chunk-LPVVA5J3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/vue/provider/context.ts"],"sourcesContent":["import type { InjectionKey } from \"vue\"\nimport { inject } from \"vue\"\nimport type { ContentstackRegion } from \"../../index.js\"\n\nexport interface ContentstackContextValue {\n region: ContentstackRegion\n proxyBasePath: string\n apiKey?: string\n organizationUid?: string\n brandKitUid?: string\n launchProxyBasePath?: string\n brandKitProxyBasePath?: string\n}\n\nexport const CONTENTSTACK_KEY: InjectionKey<ContentstackContextValue> = Symbol(\"contentstack\")\n\n/**\n * Composable to access the Contentstack context.\n * Throws a clear error if used outside of ContentstackProvider.\n */\nexport function useContentstackContext(): ContentstackContextValue {\n const ctx = inject(CONTENTSTACK_KEY)\n if (!ctx) {\n throw new Error(\n \"useContentstackContext must be used within a <ContentstackProvider>. \" +\n 'Wrap your app with <ContentstackProvider :region=\"...\" proxy-base-path=\"/api/cma\">.',\n )\n }\n return ctx\n}\n"],"mappings":";AACA,SAAS,cAAc;AAahB,IAAM,mBAA2D,uBAAO,cAAc;AAMtF,SAAS,yBAAmD;AACjE,QAAM,MAAM,OAAO,gBAAgB;AACnC,MAAI,CAAC,KAAK;AACR,UAAM,IAAI;AAAA,MACR;AAAA,IAEF;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
@@ -0,0 +1,112 @@
1
+ // src/vue/auth/useContentstackUser.ts
2
+ import { computed, onMounted, ref } from "vue";
3
+ function useContentstackUser() {
4
+ const user = ref(null);
5
+ const loading = ref(true);
6
+ const isAuthenticated = computed(() => user.value !== null);
7
+ async function fetchSession() {
8
+ loading.value = true;
9
+ try {
10
+ const res = await fetch("/api/auth/session");
11
+ if (!res.ok) {
12
+ user.value = null;
13
+ return;
14
+ }
15
+ const data = await res.json();
16
+ if (data?.user) {
17
+ user.value = {
18
+ uid: data.user.uid ?? data.user.id ?? "",
19
+ email: data.user.email ?? "",
20
+ firstName: data.user.firstName ?? data.user.name?.split(" ")[0],
21
+ lastName: data.user.lastName ?? data.user.name?.split(" ").slice(1).join(" "),
22
+ username: data.user.username,
23
+ profileImage: data.user.profileImage ?? data.user.image
24
+ };
25
+ } else {
26
+ user.value = null;
27
+ }
28
+ } catch {
29
+ user.value = null;
30
+ } finally {
31
+ loading.value = false;
32
+ }
33
+ }
34
+ onMounted(() => {
35
+ fetchSession();
36
+ });
37
+ return { user, loading, isAuthenticated };
38
+ }
39
+
40
+ // src/vue/auth/ContentstackLoginButton.ts
41
+ import { defineComponent, h } from "vue";
42
+ var ContentstackLoginButton = defineComponent({
43
+ name: "ContentstackLoginButton",
44
+ props: {
45
+ scopes: {
46
+ type: Array,
47
+ default: void 0
48
+ },
49
+ redirectTo: {
50
+ type: String,
51
+ default: void 0
52
+ },
53
+ class: {
54
+ type: String,
55
+ default: void 0
56
+ }
57
+ },
58
+ setup(props, { slots }) {
59
+ return () => h("form", { action: "/api/auth/signin/contentstack", method: "POST" }, [
60
+ props.redirectTo ? h("input", { type: "hidden", name: "callbackUrl", value: props.redirectTo }) : null,
61
+ h(
62
+ "button",
63
+ { type: "submit", class: props.class },
64
+ slots.default?.() ?? "Sign in with Contentstack"
65
+ )
66
+ ]);
67
+ }
68
+ });
69
+
70
+ // src/vue/auth/ContentstackLogoutButton.ts
71
+ import { defineComponent as defineComponent2, h as h2 } from "vue";
72
+ var ContentstackLogoutButton = defineComponent2({
73
+ name: "ContentstackLogoutButton",
74
+ props: {
75
+ redirectTo: {
76
+ type: String,
77
+ default: void 0
78
+ },
79
+ class: {
80
+ type: String,
81
+ default: void 0
82
+ }
83
+ },
84
+ setup(props, { slots }) {
85
+ return () => h2("form", { action: "/api/auth/signout", method: "POST" }, [
86
+ props.redirectTo ? h2("input", { type: "hidden", name: "callbackUrl", value: props.redirectTo }) : null,
87
+ h2("button", { type: "submit", class: props.class }, slots.default?.() ?? "Sign out")
88
+ ]);
89
+ }
90
+ });
91
+
92
+ // src/vue/auth/ContentstackAuthGuard.ts
93
+ import { defineComponent as defineComponent3, h as h3 } from "vue";
94
+ var ContentstackAuthGuard = defineComponent3({
95
+ name: "ContentstackAuthGuard",
96
+ setup(_props, { slots }) {
97
+ const { isAuthenticated, loading } = useContentstackUser();
98
+ return () => {
99
+ if (loading.value) return slots.loading?.() ?? null;
100
+ if (isAuthenticated.value) return slots.default?.();
101
+ return slots.fallback?.() ?? h3(ContentstackLoginButton);
102
+ };
103
+ }
104
+ });
105
+
106
+ export {
107
+ useContentstackUser,
108
+ ContentstackLoginButton,
109
+ ContentstackLogoutButton,
110
+ ContentstackAuthGuard
111
+ };
112
+ //# sourceMappingURL=chunk-NKLOZ5VI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/vue/auth/useContentstackUser.ts","../src/vue/auth/ContentstackLoginButton.ts","../src/vue/auth/ContentstackLogoutButton.ts","../src/vue/auth/ContentstackAuthGuard.ts"],"sourcesContent":["import { type Ref, computed, onMounted, ref } from \"vue\"\nimport type { ContentstackUser } from \"../../index.js\"\n\nexport interface UseContentstackUserReturn {\n user: Ref<ContentstackUser | null>\n loading: Ref<boolean>\n isAuthenticated: Ref<boolean>\n}\n\nexport function useContentstackUser(): UseContentstackUserReturn {\n const user = ref<ContentstackUser | null>(null)\n const loading = ref(true)\n const isAuthenticated = computed(() => user.value !== null)\n\n async function fetchSession() {\n loading.value = true\n try {\n const res = await fetch(\"/api/auth/session\")\n if (!res.ok) {\n user.value = null\n return\n }\n const data = await res.json()\n if (data?.user) {\n user.value = {\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 user.value = null\n }\n } catch {\n user.value = null\n } finally {\n loading.value = false\n }\n }\n\n onMounted(() => {\n fetchSession()\n })\n\n return { user, loading, isAuthenticated }\n}\n","import { type PropType, defineComponent, h } from \"vue\"\n\nexport const ContentstackLoginButton = defineComponent({\n name: \"ContentstackLoginButton\",\n props: {\n scopes: {\n type: Array as PropType<string[]>,\n default: undefined,\n },\n redirectTo: {\n type: String,\n default: undefined,\n },\n class: {\n type: String,\n default: undefined,\n },\n },\n setup(props, { slots }) {\n return () =>\n h(\"form\", { action: \"/api/auth/signin/contentstack\", method: \"POST\" }, [\n props.redirectTo\n ? h(\"input\", { type: \"hidden\", name: \"callbackUrl\", value: props.redirectTo })\n : null,\n h(\n \"button\",\n { type: \"submit\", class: props.class },\n slots.default?.() ?? \"Sign in with Contentstack\",\n ),\n ])\n },\n})\n","import { defineComponent, h } from \"vue\"\n\nexport const ContentstackLogoutButton = defineComponent({\n name: \"ContentstackLogoutButton\",\n props: {\n redirectTo: {\n type: String,\n default: undefined,\n },\n class: {\n type: String,\n default: undefined,\n },\n },\n setup(props, { slots }) {\n return () =>\n h(\"form\", { action: \"/api/auth/signout\", method: \"POST\" }, [\n props.redirectTo\n ? h(\"input\", { type: \"hidden\", name: \"callbackUrl\", value: props.redirectTo })\n : null,\n h(\"button\", { type: \"submit\", class: props.class }, slots.default?.() ?? \"Sign out\"),\n ])\n },\n})\n","import { defineComponent, h } from \"vue\"\nimport { ContentstackLoginButton } from \"./ContentstackLoginButton\"\nimport { useContentstackUser } from \"./useContentstackUser\"\n\nexport const ContentstackAuthGuard = defineComponent({\n name: \"ContentstackAuthGuard\",\n setup(_props, { slots }) {\n const { isAuthenticated, loading } = useContentstackUser()\n\n return () => {\n if (loading.value) return slots.loading?.() ?? null\n if (isAuthenticated.value) return slots.default?.()\n return slots.fallback?.() ?? h(ContentstackLoginButton)\n }\n },\n})\n"],"mappings":"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","names":["defineComponent","h","defineComponent","h","defineComponent","h"]}
@@ -0,0 +1,7 @@
1
+ // src/ui/css/index.ts
2
+ var CSS_TOKENS_PATH = "@timbenniks/contentstack-platform-sdk/ui/tokens.css";
3
+
4
+ export {
5
+ CSS_TOKENS_PATH
6
+ };
7
+ //# sourceMappingURL=chunk-QGA4WBDC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/css/index.ts"],"sourcesContent":["/**\n * Import path for the CSS tokens file.\n *\n * @example\n * ```ts\n * // In a bundler that supports CSS imports:\n * import \"@timbenniks/contentstack-platform-sdk/ui/tokens.css\"\n *\n * // Or reference the path programmatically:\n * import { CSS_TOKENS_PATH } from \"@timbenniks/contentstack-platform-sdk/ui/css\"\n * ```\n */\nexport const CSS_TOKENS_PATH = \"@timbenniks/contentstack-platform-sdk/ui/tokens.css\"\n"],"mappings":";AAYO,IAAM,kBAAkB;","names":[]}
@@ -0,0 +1,56 @@
1
+ import {
2
+ CONTENTSTACK_KEY
3
+ } from "./chunk-LPVVA5J3.mjs";
4
+
5
+ // src/vue/provider/ContentstackProvider.ts
6
+ import { defineComponent, provide } from "vue";
7
+ var ContentstackProvider = defineComponent({
8
+ name: "ContentstackProvider",
9
+ props: {
10
+ region: {
11
+ type: String,
12
+ required: true
13
+ },
14
+ proxyBasePath: {
15
+ type: String,
16
+ default: "/api/cma"
17
+ },
18
+ apiKey: {
19
+ type: String,
20
+ default: void 0
21
+ },
22
+ organizationUid: {
23
+ type: String,
24
+ default: void 0
25
+ },
26
+ brandKitUid: {
27
+ type: String,
28
+ default: void 0
29
+ },
30
+ launchProxyBasePath: {
31
+ type: String,
32
+ default: "/api/launch"
33
+ },
34
+ brandKitProxyBasePath: {
35
+ type: String,
36
+ default: "/api/brandkit"
37
+ }
38
+ },
39
+ setup(props, { slots }) {
40
+ provide(CONTENTSTACK_KEY, {
41
+ region: props.region,
42
+ proxyBasePath: props.proxyBasePath,
43
+ apiKey: props.apiKey,
44
+ organizationUid: props.organizationUid,
45
+ brandKitUid: props.brandKitUid,
46
+ launchProxyBasePath: props.launchProxyBasePath,
47
+ brandKitProxyBasePath: props.brandKitProxyBasePath
48
+ });
49
+ return () => slots.default?.();
50
+ }
51
+ });
52
+
53
+ export {
54
+ ContentstackProvider
55
+ };
56
+ //# sourceMappingURL=chunk-QW7TVYOA.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/vue/provider/ContentstackProvider.ts"],"sourcesContent":["import { type PropType, defineComponent, h, provide } from \"vue\"\nimport type { ContentstackRegion } from \"../../index.js\"\nimport { CONTENTSTACK_KEY, type ContentstackContextValue } from \"./context\"\n\nexport const ContentstackProvider = defineComponent({\n name: \"ContentstackProvider\",\n props: {\n region: {\n type: String as PropType<ContentstackRegion>,\n required: true,\n },\n proxyBasePath: {\n type: String,\n default: \"/api/cma\",\n },\n apiKey: {\n type: String,\n default: undefined,\n },\n organizationUid: {\n type: String,\n default: undefined,\n },\n brandKitUid: {\n type: String,\n default: undefined,\n },\n launchProxyBasePath: {\n type: String,\n default: \"/api/launch\",\n },\n brandKitProxyBasePath: {\n type: String,\n default: \"/api/brandkit\",\n },\n },\n setup(props, { slots }) {\n provide<ContentstackContextValue>(CONTENTSTACK_KEY, {\n region: props.region,\n proxyBasePath: props.proxyBasePath,\n apiKey: props.apiKey,\n organizationUid: props.organizationUid,\n brandKitUid: props.brandKitUid,\n launchProxyBasePath: props.launchProxyBasePath,\n brandKitProxyBasePath: props.brandKitProxyBasePath,\n })\n\n return () => slots.default?.()\n },\n})\n"],"mappings":";;;;;AAAA,SAAwB,iBAAoB,eAAe;AAIpD,IAAM,uBAAuB,gBAAgB;AAAA,EAClD,MAAM;AAAA,EACN,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IACA,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,qBAAqB;AAAA,MACnB,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,uBAAuB;AAAA,MACrB,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAM,OAAO,EAAE,MAAM,GAAG;AACtB,YAAkC,kBAAkB;AAAA,MAClD,QAAQ,MAAM;AAAA,MACd,eAAe,MAAM;AAAA,MACrB,QAAQ,MAAM;AAAA,MACd,iBAAiB,MAAM;AAAA,MACvB,aAAa,MAAM;AAAA,MACnB,qBAAqB,MAAM;AAAA,MAC3B,uBAAuB,MAAM;AAAA,IAC/B,CAAC;AAED,WAAO,MAAM,MAAM,UAAU;AAAA,EAC/B;AACF,CAAC;","names":[]}
@@ -0,0 +1,83 @@
1
+ import {
2
+ contentstackAuthCallbacks,
3
+ createAuthProvider,
4
+ getUser
5
+ } from "./chunk-VW7DD6HV.mjs";
6
+ import {
7
+ ContentstackAuthError
8
+ } from "./chunk-DMERADWM.mjs";
9
+
10
+ // src/server/middleware/auth.ts
11
+ async function createContentstackAuth(config) {
12
+ const { default: NextAuth } = await import("next-auth");
13
+ const oauthConfig = {
14
+ region: config.region,
15
+ appId: config.appId,
16
+ clientId: config.clientId,
17
+ clientSecret: config.clientSecret,
18
+ scopes: config.scopes,
19
+ redirectUri: "auto"
20
+ };
21
+ const provider = createAuthProvider(oauthConfig);
22
+ const baseCallbacks = contentstackAuthCallbacks(oauthConfig);
23
+ const callbacks = {
24
+ async jwt(params) {
25
+ const token = await baseCallbacks.jwt(params);
26
+ if (params.account && config.onSignIn) {
27
+ try {
28
+ const user = await getUser(config.region, token.accessToken);
29
+ const tokens = {
30
+ accessToken: token.accessToken,
31
+ refreshToken: token.refreshToken,
32
+ expiresIn: Math.floor((token.accessTokenExpiresAt - Date.now()) / 1e3),
33
+ tokenType: "Bearer"
34
+ };
35
+ await config.onSignIn(user, tokens);
36
+ } catch {
37
+ }
38
+ }
39
+ return token;
40
+ },
41
+ session: baseCallbacks.session
42
+ };
43
+ return NextAuth({
44
+ providers: [provider],
45
+ callbacks,
46
+ secret: config.secret,
47
+ trustHost: config.trustHost ?? true,
48
+ session: { strategy: "jwt" },
49
+ pages: {
50
+ signIn: config.signInPage ?? "/login",
51
+ error: config.errorPage ?? "/login"
52
+ }
53
+ });
54
+ }
55
+
56
+ // src/server/middleware/session.ts
57
+ async function getSession(authFn) {
58
+ const session = await authFn();
59
+ if (!session?.accessToken) return null;
60
+ return { accessToken: session.accessToken, user: session.user };
61
+ }
62
+ async function requireSession(authFn, redirectTo) {
63
+ const session = await getSession(authFn);
64
+ if (!session) {
65
+ throw new ContentstackAuthError(
66
+ redirectTo ? `Authentication required. Redirect to: ${redirectTo}` : "Authentication required",
67
+ { status: 401 }
68
+ );
69
+ }
70
+ return session;
71
+ }
72
+ async function getAccessToken(authFn) {
73
+ const session = await authFn();
74
+ return session?.accessToken ?? null;
75
+ }
76
+
77
+ export {
78
+ createContentstackAuth,
79
+ getSession,
80
+ requireSession,
81
+ getAccessToken
82
+ };
83
+ //# sourceMappingURL=chunk-SU5QEKYW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/middleware/auth.ts","../src/server/middleware/session.ts"],"sourcesContent":["import { contentstackAuthCallbacks, createAuthProvider, getUser } from \"../../index.js\"\nimport type { OAuthMiddlewareConfig } from \"./types.js\"\n\n/**\n * Create a complete Auth.js v5 (NextAuth) configuration for Contentstack OAuth.\n *\n * This wraps NextAuth with all Contentstack-specific config baked in, reducing\n * ~150 lines of Auth.js configuration down to ~10 lines.\n *\n * Requires `next-auth@>=5.0.0-beta.0` as an installed peer dependency.\n *\n * @example\n * ```ts\n * import { createContentstackAuth } from \"@timbenniks/contentstack-platform-sdk/server/middleware\"\n *\n * const { handlers, auth, signIn, signOut } = await createContentstackAuth({\n * region: \"us\",\n * appId: \"your-app-uid\",\n * clientId: \"your-client-id\",\n * clientSecret: \"your-client-secret\",\n * scopes: [\"user:read\"],\n * secret: process.env.AUTH_SECRET!,\n * })\n *\n * // app/api/auth/[...nextauth]/route.ts\n * export const { GET, POST } = handlers\n * ```\n */\nexport async function createContentstackAuth(config: OAuthMiddlewareConfig) {\n // Dynamic import — next-auth is an optional peer dependency.\n // This prevents module resolution errors when importing the middleware\n // module in environments where next-auth is not installed.\n const { default: NextAuth } = await import(\"next-auth\")\n\n const oauthConfig = {\n region: config.region,\n appId: config.appId,\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n scopes: config.scopes,\n redirectUri: \"auto\",\n }\n\n const provider = createAuthProvider(oauthConfig)\n const baseCallbacks = contentstackAuthCallbacks(oauthConfig)\n\n const callbacks = {\n async jwt(params: {\n token: Record<string, unknown>\n account?: Record<string, unknown> | null\n }) {\n const token = await baseCallbacks.jwt(params)\n\n // Call onSignIn on initial sign-in (account is only present once)\n if (params.account && config.onSignIn) {\n try {\n const user = await getUser(config.region, token.accessToken as string)\n const tokens = {\n accessToken: token.accessToken as string,\n refreshToken: token.refreshToken as string,\n expiresIn: Math.floor(((token.accessTokenExpiresAt as number) - Date.now()) / 1000),\n tokenType: \"Bearer\",\n }\n await config.onSignIn(user, tokens)\n } catch {\n // onSignIn errors should not block authentication\n }\n }\n\n return token\n },\n session: baseCallbacks.session,\n }\n\n // The core package returns generic `Record<string, unknown>` for framework\n // independence. Cast to `never` at the NextAuth boundary — the shape is\n // guaranteed correct by createAuthProvider/contentstackAuthCallbacks.\n return NextAuth({\n providers: [provider as never],\n callbacks: callbacks as never,\n secret: config.secret,\n trustHost: config.trustHost ?? true,\n session: { strategy: \"jwt\" as const },\n pages: {\n signIn: config.signInPage ?? \"/login\",\n error: config.errorPage ?? \"/login\",\n },\n })\n}\n","import { ContentstackAuthError } from \"../../index.js\"\nimport type { AuthFn, ContentstackSession } from \"./types.js\"\n\n/**\n * Get the current Contentstack session.\n *\n * @param authFn - Framework-agnostic auth function (e.g., the `auth()` function from NextAuth)\n * @returns The session with `accessToken`, or `null` if unauthenticated.\n */\nexport async function getSession(authFn: AuthFn): Promise<ContentstackSession | null> {\n const session = await authFn()\n if (!session?.accessToken) return null\n return { accessToken: session.accessToken, user: session.user }\n}\n\n/**\n * Require an authenticated Contentstack session.\n * Throws `ContentstackAuthError` if no session or no access token is present.\n *\n * @param authFn - Framework-agnostic auth function\n * @param redirectTo - Optional redirect path included in the error for the caller to use\n * @returns The session with a guaranteed `accessToken`.\n */\nexport async function requireSession(\n authFn: AuthFn,\n redirectTo?: string,\n): Promise<ContentstackSession> {\n const session = await getSession(authFn)\n if (!session) {\n throw new ContentstackAuthError(\n redirectTo\n ? `Authentication required. Redirect to: ${redirectTo}`\n : \"Authentication required\",\n { status: 401 },\n )\n }\n return session\n}\n\n/**\n * Get the OAuth access token from the current session.\n *\n * @param authFn - Framework-agnostic auth function\n * @returns The access token string, or `null` if unauthenticated.\n */\nexport async function getAccessToken(authFn: AuthFn): Promise<string | null> {\n const session = await authFn()\n return session?.accessToken ?? null\n}\n"],"mappings":";;;;;;;;;;AA4BA,eAAsB,uBAAuB,QAA+B;AAI1E,QAAM,EAAE,SAAS,SAAS,IAAI,MAAM,OAAO,WAAW;AAEtD,QAAM,cAAc;AAAA,IAClB,QAAQ,OAAO;AAAA,IACf,OAAO,OAAO;AAAA,IACd,UAAU,OAAO;AAAA,IACjB,cAAc,OAAO;AAAA,IACrB,QAAQ,OAAO;AAAA,IACf,aAAa;AAAA,EACf;AAEA,QAAM,WAAW,mBAAmB,WAAW;AAC/C,QAAM,gBAAgB,0BAA0B,WAAW;AAE3D,QAAM,YAAY;AAAA,IAChB,MAAM,IAAI,QAGP;AACD,YAAM,QAAQ,MAAM,cAAc,IAAI,MAAM;AAG5C,UAAI,OAAO,WAAW,OAAO,UAAU;AACrC,YAAI;AACF,gBAAM,OAAO,MAAM,QAAQ,OAAO,QAAQ,MAAM,WAAqB;AACrE,gBAAM,SAAS;AAAA,YACb,aAAa,MAAM;AAAA,YACnB,cAAc,MAAM;AAAA,YACpB,WAAW,KAAK,OAAQ,MAAM,uBAAkC,KAAK,IAAI,KAAK,GAAI;AAAA,YAClF,WAAW;AAAA,UACb;AACA,gBAAM,OAAO,SAAS,MAAM,MAAM;AAAA,QACpC,QAAQ;AAAA,QAER;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,IACA,SAAS,cAAc;AAAA,EACzB;AAKA,SAAO,SAAS;AAAA,IACd,WAAW,CAAC,QAAiB;AAAA,IAC7B;AAAA,IACA,QAAQ,OAAO;AAAA,IACf,WAAW,OAAO,aAAa;AAAA,IAC/B,SAAS,EAAE,UAAU,MAAe;AAAA,IACpC,OAAO;AAAA,MACL,QAAQ,OAAO,cAAc;AAAA,MAC7B,OAAO,OAAO,aAAa;AAAA,IAC7B;AAAA,EACF,CAAC;AACH;;;AC/EA,eAAsB,WAAW,QAAqD;AACpF,QAAM,UAAU,MAAM,OAAO;AAC7B,MAAI,CAAC,SAAS,YAAa,QAAO;AAClC,SAAO,EAAE,aAAa,QAAQ,aAAa,MAAM,QAAQ,KAAK;AAChE;AAUA,eAAsB,eACpB,QACA,YAC8B;AAC9B,QAAM,UAAU,MAAM,WAAW,MAAM;AACvC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI;AAAA,MACR,aACI,yCAAyC,UAAU,KACnD;AAAA,MACJ,EAAE,QAAQ,IAAI;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AACT;AAQA,eAAsB,eAAe,QAAwC;AAC3E,QAAM,UAAU,MAAM,OAAO;AAC7B,SAAO,SAAS,eAAe;AACjC;","names":[]}