@payloadcms/figma 0.0.1-alpha.8 → 0.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (470) hide show
  1. package/dist/api/control-plane.d.ts +56 -7
  2. package/dist/api/control-plane.js +188 -74
  3. package/dist/api/error-response.d.ts +36 -0
  4. package/dist/api/error-response.js +66 -0
  5. package/dist/api/figma-api.d.ts +24 -3
  6. package/dist/api/figma-api.js +110 -34
  7. package/dist/auth/browser.d.ts +0 -1
  8. package/dist/auth/browser.js +0 -2
  9. package/dist/auth/callback-server.d.ts +19 -8
  10. package/dist/auth/callback-server.js +72 -32
  11. package/dist/auth/credentials.d.ts +20 -0
  12. package/dist/auth/credentials.js +19 -0
  13. package/dist/auth/crypto-utils.d.ts +28 -1
  14. package/dist/auth/crypto-utils.js +132 -23
  15. package/dist/auth/jwt-validator.d.ts +23 -6
  16. package/dist/auth/jwt-validator.js +35 -9
  17. package/dist/auth/oauth-flow.d.ts +19 -4
  18. package/dist/auth/oauth-flow.js +151 -34
  19. package/dist/auth/paste-code.d.ts +33 -0
  20. package/dist/auth/paste-code.js +87 -0
  21. package/dist/auth/pkce.d.ts +0 -1
  22. package/dist/auth/pkce.js +0 -2
  23. package/dist/auth/project-token.d.ts +32 -17
  24. package/dist/auth/project-token.js +176 -68
  25. package/dist/auth/refresh.d.ts +2 -2
  26. package/dist/auth/refresh.js +25 -14
  27. package/dist/auth/token-store-migration.d.ts +57 -0
  28. package/dist/auth/token-store-migration.js +154 -0
  29. package/dist/auth/token-store.d.ts +63 -98
  30. package/dist/auth/token-store.js +405 -124
  31. package/dist/auth/types.d.ts +40 -6
  32. package/dist/auth/types.js +1 -3
  33. package/dist/cli.d.ts +0 -1
  34. package/dist/cli.js +102 -8
  35. package/dist/commands/bootstrap.d.ts +17 -0
  36. package/dist/commands/bootstrap.js +88 -0
  37. package/dist/commands/build-lambda-zip.d.ts +4 -0
  38. package/dist/commands/build-lambda-zip.js +17 -0
  39. package/dist/commands/debug.d.ts +7 -0
  40. package/dist/commands/debug.js +178 -0
  41. package/dist/commands/deploy.d.ts +11 -1
  42. package/dist/commands/deploy.js +193 -153
  43. package/dist/commands/dump-tokens.d.ts +11 -0
  44. package/dist/commands/dump-tokens.js +67 -0
  45. package/dist/commands/env.d.ts +12 -0
  46. package/dist/commands/env.js +86 -0
  47. package/dist/commands/init.d.ts +9 -6
  48. package/dist/commands/init.js +232 -152
  49. package/dist/commands/list-tokens.d.ts +3 -4
  50. package/dist/commands/list-tokens.js +24 -11
  51. package/dist/commands/login.d.ts +8 -2
  52. package/dist/commands/login.js +34 -18
  53. package/dist/commands/logout.d.ts +5 -5
  54. package/dist/commands/logout.js +77 -17
  55. package/dist/commands/upgrade.d.ts +4 -0
  56. package/dist/commands/upgrade.js +329 -0
  57. package/dist/commands/upload-schema.d.ts +8 -0
  58. package/dist/commands/upload-schema.js +91 -0
  59. package/dist/config/oauth.d.ts +17 -12
  60. package/dist/config/oauth.js +38 -39
  61. package/dist/constants.d.ts +63 -19
  62. package/dist/constants.js +158 -20
  63. package/dist/db-content-api/generated/content-api-types.d.ts +7574 -0
  64. package/dist/db-content-api/generated/content-api-types.js +5 -0
  65. package/dist/db-content-api/index.d.ts +37 -0
  66. package/dist/db-content-api/index.js +938 -0
  67. package/dist/db-content-api/temp-utilities/slug.d.ts +1 -0
  68. package/dist/db-content-api/temp-utilities/slug.js +1 -0
  69. package/dist/db-content-api/temp-utilities/sorting.d.ts +2 -0
  70. package/dist/db-content-api/temp-utilities/sorting.js +37 -0
  71. package/dist/db-content-api/temp-utilities/types.d.ts +21 -0
  72. package/dist/db-content-api/temp-utilities/types.js +13 -0
  73. package/dist/db-content-api/temp-utilities/unwrapDocument.d.ts +38 -0
  74. package/dist/db-content-api/temp-utilities/unwrapDocument.js +62 -0
  75. package/dist/db-content-api/utilities/auth.d.ts +29 -0
  76. package/dist/db-content-api/utilities/auth.js +82 -0
  77. package/dist/db-content-api/utilities/data/applyDefaults.d.ts +6 -0
  78. package/dist/db-content-api/utilities/data/applyDefaults.js +75 -0
  79. package/dist/db-content-api/utilities/data/castFieldValue.d.ts +10 -0
  80. package/dist/db-content-api/utilities/data/castFieldValue.js +66 -0
  81. package/dist/db-content-api/utilities/data/index.d.ts +48 -0
  82. package/dist/db-content-api/utilities/data/index.js +299 -0
  83. package/dist/db-content-api/utilities/data/pointShape.d.ts +3 -0
  84. package/dist/db-content-api/utilities/data/pointShape.js +43 -0
  85. package/dist/db-content-api/utilities/data/removeVirtualFields.d.ts +11 -0
  86. package/dist/db-content-api/utilities/data/removeVirtualFields.js +52 -0
  87. package/dist/db-content-api/utilities/data/richTextShape.d.ts +3 -0
  88. package/dist/db-content-api/utilities/data/richTextShape.js +56 -0
  89. package/dist/db-content-api/utilities/data/stripFields.d.ts +47 -0
  90. package/dist/db-content-api/utilities/data/stripFields.js +170 -0
  91. package/dist/db-content-api/utilities/data/transformPublishedLocale.d.ts +22 -0
  92. package/dist/db-content-api/utilities/data/transformPublishedLocale.js +40 -0
  93. package/dist/db-content-api/utilities/data/validateRelationships.d.ts +6 -0
  94. package/dist/db-content-api/utilities/data/validateRelationships.js +100 -0
  95. package/dist/db-content-api/utilities/joins.d.ts +52 -0
  96. package/dist/db-content-api/utilities/joins.js +137 -0
  97. package/dist/db-content-api/utilities/locale/index.d.ts +9 -0
  98. package/dist/db-content-api/utilities/locale/index.js +19 -0
  99. package/dist/db-content-api/utilities/meta/buildLocalizedPaths.d.ts +10 -0
  100. package/dist/db-content-api/utilities/meta/buildLocalizedPaths.js +71 -0
  101. package/dist/db-content-api/utilities/meta/buildMeta.d.ts +41 -0
  102. package/dist/db-content-api/utilities/meta/buildMeta.js +39 -0
  103. package/dist/db-content-api/utilities/meta/buildPathTypes.d.ts +16 -0
  104. package/dist/db-content-api/utilities/meta/buildPathTypes.js +243 -0
  105. package/dist/db-content-api/utilities/meta/buildUniquePaths.d.ts +12 -0
  106. package/dist/db-content-api/utilities/meta/buildUniquePaths.js +60 -0
  107. package/dist/db-content-api/utilities/meta/normalizeLocaleInWhere.d.ts +9 -0
  108. package/dist/db-content-api/utilities/meta/normalizeLocaleInWhere.js +100 -0
  109. package/dist/db-content-api/utilities/resolveBlocks.d.ts +19 -0
  110. package/dist/db-content-api/utilities/resolveBlocks.js +31 -0
  111. package/dist/db-content-api/utilities/schema/buildDocumentSchema.d.ts +55 -0
  112. package/dist/db-content-api/utilities/schema/buildDocumentSchema.js +182 -0
  113. package/dist/db-content-api/utilities/where.d.ts +19 -0
  114. package/dist/db-content-api/utilities/where.js +106 -0
  115. package/dist/deploy/schedule-extract-plugin.d.ts +10 -0
  116. package/dist/deploy/schedule-extract-plugin.js +32 -0
  117. package/dist/endpoints/health.d.ts +2 -0
  118. package/dist/endpoints/health.js +9 -0
  119. package/dist/endpoints/schema.d.ts +2 -0
  120. package/dist/endpoints/schema.js +27 -0
  121. package/dist/exports/client.d.ts +2 -1
  122. package/dist/exports/client.js +2 -2
  123. package/dist/index.d.ts +2 -2
  124. package/dist/index.js +3 -3
  125. package/dist/lib/download-skill.d.ts +12 -0
  126. package/dist/lib/download-skill.js +77 -0
  127. package/dist/oauth/components/FigmaAvatar/index.d.ts +3 -0
  128. package/dist/oauth/components/FigmaAvatar/index.js +25 -0
  129. package/dist/oauth/components/FigmaAvatar/index.scss +12 -0
  130. package/dist/oauth/components/FigmaAvatarCell/index.d.ts +4 -0
  131. package/dist/oauth/components/FigmaAvatarCell/index.js +23 -0
  132. package/dist/oauth/components/FigmaAvatarCell/index.scss +5 -0
  133. package/dist/oauth/components/FigmaAvatarPlaceholder/index.d.ts +8 -0
  134. package/dist/oauth/components/FigmaAvatarPlaceholder/index.js +35 -0
  135. package/dist/oauth/components/FigmaAvatarPlaceholder/index.scss +28 -0
  136. package/dist/oauth/components/LoginButton/iframeAutoLogin.d.ts +81 -0
  137. package/dist/oauth/components/LoginButton/iframeAutoLogin.js +168 -0
  138. package/dist/oauth/components/LoginButton/index.d.ts +0 -1
  139. package/dist/oauth/components/LoginButton/index.js +156 -18
  140. package/dist/oauth/components/LoginButton/index.scss +75 -3
  141. package/dist/oauth/components/LogoutButton/index.d.ts +0 -1
  142. package/dist/oauth/components/LogoutButton/index.js +20 -9
  143. package/dist/oauth/defaults.d.ts +3 -2
  144. package/dist/oauth/defaults.js +79 -12
  145. package/dist/oauth/endpoints/getLoginEndpoint.d.ts +0 -1
  146. package/dist/oauth/endpoints/getLoginEndpoint.js +87 -84
  147. package/dist/oauth/endpoints/getLogoutEndpoint.d.ts +0 -1
  148. package/dist/oauth/endpoints/getLogoutEndpoint.js +7 -6
  149. package/dist/oauth/endpoints/getMetaEndpoint.d.ts +0 -1
  150. package/dist/oauth/endpoints/getMetaEndpoint.js +18 -5
  151. package/dist/oauth/endpoints/getRedirectToLoginEndpoint.d.ts +0 -1
  152. package/dist/oauth/endpoints/getRedirectToLoginEndpoint.js +11 -4
  153. package/dist/oauth/exports/client.d.ts +0 -1
  154. package/dist/oauth/exports/client.js +0 -2
  155. package/dist/oauth/hooks/afterLogout.d.ts +0 -1
  156. package/dist/oauth/hooks/afterLogout.js +0 -2
  157. package/dist/oauth/hooks/me.d.ts +0 -1
  158. package/dist/oauth/hooks/me.js +0 -2
  159. package/dist/oauth/hooks/refresh.d.ts +0 -1
  160. package/dist/oauth/hooks/refresh.js +2 -3
  161. package/dist/oauth/index.d.ts +0 -1
  162. package/dist/oauth/index.js +27 -7
  163. package/dist/oauth/strategy/index.d.ts +0 -3
  164. package/dist/oauth/strategy/index.js +55 -34
  165. package/dist/oauth/types.d.ts +23 -7
  166. package/dist/oauth/types.js +0 -2
  167. package/dist/oauth/utilities/buildUnauthorizedRedirect.d.ts +14 -0
  168. package/dist/oauth/utilities/buildUnauthorizedRedirect.js +28 -0
  169. package/dist/oauth/utilities/clearCookie.d.ts +0 -1
  170. package/dist/oauth/utilities/clearCookie.js +5 -3
  171. package/dist/oauth/utilities/createCookieOptions.d.ts +0 -1
  172. package/dist/oauth/utilities/createCookieOptions.js +9 -4
  173. package/dist/oauth/utilities/createDebugLogger.d.ts +0 -1
  174. package/dist/oauth/utilities/createDebugLogger.js +0 -2
  175. package/dist/oauth/utilities/establishSession.d.ts +22 -0
  176. package/dist/oauth/utilities/establishSession.js +80 -0
  177. package/dist/oauth/utilities/exchangeCodeForAccessToken.d.ts +23 -0
  178. package/dist/oauth/utilities/exchangeCodeForAccessToken.js +26 -0
  179. package/dist/oauth/utilities/extractOrigin.d.ts +0 -1
  180. package/dist/oauth/utilities/extractOrigin.js +0 -2
  181. package/dist/oauth/utilities/figmaHostnames.d.ts +2 -0
  182. package/dist/oauth/utilities/figmaHostnames.js +24 -0
  183. package/dist/oauth/utilities/getAdminCollectionSlug.d.ts +0 -1
  184. package/dist/oauth/utilities/getAdminCollectionSlug.js +0 -2
  185. package/dist/oauth/utilities/getAuthorizeURL.d.ts +65 -2
  186. package/dist/oauth/utilities/getAuthorizeURL.js +57 -4
  187. package/dist/oauth/utilities/getCookieExpiration.d.ts +0 -1
  188. package/dist/oauth/utilities/getCookieExpiration.js +0 -2
  189. package/dist/oauth/utilities/getSecondsFromTokenExp.d.ts +0 -1
  190. package/dist/oauth/utilities/getSecondsFromTokenExp.js +0 -2
  191. package/dist/oauth/utilities/getTokenExp.d.ts +0 -1
  192. package/dist/oauth/utilities/getTokenExp.js +0 -2
  193. package/dist/oauth/utilities/getUsernameField.d.ts +0 -1
  194. package/dist/oauth/utilities/getUsernameField.js +0 -2
  195. package/dist/oauth/utilities/hasUserTokenPropsChanged.d.ts +0 -1
  196. package/dist/oauth/utilities/hasUserTokenPropsChanged.js +0 -2
  197. package/dist/oauth/utilities/isAbsoluteURL.d.ts +1 -0
  198. package/dist/oauth/utilities/isAbsoluteURL.js +1 -0
  199. package/dist/oauth/utilities/isDuplicateKeyError.d.ts +6 -0
  200. package/dist/oauth/utilities/isDuplicateKeyError.js +12 -0
  201. package/dist/oauth/utilities/mergeHeaders.d.ts +0 -1
  202. package/dist/oauth/utilities/mergeHeaders.js +0 -2
  203. package/dist/oauth/utilities/refreshTokens.d.ts +0 -1
  204. package/dist/oauth/utilities/refreshTokens.js +21 -13
  205. package/dist/oauth/utilities/withPartitionedCookie.d.ts +19 -0
  206. package/dist/oauth/utilities/withPartitionedCookie.js +26 -0
  207. package/dist/oauth/utils/getSearchParam.d.ts +17 -0
  208. package/dist/oauth/utils/getSearchParam.js +22 -0
  209. package/dist/plugin/adapter.d.ts +0 -1
  210. package/dist/plugin/adapter.js +0 -2
  211. package/dist/plugin/auth-preflight.d.ts +7 -0
  212. package/dist/plugin/auth-preflight.js +18 -0
  213. package/dist/plugin/bootstrap-preflight.d.ts +22 -0
  214. package/dist/plugin/bootstrap-preflight.js +43 -0
  215. package/dist/plugin/build-config.d.ts +27 -15
  216. package/dist/plugin/build-config.js +381 -18
  217. package/dist/plugin/dev-cookie-names.d.ts +13 -0
  218. package/dist/plugin/dev-cookie-names.js +17 -0
  219. package/dist/scss.d.js +2 -0
  220. package/dist/storage-content-api/api-types.d.ts +183 -0
  221. package/dist/storage-content-api/api-types.js +4 -0
  222. package/dist/storage-content-api/client-uploads/generate.d.ts +14 -0
  223. package/dist/storage-content-api/client-uploads/generate.js +69 -0
  224. package/dist/storage-content-api/client.d.ts +5 -0
  225. package/dist/storage-content-api/client.js +37 -0
  226. package/dist/storage-content-api/generateURL.d.ts +6 -0
  227. package/dist/storage-content-api/generateURL.js +6 -0
  228. package/dist/storage-content-api/handleDelete.d.ts +7 -0
  229. package/dist/storage-content-api/handleDelete.js +15 -0
  230. package/dist/storage-content-api/handleUpload.d.ts +10 -0
  231. package/dist/storage-content-api/handleUpload.js +162 -0
  232. package/dist/storage-content-api/index.d.ts +4 -0
  233. package/dist/storage-content-api/index.js +37 -0
  234. package/dist/storage-content-api/staticHandler.d.ts +9 -0
  235. package/dist/storage-content-api/staticHandler.js +61 -0
  236. package/dist/storage-content-api/types.d.ts +9 -0
  237. package/dist/storage-content-api/types.js +1 -0
  238. package/dist/storage-content-api/utilities/getSafeFilename.d.ts +11 -0
  239. package/dist/storage-content-api/utilities/getSafeFilename.js +59 -0
  240. package/dist/storage-content-api/utilities/index.d.ts +2 -0
  241. package/dist/storage-content-api/utilities/index.js +2 -0
  242. package/dist/storage-content-api/utilities/parseUploadReference.d.ts +17 -0
  243. package/dist/storage-content-api/utilities/parseUploadReference.js +27 -0
  244. package/dist/templates/.env.example +5 -0
  245. package/dist/templates/README.md +19 -0
  246. package/dist/types/config.d.ts +2 -2
  247. package/dist/types/config.js +0 -4
  248. package/dist/types.d.ts +10 -2
  249. package/dist/types.js +0 -2
  250. package/dist/utils/adapters/nextjs.d.ts +8 -0
  251. package/dist/utils/adapters/nextjs.js +61 -0
  252. package/dist/utils/adapters/nitro.d.ts +8 -0
  253. package/dist/utils/adapters/nitro.js +172 -0
  254. package/dist/utils/adapters/vite.d.ts +9 -0
  255. package/dist/utils/adapters/vite.js +31 -0
  256. package/dist/utils/asset-collection.d.ts +27 -7
  257. package/dist/utils/asset-collection.js +59 -32
  258. package/dist/utils/build-detection.d.ts +5 -12
  259. package/dist/utils/build-detection.js +74 -13
  260. package/dist/utils/build-lambda-zip.d.ts +25 -0
  261. package/dist/utils/build-lambda-zip.js +90 -0
  262. package/dist/utils/cache-bootstrap.d.ts +7 -0
  263. package/dist/utils/cache-bootstrap.js +16 -0
  264. package/dist/utils/config.d.ts +0 -1
  265. package/dist/utils/config.js +1 -3
  266. package/dist/utils/deploy-adapter.d.ts +45 -0
  267. package/dist/utils/deploy-adapter.js +56 -0
  268. package/dist/utils/download-template.d.ts +9 -2
  269. package/dist/utils/download-template.js +24 -20
  270. package/dist/utils/env-management.d.ts +24 -8
  271. package/dist/utils/env-management.js +119 -66
  272. package/dist/utils/format-env-suffix.d.ts +11 -0
  273. package/dist/utils/format-env-suffix.js +11 -0
  274. package/dist/utils/format.d.ts +0 -1
  275. package/dist/utils/format.js +0 -2
  276. package/dist/utils/formatter.d.ts +0 -1
  277. package/dist/utils/formatter.js +23 -13
  278. package/dist/utils/fs-utils.d.ts +12 -0
  279. package/dist/utils/fs-utils.js +55 -0
  280. package/dist/utils/git.d.ts +0 -1
  281. package/dist/utils/git.js +0 -2
  282. package/dist/utils/handle-upgrade.d.ts +8 -0
  283. package/dist/utils/handle-upgrade.js +39 -0
  284. package/dist/utils/is-debug.d.ts +0 -1
  285. package/dist/utils/is-debug.js +0 -2
  286. package/dist/utils/lambda-config.d.ts +3 -2
  287. package/dist/utils/lambda-config.js +75 -80
  288. package/dist/utils/load-payload-config.d.ts +9 -0
  289. package/dist/utils/load-payload-config.js +27 -0
  290. package/dist/utils/log.d.ts +0 -1
  291. package/dist/utils/log.js +0 -2
  292. package/dist/utils/messages.d.ts +1 -3
  293. package/dist/utils/messages.js +47 -13
  294. package/dist/utils/package-manager.d.ts +24 -1
  295. package/dist/utils/package-manager.js +53 -2
  296. package/dist/utils/parse-template-spec.d.ts +11 -0
  297. package/dist/utils/parse-template-spec.js +60 -0
  298. package/dist/utils/payload-config-ast.d.ts +27 -7
  299. package/dist/utils/payload-config-ast.js +106 -60
  300. package/dist/utils/payload-config-finder.d.ts +2 -3
  301. package/dist/utils/payload-config-finder.js +48 -11
  302. package/dist/utils/payload-config-modifier.d.ts +1 -2
  303. package/dist/utils/payload-config-modifier.js +114 -68
  304. package/dist/utils/payload-package-check.d.ts +28 -3
  305. package/dist/utils/payload-package-check.js +90 -31
  306. package/dist/utils/project.d.ts +8 -4
  307. package/dist/utils/project.js +63 -37
  308. package/dist/utils/resolve-environment.d.ts +13 -0
  309. package/dist/utils/resolve-environment.js +29 -0
  310. package/dist/utils/s3-upload.d.ts +7 -3
  311. package/dist/utils/s3-upload.js +44 -9
  312. package/dist/utils/token-display.d.ts +5 -2
  313. package/dist/utils/token-display.js +49 -24
  314. package/dist/utils/typescript-validator.d.ts +0 -1
  315. package/dist/utils/typescript-validator.js +4 -8
  316. package/dist/utils/version-check.d.ts +2 -0
  317. package/dist/utils/version-check.js +43 -0
  318. package/package.json +47 -16
  319. package/dist/api/control-plane.d.ts.map +0 -1
  320. package/dist/api/control-plane.js.map +0 -1
  321. package/dist/api/figma-api.d.ts.map +0 -1
  322. package/dist/api/figma-api.js.map +0 -1
  323. package/dist/auth/browser.d.ts.map +0 -1
  324. package/dist/auth/browser.js.map +0 -1
  325. package/dist/auth/callback-server.d.ts.map +0 -1
  326. package/dist/auth/callback-server.js.map +0 -1
  327. package/dist/auth/crypto-utils.d.ts.map +0 -1
  328. package/dist/auth/crypto-utils.js.map +0 -1
  329. package/dist/auth/jwt-validator.d.ts.map +0 -1
  330. package/dist/auth/jwt-validator.js.map +0 -1
  331. package/dist/auth/oauth-flow.d.ts.map +0 -1
  332. package/dist/auth/oauth-flow.js.map +0 -1
  333. package/dist/auth/pkce.d.ts.map +0 -1
  334. package/dist/auth/pkce.js.map +0 -1
  335. package/dist/auth/project-token.d.ts.map +0 -1
  336. package/dist/auth/project-token.js.map +0 -1
  337. package/dist/auth/refresh.d.ts.map +0 -1
  338. package/dist/auth/refresh.js.map +0 -1
  339. package/dist/auth/token-store.d.ts.map +0 -1
  340. package/dist/auth/token-store.js.map +0 -1
  341. package/dist/auth/types.d.ts.map +0 -1
  342. package/dist/auth/types.js.map +0 -1
  343. package/dist/cli.d.ts.map +0 -1
  344. package/dist/cli.js.map +0 -1
  345. package/dist/commands/deploy.d.ts.map +0 -1
  346. package/dist/commands/deploy.js.map +0 -1
  347. package/dist/commands/init.d.ts.map +0 -1
  348. package/dist/commands/init.js.map +0 -1
  349. package/dist/commands/list-tokens.d.ts.map +0 -1
  350. package/dist/commands/list-tokens.js.map +0 -1
  351. package/dist/commands/login.d.ts.map +0 -1
  352. package/dist/commands/login.js.map +0 -1
  353. package/dist/commands/logout.d.ts.map +0 -1
  354. package/dist/commands/logout.js.map +0 -1
  355. package/dist/config/oauth.d.ts.map +0 -1
  356. package/dist/config/oauth.js.map +0 -1
  357. package/dist/constants.d.ts.map +0 -1
  358. package/dist/constants.js.map +0 -1
  359. package/dist/exports/client.d.ts.map +0 -1
  360. package/dist/exports/client.js.map +0 -1
  361. package/dist/index.d.ts.map +0 -1
  362. package/dist/index.js.map +0 -1
  363. package/dist/oauth/components/LoginButton/index.d.ts.map +0 -1
  364. package/dist/oauth/components/LoginButton/index.js.map +0 -1
  365. package/dist/oauth/components/LogoutButton/index.d.ts.map +0 -1
  366. package/dist/oauth/components/LogoutButton/index.js.map +0 -1
  367. package/dist/oauth/defaults.d.ts.map +0 -1
  368. package/dist/oauth/defaults.js.map +0 -1
  369. package/dist/oauth/endpoints/getLoginEndpoint.d.ts.map +0 -1
  370. package/dist/oauth/endpoints/getLoginEndpoint.js.map +0 -1
  371. package/dist/oauth/endpoints/getLogoutEndpoint.d.ts.map +0 -1
  372. package/dist/oauth/endpoints/getLogoutEndpoint.js.map +0 -1
  373. package/dist/oauth/endpoints/getMetaEndpoint.d.ts.map +0 -1
  374. package/dist/oauth/endpoints/getMetaEndpoint.js.map +0 -1
  375. package/dist/oauth/endpoints/getRedirectToLoginEndpoint.d.ts.map +0 -1
  376. package/dist/oauth/endpoints/getRedirectToLoginEndpoint.js.map +0 -1
  377. package/dist/oauth/exports/client.d.ts.map +0 -1
  378. package/dist/oauth/exports/client.js.map +0 -1
  379. package/dist/oauth/hooks/afterLogout.d.ts.map +0 -1
  380. package/dist/oauth/hooks/afterLogout.js.map +0 -1
  381. package/dist/oauth/hooks/me.d.ts.map +0 -1
  382. package/dist/oauth/hooks/me.js.map +0 -1
  383. package/dist/oauth/hooks/refresh.d.ts.map +0 -1
  384. package/dist/oauth/hooks/refresh.js.map +0 -1
  385. package/dist/oauth/index.d.ts.map +0 -1
  386. package/dist/oauth/index.js.map +0 -1
  387. package/dist/oauth/strategy/index.d.ts.map +0 -1
  388. package/dist/oauth/strategy/index.js.map +0 -1
  389. package/dist/oauth/types.d.ts.map +0 -1
  390. package/dist/oauth/types.js.map +0 -1
  391. package/dist/oauth/utilities/clearCookie.d.ts.map +0 -1
  392. package/dist/oauth/utilities/clearCookie.js.map +0 -1
  393. package/dist/oauth/utilities/createCookieOptions.d.ts.map +0 -1
  394. package/dist/oauth/utilities/createCookieOptions.js.map +0 -1
  395. package/dist/oauth/utilities/createDebugLogger.d.ts.map +0 -1
  396. package/dist/oauth/utilities/createDebugLogger.js.map +0 -1
  397. package/dist/oauth/utilities/extractOrigin.d.ts.map +0 -1
  398. package/dist/oauth/utilities/extractOrigin.js.map +0 -1
  399. package/dist/oauth/utilities/getAdminCollectionSlug.d.ts.map +0 -1
  400. package/dist/oauth/utilities/getAdminCollectionSlug.js.map +0 -1
  401. package/dist/oauth/utilities/getAdminPath.d.ts +0 -8
  402. package/dist/oauth/utilities/getAdminPath.d.ts.map +0 -1
  403. package/dist/oauth/utilities/getAdminPath.js +0 -9
  404. package/dist/oauth/utilities/getAdminPath.js.map +0 -1
  405. package/dist/oauth/utilities/getAuthorizeURL.d.ts.map +0 -1
  406. package/dist/oauth/utilities/getAuthorizeURL.js.map +0 -1
  407. package/dist/oauth/utilities/getCookieExpiration.d.ts.map +0 -1
  408. package/dist/oauth/utilities/getCookieExpiration.js.map +0 -1
  409. package/dist/oauth/utilities/getSecondsFromTokenExp.d.ts.map +0 -1
  410. package/dist/oauth/utilities/getSecondsFromTokenExp.js.map +0 -1
  411. package/dist/oauth/utilities/getTokenExp.d.ts.map +0 -1
  412. package/dist/oauth/utilities/getTokenExp.js.map +0 -1
  413. package/dist/oauth/utilities/getUsernameField.d.ts.map +0 -1
  414. package/dist/oauth/utilities/getUsernameField.js.map +0 -1
  415. package/dist/oauth/utilities/hasUserTokenPropsChanged.d.ts.map +0 -1
  416. package/dist/oauth/utilities/hasUserTokenPropsChanged.js.map +0 -1
  417. package/dist/oauth/utilities/mergeHeaders.d.ts.map +0 -1
  418. package/dist/oauth/utilities/mergeHeaders.js.map +0 -1
  419. package/dist/oauth/utilities/refreshTokens.d.ts.map +0 -1
  420. package/dist/oauth/utilities/refreshTokens.js.map +0 -1
  421. package/dist/plugin/adapter.d.ts.map +0 -1
  422. package/dist/plugin/adapter.js.map +0 -1
  423. package/dist/plugin/build-config.d.ts.map +0 -1
  424. package/dist/plugin/build-config.js.map +0 -1
  425. package/dist/types/config.d.ts.map +0 -1
  426. package/dist/types/config.js.map +0 -1
  427. package/dist/types.d.ts.map +0 -1
  428. package/dist/types.js.map +0 -1
  429. package/dist/utils/asset-collection.d.ts.map +0 -1
  430. package/dist/utils/asset-collection.js.map +0 -1
  431. package/dist/utils/build-detection.d.ts.map +0 -1
  432. package/dist/utils/build-detection.js.map +0 -1
  433. package/dist/utils/config.d.ts.map +0 -1
  434. package/dist/utils/config.js.map +0 -1
  435. package/dist/utils/download-template.d.ts.map +0 -1
  436. package/dist/utils/download-template.js.map +0 -1
  437. package/dist/utils/env-management.d.ts.map +0 -1
  438. package/dist/utils/env-management.js.map +0 -1
  439. package/dist/utils/format.d.ts.map +0 -1
  440. package/dist/utils/format.js.map +0 -1
  441. package/dist/utils/formatter.d.ts.map +0 -1
  442. package/dist/utils/formatter.js.map +0 -1
  443. package/dist/utils/git.d.ts.map +0 -1
  444. package/dist/utils/git.js.map +0 -1
  445. package/dist/utils/is-debug.d.ts.map +0 -1
  446. package/dist/utils/is-debug.js.map +0 -1
  447. package/dist/utils/lambda-config.d.ts.map +0 -1
  448. package/dist/utils/lambda-config.js.map +0 -1
  449. package/dist/utils/log.d.ts.map +0 -1
  450. package/dist/utils/log.js.map +0 -1
  451. package/dist/utils/messages.d.ts.map +0 -1
  452. package/dist/utils/messages.js.map +0 -1
  453. package/dist/utils/package-manager.d.ts.map +0 -1
  454. package/dist/utils/package-manager.js.map +0 -1
  455. package/dist/utils/payload-config-ast.d.ts.map +0 -1
  456. package/dist/utils/payload-config-ast.js.map +0 -1
  457. package/dist/utils/payload-config-finder.d.ts.map +0 -1
  458. package/dist/utils/payload-config-finder.js.map +0 -1
  459. package/dist/utils/payload-config-modifier.d.ts.map +0 -1
  460. package/dist/utils/payload-config-modifier.js.map +0 -1
  461. package/dist/utils/payload-package-check.d.ts.map +0 -1
  462. package/dist/utils/payload-package-check.js.map +0 -1
  463. package/dist/utils/project.d.ts.map +0 -1
  464. package/dist/utils/project.js.map +0 -1
  465. package/dist/utils/s3-upload.d.ts.map +0 -1
  466. package/dist/utils/s3-upload.js.map +0 -1
  467. package/dist/utils/token-display.d.ts.map +0 -1
  468. package/dist/utils/token-display.js.map +0 -1
  469. package/dist/utils/typescript-validator.d.ts.map +0 -1
  470. package/dist/utils/typescript-validator.js.map +0 -1
