@makeswift/runtime 0.25.0-canary.13 → 0.25.0-canary.14

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 (274) hide show
  1. package/dist/cjs/api/site-version/index.js +103 -0
  2. package/dist/cjs/api/site-version/index.js.map +1 -0
  3. package/dist/cjs/api-handler/handlers/manifest.js +2 -3
  4. package/dist/cjs/api-handler/handlers/manifest.js.map +1 -1
  5. package/dist/cjs/api-handler/handlers/{clear-draft.js → redirect-live.js} +19 -10
  6. package/dist/cjs/api-handler/handlers/redirect-live.js.map +1 -0
  7. package/dist/cjs/api-handler/index.js +6 -5
  8. package/dist/cjs/api-handler/index.js.map +1 -1
  9. package/dist/cjs/api-handler/request-response.js +9 -0
  10. package/dist/cjs/api-handler/request-response.js.map +1 -1
  11. package/dist/cjs/client/index.js +67 -59
  12. package/dist/cjs/client/index.js.map +1 -1
  13. package/dist/cjs/components/builtin/Root/Root.js +4 -4
  14. package/dist/cjs/components/builtin/Root/Root.js.map +1 -1
  15. package/dist/cjs/components/builtin/Video/Video.js +3 -13
  16. package/dist/cjs/components/builtin/Video/Video.js.map +1 -1
  17. package/dist/cjs/components/hooks/useMediaQuery.js +1 -2
  18. package/dist/cjs/components/hooks/useMediaQuery.js.map +1 -1
  19. package/dist/cjs/components/shared/BackgroundsContainer/components/BackgroundVideo/index.js +3 -13
  20. package/dist/cjs/components/shared/BackgroundsContainer/components/BackgroundVideo/index.js.map +1 -1
  21. package/dist/cjs/components/shared/react-player.js +41 -0
  22. package/dist/cjs/components/shared/react-player.js.map +1 -0
  23. package/dist/cjs/next/api-handler/config/app-router.js +7 -9
  24. package/dist/cjs/next/api-handler/config/app-router.js.map +1 -1
  25. package/dist/cjs/next/api-handler/config/pages-router.js +7 -9
  26. package/dist/cjs/next/api-handler/config/pages-router.js.map +1 -1
  27. package/dist/cjs/next/api-handler/handlers/{redirect-draft.js → app-router-redirect-preview.js} +30 -26
  28. package/dist/cjs/next/api-handler/handlers/app-router-redirect-preview.js.map +1 -0
  29. package/dist/cjs/next/api-handler/handlers/{redirect-preview.js → pages-router-redirect-preview.js} +29 -22
  30. package/dist/cjs/next/api-handler/handlers/pages-router-redirect-preview.js.map +1 -0
  31. package/dist/cjs/next/api-handler/index.js +1 -1
  32. package/dist/cjs/next/api-handler/index.js.map +1 -1
  33. package/dist/cjs/next/api-handler/{draft.js → preview.js} +14 -9
  34. package/dist/cjs/next/api-handler/preview.js.map +1 -0
  35. package/dist/cjs/next/{draft-mode/index.js → app-router-site-version.js} +11 -27
  36. package/dist/cjs/next/app-router-site-version.js.map +1 -0
  37. package/dist/cjs/next/client.js +9 -3
  38. package/dist/cjs/next/client.js.map +1 -1
  39. package/dist/cjs/next/components/framework-provider/index.js.map +1 -1
  40. package/dist/cjs/next/components/page.js +1 -1
  41. package/dist/cjs/next/components/page.js.map +1 -1
  42. package/dist/cjs/next/index.js.map +1 -1
  43. package/dist/cjs/next/middleware/request-utils.js +11 -17
  44. package/dist/cjs/next/middleware/request-utils.js.map +1 -1
  45. package/dist/cjs/next/root-style-registry.js +13 -20
  46. package/dist/cjs/next/root-style-registry.js.map +1 -1
  47. package/dist/cjs/next/server.js +2 -2
  48. package/dist/cjs/next/server.js.map +1 -1
  49. package/dist/cjs/next/testing/page-rendering.js +2 -2
  50. package/dist/cjs/next/testing/page-rendering.js.map +1 -1
  51. package/dist/cjs/next/testing/react-provider.js +2 -2
  52. package/dist/cjs/next/testing/react-provider.js.map +1 -1
  53. package/dist/cjs/next/tests/test-utils.js +6 -4
  54. package/dist/cjs/next/tests/test-utils.js.map +1 -1
  55. package/dist/cjs/runtimes/react/components/RuntimeProvider.js +7 -9
  56. package/dist/cjs/runtimes/react/components/RuntimeProvider.js.map +1 -1
  57. package/dist/cjs/runtimes/react/components/framework-context.js +1 -1
  58. package/dist/cjs/runtimes/react/components/framework-context.js.map +1 -1
  59. package/dist/cjs/runtimes/react/components/page/index.js +18 -16
  60. package/dist/cjs/runtimes/react/components/page/index.js.map +1 -1
  61. package/dist/cjs/runtimes/react/components/{draft-switcher/draft-switcher.js → preview-switcher/preview-switcher.js} +12 -22
  62. package/dist/cjs/runtimes/react/components/preview-switcher/preview-switcher.js.map +1 -0
  63. package/dist/cjs/runtimes/react/components/{draft-switcher/draft-toolbar.js → preview-switcher/preview-toolbar.js} +17 -9
  64. package/dist/cjs/runtimes/react/components/preview-switcher/preview-toolbar.js.map +1 -0
  65. package/dist/cjs/runtimes/react/hooks/makeswift-api.js +9 -10
  66. package/dist/cjs/runtimes/react/hooks/makeswift-api.js.map +1 -1
  67. package/dist/cjs/runtimes/react/hooks/use-selector.js +1 -1
  68. package/dist/cjs/runtimes/react/hooks/use-selector.js.map +1 -1
  69. package/dist/cjs/runtimes/react/root-style-registry.js +24 -13
  70. package/dist/cjs/runtimes/react/root-style-registry.js.map +1 -1
  71. package/dist/cjs/{next/preview-mode.js → testing/fixtures.js} +16 -18
  72. package/dist/cjs/testing/fixtures.js.map +1 -0
  73. package/dist/cjs/utils/esm-compat.js +29 -0
  74. package/dist/cjs/utils/esm-compat.js.map +1 -0
  75. package/dist/esm/api/site-version/index.js +75 -0
  76. package/dist/esm/api/site-version/index.js.map +1 -0
  77. package/dist/esm/api-handler/handlers/manifest.js +2 -3
  78. package/dist/esm/api-handler/handlers/manifest.js.map +1 -1
  79. package/dist/esm/api-handler/handlers/redirect-live.js +26 -0
  80. package/dist/esm/api-handler/handlers/redirect-live.js.map +1 -0
  81. package/dist/esm/api-handler/index.js +7 -6
  82. package/dist/esm/api-handler/index.js.map +1 -1
  83. package/dist/esm/api-handler/request-response.js +9 -0
  84. package/dist/esm/api-handler/request-response.js.map +1 -1
  85. package/dist/esm/client/index.js +65 -58
  86. package/dist/esm/client/index.js.map +1 -1
  87. package/dist/esm/components/builtin/Root/Root.js +4 -4
  88. package/dist/esm/components/builtin/Root/Root.js.map +1 -1
  89. package/dist/esm/components/builtin/Video/Video.js +1 -1
  90. package/dist/esm/components/builtin/Video/Video.js.map +1 -1
  91. package/dist/esm/components/hooks/useMediaQuery.js +1 -2
  92. package/dist/esm/components/hooks/useMediaQuery.js.map +1 -1
  93. package/dist/esm/components/shared/BackgroundsContainer/components/BackgroundVideo/index.js +1 -1
  94. package/dist/esm/components/shared/BackgroundsContainer/components/BackgroundVideo/index.js.map +1 -1
  95. package/dist/esm/components/shared/react-player.js +7 -0
  96. package/dist/esm/components/shared/react-player.js.map +1 -0
  97. package/dist/esm/next/api-handler/config/app-router.js +7 -9
  98. package/dist/esm/next/api-handler/config/app-router.js.map +1 -1
  99. package/dist/esm/next/api-handler/config/pages-router.js +7 -9
  100. package/dist/esm/next/api-handler/config/pages-router.js.map +1 -1
  101. package/dist/esm/next/api-handler/handlers/app-router-redirect-preview.js +64 -0
  102. package/dist/esm/next/api-handler/handlers/app-router-redirect-preview.js.map +1 -0
  103. package/dist/esm/next/api-handler/handlers/pages-router-redirect-preview.js +52 -0
  104. package/dist/esm/next/api-handler/handlers/pages-router-redirect-preview.js.map +1 -0
  105. package/dist/esm/next/api-handler/index.js +1 -1
  106. package/dist/esm/next/api-handler/index.js.map +1 -1
  107. package/dist/esm/next/api-handler/preview.js +18 -0
  108. package/dist/esm/next/api-handler/preview.js.map +1 -0
  109. package/dist/esm/next/app-router-site-version.js +16 -0
  110. package/dist/esm/next/app-router-site-version.js.map +1 -0
  111. package/dist/esm/next/client.js +10 -4
  112. package/dist/esm/next/client.js.map +1 -1
  113. package/dist/esm/next/components/framework-provider/index.js.map +1 -1
  114. package/dist/esm/next/components/page.js +2 -4
  115. package/dist/esm/next/components/page.js.map +1 -1
  116. package/dist/esm/next/index.js.map +1 -1
  117. package/dist/esm/next/middleware/request-utils.js +14 -17
  118. package/dist/esm/next/middleware/request-utils.js.map +1 -1
  119. package/dist/esm/next/root-style-registry.js +12 -17
  120. package/dist/esm/next/root-style-registry.js.map +1 -1
  121. package/dist/esm/next/server.js +1 -1
  122. package/dist/esm/next/server.js.map +1 -1
  123. package/dist/esm/next/testing/page-rendering.js +2 -2
  124. package/dist/esm/next/testing/page-rendering.js.map +1 -1
  125. package/dist/esm/next/testing/react-provider.js +2 -2
  126. package/dist/esm/next/testing/react-provider.js.map +1 -1
  127. package/dist/esm/next/tests/test-utils.js +6 -4
  128. package/dist/esm/next/tests/test-utils.js.map +1 -1
  129. package/dist/esm/runtimes/react/components/RuntimeProvider.js +7 -9
  130. package/dist/esm/runtimes/react/components/RuntimeProvider.js.map +1 -1
  131. package/dist/esm/runtimes/react/components/framework-context.js +5 -2
  132. package/dist/esm/runtimes/react/components/framework-context.js.map +1 -1
  133. package/dist/esm/runtimes/react/components/page/index.js +19 -17
  134. package/dist/esm/runtimes/react/components/page/index.js.map +1 -1
  135. package/dist/esm/runtimes/react/components/{draft-switcher/draft-switcher.js → preview-switcher/preview-switcher.js} +8 -18
  136. package/dist/esm/runtimes/react/components/preview-switcher/preview-switcher.js.map +1 -0
  137. package/dist/esm/runtimes/react/components/{draft-switcher/draft-toolbar.js → preview-switcher/preview-toolbar.js} +13 -5
  138. package/dist/esm/runtimes/react/components/preview-switcher/preview-toolbar.js.map +1 -0
  139. package/dist/esm/runtimes/react/hooks/makeswift-api.js +1 -2
  140. package/dist/esm/runtimes/react/hooks/makeswift-api.js.map +1 -1
  141. package/dist/esm/runtimes/react/hooks/use-selector.js +1 -1
  142. package/dist/esm/runtimes/react/hooks/use-selector.js.map +1 -1
  143. package/dist/esm/runtimes/react/root-style-registry.js +24 -13
  144. package/dist/esm/runtimes/react/root-style-registry.js.map +1 -1
  145. package/dist/esm/testing/fixtures.js +13 -0
  146. package/dist/esm/testing/fixtures.js.map +1 -0
  147. package/dist/esm/utils/esm-compat.js +5 -0
  148. package/dist/esm/utils/esm-compat.js.map +1 -0
  149. package/dist/types/api/site-version/index.d.ts +19 -0
  150. package/dist/types/api/site-version/index.d.ts.map +1 -0
  151. package/dist/types/api/site-version/site-version.test.d.ts +2 -0
  152. package/dist/types/api/site-version/site-version.test.d.ts.map +1 -0
  153. package/dist/types/api-handler/handlers/manifest.d.ts +0 -2
  154. package/dist/types/api-handler/handlers/manifest.d.ts.map +1 -1
  155. package/dist/types/api-handler/handlers/redirect-live.d.ts +5 -0
  156. package/dist/types/api-handler/handlers/redirect-live.d.ts.map +1 -0
  157. package/dist/types/api-handler/index.d.ts +4 -4
  158. package/dist/types/api-handler/index.d.ts.map +1 -1
  159. package/dist/types/api-handler/request-response.d.ts +1 -0
  160. package/dist/types/api-handler/request-response.d.ts.map +1 -1
  161. package/dist/types/client/index.d.ts +32 -23
  162. package/dist/types/client/index.d.ts.map +1 -1
  163. package/dist/types/components/builtin/Root/Root.d.ts +1 -1
  164. package/dist/types/components/builtin/Root/Root.d.ts.map +1 -1
  165. package/dist/types/components/hooks/useMediaQuery.d.ts.map +1 -1
  166. package/dist/types/components/shared/BackgroundsContainer/components/BackgroundVideo/index.d.ts.map +1 -1
  167. package/dist/types/components/shared/react-player.d.ts +3 -0
  168. package/dist/types/components/shared/react-player.d.ts.map +1 -0
  169. package/dist/types/next/api-handler/config/app-router.d.ts +3 -2
  170. package/dist/types/next/api-handler/config/app-router.d.ts.map +1 -1
  171. package/dist/types/next/api-handler/config/pages-router.d.ts +3 -2
  172. package/dist/types/next/api-handler/config/pages-router.d.ts.map +1 -1
  173. package/dist/types/next/api-handler/handlers/app-router-redirect-preview.d.ts +5 -0
  174. package/dist/types/next/api-handler/handlers/app-router-redirect-preview.d.ts.map +1 -0
  175. package/dist/types/next/api-handler/handlers/app-router-redirect-preview.test.d.ts +2 -0
  176. package/dist/types/next/api-handler/handlers/app-router-redirect-preview.test.d.ts.map +1 -0
  177. package/dist/types/next/api-handler/handlers/pages-router-redirect-preview.d.ts +4 -0
  178. package/dist/types/next/api-handler/handlers/pages-router-redirect-preview.d.ts.map +1 -0
  179. package/dist/types/next/api-handler/preview.d.ts +11 -0
  180. package/dist/types/next/api-handler/preview.d.ts.map +1 -0
  181. package/dist/types/next/app-router-site-version.d.ts +3 -0
  182. package/dist/types/next/app-router-site-version.d.ts.map +1 -0
  183. package/dist/types/next/client.d.ts +3 -3
  184. package/dist/types/next/client.d.ts.map +1 -1
  185. package/dist/types/next/components/page.d.ts +2 -6
  186. package/dist/types/next/components/page.d.ts.map +1 -1
  187. package/dist/types/next/index.d.ts +1 -1
  188. package/dist/types/next/index.d.ts.map +1 -1
  189. package/dist/types/next/middleware/request-utils.d.ts +1 -0
  190. package/dist/types/next/middleware/request-utils.d.ts.map +1 -1
  191. package/dist/types/next/root-style-registry.d.ts +3 -12
  192. package/dist/types/next/root-style-registry.d.ts.map +1 -1
  193. package/dist/types/next/server.d.ts +1 -1
  194. package/dist/types/next/server.d.ts.map +1 -1
  195. package/dist/types/next/testing/react-provider.d.ts +3 -2
  196. package/dist/types/next/testing/react-provider.d.ts.map +1 -1
  197. package/dist/types/next/tests/server.api-handler-app-router-redirect-preview.test.d.ts +2 -0
  198. package/dist/types/next/tests/server.api-handler-app-router-redirect-preview.test.d.ts.map +1 -0
  199. package/dist/types/next/tests/server.api-handler-pages-router-redirect-preview.test.d.ts +2 -0
  200. package/dist/types/next/tests/server.api-handler-pages-router-redirect-preview.test.d.ts.map +1 -0
  201. package/dist/types/next/tests/server.api-handler-redirect-live.test.d.ts +2 -0
  202. package/dist/types/next/tests/server.api-handler-redirect-live.test.d.ts.map +1 -0
  203. package/dist/types/next/tests/test-utils.d.ts.map +1 -1
  204. package/dist/types/runtimes/react/components/RuntimeProvider.d.ts +3 -2
  205. package/dist/types/runtimes/react/components/RuntimeProvider.d.ts.map +1 -1
  206. package/dist/types/runtimes/react/components/framework-context.d.ts +2 -2
  207. package/dist/types/runtimes/react/components/framework-context.d.ts.map +1 -1
  208. package/dist/types/runtimes/react/components/page/index.d.ts +23 -3
  209. package/dist/types/runtimes/react/components/page/index.d.ts.map +1 -1
  210. package/dist/types/runtimes/react/components/preview-switcher/preview-switcher.d.ts +4 -0
  211. package/dist/types/runtimes/react/components/preview-switcher/preview-switcher.d.ts.map +1 -0
  212. package/dist/types/runtimes/react/components/preview-switcher/preview-toolbar.d.ts +2 -0
  213. package/dist/types/runtimes/react/components/preview-switcher/preview-toolbar.d.ts.map +1 -0
  214. package/dist/types/runtimes/react/hooks/makeswift-api.d.ts.map +1 -1
  215. package/dist/types/runtimes/react/hooks/use-selector.d.ts.map +1 -1
  216. package/dist/types/runtimes/react/root-style-registry.d.ts +23 -11
  217. package/dist/types/runtimes/react/root-style-registry.d.ts.map +1 -1
  218. package/dist/types/testing/fixtures.d.ts +7 -0
  219. package/dist/types/testing/fixtures.d.ts.map +1 -0
  220. package/dist/types/utils/esm-compat.d.ts +2 -0
  221. package/dist/types/utils/esm-compat.d.ts.map +1 -0
  222. package/package.json +6 -5
  223. package/dist/cjs/api/site-version.js +0 -42
  224. package/dist/cjs/api/site-version.js.map +0 -1
  225. package/dist/cjs/api-handler/handlers/clear-draft.js.map +0 -1
  226. package/dist/cjs/next/api-handler/draft.js.map +0 -1
  227. package/dist/cjs/next/api-handler/handlers/redirect-draft.js.map +0 -1
  228. package/dist/cjs/next/api-handler/handlers/redirect-preview.js.map +0 -1
  229. package/dist/cjs/next/draft-mode/index.js.map +0 -1
  230. package/dist/cjs/next/preview-mode.js.map +0 -1
  231. package/dist/cjs/runtimes/react/components/draft-switcher/draft-switcher.js.map +0 -1
  232. package/dist/cjs/runtimes/react/components/draft-switcher/draft-toolbar.js.map +0 -1
  233. package/dist/esm/api/site-version.js +0 -15
  234. package/dist/esm/api/site-version.js.map +0 -1
  235. package/dist/esm/api-handler/handlers/clear-draft.js +0 -17
  236. package/dist/esm/api-handler/handlers/clear-draft.js.map +0 -1
  237. package/dist/esm/next/api-handler/draft.js +0 -14
  238. package/dist/esm/next/api-handler/draft.js.map +0 -1
  239. package/dist/esm/next/api-handler/handlers/redirect-draft.js +0 -52
  240. package/dist/esm/next/api-handler/handlers/redirect-draft.js.map +0 -1
  241. package/dist/esm/next/api-handler/handlers/redirect-preview.js +0 -37
  242. package/dist/esm/next/api-handler/handlers/redirect-preview.js.map +0 -1
  243. package/dist/esm/next/draft-mode/index.js +0 -30
  244. package/dist/esm/next/draft-mode/index.js.map +0 -1
  245. package/dist/esm/next/preview-mode.js +0 -16
  246. package/dist/esm/next/preview-mode.js.map +0 -1
  247. package/dist/esm/runtimes/react/components/draft-switcher/draft-switcher.js.map +0 -1
  248. package/dist/esm/runtimes/react/components/draft-switcher/draft-toolbar.js.map +0 -1
  249. package/dist/types/api/site-version.d.ts +0 -7
  250. package/dist/types/api/site-version.d.ts.map +0 -1
  251. package/dist/types/api-handler/handlers/clear-draft.d.ts +0 -7
  252. package/dist/types/api-handler/handlers/clear-draft.d.ts.map +0 -1
  253. package/dist/types/next/api-handler/draft.d.ts +0 -8
  254. package/dist/types/next/api-handler/draft.d.ts.map +0 -1
  255. package/dist/types/next/api-handler/handlers/redirect-draft.d.ts +0 -6
  256. package/dist/types/next/api-handler/handlers/redirect-draft.d.ts.map +0 -1
  257. package/dist/types/next/api-handler/handlers/redirect-draft.test.d.ts +0 -2
  258. package/dist/types/next/api-handler/handlers/redirect-draft.test.d.ts.map +0 -1
  259. package/dist/types/next/api-handler/handlers/redirect-preview.d.ts +0 -5
  260. package/dist/types/next/api-handler/handlers/redirect-preview.d.ts.map +0 -1
  261. package/dist/types/next/draft-mode/index.d.ts +0 -15
  262. package/dist/types/next/draft-mode/index.d.ts.map +0 -1
  263. package/dist/types/next/preview-mode.d.ts +0 -17
  264. package/dist/types/next/preview-mode.d.ts.map +0 -1
  265. package/dist/types/next/tests/server.api-handler-clear-draft.test.d.ts +0 -2
  266. package/dist/types/next/tests/server.api-handler-clear-draft.test.d.ts.map +0 -1
  267. package/dist/types/next/tests/server.api-handler-redirect-draft.test.d.ts +0 -2
  268. package/dist/types/next/tests/server.api-handler-redirect-draft.test.d.ts.map +0 -1
  269. package/dist/types/next/tests/server.api-handler-redirect-preview.test.d.ts +0 -2
  270. package/dist/types/next/tests/server.api-handler-redirect-preview.test.d.ts.map +0 -1
  271. package/dist/types/runtimes/react/components/draft-switcher/draft-switcher.d.ts +0 -4
  272. package/dist/types/runtimes/react/components/draft-switcher/draft-switcher.d.ts.map +0 -1
  273. package/dist/types/runtimes/react/components/draft-switcher/draft-toolbar.d.ts +0 -6
  274. package/dist/types/runtimes/react/components/draft-switcher/draft-toolbar.d.ts.map +0 -1
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var site_version_exports = {};
20
+ __export(site_version_exports, {
21
+ ApiHandlerHeaders: () => ApiHandlerHeaders,
22
+ deserializeSiteVersion: () => deserializeSiteVersion,
23
+ secondsUntilSiteVersionExpiration: () => secondsUntilSiteVersionExpiration,
24
+ serializeSiteVersion: () => serializeSiteVersion,
25
+ siteVersionSchema: () => siteVersionSchema
26
+ });
27
+ module.exports = __toCommonJS(site_version_exports);
28
+ var import_zod = require("zod");
29
+ var import_jwt_decode = require("jwt-decode");
30
+ const ApiHandlerHeaders = {
31
+ SiteVersion: "X-Makeswift-Site-Version"
32
+ };
33
+ const decodedTokenPayloadSchema = import_zod.z.object({
34
+ exp: import_zod.z.number()
35
+ });
36
+ const siteVersionSchema = import_zod.z.object({
37
+ version: import_zod.z.string(),
38
+ token: import_zod.z.string()
39
+ });
40
+ function millisecondsToSeconds(ms) {
41
+ return Math.floor(ms / 1e3);
42
+ }
43
+ function serializeSiteVersion(data) {
44
+ const jsonString = JSON.stringify({ version: data.version, token: data.token });
45
+ return jsonString;
46
+ }
47
+ function parseSerializedSiteVersion(input) {
48
+ try {
49
+ return siteVersionSchema.parse(JSON.parse(input));
50
+ } catch {
51
+ console.error("Failed to parse serialized site version:", input);
52
+ return null;
53
+ }
54
+ }
55
+ function getSiteVersionTokenPayload(siteVersion) {
56
+ try {
57
+ const decoded = (0, import_jwt_decode.jwtDecode)(siteVersion.token);
58
+ return decodedTokenPayloadSchema.parse(decoded);
59
+ } catch (error) {
60
+ console.error("Invalid site version token");
61
+ throw error;
62
+ }
63
+ }
64
+ function secondsUntilTokenExpiration(tokenPayload) {
65
+ const currentTime = millisecondsToSeconds(Date.now());
66
+ return Math.max(tokenPayload.exp - currentTime, 0);
67
+ }
68
+ function secondsUntilSiteVersionExpiration(siteVersion) {
69
+ try {
70
+ const tokenPayload = getSiteVersionTokenPayload(siteVersion);
71
+ return secondsUntilTokenExpiration(tokenPayload);
72
+ } catch (error) {
73
+ console.error("Failed to check site version expiration:", error);
74
+ return 0;
75
+ }
76
+ }
77
+ function isSiteVersionExpired(siteVersion) {
78
+ return secondsUntilSiteVersionExpiration(siteVersion) <= 0;
79
+ }
80
+ function deserializeSiteVersion(input) {
81
+ try {
82
+ const parsedSiteVersion = parseSerializedSiteVersion(input);
83
+ if (parsedSiteVersion == null)
84
+ return null;
85
+ if (isSiteVersionExpired(parsedSiteVersion)) {
86
+ console.error("Site version token is expired");
87
+ return null;
88
+ }
89
+ return parsedSiteVersion;
90
+ } catch {
91
+ console.error("Failed to deserialize site version:", input);
92
+ return null;
93
+ }
94
+ }
95
+ // Annotate the CommonJS export names for ESM import in node:
96
+ 0 && (module.exports = {
97
+ ApiHandlerHeaders,
98
+ deserializeSiteVersion,
99
+ secondsUntilSiteVersionExpiration,
100
+ serializeSiteVersion,
101
+ siteVersionSchema
102
+ });
103
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/api/site-version/index.ts"],"sourcesContent":["import { z } from 'zod'\nimport { jwtDecode } from 'jwt-decode'\n\nexport const ApiHandlerHeaders = {\n SiteVersion: 'X-Makeswift-Site-Version',\n}\n\nconst decodedTokenPayloadSchema = z.object({\n exp: z.number(),\n})\n\ntype DecodedTokenPayload = z.infer<typeof decodedTokenPayloadSchema>\n\nexport const siteVersionSchema = z.object({\n version: z.string(),\n token: z.string(),\n})\n\nexport type SiteVersion = z.infer<typeof siteVersionSchema>\n\nfunction millisecondsToSeconds(ms: number): number {\n return Math.floor(ms / 1000)\n}\n\nexport function serializeSiteVersion(data: SiteVersion): string {\n const jsonString = JSON.stringify({ version: data.version, token: data.token })\n return jsonString\n}\n\nfunction parseSerializedSiteVersion(input: string): SiteVersion | null {\n try {\n return siteVersionSchema.parse(JSON.parse(input))\n } catch {\n console.error('Failed to parse serialized site version:', input)\n return null\n }\n}\n\nfunction getSiteVersionTokenPayload(siteVersion: SiteVersion): DecodedTokenPayload {\n try {\n const decoded = jwtDecode<DecodedTokenPayload>(siteVersion.token)\n return decodedTokenPayloadSchema.parse(decoded)\n } catch (error) {\n console.error('Invalid site version token')\n throw error\n }\n}\n\nfunction secondsUntilTokenExpiration(tokenPayload: DecodedTokenPayload): number {\n const currentTime = millisecondsToSeconds(Date.now())\n return Math.max(tokenPayload.exp - currentTime, 0)\n}\n\nexport function secondsUntilSiteVersionExpiration(siteVersion: SiteVersion): number {\n try {\n const tokenPayload = getSiteVersionTokenPayload(siteVersion)\n return secondsUntilTokenExpiration(tokenPayload)\n } catch (error) {\n console.error('Failed to check site version expiration:', error)\n return 0\n }\n}\n\nfunction isSiteVersionExpired(siteVersion: SiteVersion): boolean {\n return secondsUntilSiteVersionExpiration(siteVersion) <= 0\n}\n\nexport function deserializeSiteVersion(input: string): SiteVersion | null {\n try {\n const parsedSiteVersion = parseSerializedSiteVersion(input)\n if (parsedSiteVersion == null) return null\n\n if (isSiteVersionExpired(parsedSiteVersion)) {\n console.error('Site version token is expired')\n return null\n }\n return parsedSiteVersion\n } catch {\n console.error('Failed to deserialize site version:', input)\n return null\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAkB;AAClB,wBAA0B;AAEnB,MAAM,oBAAoB;AAAA,EAC/B,aAAa;AACf;AAEA,MAAM,4BAA4B,aAAE,OAAO;AAAA,EACzC,KAAK,aAAE,OAAO;AAChB,CAAC;AAIM,MAAM,oBAAoB,aAAE,OAAO;AAAA,EACxC,SAAS,aAAE,OAAO;AAAA,EAClB,OAAO,aAAE,OAAO;AAClB,CAAC;AAID,SAAS,sBAAsB,IAAoB;AACjD,SAAO,KAAK,MAAM,KAAK,GAAI;AAC7B;AAEO,SAAS,qBAAqB,MAA2B;AAC9D,QAAM,aAAa,KAAK,UAAU,EAAE,SAAS,KAAK,SAAS,OAAO,KAAK,MAAM,CAAC;AAC9E,SAAO;AACT;AAEA,SAAS,2BAA2B,OAAmC;AACrE,MAAI;AACF,WAAO,kBAAkB,MAAM,KAAK,MAAM,KAAK,CAAC;AAAA,EAClD,QAAQ;AACN,YAAQ,MAAM,4CAA4C,KAAK;AAC/D,WAAO;AAAA,EACT;AACF;AAEA,SAAS,2BAA2B,aAA+C;AACjF,MAAI;AACF,UAAM,cAAU,6BAA+B,YAAY,KAAK;AAChE,WAAO,0BAA0B,MAAM,OAAO;AAAA,EAChD,SAAS,OAAO;AACd,YAAQ,MAAM,4BAA4B;AAC1C,UAAM;AAAA,EACR;AACF;AAEA,SAAS,4BAA4B,cAA2C;AAC9E,QAAM,cAAc,sBAAsB,KAAK,IAAI,CAAC;AACpD,SAAO,KAAK,IAAI,aAAa,MAAM,aAAa,CAAC;AACnD;AAEO,SAAS,kCAAkC,aAAkC;AAClF,MAAI;AACF,UAAM,eAAe,2BAA2B,WAAW;AAC3D,WAAO,4BAA4B,YAAY;AAAA,EACjD,SAAS,OAAO;AACd,YAAQ,MAAM,4CAA4C,KAAK;AAC/D,WAAO;AAAA,EACT;AACF;AAEA,SAAS,qBAAqB,aAAmC;AAC/D,SAAO,kCAAkC,WAAW,KAAK;AAC3D;AAEO,SAAS,uBAAuB,OAAmC;AACxE,MAAI;AACF,UAAM,oBAAoB,2BAA2B,KAAK;AAC1D,QAAI,qBAAqB;AAAM,aAAO;AAEtC,QAAI,qBAAqB,iBAAiB,GAAG;AAC3C,cAAQ,MAAM,+BAA+B;AAC7C,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,QAAQ;AACN,YAAQ,MAAM,uCAAuC,KAAK;AAC1D,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -28,9 +28,7 @@ async function manifestHandler(req, { apiKey, manifest }) {
28
28
  return import_request_response.ApiResponse.json({ message: "Unauthorized" }, { status: 401 });
29
29
  }
30
30
  return import_request_response.ApiResponse.json({
31
- version: "0.25.0-canary.13",
32
- previewMode: false,
33
- draftMode: false,
31
+ version: "0.25.0-canary.14",
34
32
  interactionMode: true,
35
33
  clientSideNavigation: false,
36
34
  elementFromPoint: false,
@@ -40,6 +38,7 @@ async function manifestHandler(req, { apiKey, manifest }) {
40
38
  localizedPageSSR: true,
41
39
  webhook: true,
42
40
  localizedPagesOnlineByDefault: true,
41
+ previewToken: true,
43
42
  ...manifest
44
43
  });
45
44
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/api-handler/handlers/manifest.ts"],"sourcesContent":["import {\n type ApiRequest,\n type ErrorResponseBody,\n ApiResponse,\n searchParams,\n} from '../request-response'\n\nexport type Manifest = {\n version: string\n previewMode: boolean\n draftMode: boolean\n interactionMode: boolean\n clientSideNavigation: boolean\n elementFromPoint: boolean\n customBreakpoints: boolean\n siteVersions: boolean\n unstable_siteVersions: boolean\n localizedPageSSR: boolean\n webhook: boolean\n localizedPagesOnlineByDefault: boolean\n}\n\nexport async function manifestHandler(\n req: ApiRequest,\n { apiKey, manifest }: { apiKey: string; manifest: Partial<Manifest> },\n): Promise<ApiResponse<Manifest | ErrorResponseBody>> {\n const secret = searchParams(req).get('secret')\n\n if (secret !== apiKey) {\n return ApiResponse.json({ message: 'Unauthorized' }, { status: 401 })\n }\n\n return ApiResponse.json({\n version: PACKAGE_VERSION,\n previewMode: false,\n draftMode: false,\n interactionMode: true,\n clientSideNavigation: false,\n elementFromPoint: false,\n customBreakpoints: true,\n siteVersions: true,\n unstable_siteVersions: true,\n localizedPageSSR: true,\n webhook: true,\n localizedPagesOnlineByDefault: true,\n ...manifest,\n })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAKO;AAiBP,eAAsB,gBACpB,KACA,EAAE,QAAQ,SAAS,GACiC;AACpD,QAAM,aAAS,sCAAa,GAAG,EAAE,IAAI,QAAQ;AAE7C,MAAI,WAAW,QAAQ;AACrB,WAAO,oCAAY,KAAK,EAAE,SAAS,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACtE;AAEA,SAAO,oCAAY,KAAK;AAAA,IACtB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,sBAAsB;AAAA,IACtB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,cAAc;AAAA,IACd,uBAAuB;AAAA,IACvB,kBAAkB;AAAA,IAClB,SAAS;AAAA,IACT,+BAA+B;AAAA,IAC/B,GAAG;AAAA,EACL,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../../../src/api-handler/handlers/manifest.ts"],"sourcesContent":["import {\n type ApiRequest,\n type ErrorResponseBody,\n ApiResponse,\n searchParams,\n} from '../request-response'\n\nexport type Manifest = {\n version: string\n interactionMode: boolean\n clientSideNavigation: boolean\n elementFromPoint: boolean\n customBreakpoints: boolean\n siteVersions: boolean\n unstable_siteVersions: boolean\n localizedPageSSR: boolean\n webhook: boolean\n localizedPagesOnlineByDefault: boolean\n}\n\nexport async function manifestHandler(\n req: ApiRequest,\n { apiKey, manifest }: { apiKey: string; manifest: Partial<Manifest> },\n): Promise<ApiResponse<Manifest | ErrorResponseBody>> {\n const secret = searchParams(req).get('secret')\n\n if (secret !== apiKey) {\n return ApiResponse.json({ message: 'Unauthorized' }, { status: 401 })\n }\n\n return ApiResponse.json({\n version: PACKAGE_VERSION,\n interactionMode: true,\n clientSideNavigation: false,\n elementFromPoint: false,\n customBreakpoints: true,\n siteVersions: true,\n unstable_siteVersions: true,\n localizedPageSSR: true,\n webhook: true,\n localizedPagesOnlineByDefault: true,\n previewToken: true,\n ...manifest,\n })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAKO;AAeP,eAAsB,gBACpB,KACA,EAAE,QAAQ,SAAS,GACiC;AACpD,QAAM,aAAS,sCAAa,GAAG,EAAE,IAAI,QAAQ;AAE7C,MAAI,WAAW,QAAQ;AACrB,WAAO,oCAAY,KAAK,EAAE,SAAS,eAAe,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACtE;AAEA,SAAO,oCAAY,KAAK;AAAA,IACtB,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,sBAAsB;AAAA,IACtB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,cAAc;AAAA,IACd,uBAAuB;AAAA,IACvB,kBAAkB;AAAA,IAClB,SAAS;AAAA,IACT,+BAA+B;AAAA,IAC/B,cAAc;AAAA,IACd,GAAG;AAAA,EACL,CAAC;AACH;","names":[]}
@@ -16,26 +16,35 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var clear_draft_exports = {};
20
- __export(clear_draft_exports, {
21
- clearDraftHandler: () => clearDraftHandler
19
+ var redirect_live_exports = {};
20
+ __export(redirect_live_exports, {
21
+ redirectLiveHandler: () => redirectLiveHandler
22
22
  });
23
- module.exports = __toCommonJS(clear_draft_exports);
23
+ module.exports = __toCommonJS(redirect_live_exports);
24
24
  var import_cookie = require("cookie");
25
25
  var import_request_response = require("../request-response");
26
26
  var import_cookies = require("../cookies");
27
- async function clearDraftHandler(_req, { draftCookieNames }) {
27
+ const REDIRECT_SEARCH_PARAM = "x-makeswift-redirect-live";
28
+ async function redirectLiveHandler(req, { previewCookieNames }) {
29
+ const params = (0, import_request_response.searchParams)(req);
30
+ const redirectDestination = params.get(REDIRECT_SEARCH_PARAM) ?? "/";
31
+ const redirectDestinationUrl = new URL(
32
+ decodeURIComponent(redirectDestination),
33
+ "http://localhost"
34
+ );
35
+ redirectDestinationUrl.searchParams.delete(REDIRECT_SEARCH_PARAM);
36
+ const destinationPath = `${redirectDestinationUrl.pathname}${redirectDestinationUrl.search}${redirectDestinationUrl.hash}`;
28
37
  const headers = new Headers();
29
- draftCookieNames.forEach((name) => {
38
+ previewCookieNames.forEach((name) => {
30
39
  headers.append(
31
40
  import_cookies.SET_COOKIE_HEADER,
32
- (0, import_cookie.serialize)(name, "", { ...import_cookies.cookieSettingOptions, expires: /* @__PURE__ */ new Date(0) })
41
+ (0, import_cookie.serialize)(name, "", { ...import_cookies.cookieSettingOptions, expires: /* @__PURE__ */ new Date(0), maxAge: 0 })
33
42
  );
34
43
  });
35
- return import_request_response.ApiResponse.json({ cleared: true }, { headers });
44
+ return import_request_response.ApiResponse.redirect(destinationPath, { headers });
36
45
  }
37
46
  // Annotate the CommonJS export names for ESM import in node:
38
47
  0 && (module.exports = {
39
- clearDraftHandler
48
+ redirectLiveHandler
40
49
  });
41
- //# sourceMappingURL=clear-draft.js.map
50
+ //# sourceMappingURL=redirect-live.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/api-handler/handlers/redirect-live.ts"],"sourcesContent":["import { serialize as serializeCookie } from 'cookie'\nimport { type ApiRequest, ApiResponse, searchParams } from '../request-response'\nimport { SET_COOKIE_HEADER, cookieSettingOptions } from '../cookies'\n\nconst REDIRECT_SEARCH_PARAM = 'x-makeswift-redirect-live'\n\nexport async function redirectLiveHandler(\n req: ApiRequest,\n { previewCookieNames }: { previewCookieNames: string[] },\n): Promise<ApiResponse<null>> {\n const params = searchParams(req)\n const redirectDestination = params.get(REDIRECT_SEARCH_PARAM) ?? '/'\n\n const redirectDestinationUrl = new URL(\n decodeURIComponent(redirectDestination),\n 'http://localhost',\n )\n redirectDestinationUrl.searchParams.delete(REDIRECT_SEARCH_PARAM)\n\n const destinationPath = `${redirectDestinationUrl.pathname}${redirectDestinationUrl.search}${redirectDestinationUrl.hash}`\n\n const headers = new Headers()\n\n previewCookieNames.forEach(name => {\n headers.append(\n SET_COOKIE_HEADER,\n serializeCookie(name, '', { ...cookieSettingOptions, expires: new Date(0), maxAge: 0 }),\n )\n })\n\n return ApiResponse.redirect(destinationPath, { headers })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA6C;AAC7C,8BAA2D;AAC3D,qBAAwD;AAExD,MAAM,wBAAwB;AAE9B,eAAsB,oBACpB,KACA,EAAE,mBAAmB,GACO;AAC5B,QAAM,aAAS,sCAAa,GAAG;AAC/B,QAAM,sBAAsB,OAAO,IAAI,qBAAqB,KAAK;AAEjE,QAAM,yBAAyB,IAAI;AAAA,IACjC,mBAAmB,mBAAmB;AAAA,IACtC;AAAA,EACF;AACA,yBAAuB,aAAa,OAAO,qBAAqB;AAEhE,QAAM,kBAAkB,GAAG,uBAAuB,QAAQ,GAAG,uBAAuB,MAAM,GAAG,uBAAuB,IAAI;AAExH,QAAM,UAAU,IAAI,QAAQ;AAE5B,qBAAmB,QAAQ,UAAQ;AACjC,YAAQ;AAAA,MACN;AAAA,UACA,cAAAA,WAAgB,MAAM,IAAI,EAAE,GAAG,qCAAsB,SAAS,oBAAI,KAAK,CAAC,GAAG,QAAQ,EAAE,CAAC;AAAA,IACxF;AAAA,EACF,CAAC;AAED,SAAO,oCAAY,SAAS,iBAAiB,EAAE,QAAQ,CAAC;AAC1D;","names":["serializeCookie"]}
@@ -23,7 +23,7 @@ __export(api_handler_exports, {
23
23
  module.exports = __toCommonJS(api_handler_exports);
24
24
  var import_path_to_regexp = require("path-to-regexp");
25
25
  var import_site_version = require("../api/site-version");
26
- var import_clear_draft = require("./handlers/clear-draft");
26
+ var import_redirect_live = require("./handlers/redirect-live");
27
27
  var import_element_tree = require("./handlers/element-tree");
28
28
  var import_fonts = require("./handlers/fonts");
29
29
  var import_manifest = require("./handlers/manifest");
@@ -41,7 +41,7 @@ function createApiHandler(apiKey, {
41
41
  client,
42
42
  manifest,
43
43
  revalidationHandler,
44
- draftCookieNames
44
+ previewCookieNames
45
45
  }) {
46
46
  if (typeof apiKey !== "string") {
47
47
  throw new Error(
@@ -57,10 +57,11 @@ function createApiHandler(apiKey, {
57
57
  return res;
58
58
  };
59
59
  async function apiRouteHandler(req, route) {
60
- const siteVersion = (0, import_site_version.parseSiteVersion)(req.headers.get(import_site_version.API_HANDLER_SITE_VERSION_HEADER));
60
+ const versionHeader = req.headers.get(import_site_version.ApiHandlerHeaders.SiteVersion);
61
+ const siteVersion = versionHeader != null ? (0, import_site_version.deserializeSiteVersion)(versionHeader) : null;
61
62
  const matches = (pattern) => (0, import_path_to_regexp.match)(pattern, { decode: decodeURIComponent })(route);
62
- if (matches("/clear-draft"))
63
- return (0, import_clear_draft.clearDraftHandler)(req, { draftCookieNames });
63
+ if (matches("/redirect-live"))
64
+ return (0, import_redirect_live.redirectLiveHandler)(req, { previewCookieNames });
64
65
  if (matches("/element-tree"))
65
66
  return (0, import_element_tree.elementTreeHandler)(req, { runtime });
66
67
  if (matches("/fonts"))
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api-handler/index.ts"],"sourcesContent":["import { Match, match as matchPattern } from 'path-to-regexp'\n\nimport { APIResource } from '../api'\nimport { API_HANDLER_SITE_VERSION_HEADER, parseSiteVersion } from '../api/site-version'\n\nimport { MakeswiftClient } from '../client'\nimport { ReactRuntime } from '../react'\n\nimport { clearDraftHandler } from './handlers/clear-draft'\nimport { elementTreeHandler } from './handlers/element-tree'\nimport { fontsHandler, type Font, type GetFonts } from './handlers/fonts'\nimport { manifestHandler, type Manifest } from './handlers/manifest'\nimport { mergeTranslatedDataHandler } from './handlers/merge-translated-data'\nimport { revalidateHandler } from './handlers/revalidate'\nimport { translatableDataHandler } from './handlers/translatable-data'\nimport { webhookHandler } from './handlers/webhook'\nimport { type OnPublish } from './handlers/webhook/types'\n\nimport {\n type ApiRequest,\n type ErrorResponseBody,\n ApiResponse,\n searchParams,\n} from './request-response'\n\nimport { applyCorsHeaders } from './cors'\n\nexport type { Manifest, Font }\n\ntype Events = { onPublish: OnPublish }\n\nexport type ApiHandlerUserConfig = {\n runtime: ReactRuntime\n appOrigin?: string\n apiOrigin?: string\n getFonts?: GetFonts\n events?: Events\n}\n\nexport type ApiHandlerInternalConfig = {\n client: MakeswiftClient\n manifest: Partial<Manifest>\n revalidationHandler: (path?: string) => Promise<void>\n draftCookieNames: string[]\n}\n\ntype ApiHandlerConfig = ApiHandlerUserConfig & ApiHandlerInternalConfig\n\ntype ResponseType =\n | Awaited<\n | ReturnType<typeof clearDraftHandler>\n | ReturnType<typeof elementTreeHandler>\n | ReturnType<typeof fontsHandler>\n | ReturnType<typeof manifestHandler>\n | ReturnType<typeof mergeTranslatedDataHandler>\n | ReturnType<typeof revalidateHandler>\n | ReturnType<typeof translatableDataHandler>\n | ReturnType<typeof webhookHandler>\n >\n | ApiResponse<APIResource>\n | ApiResponse<ErrorResponseBody>\n | Response\n\ntype ApiHandler = (req: ApiRequest, route: string) => Promise<ResponseType>\n\nexport function createApiHandler(\n apiKey: string,\n {\n runtime,\n appOrigin = 'https://app.makeswift.com',\n getFonts,\n events,\n client,\n manifest,\n revalidationHandler,\n draftCookieNames,\n }: ApiHandlerConfig,\n): ApiHandler {\n if (typeof apiKey !== 'string') {\n throw new Error(\n 'The Makeswift API handler must be passed a valid Makeswift site API key. ' +\n `Received \"${apiKey}\" instead.`,\n )\n }\n\n return async function (req: ApiRequest, route: string): Promise<ResponseType> {\n const res =\n req.method.toUpperCase() !== 'OPTIONS'\n ? await apiRouteHandler(req, route)\n : new Response(null, { status: 204, headers: [['Content-Length', '0']] })\n\n applyCorsHeaders(res.headers, {\n origin: appOrigin,\n allowedHeaders: ['Content-Type', 'Authorization'],\n })\n\n return res\n }\n\n async function apiRouteHandler(req: ApiRequest, route: string): Promise<ResponseType> {\n const siteVersion = parseSiteVersion(req.headers.get(API_HANDLER_SITE_VERSION_HEADER))\n const matches = <T extends object>(pattern: string): Match<T> =>\n matchPattern<T>(pattern, { decode: decodeURIComponent })(route)\n\n if (matches('/clear-draft')) return clearDraftHandler(req, { draftCookieNames })\n if (matches('/element-tree')) return elementTreeHandler(req, { runtime })\n if (matches('/fonts')) return fontsHandler(req, { getFonts })\n if (matches('/manifest')) return manifestHandler(req, { apiKey, manifest })\n if (matches('/merge-translated-data')) return mergeTranslatedDataHandler(req, { client })\n if (matches('/revalidate')) {\n return revalidateHandler(req, { apiKey, revalidatePath: revalidationHandler })\n }\n\n if (matches('/translatable-data')) return translatableDataHandler(req, { client })\n if (matches('/webhook')) {\n return webhookHandler(req, { apiKey, events, revalidate: revalidationHandler })\n }\n\n const handleResource = <T extends APIResource>(\n resource: T | null,\n ): ApiResponse<APIResource | ErrorResponseBody> => {\n return resource !== null\n ? ApiResponse.json(resource)\n : ApiResponse.json({ message: 'Not Found' }, { status: 404 })\n }\n\n let m\n\n if ((m = matches<{ id: string }>('/swatches/:id'))) {\n return client.getSwatch(m.params.id, siteVersion).then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/files/:id'))) {\n return client.getFile(m.params.id).then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/typographies/:id'))) {\n return client.getTypography(m.params.id, siteVersion).then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/global-elements/:id'))) {\n return client.getGlobalElement(m.params.id, siteVersion).then(handleResource)\n }\n\n if (\n (m = matches<{ globalElementId: string; locale: string }>(\n '/localized-global-elements/:globalElementId/:locale',\n ))\n ) {\n return client\n .getLocalizedGlobalElement(m.params.globalElementId, m.params.locale, siteVersion)\n .then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/page-pathname-slices/:id'))) {\n const localeParam = searchParams(req).get('locale')\n const locale = typeof localeParam === 'string' ? localeParam : undefined\n\n return client.getPagePathnameSlice(m.params.id, siteVersion, { locale }).then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/tables/:id'))) {\n return client.getTable(m.params.id).then(handleResource)\n }\n\n return ApiResponse.json({ message: 'Not Found' }, { status: 404 })\n }\n}\n"],"mappings":"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","names":["matchPattern"]}
1
+ {"version":3,"sources":["../../../src/api-handler/index.ts"],"sourcesContent":["import { Match, match as matchPattern } from 'path-to-regexp'\n\nimport { APIResource } from '../api'\nimport { ApiHandlerHeaders, deserializeSiteVersion } from '../api/site-version'\n\nimport { MakeswiftClient } from '../client'\nimport { ReactRuntime } from '../react'\n\nimport { redirectLiveHandler } from './handlers/redirect-live'\nimport { elementTreeHandler } from './handlers/element-tree'\nimport { fontsHandler, type Font, type GetFonts } from './handlers/fonts'\nimport { manifestHandler, type Manifest } from './handlers/manifest'\nimport { mergeTranslatedDataHandler } from './handlers/merge-translated-data'\nimport { revalidateHandler } from './handlers/revalidate'\nimport { translatableDataHandler } from './handlers/translatable-data'\nimport { webhookHandler } from './handlers/webhook'\nimport { type OnPublish } from './handlers/webhook/types'\n\nimport {\n type ApiRequest,\n type ErrorResponseBody,\n ApiResponse,\n searchParams,\n} from './request-response'\n\nimport { applyCorsHeaders } from './cors'\n\nexport type { Manifest, Font }\n\ntype Events = { onPublish: OnPublish }\n\nexport type ApiHandlerUserConfig = {\n runtime: ReactRuntime\n appOrigin?: string\n apiOrigin?: string\n getFonts?: GetFonts\n events?: Events\n}\n\nexport type ApiHandlerInternalConfig = {\n client: MakeswiftClient\n manifest: Partial<Manifest>\n revalidationHandler: (path?: string) => Promise<void>\n previewCookieNames: string[]\n}\n\ntype ApiHandlerConfig = ApiHandlerUserConfig & ApiHandlerInternalConfig\n\ntype ResponseType =\n | Awaited<\n | ReturnType<typeof redirectLiveHandler>\n | ReturnType<typeof elementTreeHandler>\n | ReturnType<typeof fontsHandler>\n | ReturnType<typeof manifestHandler>\n | ReturnType<typeof mergeTranslatedDataHandler>\n | ReturnType<typeof revalidateHandler>\n | ReturnType<typeof translatableDataHandler>\n | ReturnType<typeof webhookHandler>\n >\n | ApiResponse<APIResource>\n | ApiResponse<ErrorResponseBody>\n | Response\n\ntype ApiHandler = (req: ApiRequest, route: string) => Promise<ResponseType>\n\nexport function createApiHandler(\n apiKey: string,\n {\n runtime,\n appOrigin = 'https://app.makeswift.com',\n getFonts,\n events,\n client,\n manifest,\n revalidationHandler,\n previewCookieNames,\n }: ApiHandlerConfig,\n): ApiHandler {\n if (typeof apiKey !== 'string') {\n throw new Error(\n 'The Makeswift API handler must be passed a valid Makeswift site API key. ' +\n `Received \"${apiKey}\" instead.`,\n )\n }\n\n return async function (req: ApiRequest, route: string): Promise<ResponseType> {\n const res =\n req.method.toUpperCase() !== 'OPTIONS'\n ? await apiRouteHandler(req, route)\n : new Response(null, { status: 204, headers: [['Content-Length', '0']] })\n\n applyCorsHeaders(res.headers, {\n origin: appOrigin,\n allowedHeaders: ['Content-Type', 'Authorization'],\n })\n\n return res\n }\n\n async function apiRouteHandler(req: ApiRequest, route: string): Promise<ResponseType> {\n const versionHeader = req.headers.get(ApiHandlerHeaders.SiteVersion)\n\n const siteVersion = versionHeader != null ? deserializeSiteVersion(versionHeader) : null\n\n const matches = <T extends object>(pattern: string): Match<T> =>\n matchPattern<T>(pattern, { decode: decodeURIComponent })(route)\n\n if (matches('/redirect-live')) return redirectLiveHandler(req, { previewCookieNames })\n if (matches('/element-tree')) return elementTreeHandler(req, { runtime })\n if (matches('/fonts')) return fontsHandler(req, { getFonts })\n if (matches('/manifest')) return manifestHandler(req, { apiKey, manifest })\n if (matches('/merge-translated-data')) return mergeTranslatedDataHandler(req, { client })\n if (matches('/revalidate')) {\n return revalidateHandler(req, { apiKey, revalidatePath: revalidationHandler })\n }\n\n if (matches('/translatable-data')) return translatableDataHandler(req, { client })\n if (matches('/webhook')) {\n return webhookHandler(req, { apiKey, events, revalidate: revalidationHandler })\n }\n\n const handleResource = <T extends APIResource>(\n resource: T | null,\n ): ApiResponse<APIResource | ErrorResponseBody> => {\n return resource !== null\n ? ApiResponse.json(resource)\n : ApiResponse.json({ message: 'Not Found' }, { status: 404 })\n }\n\n let m\n\n if ((m = matches<{ id: string }>('/swatches/:id'))) {\n return client.getSwatch(m.params.id, siteVersion).then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/files/:id'))) {\n return client.getFile(m.params.id).then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/typographies/:id'))) {\n return client.getTypography(m.params.id, siteVersion).then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/global-elements/:id'))) {\n return client.getGlobalElement(m.params.id, siteVersion).then(handleResource)\n }\n\n if (\n (m = matches<{ globalElementId: string; locale: string }>(\n '/localized-global-elements/:globalElementId/:locale',\n ))\n ) {\n return client\n .getLocalizedGlobalElement(m.params.globalElementId, m.params.locale, siteVersion)\n .then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/page-pathname-slices/:id'))) {\n const localeParam = searchParams(req).get('locale')\n const locale = typeof localeParam === 'string' ? localeParam : undefined\n\n return client.getPagePathnameSlice(m.params.id, siteVersion, { locale }).then(handleResource)\n }\n\n if ((m = matches<{ id: string }>('/tables/:id'))) {\n return client.getTable(m.params.id).then(handleResource)\n }\n\n return ApiResponse.json({ message: 'Not Found' }, { status: 404 })\n }\n}\n"],"mappings":"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","names":["matchPattern"]}
@@ -33,6 +33,15 @@ const ApiResponse = {
33
33
  ...init,
34
34
  headers
35
35
  });
36
+ },
37
+ redirect(location, init) {
38
+ const headers = new Headers(init?.headers);
39
+ headers.set("Location", location.toString());
40
+ return new Response(null, {
41
+ status: 307,
42
+ ...init,
43
+ headers
44
+ });
36
45
  }
37
46
  };
38
47
  // Annotate the CommonJS export names for ESM import in node:
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api-handler/request-response.ts"],"sourcesContent":["export type ApiRequest = Pick<Request, 'method' | 'json' | 'headers' | 'url'>\n\nexport function searchParams(req: ApiRequest): URLSearchParams {\n // provide a placeholder domain to enable parsing of relative URLs\n return new URL(req.url, 'http://localhost').searchParams\n}\n\nexport interface ApiResponse<R extends unknown = unknown> extends Response {\n readonly __responseType?: R // prevent unsafe assignment between instances with incompatible `R`\n}\n\nexport const ApiResponse = {\n json<T>(body: T, init?: ResponseInit): ApiResponse<T> {\n const headers = new Headers(init?.headers)\n headers.set('Content-Type', 'application/json')\n\n return new Response(JSON.stringify(body), {\n ...init,\n headers,\n }) as ApiResponse<T>\n },\n} as const\n\nexport type ErrorResponseBody = { message: string }\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,aAAa,KAAkC;AAE7D,SAAO,IAAI,IAAI,IAAI,KAAK,kBAAkB,EAAE;AAC9C;AAMO,MAAM,cAAc;AAAA,EACzB,KAAQ,MAAS,MAAqC;AACpD,UAAM,UAAU,IAAI,QAAQ,MAAM,OAAO;AACzC,YAAQ,IAAI,gBAAgB,kBAAkB;AAE9C,WAAO,IAAI,SAAS,KAAK,UAAU,IAAI,GAAG;AAAA,MACxC,GAAG;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/api-handler/request-response.ts"],"sourcesContent":["export type ApiRequest = Pick<Request, 'method' | 'json' | 'headers' | 'url'>\n\nexport function searchParams(req: ApiRequest): URLSearchParams {\n // provide a placeholder domain to enable parsing of relative URLs\n return new URL(req.url, 'http://localhost').searchParams\n}\n\nexport interface ApiResponse<R extends unknown = unknown> extends Response {\n readonly __responseType?: R // prevent unsafe assignment between instances with incompatible `R`\n}\n\nexport const ApiResponse = {\n json<T>(body: T, init?: ResponseInit): ApiResponse<T> {\n const headers = new Headers(init?.headers)\n headers.set('Content-Type', 'application/json')\n\n return new Response(JSON.stringify(body), {\n ...init,\n headers,\n }) as ApiResponse<T>\n },\n\n redirect(location: string | URL, init?: ResponseInit): ApiResponse<null> {\n const headers = new Headers(init?.headers)\n headers.set('Location', location.toString())\n\n // Manually constructing a redirect response. We can’t use the\n // `Response.redirect` shorthand here, since it doesn’t allow passing custom\n // headers; see\n // https://community.cloudflare.com/t/make-redirect-with-additional-headers/249365\n return new Response(null, {\n status: 307,\n ...init,\n headers,\n }) as ApiResponse<null>\n },\n} as const\n\nexport type ErrorResponseBody = { message: string }\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,aAAa,KAAkC;AAE7D,SAAO,IAAI,IAAI,IAAI,KAAK,kBAAkB,EAAE;AAC9C;AAMO,MAAM,cAAc;AAAA,EACzB,KAAQ,MAAS,MAAqC;AACpD,UAAM,UAAU,IAAI,QAAQ,MAAM,OAAO;AACzC,YAAQ,IAAI,gBAAgB,kBAAkB;AAE9C,WAAO,IAAI,SAAS,KAAK,UAAU,IAAI,GAAG;AAAA,MACxC,GAAG;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,SAAS,UAAwB,MAAwC;AACvE,UAAM,UAAU,IAAI,QAAQ,MAAM,OAAO;AACzC,YAAQ,IAAI,YAAY,SAAS,SAAS,CAAC;AAM3C,WAAO,IAAI,SAAS,MAAM;AAAA,MACxB,QAAQ;AAAA,MACR,GAAG;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -22,7 +22,8 @@ __export(client_exports, {
22
22
  SnippetLocation: () => import_types2.SnippetLocation,
23
23
  componentDocumentToRootEmbeddedDocument: () => componentDocumentToRootEmbeddedDocument,
24
24
  failedResponseBody: () => failedResponseBody,
25
- pageToRootDocument: () => pageToRootDocument
25
+ pageToRootDocument: () => pageToRootDocument,
26
+ previewTokenPayloadSchema: () => previewTokenPayloadSchema
26
27
  });
27
28
  module.exports = __toCommonJS(client_exports);
28
29
  var import_zod = require("zod");
@@ -32,7 +33,6 @@ var import_documents = require("../api/graphql/documents");
32
33
  var import_react = require("../api/react");
33
34
  var import_introspection = require("../prop-controllers/introspection");
34
35
  var import_react_page = require("../state/react-page");
35
- var import_site_version = require("../api/site-version");
36
36
  var import_pagination = require("../utils/pagination");
37
37
  var import_deterministic_uuid = require("../utils/deterministic-uuid");
38
38
  var import_controls = require("@makeswift/controls");
@@ -117,6 +117,11 @@ const makeswiftComponentDocumentFallbackSchema = import_zod.z.object({
117
117
  locale: import_zod.z.string().nullable(),
118
118
  data: import_zod.z.null()
119
119
  });
120
+ const previewTokenPayloadSchema = import_zod.z.object({
121
+ payload: import_zod.z.object({
122
+ version: import_zod.z.string()
123
+ })
124
+ });
120
125
  function componentDocumentToRootEmbeddedDocument({
121
126
  document,
122
127
  documentKey,
@@ -208,13 +213,18 @@ Received "${apiKey}" instead.`
208
213
  this.runtime = runtime;
209
214
  }
210
215
  async fetch(path, siteVersion) {
211
- const response = await fetch(new URL(path, this.apiOrigin).toString(), {
212
- headers: {
213
- ["X-API-Key"]: this.apiKey,
214
- "Makeswift-Site-API-Key": this.apiKey,
215
- "Makeswift-Site-Version": siteVersion
216
- },
217
- ...siteVersion === import_site_version.MakeswiftSiteVersion.Working ? { cache: "no-store" } : {},
216
+ const requestUrl = new URL(path, this.apiOrigin);
217
+ const requestHeaders = new Headers({
218
+ "X-API-Key": this.apiKey,
219
+ "Makeswift-Site-API-Key": this.apiKey
220
+ });
221
+ if (siteVersion?.token) {
222
+ requestUrl.searchParams.set("version", siteVersion.version);
223
+ requestHeaders.set("makeswift-preview-token", siteVersion.token);
224
+ }
225
+ const response = await fetch(requestUrl.toString(), {
226
+ headers: requestHeaders,
227
+ ...siteVersion != null ? { cache: "no-store" } : {},
218
228
  ...this.fetchOptions(siteVersion)
219
229
  });
220
230
  return response;
@@ -226,11 +236,11 @@ Received "${apiKey}" instead.`
226
236
  return {};
227
237
  }
228
238
  getPagesInternal = async ({
229
- siteVersion = import_site_version.MakeswiftSiteVersion.Live,
239
+ siteVersion = null,
230
240
  ...params
231
241
  } = {}) => {
232
242
  const queryParams = getPagesQueryParams(params);
233
- const response = await this.fetch(`v4/pages?${queryParams.toString()}`, siteVersion);
243
+ const response = await this.fetch(`v5/pages?${queryParams.toString()}`, siteVersion);
234
244
  if (!response.ok) {
235
245
  console.error("Failed to get pages", {
236
246
  response: await failedResponseBody(response),
@@ -249,11 +259,8 @@ Received "${apiKey}" instead.`
249
259
  return parsedResponse.data;
250
260
  };
251
261
  getPages = (0, import_pagination.toIterablePaginationResult)(this.getPagesInternal);
252
- async getPage(pathname, {
253
- siteVersion = import_site_version.MakeswiftSiteVersion.Live,
254
- locale
255
- } = {}) {
256
- const url = new URL(`v2/pages/${encodeURIComponent(pathname)}`, this.apiOrigin);
262
+ async getPage(pathname, { siteVersion = null, locale } = {}) {
263
+ const url = new URL(`v3/pages/${encodeURIComponent(pathname)}`, this.apiOrigin);
257
264
  if (locale)
258
265
  url.searchParams.set("locale", locale);
259
266
  const response = await this.fetch(url.pathname + url.search, siteVersion);
@@ -273,7 +280,7 @@ Received "${apiKey}" instead.`
273
280
  async getTypographies(typographyIds, siteVersion) {
274
281
  if (typographyIds.length === 0)
275
282
  return [];
276
- const url = new URL(`v2/typographies/bulk`, this.apiOrigin);
283
+ const url = new URL(`v3/typographies/bulk`, this.apiOrigin);
277
284
  typographyIds.forEach((id) => {
278
285
  url.searchParams.append("ids", id);
279
286
  });
@@ -291,7 +298,7 @@ Received "${apiKey}" instead.`
291
298
  async getSwatches(ids, siteVersion) {
292
299
  if (ids.length === 0)
293
300
  return [];
294
- const url = new URL(`v2/swatches/bulk`, this.apiOrigin);
301
+ const url = new URL(`v3/swatches/bulk`, this.apiOrigin);
295
302
  ids.forEach((id) => {
296
303
  url.searchParams.append("ids", id);
297
304
  });
@@ -448,7 +455,7 @@ Received "${apiKey}" instead.`
448
455
  };
449
456
  const siteVersion = await siteVersionPromise;
450
457
  const response = await this.fetch(
451
- `v3/pages/${encodeURIComponent(pathname)}/document?${queryParams()}`,
458
+ `v4/pages/${encodeURIComponent(pathname)}/document?${queryParams()}`,
452
459
  siteVersion
453
460
  );
454
461
  if (!response.ok) {
@@ -491,11 +498,11 @@ Received "${apiKey}" instead.`
491
498
  const canAttemptLocaleFallback = !baseLocaleWasRequested && allowLocaleFallback;
492
499
  let response;
493
500
  const responseForRequestedLocale = await this.fetch(
494
- `v1/element-trees/${encodeURIComponent(id)}?${searchParams.toString()}`,
501
+ `v2/element-trees/${encodeURIComponent(id)}?${searchParams.toString()}`,
495
502
  siteVersion
496
503
  );
497
504
  if (responseForRequestedLocale.status === 404 && canAttemptLocaleFallback) {
498
- response = await this.fetch(`v1/element-trees/${encodeURIComponent(id)}`, siteVersion);
505
+ response = await this.fetch(`v2/element-trees/${encodeURIComponent(id)}`, siteVersion);
499
506
  } else {
500
507
  response = responseForRequestedLocale;
501
508
  }
@@ -535,7 +542,7 @@ Received "${apiKey}" instead.`
535
542
  };
536
543
  }
537
544
  async getSwatch(swatchId, siteVersion) {
538
- const response = await this.fetch(`v2/swatches/${swatchId}`, siteVersion);
545
+ const response = await this.fetch(`v3/swatches/${swatchId}`, siteVersion);
539
546
  if (!response.ok) {
540
547
  if (response.status !== 404) {
541
548
  console.error(`Failed to get swatch '${swatchId}'`, {
@@ -556,7 +563,7 @@ Received "${apiKey}" instead.`
556
563
  return result.file;
557
564
  }
558
565
  async getTypography(typographyId, siteVersion) {
559
- const response = await this.fetch(`v2/typographies/${typographyId}`, siteVersion);
566
+ const response = await this.fetch(`v3/typographies/${typographyId}`, siteVersion);
560
567
  if (!response.ok) {
561
568
  if (response.status !== 404) {
562
569
  console.error(`Failed to get typography '${typographyId}'`, {
@@ -570,7 +577,7 @@ Received "${apiKey}" instead.`
570
577
  return typography;
571
578
  }
572
579
  async getGlobalElement(globalElementId, siteVersion) {
573
- const response = await this.fetch(`v2/global-elements/${globalElementId}`, siteVersion);
580
+ const response = await this.fetch(`v3/global-elements/${globalElementId}`, siteVersion);
574
581
  if (!response.ok) {
575
582
  if (response.status !== 404) {
576
583
  console.error(`Failed to get global element '${globalElementId}'`, {
@@ -585,7 +592,7 @@ Received "${apiKey}" instead.`
585
592
  }
586
593
  async getLocalizedGlobalElement(globalElementId, locale, siteVersion) {
587
594
  const response = await this.fetch(
588
- `v2/localized-global-elements/${globalElementId}?locale=${locale}`,
595
+ `v3/localized-global-elements/${globalElementId}?locale=${locale}`,
589
596
  siteVersion
590
597
  );
591
598
  if (!response.ok) {
@@ -604,7 +611,7 @@ Received "${apiKey}" instead.`
604
611
  async getPagePathnameSlices(pageIds, siteVersion, { locale }) {
605
612
  if (pageIds.length === 0)
606
613
  return [];
607
- const url = new URL(`v2/page-pathname-slices/bulk`, this.apiOrigin);
614
+ const url = new URL(`v3/page-pathname-slices/bulk`, this.apiOrigin);
608
615
  pageIds.forEach((id) => url.searchParams.append("ids", id));
609
616
  if (locale != null)
610
617
  url.searchParams.set("locale", locale);
@@ -640,44 +647,44 @@ Received "${apiKey}" instead.`
640
647
  );
641
648
  return result.table;
642
649
  }
643
- /**
644
- * @deprecated `getSitemap` is deprecated. We recommend constructing a sitemap
645
- * using data from `getPages` instead.
646
- */
647
- async getSitemap({
648
- limit = 50,
649
- after,
650
- pathnamePrefix,
651
- locale
652
- } = {}) {
653
- const url = new URL("v1/sitemap", this.apiOrigin);
654
- url.searchParams.set("limit", limit.toString());
655
- if (after != null)
656
- url.searchParams.set("after", after);
657
- if (pathnamePrefix != null)
658
- url.searchParams.set("pathnamePrefix", pathnamePrefix);
659
- if (locale != null)
660
- url.searchParams.set("locale", locale);
661
- const response = await this.fetch(url.pathname + url.search, import_site_version.MakeswiftSiteVersion.Live);
662
- if (!response.ok) {
663
- console.error("Failed to get sitemap ", {
664
- response: await failedResponseBody(response),
665
- limit,
666
- after,
667
- pathnamePrefix,
668
- locale
669
- });
670
- throw new Error(`Failed to get sitemap with error: ${responseError(response)}`);
671
- }
672
- const sitemap = await response.json();
673
- return sitemap;
674
- }
675
650
  getTranslatableData(elementTree) {
676
651
  return this.runtime.getTranslatableData(elementTree);
677
652
  }
678
653
  mergeTranslatedData(elementTree, translatedData) {
679
654
  return this.runtime.mergeTranslatedData(elementTree, translatedData);
680
655
  }
656
+ async readPreviewToken(token) {
657
+ const response = await fetch(new URL("v1/preview-tokens/reads", this.apiOrigin).toString(), {
658
+ method: "POST",
659
+ headers: {
660
+ ["X-API-Key"]: this.apiKey,
661
+ "Makeswift-Site-API-Key": this.apiKey,
662
+ "Content-Type": "application/json"
663
+ },
664
+ body: JSON.stringify({ token }),
665
+ cache: "no-store"
666
+ });
667
+ if (!response.ok) {
668
+ if (response.status === 401) {
669
+ console.error(`Preview token is invalid or expired`, {
670
+ response: await failedResponseBody(response)
671
+ });
672
+ } else if (response.status !== 404) {
673
+ console.error(`Failed to verify preview token`, {
674
+ response: await failedResponseBody(response)
675
+ });
676
+ }
677
+ return null;
678
+ }
679
+ const json = await response.json();
680
+ const parsed = previewTokenPayloadSchema.safeParse(json);
681
+ if (!parsed.success) {
682
+ throw new Error(
683
+ `Failed to parse preview token payload: ${parsed.error.errors.map((e) => e.message).join("; ")}`
684
+ );
685
+ }
686
+ return parsed.data;
687
+ }
681
688
  }
682
689
  // Annotate the CommonJS export names for ESM import in node:
683
690
  0 && (module.exports = {
@@ -685,6 +692,7 @@ Received "${apiKey}" instead.`
685
692
  SnippetLocation,
686
693
  componentDocumentToRootEmbeddedDocument,
687
694
  failedResponseBody,
688
- pageToRootDocument
695
+ pageToRootDocument,
696
+ previewTokenPayloadSchema
689
697
  });
690
698
  //# sourceMappingURL=index.js.map