@sitecore-content-sdk/core 1.3.0-canary.9 → 1.4.0-canary.2

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 (342) hide show
  1. package/README.md +7 -7
  2. package/dist/cjs/cache-client.js +55 -54
  3. package/dist/cjs/client/constants.js +7 -7
  4. package/dist/cjs/client/edge-proxy.js +24 -22
  5. package/dist/cjs/client/index.js +15 -15
  6. package/dist/cjs/client/models.js +2 -2
  7. package/dist/cjs/client/sitecore-client.js +421 -419
  8. package/dist/cjs/client/utils.js +47 -46
  9. package/dist/cjs/config/define-config.js +194 -193
  10. package/dist/cjs/config/index.js +7 -7
  11. package/dist/cjs/config/models.js +12 -11
  12. package/dist/cjs/config-cli/define-cli-config.js +23 -22
  13. package/dist/cjs/config-cli/index.js +7 -7
  14. package/dist/cjs/config-cli/models.js +8 -7
  15. package/dist/cjs/constants.js +49 -17
  16. package/dist/cjs/debug.js +48 -46
  17. package/dist/cjs/editing/codegen/index.js +14 -9
  18. package/dist/cjs/editing/codegen/preview.js +277 -193
  19. package/dist/cjs/editing/component-layout-service.js +62 -61
  20. package/dist/cjs/editing/design-library.js +183 -126
  21. package/dist/cjs/editing/editing-service.js +75 -74
  22. package/dist/cjs/editing/index.js +33 -27
  23. package/dist/cjs/editing/metadata.js +42 -42
  24. package/dist/cjs/editing/models.js +44 -38
  25. package/dist/cjs/editing/utils.js +108 -90
  26. package/dist/cjs/form/form.js +81 -78
  27. package/dist/cjs/form/index.js +7 -7
  28. package/dist/cjs/graphql-request-client.js +108 -107
  29. package/dist/cjs/i18n/dictionary-service.js +122 -121
  30. package/dist/cjs/i18n/index.js +7 -7
  31. package/dist/cjs/i18n/utils.js +16 -15
  32. package/dist/cjs/index.js +60 -60
  33. package/dist/cjs/layout/content-styles.js +72 -71
  34. package/dist/cjs/layout/index.js +24 -24
  35. package/dist/cjs/layout/layout-service.js +62 -57
  36. package/dist/cjs/layout/models.js +39 -34
  37. package/dist/cjs/layout/themes.js +76 -75
  38. package/dist/cjs/layout/utils.js +117 -110
  39. package/dist/cjs/media/index.js +38 -38
  40. package/dist/cjs/media/media-api.js +100 -96
  41. package/dist/cjs/models.js +2 -2
  42. package/dist/cjs/native-fetcher.js +194 -179
  43. package/dist/cjs/personalize/index.js +15 -15
  44. package/dist/cjs/personalize/layout-personalizer.js +98 -97
  45. package/dist/cjs/personalize/personalize-service.js +98 -94
  46. package/dist/cjs/personalize/utils.js +143 -136
  47. package/dist/cjs/retries.js +43 -42
  48. package/dist/cjs/site/error-pages-service.js +65 -64
  49. package/dist/cjs/site/index.js +26 -26
  50. package/dist/cjs/site/models.js +2 -2
  51. package/dist/cjs/site/redirects-service.js +94 -81
  52. package/dist/cjs/site/robots-service.js +66 -65
  53. package/dist/cjs/site/site-resolver.js +73 -72
  54. package/dist/cjs/site/siteinfo-service.js +84 -80
  55. package/dist/cjs/site/sitemap-xml-service.js +84 -83
  56. package/dist/cjs/site/sitepath-service.js +165 -164
  57. package/dist/cjs/site/utils.js +55 -47
  58. package/dist/cjs/sitecore-service-base.js +36 -36
  59. package/dist/cjs/tools/auth/flow.js +65 -64
  60. package/dist/cjs/tools/auth/index.js +5 -5
  61. package/dist/cjs/tools/auth/models.js +2 -2
  62. package/dist/cjs/tools/auth/tenant-store.js +38 -38
  63. package/dist/cjs/tools/codegen/component-generation.js +52 -50
  64. package/dist/cjs/tools/codegen/extract-files.js +105 -107
  65. package/dist/cjs/tools/codegen/import-map.js +401 -349
  66. package/dist/cjs/tools/codegen/utils.js +418 -418
  67. package/dist/cjs/tools/generate-map.js +2 -2
  68. package/dist/cjs/tools/generateMetadata.js +36 -35
  69. package/dist/cjs/tools/generateSites.js +59 -58
  70. package/dist/cjs/tools/index.js +75 -73
  71. package/dist/cjs/tools/scaffold.js +60 -59
  72. package/dist/cjs/tools/templating/components.js +96 -266
  73. package/dist/cjs/tools/templating/index.js +11 -14
  74. package/dist/cjs/tools/templating/plugins.js +80 -78
  75. package/dist/cjs/tools/templating/utils.js +67 -66
  76. package/dist/cjs/utils/ensurePath.js +20 -20
  77. package/dist/cjs/utils/env.js +28 -27
  78. package/dist/cjs/utils/globalCache.js +55 -0
  79. package/dist/cjs/utils/index.js +26 -21
  80. package/dist/cjs/utils/is-server.js +11 -10
  81. package/dist/cjs/utils/normalize-url.js +5 -5
  82. package/dist/cjs/utils/timeout-promise.js +31 -31
  83. package/dist/cjs/utils/utils.js +254 -229
  84. package/dist/esm/cache-client.js +51 -50
  85. package/dist/esm/client/constants.js +4 -4
  86. package/dist/esm/client/edge-proxy.js +19 -17
  87. package/dist/esm/client/index.js +5 -5
  88. package/dist/esm/client/models.js +1 -1
  89. package/dist/esm/client/sitecore-client.js +414 -412
  90. package/dist/esm/client/utils.js +43 -42
  91. package/dist/esm/config/define-config.js +188 -187
  92. package/dist/esm/config/index.js +2 -2
  93. package/dist/esm/config/models.js +9 -8
  94. package/dist/esm/config-cli/define-cli-config.js +19 -18
  95. package/dist/esm/config-cli/index.js +2 -2
  96. package/dist/esm/config-cli/models.js +5 -4
  97. package/dist/esm/constants.js +46 -14
  98. package/dist/esm/debug.js +41 -39
  99. package/dist/esm/editing/codegen/index.js +1 -1
  100. package/dist/esm/editing/codegen/preview.js +263 -185
  101. package/dist/esm/editing/component-layout-service.js +55 -54
  102. package/dist/esm/editing/design-library.js +171 -117
  103. package/dist/esm/editing/editing-service.js +68 -67
  104. package/dist/esm/editing/index.js +6 -5
  105. package/dist/esm/editing/metadata.js +39 -39
  106. package/dist/esm/editing/models.js +41 -35
  107. package/dist/esm/editing/utils.js +98 -80
  108. package/dist/esm/form/form.js +72 -69
  109. package/dist/esm/form/index.js +1 -1
  110. package/dist/esm/graphql-request-client.js +101 -100
  111. package/dist/esm/i18n/dictionary-service.js +115 -114
  112. package/dist/esm/i18n/index.js +2 -2
  113. package/dist/esm/i18n/utils.js +13 -12
  114. package/dist/esm/index.js +13 -13
  115. package/dist/esm/layout/content-styles.js +64 -63
  116. package/dist/esm/layout/index.js +6 -6
  117. package/dist/esm/layout/layout-service.js +55 -50
  118. package/dist/esm/layout/models.js +36 -31
  119. package/dist/esm/layout/themes.js +71 -70
  120. package/dist/esm/layout/utils.js +109 -102
  121. package/dist/esm/media/index.js +2 -2
  122. package/dist/esm/media/media-api.js +90 -86
  123. package/dist/esm/models.js +1 -1
  124. package/dist/esm/native-fetcher.js +187 -172
  125. package/dist/esm/personalize/index.js +3 -3
  126. package/dist/esm/personalize/layout-personalizer.js +93 -92
  127. package/dist/esm/personalize/personalize-service.js +91 -87
  128. package/dist/esm/personalize/utils.js +135 -128
  129. package/dist/esm/retries.js +39 -38
  130. package/dist/esm/site/error-pages-service.js +58 -57
  131. package/dist/esm/site/index.js +8 -8
  132. package/dist/esm/site/models.js +1 -1
  133. package/dist/esm/site/redirects-service.js +87 -74
  134. package/dist/esm/site/robots-service.js +59 -58
  135. package/dist/esm/site/site-resolver.js +69 -68
  136. package/dist/esm/site/siteinfo-service.js +77 -73
  137. package/dist/esm/site/sitemap-xml-service.js +77 -76
  138. package/dist/esm/site/sitepath-service.js +157 -156
  139. package/dist/esm/site/utils.js +49 -41
  140. package/dist/esm/sitecore-service-base.js +29 -29
  141. package/dist/esm/tools/auth/flow.js +62 -61
  142. package/dist/esm/tools/auth/index.js +1 -1
  143. package/dist/esm/tools/auth/models.js +1 -1
  144. package/dist/esm/tools/auth/tenant-store.js +35 -35
  145. package/dist/esm/tools/codegen/component-generation.js +44 -42
  146. package/dist/esm/tools/codegen/extract-files.js +99 -101
  147. package/dist/esm/tools/codegen/import-map.js +358 -306
  148. package/dist/esm/tools/codegen/utils.js +373 -373
  149. package/dist/esm/tools/generate-map.js +1 -1
  150. package/dist/esm/tools/generateMetadata.js +29 -28
  151. package/dist/esm/tools/generateSites.js +52 -51
  152. package/dist/esm/tools/index.js +28 -27
  153. package/dist/esm/tools/scaffold.js +52 -51
  154. package/dist/esm/tools/templating/components.js +59 -223
  155. package/dist/esm/tools/templating/index.js +3 -3
  156. package/dist/esm/tools/templating/plugins.js +72 -70
  157. package/dist/esm/tools/templating/utils.js +59 -58
  158. package/dist/esm/utils/ensurePath.js +13 -13
  159. package/dist/esm/utils/env.js +24 -23
  160. package/dist/esm/utils/globalCache.js +49 -0
  161. package/dist/esm/utils/index.js +4 -3
  162. package/dist/esm/utils/is-server.js +9 -8
  163. package/dist/esm/utils/normalize-url.js +1 -1
  164. package/dist/esm/utils/timeout-promise.js +28 -28
  165. package/dist/esm/utils/utils.js +238 -213
  166. package/package.json +73 -5
  167. package/types/cache-client.d.ts +68 -64
  168. package/types/cache-client.d.ts.map +1 -0
  169. package/types/client/constants.d.ts +5 -4
  170. package/types/client/constants.d.ts.map +1 -0
  171. package/types/client/edge-proxy.d.ts +18 -15
  172. package/types/client/edge-proxy.d.ts.map +1 -0
  173. package/types/client/index.d.ts +8 -7
  174. package/types/client/index.d.ts.map +1 -0
  175. package/types/client/models.d.ts +21 -19
  176. package/types/client/models.d.ts.map +1 -0
  177. package/types/client/sitecore-client.d.ts +338 -327
  178. package/types/client/sitecore-client.d.ts.map +1 -0
  179. package/types/client/utils.d.ts +15 -9
  180. package/types/client/utils.d.ts.map +1 -0
  181. package/types/config/define-config.d.ts +20 -18
  182. package/types/config/define-config.d.ts.map +1 -0
  183. package/types/config/index.d.ts +3 -2
  184. package/types/config/index.d.ts.map +1 -0
  185. package/types/config/models.d.ts +287 -268
  186. package/types/config/models.d.ts.map +1 -0
  187. package/types/config-cli/define-cli-config.d.ts +9 -7
  188. package/types/config-cli/define-cli-config.d.ts.map +1 -0
  189. package/types/config-cli/index.d.ts +3 -2
  190. package/types/config-cli/index.d.ts.map +1 -0
  191. package/types/config-cli/models.d.ts +6 -4
  192. package/types/config-cli/models.d.ts.map +1 -0
  193. package/types/constants.d.ts +44 -11
  194. package/types/constants.d.ts.map +1 -0
  195. package/types/debug.d.ts +35 -28
  196. package/types/debug.d.ts.map +1 -0
  197. package/types/editing/codegen/index.d.ts +2 -1
  198. package/types/editing/codegen/index.d.ts.map +1 -0
  199. package/types/editing/codegen/preview.d.ts +256 -195
  200. package/types/editing/codegen/preview.d.ts.map +1 -0
  201. package/types/editing/component-layout-service.d.ts +84 -80
  202. package/types/editing/component-layout-service.d.ts.map +1 -0
  203. package/types/editing/design-library.d.ts +111 -63
  204. package/types/editing/design-library.d.ts.map +1 -0
  205. package/types/editing/editing-service.d.ts +72 -62
  206. package/types/editing/editing-service.d.ts.map +1 -0
  207. package/types/editing/index.d.ts +7 -6
  208. package/types/editing/index.d.ts.map +1 -0
  209. package/types/editing/metadata.d.ts +8 -7
  210. package/types/editing/metadata.d.ts.map +1 -0
  211. package/types/editing/models.d.ts +103 -92
  212. package/types/editing/models.d.ts.map +1 -0
  213. package/types/editing/utils.d.ts +91 -74
  214. package/types/editing/utils.d.ts.map +1 -0
  215. package/types/form/form.d.ts +25 -21
  216. package/types/form/form.d.ts.map +1 -0
  217. package/types/form/index.d.ts +2 -1
  218. package/types/form/index.d.ts.map +1 -0
  219. package/types/graphql-request-client.d.ts +112 -105
  220. package/types/graphql-request-client.d.ts.map +1 -0
  221. package/types/i18n/dictionary-service.d.ts +135 -131
  222. package/types/i18n/dictionary-service.d.ts.map +1 -0
  223. package/types/i18n/index.d.ts +3 -2
  224. package/types/i18n/index.d.ts.map +1 -0
  225. package/types/i18n/utils.d.ts +9 -7
  226. package/types/i18n/utils.d.ts.map +1 -0
  227. package/types/index.d.ts +13 -12
  228. package/types/index.d.ts.map +1 -0
  229. package/types/layout/content-styles.d.ts +20 -18
  230. package/types/layout/content-styles.d.ts.map +1 -0
  231. package/types/layout/index.d.ts +6 -5
  232. package/types/layout/index.d.ts.map +1 -0
  233. package/types/layout/layout-service.d.ts +45 -35
  234. package/types/layout/layout-service.d.ts.map +1 -0
  235. package/types/layout/models.d.ts +174 -151
  236. package/types/layout/models.d.ts.map +1 -0
  237. package/types/layout/themes.d.ts +13 -11
  238. package/types/layout/themes.d.ts.map +1 -0
  239. package/types/layout/utils.d.ts +56 -41
  240. package/types/layout/utils.d.ts.map +1 -0
  241. package/types/media/index.d.ts +3 -2
  242. package/types/media/index.d.ts.map +1 -0
  243. package/types/media/media-api.d.ts +60 -55
  244. package/types/media/media-api.d.ts.map +1 -0
  245. package/types/models.d.ts +94 -84
  246. package/types/models.d.ts.map +1 -0
  247. package/types/native-fetcher.d.ts +124 -114
  248. package/types/native-fetcher.d.ts.map +1 -0
  249. package/types/personalize/index.d.ts +4 -3
  250. package/types/personalize/index.d.ts.map +1 -0
  251. package/types/personalize/layout-personalizer.d.ts +29 -27
  252. package/types/personalize/layout-personalizer.d.ts.map +1 -0
  253. package/types/personalize/personalize-service.d.ts +90 -80
  254. package/types/personalize/personalize-service.d.ts.map +1 -0
  255. package/types/personalize/utils.d.ts +78 -69
  256. package/types/personalize/utils.d.ts.map +1 -0
  257. package/types/retries.d.ts +26 -24
  258. package/types/retries.d.ts.map +1 -0
  259. package/types/site/error-pages-service.d.ts +64 -57
  260. package/types/site/error-pages-service.d.ts.map +1 -0
  261. package/types/site/index.d.ts +10 -9
  262. package/types/site/index.d.ts.map +1 -0
  263. package/types/site/models.d.ts +23 -18
  264. package/types/site/models.d.ts.map +1 -0
  265. package/types/site/redirects-service.d.ts +92 -69
  266. package/types/site/redirects-service.d.ts.map +1 -0
  267. package/types/site/robots-service.d.ts +57 -50
  268. package/types/site/robots-service.d.ts.map +1 -0
  269. package/types/site/site-resolver.d.ts +28 -26
  270. package/types/site/site-resolver.d.ts.map +1 -0
  271. package/types/site/siteinfo-service.d.ts +65 -52
  272. package/types/site/siteinfo-service.d.ts.map +1 -0
  273. package/types/site/sitemap-xml-service.d.ts +63 -56
  274. package/types/site/sitemap-xml-service.d.ts.map +1 -0
  275. package/types/site/sitepath-service.d.ts +137 -134
  276. package/types/site/sitepath-service.d.ts.map +1 -0
  277. package/types/site/utils.d.ts +41 -28
  278. package/types/site/utils.d.ts.map +1 -0
  279. package/types/sitecore-service-base.d.ts +31 -30
  280. package/types/sitecore-service-base.d.ts.map +1 -0
  281. package/types/tools/auth/flow.d.ts +29 -27
  282. package/types/tools/auth/flow.d.ts.map +1 -0
  283. package/types/tools/auth/index.d.ts +2 -1
  284. package/types/tools/auth/index.d.ts.map +1 -0
  285. package/types/tools/auth/models.d.ts +35 -33
  286. package/types/tools/auth/models.d.ts.map +1 -0
  287. package/types/tools/auth/tenant-store.d.ts +12 -11
  288. package/types/tools/auth/tenant-store.d.ts.map +1 -0
  289. package/types/tools/codegen/component-generation.d.ts +50 -47
  290. package/types/tools/codegen/component-generation.d.ts.map +1 -0
  291. package/types/tools/codegen/extract-files.d.ts +24 -22
  292. package/types/tools/codegen/extract-files.d.ts.map +1 -0
  293. package/types/tools/codegen/import-map.d.ts +103 -70
  294. package/types/tools/codegen/import-map.d.ts.map +1 -0
  295. package/types/tools/codegen/utils.d.ts +76 -75
  296. package/types/tools/codegen/utils.d.ts.map +1 -0
  297. package/types/tools/generate-map.d.ts +36 -26
  298. package/types/tools/generate-map.d.ts.map +1 -0
  299. package/types/tools/generateMetadata.d.ts +24 -22
  300. package/types/tools/generateMetadata.d.ts.map +1 -0
  301. package/types/tools/generateSites.d.ts +25 -22
  302. package/types/tools/generateSites.d.ts.map +1 -0
  303. package/types/tools/index.d.ts +22 -20
  304. package/types/tools/index.d.ts.map +1 -0
  305. package/types/tools/scaffold.d.ts +27 -25
  306. package/types/tools/scaffold.d.ts.map +1 -0
  307. package/types/tools/templating/components.d.ts +104 -103
  308. package/types/tools/templating/components.d.ts.map +1 -0
  309. package/types/tools/templating/index.d.ts +4 -3
  310. package/types/tools/templating/index.d.ts.map +1 -0
  311. package/types/tools/templating/plugins.d.ts +71 -67
  312. package/types/tools/templating/plugins.d.ts.map +1 -0
  313. package/types/tools/templating/utils.d.ts +42 -40
  314. package/types/tools/templating/utils.d.ts.map +1 -0
  315. package/types/utils/ensurePath.d.ts +7 -6
  316. package/types/utils/ensurePath.d.ts.map +1 -0
  317. package/types/utils/env.d.ts +9 -7
  318. package/types/utils/env.d.ts.map +1 -0
  319. package/types/utils/globalCache.d.ts +37 -0
  320. package/types/utils/globalCache.d.ts.map +1 -0
  321. package/types/utils/index.d.ts +5 -3
  322. package/types/utils/index.d.ts.map +1 -0
  323. package/types/utils/is-server.d.ts +8 -6
  324. package/types/utils/is-server.d.ts.map +1 -0
  325. package/types/utils/normalize-url.d.ts +2 -1
  326. package/types/utils/normalize-url.d.ts.map +1 -0
  327. package/types/utils/timeout-promise.d.ts +18 -17
  328. package/types/utils/timeout-promise.d.ts.map +1 -0
  329. package/types/utils/utils.d.ts +104 -79
  330. package/types/utils/utils.d.ts.map +1 -0
  331. package/client.js +0 -1
  332. package/codegen.js +0 -1
  333. package/config-cli.js +0 -1
  334. package/config.js +0 -1
  335. package/editing.js +0 -1
  336. package/i18n.js +0 -1
  337. package/layout.js +0 -1
  338. package/media.js +0 -1
  339. package/personalize.js +0 -1
  340. package/site.js +0 -1
  341. package/tools.js +0 -1
  342. package/utils.js +0 -1