@@ -0,0 +1,24 @@
1
+ // Copied from share/figma-url/src/hostnames.ts.
2
+ // This package is published to npm (@payloadcms/figma) and cannot import from
3
+ // the monorepo's internal share/ tree, so the list is duplicated here.
4
+ export const FIGMA_HOSTNAMES = new Set([
5
+ 'embed.figma.com',
6
+ 'embed.figma-gov.com',
7
+ 'embed.local.figma.engineering',
8
+ 'embed.staging.figma.com',
9
+ 'figma.com',
10
+ 'figma-gov.com',
11
+ 'local.figma.engineering',
12
+ 'localhost',
13
+ 'staging.figma.com',
14
+ 'www.figma.com',
15
+ 'www.figma-gov.com'
16
+ ]);
17
+ export const isFigmaOrigin = (origin)=>{
18
+ try {
19
+ const { hostname } = new URL(origin);
20
+ return FIGMA_HOSTNAMES.has(hostname) || hostname.endsWith('.figdev.systems');
21
+ } catch {
22
+ return false;
23
+ }
24
+ };
@@ -1,3 +1,2 @@
1
1
  import type { Config } from 'payload';
2
2
  export declare const getAdminCollectionSlug: (config: Config) => string;
3
- //# sourceMappingURL=getAdminCollectionSlug.d.ts.map
@@ -14,5 +14,3 @@ export const getAdminCollectionSlug = (config)=>{
14
14
  // Otherwise, assume that it'll be the built-in auth
15
15
  return 'users';
16
16
  };
