@payloadcms/figma 0.0.1-alpha.6 → 0.0.1-alpha.60

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 (352) hide show
  1. package/dist/api/control-plane.d.ts +52 -6
  2. package/dist/api/control-plane.js +174 -72
  3. package/dist/api/figma-api.d.ts +22 -1
  4. package/dist/api/figma-api.js +78 -25
  5. package/dist/auth/callback-server.js +2 -1
  6. package/dist/auth/credentials.d.ts +21 -0
  7. package/dist/auth/credentials.js +21 -0
  8. package/dist/auth/crypto-utils.d.ts +6 -0
  9. package/dist/auth/crypto-utils.js +16 -14
  10. package/dist/auth/jwt-validator.d.ts +2 -1
  11. package/dist/auth/jwt-validator.js +2 -2
  12. package/dist/auth/oauth-flow.d.ts +17 -3
  13. package/dist/auth/oauth-flow.js +63 -16
  14. package/dist/auth/project-token.js +16 -11
  15. package/dist/auth/refresh.d.ts +2 -1
  16. package/dist/auth/refresh.js +25 -12
  17. package/dist/auth/token-store.d.ts +42 -1
  18. package/dist/auth/token-store.js +118 -14
  19. package/dist/auth/types.d.ts +17 -4
  20. package/dist/cli.js +68 -5
  21. package/dist/commands/build-lambda-zip.d.ts +5 -0
  22. package/dist/commands/build-lambda-zip.js +19 -0
  23. package/dist/commands/debug.d.ts +8 -0
  24. package/dist/commands/debug.js +176 -0
  25. package/dist/commands/deploy.d.ts +9 -0
  26. package/dist/commands/deploy.js +178 -151
  27. package/dist/commands/env.d.ts +13 -0
  28. package/dist/commands/env.js +88 -0
  29. package/dist/commands/init.d.ts +3 -5
  30. package/dist/commands/init.js +165 -148
  31. package/dist/commands/list-tokens.d.ts +3 -3
  32. package/dist/commands/list-tokens.js +22 -7
  33. package/dist/commands/login.d.ts +8 -1
  34. package/dist/commands/login.js +33 -15
  35. package/dist/commands/logout.d.ts +5 -4
  36. package/dist/commands/logout.js +56 -13
  37. package/dist/commands/upgrade.d.ts +5 -0
  38. package/dist/commands/upgrade.js +331 -0
  39. package/dist/config/oauth.d.ts +4 -14
  40. package/dist/config/oauth.js +18 -40
  41. package/dist/constants.d.ts +44 -19
  42. package/dist/constants.js +73 -20
  43. package/dist/db-content-api/README.md +98 -0
  44. package/dist/db-content-api/generated/content-api-types.d.ts +3972 -0
  45. package/dist/db-content-api/generated/content-api-types.js +7 -0
  46. package/dist/db-content-api/index.d.ts +21 -0
  47. package/dist/db-content-api/index.js +787 -0
  48. package/dist/db-content-api/temp-utilities/slug.d.ts +2 -0
  49. package/dist/db-content-api/temp-utilities/slug.js +3 -0
  50. package/dist/db-content-api/temp-utilities/sorting.d.ts +3 -0
  51. package/dist/db-content-api/temp-utilities/sorting.js +39 -0
  52. package/dist/db-content-api/temp-utilities/types.d.ts +22 -0
  53. package/dist/db-content-api/temp-utilities/types.js +15 -0
  54. package/dist/db-content-api/temp-utilities/unwrapDocument.d.ts +39 -0
  55. package/dist/db-content-api/temp-utilities/unwrapDocument.js +59 -0
  56. package/dist/db-content-api/utilities/auth.d.ts +30 -0
  57. package/dist/db-content-api/utilities/auth.js +81 -0
  58. package/dist/db-content-api/utilities/data/applyDefaults.d.ts +7 -0
  59. package/dist/db-content-api/utilities/data/applyDefaults.js +59 -0
  60. package/dist/db-content-api/utilities/data/castFieldValue.d.ts +11 -0
  61. package/dist/db-content-api/utilities/data/castFieldValue.js +68 -0
  62. package/dist/db-content-api/utilities/data/index.d.ts +49 -0
  63. package/dist/db-content-api/utilities/data/index.js +284 -0
  64. package/dist/db-content-api/utilities/data/removeVirtualFields.d.ts +12 -0
  65. package/dist/db-content-api/utilities/data/removeVirtualFields.js +54 -0
  66. package/dist/db-content-api/utilities/data/stripFields.d.ts +48 -0
  67. package/dist/db-content-api/utilities/data/stripFields.js +195 -0
  68. package/dist/db-content-api/utilities/data/transformPublishedLocale.d.ts +23 -0
  69. package/dist/db-content-api/utilities/data/transformPublishedLocale.js +42 -0
  70. package/dist/db-content-api/utilities/joins.d.ts +55 -0
  71. package/dist/db-content-api/utilities/joins.js +135 -0
  72. package/dist/db-content-api/utilities/locale/index.d.ts +10 -0
  73. package/dist/db-content-api/utilities/locale/index.js +21 -0
  74. package/dist/db-content-api/utilities/meta/buildLocalizedPaths.d.ts +11 -0
  75. package/dist/db-content-api/utilities/meta/buildLocalizedPaths.js +74 -0
  76. package/dist/db-content-api/utilities/meta/buildMeta.d.ts +42 -0
  77. package/dist/db-content-api/utilities/meta/buildMeta.js +41 -0
  78. package/dist/db-content-api/utilities/meta/buildPathTypes.d.ts +17 -0
  79. package/dist/db-content-api/utilities/meta/buildPathTypes.js +244 -0
  80. package/dist/db-content-api/utilities/meta/buildUniquePaths.d.ts +13 -0
  81. package/dist/db-content-api/utilities/meta/buildUniquePaths.js +62 -0
  82. package/dist/db-content-api/utilities/meta/normalizeLocaleInWhere.d.ts +10 -0
  83. package/dist/db-content-api/utilities/meta/normalizeLocaleInWhere.js +102 -0
  84. package/dist/db-content-api/utilities/where.d.ts +20 -0
  85. package/dist/db-content-api/utilities/where.js +104 -0
  86. package/dist/deploy/schedule-extract-plugin.d.ts +11 -0
  87. package/dist/deploy/schedule-extract-plugin.js +34 -0
  88. package/dist/endpoints/health.d.ts +3 -0
  89. package/dist/endpoints/health.js +11 -0
  90. package/dist/endpoints/schema.d.ts +3 -0
  91. package/dist/endpoints/schema.js +29 -0
  92. package/dist/exports/client.d.ts +3 -0
  93. package/dist/exports/client.js +3 -0
  94. package/dist/index.d.ts +2 -1
  95. package/dist/index.js +3 -1
  96. package/dist/oauth/components/FigmaAvatar/index.d.ts +4 -0
  97. package/dist/oauth/components/FigmaAvatar/index.js +27 -0
  98. package/dist/oauth/components/FigmaAvatar/index.scss +12 -0
  99. package/dist/oauth/components/FigmaAvatarCell/index.d.ts +5 -0
  100. package/dist/oauth/components/FigmaAvatarCell/index.js +25 -0
  101. package/dist/oauth/components/FigmaAvatarCell/index.scss +5 -0
  102. package/dist/oauth/components/FigmaAvatarPlaceholder/index.d.ts +9 -0
  103. package/dist/oauth/components/FigmaAvatarPlaceholder/index.js +37 -0
  104. package/dist/oauth/components/FigmaAvatarPlaceholder/index.scss +28 -0
  105. package/dist/oauth/components/LoginButton/index.js +50 -6
  106. package/dist/oauth/components/LoginButton/index.scss +50 -3
  107. package/dist/oauth/components/LogoutButton/index.js +5 -4
  108. package/dist/oauth/defaults.js +67 -10
  109. package/dist/oauth/endpoints/getLoginEndpoint.js +77 -24
  110. package/dist/oauth/endpoints/getLogoutEndpoint.js +7 -4
  111. package/dist/oauth/index.js +40 -13
  112. package/dist/oauth/strategy/index.d.ts +0 -2
  113. package/dist/oauth/strategy/index.js +40 -17
  114. package/dist/oauth/types.d.ts +6 -6
  115. package/dist/oauth/utilities/isDuplicateKeyError.d.ts +7 -0
  116. package/dist/oauth/utilities/isDuplicateKeyError.js +14 -0
  117. package/dist/oauth/utilities/refreshTokens.js +6 -3
  118. package/dist/plugin/build-config.d.ts +18 -15
  119. package/dist/plugin/build-config.js +213 -18
  120. package/dist/storage-content-api/api-types.d.ts +168 -0
  121. package/dist/storage-content-api/api-types.js +6 -0
  122. package/dist/storage-content-api/client-uploads/ClientUploadHandler.d.ts +9 -0
  123. package/dist/storage-content-api/client-uploads/ClientUploadHandler.js +42 -0
  124. package/dist/storage-content-api/client-uploads/generateSignedURL.d.ts +13 -0
  125. package/dist/storage-content-api/client-uploads/generateSignedURL.js +39 -0
  126. package/dist/storage-content-api/client.d.ts +6 -0
  127. package/dist/storage-content-api/client.js +36 -0
  128. package/dist/storage-content-api/generateURL.d.ts +7 -0
  129. package/dist/storage-content-api/generateURL.js +8 -0
  130. package/dist/storage-content-api/handleDelete.d.ts +8 -0
  131. package/dist/storage-content-api/handleDelete.js +17 -0
  132. package/dist/storage-content-api/handleUpload.d.ts +11 -0
  133. package/dist/storage-content-api/handleUpload.js +144 -0
  134. package/dist/storage-content-api/index.d.ts +5 -0
  135. package/dist/storage-content-api/index.js +31 -0
  136. package/dist/storage-content-api/staticHandler.d.ts +10 -0
  137. package/dist/storage-content-api/staticHandler.js +56 -0
  138. package/dist/storage-content-api/types.d.ts +10 -0
  139. package/dist/storage-content-api/types.js +3 -0
  140. package/dist/storage-content-api/utilities/getSafeFilename.d.ts +12 -0
  141. package/dist/storage-content-api/utilities/getSafeFilename.js +61 -0
  142. package/dist/storage-content-api/utilities/index.d.ts +2 -0
  143. package/dist/storage-content-api/utilities/index.js +3 -0
  144. package/dist/templates/.env.example +5 -0
  145. package/dist/templates/README.md +19 -0
  146. package/dist/types/config.d.ts +2 -1
  147. package/dist/types/config.js +0 -2
  148. package/dist/types.d.ts +8 -1
  149. package/dist/utils/adapters/nextjs.d.ts +9 -0
  150. package/dist/utils/adapters/nextjs.js +64 -0
  151. package/dist/utils/adapters/nitro.d.ts +9 -0
  152. package/dist/utils/adapters/nitro.js +169 -0
  153. package/dist/utils/adapters/vite.d.ts +10 -0
  154. package/dist/utils/adapters/vite.js +33 -0
  155. package/dist/utils/asset-collection.d.ts +27 -6
  156. package/dist/utils/asset-collection.js +59 -30
  157. package/dist/utils/build-detection.d.ts +5 -11
  158. package/dist/utils/build-detection.js +74 -11
  159. package/dist/utils/build-lambda-zip.d.ts +14 -0
  160. package/dist/utils/build-lambda-zip.js +81 -0
  161. package/dist/utils/cache-bootstrap.d.ts +8 -0
  162. package/dist/utils/cache-bootstrap.js +18 -0
  163. package/dist/utils/config.js +1 -1
  164. package/dist/utils/deploy-adapter.d.ts +40 -0
  165. package/dist/utils/deploy-adapter.js +58 -0
  166. package/dist/utils/download-template.js +3 -2
  167. package/dist/utils/env-management.d.ts +24 -7
  168. package/dist/utils/env-management.js +119 -64
  169. package/dist/utils/format-env-suffix.d.ts +12 -0
  170. package/dist/utils/format-env-suffix.js +13 -0
  171. package/dist/utils/formatter.js +23 -11
  172. package/dist/utils/fs-utils.d.ts +6 -0
  173. package/dist/utils/fs-utils.js +27 -0
  174. package/dist/utils/handle-upgrade.d.ts +9 -0
  175. package/dist/utils/handle-upgrade.js +41 -0
  176. package/dist/utils/lambda-config.d.ts +3 -1
  177. package/dist/utils/lambda-config.js +87 -79
  178. package/dist/utils/messages.d.ts +1 -2
  179. package/dist/utils/messages.js +29 -11
  180. package/dist/utils/package-manager.d.ts +24 -0
  181. package/dist/utils/package-manager.js +53 -0
  182. package/dist/utils/payload-config-ast.d.ts +27 -6
  183. package/dist/utils/payload-config-ast.js +84 -54
  184. package/dist/utils/payload-config-finder.d.ts +2 -2
  185. package/dist/utils/payload-config-finder.js +48 -9
  186. package/dist/utils/payload-config-modifier.d.ts +1 -1
  187. package/dist/utils/payload-config-modifier.js +70 -11
  188. package/dist/utils/payload-package-check.d.ts +12 -1
  189. package/dist/utils/payload-package-check.js +63 -5
  190. package/dist/utils/project.d.ts +3 -2
  191. package/dist/utils/project.js +29 -15
  192. package/dist/utils/resolve-environment.d.ts +14 -0
  193. package/dist/utils/resolve-environment.js +31 -0
  194. package/dist/utils/s3-upload.d.ts +7 -2
  195. package/dist/utils/s3-upload.js +39 -6
  196. package/dist/utils/token-display.js +11 -5
  197. package/dist/utils/typescript-validator.js +4 -6
  198. package/dist/utils/version-check.d.ts +3 -0
  199. package/dist/utils/version-check.js +38 -0
  200. package/package.json +29 -11
  201. package/dist/api/control-plane.d.ts.map +0 -1
  202. package/dist/api/control-plane.js.map +0 -1
  203. package/dist/api/figma-api.d.ts.map +0 -1
  204. package/dist/api/figma-api.js.map +0 -1
  205. package/dist/auth/browser.d.ts.map +0 -1
  206. package/dist/auth/browser.js.map +0 -1
  207. package/dist/auth/callback-server.d.ts.map +0 -1
  208. package/dist/auth/callback-server.js.map +0 -1
  209. package/dist/auth/crypto-utils.d.ts.map +0 -1
  210. package/dist/auth/crypto-utils.js.map +0 -1
  211. package/dist/auth/jwt-validator.d.ts.map +0 -1
  212. package/dist/auth/jwt-validator.js.map +0 -1
  213. package/dist/auth/oauth-flow.d.ts.map +0 -1
  214. package/dist/auth/oauth-flow.js.map +0 -1
  215. package/dist/auth/pkce.d.ts.map +0 -1
  216. package/dist/auth/pkce.js.map +0 -1
  217. package/dist/auth/project-token.d.ts.map +0 -1
  218. package/dist/auth/project-token.js.map +0 -1
  219. package/dist/auth/refresh.d.ts.map +0 -1
  220. package/dist/auth/refresh.js.map +0 -1
  221. package/dist/auth/token-store.d.ts.map +0 -1
  222. package/dist/auth/token-store.js.map +0 -1
  223. package/dist/auth/types.d.ts.map +0 -1
  224. package/dist/auth/types.js.map +0 -1
  225. package/dist/cli.d.ts.map +0 -1
  226. package/dist/cli.js.map +0 -1
  227. package/dist/commands/deploy.d.ts.map +0 -1
  228. package/dist/commands/deploy.js.map +0 -1
  229. package/dist/commands/init.d.ts.map +0 -1
  230. package/dist/commands/init.js.map +0 -1
  231. package/dist/commands/list-tokens.d.ts.map +0 -1
  232. package/dist/commands/list-tokens.js.map +0 -1
  233. package/dist/commands/login.d.ts.map +0 -1
  234. package/dist/commands/login.js.map +0 -1
  235. package/dist/commands/logout.d.ts.map +0 -1
  236. package/dist/commands/logout.js.map +0 -1
  237. package/dist/config/oauth.d.ts.map +0 -1
  238. package/dist/config/oauth.js.map +0 -1
  239. package/dist/constants.d.ts.map +0 -1
  240. package/dist/constants.js.map +0 -1
  241. package/dist/exports/client.d.ts.map +0 -1
  242. package/dist/exports/client.js.map +0 -1
  243. package/dist/index.d.ts.map +0 -1
  244. package/dist/index.js.map +0 -1
  245. package/dist/oauth/components/LoginButton/index.d.ts.map +0 -1
  246. package/dist/oauth/components/LoginButton/index.js.map +0 -1
  247. package/dist/oauth/components/LogoutButton/index.d.ts.map +0 -1
  248. package/dist/oauth/components/LogoutButton/index.js.map +0 -1
  249. package/dist/oauth/defaults.d.ts.map +0 -1
  250. package/dist/oauth/defaults.js.map +0 -1
  251. package/dist/oauth/endpoints/getLoginEndpoint.d.ts.map +0 -1
  252. package/dist/oauth/endpoints/getLoginEndpoint.js.map +0 -1
  253. package/dist/oauth/endpoints/getLogoutEndpoint.d.ts.map +0 -1
  254. package/dist/oauth/endpoints/getLogoutEndpoint.js.map +0 -1
  255. package/dist/oauth/endpoints/getMetaEndpoint.d.ts.map +0 -1
  256. package/dist/oauth/endpoints/getMetaEndpoint.js.map +0 -1
  257. package/dist/oauth/endpoints/getRedirectToLoginEndpoint.d.ts.map +0 -1
  258. package/dist/oauth/endpoints/getRedirectToLoginEndpoint.js.map +0 -1
  259. package/dist/oauth/exports/client.d.ts.map +0 -1
  260. package/dist/oauth/exports/client.js.map +0 -1
  261. package/dist/oauth/hooks/afterLogout.d.ts.map +0 -1
  262. package/dist/oauth/hooks/afterLogout.js.map +0 -1
  263. package/dist/oauth/hooks/me.d.ts.map +0 -1
  264. package/dist/oauth/hooks/me.js.map +0 -1
  265. package/dist/oauth/hooks/refresh.d.ts.map +0 -1
  266. package/dist/oauth/hooks/refresh.js.map +0 -1
  267. package/dist/oauth/index.d.ts.map +0 -1
  268. package/dist/oauth/index.js.map +0 -1
  269. package/dist/oauth/strategy/index.d.ts.map +0 -1
  270. package/dist/oauth/strategy/index.js.map +0 -1
  271. package/dist/oauth/types.d.ts.map +0 -1
  272. package/dist/oauth/types.js.map +0 -1
  273. package/dist/oauth/utilities/clearCookie.d.ts.map +0 -1
  274. package/dist/oauth/utilities/clearCookie.js.map +0 -1
  275. package/dist/oauth/utilities/createCookieOptions.d.ts.map +0 -1
  276. package/dist/oauth/utilities/createCookieOptions.js.map +0 -1
  277. package/dist/oauth/utilities/createDebugLogger.d.ts.map +0 -1
  278. package/dist/oauth/utilities/createDebugLogger.js.map +0 -1
  279. package/dist/oauth/utilities/extractOrigin.d.ts.map +0 -1
  280. package/dist/oauth/utilities/extractOrigin.js.map +0 -1
  281. package/dist/oauth/utilities/getAdminCollectionSlug.d.ts.map +0 -1
  282. package/dist/oauth/utilities/getAdminCollectionSlug.js.map +0 -1
  283. package/dist/oauth/utilities/getAdminPath.d.ts +0 -8
  284. package/dist/oauth/utilities/getAdminPath.d.ts.map +0 -1
  285. package/dist/oauth/utilities/getAdminPath.js +0 -9
  286. package/dist/oauth/utilities/getAdminPath.js.map +0 -1
  287. package/dist/oauth/utilities/getAuthorizeURL.d.ts.map +0 -1
  288. package/dist/oauth/utilities/getAuthorizeURL.js.map +0 -1
  289. package/dist/oauth/utilities/getCookieExpiration.d.ts.map +0 -1
  290. package/dist/oauth/utilities/getCookieExpiration.js.map +0 -1
  291. package/dist/oauth/utilities/getSecondsFromTokenExp.d.ts.map +0 -1
  292. package/dist/oauth/utilities/getSecondsFromTokenExp.js.map +0 -1
  293. package/dist/oauth/utilities/getTokenExp.d.ts.map +0 -1
  294. package/dist/oauth/utilities/getTokenExp.js.map +0 -1
  295. package/dist/oauth/utilities/getUsernameField.d.ts.map +0 -1
  296. package/dist/oauth/utilities/getUsernameField.js.map +0 -1
  297. package/dist/oauth/utilities/hasUserTokenPropsChanged.d.ts.map +0 -1
  298. package/dist/oauth/utilities/hasUserTokenPropsChanged.js.map +0 -1
  299. package/dist/oauth/utilities/mergeHeaders.d.ts.map +0 -1
  300. package/dist/oauth/utilities/mergeHeaders.js.map +0 -1
  301. package/dist/oauth/utilities/refreshTokens.d.ts.map +0 -1
  302. package/dist/oauth/utilities/refreshTokens.js.map +0 -1
  303. package/dist/plugin/adapter.d.ts.map +0 -1
  304. package/dist/plugin/adapter.js.map +0 -1
  305. package/dist/plugin/build-config.d.ts.map +0 -1
  306. package/dist/plugin/build-config.js.map +0 -1
  307. package/dist/types/config.d.ts.map +0 -1
  308. package/dist/types/config.js.map +0 -1
  309. package/dist/types.d.ts.map +0 -1
  310. package/dist/types.js.map +0 -1
  311. package/dist/utils/asset-collection.d.ts.map +0 -1
  312. package/dist/utils/asset-collection.js.map +0 -1
  313. package/dist/utils/build-detection.d.ts.map +0 -1
  314. package/dist/utils/build-detection.js.map +0 -1
  315. package/dist/utils/config.d.ts.map +0 -1
  316. package/dist/utils/config.js.map +0 -1
  317. package/dist/utils/download-template.d.ts.map +0 -1
  318. package/dist/utils/download-template.js.map +0 -1
  319. package/dist/utils/env-management.d.ts.map +0 -1
  320. package/dist/utils/env-management.js.map +0 -1
  321. package/dist/utils/format.d.ts.map +0 -1
  322. package/dist/utils/format.js.map +0 -1
  323. package/dist/utils/formatter.d.ts.map +0 -1
  324. package/dist/utils/formatter.js.map +0 -1
  325. package/dist/utils/git.d.ts.map +0 -1
  326. package/dist/utils/git.js.map +0 -1
  327. package/dist/utils/is-debug.d.ts.map +0 -1
  328. package/dist/utils/is-debug.js.map +0 -1
  329. package/dist/utils/lambda-config.d.ts.map +0 -1
  330. package/dist/utils/lambda-config.js.map +0 -1
  331. package/dist/utils/log.d.ts.map +0 -1
  332. package/dist/utils/log.js.map +0 -1
  333. package/dist/utils/messages.d.ts.map +0 -1
  334. package/dist/utils/messages.js.map +0 -1
  335. package/dist/utils/package-manager.d.ts.map +0 -1
  336. package/dist/utils/package-manager.js.map +0 -1
  337. package/dist/utils/payload-config-ast.d.ts.map +0 -1
  338. package/dist/utils/payload-config-ast.js.map +0 -1
  339. package/dist/utils/payload-config-finder.d.ts.map +0 -1
  340. package/dist/utils/payload-config-finder.js.map +0 -1
  341. package/dist/utils/payload-config-modifier.d.ts.map +0 -1
  342. package/dist/utils/payload-config-modifier.js.map +0 -1
  343. package/dist/utils/payload-package-check.d.ts.map +0 -1
  344. package/dist/utils/payload-package-check.js.map +0 -1
  345. package/dist/utils/project.d.ts.map +0 -1
  346. package/dist/utils/project.js.map +0 -1
  347. package/dist/utils/s3-upload.d.ts.map +0 -1
  348. package/dist/utils/s3-upload.js.map +0 -1
  349. package/dist/utils/token-display.d.ts.map +0 -1
  350. package/dist/utils/token-display.js.map +0 -1
  351. package/dist/utils/typescript-validator.d.ts.map +0 -1
  352. package/dist/utils/typescript-validator.js.map +0 -1
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Upload API types extracted from Content API OpenAPI spec.
3
+ * These are kept separate to avoid breaking changes when the main spec is regenerated.
4
+ */
5
+ export type UploadPaths = {
6
+ '/api/v0/uploads/{collectionId}/{filename}': {
7
+ delete: {
8
+ parameters: {
9
+ path: {
10
+ collectionId: string;
11
+ filename: string;
12
+ };
13
+ };
14
+ responses: {
15
+ 200: {
16
+ content: {
17
+ 'application/json': {
18
+ success: true;
19
+ };
20
+ };
21
+ };
22
+ };
23
+ };
24
+ };
25
+ '/api/v0/uploads/download/sign': {
26
+ post: {
27
+ requestBody: {
28
+ content: {
29
+ 'application/json': {
30
+ collectionId: string;
31
+ expiresIn: number;
32
+ filename: string;
33
+ };
34
+ };
35
+ };
36
+ responses: {
37
+ 200: {
38
+ content: {
39
+ 'application/json': {
40
+ url: string;
41
+ };
42
+ };
43
+ };
44
+ };
45
+ };
46
+ };
47
+ '/api/v0/uploads/multipart/abort': {
48
+ post: {
49
+ requestBody: {
50
+ content: {
51
+ 'application/json': {
52
+ collectionId: string;
53
+ filename: string;
54
+ uploadId: string;
55
+ };
56
+ };
57
+ };
58
+ responses: {
59
+ 200: {
60
+ content: {
61
+ 'application/json': {
62
+ success: true;
63
+ };
64
+ };
65
+ };
66
+ };
67
+ };
68
+ };
69
+ '/api/v0/uploads/multipart/complete': {
70
+ post: {
71
+ requestBody: {
72
+ content: {
73
+ 'application/json': {
74
+ collectionId: string;
75
+ filename: string;
76
+ parts: Array<{
77
+ ETag: string;
78
+ PartNumber: number;
79
+ }>;
80
+ uploadId: string;
81
+ };
82
+ };
83
+ };
84
+ responses: {
85
+ 200: {
86
+ content: {
87
+ 'application/json': {
88
+ success: true;
89
+ };
90
+ };
91
+ };
92
+ };
93
+ };
94
+ };
95
+ '/api/v0/uploads/multipart/initiate': {
96
+ post: {
97
+ requestBody: {
98
+ content: {
99
+ 'application/json': {
100
+ collectionId: string;
101
+ contentType: string;
102
+ filename: string;
103
+ };
104
+ };
105
+ };
106
+ responses: {
107
+ 200: {
108
+ content: {
109
+ 'application/json': {
110
+ uploadId: string;
111
+ };
112
+ };
113
+ };
114
+ };
115
+ };
116
+ };
117
+ '/api/v0/uploads/multipart/parts': {
118
+ post: {
119
+ requestBody: {
120
+ content: {
121
+ 'application/json': {
122
+ collectionId: string;
123
+ expiresIn: number;
124
+ filename: string;
125
+ partNumbers: number[];
126
+ uploadId: string;
127
+ };
128
+ };
129
+ };
130
+ responses: {
131
+ 200: {
132
+ content: {
133
+ 'application/json': {
134
+ parts: Array<{
135
+ partNumber: number;
136
+ url: string;
137
+ }>;
138
+ };
139
+ };
140
+ };
141
+ };
142
+ };
143
+ };
144
+ '/api/v0/uploads/sign': {
145
+ post: {
146
+ requestBody: {
147
+ content: {
148
+ 'application/json': {
149
+ collectionId: string;
150
+ contentType?: string;
151
+ expiresIn: number;
152
+ filename: string;
153
+ };
154
+ };
155
+ };
156
+ responses: {
157
+ 200: {
158
+ content: {
159
+ 'application/json': {
160
+ url: string;
161
+ };
162
+ };
163
+ };
164
+ };
165
+ };
166
+ };
167
+ };
168
+ //# sourceMappingURL=api-types.d.ts.map
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Upload API types extracted from Content API OpenAPI spec.
3
+ * These are kept separate to avoid breaking changes when the main spec is regenerated.
4
+ */ export { };
5
+
6
+ //# sourceMappingURL=api-types.js.map
@@ -0,0 +1,9 @@
1
+ export declare const ContentApiClientUploadHandler: ({ children, collectionSlug, enabled, extra, prefix, serverHandlerPath, }: {
2
+ children: import("react").ReactNode;
3
+ collectionSlug: import("payload").UploadCollectionSlug;
4
+ enabled?: boolean;
5
+ extra: Record<string, unknown>;
6
+ prefix?: string;
7
+ serverHandlerPath: `/${string}`;
8
+ }) => import("react").JSX.Element;
9
+ //# sourceMappingURL=ClientUploadHandler.d.ts.map
@@ -0,0 +1,42 @@
1
+ 'use client';
2
+ import { createClientUploadHandler } from '@payloadcms/plugin-cloud-storage/client';
3
+ export const ContentApiClientUploadHandler = createClientUploadHandler({
4
+ handler: async ({ apiRoute, collectionSlug, file, prefix, serverHandlerPath, serverURL })=>{
5
+ // Build endpoint URL: serverURL + apiRoute + serverHandlerPath
6
+ const endpointRoute = `${serverURL}${apiRoute}${serverHandlerPath}`;
7
+ const response = await fetch(endpointRoute, {
8
+ body: JSON.stringify({
9
+ collectionSlug,
10
+ filename: file.name,
11
+ mimeType: file.type
12
+ }),
13
+ credentials: 'include',
14
+ headers: {
15
+ 'Content-Type': 'application/json'
16
+ },
17
+ method: 'POST'
18
+ });
19
+ if (!response.ok) {
20
+ throw new Error(`Failed to get presigned URL: ${response.status} ${response.statusText}`);
21
+ }
22
+ const { filename: safeFilename, url } = await response.json();
23
+ const uploadFilename = safeFilename || file.name;
24
+ const uploadResponse = await fetch(url, {
25
+ body: file,
26
+ headers: {
27
+ 'Content-Type': file.type
28
+ },
29
+ method: 'PUT'
30
+ });
31
+ if (!uploadResponse.ok) {
32
+ throw new Error(`Failed to upload to S3: ${uploadResponse.status} ${uploadResponse.statusText}`);
33
+ }
34
+ return {
35
+ clientUploaded: true,
36
+ filename: uploadFilename,
37
+ prefix
38
+ };
39
+ }
40
+ });
41
+
42
+ //# sourceMappingURL=ClientUploadHandler.js.map
@@ -0,0 +1,13 @@
1
+ import type { PayloadHandler } from 'payload';
2
+ import type { StorageClient } from '../client.js';
3
+ type ClientUploadsAccess = (args: {
4
+ collectionSlug: string;
5
+ req: Parameters<PayloadHandler>[0];
6
+ }) => boolean | Promise<boolean>;
7
+ type Args = {
8
+ access?: ClientUploadsAccess;
9
+ client: StorageClient;
10
+ };
11
+ export declare const getGenerateSignedURLHandler: ({ access, client, }: Args) => PayloadHandler;
12
+ export {};
13
+ //# sourceMappingURL=generateSignedURL.d.ts.map
@@ -0,0 +1,39 @@
1
+ import { APIError, Forbidden } from 'payload';
2
+ import { getSafeFilename } from '../utilities/index.js';
3
+ const defaultAccess = ({ req })=>!!req.user;
4
+ export const getGenerateSignedURLHandler = ({ access = defaultAccess, client })=>{
5
+ return async (req)=>{
6
+ if (!req.json) {
7
+ throw new APIError('Content-Type expected to be application/json', 400);
8
+ }
9
+ const { collectionSlug, filename, mimeType } = await req.json();
10
+ if (!await access({
11
+ collectionSlug,
12
+ req
13
+ })) {
14
+ throw new Forbidden();
15
+ }
16
+ const safeFilename = await getSafeFilename({
17
+ collectionSlug,
18
+ desiredFilename: filename,
19
+ req
20
+ });
21
+ const { data, error } = await client.POST('/api/v0/uploads/sign', {
22
+ body: {
23
+ collectionId: collectionSlug,
24
+ contentType: mimeType,
25
+ expiresIn: 3600,
26
+ filename: safeFilename
27
+ }
28
+ });
29
+ if (error || !data) {
30
+ throw new APIError(`Failed to get presigned upload URL: ${JSON.stringify(error)}`);
31
+ }
32
+ return Response.json({
33
+ filename: safeFilename,
34
+ url: data.url
35
+ });
36
+ };
37
+ };
38
+
39
+ //# sourceMappingURL=generateSignedURL.js.map
@@ -0,0 +1,6 @@
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;
6
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1,36 @@
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(auth.tokenStore, contentSystemId);
22
+ if (!token) {
23
+ throw new Error('Authentication required. Run `npx @payloadcms/figma login` to authenticate.');
24
+ }
25
+ request.headers.set('Authorization', `Bearer ${token}`);
26
+ } else {
27
+ const token = await fetchDevJwt(config.baseUrl, contentSystemId);
28
+ request.headers.set('Authorization', `Bearer ${token}`);
29
+ }
30
+ }
31
+ return request;
32
+ }
33
+ };
34
+ }
35
+
36
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1,7 @@
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 {};
7
+ //# sourceMappingURL=generateURL.d.ts.map
@@ -0,0 +1,8 @@
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
+ };
7
+
8
+ //# sourceMappingURL=generateURL.js.map
@@ -0,0 +1,8 @@
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 {};
8
+ //# sourceMappingURL=handleDelete.d.ts.map
@@ -0,0 +1,17 @@
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
+ };
16
+
17
+ //# sourceMappingURL=handleDelete.js.map
@@ -0,0 +1,11 @@
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 {};
11
+ //# sourceMappingURL=handleUpload.d.ts.map
@@ -0,0 +1,144 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ const PART_SIZE = 64 * 1024 * 1024 // 64MB per part
4
+ ;
5
+ const MAX_FILE_SIZE_BEFORE_MULTIPART = 100 * 1024 * 1024 // 100MB
6
+ ;
7
+ export const getHandleUpload = ({ client, collection, prefix = '' })=>{
8
+ return async ({ clientUploadContext, data, file })=>{
9
+ // Skip if client already uploaded THIS SPECIFIC file
10
+ // clientUploadContext.filename contains the original filename that was client-uploaded
11
+ // Resized versions (different filename) should still be uploaded
12
+ const clientUploadedFilename = clientUploadContext && typeof clientUploadContext === 'object' && 'filename' in clientUploadContext ? clientUploadContext.filename : undefined;
13
+ const isOriginalClientUploaded = clientUploadContext && typeof clientUploadContext === 'object' && 'clientUploaded' in clientUploadContext && clientUploadContext.clientUploaded && file.filename === clientUploadedFilename;
14
+ if (isOriginalClientUploaded) {
15
+ return data;
16
+ }
17
+ const collectionId = collection.slug;
18
+ const fileKey = path.posix.join(data.prefix || prefix, file.filename);
19
+ const fileData = file.tempFilePath ? fs.readFileSync(file.tempFilePath) : file.buffer;
20
+ const fileSize = file.filesize || fileData.length;
21
+ if (fileSize > MAX_FILE_SIZE_BEFORE_MULTIPART) {
22
+ await uploadMultipart({
23
+ client,
24
+ collectionId,
25
+ fileData,
26
+ fileKey,
27
+ mimeType: file.mimeType
28
+ });
29
+ } else {
30
+ await uploadSingleFile({
31
+ client,
32
+ collectionId,
33
+ fileData,
34
+ fileKey,
35
+ mimeType: file.mimeType
36
+ });
37
+ }
38
+ return data;
39
+ };
40
+ };
41
+ async function uploadSingleFile({ client, collectionId, fileData, fileKey, mimeType }) {
42
+ const { data, error } = await client.POST('/api/v0/uploads/sign', {
43
+ body: {
44
+ collectionId,
45
+ contentType: mimeType,
46
+ expiresIn: 3600,
47
+ filename: fileKey
48
+ }
49
+ });
50
+ if (error || !data) {
51
+ throw new Error(`Failed to get presigned upload URL: ${JSON.stringify(error)}`);
52
+ }
53
+ const uploadResponse = await fetch(data.url, {
54
+ body: fileData,
55
+ headers: {
56
+ 'Content-Type': mimeType
57
+ },
58
+ method: 'PUT'
59
+ });
60
+ if (!uploadResponse.ok) {
61
+ throw new Error(`Failed to upload to S3: ${uploadResponse.status} ${uploadResponse.statusText}`);
62
+ }
63
+ }
64
+ async function uploadMultipart({ client, collectionId, fileData, fileKey, mimeType }) {
65
+ const { data: initiateData, error: initiateError } = await client.POST('/api/v0/uploads/multipart/initiate', {
66
+ body: {
67
+ collectionId,
68
+ contentType: mimeType,
69
+ filename: fileKey
70
+ }
71
+ });
72
+ if (initiateError || !initiateData) {
73
+ throw new Error(`Failed to initiate multipart upload: ${JSON.stringify(initiateError)}`);
74
+ }
75
+ const { uploadId } = initiateData;
76
+ try {
77
+ const numParts = Math.ceil(fileData.length / PART_SIZE);
78
+ const partNumbers = Array.from({
79
+ length: numParts
80
+ }, (_, i)=>i + 1);
81
+ const { data: partsData, error: partsError } = await client.POST('/api/v0/uploads/multipart/parts', {
82
+ body: {
83
+ collectionId,
84
+ expiresIn: 3600,
85
+ filename: fileKey,
86
+ partNumbers,
87
+ uploadId
88
+ }
89
+ });
90
+ if (partsError || !partsData) {
91
+ throw new Error(`Failed to get part URLs: ${JSON.stringify(partsError)}`);
92
+ }
93
+ const { parts } = partsData;
94
+ if (!parts || !Array.isArray(parts)) {
95
+ throw new Error('Invalid response from part URLs endpoint: parts is not an array');
96
+ }
97
+ const uploadedParts = await Promise.all(parts.map(async ({ partNumber, url })=>{
98
+ const start = (partNumber - 1) * PART_SIZE;
99
+ const end = Math.min(start + PART_SIZE, fileData.length);
100
+ const partData = fileData.slice(start, end);
101
+ const uploadResponse = await fetch(url, {
102
+ body: partData,
103
+ headers: {
104
+ 'Content-Type': mimeType
105
+ },
106
+ method: 'PUT'
107
+ });
108
+ const etag = uploadResponse.headers.get('ETag');
109
+ if (!etag) {
110
+ throw new Error(`No ETag returned for part ${partNumber}`);
111
+ }
112
+ return {
113
+ ETag: etag,
114
+ PartNumber: partNumber
115
+ };
116
+ }));
117
+ const { error: completeError } = await client.POST('/api/v0/uploads/multipart/complete', {
118
+ body: {
119
+ collectionId,
120
+ filename: fileKey,
121
+ parts: uploadedParts,
122
+ uploadId
123
+ }
124
+ });
125
+ if (completeError) {
126
+ throw new Error(`Failed to complete multipart upload: ${JSON.stringify(completeError)}`);
127
+ }
128
+ } catch (error) {
129
+ try {
130
+ await client.POST('/api/v0/uploads/multipart/abort', {
131
+ body: {
132
+ collectionId,
133
+ filename: fileKey,
134
+ uploadId
135
+ }
136
+ });
137
+ } catch {
138
+ // Ignore abort errors
139
+ }
140
+ throw error;
141
+ }
142
+ }
143
+
144
+ //# sourceMappingURL=handleUpload.js.map
@@ -0,0 +1,5 @@
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;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,31 @@
1
+ import { createStorageClient } from './client.js';
2
+ import { getGenerateURL } from './generateURL.js';
3
+ import { getHandleDelete } from './handleDelete.js';
4
+ import { getHandleUpload } from './handleUpload.js';
5
+ import { getHandler } from './staticHandler.js';
6
+ export function contentApiStorageAdapter(config) {
7
+ return ({ collection, prefix })=>{
8
+ const client = createStorageClient(config);
9
+ const baseUrl = config.baseUrl;
10
+ return {
11
+ name: 'content-api',
12
+ generateURL: getGenerateURL({
13
+ baseUrl
14
+ }),
15
+ handleDelete: getHandleDelete({
16
+ client
17
+ }),
18
+ handleUpload: getHandleUpload({
19
+ client,
20
+ collection,
21
+ prefix
22
+ }),
23
+ staticHandler: getHandler({
24
+ client,
25
+ collection
26
+ })
27
+ };
28
+ };
29
+ }
30
+
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,10 @@
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 {};
10
+ //# sourceMappingURL=staticHandler.d.ts.map
@@ -0,0 +1,56 @@
1
+ import { getFilePrefix } from '@payloadcms/plugin-cloud-storage/utilities';
2
+ import path from 'path';
3
+ export const getHandler = ({ client, collection })=>{
4
+ return async (req, { params: { clientUploadContext, filename } })=>{
5
+ try {
6
+ const prefix = await getFilePrefix({
7
+ clientUploadContext,
8
+ collection,
9
+ filename,
10
+ req
11
+ });
12
+ const key = path.posix.join(prefix, filename);
13
+ const { data, error } = await client.POST('/api/v0/uploads/download/sign', {
14
+ body: {
15
+ collectionId: collection.slug,
16
+ expiresIn: 7200,
17
+ filename: key
18
+ }
19
+ });
20
+ if (error || !data) {
21
+ req.payload.logger.error(`Failed to get signed download URL: ${JSON.stringify(error)}`);
22
+ return new Response('Internal Server Error', {
23
+ status: 500
24
+ });
25
+ }
26
+ // Fetch file bytes from S3 (required for Payload's image processing)
27
+ const fileResponse = await fetch(data.url);
28
+ if (!fileResponse.ok) {
29
+ req.payload.logger.error(`S3 fetch failed: ${fileResponse.status} ${fileResponse.statusText}`);
30
+ return new Response('Failed to fetch file from storage', {
31
+ status: 502
32
+ });
33
+ }
34
+ const contentType = fileResponse.headers.get('content-type') || 'application/octet-stream';
35
+ const contentLength = fileResponse.headers.get('content-length');
36
+ return new Response(fileResponse.body, {
37
+ headers: {
38
+ 'Content-Type': contentType,
39
+ ...contentLength && {
40
+ 'Content-Length': contentLength
41
+ }
42
+ }
43
+ });
44
+ } catch (err) {
45
+ req.payload.logger.error({
46
+ err,
47
+ msg: 'Error in staticHandler'
48
+ });
49
+ return new Response('Internal Server Error', {
50
+ status: 500
51
+ });
52
+ }
53
+ };
54
+ };
55
+
56
+ //# sourceMappingURL=staticHandler.js.map
@@ -0,0 +1,10 @@
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
+ };
10
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,12 @@
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>;
12
+ //# sourceMappingURL=getSafeFilename.d.ts.map