@@ -1,64 +1,65 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.unitMocks = exports.clientCredentialsFlow = void 0;
4
- const tenant_store_1 = require("./tenant-store");
5
- const constants_1 = require("../../constants");
6
- const GRANT_TYPE = 'client_credentials';
7
- /**
8
- * Performs the OAuth 2.0 client credentials flow to obtain a JWT access token
9
- * from the Sitecore Identity Provider using the provided client credentials.
10
- * @param {object} [args] - The arguments for client credentials flow
11
- * @param {string} [args.clientId] - The client ID registered with Sitecore Identity
12
- * @param {string} [args.clientSecret] - The client secret associated with the client ID
13
- * @param {string} [args.organizationId] - The ID of the organization the client belongs to
14
- * @param {string} [args.tenantId] - The tenant ID representing the specific Sitecore environment
15
- * @param {string} [args.audience] - The API audience the token is intended for. Defaults to `constants.DEFAULT_SITECORE_AUTH_AUDIENCE`
16
- * @param {string} [args.authority] - The auth server base URL. Defaults to `constants.DEFAULT_SITECORE_AUTH_DOMAIN`
17
- * @param {string} [args.baseUrl] - The base URL for the API, used to construct the audience. Defaults to `constants.DEFAULT_SITECORE_AUTH_BASE_URL`
18
- * @returns A Promise that resolves to the access token response (including access token, token type, expiry, etc.)
19
- * @throws Will log and exit the process if the request fails or returns a non-OK status
20
- */
21
- exports.clientCredentialsFlow = _clientCredentialsFlow;
22
- // mock setup for unit tests to make sinon happy and mock-able with esbuild/tsx
23
- // https://sinonjs.org/how-to/typescript-swc/
24
- // This, plus the `_` names make the exports writable for sinon
25
- exports.unitMocks = {
26
- set clientCredentialsFlow(mockImplementation) {
27
- exports.clientCredentialsFlow = mockImplementation;
28
- },
29
- get clientCredentialsFlow() {
30
- return _clientCredentialsFlow;
31
- },
32
- };
33
- async function _clientCredentialsFlow({ clientId, clientSecret, organizationId, tenantId, audience = constants_1.DEFAULT_SITECORE_AUTH_AUDIENCE, authority = constants_1.DEFAULT_SITECORE_AUTH_DOMAIN, baseUrl = constants_1.DEFAULT_SITECORE_AUTH_BASE_URL, }) {
34
- const params = new URLSearchParams({
35
- client_id: clientId,
36
- client_secret: clientSecret !== null && clientSecret !== void 0 ? clientSecret : '',
37
- organization_id: organizationId !== null && organizationId !== void 0 ? organizationId : '',
38
- tenant_id: tenantId !== null && tenantId !== void 0 ? tenantId : '',
39
- audience,
40
- grant_type: GRANT_TYPE,
41
- baseUrl: baseUrl !== null && baseUrl !== void 0 ? baseUrl : '',
42
- });
43
- const response = await fetch(`${authority}/oauth/token`, {
44
- method: 'POST',
45
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
46
- body: params.toString(),
47
- });
48
- const data = await response.json();
49
- if (!response.ok) {
50
- throw new Error(data.error_description || data.error || 'Error during client credentials flow');
51
- }
52
- const decodedPayload = (0, tenant_store_1.decodeJwtPayload)(data.access_token) || {};
53
- if (!(decodedPayload === null || decodedPayload === void 0 ? void 0 : decodedPayload.tokenTenantId) || !decodedPayload.tokenOrgId) {
54
- throw new Error('\n Token is missing required claims tenant_id or org_id.');
55
- }
56
- const { tokenTenantId, tokenOrgId, tokenTenantName } = decodedPayload;
57
- if (tenantId && tenantId !== tokenTenantId) {
58
- throw new Error('\n Mismatch: Provided tenant ID does not match claims tenant ID.');
59
- }
60
- if (organizationId && organizationId !== tokenOrgId) {
61
- throw new Error('\n Mismatch: Provided organization ID does not match claims organization ID.');
62
- }
63
- return { data, tokenOrgId, tokenTenantId, tokenTenantName, accessToken: data.access_token };
64
- }
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.unitMocks = exports.clientCredentialsFlow = void 0;
4
+ const tenant_store_1 = require("./tenant-store");
5
+ const constants_1 = require("../../constants");
6
+ const GRANT_TYPE = 'client_credentials';
7
+ /**
8
+ * Performs the OAuth 2.0 client credentials flow to obtain a JWT access token
9
+ * from the Sitecore Identity Provider using the provided client credentials.
10
+ * @param {object} [args] - The arguments for client credentials flow
11
+ * @param {string} [args.clientId] - The client ID registered with Sitecore Identity
12
+ * @param {string} [args.clientSecret] - The client secret associated with the client ID
13
+ * @param {string} [args.organizationId] - The ID of the organization the client belongs to
14
+ * @param {string} [args.tenantId] - The tenant ID representing the specific Sitecore environment
15
+ * @param {string} [args.audience] - The API audience the token is intended for. Defaults to `constants.DEFAULT_SITECORE_AUTH_AUDIENCE`
16
+ * @param {string} [args.authority] - The auth server base URL. Defaults to `constants.DEFAULT_SITECORE_AUTH_DOMAIN`
17
+ * @param {string} [args.baseUrl] - The base URL for the API, used to construct the audience. Defaults to `constants.DEFAULT_SITECORE_AUTH_BASE_URL`
18
+ * @returns A Promise that resolves to the access token response (including access token, token type, expiry, etc.)
19
+ * @throws Will log and exit the process if the request fails or returns a non-OK status
20
+ * @public
21
+ */
22
+ exports.clientCredentialsFlow = _clientCredentialsFlow;
23
+ // mock setup for unit tests to make sinon happy and mock-able with esbuild/tsx
24
+ // https://sinonjs.org/how-to/typescript-swc/
25
+ // This, plus the `_` names make the exports writable for sinon
26
+ exports.unitMocks = {
27
+ set clientCredentialsFlow(mockImplementation) {
28
+ exports.clientCredentialsFlow = mockImplementation;
29
+ },
30
+ get clientCredentialsFlow() {
31
+ return _clientCredentialsFlow;
32
+ },
33
+ };
34
+ async function _clientCredentialsFlow({ clientId, clientSecret, organizationId, tenantId, audience = constants_1.DEFAULT_SITECORE_AUTH_AUDIENCE, authority = constants_1.DEFAULT_SITECORE_AUTH_DOMAIN, baseUrl = constants_1.DEFAULT_SITECORE_AUTH_BASE_URL, }) {
35
+ const params = new URLSearchParams({
36
+ client_id: clientId,
37
+ client_secret: clientSecret !== null && clientSecret !== void 0 ? clientSecret : '',
38
+ organization_id: organizationId !== null && organizationId !== void 0 ? organizationId : '',
39
+ tenant_id: tenantId !== null && tenantId !== void 0 ? tenantId : '',
40
+ audience,
41
+ grant_type: GRANT_TYPE,
42
+ baseUrl: baseUrl !== null && baseUrl !== void 0 ? baseUrl : '',
43
+ });
44
+ const response = await fetch(`${authority}/oauth/token`, {
45
+ method: 'POST',
46
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
47
+ body: params.toString(),
48
+ });
49
+ const data = await response.json();
50
+ if (!response.ok) {
51
+ throw new Error(data.error_description || data.error || 'Error during client credentials flow');
52
+ }
53
+ const decodedPayload = (0, tenant_store_1.decodeJwtPayload)(data.access_token) || {};
54
+ if (!(decodedPayload === null || decodedPayload === void 0 ? void 0 : decodedPayload.tokenTenantId) || !decodedPayload.tokenOrgId) {
55
+ throw new Error('\n Token is missing required claims tenant_id or org_id.');
56
+ }
57
+ const { tokenTenantId, tokenOrgId, tokenTenantName } = decodedPayload;
58
+ if (tenantId && tenantId !== tokenTenantId) {
59
+ throw new Error('\n Mismatch: Provided tenant ID does not match claims tenant ID.');
60
+ }
61
+ if (organizationId && organizationId !== tokenOrgId) {
62
+ throw new Error('\n Mismatch: Provided organization ID does not match claims organization ID.');
63
+ }
64
+ return { data, tokenOrgId, tokenTenantId, tokenTenantName, accessToken: data.access_token };
65
+ }
@@ -1,5 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.clientCredentialsFlow = void 0;
4
- var flow_1 = require("./flow");
5
- Object.defineProperty(exports, "clientCredentialsFlow", { enumerable: true, get: function () { return flow_1.clientCredentialsFlow; } });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clientCredentialsFlow = void 0;
4
+ var flow_1 = require("./flow");
5
+ Object.defineProperty(exports, "clientCredentialsFlow", { enumerable: true, get: function () { return flow_1.clientCredentialsFlow; } });
@@ -1,2 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,38 +1,38 @@
1
- "use strict";
2
- /* eslint-disable jsdoc/require-jsdoc */
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.unitMocks = exports.decodeJwtPayload = void 0;
5
- const constants_1 = require("./../../constants");
6
- /**
7
- * Decodes a JWT without verifying its signature.
8
- * @param {string} token - The access token string.
9
- * @returns Decoded payload object or null if invalid.
10
- */
11
- exports.decodeJwtPayload = _decodeJwtPayload;
12
- // mock setup for unit tests to make sinon happy and mock-able with esbuild/tsx
13
- // https://sinonjs.org/how-to/typescript-swc/
14
- // This, plus the `_` names make the exports writable for sinon
15
- exports.unitMocks = {
16
- set decodeJwtPayload(mockImplementation) {
17
- exports.decodeJwtPayload = mockImplementation;
18
- },
19
- get decodeJwtPayload() {
20
- return _decodeJwtPayload;
21
- },
22
- };
23
- function _decodeJwtPayload(token) {
24
- try {
25
- const base64Payload = token.split('.')[1];
26
- const payload = Buffer.from(base64Payload, 'base64').toString('utf-8');
27
- const decoded = JSON.parse(payload);
28
- return {
29
- tokenTenantId: decoded === null || decoded === void 0 ? void 0 : decoded[`${constants_1.CLAIMS}/tenant_id`],
30
- tokenOrgId: decoded === null || decoded === void 0 ? void 0 : decoded[`${constants_1.CLAIMS}/org_id`],
31
- tokenTenantName: decoded === null || decoded === void 0 ? void 0 : decoded[`${constants_1.CLAIMS}/tenant_name`],
32
- };
33
- }
34
- catch (error) {
35
- console.error('\n Failed to decode access token:', error.message);
36
- return null;
37
- }
38
- }
1
+ "use strict";
2
+ /* eslint-disable jsdoc/require-jsdoc */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.unitMocks = exports.decodeJwtPayload = void 0;
5
+ const constants_1 = require("./../../constants");
6
+ /**
7
+ * Decodes a JWT without verifying its signature.
8
+ * @param {string} token - The access token string.
9
+ * @returns Decoded payload object or null if invalid.
10
+ */
11
+ exports.decodeJwtPayload = _decodeJwtPayload;
12
+ // mock setup for unit tests to make sinon happy and mock-able with esbuild/tsx
13
+ // https://sinonjs.org/how-to/typescript-swc/
14
+ // This, plus the `_` names make the exports writable for sinon
15
+ exports.unitMocks = {
16
+ set decodeJwtPayload(mockImplementation) {
17
+ exports.decodeJwtPayload = mockImplementation;
18
+ },
19
+ get decodeJwtPayload() {
20
+ return _decodeJwtPayload;
21
+ },
22
+ };
23
+ function _decodeJwtPayload(token) {
24
+ try {
25
+ const base64Payload = token.split('.')[1];
26
+ const payload = Buffer.from(base64Payload, 'base64').toString('utf-8');
27
+ const decoded = JSON.parse(payload);
28
+ return {
29
+ tokenTenantId: decoded === null || decoded === void 0 ? void 0 : decoded[`${constants_1.CLAIMS}/tenant_id`],
30
+ tokenOrgId: decoded === null || decoded === void 0 ? void 0 : decoded[`${constants_1.CLAIMS}/org_id`],
31
+ tokenTenantName: decoded === null || decoded === void 0 ? void 0 : decoded[`${constants_1.CLAIMS}/tenant_name`],
32
+ };
33
+ }
34
+ catch (error) {
35
+ console.error('\n Failed to decode access token:', error.message);
36
+ return null;
37
+ }
38
+ }
@@ -1,50 +1,52 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getComponentSpec = exports.getComponentSpecUrl = void 0;
7
- const constants_1 = require("../../constants");
8
- const debug_1 = __importDefault(require("./../../debug"));
9
- /**
10
- * Gets the component spec url.
11
- * @param {GetComponentSpecParams} params - The parameters for getting the component spec url.
12
- * @returns {string} The component spec url.
13
- */
14
- const getComponentSpecUrl = ({ componentId, edgeUrl = constants_1.SITECORE_EDGE_URL_DEFAULT, targetPath, token, }) => {
15
- let url = `${edgeUrl}/authoring/api/v1/components/generated/${componentId}?token=${token}`;
16
- if (targetPath) {
17
- url += `&targetPath=${encodeURIComponent(targetPath)}`;
18
- }
19
- return url;
20
- };
21
- exports.getComponentSpecUrl = getComponentSpecUrl;
22
- /**
23
- * Fetches the component spec.
24
- * @param {GetComponentSpecParams} params - The parameters for fetching the component spec.
25
- * @returns {Promise<ComponentSpec>} The component spec.
26
- */
27
- const getComponentSpec = async ({ componentId, edgeUrl = constants_1.SITECORE_EDGE_URL_DEFAULT, targetPath, token, }) => {
28
- const url = (0, exports.getComponentSpecUrl)({ componentId, edgeUrl, targetPath, token });
29
- debug_1.default.common('Fetching component spec for %s: %s', componentId, url);
30
- try {
31
- const response = await fetch(url);
32
- if (response.status === 404) {
33
- throw new Error(`Component '${componentId}' was not found. Please verify the component ID is correct and exists.`);
34
- }
35
- if (response.status === 401) {
36
- throw new Error('The token is incorrect or expired or the component ID is incorrect.');
37
- }
38
- if (!response.ok) {
39
- throw new Error(`Failed to fetch component ${componentId}`);
40
- }
41
- const spec = await response.json();
42
- debug_1.default.common('Component spec fetched successfully for %s: %o', componentId, spec);
43
- return spec;
44
- }
45
- catch (error) {
46
- debug_1.default.common('Failed to fetch component spec: %s', String(error));
47
- throw error;
48
- }
49
- };
50
- exports.getComponentSpec = getComponentSpec;
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getComponentSpec = exports.getComponentSpecUrl = void 0;
7
+ const constants_1 = require("../../constants");
8
+ const debug_1 = __importDefault(require("./../../debug"));
9
+ /**
10
+ * Gets the component spec url.
11
+ * @param {GetComponentSpecParams} params - The parameters for getting the component spec url.
12
+ * @returns {string} The component spec url.
13
+ * @internal
14
+ */
15
+ const getComponentSpecUrl = ({ componentId, edgeUrl = constants_1.SITECORE_EDGE_URL_DEFAULT, targetPath, token, }) => {
16
+ let url = `${edgeUrl}/authoring/api/v1/components/generated/${componentId}?token=${token}`;
17
+ if (targetPath) {
18
+ url += `&targetPath=${encodeURIComponent(targetPath)}`;
19
+ }
20
+ return url;
21
+ };
22
+ exports.getComponentSpecUrl = getComponentSpecUrl;
23
+ /**
24
+ * Fetches the component spec.
25
+ * @param {GetComponentSpecParams} params - The parameters for fetching the component spec.
26
+ * @returns {Promise<ComponentSpec>} The component spec.
27
+ * @internal
28
+ */
29
+ const getComponentSpec = async ({ componentId, edgeUrl = constants_1.SITECORE_EDGE_URL_DEFAULT, targetPath, token, }) => {
30
+ const url = (0, exports.getComponentSpecUrl)({ componentId, edgeUrl, targetPath, token });
31
+ debug_1.default.common('Fetching component spec for %s: %s', componentId, url);
32
+ try {
33
+ const response = await fetch(url);
34
+ if (response.status === 404) {
35
+ throw new Error(`Component '${componentId}' was not found. Please verify the component ID is correct and exists.`);
36
+ }
37
+ if (response.status === 401) {
38
+ throw new Error('The token is incorrect or expired or the component ID is incorrect.');
39
+ }
40
+ if (!response.ok) {
41
+ throw new Error(`Failed to fetch component ${componentId}`);
42
+ }
43
+ const spec = await response.json();
44
+ debug_1.default.common('Component spec fetched successfully for %s: %o', componentId, spec);
45
+ return spec;
46
+ }
47
+ catch (error) {
48
+ debug_1.default.common('Failed to fetch component spec: %s', String(error));
49
+ throw error;
50
+ }
51
+ };
52
+ exports.getComponentSpec = getComponentSpec;
@@ -1,107 +1,105 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.unitMocks = exports.extractFiles = void 0;
7
- /* eslint-disable jsdoc/require-jsdoc */
8
- const chalk_1 = __importDefault(require("chalk"));
9
- const utils_1 = require("./utils");
10
- const tools_1 = require("../../tools");
11
- const debug_1 = __importDefault(require("./../../debug"));
12
- const path_1 = __importDefault(require("path"));
13
- const fs_1 = __importDefault(require("fs"));
14
- /**
15
- * Extracts components from the app folder and sends them to XMCloud.
16
- * @param {ExtractFilesConfig} args - Config for components extraction
17
- */
18
- exports.extractFiles = _extractFiles;
19
- // mock setup for unit tests to make sinon happy and mock-able with esbuild/tsx
20
- // https://sinonjs.org/how-to/typescript-swc/
21
- // This, plus the `_` names make the exports writable for sinon
22
- exports.unitMocks = {
23
- set extractFiles(mockImplementation) {
24
- exports.extractFiles = mockImplementation;
25
- },
26
- get extractFiles() {
27
- return _extractFiles;
28
- },
29
- };
30
- function _extractFiles(args = {}) {
31
- const authParams = {
32
- clientId: process.env.SITECORE_AUTH_CLIENT_ID || '',
33
- clientSecret: process.env.SITECORE_AUTH_CLIENT_SECRET || '',
34
- authority: process.env.SITECORE_AUTH_AUTHORITY,
35
- audience: process.env.SITECORE_AUTH_AUDIENCE,
36
- };
37
- return async ({ scConfig } = {}) => {
38
- var _a;
39
- const config = (_a = args.scConfig) !== null && _a !== void 0 ? _a : scConfig;
40
- if (!config) {
41
- throw new Error('Sitecore configuration is required to be provided');
42
- }
43
- if ((args.customValidateDeployContext && !args.customValidateDeployContext()) ||
44
- !(0, utils_1.validateDeployContext)()) {
45
- debug_1.default.common('Skipping code extraction, not in deploy context');
46
- return;
47
- }
48
- if (config.disableCodeGeneration) {
49
- debug_1.default.common('Skipping code extraction, code generation has been disabled');
50
- return;
51
- }
52
- console.log(chalk_1.default.green('Code extraction started'));
53
- const basePath = process.cwd();
54
- try {
55
- // Use Edge Platform mesh endpoint - staging is ready, prod QA in progress
56
- const targetUrl = config.api.edge.edgeUrl;
57
- const { accessToken } = await tools_1.auth.clientCredentialsFlow(authParams);
58
- if (!accessToken) {
59
- console.error(chalk_1.default.red('Failed to get access token, aborting code extraction'));
60
- return;
61
- }
62
- // Resolve files from component-map
63
- const resolvedImports = await (0, utils_1.resolveComponentImportFiles)(basePath, args.componentMapPath);
64
- const clientComponentMapPath = args.clientComponentMapPath || '.sitecore/component-map.client.ts';
65
- const absClientMapPath = path_1.default.isAbsolute(clientComponentMapPath)
66
- ? clientComponentMapPath
67
- : path_1.default.resolve(basePath, clientComponentMapPath);
68
- const exists = fs_1.default.existsSync(absClientMapPath);
69
- if (exists) {
70
- resolvedImports.push(...(await (0, utils_1.resolveComponentImportFiles)(basePath, absClientMapPath)));
71
- }
72
- const fileDispatches = [];
73
- for (const { componentKey, filePath, fileType } of resolvedImports) {
74
- let extraLabels;
75
- // return an array of export names (e.g., ['Default','Cooler'])
76
- const variantNames = (0, utils_1.readNamedExports)(filePath);
77
- extraLabels = Object.assign({}, (variantNames.length ? { variantNames } : {}));
78
- fileDispatches.push((0, utils_1.sendCode)({
79
- file: {
80
- name: componentKey,
81
- path: filePath,
82
- type: fileType,
83
- labels: extraLabels,
84
- },
85
- token: accessToken,
86
- targetUrl,
87
- }));
88
- }
89
- fileDispatches.push((0, utils_1.sendCode)({
90
- file: {
91
- name: 'package.json',
92
- path: path_1.default.resolve(basePath, './package.json'),
93
- type: utils_1.ExtractedFileType.PackageJson,
94
- },
95
- token: accessToken,
96
- targetUrl,
97
- }));
98
- const files = await Promise.all(fileDispatches);
99
- console.log(chalk_1.default.green(`Code extraction completed successfully, files extracted:\r\n${files
100
- .filter((file) => file !== null)
101
- .join('\r\n')}`));
102
- }
103
- catch (error) {
104
- console.warn(chalk_1.default.yellow('Error during code extraction:', error, error.stack));
105
- }
106
- };
107
- }
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.unitMocks = exports.extractFiles = void 0;
7
+ /* eslint-disable jsdoc/require-jsdoc */
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const utils_1 = require("./utils");
10
+ const tools_1 = require("../../tools");
11
+ const debug_1 = __importDefault(require("./../../debug"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const fs_1 = __importDefault(require("fs"));
14
+ /**
15
+ * Extracts components from the app folder and sends them to XMCloud.
16
+ * @param {ExtractFilesConfig} args - Config for components extraction
17
+ * @public
18
+ */
19
+ exports.extractFiles = _extractFiles;
20
+ // mock setup for unit tests to make sinon happy and mock-able with esbuild/tsx
21
+ // https://sinonjs.org/how-to/typescript-swc/
22
+ // This, plus the `_` names make the exports writable for sinon
23
+ exports.unitMocks = {
24
+ set extractFiles(mockImplementation) {
25
+ exports.extractFiles = mockImplementation;
26
+ },
27
+ get extractFiles() {
28
+ return _extractFiles;
29
+ },
30
+ };
31
+ function _extractFiles(args = {}) {
32
+ const authParams = {
33
+ clientId: process.env.SITECORE_AUTH_CLIENT_ID || '',
34
+ clientSecret: process.env.SITECORE_AUTH_CLIENT_SECRET || '',
35
+ authority: process.env.SITECORE_AUTH_AUTHORITY,
36
+ audience: process.env.SITECORE_AUTH_AUDIENCE,
37
+ };
38
+ const renderingHost = process.env.SITECORE_RENDERINGHOST_NAME;
39
+ return async ({ scConfig } = {}) => {
40
+ var _a;
41
+ const config = (_a = args.scConfig) !== null && _a !== void 0 ? _a : scConfig;
42
+ if (!config) {
43
+ throw new Error('Sitecore configuration is required to be provided');
44
+ }
45
+ if ((args.customValidateDeployContext && !args.customValidateDeployContext()) ||
46
+ !(0, utils_1.validateDeployContext)()) {
47
+ debug_1.default.common('Skipping code extraction, not in deploy context');
48
+ return;
49
+ }
50
+ if (config.disableCodeGeneration) {
51
+ debug_1.default.common('Skipping code extraction, code generation has been disabled');
52
+ return;
53
+ }
54
+ console.log(chalk_1.default.green('Code extraction started'));
55
+ const basePath = process.cwd();
56
+ try {
57
+ // Use Edge Platform mesh endpoint - staging is ready, prod QA in progress
58
+ const targetUrl = config.api.edge.edgeUrl;
59
+ const { accessToken } = await tools_1.auth.clientCredentialsFlow(authParams);
60
+ if (!accessToken) {
61
+ console.error(chalk_1.default.red('Failed to get access token, aborting code extraction'));
62
+ return;
63
+ }
64
+ // Resolve files from component-map
65
+ const resolvedImports = await (0, utils_1.resolveComponentImportFiles)(basePath, args.componentMapPath);
66
+ const clientComponentMapPath = args.clientComponentMapPath || '.sitecore/component-map.client.ts';
67
+ const absClientMapPath = path_1.default.isAbsolute(clientComponentMapPath)
68
+ ? clientComponentMapPath
69
+ : path_1.default.resolve(basePath, clientComponentMapPath);
70
+ const exists = fs_1.default.existsSync(absClientMapPath);
71
+ if (exists) {
72
+ resolvedImports.push(...(await (0, utils_1.resolveComponentImportFiles)(basePath, absClientMapPath)));
73
+ }
74
+ const fileDispatches = [];
75
+ for (const { componentKey, filePath, fileType } of resolvedImports) {
76
+ let extraLabels;
77
+ // return an array of export names (e.g., ['Default','Cooler'])
78
+ const variantNames = (0, utils_1.readNamedExports)(filePath);
79
+ extraLabels = Object.assign(Object.assign({}, (variantNames.length ? { variantNames } : {})), (renderingHost ? { renderingHost } : {}));
80
+ fileDispatches.push((0, utils_1.sendCode)({
81
+ file: {
82
+ labels: extraLabels,
83
+ name: componentKey,
84
+ path: filePath,
85
+ type: fileType,
86
+ },
87
+ targetUrl,
88
+ token: accessToken,
89
+ }));
90
+ }
91
+ fileDispatches.push((0, utils_1.sendCode)({
92
+ file: Object.assign(Object.assign({}, (renderingHost ? { labels: { renderingHost } } : {})), { name: 'package.json', path: path_1.default.resolve(basePath, './package.json'), type: utils_1.ExtractedFileType.PackageJson }),
93
+ targetUrl,
94
+ token: accessToken,
95
+ }));
96
+ const files = await Promise.all(fileDispatches);
97
+ console.log(chalk_1.default.green(`Code extraction completed successfully, files extracted:\r\n${files
98
+ .filter((file) => file !== null)
99
+ .join('\r\n')}`));
100
+ }
101
+ catch (error) {
102
+ console.warn(chalk_1.default.yellow('Error during code extraction:', error, error.stack));
103
+ }
104
+ };
105
+ }