17
-
18
- //# sourceMappingURL=getAdminCollectionSlug.js.map
@@ -5,6 +5,16 @@ interface Args {
5
5
  collection: CollectionConfig;
6
6
  collectionOptions: CollectionOptions;
7
7
  endpointSlug: string;
8
+ /**
9
+ * If the request already has an `__Host-payload-oauth-state_csrf` cookie,
10
+ * pass its value here — `getAuthorizeURL` will reuse it as `state.csrf`
11
+ * instead of minting a fresh nonce. This is what makes `/meta`
12
+ * idempotent across multiple calls in a single browser session (React
13
+ * Strict Mode re-mounts, retry-after-failure, multiple tabs) and
14
+ * prevents the cookie/state mismatch race where one call overwrites
15
+ * another call's cookie.
16
+ */
17
+ existingCsrfNonce?: null | string;
8
18
  failedRedirect?: unknown;
9
19
  payload: Payload;
10
20
  pluginOptions: PluginOptions;
@@ -12,6 +22,59 @@ interface Args {
12
22
  serverURLOverride?: unknown;
13
23
  strategy: Strategy;
14
24
  }
15
- export declare const getAuthorizeURL: ({ collection, collectionOptions, endpointSlug, failedRedirect, payload, pluginOptions, redirect, serverURLOverride, strategy, }: Args) => Promise<string>;
25
+ export interface AuthorizeURLParams {
26
+ [key: string]: string;
27
+ client_id: string;
28
+ code_challenge: string;
29
+ code_challenge_method: string;
30
+ nonce: string;
31
+ redirect_uri: string;
32
+ response_mode: string;
33
+ response_type: string;
34
+ scope: string;
35
+ state: string;
36
+ }
37
+ export interface AuthorizeURLResult {
38
+ authorizeURL: string;
39
+ /**
40
+ * The plaintext CSRF nonce that the caller MUST set as an HttpOnly
41
+ * cookie on the response (see `OAUTH_STATE_CSRF_COOKIE_NAME`). `/sso/login`
42
+ * compares this value to the cookie on callback — this is the
43
+ * browser-binding required by RFC 6749 §10.12.
44
+ */
45
+ csrfNonce: string;
46
+ params: AuthorizeURLParams;
47
+ }
48
+ export declare const getAuthorizeURL: ({ collection, collectionOptions, endpointSlug, existingCsrfNonce, failedRedirect, payload, pluginOptions, redirect, serverURLOverride, strategy, }: Args) => Promise<AuthorizeURLResult>;
49
+ /**
50
+ * Name of the HttpOnly cookie that carries the browser-bound CSRF nonce
51
+ * for the OAuth flow. The `__Host-` prefix instructs browsers to enforce:
52
+ * Secure, no Domain attribute (host-only), and Path=/ — which together
53
+ * prevent sibling subdomains from setting or overwriting it.
54
+ */
55
+ export declare const OAUTH_STATE_CSRF_COOKIE_NAME = "__Host-payload-oauth-state_csrf";
56
+ /**
57
+ * Build the `Set-Cookie` header value for the CSRF cookie. SameSite=None
58
+ * + Secure so the cookie survives the IdP cross-site redirect back into
59
+ * /sso/login, AND so the iframe auto-login path works (the iframe is a
60
+ * third-party context from the top-level Figma page). Path=/ is required
61
+ * by the `__Host-` prefix.
62
+ *
63
+ * `Partitioned` (CHIPS) is required because the Make preview embeds the
64
+ * admin panel in a cross-site iframe. Under Chrome's third-party-cookie
65
+ * restrictions a `SameSite=None` cookie set in a third-party context is
66
+ * NOT sent back unless it is partitioned by the top-level site. Without it
67
+ * the `__Host-payload-oauth-state_csrf` cookie is dropped on the way back
68
+ * to /sso/login, the cookie↔state.csrf binding check fails, and login dies
69
+ * with "CSRF cookie mismatch" (intermittent sign-in loop). `__Host-` and
70
+ * `Partitioned` are mutually compatible.
71
+ */
72
+ export declare const buildCsrfCookieHeader: (nonce: string) => string;
73
+ /**
74
+ * `Set-Cookie` header to clear the CSRF cookie after a successful (or
75
+ * failed) callback. Same attributes as the set version, plus Max-Age=0.
76
+ * Must include `Partitioned` so the clear targets the same partitioned
77
+ * cookie jar the set wrote to (an unpartitioned clear would not match).
78
+ */
79
+ export declare const buildCsrfCookieClearHeader: () => string;
16
80
  export {};
17
- //# sourceMappingURL=getAuthorizeURL.d.ts.map
@@ -2,14 +2,21 @@ import crypto from 'crypto';
2
2
  import * as QueryString from 'qs-esm';
3
3
  import { v4 as uuid } from 'uuid';
4
4
  import { defaultScope } from '../defaults.js';
5
- export const getAuthorizeURL = async ({ collection, collectionOptions, endpointSlug, failedRedirect, payload, pluginOptions, redirect, serverURLOverride, strategy })=>{
5
+ export const getAuthorizeURL = async ({ collection, collectionOptions, endpointSlug, existingCsrfNonce, failedRedirect, payload, pluginOptions, redirect, serverURLOverride, strategy })=>{
6
6
  const { redirectServerURL } = pluginOptions;
7
7
  await strategy.ensureMeta();
8
8
  // Generate a random code verifier
9
9
  const codeVerifier = crypto.randomBytes(32).toString('base64url');
10
10
  // Create a code challenge by hashing the code verifier
11
11
  const code_challenge = crypto.createHash('sha256').update(codeVerifier).digest('base64url');
12
+ // Nonce that goes in both `state.csrf` and the `__Host-payload-oauth-state_csrf`
13
+ // HttpOnly cookie. /sso/login compares the two on callback to defeat
14
+ // login-CSRF (RFC 6749 §10.12). Reused from the request's existing cookie
15
+ // when present so `/meta` is idempotent across multiple calls; otherwise
16
+ // freshly minted.
17
+ const csrfNonce = existingCsrfNonce || crypto.randomBytes(32).toString('base64url');
12
18
  const state = {
19
+ csrf: csrfNonce,
13
20
  sig: payload.encrypt(strategy.name),
14
21
  verifier: payload.encrypt(codeVerifier)
15
22
  };
@@ -39,7 +46,53 @@ export const getAuthorizeURL = async ({ collection, collectionOptions, endpointS
39
46
  const authorizeURL = `${strategy.meta?.authorization_endpoint}?${QueryString.stringify(params, {
40
47
  encode: false
41
48
  })}`;
42
- return authorizeURL;
49
+ return {
50
+ authorizeURL,
51
+ csrfNonce,
52
+ params
53
+ };
43
54
  };
44
-
45
- //# sourceMappingURL=getAuthorizeURL.js.map
55
+ /**
56
+ * Name of the HttpOnly cookie that carries the browser-bound CSRF nonce
57
+ * for the OAuth flow. The `__Host-` prefix instructs browsers to enforce:
58
+ * Secure, no Domain attribute (host-only), and Path=/ — which together
59
+ * prevent sibling subdomains from setting or overwriting it.
60
+ */ export const OAUTH_STATE_CSRF_COOKIE_NAME = '__Host-payload-oauth-state_csrf';
61
+ /**
62
+ * Build the `Set-Cookie` header value for the CSRF cookie. SameSite=None
63
+ * + Secure so the cookie survives the IdP cross-site redirect back into
64
+ * /sso/login, AND so the iframe auto-login path works (the iframe is a
65
+ * third-party context from the top-level Figma page). Path=/ is required
66
+ * by the `__Host-` prefix.
67
+ *
68
+ * `Partitioned` (CHIPS) is required because the Make preview embeds the
69
+ * admin panel in a cross-site iframe. Under Chrome's third-party-cookie
70
+ * restrictions a `SameSite=None` cookie set in a third-party context is
71
+ * NOT sent back unless it is partitioned by the top-level site. Without it
72
+ * the `__Host-payload-oauth-state_csrf` cookie is dropped on the way back
73
+ * to /sso/login, the cookie↔state.csrf binding check fails, and login dies
74
+ * with "CSRF cookie mismatch" (intermittent sign-in loop). `__Host-` and
75
+ * `Partitioned` are mutually compatible.
76
+ */ export const buildCsrfCookieHeader = (nonce)=>[
77
+ `${OAUTH_STATE_CSRF_COOKIE_NAME}=${nonce}`,
78
+ 'HttpOnly',
79
+ 'Secure',
80
+ 'SameSite=None',
81
+ 'Partitioned',
82
+ 'Path=/',
83
+ 'Max-Age=600'
84
+ ].join('; ');
85
+ /**
86
+ * `Set-Cookie` header to clear the CSRF cookie after a successful (or
87
+ * failed) callback. Same attributes as the set version, plus Max-Age=0.
88
+ * Must include `Partitioned` so the clear targets the same partitioned
89
+ * cookie jar the set wrote to (an unpartitioned clear would not match).
90
+ */ export const buildCsrfCookieClearHeader = ()=>[
91
+ `${OAUTH_STATE_CSRF_COOKIE_NAME}=`,
92
+ 'HttpOnly',
93
+ 'Secure',
94
+ 'SameSite=None',
95
+ 'Partitioned',
96
+ 'Path=/',
97
+ 'Max-Age=0'
98
+ ].join('; ');
@@ -1,4 +1,3 @@
1
1
  type CookieExpires = Date | number | string | undefined;
2
2
  export declare const getCookieExpiration: (expires?: CookieExpires) => Date;
3
3
  export {};
4
- //# sourceMappingURL=getCookieExpiration.d.ts.map
@@ -7,5 +7,3 @@ export const getCookieExpiration = (expires)=>{
7
7
  currentTime.setSeconds(currentTime.getSeconds() + seconds);
8
8
  return currentTime;
9
9
  };
10
-
11
- //# sourceMappingURL=getCookieExpiration.js.map
@@ -1,2 +1 @@
1
1
  export declare function getSecondsFromTokenExp(futureUnixTimestamp: number): number;
2
- //# sourceMappingURL=getSecondsFromTokenExp.d.ts.map
@@ -3,5 +3,3 @@ export function getSecondsFromTokenExp(futureUnixTimestamp) {
3
3
  ;
4
4
  return futureUnixTimestamp - now;
5
5
  }
6
-
7
- //# sourceMappingURL=getSecondsFromTokenExp.js.map
@@ -3,4 +3,3 @@ export declare const getTokenExp: ({ debugLogger, token, }: {
3
3
  debugLogger: DebugLogger;
4
4
  token: string;
5
5
  }) => number | undefined;
6
- //# sourceMappingURL=getTokenExp.d.ts.map
@@ -16,5 +16,3 @@ export const getTokenExp = ({ debugLogger, token })=>{
16
16
  }
17
17
  return undefined;
18
18
  };
19
-
20
- //# sourceMappingURL=getTokenExp.js.map
@@ -6,4 +6,3 @@ interface Args {
6
6
  }
7
7
  export declare const getUsernameField: ({ collection, collectionOptions, }: Args) => EmailField | TextField;
8
8
  export {};
9
- //# sourceMappingURL=getUsernameField.d.ts.map
@@ -16,5 +16,3 @@ export const getUsernameField = ({ collection, collectionOptions })=>{
16
16
  }
17
17
  return collectionOptions.usernameField;
18
18
  };
19
-
20
- //# sourceMappingURL=getUsernameField.js.map
@@ -5,4 +5,3 @@ type User = Record<string, unknown>;
5
5
  */
6
6
  export declare const hasUserTokenPropsChanged: (user: User, token: Record<string, unknown>) => boolean;
7
7
  export {};
8
- //# sourceMappingURL=hasUserTokenPropsChanged.d.ts.map
@@ -21,5 +21,3 @@ function compareValues(userVal, tokenVal) {
21
21
  }
22
22
  return userVal !== tokenVal;
23
23
  }
24
-
25
- //# sourceMappingURL=hasUserTokenPropsChanged.js.map
@@ -0,0 +1 @@
1
+ export declare const isAbsoluteURL: (url: string) => boolean;
@@ -0,0 +1 @@
1
+ export const isAbsoluteURL = (url)=>/^[a-z][a-z\d+.-]*:/.test(url);
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Check if an error is a duplicate key/unique constraint violation from Content API.
3
+ *
4
+ * Content API returns HTTP 409 with "conflict" or "already exists" in the message.
5
+ */
6
+ export declare function isDuplicateKeyError(error: unknown): boolean;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Check if an error is a duplicate key/unique constraint violation from Content API.
3
+ *
4
+ * Content API returns HTTP 409 with "conflict" or "already exists" in the message.
5
+ */ export function isDuplicateKeyError(error) {
6
+ if (!error || typeof error !== 'object') {
7
+ return false;
8
+ }
9
+ const err = error;
10
+ const message = typeof err.message === 'string' ? err.message : '';
11
+ return message.includes('409') || message.toLowerCase().includes('conflict') || message.toLowerCase().includes('already exists');
12
+ }
@@ -1,2 +1 @@
1
1
  export declare function mergeHeaders(sourceHeaders: Headers, destinationHeaders: Headers): void;
2
- //# sourceMappingURL=mergeHeaders.d.ts.map
@@ -33,5 +33,3 @@ export function mergeHeaders(sourceHeaders, destinationHeaders) {
33
33
  destinationHeaders.append(key, value);
34
34
  });
