@payloadcms/figma 0.0.1-alpha.9 → 0.1.0-alpha.1

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 (472) 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 +8215 -0
  64. package/dist/db-content-api/generated/content-api-types.js +5 -0
  65. package/dist/db-content-api/index.d.ts +40 -0
  66. package/dist/db-content-api/index.js +883 -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/clientVersionHeaders.d.ts +7 -0
  78. package/dist/db-content-api/utilities/clientVersionHeaders.js +15 -0
  79. package/dist/db-content-api/utilities/data/applyDefaults.d.ts +6 -0
  80. package/dist/db-content-api/utilities/data/applyDefaults.js +75 -0
  81. package/dist/db-content-api/utilities/data/atomicOperations.d.ts +16 -0
  82. package/dist/db-content-api/utilities/data/atomicOperations.js +48 -0
  83. package/dist/db-content-api/utilities/data/castFieldValue.d.ts +10 -0
  84. package/dist/db-content-api/utilities/data/castFieldValue.js +66 -0
  85. package/dist/db-content-api/utilities/data/convertRelationshipIds.d.ts +25 -0
  86. package/dist/db-content-api/utilities/data/convertRelationshipIds.js +109 -0
  87. package/dist/db-content-api/utilities/data/index.d.ts +48 -0
  88. package/dist/db-content-api/utilities/data/index.js +315 -0
  89. package/dist/db-content-api/utilities/data/isLocaleMap.d.ts +10 -0
  90. package/dist/db-content-api/utilities/data/isLocaleMap.js +13 -0
  91. package/dist/db-content-api/utilities/data/pointShape.d.ts +3 -0
  92. package/dist/db-content-api/utilities/data/pointShape.js +43 -0
  93. package/dist/db-content-api/utilities/data/removeVirtualFields.d.ts +11 -0
  94. package/dist/db-content-api/utilities/data/removeVirtualFields.js +52 -0
  95. package/dist/db-content-api/utilities/data/resolveFieldLocalization.d.ts +18 -0
  96. package/dist/db-content-api/utilities/data/resolveFieldLocalization.js +21 -0
  97. package/dist/db-content-api/utilities/data/richTextShape.d.ts +3 -0
  98. package/dist/db-content-api/utilities/data/richTextShape.js +56 -0
  99. package/dist/db-content-api/utilities/data/stripFields.d.ts +47 -0
  100. package/dist/db-content-api/utilities/data/stripFields.js +170 -0
  101. package/dist/db-content-api/utilities/data/transformPublishedLocale.d.ts +22 -0
  102. package/dist/db-content-api/utilities/data/transformPublishedLocale.js +40 -0
  103. package/dist/db-content-api/utilities/data/validateRelationships.d.ts +6 -0
  104. package/dist/db-content-api/utilities/data/validateRelationships.js +107 -0
  105. package/dist/db-content-api/utilities/joins.d.ts +50 -0
  106. package/dist/db-content-api/utilities/joins.js +124 -0
  107. package/dist/db-content-api/utilities/locale/index.d.ts +9 -0
  108. package/dist/db-content-api/utilities/locale/index.js +19 -0
  109. package/dist/db-content-api/utilities/meta/normalizeLocaleInWhere.d.ts +9 -0
  110. package/dist/db-content-api/utilities/meta/normalizeLocaleInWhere.js +100 -0
  111. package/dist/db-content-api/utilities/resolveBlocks.d.ts +19 -0
  112. package/dist/db-content-api/utilities/resolveBlocks.js +31 -0
  113. package/dist/db-content-api/utilities/schema/buildDocumentSchema.d.ts +72 -0
  114. package/dist/db-content-api/utilities/schema/buildDocumentSchema.js +264 -0
  115. package/dist/db-content-api/utilities/where.d.ts +9 -0
  116. package/dist/db-content-api/utilities/where.js +95 -0
  117. package/dist/deploy/schedule-extract-plugin.d.ts +10 -0
  118. package/dist/deploy/schedule-extract-plugin.js +32 -0
  119. package/dist/endpoints/health.d.ts +2 -0
  120. package/dist/endpoints/health.js +9 -0
  121. package/dist/endpoints/schema.d.ts +2 -0
  122. package/dist/endpoints/schema.js +27 -0
  123. package/dist/exports/client.d.ts +2 -1
  124. package/dist/exports/client.js +2 -2
  125. package/dist/index.d.ts +2 -2
  126. package/dist/index.js +3 -3
  127. package/dist/lib/download-skill.d.ts +12 -0
  128. package/dist/lib/download-skill.js +77 -0
  129. package/dist/oauth/components/FigmaAvatar/index.d.ts +3 -0
  130. package/dist/oauth/components/FigmaAvatar/index.js +25 -0
  131. package/dist/oauth/components/FigmaAvatar/index.scss +12 -0
  132. package/dist/oauth/components/FigmaAvatarCell/index.d.ts +4 -0
  133. package/dist/oauth/components/FigmaAvatarCell/index.js +23 -0
  134. package/dist/oauth/components/FigmaAvatarCell/index.scss +5 -0
  135. package/dist/oauth/components/FigmaAvatarPlaceholder/index.d.ts +8 -0
  136. package/dist/oauth/components/FigmaAvatarPlaceholder/index.js +35 -0
  137. package/dist/oauth/components/FigmaAvatarPlaceholder/index.scss +28 -0
  138. package/dist/oauth/components/LoginButton/iframeAutoLogin.d.ts +81 -0
  139. package/dist/oauth/components/LoginButton/iframeAutoLogin.js +168 -0
  140. package/dist/oauth/components/LoginButton/index.d.ts +0 -1
  141. package/dist/oauth/components/LoginButton/index.js +156 -18
  142. package/dist/oauth/components/LoginButton/index.scss +75 -3
  143. package/dist/oauth/components/LogoutButton/index.d.ts +0 -1
  144. package/dist/oauth/components/LogoutButton/index.js +20 -9
  145. package/dist/oauth/defaults.d.ts +3 -2
  146. package/dist/oauth/defaults.js +79 -12
  147. package/dist/oauth/endpoints/getLoginEndpoint.d.ts +0 -1
  148. package/dist/oauth/endpoints/getLoginEndpoint.js +87 -84
  149. package/dist/oauth/endpoints/getLogoutEndpoint.d.ts +0 -1
  150. package/dist/oauth/endpoints/getLogoutEndpoint.js +7 -6
  151. package/dist/oauth/endpoints/getMetaEndpoint.d.ts +0 -1
  152. package/dist/oauth/endpoints/getMetaEndpoint.js +18 -5
  153. package/dist/oauth/endpoints/getRedirectToLoginEndpoint.d.ts +0 -1
  154. package/dist/oauth/endpoints/getRedirectToLoginEndpoint.js +11 -4
  155. package/dist/oauth/exports/client.d.ts +0 -1
  156. package/dist/oauth/exports/client.js +0 -2
  157. package/dist/oauth/hooks/afterLogout.d.ts +0 -1
  158. package/dist/oauth/hooks/afterLogout.js +0 -2
  159. package/dist/oauth/hooks/me.d.ts +0 -1
  160. package/dist/oauth/hooks/me.js +0 -2
  161. package/dist/oauth/hooks/refresh.d.ts +0 -1
  162. package/dist/oauth/hooks/refresh.js +2 -3
  163. package/dist/oauth/index.d.ts +0 -1
  164. package/dist/oauth/index.js +27 -7
  165. package/dist/oauth/strategy/index.d.ts +0 -3
  166. package/dist/oauth/strategy/index.js +55 -34
  167. package/dist/oauth/types.d.ts +23 -7
  168. package/dist/oauth/types.js +0 -2
  169. package/dist/oauth/utilities/buildUnauthorizedRedirect.d.ts +14 -0
  170. package/dist/oauth/utilities/buildUnauthorizedRedirect.js +28 -0
  171. package/dist/oauth/utilities/clearCookie.d.ts +0 -1
  172. package/dist/oauth/utilities/clearCookie.js +5 -3
  173. package/dist/oauth/utilities/createCookieOptions.d.ts +0 -1
  174. package/dist/oauth/utilities/createCookieOptions.js +9 -4
  175. package/dist/oauth/utilities/createDebugLogger.d.ts +0 -1
  176. package/dist/oauth/utilities/createDebugLogger.js +0 -2
  177. package/dist/oauth/utilities/establishSession.d.ts +22 -0
  178. package/dist/oauth/utilities/establishSession.js +80 -0
  179. package/dist/oauth/utilities/exchangeCodeForAccessToken.d.ts +23 -0
  180. package/dist/oauth/utilities/exchangeCodeForAccessToken.js +26 -0
  181. package/dist/oauth/utilities/extractOrigin.d.ts +0 -1
  182. package/dist/oauth/utilities/extractOrigin.js +0 -2
  183. package/dist/oauth/utilities/figmaHostnames.d.ts +2 -0
  184. package/dist/oauth/utilities/figmaHostnames.js +24 -0
  185. package/dist/oauth/utilities/getAdminCollectionSlug.d.ts +0 -1
  186. package/dist/oauth/utilities/getAdminCollectionSlug.js +0 -2
  187. package/dist/oauth/utilities/getAuthorizeURL.d.ts +65 -2
  188. package/dist/oauth/utilities/getAuthorizeURL.js +57 -4
  189. package/dist/oauth/utilities/getCookieExpiration.d.ts +0 -1
  190. package/dist/oauth/utilities/getCookieExpiration.js +0 -2
  191. package/dist/oauth/utilities/getSecondsFromTokenExp.d.ts +0 -1
  192. package/dist/oauth/utilities/getSecondsFromTokenExp.js +0 -2
  193. package/dist/oauth/utilities/getTokenExp.d.ts +0 -1
  194. package/dist/oauth/utilities/getTokenExp.js +0 -2
  195. package/dist/oauth/utilities/getUsernameField.d.ts +0 -1
  196. package/dist/oauth/utilities/getUsernameField.js +0 -2
  197. package/dist/oauth/utilities/hasUserTokenPropsChanged.d.ts +0 -1
  198. package/dist/oauth/utilities/hasUserTokenPropsChanged.js +0 -2
  199. package/dist/oauth/utilities/isAbsoluteURL.d.ts +1 -0
  200. package/dist/oauth/utilities/isAbsoluteURL.js +1 -0
  201. package/dist/oauth/utilities/isDuplicateKeyError.d.ts +6 -0
  202. package/dist/oauth/utilities/isDuplicateKeyError.js +12 -0
  203. package/dist/oauth/utilities/mergeHeaders.d.ts +0 -1
  204. package/dist/oauth/utilities/mergeHeaders.js +0 -2
  205. package/dist/oauth/utilities/refreshTokens.d.ts +0 -1
  206. package/dist/oauth/utilities/refreshTokens.js +21 -13
  207. package/dist/oauth/utilities/withPartitionedCookie.d.ts +19 -0
  208. package/dist/oauth/utilities/withPartitionedCookie.js +26 -0
  209. package/dist/oauth/utils/getSearchParam.d.ts +17 -0
  210. package/dist/oauth/utils/getSearchParam.js +22 -0
  211. package/dist/plugin/adapter.d.ts +0 -1
  212. package/dist/plugin/adapter.js +0 -2
  213. package/dist/plugin/auth-preflight.d.ts +7 -0
  214. package/dist/plugin/auth-preflight.js +18 -0
  215. package/dist/plugin/bootstrap-preflight.d.ts +22 -0
  216. package/dist/plugin/bootstrap-preflight.js +43 -0
  217. package/dist/plugin/build-config.d.ts +27 -15
  218. package/dist/plugin/build-config.js +380 -16
  219. package/dist/plugin/dev-cookie-names.d.ts +13 -0
  220. package/dist/plugin/dev-cookie-names.js +17 -0
  221. package/dist/scss.d.js +2 -0
  222. package/dist/storage-content-api/api-types.d.ts +183 -0
  223. package/dist/storage-content-api/api-types.js +4 -0
  224. package/dist/storage-content-api/client-uploads/generate.d.ts +14 -0
  225. package/dist/storage-content-api/client-uploads/generate.js +69 -0
  226. package/dist/storage-content-api/client.d.ts +5 -0
  227. package/dist/storage-content-api/client.js +37 -0
  228. package/dist/storage-content-api/generateURL.d.ts +6 -0
  229. package/dist/storage-content-api/generateURL.js +6 -0
  230. package/dist/storage-content-api/handleDelete.d.ts +7 -0
  231. package/dist/storage-content-api/handleDelete.js +15 -0
  232. package/dist/storage-content-api/handleUpload.d.ts +10 -0
  233. package/dist/storage-content-api/handleUpload.js +162 -0
  234. package/dist/storage-content-api/index.d.ts +4 -0
  235. package/dist/storage-content-api/index.js +37 -0
  236. package/dist/storage-content-api/staticHandler.d.ts +9 -0
  237. package/dist/storage-content-api/staticHandler.js +61 -0
  238. package/dist/storage-content-api/types.d.ts +9 -0
  239. package/dist/storage-content-api/types.js +1 -0
  240. package/dist/storage-content-api/utilities/getSafeFilename.d.ts +11 -0
  241. package/dist/storage-content-api/utilities/getSafeFilename.js +59 -0
  242. package/dist/storage-content-api/utilities/index.d.ts +2 -0
  243. package/dist/storage-content-api/utilities/index.js +2 -0
  244. package/dist/storage-content-api/utilities/parseUploadReference.d.ts +17 -0
  245. package/dist/storage-content-api/utilities/parseUploadReference.js +27 -0
  246. package/dist/templates/.env.example +5 -0
  247. package/dist/templates/README.md +19 -0
  248. package/dist/types/config.d.ts +2 -2
  249. package/dist/types/config.js +0 -4
  250. package/dist/types.d.ts +10 -2
  251. package/dist/types.js +0 -2
  252. package/dist/utils/adapters/nextjs.d.ts +8 -0
  253. package/dist/utils/adapters/nextjs.js +61 -0
  254. package/dist/utils/adapters/nitro.d.ts +8 -0
  255. package/dist/utils/adapters/nitro.js +172 -0
  256. package/dist/utils/adapters/vite.d.ts +9 -0
  257. package/dist/utils/adapters/vite.js +31 -0
  258. package/dist/utils/asset-collection.d.ts +27 -7
  259. package/dist/utils/asset-collection.js +59 -32
  260. package/dist/utils/build-detection.d.ts +5 -12
  261. package/dist/utils/build-detection.js +74 -13
  262. package/dist/utils/build-lambda-zip.d.ts +25 -0
  263. package/dist/utils/build-lambda-zip.js +90 -0
  264. package/dist/utils/cache-bootstrap.d.ts +7 -0
  265. package/dist/utils/cache-bootstrap.js +16 -0
  266. package/dist/utils/config.d.ts +0 -1
  267. package/dist/utils/config.js +1 -3
  268. package/dist/utils/deploy-adapter.d.ts +45 -0
  269. package/dist/utils/deploy-adapter.js +56 -0
  270. package/dist/utils/download-template.d.ts +9 -2
  271. package/dist/utils/download-template.js +24 -20
  272. package/dist/utils/env-management.d.ts +24 -8
  273. package/dist/utils/env-management.js +119 -66
  274. package/dist/utils/format-env-suffix.d.ts +11 -0
  275. package/dist/utils/format-env-suffix.js +11 -0
  276. package/dist/utils/format.d.ts +0 -1
  277. package/dist/utils/format.js +0 -2
  278. package/dist/utils/formatter.d.ts +0 -1
  279. package/dist/utils/formatter.js +23 -13
  280. package/dist/utils/fs-utils.d.ts +12 -0
  281. package/dist/utils/fs-utils.js +55 -0
  282. package/dist/utils/git.d.ts +0 -1
  283. package/dist/utils/git.js +0 -2
  284. package/dist/utils/handle-upgrade.d.ts +8 -0
  285. package/dist/utils/handle-upgrade.js +39 -0
  286. package/dist/utils/is-debug.d.ts +0 -1
  287. package/dist/utils/is-debug.js +0 -2
  288. package/dist/utils/lambda-config.d.ts +3 -2
  289. package/dist/utils/lambda-config.js +75 -80
  290. package/dist/utils/load-payload-config.d.ts +9 -0
  291. package/dist/utils/load-payload-config.js +27 -0
  292. package/dist/utils/log.d.ts +0 -1
  293. package/dist/utils/log.js +0 -2
  294. package/dist/utils/messages.d.ts +1 -3
  295. package/dist/utils/messages.js +47 -13
  296. package/dist/utils/package-manager.d.ts +24 -1
  297. package/dist/utils/package-manager.js +53 -2
  298. package/dist/utils/parse-template-spec.d.ts +11 -0
  299. package/dist/utils/parse-template-spec.js +60 -0
  300. package/dist/utils/payload-config-ast.d.ts +27 -7
  301. package/dist/utils/payload-config-ast.js +106 -60
  302. package/dist/utils/payload-config-finder.d.ts +2 -3
  303. package/dist/utils/payload-config-finder.js +48 -11
  304. package/dist/utils/payload-config-modifier.d.ts +1 -2
  305. package/dist/utils/payload-config-modifier.js +114 -68
  306. package/dist/utils/payload-package-check.d.ts +28 -3
  307. package/dist/utils/payload-package-check.js +90 -31
  308. package/dist/utils/project.d.ts +8 -4
  309. package/dist/utils/project.js +63 -37
  310. package/dist/utils/resolve-environment.d.ts +13 -0
  311. package/dist/utils/resolve-environment.js +29 -0
  312. package/dist/utils/s3-upload.d.ts +7 -3
  313. package/dist/utils/s3-upload.js +44 -9
  314. package/dist/utils/token-display.d.ts +5 -2
  315. package/dist/utils/token-display.js +49 -24
  316. package/dist/utils/typescript-validator.d.ts +0 -1
  317. package/dist/utils/typescript-validator.js +4 -8
  318. package/dist/utils/version-check.d.ts +2 -0
  319. package/dist/utils/version-check.js +43 -0
  320. package/package.json +47 -16
  321. package/dist/api/control-plane.d.ts.map +0 -1
  322. package/dist/api/control-plane.js.map +0 -1
  323. package/dist/api/figma-api.d.ts.map +0 -1
  324. package/dist/api/figma-api.js.map +0 -1
  325. package/dist/auth/browser.d.ts.map +0 -1
  326. package/dist/auth/browser.js.map +0 -1
  327. package/dist/auth/callback-server.d.ts.map +0 -1
  328. package/dist/auth/callback-server.js.map +0 -1
  329. package/dist/auth/crypto-utils.d.ts.map +0 -1
  330. package/dist/auth/crypto-utils.js.map +0 -1
  331. package/dist/auth/jwt-validator.d.ts.map +0 -1
  332. package/dist/auth/jwt-validator.js.map +0 -1
  333. package/dist/auth/oauth-flow.d.ts.map +0 -1
  334. package/dist/auth/oauth-flow.js.map +0 -1
  335. package/dist/auth/pkce.d.ts.map +0 -1
  336. package/dist/auth/pkce.js.map +0 -1
  337. package/dist/auth/project-token.d.ts.map +0 -1
  338. package/dist/auth/project-token.js.map +0 -1
  339. package/dist/auth/refresh.d.ts.map +0 -1
  340. package/dist/auth/refresh.js.map +0 -1
  341. package/dist/auth/token-store.d.ts.map +0 -1
  342. package/dist/auth/token-store.js.map +0 -1
  343. package/dist/auth/types.d.ts.map +0 -1
  344. package/dist/auth/types.js.map +0 -1
  345. package/dist/cli.d.ts.map +0 -1
  346. package/dist/cli.js.map +0 -1
  347. package/dist/commands/deploy.d.ts.map +0 -1
  348. package/dist/commands/deploy.js.map +0 -1
  349. package/dist/commands/init.d.ts.map +0 -1
  350. package/dist/commands/init.js.map +0 -1
  351. package/dist/commands/list-tokens.d.ts.map +0 -1
  352. package/dist/commands/list-tokens.js.map +0 -1
  353. package/dist/commands/login.d.ts.map +0 -1
  354. package/dist/commands/login.js.map +0 -1
  355. package/dist/commands/logout.d.ts.map +0 -1
  356. package/dist/commands/logout.js.map +0 -1
  357. package/dist/config/oauth.d.ts.map +0 -1
  358. package/dist/config/oauth.js.map +0 -1
  359. package/dist/constants.d.ts.map +0 -1
  360. package/dist/constants.js.map +0 -1
  361. package/dist/exports/client.d.ts.map +0 -1
  362. package/dist/exports/client.js.map +0 -1
  363. package/dist/index.d.ts.map +0 -1
  364. package/dist/index.js.map +0 -1
  365. package/dist/oauth/components/LoginButton/index.d.ts.map +0 -1
  366. package/dist/oauth/components/LoginButton/index.js.map +0 -1
  367. package/dist/oauth/components/LogoutButton/index.d.ts.map +0 -1
  368. package/dist/oauth/components/LogoutButton/index.js.map +0 -1
  369. package/dist/oauth/defaults.d.ts.map +0 -1
  370. package/dist/oauth/defaults.js.map +0 -1
  371. package/dist/oauth/endpoints/getLoginEndpoint.d.ts.map +0 -1
  372. package/dist/oauth/endpoints/getLoginEndpoint.js.map +0 -1
  373. package/dist/oauth/endpoints/getLogoutEndpoint.d.ts.map +0 -1
  374. package/dist/oauth/endpoints/getLogoutEndpoint.js.map +0 -1
  375. package/dist/oauth/endpoints/getMetaEndpoint.d.ts.map +0 -1
  376. package/dist/oauth/endpoints/getMetaEndpoint.js.map +0 -1
  377. package/dist/oauth/endpoints/getRedirectToLoginEndpoint.d.ts.map +0 -1
  378. package/dist/oauth/endpoints/getRedirectToLoginEndpoint.js.map +0 -1
  379. package/dist/oauth/exports/client.d.ts.map +0 -1
  380. package/dist/oauth/exports/client.js.map +0 -1
  381. package/dist/oauth/hooks/afterLogout.d.ts.map +0 -1
  382. package/dist/oauth/hooks/afterLogout.js.map +0 -1
  383. package/dist/oauth/hooks/me.d.ts.map +0 -1
  384. package/dist/oauth/hooks/me.js.map +0 -1
  385. package/dist/oauth/hooks/refresh.d.ts.map +0 -1
  386. package/dist/oauth/hooks/refresh.js.map +0 -1
  387. package/dist/oauth/index.d.ts.map +0 -1
  388. package/dist/oauth/index.js.map +0 -1
  389. package/dist/oauth/strategy/index.d.ts.map +0 -1
  390. package/dist/oauth/strategy/index.js.map +0 -1
  391. package/dist/oauth/types.d.ts.map +0 -1
  392. package/dist/oauth/types.js.map +0 -1
  393. package/dist/oauth/utilities/clearCookie.d.ts.map +0 -1
  394. package/dist/oauth/utilities/clearCookie.js.map +0 -1
  395. package/dist/oauth/utilities/createCookieOptions.d.ts.map +0 -1
  396. package/dist/oauth/utilities/createCookieOptions.js.map +0 -1
  397. package/dist/oauth/utilities/createDebugLogger.d.ts.map +0 -1
  398. package/dist/oauth/utilities/createDebugLogger.js.map +0 -1
  399. package/dist/oauth/utilities/extractOrigin.d.ts.map +0 -1
  400. package/dist/oauth/utilities/extractOrigin.js.map +0 -1
  401. package/dist/oauth/utilities/getAdminCollectionSlug.d.ts.map +0 -1
  402. package/dist/oauth/utilities/getAdminCollectionSlug.js.map +0 -1
  403. package/dist/oauth/utilities/getAdminPath.d.ts +0 -8
  404. package/dist/oauth/utilities/getAdminPath.d.ts.map +0 -1
  405. package/dist/oauth/utilities/getAdminPath.js +0 -9
  406. package/dist/oauth/utilities/getAdminPath.js.map +0 -1
  407. package/dist/oauth/utilities/getAuthorizeURL.d.ts.map +0 -1
  408. package/dist/oauth/utilities/getAuthorizeURL.js.map +0 -1
  409. package/dist/oauth/utilities/getCookieExpiration.d.ts.map +0 -1
  410. package/dist/oauth/utilities/getCookieExpiration.js.map +0 -1
  411. package/dist/oauth/utilities/getSecondsFromTokenExp.d.ts.map +0 -1
  412. package/dist/oauth/utilities/getSecondsFromTokenExp.js.map +0 -1
  413. package/dist/oauth/utilities/getTokenExp.d.ts.map +0 -1
  414. package/dist/oauth/utilities/getTokenExp.js.map +0 -1
  415. package/dist/oauth/utilities/getUsernameField.d.ts.map +0 -1
  416. package/dist/oauth/utilities/getUsernameField.js.map +0 -1
  417. package/dist/oauth/utilities/hasUserTokenPropsChanged.d.ts.map +0 -1
  418. package/dist/oauth/utilities/hasUserTokenPropsChanged.js.map +0 -1
  419. package/dist/oauth/utilities/mergeHeaders.d.ts.map +0 -1
  420. package/dist/oauth/utilities/mergeHeaders.js.map +0 -1
  421. package/dist/oauth/utilities/refreshTokens.d.ts.map +0 -1
  422. package/dist/oauth/utilities/refreshTokens.js.map +0 -1
  423. package/dist/plugin/adapter.d.ts.map +0 -1
  424. package/dist/plugin/adapter.js.map +0 -1
  425. package/dist/plugin/build-config.d.ts.map +0 -1
  426. package/dist/plugin/build-config.js.map +0 -1
  427. package/dist/types/config.d.ts.map +0 -1
  428. package/dist/types/config.js.map +0 -1
  429. package/dist/types.d.ts.map +0 -1
  430. package/dist/types.js.map +0 -1
  431. package/dist/utils/asset-collection.d.ts.map +0 -1
  432. package/dist/utils/asset-collection.js.map +0 -1
  433. package/dist/utils/build-detection.d.ts.map +0 -1
  434. package/dist/utils/build-detection.js.map +0 -1
  435. package/dist/utils/config.d.ts.map +0 -1
  436. package/dist/utils/config.js.map +0 -1
  437. package/dist/utils/download-template.d.ts.map +0 -1
  438. package/dist/utils/download-template.js.map +0 -1
  439. package/dist/utils/env-management.d.ts.map +0 -1
  440. package/dist/utils/env-management.js.map +0 -1
  441. package/dist/utils/format.d.ts.map +0 -1
  442. package/dist/utils/format.js.map +0 -1
  443. package/dist/utils/formatter.d.ts.map +0 -1
  444. package/dist/utils/formatter.js.map +0 -1
  445. package/dist/utils/git.d.ts.map +0 -1
  446. package/dist/utils/git.js.map +0 -1
  447. package/dist/utils/is-debug.d.ts.map +0 -1
  448. package/dist/utils/is-debug.js.map +0 -1
  449. package/dist/utils/lambda-config.d.ts.map +0 -1
  450. package/dist/utils/lambda-config.js.map +0 -1
  451. package/dist/utils/log.d.ts.map +0 -1
  452. package/dist/utils/log.js.map +0 -1
  453. package/dist/utils/messages.d.ts.map +0 -1
  454. package/dist/utils/messages.js.map +0 -1
  455. package/dist/utils/package-manager.d.ts.map +0 -1
  456. package/dist/utils/package-manager.js.map +0 -1
  457. package/dist/utils/payload-config-ast.d.ts.map +0 -1
  458. package/dist/utils/payload-config-ast.js.map +0 -1
  459. package/dist/utils/payload-config-finder.d.ts.map +0 -1
  460. package/dist/utils/payload-config-finder.js.map +0 -1
  461. package/dist/utils/payload-config-modifier.d.ts.map +0 -1
  462. package/dist/utils/payload-config-modifier.js.map +0 -1
  463. package/dist/utils/payload-package-check.d.ts.map +0 -1
  464. package/dist/utils/payload-package-check.js.map +0 -1
  465. package/dist/utils/project.d.ts.map +0 -1
  466. package/dist/utils/project.js.map +0 -1
  467. package/dist/utils/s3-upload.d.ts.map +0 -1
  468. package/dist/utils/s3-upload.js.map +0 -1
  469. package/dist/utils/token-display.d.ts.map +0 -1
  470. package/dist/utils/token-display.js.map +0 -1
  471. package/dist/utils/typescript-validator.d.ts.map +0 -1
  472. package/dist/utils/typescript-validator.js.map +0 -1