35
35
  }
36
-
37
- //# sourceMappingURL=mergeHeaders.js.map
@@ -13,4 +13,3 @@ type Result = {
13
13
  } | false;
14
14
  export declare const refreshTokens: ({ payload, refreshToken, strategy }: Args) => Promise<Result>;
15
15
  export {};
16
- //# sourceMappingURL=refreshTokens.d.ts.map
@@ -1,10 +1,11 @@
1
1
  import { generateCookie } from 'payload';
2
- import { getProjectToken } from '../../api/figma-api.js';
3
- import { validateProjectToken } from '../../auth/jwt-validator.js';
4
- import { getEnvironment } from '../../constants.js';
2
+ import { getPayloadAdminToken } from '../../api/figma-api.js';
3
+ import { validatePayloadAdminToken } from '../../auth/jwt-validator.js';
4
+ import { getInfraEnvironment } from '../../constants.js';
5
5
  import { createCookieOptions } from './createCookieOptions.js';
6
6
  import { createDebugLogger } from './createDebugLogger.js';
7
7
  import { getCookieExpiration } from './getCookieExpiration.js';
8
+ import { withPartitionedCookie } from './withPartitionedCookie.js';
8
9
  export const refreshTokens = async ({ payload, refreshToken, strategy })=>{
9
10
  const debugLogger = createDebugLogger(payload, strategy.debug);
10
11
  debugLogger.info({
@@ -15,12 +16,18 @@ export const refreshTokens = async ({ payload, refreshToken, strategy })=>{
15
16
  // but refresh token is still valid
16
17
  // so we will refresh both tokens
17
18
  try {
18
- // Get another project token
19
- const { expiresAt, token } = await getProjectToken(refreshToken, 'someproject');
19
+ // Get another Payload Admin token.
20
+ const environmentId = payload.config.custom.figma.environmentId;
21
+ if (!environmentId) {
22
+ throw new Error('Cannot refresh Payload Admin token: environmentId is not configured');
23
+ }
24
+ const { expiresAt, token } = await getPayloadAdminToken({
25
+ type: 'oauth',
26
+ token: refreshToken
27
+ }, environmentId);
20
28
  debugLogger.info({
21
29
  expiresAt,
22
- msg: 'Received new tokens from Figma API',
23
- token
30
+ msg: 'Received new Payload Admin token from Figma API'
24
31
  });
25
32
  // On error, no user
26
33
  if (!token) {
@@ -31,8 +38,7 @@ export const refreshTokens = async ({ payload, refreshToken, strategy })=>{
31
38
  }
32
39
  if (token) {
33
40
  debugLogger.info({
34
- msg: 'Successfully refreshed project token',
35
- token
41
+ msg: 'Successfully refreshed Payload Admin token'
36
42
  });
37
43
  const expires_in = new Date(expiresAt);
38
44
  const cookieOptions = createCookieOptions({
@@ -47,8 +53,12 @@ export const refreshTokens = async ({ payload, refreshToken, strategy })=>{
47
53
  returnCookieAsObject: false,
48
54
  value: token
49
55
  });
50
- headers.append('Set-Cookie', tokenCookie);
51
- const decodedOauthToken = await validateProjectToken(token, getEnvironment());
56
+ headers.append('Set-Cookie', withPartitionedCookie(tokenCookie));
57
+ const decodedOauthToken = await validatePayloadAdminToken({
58
+ audience: environmentId,
59
+ environment: getInfraEnvironment(),
60
+ token
61
+ });
52
62
  return {
53
63
  decodedOauthToken,
54
64
  headers,
@@ -63,5 +73,3 @@ export const refreshTokens = async ({ payload, refreshToken, strategy })=>{
63
73
  }
64
74
  return false;
65
75
  };
66
-
67
- //# sourceMappingURL=refreshTokens.js.map
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Append the `Partitioned` (CHIPS) attribute to a `Set-Cookie` header string.
3
+ *
4
+ * Payload's `generateCookie` cannot emit `Partitioned`, but Chrome requires it
5
+ * for a `SameSite=None` cookie set inside the cross-site Make-preview iframe
6
+ * (top-level `figma.com`, app on a different site) to be stored and sent back.
7
+ * Without it the session cookies are dropped, `/api/users/me` sees no token,
8
+ * and the admin login loops forever. The CSRF cookie avoids this by
9
+ * hand-building its header (`buildCsrfCookieHeader`); the session cookies go
10
+ * through `generateCookie`, so we add the attribute here to match.
11
+ *
12
+ * Only applied to `Secure` cookies: `Partitioned` requires `Secure`, and a
13
+ * partitioned non-secure cookie is rejected outright. Idempotent. The presence
14
+ * check matches a bare `Secure` or `generateCookie`'s `Secure=true` form, but
15
+ * deliberately NOT `Secure=false` — `generateCookie` never emits that today
16
+ * (it only writes `Secure` when truthy), but the check stays defensive so a
17
+ * future/hand-built `Secure=false` can't get `Partitioned` (which requires Secure).
18
+ */
19
+ export declare const withPartitionedCookie: (cookie: string) => string;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Append the `Partitioned` (CHIPS) attribute to a `Set-Cookie` header string.
3
+ *
4
+ * Payload's `generateCookie` cannot emit `Partitioned`, but Chrome requires it
5
+ * for a `SameSite=None` cookie set inside the cross-site Make-preview iframe
6
+ * (top-level `figma.com`, app on a different site) to be stored and sent back.
7
+ * Without it the session cookies are dropped, `/api/users/me` sees no token,
8
+ * and the admin login loops forever. The CSRF cookie avoids this by
9
+ * hand-building its header (`buildCsrfCookieHeader`); the session cookies go
10
+ * through `generateCookie`, so we add the attribute here to match.
11
+ *
12
+ * Only applied to `Secure` cookies: `Partitioned` requires `Secure`, and a
13
+ * partitioned non-secure cookie is rejected outright. Idempotent. The presence
14
+ * check matches a bare `Secure` or `generateCookie`'s `Secure=true` form, but
15
+ * deliberately NOT `Secure=false` — `generateCookie` never emits that today
16
+ * (it only writes `Secure` when truthy), but the check stays defensive so a
17
+ * future/hand-built `Secure=false` can't get `Partitioned` (which requires Secure).
18
+ */ export const withPartitionedCookie = (cookie)=>{
19
+ if (!/;\s*Secure(?:=true)?(?:;|$)/i.test(cookie)) {
20
+ return cookie;
21
+ }
22
+ if (/;\s*Partitioned(?:=|;|$)/i.test(cookie)) {
23
+ return cookie;
24
+ }
25
+ return `${cookie}; Partitioned`;
26
+ };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Retrieves a single search-parameter value from the return type of
3
+ * `@payloadcms/ui`'s `useSearchParams` hook.
4
+ *
5
+ * In Payload v4 the hook returns a `URLSearchParams`-like object; params are
6
+ * read via `.get(key)`:
7
+ * ```ts
8
+ * import { useSearchParams } from '@payloadcms/ui'
9
+ * const searchParams = useSearchParams()
10
+ * const value = searchParams.get('redirect') // string | null
11
+ * ```
12
+ *
13
+ * @param searchParamsHookResult - Raw return value of `useSearchParams()` from `@payloadcms/ui`.
14
+ * @param key - The query-string parameter name to read.
15
+ * @returns The first string value for `key`, or `undefined` if absent.
16
+ */
17
+ export declare const getSearchParam: (searchParamsHookResult: unknown, key: string) => string | undefined;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Retrieves a single search-parameter value from the return type of
3
+ * `@payloadcms/ui`'s `useSearchParams` hook.
4
+ *
5
+ * In Payload v4 the hook returns a `URLSearchParams`-like object; params are
6
+ * read via `.get(key)`:
7
+ * ```ts
8
+ * import { useSearchParams } from '@payloadcms/ui'
9
+ * const searchParams = useSearchParams()
10
+ * const value = searchParams.get('redirect') // string | null
11
+ * ```
12
+ *
13
+ * @param searchParamsHookResult - Raw return value of `useSearchParams()` from `@payloadcms/ui`.
14
+ * @param key - The query-string parameter name to read.
15
+ * @returns The first string value for `key`, or `undefined` if absent.
16
+ */ export const getSearchParam = (searchParamsHookResult, key)=>{
17
+ if (searchParamsHookResult && typeof searchParamsHookResult === 'object' && 'get' in searchParamsHookResult && typeof searchParamsHookResult.get === 'function') {
18
+ const value = searchParamsHookResult.get(key);
19
+ return typeof value === 'string' ? value : undefined;
20
+ }
21
+ return undefined;
22
+ };
@@ -2,4 +2,3 @@ import type { DatabaseAdapterObj } from 'payload';
2
2
  export interface FigmaContentSystemOptions {
3
3
  }
4
4
  export declare function figmaContentSystem(options?: FigmaContentSystemOptions): DatabaseAdapterObj;
5
- //# sourceMappingURL=adapter.d.ts.map
@@ -135,5 +135,3 @@ export function figmaContentSystem(options = {}) {
135
135
  init: adapter
136
136
  };
137
137
  }
138
-
139
- //# sourceMappingURL=adapter.js.map
@@ -0,0 +1,7 @@
1
+ import type { TokenStore } from '../auth/token-store.js';
2
+ /**
3
+ * Print a one-shot banner when the plugin is about to use `tokenStore`
4
+ * auth but no valid OAuth credential is present. Keeps the dev loop
5
+ * actionable instead of relying on per-request middleware errors.
6
+ */
7
+ export declare function logMissingCliAuth(tokenStore: TokenStore): void;
@@ -0,0 +1,18 @@
1
+ import * as p from '@clack/prompts';
2
+ import pc from 'picocolors';
3
+ /**
4
+ * Print a one-shot banner when the plugin is about to use `tokenStore`
5
+ * auth but no valid OAuth credential is present. Keeps the dev loop
6
+ * actionable instead of relying on per-request middleware errors.
7
+ */ export function logMissingCliAuth(tokenStore) {
8
+ if (tokenStore.hasValidOauthToken()) {
9
+ return;
10
+ }
11
+ const lines = [
12
+ 'Not logged in to the Figma CLI.',
13
+ 'Content API requests will fail until you authenticate.',
14
+ '',
15
+ `Run ${pc.cyan('npx @payloadcms/figma login')} to log in, then restart the dev server.`
16
+ ];
17
+ p.note(lines.join('\n'), pc.yellow('Figma authentication required'));
18
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Reason the Content System ID could not be resolved. Drives the
3
+ * banner's copy so the dev sees the specific remediation step.
4
+ */
5
+ export type MissingContentSystemIdReason = {
6
+ environmentName: string;
7
+ kind: 'environment-not-found';
8
+ projectId: string;
9
+ } | {
10
+ kind: 'network';
11
+ message: string;
12
+ } | {
13
+ kind: 'no-config';
14
+ } | {
15
+ kind: 'unauthenticated';
16
+ };
17
+ /**
18
+ * Print a banner explaining why Content System ID resolution failed and
19
+ * what to run next. Called just before `buildFigmaConfig` throws, so the
20
+ * actionable step is visible above the stack trace.
21
+ */
22
+ export declare function logMissingContentSystemId(reason: MissingContentSystemIdReason): void;
@@ -0,0 +1,43 @@
1
+ import * as p from '@clack/prompts';
2
+ import pc from 'picocolors';
3
+ /**
4
+ * Print a banner explaining why Content System ID resolution failed and
5
+ * what to run next. Called just before `buildFigmaConfig` throws, so the
6
+ * actionable step is visible above the stack trace.
7
+ */ export function logMissingContentSystemId(reason) {
8
+ const lines = buildBody(reason);
9
+ p.note(lines.join('\n'), pc.yellow('Figma project not configured'));
10
+ }
11
+ function buildBody(reason) {
12
+ const loginCmd = pc.cyan('npx @payloadcms/figma login');
13
+ const initCmd = pc.cyan('npx @payloadcms/figma init');
14
+ const initForceCmd = pc.cyan('npx @payloadcms/figma init --force');
15
+ if (reason.kind === 'no-config') {
16
+ return [
17
+ 'No Figma project configuration found.',
18
+ '',
19
+ `Run ${initCmd} to set up this project.`
20
+ ];
21
+ }
22
+ if (reason.kind === 'unauthenticated') {
23
+ return [
24
+ 'Project config found, but you are not logged in.',
25
+ 'Cannot fetch bootstrap data without a valid session.',
26
+ '',
27
+ `Run ${loginCmd}, then restart the dev server.`
28
+ ];
29
+ }
30
+ if (reason.kind === 'network') {
31
+ return [
32
+ 'Could not reach the Figma API to fetch bootstrap data.',
33
+ `Error: ${reason.message}`,
34
+ '',
35
+ 'Check your network, then restart the dev server.'
36
+ ];
37
+ }
38
+ return [
39
+ `Environment ${pc.bold(reason.environmentName)} not found for project ${pc.bold(reason.projectId)}.`,
40
+ '',
41
+ `Run ${initForceCmd} to reconfigure, or set FIGMA_ENVIRONMENT_NAME to a valid environment.`
42
+ ];
43
+ }
@@ -1,4 +1,13 @@
1
1
  import type { Config, SanitizedConfig } from 'payload';
2
+ /**
3
+ * Worker-trusted marker injected by Figma's sites-worker after it validates the
4
+ * X-Figma-Job-Queues-Auth-Bypass secret on a Payload jobs endpoint. The default
5
+ * `jobs.access.run` below honors this marker so Sinatra (async-job-workflow)
6
+ * can drive job runs without the bypass secret ever reaching tenant code.
7
+ *
8
+ * KEEP_IN_SYNC(cloudflare/wrangler/sites-worker/src/auth.ts): FIGMA_INTERNAL_FORWARDED_HAS_AUTH_BYPASS_HEADER
9
+ */
10
+ export declare const FIGMA_INTERNAL_FORWARDED_HAS_AUTH_BYPASS_HEADER = "figma-internal-forwarded-has-auth-bypass";
2
11
  /**
3
12
  * Configuration type for Payload projects on the Figma platform.
4
13
  *
@@ -6,38 +15,41 @@ import type { Config, SanitizedConfig } from 'payload';
6
15
  * - `db`: Omitted (auto-injected by Figma platform)
7
16
  * - `secret`: Omitted (auto-injected by Figma platform)
8
17
  * - `editor`: Optional (defaults to lexicalEditor() if not provided)
18
+ * - `contentSystemId`: Optional (resolved automatically from env vars or bootstrap cache)
9
19
  *
10
20
  * @example
11
- * // Minimal config
21
+ * // Minimal config (contentSystemId resolved automatically)
12
22
  * const config: FigmaConfig = {
23
+ * figma: {},
13
24
  * collections: [...]
14
25
  * }
15
26
  *
16
27
  * @example
17
28
  * // With custom editor
18
29
  * const config: FigmaConfig = {
30
+ * figma: {},
19
31
  * collections: [...],
20
32
  * editor: lexicalEditor({ features: [...] })
21
33
  * }
34
+ *
35
+ * @example
36
+ * // Disable Content System (use custom db)
37
+ * const config: FigmaConfig = {
38
+ * figma: {
39
+ * useContentSystem: false
40
+ * },
41
+ * db: mongooseAdapter({ url: process.env.DATABASE_URI }),
42
+ * collections: [...]
43
+ * }
22
44
  */
23
45
  export type FigmaConfig = {
24
46
  editor?: Config['editor'];
25
47
  } & {
26
48
  figma: {
27
- region: string;
28
- tenantId: string;
49
+ contentSystemId?: string;
50
+ environmentId?: string;
51
+ storage?: boolean;
29
52
  useContentSystem?: boolean;
30
53
  };
31
54
  } & Omit<Config, 'db' | 'editor' | 'secret'> & Partial<Pick<Config, 'db'>>;
32
- /**
33
- * Figma platform wrapper for Payload's buildConfig.
34
- * Automatically injects:
35
- * - Figma database adapter
36
- * - Secret (platform-provided)
37
- * - Default lexicalEditor (if no custom editor specified)
38
- *
39
- * @param config - Payload configuration (db and secret omitted, editor optional)
40
- * @returns Promise<SanitizedConfig> - Built Payload configuration
41
- */
42
- export declare function buildConfig(config: FigmaConfig): Promise<SanitizedConfig>;
43
- //# sourceMappingURL=build-config.d.ts.map
55
+ export declare function buildFigmaConfig(config: FigmaConfig): Promise<SanitizedConfig>;