@@ -0,0 +1,69 @@
1
+ import path from 'path';
2
+ import { APIError, Forbidden } from 'payload';
3
+ import { getSafeFilename } from '../utilities/index.js';
4
+ const defaultAccess = ({ req })=>!!req.user;
5
+ /**
6
+ * v4 client-upload entry point. Payload core calls this from
7
+ * `POST /api/upload-instructions`; we sign a Content API upload URL and hand the
8
+ * browser an `http` PUT instruction plus an `uploadReference` that
9
+ * `handleUpload`/`staticHandler` use to recognize the already-uploaded file.
10
+ */ export const getGenerateUploadInstructions = ({ access = defaultAccess, client })=>{
11
+ const generate = async ({ collectionSlug, docPrefix, filename, filesize, mimeType, overrideAccess, req })=>{
12
+ if (!overrideAccess && !await access({
13
+ collectionSlug,
14
+ req
15
+ })) {
16
+ throw new Forbidden();
17
+ }
18
+ const safeFilename = await getSafeFilename({
19
+ collectionSlug,
20
+ desiredFilename: filename,
21
+ req
22
+ });
23
+ // Key by `<prefix>/<filename>` to match the read path (staticHandler/generateURL
24
+ // via getFilePrefix) and handleUpload. The Figma plugin sets no prefix, so
25
+ // docPrefix is blank today and this is just the filename.
26
+ const fileKey = path.posix.join(docPrefix ?? '', safeFilename);
27
+ const { data, error, response } = await client.POST('/api/v0/uploads/sign', {
28
+ body: {
29
+ collectionId: collectionSlug,
30
+ contentType: mimeType,
31
+ expiresIn: 3600,
32
+ filename: fileKey
33
+ }
34
+ });
35
+ if (error) {
36
+ throw new APIError(`Failed to get presigned upload URL: ${error.message}`, response.status, {
37
+ code: error.code
38
+ });
39
+ }
40
+ if (!data) {
41
+ throw new Error('No response while getting presigned upload URL');
42
+ }
43
+ return {
44
+ type: 'http',
45
+ file: {
46
+ collectionSlug,
47
+ filename: safeFilename,
48
+ mimeType,
49
+ size: filesize,
50
+ uploadReference: {
51
+ clientUploaded: true,
52
+ filename: safeFilename,
53
+ mimeType,
54
+ prefix: docPrefix ?? ''
55
+ }
56
+ },
57
+ // The presigned URL is signed with `contentType: mimeType`, so the browser
58
+ // PUT must carry a matching Content-Type header or S3 rejects the signature.
59
+ request: {
60
+ headers: {
61
+ 'Content-Type': mimeType
62
+ },
63
+ method: 'PUT',
64
+ url: data.url
65
+ }
66
+ };
67
+ };
68
+ return generate;
69
+ };
@@ -0,0 +1,5 @@
1
+ import createClient from 'openapi-fetch';
2
+ import type { UploadPaths } from './api-types.js';
3
+ import type { StorageClientConfig } from './types.js';
4
+ export type StorageClient = ReturnType<typeof createClient<UploadPaths>>;
5
+ export declare function createStorageClient(config: StorageClientConfig): StorageClient;
@@ -0,0 +1,37 @@
1
+ import createClient from 'openapi-fetch';
2
+ import { getValidProjectToken } from '../auth/project-token.js';
3
+ import { fetchDevJwt } from '../db-content-api/utilities/auth.js';
4
+ export function createStorageClient(config) {
5
+ const client = createClient({
6
+ baseUrl: config.baseUrl
7
+ });
8
+ client.use(createStorageAuthMiddleware(config));
9
+ return client;
10
+ }
11
+ function createStorageAuthMiddleware(config) {
12
+ return {
13
+ async onRequest ({ request }) {
14
+ if ('contentApiKey' in config) {
15
+ request.headers.set('X-Api-Key', config.contentApiKey);
16
+ } else {
17
+ const { auth, contentSystemId } = config;
18
+ if (auth.mode === 'apiKey') {
19
+ request.headers.set('X-Api-Key', auth.apiKey);
20
+ } else if (auth.mode === 'tokenStore') {
21
+ const token = await getValidProjectToken({
22
+ tenantId: contentSystemId,
23
+ tokenStore: auth.tokenStore
24
+ });
25
+ if (!token) {
26
+ throw new Error('Authentication required. Run `npx @payloadcms/figma login` to authenticate.');
27
+ }
28
+ request.headers.set('Authorization', `Bearer ${token}`);
29
+ } else {
30
+ const token = await fetchDevJwt(config.baseUrl, contentSystemId);
31
+ request.headers.set('Authorization', `Bearer ${token}`);
32
+ }
33
+ }
34
+ return request;
35
+ }
36
+ };
37
+ }
@@ -0,0 +1,6 @@
1
+ import type { GenerateURL } from '@payloadcms/plugin-cloud-storage/types';
2
+ type Args = {
3
+ baseUrl: string;
4
+ };
5
+ export declare const getGenerateURL: ({ baseUrl }: Args) => GenerateURL;
6
+ export {};
@@ -0,0 +1,6 @@
1
+ import path from 'path';
2
+ export const getGenerateURL = ({ baseUrl })=>({ collection, filename, prefix = '' })=>{
3
+ const collectionId = collection.slug;
4
+ const fileKey = path.posix.join(prefix, filename);
5
+ return `${baseUrl}/api/v0/uploads/download/${collectionId}/${encodeURIComponent(fileKey)}`;
6
+ };
@@ -0,0 +1,7 @@
1
+ import type { HandleDelete } from '@payloadcms/plugin-cloud-storage/types';
2
+ import type { StorageClient } from './client.js';
3
+ type Args = {
4
+ client: StorageClient;
5
+ };
6
+ export declare const getHandleDelete: ({ client }: Args) => HandleDelete;
7
+ export {};
@@ -0,0 +1,15 @@
1
+ import path from 'path';
2
+ export const getHandleDelete = ({ client })=>{
3
+ return async ({ collection, doc: { prefix = '' }, filename })=>{
4
+ const collectionId = collection.slug;
5
+ const fileKey = path.posix.join(prefix, filename);
6
+ await client.DELETE('/api/v0/uploads/{collectionId}/{filename}', {
7
+ params: {
8
+ path: {
9
+ collectionId,
10
+ filename: fileKey
11
+ }
12
+ }
13
+ });
14
+ };
15
+ };
@@ -0,0 +1,10 @@
1
+ import type { HandleUpload } from '@payloadcms/plugin-cloud-storage/types';
2
+ import type { CollectionConfig } from 'payload';
3
+ import type { StorageClient } from './client.js';
4
+ type Args = {
5
+ client: StorageClient;
6
+ collection: CollectionConfig;
7
+ prefix?: string;
8
+ };
9
+ export declare const getHandleUpload: ({ client, collection, prefix }: Args) => HandleUpload;
10
+ export {};
@@ -0,0 +1,162 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { APIError } from 'payload';
4
+ import { parseUploadReference } from './utilities/index.js';
5
+ const PART_SIZE = 64 * 1024 * 1024 // 64MB per part
6
+ ;
7
+ const MAX_FILE_SIZE_BEFORE_MULTIPART = 100 * 1024 * 1024 // 100MB
8
+ ;
9
+ export const getHandleUpload = ({ client, collection, prefix = '' })=>{
10
+ return async ({ data, file })=>{
11
+ // Skip if the client already uploaded THIS SPECIFIC file. Resized versions
12
+ // (different filename) should still be uploaded.
13
+ const reference = parseUploadReference(file.uploadReference);
14
+ const isOriginalClientUploaded = reference.clientUploaded === true && file.filename === reference.filename;
15
+ if (isOriginalClientUploaded) {
16
+ return data;
17
+ }
18
+ const collectionId = collection.slug;
19
+ const fileKey = path.posix.join(data.prefix || prefix, file.filename);
20
+ const fileData = file.tempFilePath ? fs.readFileSync(file.tempFilePath) : file.buffer;
21
+ const fileSize = file.filesize || fileData.length;
22
+ if (fileSize > MAX_FILE_SIZE_BEFORE_MULTIPART) {
23
+ await uploadMultipart({
24
+ client,
25
+ collectionId,
26
+ fileData,
27
+ fileKey,
28
+ mimeType: file.mimeType
29
+ });
30
+ } else {
31
+ await uploadSingleFile({
32
+ client,
33
+ collectionId,
34
+ fileData,
35
+ fileKey,
36
+ mimeType: file.mimeType
37
+ });
38
+ }
39
+ return data;
40
+ };
41
+ };
42
+ async function uploadSingleFile({ client, collectionId, fileData, fileKey, mimeType }) {
43
+ const { data, error, response } = await client.POST('/api/v0/uploads/sign', {
44
+ body: {
45
+ collectionId,
46
+ contentType: mimeType,
47
+ expiresIn: 3600,
48
+ filename: fileKey
49
+ }
50
+ });
51
+ if (error) {
52
+ throw new APIError(`Failed to get presigned upload URL: ${error.message}`, response.status, {
53
+ code: error.code
54
+ });
55
+ }
56
+ if (!data) {
57
+ throw new Error('No response while getting presigned upload URL');
58
+ }
59
+ const uploadResponse = await fetch(data.url, {
60
+ // TS's BodyInit type rejects Buffer<ArrayBufferLike>; wrap as Uint8Array
61
+ // (a valid ArrayBufferView) — byte-identical.
62
+ body: new Uint8Array(fileData),
63
+ headers: {
64
+ 'Content-Type': mimeType
65
+ },
66
+ method: 'PUT'
67
+ });
68
+ if (!uploadResponse.ok) {
69
+ throw new Error(`Failed to upload to S3: ${uploadResponse.status} ${uploadResponse.statusText}`);
70
+ }
71
+ }
72
+ async function uploadMultipart({ client, collectionId, fileData, fileKey, mimeType }) {
73
+ const { data: initiateData, error: initiateError, response: initiateResponse } = await client.POST('/api/v0/uploads/multipart/initiate', {
74
+ body: {
75
+ collectionId,
76
+ contentType: mimeType,
77
+ filename: fileKey
78
+ }
79
+ });
80
+ if (initiateError) {
81
+ throw new APIError(`Failed to initiate multipart upload: ${initiateError.message}`, initiateResponse.status, {
82
+ code: initiateError.code
83
+ });
84
+ }
85
+ if (!initiateData) {
86
+ throw new Error('No response while initiating multipart upload');
87
+ }
88
+ const { uploadId } = initiateData;
89
+ try {
90
+ const numParts = Math.ceil(fileData.length / PART_SIZE);
91
+ const partNumbers = Array.from({
92
+ length: numParts
93
+ }, (_, i)=>i + 1);
94
+ const { data: partsData, error: partsError, response: partsResponse } = await client.POST('/api/v0/uploads/multipart/parts', {
95
+ body: {
96
+ collectionId,
97
+ expiresIn: 3600,
98
+ filename: fileKey,
99
+ partNumbers,
100
+ uploadId
101
+ }
102
+ });
103
+ if (partsError) {
104
+ throw new APIError(`Failed to get part URLs: ${partsError.message}`, partsResponse.status, {
105
+ code: partsError.code
106
+ });
107
+ }
108
+ if (!partsData) {
109
+ throw new Error('No response while getting part URLs');
110
+ }
111
+ const { parts } = partsData;
112
+ if (!parts || !Array.isArray(parts)) {
113
+ throw new Error('Invalid response from part URLs endpoint: parts is not an array');
114
+ }
115
+ const uploadedParts = await Promise.all(parts.map(async ({ partNumber, url })=>{
116
+ const start = (partNumber - 1) * PART_SIZE;
117
+ const end = Math.min(start + PART_SIZE, fileData.length);
118
+ const partData = fileData.slice(start, end);
119
+ const uploadResponse = await fetch(url, {
120
+ body: partData,
121
+ headers: {
122
+ 'Content-Type': mimeType
123
+ },
124
+ method: 'PUT'
125
+ });
126
+ const etag = uploadResponse.headers.get('ETag');
127
+ if (!etag) {
128
+ throw new Error(`No ETag returned for part ${partNumber}`);
129
+ }
130
+ return {
131
+ ETag: etag,
132
+ PartNumber: partNumber
133
+ };
134
+ }));
135
+ const { error: completeError, response: completeResponse } = await client.POST('/api/v0/uploads/multipart/complete', {
136
+ body: {
137
+ collectionId,
138
+ filename: fileKey,
139
+ parts: uploadedParts,
140
+ uploadId
141
+ }
142
+ });
143
+ if (completeError) {
144
+ throw new APIError(`Failed to complete multipart upload: ${completeError.message}`, completeResponse.status, {
145
+ code: completeError.code
146
+ });
147
+ }
148
+ } catch (error) {
149
+ try {
150
+ await client.POST('/api/v0/uploads/multipart/abort', {
151
+ body: {
152
+ collectionId,
153
+ filename: fileKey,
154
+ uploadId
155
+ }
156
+ });
157
+ } catch {
158
+ // Ignore abort errors
159
+ }
160
+ throw error;
161
+ }
162
+ }
@@ -0,0 +1,4 @@
1
+ import type { Adapter } from '@payloadcms/plugin-cloud-storage/types';
2
+ import type { StorageClientConfig } from './types.js';
3
+ export type { StorageClientConfig } from './types.js';
4
+ export declare function contentApiStorageAdapter(config: StorageClientConfig): Adapter;
@@ -0,0 +1,37 @@
1
+ import { createStorageClient } from './client.js';
2
+ import { getGenerateUploadInstructions } from './client-uploads/generate.js';
3
+ import { getGenerateURL } from './generateURL.js';
4
+ import { getHandleDelete } from './handleDelete.js';
5
+ import { getHandleUpload } from './handleUpload.js';
6
+ import { getHandler } from './staticHandler.js';
7
+ export function contentApiStorageAdapter(config) {
8
+ return ({ collection, prefix })=>{
9
+ const client = createStorageClient(config);
10
+ const baseUrl = config.baseUrl;
11
+ return {
12
+ name: 'content-api',
13
+ generateURL: getGenerateURL({
14
+ baseUrl
15
+ }),
16
+ handleDelete: getHandleDelete({
17
+ client
18
+ }),
19
+ handleUpload: getHandleUpload({
20
+ client,
21
+ collection,
22
+ prefix
23
+ }),
24
+ staticHandler: getHandler({
25
+ client,
26
+ collection
27
+ }),
28
+ uploadInstructions: {
29
+ enabled: true,
30
+ generate: getGenerateUploadInstructions({
31
+ client
32
+ }),
33
+ useInAdmin: true
34
+ }
35
+ };
36
+ };
37
+ }
@@ -0,0 +1,9 @@
1
+ import type { StaticHandler } from '@payloadcms/plugin-cloud-storage/types';
2
+ import type { CollectionConfig } from 'payload';
3
+ import type { StorageClient } from './client.js';
4
+ type Args = {
5
+ client: StorageClient;
6
+ collection: CollectionConfig;
7
+ };
8
+ export declare const getHandler: ({ client, collection }: Args) => StaticHandler;
9
+ export {};
@@ -0,0 +1,61 @@
1
+ import { getFilePrefix } from '@payloadcms/plugin-cloud-storage/utilities';
2
+ import path from 'path';
3
+ import { isImage } from 'payload/shared';
4
+ import { parseUploadReference } from './utilities/index.js';
5
+ export const getHandler = ({ client, collection })=>{
6
+ return async (req, { params: { filename, uploadReference } })=>{
7
+ try {
8
+ const prefix = await getFilePrefix({
9
+ collection,
10
+ filename,
11
+ req,
12
+ uploadReference
13
+ });
14
+ const key = path.posix.join(prefix, filename);
15
+ const { data, error } = await client.POST('/api/v0/uploads/download/sign', {
16
+ body: {
17
+ collectionId: collection.slug,
18
+ expiresIn: 7200,
19
+ filename: key
20
+ }
21
+ });
22
+ if (error || !data) {
23
+ req.payload.logger.error(`Failed to get signed download URL: ${JSON.stringify(error)}`);
24
+ return new Response('Internal Server Error', {
25
+ status: 500
26
+ });
27
+ }
28
+ // On a client-upload fetch-back, core reads this response body into req.file.data to
29
+ // size the image; a 302's empty body crashes getImageSize. Return real bytes for
30
+ // images (and unknown mimetypes, to be safe), but keep the redirect otherwise so we
31
+ // don't download large non-images server-side.
32
+ if (uploadReference) {
33
+ const { mimeType } = parseUploadReference(uploadReference);
34
+ if (!mimeType || isImage(mimeType)) {
35
+ const fileResponse = await fetch(data.url);
36
+ if (!fileResponse.ok) {
37
+ req.payload.logger.error(`Failed to fetch file for client-upload buffer fetch-back: ${fileResponse.status}`);
38
+ return new Response('Internal Server Error', {
39
+ status: 500
40
+ });
41
+ }
42
+ const contentType = fileResponse.headers.get('Content-Type') ?? mimeType ?? 'application/octet-stream';
43
+ return new Response(await fileResponse.arrayBuffer(), {
44
+ headers: {
45
+ 'Content-Type': contentType
46
+ }
47
+ });
48
+ }
49
+ }
50
+ return Response.redirect(data.url, 302);
51
+ } catch (err) {
52
+ req.payload.logger.error({
53
+ err,
54
+ msg: 'Error in staticHandler'
55
+ });
56
+ return new Response('Internal Server Error', {
57
+ status: 500
58
+ });
59
+ }
60
+ };
61
+ };
@@ -0,0 +1,9 @@
1
+ import type { AuthMode } from '../db-content-api/utilities/auth.js';
2
+ export type StorageClientConfig = {
3
+ auth: AuthMode;
4
+ baseUrl: string;
5
+ contentSystemId: string;
6
+ } | {
7
+ baseUrl: string;
8
+ contentApiKey: string;
9
+ };
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,11 @@
1
+ import type { PayloadRequest } from 'payload';
2
+ /**
3
+ * Get a safe filename that doesn't collide with existing documents
4
+ * Similar to Payload's getSafeFileName
5
+ */
6
+ export declare function getSafeFilename({ collectionSlug, desiredFilename, prefix, req, }: {
7
+ collectionSlug: string;
8
+ desiredFilename: string;
9
+ prefix?: string;
10
+ req: PayloadRequest;
11
+ }): Promise<string>;
@@ -0,0 +1,59 @@
1
+ import sanitize from 'sanitize-filename';
2
+ /**
3
+ * Check if a document with the given filename already exists in the database
4
+ * Matches Payload's docWithFilenameExists
5
+ */ async function docWithFilenameExists({ collectionSlug, filename, prefix, req }) {
6
+ const where = {
7
+ filename: {
8
+ equals: filename
9
+ }
10
+ };
11
+ if (prefix) {
12
+ where.prefix = {
13
+ equals: prefix
14
+ };
15
+ }
16
+ const doc = await req.payload.db.findOne({
17
+ collection: collectionSlug,
18
+ req,
19
+ where
20
+ });
21
+ return !!doc;
22
+ }
23
+ /**
24
+ * Increment filename by adding -1, -2, etc. suffix
25
+ * photo.jpg → photo-1.jpg
26
+ * photo-1.jpg → photo-2.jpg
27
+ * Matches Payload's incrementName
28
+ */ function incrementFilename(name) {
29
+ const extension = name.split('.').pop();
30
+ const baseFilename = sanitize(name.substring(0, name.lastIndexOf('.')) || name);
31
+ let incrementedName = baseFilename;
32
+ const regex = /(.*)-(\d+)$/;
33
+ const found = baseFilename.match(regex);
34
+ if (found === null) {
35
+ incrementedName += '-1';
36
+ } else {
37
+ const matchedName = found[1];
38
+ const matchedNumber = found[2];
39
+ const incremented = Number(matchedNumber) + 1;
40
+ incrementedName = `${matchedName}-${incremented}`;
41
+ }
42
+ return `${incrementedName}.${extension}`;
43
+ }
44
+ /**
45
+ * Get a safe filename that doesn't collide with existing documents
46
+ * Similar to Payload's getSafeFileName
47
+ */ export async function getSafeFilename({ collectionSlug, desiredFilename, prefix, req }) {
48
+ let modifiedFilename = desiredFilename;
49
+ // Keep incrementing until we find a filename that doesn't exist
50
+ while(await docWithFilenameExists({
51
+ collectionSlug,
52
+ filename: modifiedFilename,
53
+ prefix,
54
+ req
55
+ })){
56
+ modifiedFilename = incrementFilename(modifiedFilename);
57
+ }
58
+ return modifiedFilename;
59
+ }
@@ -0,0 +1,2 @@
1
+ export { getSafeFilename } from './getSafeFilename.js';
2
+ export { type ContentApiUploadReference, parseUploadReference } from './parseUploadReference.js';
@@ -0,0 +1,2 @@
1
+ export { getSafeFilename } from './getSafeFilename.js';
2
+ export { parseUploadReference } from './parseUploadReference.js';
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Shape of the `uploadReference` this adapter attaches to client-uploaded files
3
+ * (via the `generate` upload-instructions handler). Payload exposes it as
4
+ * `unknown`, so it must be narrowed at runtime before use.
5
+ */
6
+ export type ContentApiUploadReference = {
7
+ clientUploaded?: boolean;
8
+ filename?: string;
9
+ mimeType?: string;
10
+ prefix?: string;
11
+ };
12
+ /**
13
+ * Safely narrows an `unknown` uploadReference into the adapter's known shape,
14
+ * keeping only properties present with the expected type. Returns an empty
15
+ * object for any non-object input.
16
+ */
17
+ export declare const parseUploadReference: (reference: unknown) => ContentApiUploadReference;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Shape of the `uploadReference` this adapter attaches to client-uploaded files
3
+ * (via the `generate` upload-instructions handler). Payload exposes it as
4
+ * `unknown`, so it must be narrowed at runtime before use.
5
+ */ /**
6
+ * Safely narrows an `unknown` uploadReference into the adapter's known shape,
7
+ * keeping only properties present with the expected type. Returns an empty
8
+ * object for any non-object input.
9
+ */ export const parseUploadReference = (reference)=>{
10
+ if (!reference || typeof reference !== 'object') {
11
+ return {};
12
+ }
13
+ const result = {};
14
+ if ('clientUploaded' in reference && typeof reference.clientUploaded === 'boolean') {
15
+ result.clientUploaded = reference.clientUploaded;
16
+ }
17
+ if ('filename' in reference && typeof reference.filename === 'string') {
18
+ result.filename = reference.filename;
19
+ }
20
+ if ('mimeType' in reference && typeof reference.mimeType === 'string') {
21
+ result.mimeType = reference.mimeType;
22
+ }
23
+ if ('prefix' in reference && typeof reference.prefix === 'string') {
24
+ result.prefix = reference.prefix;
25
+ }
26
+ return result;
27
+ };
@@ -0,0 +1,5 @@
1
+ # Figma Project ID (CMS Resource ID)
2
+ FIGMA_PROJECT_ID=
3
+
4
+ # Environment name (e.g., production, staging)
5
+ FIGMA_ENVIRONMENT_NAME=production
@@ -0,0 +1,19 @@
1
+ # {{PROJECT_NAME}}
2
+
3
+ A Payload project configured for running on Figma infrastructure.
4
+
5
+ ## Getting Started
6
+
7
+ {{RUN_COMMAND}} dev
8
+
9
+ Open http://localhost:3000/admin to access the admin panel.
10
+
11
+ ## Deployment
12
+
13
+ npx @payloadcms/figma deploy
14
+
15
+ Deploys to Figma infrastructure.
16
+
17
+ ## Resources
18
+
19
+ - [Payload Docs](https://payloadcms.com/docs)
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Figma CMS Configuration Types
3
3
  */
4
+ import type { PackageManager } from '../utils/package-manager.js';
4
5
  /**
5
6
  * Tenant instance from Control Plane API
6
7
  */
@@ -25,10 +26,9 @@ export interface ProjectInfo {
25
26
  /** Whether Payload is installed */
26
27
  hasPayload: boolean;
27
28
  /** Package manager detected (npm, pnpm, yarn) */
28
- packageManager?: 'npm' | 'pnpm' | 'yarn';
29
+ packageManager?: PackageManager;
29
30
  /** Project root path */
30
31
  path: string;
31
32
  /** Payload version if installed */
32
33
  payloadVersion?: string;
33
34
  }
34
- //# sourceMappingURL=config.d.ts.map
@@ -1,9 +1,5 @@
1
1
  /**
2
2
  * Figma CMS Configuration Types
3
3
  */ /**
4
- * Tenant instance from Control Plane API
5
- */ /**
6
4
  * Project information from detection
7
5
  */ export { };
8
-
9
- //# sourceMappingURL=config.js.map