payload 3.89.0 → 3.90.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 (459) hide show
  1. package/dist/admin/forms/Field.d.ts +2 -0
  2. package/dist/admin/forms/Field.d.ts.map +1 -1
  3. package/dist/admin/forms/Field.js.map +1 -1
  4. package/dist/admin/forms/Form.d.ts +2 -0
  5. package/dist/admin/forms/Form.d.ts.map +1 -1
  6. package/dist/admin/forms/Form.js.map +1 -1
  7. package/dist/admin/functions/index.d.ts +3 -1
  8. package/dist/admin/functions/index.d.ts.map +1 -1
  9. package/dist/admin/functions/index.js.map +1 -1
  10. package/dist/admin/views/dashboard.d.ts +1 -1
  11. package/dist/admin/views/dashboard.d.ts.map +1 -1
  12. package/dist/admin/views/dashboard.js.map +1 -1
  13. package/dist/auth/applyUserReadAccess.d.ts +15 -0
  14. package/dist/auth/applyUserReadAccess.d.ts.map +1 -0
  15. package/dist/auth/applyUserReadAccess.js +41 -0
  16. package/dist/auth/applyUserReadAccess.js.map +1 -0
  17. package/dist/auth/baseFields/apiKey/canCreateOrUpdateAPIKey.d.ts +4 -0
  18. package/dist/auth/baseFields/apiKey/canCreateOrUpdateAPIKey.d.ts.map +1 -0
  19. package/dist/auth/baseFields/apiKey/canCreateOrUpdateAPIKey.js +20 -0
  20. package/dist/auth/baseFields/apiKey/canCreateOrUpdateAPIKey.js.map +1 -0
  21. package/dist/auth/baseFields/apiKey/encryptAPIKey.d.ts +4 -0
  22. package/dist/auth/baseFields/apiKey/encryptAPIKey.d.ts.map +1 -0
  23. package/dist/auth/baseFields/apiKey/encryptAPIKey.js +16 -0
  24. package/dist/auth/baseFields/apiKey/encryptAPIKey.js.map +1 -0
  25. package/dist/auth/baseFields/apiKey/index.d.ts +6 -0
  26. package/dist/auth/baseFields/apiKey/index.d.ts.map +1 -0
  27. package/dist/auth/baseFields/apiKey/index.js +112 -0
  28. package/dist/auth/baseFields/apiKey/index.js.map +1 -0
  29. package/dist/auth/baseFields/apiKey/omitAPIKey.d.ts +4 -0
  30. package/dist/auth/baseFields/apiKey/omitAPIKey.d.ts.map +1 -0
  31. package/dist/auth/baseFields/apiKey/omitAPIKey.js +8 -0
  32. package/dist/auth/baseFields/apiKey/omitAPIKey.js.map +1 -0
  33. package/dist/auth/baseFields/apiKey/omitAPIKeyIndex.d.ts +4 -0
  34. package/dist/auth/baseFields/apiKey/omitAPIKeyIndex.d.ts.map +1 -0
  35. package/dist/auth/baseFields/apiKey/omitAPIKeyIndex.js +5 -0
  36. package/dist/auth/baseFields/apiKey/omitAPIKeyIndex.js.map +1 -0
  37. package/dist/auth/baseFields/apiKey/omitEncryptedAPIKey.d.ts +4 -0
  38. package/dist/auth/baseFields/apiKey/omitEncryptedAPIKey.d.ts.map +1 -0
  39. package/dist/auth/baseFields/apiKey/omitEncryptedAPIKey.js +5 -0
  40. package/dist/auth/baseFields/apiKey/omitEncryptedAPIKey.js.map +1 -0
  41. package/dist/auth/baseFields/apiKey/setAPIKeyIndex.d.ts +4 -0
  42. package/dist/auth/baseFields/apiKey/setAPIKeyIndex.d.ts.map +1 -0
  43. package/dist/auth/baseFields/apiKey/setAPIKeyIndex.js +17 -0
  44. package/dist/auth/baseFields/apiKey/setAPIKeyIndex.js.map +1 -0
  45. package/dist/auth/baseFields/auth.d.ts +1 -0
  46. package/dist/auth/baseFields/auth.d.ts.map +1 -1
  47. package/dist/auth/baseFields/auth.js +9 -0
  48. package/dist/auth/baseFields/auth.js.map +1 -1
  49. package/dist/auth/defaultUnlockAccess.d.ts +3 -0
  50. package/dist/auth/defaultUnlockAccess.d.ts.map +1 -0
  51. package/dist/auth/defaultUnlockAccess.js +8 -0
  52. package/dist/auth/defaultUnlockAccess.js.map +1 -0
  53. package/dist/auth/endpoints/index.d.ts +1 -0
  54. package/dist/auth/endpoints/index.d.ts.map +1 -1
  55. package/dist/auth/endpoints/index.js +8 -0
  56. package/dist/auth/endpoints/index.js.map +1 -1
  57. package/dist/auth/endpoints/revealAPIKey.d.ts +7 -0
  58. package/dist/auth/endpoints/revealAPIKey.d.ts.map +1 -0
  59. package/dist/auth/endpoints/revealAPIKey.js +120 -0
  60. package/dist/auth/endpoints/revealAPIKey.js.map +1 -0
  61. package/dist/auth/executeAccess.d.ts +3 -1
  62. package/dist/auth/executeAccess.d.ts.map +1 -1
  63. package/dist/auth/executeAccess.js +2 -1
  64. package/dist/auth/executeAccess.js.map +1 -1
  65. package/dist/auth/getAuthFields.d.ts +1 -1
  66. package/dist/auth/getAuthFields.d.ts.map +1 -1
  67. package/dist/auth/getAuthFields.js +7 -4
  68. package/dist/auth/getAuthFields.js.map +1 -1
  69. package/dist/auth/getFieldsToSign.d.ts.map +1 -1
  70. package/dist/auth/getFieldsToSign.js +17 -10
  71. package/dist/auth/getFieldsToSign.js.map +1 -1
  72. package/dist/auth/getFieldsToSign.spec.js +114 -0
  73. package/dist/auth/getFieldsToSign.spec.js.map +1 -0
  74. package/dist/auth/jwt.d.ts.map +1 -1
  75. package/dist/auth/jwt.js +2 -0
  76. package/dist/auth/jwt.js.map +1 -1
  77. package/dist/auth/jwt.spec.js +24 -0
  78. package/dist/auth/jwt.spec.js.map +1 -0
  79. package/dist/auth/jwtAuth.d.ts +9 -0
  80. package/dist/auth/jwtAuth.d.ts.map +1 -0
  81. package/dist/auth/jwtAuth.js +8 -0
  82. package/dist/auth/jwtAuth.js.map +1 -0
  83. package/dist/auth/operations/auth.d.ts.map +1 -1
  84. package/dist/auth/operations/auth.js +2 -1
  85. package/dist/auth/operations/auth.js.map +1 -1
  86. package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
  87. package/dist/auth/operations/forgotPassword.js +95 -7
  88. package/dist/auth/operations/forgotPassword.js.map +1 -1
  89. package/dist/auth/operations/local/auth.js +3 -1
  90. package/dist/auth/operations/local/auth.js.map +1 -1
  91. package/dist/auth/operations/login.d.ts.map +1 -1
  92. package/dist/auth/operations/login.js +48 -26
  93. package/dist/auth/operations/login.js.map +1 -1
  94. package/dist/auth/operations/refresh.d.ts.map +1 -1
  95. package/dist/auth/operations/refresh.js +32 -9
  96. package/dist/auth/operations/refresh.js.map +1 -1
  97. package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
  98. package/dist/auth/operations/registerFirstUser.js +3 -4
  99. package/dist/auth/operations/registerFirstUser.js.map +1 -1
  100. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  101. package/dist/auth/operations/resetPassword.js +31 -22
  102. package/dist/auth/operations/resetPassword.js.map +1 -1
  103. package/dist/auth/operations/unlock.d.ts.map +1 -1
  104. package/dist/auth/operations/unlock.js +1 -0
  105. package/dist/auth/operations/unlock.js.map +1 -1
  106. package/dist/auth/strategies/apiKey.d.ts.map +1 -1
  107. package/dist/auth/strategies/apiKey.js +15 -1
  108. package/dist/auth/strategies/apiKey.js.map +1 -1
  109. package/dist/auth/strategies/jwt.d.ts.map +1 -1
  110. package/dist/auth/strategies/jwt.js +61 -10
  111. package/dist/auth/strategies/jwt.js.map +1 -1
  112. package/dist/auth/strategies/jwt.spec.js +281 -0
  113. package/dist/auth/strategies/jwt.spec.js.map +1 -0
  114. package/dist/auth/strategies/local/authenticate.d.ts +5 -1
  115. package/dist/auth/strategies/local/authenticate.d.ts.map +1 -1
  116. package/dist/auth/strategies/local/authenticate.js +8 -3
  117. package/dist/auth/strategies/local/authenticate.js.map +1 -1
  118. package/dist/auth/strategies/local/authenticate.spec.js +37 -10
  119. package/dist/auth/strategies/local/authenticate.spec.js.map +1 -1
  120. package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts +9 -1
  121. package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts.map +1 -1
  122. package/dist/auth/strategies/local/generatePasswordSaltHash.js +61 -34
  123. package/dist/auth/strategies/local/generatePasswordSaltHash.js.map +1 -1
  124. package/dist/auth/types.d.ts +16 -1
  125. package/dist/auth/types.d.ts.map +1 -1
  126. package/dist/auth/types.js.map +1 -1
  127. package/dist/collections/config/client.d.ts +1 -0
  128. package/dist/collections/config/client.d.ts.map +1 -1
  129. package/dist/collections/config/client.js +3 -0
  130. package/dist/collections/config/client.js.map +1 -1
  131. package/dist/collections/config/defaults.d.ts.map +1 -1
  132. package/dist/collections/config/defaults.js +4 -2
  133. package/dist/collections/config/defaults.js.map +1 -1
  134. package/dist/collections/config/sanitize.d.ts.map +1 -1
  135. package/dist/collections/config/sanitize.js +17 -6
  136. package/dist/collections/config/sanitize.js.map +1 -1
  137. package/dist/collections/endpoints/index.d.ts +1 -0
  138. package/dist/collections/endpoints/index.d.ts.map +1 -1
  139. package/dist/collections/endpoints/index.js +6 -5
  140. package/dist/collections/endpoints/index.js.map +1 -1
  141. package/dist/collections/operations/create.d.ts.map +1 -1
  142. package/dist/collections/operations/create.js +105 -8
  143. package/dist/collections/operations/create.js.map +1 -1
  144. package/dist/collections/operations/deleteByID.js +13 -13
  145. package/dist/collections/operations/deleteByID.js.map +1 -1
  146. package/dist/collections/operations/findDistinct.d.ts.map +1 -1
  147. package/dist/collections/operations/findDistinct.js +96 -18
  148. package/dist/collections/operations/findDistinct.js.map +1 -1
  149. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  150. package/dist/collections/operations/restoreVersion.js +47 -13
  151. package/dist/collections/operations/restoreVersion.js.map +1 -1
  152. package/dist/collections/operations/update.d.ts.map +1 -1
  153. package/dist/collections/operations/update.js +118 -18
  154. package/dist/collections/operations/update.js.map +1 -1
  155. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  156. package/dist/collections/operations/updateByID.js +62 -2
  157. package/dist/collections/operations/updateByID.js.map +1 -1
  158. package/dist/collections/operations/utilities/update.d.ts.map +1 -1
  159. package/dist/collections/operations/utilities/update.js +71 -15
  160. package/dist/collections/operations/utilities/update.js.map +1 -1
  161. package/dist/config/orderable/index.d.ts.map +1 -1
  162. package/dist/config/orderable/index.js +67 -14
  163. package/dist/config/orderable/index.js.map +1 -1
  164. package/dist/config/sanitize.d.ts.map +1 -1
  165. package/dist/config/sanitize.js +1 -1
  166. package/dist/config/sanitize.js.map +1 -1
  167. package/dist/config/types.d.ts +13 -1
  168. package/dist/config/types.d.ts.map +1 -1
  169. package/dist/config/types.js.map +1 -1
  170. package/dist/database/getLocalizedPaths.d.ts +2 -1
  171. package/dist/database/getLocalizedPaths.d.ts.map +1 -1
  172. package/dist/database/getLocalizedPaths.js +12 -3
  173. package/dist/database/getLocalizedPaths.js.map +1 -1
  174. package/dist/database/isNestedRelationshipQuery.d.ts +9 -0
  175. package/dist/database/isNestedRelationshipQuery.d.ts.map +1 -0
  176. package/dist/database/isNestedRelationshipQuery.js +14 -0
  177. package/dist/database/isNestedRelationshipQuery.js.map +1 -0
  178. package/dist/database/prefixWherePaths.d.ts +6 -0
  179. package/dist/database/prefixWherePaths.d.ts.map +1 -0
  180. package/dist/database/prefixWherePaths.js +19 -0
  181. package/dist/database/prefixWherePaths.js.map +1 -0
  182. package/dist/database/prefixWherePaths.spec.js +46 -0
  183. package/dist/database/prefixWherePaths.spec.js.map +1 -0
  184. package/dist/database/queryValidation/validateQueryPaths.d.ts +2 -1
  185. package/dist/database/queryValidation/validateQueryPaths.d.ts.map +1 -1
  186. package/dist/database/queryValidation/validateQueryPaths.js +4 -1
  187. package/dist/database/queryValidation/validateQueryPaths.js.map +1 -1
  188. package/dist/database/queryValidation/validateSearchParams.d.ts +2 -1
  189. package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
  190. package/dist/database/queryValidation/validateSearchParams.js +87 -4
  191. package/dist/database/queryValidation/validateSearchParams.js.map +1 -1
  192. package/dist/database/types.d.ts +5 -0
  193. package/dist/database/types.d.ts.map +1 -1
  194. package/dist/database/types.js.map +1 -1
  195. package/dist/email/normalizeSendEmailOptions.js.map +1 -1
  196. package/dist/email/types.d.ts +4 -1
  197. package/dist/email/types.d.ts.map +1 -1
  198. package/dist/email/types.js.map +1 -1
  199. package/dist/exports/internal.d.ts +7 -0
  200. package/dist/exports/internal.d.ts.map +1 -1
  201. package/dist/exports/internal.js +7 -1
  202. package/dist/exports/internal.js.map +1 -1
  203. package/dist/exports/shared.d.ts +3 -0
  204. package/dist/exports/shared.d.ts.map +1 -1
  205. package/dist/exports/shared.js +3 -0
  206. package/dist/exports/shared.js.map +1 -1
  207. package/dist/fields/config/types.d.ts +7 -5
  208. package/dist/fields/config/types.d.ts.map +1 -1
  209. package/dist/fields/config/types.js.map +1 -1
  210. package/dist/fields/hooks/beforeChange/index.d.ts +7 -1
  211. package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
  212. package/dist/fields/hooks/beforeChange/index.js +4 -2
  213. package/dist/fields/hooks/beforeChange/index.js.map +1 -1
  214. package/dist/fields/hooks/beforeChange/index.spec.js +206 -0
  215. package/dist/fields/hooks/beforeChange/index.spec.js.map +1 -0
  216. package/dist/fields/hooks/beforeChange/promise.d.ts +2 -1
  217. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  218. package/dist/fields/hooks/beforeChange/promise.js +51 -9
  219. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  220. package/dist/fields/hooks/beforeChange/traverseFields.d.ts +2 -1
  221. package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
  222. package/dist/fields/hooks/beforeChange/traverseFields.js +3 -2
  223. package/dist/fields/hooks/beforeChange/traverseFields.js.map +1 -1
  224. package/dist/fields/hooks/beforeDuplicate/promise.d.ts.map +1 -1
  225. package/dist/fields/hooks/beforeDuplicate/promise.js +4 -0
  226. package/dist/fields/hooks/beforeDuplicate/promise.js.map +1 -1
  227. package/dist/fields/hooks/beforeValidate/getFallbackValue.d.ts +2 -1
  228. package/dist/fields/hooks/beforeValidate/getFallbackValue.d.ts.map +1 -1
  229. package/dist/fields/hooks/beforeValidate/getFallbackValue.js +2 -2
  230. package/dist/fields/hooks/beforeValidate/getFallbackValue.js.map +1 -1
  231. package/dist/fields/hooks/beforeValidate/index.d.ts +6 -1
  232. package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
  233. package/dist/fields/hooks/beforeValidate/index.js +3 -1
  234. package/dist/fields/hooks/beforeValidate/index.js.map +1 -1
  235. package/dist/fields/hooks/beforeValidate/index.spec.js +90 -0
  236. package/dist/fields/hooks/beforeValidate/index.spec.js.map +1 -0
  237. package/dist/fields/hooks/beforeValidate/promise.d.ts +6 -1
  238. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  239. package/dist/fields/hooks/beforeValidate/promise.js +23 -8
  240. package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
  241. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts +6 -1
  242. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
  243. package/dist/fields/hooks/beforeValidate/traverseFields.js +3 -1
  244. package/dist/fields/hooks/beforeValidate/traverseFields.js.map +1 -1
  245. package/dist/fields/validations.d.ts.map +1 -1
  246. package/dist/fields/validations.js +3 -1
  247. package/dist/fields/validations.js.map +1 -1
  248. package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
  249. package/dist/globals/operations/restoreVersion.js +45 -11
  250. package/dist/globals/operations/restoreVersion.js.map +1 -1
  251. package/dist/globals/operations/update.d.ts.map +1 -1
  252. package/dist/globals/operations/update.js +95 -16
  253. package/dist/globals/operations/update.js.map +1 -1
  254. package/dist/index.bundled.d.ts +102 -24
  255. package/dist/index.d.ts +3 -1
  256. package/dist/index.d.ts.map +1 -1
  257. package/dist/index.js +2 -2
  258. package/dist/index.js.map +1 -1
  259. package/dist/preferences/config.d.ts.map +1 -1
  260. package/dist/preferences/config.js +2 -1
  261. package/dist/preferences/config.js.map +1 -1
  262. package/dist/query-presets/access.d.ts.map +1 -1
  263. package/dist/query-presets/access.js +2 -1
  264. package/dist/query-presets/access.js.map +1 -1
  265. package/dist/queues/config/types/index.d.ts +2 -1
  266. package/dist/queues/config/types/index.d.ts.map +1 -1
  267. package/dist/queues/config/types/index.js.map +1 -1
  268. package/dist/uploads/assertClientUploadAccess.d.ts +7 -0
  269. package/dist/uploads/assertClientUploadAccess.d.ts.map +1 -0
  270. package/dist/uploads/assertClientUploadAccess.js +27 -0
  271. package/dist/uploads/assertClientUploadAccess.js.map +1 -0
  272. package/dist/uploads/assertClientUploadAllowed.d.ts +11 -0
  273. package/dist/uploads/assertClientUploadAllowed.d.ts.map +1 -0
  274. package/dist/uploads/assertClientUploadAllowed.js +46 -0
  275. package/dist/uploads/assertClientUploadAllowed.js.map +1 -0
  276. package/dist/uploads/assertClientUploadAllowed.spec.js +91 -0
  277. package/dist/uploads/assertClientUploadAllowed.spec.js.map +1 -0
  278. package/dist/uploads/checkFileRestrictions.d.ts +4 -1
  279. package/dist/uploads/checkFileRestrictions.d.ts.map +1 -1
  280. package/dist/uploads/checkFileRestrictions.js +66 -26
  281. package/dist/uploads/checkFileRestrictions.js.map +1 -1
  282. package/dist/uploads/clientUploadReceipt.d.ts +23 -0
  283. package/dist/uploads/clientUploadReceipt.d.ts.map +1 -0
  284. package/dist/uploads/clientUploadReceipt.js +55 -0
  285. package/dist/uploads/clientUploadReceipt.js.map +1 -0
  286. package/dist/uploads/deleteAssociatedFiles.d.ts.map +1 -1
  287. package/dist/uploads/deleteAssociatedFiles.js +33 -8
  288. package/dist/uploads/deleteAssociatedFiles.js.map +1 -1
  289. package/dist/uploads/deleteAssociatedFiles.spec.js +124 -0
  290. package/dist/uploads/deleteAssociatedFiles.spec.js.map +1 -0
  291. package/dist/uploads/detectSvgFromXml.d.ts +1 -3
  292. package/dist/uploads/detectSvgFromXml.d.ts.map +1 -1
  293. package/dist/uploads/detectSvgFromXml.js +3 -40
  294. package/dist/uploads/detectSvgFromXml.js.map +1 -1
  295. package/dist/uploads/endpoints/getFile.d.ts.map +1 -1
  296. package/dist/uploads/endpoints/getFile.js +5 -3
  297. package/dist/uploads/endpoints/getFile.js.map +1 -1
  298. package/dist/uploads/fetchAPI-multipart/handlers.d.ts +2 -2
  299. package/dist/uploads/fetchAPI-multipart/handlers.d.ts.map +1 -1
  300. package/dist/uploads/fetchAPI-multipart/handlers.js +18 -5
  301. package/dist/uploads/fetchAPI-multipart/handlers.js.map +1 -1
  302. package/dist/uploads/fetchAPI-multipart/index.d.ts.map +1 -1
  303. package/dist/uploads/fetchAPI-multipart/index.js +24 -2
  304. package/dist/uploads/fetchAPI-multipart/index.js.map +1 -1
  305. package/dist/uploads/fetchAPI-multipart/processMultipart.d.ts +0 -6
  306. package/dist/uploads/fetchAPI-multipart/processMultipart.d.ts.map +1 -1
  307. package/dist/uploads/fetchAPI-multipart/processMultipart.js +146 -126
  308. package/dist/uploads/fetchAPI-multipart/processMultipart.js.map +1 -1
  309. package/dist/uploads/fetchAPI-multipart/processMultipart.spec.js +663 -0
  310. package/dist/uploads/fetchAPI-multipart/processMultipart.spec.js.map +1 -0
  311. package/dist/uploads/generateFileData.d.ts +3 -1
  312. package/dist/uploads/generateFileData.d.ts.map +1 -1
  313. package/dist/uploads/generateFileData.js +29 -16
  314. package/dist/uploads/generateFileData.js.map +1 -1
  315. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  316. package/dist/uploads/getBaseFields.js +3 -1
  317. package/dist/uploads/getBaseFields.js.map +1 -1
  318. package/dist/uploads/getExternalFile.d.ts +1 -1
  319. package/dist/uploads/getExternalFile.d.ts.map +1 -1
  320. package/dist/uploads/getExternalFile.js +60 -15
  321. package/dist/uploads/getExternalFile.js.map +1 -1
  322. package/dist/uploads/getFileTypeFallback.d.ts.map +1 -1
  323. package/dist/uploads/getFileTypeFallback.js +3 -1
  324. package/dist/uploads/getFileTypeFallback.js.map +1 -1
  325. package/dist/uploads/getFileTypeIdentity.d.ts +19 -0
  326. package/dist/uploads/getFileTypeIdentity.d.ts.map +1 -0
  327. package/dist/uploads/getFileTypeIdentity.js +34 -0
  328. package/dist/uploads/getFileTypeIdentity.js.map +1 -0
  329. package/dist/uploads/getFileTypeIdentity.spec.js +43 -0
  330. package/dist/uploads/getFileTypeIdentity.spec.js.map +1 -0
  331. package/dist/uploads/isProcessableImage.d.ts +2 -0
  332. package/dist/uploads/isProcessableImage.d.ts.map +1 -0
  333. package/dist/uploads/isProcessableImage.js +7 -0
  334. package/dist/uploads/isProcessableImage.js.map +1 -0
  335. package/dist/uploads/safeFetch.d.ts.map +1 -1
  336. package/dist/uploads/safeFetch.js +3 -2
  337. package/dist/uploads/safeFetch.js.map +1 -1
  338. package/dist/uploads/sanitizeUploadData.d.ts +26 -0
  339. package/dist/uploads/sanitizeUploadData.d.ts.map +1 -0
  340. package/dist/uploads/sanitizeUploadData.js +159 -0
  341. package/dist/uploads/sanitizeUploadData.js.map +1 -0
  342. package/dist/uploads/sanitizeUploadData.spec.js +255 -0
  343. package/dist/uploads/sanitizeUploadData.spec.js.map +1 -0
  344. package/dist/uploads/types.d.ts +11 -3
  345. package/dist/uploads/types.d.ts.map +1 -1
  346. package/dist/uploads/types.js.map +1 -1
  347. package/dist/uploads/uploadContentSecurityPolicy.d.ts +2 -0
  348. package/dist/uploads/uploadContentSecurityPolicy.d.ts.map +1 -0
  349. package/dist/uploads/uploadContentSecurityPolicy.js +3 -0
  350. package/dist/uploads/uploadContentSecurityPolicy.js.map +1 -0
  351. package/dist/uploads/validateISOBaseMediaFile.d.ts +4 -0
  352. package/dist/uploads/validateISOBaseMediaFile.d.ts.map +1 -0
  353. package/dist/uploads/validateISOBaseMediaFile.js +91 -0
  354. package/dist/uploads/validateISOBaseMediaFile.js.map +1 -0
  355. package/dist/uploads/validateISOBaseMediaFile.spec.js +130 -0
  356. package/dist/uploads/validateISOBaseMediaFile.spec.js.map +1 -0
  357. package/dist/uploads/validateSvg.d.ts +10 -4
  358. package/dist/uploads/validateSvg.d.ts.map +1 -1
  359. package/dist/uploads/validateSvg.js +280 -40
  360. package/dist/uploads/validateSvg.js.map +1 -1
  361. package/dist/uploads/validateSvg.spec.js +123 -0
  362. package/dist/uploads/validateSvg.spec.js.map +1 -0
  363. package/dist/uploads/validateUploadFilename.d.ts +3 -0
  364. package/dist/uploads/validateUploadFilename.d.ts.map +1 -0
  365. package/dist/uploads/validateUploadFilename.js +13 -0
  366. package/dist/uploads/validateUploadFilename.js.map +1 -0
  367. package/dist/uploads/validateUploadFilename.spec.js +24 -0
  368. package/dist/uploads/validateUploadFilename.spec.js.map +1 -0
  369. package/dist/utilities/addDataAndFileToRequest.d.ts.map +1 -1
  370. package/dist/utilities/addDataAndFileToRequest.js +28 -1
  371. package/dist/utilities/addDataAndFileToRequest.js.map +1 -1
  372. package/dist/utilities/addDataAndFileToRequest.spec.js +158 -0
  373. package/dist/utilities/addDataAndFileToRequest.spec.js.map +1 -1
  374. package/dist/utilities/createPayloadRequest.d.ts.map +1 -1
  375. package/dist/utilities/createPayloadRequest.js +2 -1
  376. package/dist/utilities/createPayloadRequest.js.map +1 -1
  377. package/dist/utilities/deepCopyObject.d.ts.map +1 -1
  378. package/dist/utilities/deepCopyObject.js +110 -19
  379. package/dist/utilities/deepCopyObject.js.map +1 -1
  380. package/dist/utilities/deepCopyObject.spec.js +216 -0
  381. package/dist/utilities/deepCopyObject.spec.js.map +1 -0
  382. package/dist/utilities/fieldPath.d.ts +13 -0
  383. package/dist/utilities/fieldPath.d.ts.map +1 -0
  384. package/dist/utilities/fieldPath.js +51 -0
  385. package/dist/utilities/fieldPath.js.map +1 -0
  386. package/dist/utilities/fieldPath.spec.js +155 -0
  387. package/dist/utilities/fieldPath.spec.js.map +1 -0
  388. package/dist/utilities/getEntityPermissions/getEntityPermissions.d.ts.map +1 -1
  389. package/dist/utilities/getEntityPermissions/getEntityPermissions.js +2 -0
  390. package/dist/utilities/getEntityPermissions/getEntityPermissions.js.map +1 -1
  391. package/dist/utilities/getObjectDotNotation.d.ts.map +1 -1
  392. package/dist/utilities/getObjectDotNotation.js +7 -1
  393. package/dist/utilities/getObjectDotNotation.js.map +1 -1
  394. package/dist/utilities/getObjectDotNotation.spec.js +33 -0
  395. package/dist/utilities/getObjectDotNotation.spec.js.map +1 -0
  396. package/dist/utilities/getSafeRedirect.spec.js +14 -0
  397. package/dist/utilities/getSafeRedirect.spec.js.map +1 -1
  398. package/dist/utilities/getTopLevelFieldNames.d.ts +2 -0
  399. package/dist/utilities/getTopLevelFieldNames.d.ts.map +1 -0
  400. package/dist/utilities/getTopLevelFieldNames.js +3 -0
  401. package/dist/utilities/getTopLevelFieldNames.js.map +1 -0
  402. package/dist/utilities/getTopLevelFieldNames.spec.js +18 -0
  403. package/dist/utilities/getTopLevelFieldNames.spec.js.map +1 -0
  404. package/dist/utilities/handleEndpoints.js +1 -1
  405. package/dist/utilities/handleEndpoints.js.map +1 -1
  406. package/dist/utilities/parseParams/index.d.ts.map +1 -1
  407. package/dist/utilities/parseParams/index.js +3 -1
  408. package/dist/utilities/parseParams/index.js.map +1 -1
  409. package/dist/utilities/parseParams/index.spec.js +8 -0
  410. package/dist/utilities/parseParams/index.spec.js.map +1 -1
  411. package/dist/utilities/telemetry/featureInfo/getFeatureInfo.d.ts +4 -0
  412. package/dist/utilities/telemetry/featureInfo/getFeatureInfo.d.ts.map +1 -0
  413. package/dist/utilities/telemetry/featureInfo/getFeatureInfo.js +248 -0
  414. package/dist/utilities/telemetry/featureInfo/getFeatureInfo.js.map +1 -0
  415. package/dist/utilities/telemetry/featureInfo/types.d.ts +62 -0
  416. package/dist/utilities/telemetry/featureInfo/types.d.ts.map +1 -0
  417. package/dist/utilities/telemetry/featureInfo/types.js +3 -0
  418. package/dist/utilities/telemetry/featureInfo/types.js.map +1 -0
  419. package/dist/utilities/telemetry/getProjectContext.d.ts +14 -0
  420. package/dist/utilities/telemetry/getProjectContext.d.ts.map +1 -0
  421. package/dist/utilities/telemetry/getProjectContext.js +36 -0
  422. package/dist/utilities/telemetry/getProjectContext.js.map +1 -0
  423. package/dist/utilities/telemetry/index.d.ts +7 -1
  424. package/dist/utilities/telemetry/index.d.ts.map +1 -1
  425. package/dist/utilities/telemetry/index.js +22 -0
  426. package/dist/utilities/telemetry/index.js.map +1 -1
  427. package/dist/utilities/traverseFields.d.ts.map +1 -1
  428. package/dist/utilities/traverseFields.js +5 -14
  429. package/dist/utilities/traverseFields.js.map +1 -1
  430. package/dist/utilities/unflatten.d.ts.map +1 -1
  431. package/dist/utilities/unflatten.js +21 -9
  432. package/dist/utilities/unflatten.js.map +1 -1
  433. package/dist/utilities/unflatten.spec.js +38 -0
  434. package/dist/utilities/unflatten.spec.js.map +1 -0
  435. package/dist/versions/allLocalesPublicationStatus.d.ts +38 -0
  436. package/dist/versions/allLocalesPublicationStatus.d.ts.map +1 -0
  437. package/dist/versions/allLocalesPublicationStatus.js +57 -0
  438. package/dist/versions/allLocalesPublicationStatus.js.map +1 -0
  439. package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
  440. package/dist/versions/getLatestGlobalVersion.js +10 -2
  441. package/dist/versions/getLatestGlobalVersion.js.map +1 -1
  442. package/dist/versions/getRestoredStatusesToAuthorize.d.ts +9 -0
  443. package/dist/versions/getRestoredStatusesToAuthorize.d.ts.map +1 -0
  444. package/dist/versions/getRestoredStatusesToAuthorize.js +22 -0
  445. package/dist/versions/getRestoredStatusesToAuthorize.js.map +1 -0
  446. package/dist/versions/getRestoredStatusesToAuthorize.spec.js +50 -0
  447. package/dist/versions/getRestoredStatusesToAuthorize.spec.js.map +1 -0
  448. package/dist/versions/schedule/job.d.ts +2 -2
  449. package/dist/versions/schedule/job.d.ts.map +1 -1
  450. package/dist/versions/schedule/job.js +11 -7
  451. package/dist/versions/schedule/job.js.map +1 -1
  452. package/dist/versions/schedule/types.d.ts +5 -1
  453. package/dist/versions/schedule/types.d.ts.map +1 -1
  454. package/dist/versions/schedule/types.js.map +1 -1
  455. package/package.json +4 -2
  456. package/dist/auth/baseFields/apiKey.d.ts +0 -3
  457. package/dist/auth/baseFields/apiKey.d.ts.map +0 -1
  458. package/dist/auth/baseFields/apiKey.js +0 -59
  459. package/dist/auth/baseFields/apiKey.js.map +0 -1
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Returns the distinct publication statuses a restore will write, so `access.update` can be
3
+ * checked for each one. `_status` is a scalar, or a per-locale object when
4
+ * `versions.drafts.localizeStatus` is on - a localized restore can publish and unpublish locales
5
+ * at once, so both intents are returned and each must pass. Empty when `_status` is absent.
6
+ */ export const getRestoredStatusesToAuthorize = (rawStatus)=>{
7
+ if (typeof rawStatus === 'string') {
8
+ return [
9
+ rawStatus === 'published' ? 'published' : 'draft'
10
+ ];
11
+ }
12
+ if (rawStatus && typeof rawStatus === 'object' && !Array.isArray(rawStatus)) {
13
+ const statuses = new Set();
14
+ for (const value of Object.values(rawStatus)){
15
+ statuses.add(value === 'published' ? 'published' : 'draft');
16
+ }
17
+ return Array.from(statuses);
18
+ }
19
+ return [];
20
+ };
21
+
22
+ //# sourceMappingURL=getRestoredStatusesToAuthorize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/versions/getRestoredStatusesToAuthorize.ts"],"sourcesContent":["export type RestoredStatus = 'draft' | 'published'\n\n/**\n * Returns the distinct publication statuses a restore will write, so `access.update` can be\n * checked for each one. `_status` is a scalar, or a per-locale object when\n * `versions.drafts.localizeStatus` is on - a localized restore can publish and unpublish locales\n * at once, so both intents are returned and each must pass. Empty when `_status` is absent.\n */\nexport const getRestoredStatusesToAuthorize = (rawStatus: unknown): RestoredStatus[] => {\n if (typeof rawStatus === 'string') {\n return [rawStatus === 'published' ? 'published' : 'draft']\n }\n\n if (rawStatus && typeof rawStatus === 'object' && !Array.isArray(rawStatus)) {\n const statuses = new Set<RestoredStatus>()\n\n for (const value of Object.values(rawStatus as Record<string, unknown>)) {\n statuses.add(value === 'published' ? 'published' : 'draft')\n }\n\n return Array.from(statuses)\n }\n\n return []\n}\n"],"names":["getRestoredStatusesToAuthorize","rawStatus","Array","isArray","statuses","Set","value","Object","values","add","from"],"mappings":"AAEA;;;;;CAKC,GACD,OAAO,MAAMA,iCAAiC,CAACC;IAC7C,IAAI,OAAOA,cAAc,UAAU;QACjC,OAAO;YAACA,cAAc,cAAc,cAAc;SAAQ;IAC5D;IAEA,IAAIA,aAAa,OAAOA,cAAc,YAAY,CAACC,MAAMC,OAAO,CAACF,YAAY;QAC3E,MAAMG,WAAW,IAAIC;QAErB,KAAK,MAAMC,SAASC,OAAOC,MAAM,CAACP,WAAuC;YACvEG,SAASK,GAAG,CAACH,UAAU,cAAc,cAAc;QACrD;QAEA,OAAOJ,MAAMQ,IAAI,CAACN;IACpB;IAEA,OAAO,EAAE;AACX,EAAC"}
@@ -0,0 +1,50 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { getRestoredStatusesToAuthorize } from './getRestoredStatusesToAuthorize.js';
3
+ describe('getRestoredStatusesToAuthorize', ()=>{
4
+ it('should return the scalar published status', ()=>{
5
+ expect(getRestoredStatusesToAuthorize('published')).toStrictEqual([
6
+ 'published'
7
+ ]);
8
+ });
9
+ it('should return the scalar draft status', ()=>{
10
+ expect(getRestoredStatusesToAuthorize('draft')).toStrictEqual([
11
+ 'draft'
12
+ ]);
13
+ });
14
+ it('should return a single published status when every locale is published', ()=>{
15
+ expect(getRestoredStatusesToAuthorize({
16
+ de: 'published',
17
+ en: 'published'
18
+ })).toStrictEqual([
19
+ 'published'
20
+ ]);
21
+ });
22
+ it('should return a single draft status when every locale is draft', ()=>{
23
+ expect(getRestoredStatusesToAuthorize({
24
+ de: 'draft',
25
+ en: 'draft'
26
+ })).toStrictEqual([
27
+ 'draft'
28
+ ]);
29
+ });
30
+ it('should return both statuses for a mixed-locale object so each transition is authorized', ()=>{
31
+ const result = getRestoredStatusesToAuthorize({
32
+ de: 'published',
33
+ en: 'draft'
34
+ });
35
+ expect(result).toHaveLength(2);
36
+ expect(result).toContain('draft');
37
+ expect(result).toContain('published');
38
+ });
39
+ it('should return an empty array when the status is missing', ()=>{
40
+ expect(getRestoredStatusesToAuthorize(undefined)).toStrictEqual([]);
41
+ expect(getRestoredStatusesToAuthorize(null)).toStrictEqual([]);
42
+ });
43
+ it('should return an empty array for an array status shape', ()=>{
44
+ expect(getRestoredStatusesToAuthorize([
45
+ 'published'
46
+ ])).toStrictEqual([]);
47
+ });
48
+ });
49
+
50
+ //# sourceMappingURL=getRestoredStatusesToAuthorize.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/versions/getRestoredStatusesToAuthorize.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { getRestoredStatusesToAuthorize } from './getRestoredStatusesToAuthorize.js'\n\ndescribe('getRestoredStatusesToAuthorize', () => {\n it('should return the scalar published status', () => {\n expect(getRestoredStatusesToAuthorize('published')).toStrictEqual(['published'])\n })\n\n it('should return the scalar draft status', () => {\n expect(getRestoredStatusesToAuthorize('draft')).toStrictEqual(['draft'])\n })\n\n it('should return a single published status when every locale is published', () => {\n expect(getRestoredStatusesToAuthorize({ de: 'published', en: 'published' })).toStrictEqual([\n 'published',\n ])\n })\n\n it('should return a single draft status when every locale is draft', () => {\n expect(getRestoredStatusesToAuthorize({ de: 'draft', en: 'draft' })).toStrictEqual(['draft'])\n })\n\n it('should return both statuses for a mixed-locale object so each transition is authorized', () => {\n const result = getRestoredStatusesToAuthorize({ de: 'published', en: 'draft' })\n\n expect(result).toHaveLength(2)\n expect(result).toContain('draft')\n expect(result).toContain('published')\n })\n\n it('should return an empty array when the status is missing', () => {\n expect(getRestoredStatusesToAuthorize(undefined)).toStrictEqual([])\n expect(getRestoredStatusesToAuthorize(null)).toStrictEqual([])\n })\n\n it('should return an empty array for an array status shape', () => {\n expect(getRestoredStatusesToAuthorize(['published'])).toStrictEqual([])\n })\n})\n"],"names":["describe","expect","it","getRestoredStatusesToAuthorize","toStrictEqual","de","en","result","toHaveLength","toContain","undefined"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAE7C,SAASC,8BAA8B,QAAQ,sCAAqC;AAEpFH,SAAS,kCAAkC;IACzCE,GAAG,6CAA6C;QAC9CD,OAAOE,+BAA+B,cAAcC,aAAa,CAAC;YAAC;SAAY;IACjF;IAEAF,GAAG,yCAAyC;QAC1CD,OAAOE,+BAA+B,UAAUC,aAAa,CAAC;YAAC;SAAQ;IACzE;IAEAF,GAAG,0EAA0E;QAC3ED,OAAOE,+BAA+B;YAAEE,IAAI;YAAaC,IAAI;QAAY,IAAIF,aAAa,CAAC;YACzF;SACD;IACH;IAEAF,GAAG,kEAAkE;QACnED,OAAOE,+BAA+B;YAAEE,IAAI;YAASC,IAAI;QAAQ,IAAIF,aAAa,CAAC;YAAC;SAAQ;IAC9F;IAEAF,GAAG,0FAA0F;QAC3F,MAAMK,SAASJ,+BAA+B;YAAEE,IAAI;YAAaC,IAAI;QAAQ;QAE7EL,OAAOM,QAAQC,YAAY,CAAC;QAC5BP,OAAOM,QAAQE,SAAS,CAAC;QACzBR,OAAOM,QAAQE,SAAS,CAAC;IAC3B;IAEAP,GAAG,2DAA2D;QAC5DD,OAAOE,+BAA+BO,YAAYN,aAAa,CAAC,EAAE;QAClEH,OAAOE,+BAA+B,OAAOC,aAAa,CAAC,EAAE;IAC/D;IAEAF,GAAG,0DAA0D;QAC3DD,OAAOE,+BAA+B;YAAC;SAAY,GAAGC,aAAa,CAAC,EAAE;IACxE;AACF"}
@@ -1,11 +1,11 @@
1
1
  import type { TaskConfig } from '../../queues/config/types/taskTypes.js';
2
2
  import type { SchedulePublishTaskInput } from './types.js';
3
3
  type Args = {
4
- adminUserSlug: string;
4
+ authCollectionSlugs: string[];
5
5
  collections: string[];
6
6
  globals: string[];
7
7
  };
8
- export declare const getSchedulePublishTask: ({ adminUserSlug, collections, globals, }: Args) => TaskConfig<{
8
+ export declare const getSchedulePublishTask: ({ authCollectionSlugs, collections, globals, }: Args) => TaskConfig<{
9
9
  input: SchedulePublishTaskInput;
10
10
  output: object;
11
11
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../../src/versions/schedule/job.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAA;AACxE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAE1D,KAAK,IAAI,GAAG;IACV,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,sBAAsB,6CAIhC,IAAI,KAAG,UAAU,CAAC;IAAE,KAAK,EAAE,wBAAwB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAsGvE,CAAA"}
1
+ {"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../../src/versions/schedule/job.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAA;AACxE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAE1D,KAAK,IAAI,GAAG;IACV,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,sBAAsB,mDAIhC,IAAI,KAAG,UAAU,CAAC;IAAE,KAAK,EAAE,wBAAwB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAiHvE,CAAA"}
@@ -1,17 +1,21 @@
1
- export const getSchedulePublishTask = ({ adminUserSlug, collections, globals })=>{
1
+ export const getSchedulePublishTask = ({ authCollectionSlugs, collections, globals })=>{
2
2
  return {
3
3
  slug: 'schedulePublish',
4
4
  handler: async ({ input, req })=>{
5
5
  const _status = input?.type === 'publish' || !input?.type ? 'published' : 'draft';
6
- const userID = input.user;
7
6
  let user = null;
8
- if (userID) {
7
+ if (input.user != null) {
8
+ if (typeof input.user !== 'object') {
9
+ // Legacy jobs lack enough information to restore the scheduling user identity safely, so fail closed.
10
+ const target = input.doc ? ` for the ${input.doc.relationTo} document with ID ${input.doc.value}` : input.global ? ` for the ${input.global} global` : '';
11
+ throw new Error(`Scheduled publish job was queued before Payload preserved the scheduling user's auth collection and cannot be run safely. Re-schedule the publish${target} from the admin panel.`);
12
+ }
9
13
  user = await req.payload.findByID({
10
- id: userID,
11
- collection: adminUserSlug,
14
+ id: input.user.value,
15
+ collection: input.user.relationTo,
12
16
  depth: 0
13
17
  });
14
- user.collection = adminUserSlug;
18
+ user.collection = input.user.relationTo;
15
19
  }
16
20
  let publishSpecificLocale;
17
21
  if (input?.type === 'publish' && input.locale && req.payload.config.localization) {
@@ -81,7 +85,7 @@ export const getSchedulePublishTask = ({ adminUserSlug, collections, globals })=
81
85
  {
82
86
  name: 'user',
83
87
  type: 'relationship',
84
- relationTo: adminUserSlug
88
+ relationTo: authCollectionSlugs
85
89
  }
86
90
  ]
87
91
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/versions/schedule/job.ts"],"sourcesContent":["import type { Field } from '../../fields/config/types.js'\nimport type { TypedUser } from '../../index.js'\nimport type { TaskConfig } from '../../queues/config/types/taskTypes.js'\nimport type { SchedulePublishTaskInput } from './types.js'\n\ntype Args = {\n adminUserSlug: string\n collections: string[]\n globals: string[]\n}\n\nexport const getSchedulePublishTask = ({\n adminUserSlug,\n collections,\n globals,\n}: Args): TaskConfig<{ input: SchedulePublishTaskInput; output: object }> => {\n return {\n slug: 'schedulePublish',\n handler: async ({ input, req }) => {\n const _status = input?.type === 'publish' || !input?.type ? 'published' : 'draft'\n\n const userID = input.user\n\n let user: null | TypedUser = null\n\n if (userID) {\n user = (await req.payload.findByID({\n id: userID,\n collection: adminUserSlug,\n depth: 0,\n })) as TypedUser\n\n user.collection = adminUserSlug\n }\n\n let publishSpecificLocale: string\n\n if (input?.type === 'publish' && input.locale && req.payload.config.localization) {\n const matchedLocale = req.payload.config.localization.locales.find(\n ({ code }) => code === input.locale,\n )\n\n if (matchedLocale) {\n publishSpecificLocale = input.locale\n }\n }\n\n if (input.doc) {\n // input.doc.value is always a string (#10481); coerce back to the real ID type.\n const idType =\n req.payload.collections[input.doc.relationTo]?.customIDType ??\n req.payload.db?.defaultIDType ??\n 'text'\n const id = idType === 'number' ? Number(input.doc.value) : input.doc.value\n\n await req.payload.update({\n id,\n collection: input.doc.relationTo,\n data: {\n _status,\n },\n depth: 0,\n overrideAccess: user === null,\n publishSpecificLocale: publishSpecificLocale!,\n user,\n })\n }\n\n if (input.global) {\n await req.payload.updateGlobal({\n slug: input.global,\n data: {\n _status,\n },\n depth: 0,\n overrideAccess: user === null,\n publishSpecificLocale: publishSpecificLocale!,\n user,\n })\n }\n\n return {\n output: {},\n }\n },\n inputSchema: [\n {\n name: 'type',\n type: 'radio',\n defaultValue: 'publish',\n options: ['publish', 'unpublish'],\n },\n {\n name: 'locale',\n type: 'text',\n },\n ...(collections.length > 0\n ? [\n {\n name: 'doc',\n type: 'relationship',\n relationTo: collections,\n } satisfies Field,\n ]\n : []),\n {\n name: 'global',\n type: 'select',\n options: globals,\n },\n {\n name: 'user',\n type: 'relationship',\n relationTo: adminUserSlug,\n },\n ],\n }\n}\n"],"names":["getSchedulePublishTask","adminUserSlug","collections","globals","slug","handler","input","req","_status","type","userID","user","payload","findByID","id","collection","depth","publishSpecificLocale","locale","config","localization","matchedLocale","locales","find","code","doc","idType","relationTo","customIDType","db","defaultIDType","Number","value","update","data","overrideAccess","global","updateGlobal","output","inputSchema","name","defaultValue","options","length"],"mappings":"AAWA,OAAO,MAAMA,yBAAyB,CAAC,EACrCC,aAAa,EACbC,WAAW,EACXC,OAAO,EACF;IACL,OAAO;QACLC,MAAM;QACNC,SAAS,OAAO,EAAEC,KAAK,EAAEC,GAAG,EAAE;YAC5B,MAAMC,UAAUF,OAAOG,SAAS,aAAa,CAACH,OAAOG,OAAO,cAAc;YAE1E,MAAMC,SAASJ,MAAMK,IAAI;YAEzB,IAAIA,OAAyB;YAE7B,IAAID,QAAQ;gBACVC,OAAQ,MAAMJ,IAAIK,OAAO,CAACC,QAAQ,CAAC;oBACjCC,IAAIJ;oBACJK,YAAYd;oBACZe,OAAO;gBACT;gBAEAL,KAAKI,UAAU,GAAGd;YACpB;YAEA,IAAIgB;YAEJ,IAAIX,OAAOG,SAAS,aAAaH,MAAMY,MAAM,IAAIX,IAAIK,OAAO,CAACO,MAAM,CAACC,YAAY,EAAE;gBAChF,MAAMC,gBAAgBd,IAAIK,OAAO,CAACO,MAAM,CAACC,YAAY,CAACE,OAAO,CAACC,IAAI,CAChE,CAAC,EAAEC,IAAI,EAAE,GAAKA,SAASlB,MAAMY,MAAM;gBAGrC,IAAIG,eAAe;oBACjBJ,wBAAwBX,MAAMY,MAAM;gBACtC;YACF;YAEA,IAAIZ,MAAMmB,GAAG,EAAE;gBACb,gFAAgF;gBAChF,MAAMC,SACJnB,IAAIK,OAAO,CAACV,WAAW,CAACI,MAAMmB,GAAG,CAACE,UAAU,CAAC,EAAEC,gBAC/CrB,IAAIK,OAAO,CAACiB,EAAE,EAAEC,iBAChB;gBACF,MAAMhB,KAAKY,WAAW,WAAWK,OAAOzB,MAAMmB,GAAG,CAACO,KAAK,IAAI1B,MAAMmB,GAAG,CAACO,KAAK;gBAE1E,MAAMzB,IAAIK,OAAO,CAACqB,MAAM,CAAC;oBACvBnB;oBACAC,YAAYT,MAAMmB,GAAG,CAACE,UAAU;oBAChCO,MAAM;wBACJ1B;oBACF;oBACAQ,OAAO;oBACPmB,gBAAgBxB,SAAS;oBACzBM,uBAAuBA;oBACvBN;gBACF;YACF;YAEA,IAAIL,MAAM8B,MAAM,EAAE;gBAChB,MAAM7B,IAAIK,OAAO,CAACyB,YAAY,CAAC;oBAC7BjC,MAAME,MAAM8B,MAAM;oBAClBF,MAAM;wBACJ1B;oBACF;oBACAQ,OAAO;oBACPmB,gBAAgBxB,SAAS;oBACzBM,uBAAuBA;oBACvBN;gBACF;YACF;YAEA,OAAO;gBACL2B,QAAQ,CAAC;YACX;QACF;QACAC,aAAa;YACX;gBACEC,MAAM;gBACN/B,MAAM;gBACNgC,cAAc;gBACdC,SAAS;oBAAC;oBAAW;iBAAY;YACnC;YACA;gBACEF,MAAM;gBACN/B,MAAM;YACR;eACIP,YAAYyC,MAAM,GAAG,IACrB;gBACE;oBACEH,MAAM;oBACN/B,MAAM;oBACNkB,YAAYzB;gBACd;aACD,GACD,EAAE;YACN;gBACEsC,MAAM;gBACN/B,MAAM;gBACNiC,SAASvC;YACX;YACA;gBACEqC,MAAM;gBACN/B,MAAM;gBACNkB,YAAY1B;YACd;SACD;IACH;AACF,EAAC"}
1
+ {"version":3,"sources":["../../../src/versions/schedule/job.ts"],"sourcesContent":["import type { Field } from '../../fields/config/types.js'\nimport type { TypedUser } from '../../index.js'\nimport type { TaskConfig } from '../../queues/config/types/taskTypes.js'\nimport type { SchedulePublishTaskInput } from './types.js'\n\ntype Args = {\n authCollectionSlugs: string[]\n collections: string[]\n globals: string[]\n}\n\nexport const getSchedulePublishTask = ({\n authCollectionSlugs,\n collections,\n globals,\n}: Args): TaskConfig<{ input: SchedulePublishTaskInput; output: object }> => {\n return {\n slug: 'schedulePublish',\n handler: async ({ input, req }) => {\n const _status = input?.type === 'publish' || !input?.type ? 'published' : 'draft'\n\n let user: null | TypedUser = null\n\n if (input.user != null) {\n if (typeof input.user !== 'object') {\n // Legacy jobs lack enough information to restore the scheduling user identity safely, so fail closed.\n const target = input.doc\n ? ` for the ${input.doc.relationTo} document with ID ${input.doc.value}`\n : input.global\n ? ` for the ${input.global} global`\n : ''\n\n throw new Error(\n `Scheduled publish job was queued before Payload preserved the scheduling user's auth collection and cannot be run safely. Re-schedule the publish${target} from the admin panel.`,\n )\n }\n\n user = (await req.payload.findByID({\n id: input.user.value,\n collection: input.user.relationTo,\n depth: 0,\n })) as TypedUser\n\n user.collection = input.user.relationTo\n }\n\n let publishSpecificLocale: string\n\n if (input?.type === 'publish' && input.locale && req.payload.config.localization) {\n const matchedLocale = req.payload.config.localization.locales.find(\n ({ code }) => code === input.locale,\n )\n\n if (matchedLocale) {\n publishSpecificLocale = input.locale\n }\n }\n\n if (input.doc) {\n // input.doc.value is always a string (#10481); coerce back to the real ID type.\n const idType =\n req.payload.collections[input.doc.relationTo]?.customIDType ??\n req.payload.db?.defaultIDType ??\n 'text'\n const id = idType === 'number' ? Number(input.doc.value) : input.doc.value\n\n await req.payload.update({\n id,\n collection: input.doc.relationTo,\n data: {\n _status,\n },\n depth: 0,\n overrideAccess: user === null,\n publishSpecificLocale: publishSpecificLocale!,\n user,\n })\n }\n\n if (input.global) {\n await req.payload.updateGlobal({\n slug: input.global,\n data: {\n _status,\n },\n depth: 0,\n overrideAccess: user === null,\n publishSpecificLocale: publishSpecificLocale!,\n user,\n })\n }\n\n return {\n output: {},\n }\n },\n inputSchema: [\n {\n name: 'type',\n type: 'radio',\n defaultValue: 'publish',\n options: ['publish', 'unpublish'],\n },\n {\n name: 'locale',\n type: 'text',\n },\n ...(collections.length > 0\n ? [\n {\n name: 'doc',\n type: 'relationship',\n relationTo: collections,\n } satisfies Field,\n ]\n : []),\n {\n name: 'global',\n type: 'select',\n options: globals,\n },\n {\n name: 'user',\n type: 'relationship',\n relationTo: authCollectionSlugs,\n },\n ],\n }\n}\n"],"names":["getSchedulePublishTask","authCollectionSlugs","collections","globals","slug","handler","input","req","_status","type","user","target","doc","relationTo","value","global","Error","payload","findByID","id","collection","depth","publishSpecificLocale","locale","config","localization","matchedLocale","locales","find","code","idType","customIDType","db","defaultIDType","Number","update","data","overrideAccess","updateGlobal","output","inputSchema","name","defaultValue","options","length"],"mappings":"AAWA,OAAO,MAAMA,yBAAyB,CAAC,EACrCC,mBAAmB,EACnBC,WAAW,EACXC,OAAO,EACF;IACL,OAAO;QACLC,MAAM;QACNC,SAAS,OAAO,EAAEC,KAAK,EAAEC,GAAG,EAAE;YAC5B,MAAMC,UAAUF,OAAOG,SAAS,aAAa,CAACH,OAAOG,OAAO,cAAc;YAE1E,IAAIC,OAAyB;YAE7B,IAAIJ,MAAMI,IAAI,IAAI,MAAM;gBACtB,IAAI,OAAOJ,MAAMI,IAAI,KAAK,UAAU;oBAClC,sGAAsG;oBACtG,MAAMC,SAASL,MAAMM,GAAG,GACpB,CAAC,SAAS,EAAEN,MAAMM,GAAG,CAACC,UAAU,CAAC,kBAAkB,EAAEP,MAAMM,GAAG,CAACE,KAAK,EAAE,GACtER,MAAMS,MAAM,GACV,CAAC,SAAS,EAAET,MAAMS,MAAM,CAAC,OAAO,CAAC,GACjC;oBAEN,MAAM,IAAIC,MACR,CAAC,iJAAiJ,EAAEL,OAAO,sBAAsB,CAAC;gBAEtL;gBAEAD,OAAQ,MAAMH,IAAIU,OAAO,CAACC,QAAQ,CAAC;oBACjCC,IAAIb,MAAMI,IAAI,CAACI,KAAK;oBACpBM,YAAYd,MAAMI,IAAI,CAACG,UAAU;oBACjCQ,OAAO;gBACT;gBAEAX,KAAKU,UAAU,GAAGd,MAAMI,IAAI,CAACG,UAAU;YACzC;YAEA,IAAIS;YAEJ,IAAIhB,OAAOG,SAAS,aAAaH,MAAMiB,MAAM,IAAIhB,IAAIU,OAAO,CAACO,MAAM,CAACC,YAAY,EAAE;gBAChF,MAAMC,gBAAgBnB,IAAIU,OAAO,CAACO,MAAM,CAACC,YAAY,CAACE,OAAO,CAACC,IAAI,CAChE,CAAC,EAAEC,IAAI,EAAE,GAAKA,SAASvB,MAAMiB,MAAM;gBAGrC,IAAIG,eAAe;oBACjBJ,wBAAwBhB,MAAMiB,MAAM;gBACtC;YACF;YAEA,IAAIjB,MAAMM,GAAG,EAAE;gBACb,gFAAgF;gBAChF,MAAMkB,SACJvB,IAAIU,OAAO,CAACf,WAAW,CAACI,MAAMM,GAAG,CAACC,UAAU,CAAC,EAAEkB,gBAC/CxB,IAAIU,OAAO,CAACe,EAAE,EAAEC,iBAChB;gBACF,MAAMd,KAAKW,WAAW,WAAWI,OAAO5B,MAAMM,GAAG,CAACE,KAAK,IAAIR,MAAMM,GAAG,CAACE,KAAK;gBAE1E,MAAMP,IAAIU,OAAO,CAACkB,MAAM,CAAC;oBACvBhB;oBACAC,YAAYd,MAAMM,GAAG,CAACC,UAAU;oBAChCuB,MAAM;wBACJ5B;oBACF;oBACAa,OAAO;oBACPgB,gBAAgB3B,SAAS;oBACzBY,uBAAuBA;oBACvBZ;gBACF;YACF;YAEA,IAAIJ,MAAMS,MAAM,EAAE;gBAChB,MAAMR,IAAIU,OAAO,CAACqB,YAAY,CAAC;oBAC7BlC,MAAME,MAAMS,MAAM;oBAClBqB,MAAM;wBACJ5B;oBACF;oBACAa,OAAO;oBACPgB,gBAAgB3B,SAAS;oBACzBY,uBAAuBA;oBACvBZ;gBACF;YACF;YAEA,OAAO;gBACL6B,QAAQ,CAAC;YACX;QACF;QACAC,aAAa;YACX;gBACEC,MAAM;gBACNhC,MAAM;gBACNiC,cAAc;gBACdC,SAAS;oBAAC;oBAAW;iBAAY;YACnC;YACA;gBACEF,MAAM;gBACNhC,MAAM;YACR;eACIP,YAAY0C,MAAM,GAAG,IACrB;gBACE;oBACEH,MAAM;oBACNhC,MAAM;oBACNI,YAAYX;gBACd;aACD,GACD,EAAE;YACN;gBACEuC,MAAM;gBACNhC,MAAM;gBACNkC,SAASxC;YACX;YACA;gBACEsC,MAAM;gBACNhC,MAAM;gBACNI,YAAYZ;YACd;SACD;IACH;AACF,EAAC"}
@@ -1,4 +1,8 @@
1
1
  import type { CollectionSlug, GlobalSlug } from '../../index.js';
2
+ export type SchedulePublishTaskUser = {
3
+ relationTo: CollectionSlug;
4
+ value: number | string;
5
+ } | number | string;
2
6
  export type SchedulePublishTaskInput = {
3
7
  doc?: {
4
8
  relationTo: CollectionSlug;
@@ -7,6 +11,6 @@ export type SchedulePublishTaskInput = {
7
11
  global?: GlobalSlug;
8
12
  locale?: string;
9
13
  type?: string;
10
- user?: number | string;
14
+ user?: SchedulePublishTaskUser;
11
15
  };
12
16
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/versions/schedule/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEhE,MAAM,MAAM,wBAAwB,GAAG;IACrC,GAAG,CAAC,EAAE;QACJ,UAAU,EAAE,cAAc,CAAA;QAC1B,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACvB,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/versions/schedule/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEhE,MAAM,MAAM,uBAAuB,GAC/B;IACE,UAAU,EAAE,cAAc,CAAA;IAC1B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CACvB,GACD,MAAM,GACN,MAAM,CAAA;AAEV,MAAM,MAAM,wBAAwB,GAAG;IACrC,GAAG,CAAC,EAAE;QACJ,UAAU,EAAE,cAAc,CAAA;QAC1B,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,uBAAuB,CAAA;CAC/B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/versions/schedule/types.ts"],"sourcesContent":["import type { CollectionSlug, GlobalSlug } from '../../index.js'\n\nexport type SchedulePublishTaskInput = {\n doc?: {\n relationTo: CollectionSlug\n value: string\n }\n global?: GlobalSlug\n locale?: string\n type?: string\n user?: number | string\n}\n"],"names":[],"mappings":"AAEA,WASC"}
1
+ {"version":3,"sources":["../../../src/versions/schedule/types.ts"],"sourcesContent":["import type { CollectionSlug, GlobalSlug } from '../../index.js'\n\nexport type SchedulePublishTaskUser =\n | {\n relationTo: CollectionSlug\n value: number | string\n }\n | number\n | string\n\nexport type SchedulePublishTaskInput = {\n doc?: {\n relationTo: CollectionSlug\n value: string\n }\n global?: GlobalSlug\n locale?: string\n type?: string\n user?: SchedulePublishTaskUser\n}\n"],"names":[],"mappings":"AAUA,WASC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload",
3
- "version": "3.89.0",
3
+ "version": "3.90.1",
4
4
  "description": "Node, React, Headless CMS and Application Framework built on Next.js",
5
5
  "keywords": [
6
6
  "admin panel",
@@ -110,12 +110,13 @@
110
110
  "qs-esm": "8.0.1",
111
111
  "range-parser": "1.2.1",
112
112
  "sanitize-filename": "1.6.3",
113
+ "sax": "1.6.1",
113
114
  "ts-essentials": "10.0.3",
114
115
  "tsx": "4.22.4",
115
116
  "undici": "7.29.0",
116
117
  "uuid": "13.0.2",
117
118
  "ws": "^8.16.0",
118
- "@payloadcms/translations": "3.89.0"
119
+ "@payloadcms/translations": "3.90.1"
119
120
  },
120
121
  "devDependencies": {
121
122
  "@hyrious/esbuild-plugin-commonjs": "0.2.6",
@@ -125,6 +126,7 @@
125
126
  "@types/nodemailer": "^8.0.0",
126
127
  "@types/pluralize": "0.0.33",
127
128
  "@types/range-parser": "1.2.7",
129
+ "@types/sax": "1.2.7",
128
130
  "@types/ws": "^8.5.10",
129
131
  "copyfiles": "2.4.1",
130
132
  "cross-env": "7.0.3",
@@ -1,3 +0,0 @@
1
- import type { Field } from '../../fields/config/types.js';
2
- export declare const apiKeyFields: Field[];
3
- //# sourceMappingURL=apiKey.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apiKey.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/apiKey.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,8BAA8B,CAAA;AAOpE,eAAO,MAAM,YAAY,EAoDpB,KAAK,EAAE,CAAA"}
@@ -1,59 +0,0 @@
1
- import crypto from 'crypto';
2
- const encryptKey = ({ req, value })=>value ? req.payload.encrypt(value) : null;
3
- const decryptKey = ({ req, value })=>value ? req.payload.decrypt(value) : undefined;
4
- export const apiKeyFields = [
5
- {
6
- name: 'enableAPIKey',
7
- type: 'checkbox',
8
- admin: {
9
- components: {
10
- Field: false
11
- }
12
- },
13
- label: ({ t })=>t('authentication:enableAPIKey')
14
- },
15
- {
16
- name: 'apiKey',
17
- type: 'text',
18
- admin: {
19
- components: {
20
- Field: false
21
- }
22
- },
23
- hooks: {
24
- afterRead: [
25
- decryptKey
26
- ],
27
- beforeChange: [
28
- encryptKey
29
- ]
30
- },
31
- label: ({ t })=>t('authentication:apiKey')
32
- },
33
- {
34
- name: 'apiKeyIndex',
35
- type: 'text',
36
- admin: {
37
- disabled: true
38
- },
39
- hidden: true,
40
- hooks: {
41
- beforeValidate: [
42
- ({ data, req, value })=>{
43
- if (data?.apiKey === false || data?.apiKey === null) {
44
- return null;
45
- }
46
- if (data?.enableAPIKey === false || data?.enableAPIKey === null) {
47
- return null;
48
- }
49
- if (data?.apiKey) {
50
- return crypto.createHmac('sha256', req.payload.secret).update(data.apiKey).digest('hex');
51
- }
52
- return value;
53
- }
54
- ]
55
- }
56
- }
57
- ];
58
-
59
- //# sourceMappingURL=apiKey.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/auth/baseFields/apiKey.ts"],"sourcesContent":["import crypto from 'crypto'\n\nimport type { Field, FieldHook } from '../../fields/config/types.js'\n\nconst encryptKey: FieldHook = ({ req, value }) =>\n value ? req.payload.encrypt(value as string) : null\nconst decryptKey: FieldHook = ({ req, value }) =>\n value ? req.payload.decrypt(value as string) : undefined\n\nexport const apiKeyFields = [\n {\n name: 'enableAPIKey',\n type: 'checkbox',\n admin: {\n components: {\n Field: false,\n },\n },\n label: ({ t }) => t('authentication:enableAPIKey'),\n },\n {\n name: 'apiKey',\n type: 'text',\n admin: {\n components: {\n Field: false,\n },\n },\n hooks: {\n afterRead: [decryptKey],\n beforeChange: [encryptKey],\n },\n label: ({ t }) => t('authentication:apiKey'),\n },\n {\n name: 'apiKeyIndex',\n type: 'text',\n admin: {\n disabled: true,\n },\n hidden: true,\n hooks: {\n beforeValidate: [\n ({ data, req, value }) => {\n if (data?.apiKey === false || data?.apiKey === null) {\n return null\n }\n if (data?.enableAPIKey === false || data?.enableAPIKey === null) {\n return null\n }\n if (data?.apiKey) {\n return crypto\n .createHmac('sha256', req.payload.secret)\n .update(data.apiKey as string)\n .digest('hex')\n }\n return value\n },\n ],\n },\n },\n] as Field[]\n"],"names":["crypto","encryptKey","req","value","payload","encrypt","decryptKey","decrypt","undefined","apiKeyFields","name","type","admin","components","Field","label","t","hooks","afterRead","beforeChange","disabled","hidden","beforeValidate","data","apiKey","enableAPIKey","createHmac","secret","update","digest"],"mappings":"AAAA,OAAOA,YAAY,SAAQ;AAI3B,MAAMC,aAAwB,CAAC,EAAEC,GAAG,EAAEC,KAAK,EAAE,GAC3CA,QAAQD,IAAIE,OAAO,CAACC,OAAO,CAACF,SAAmB;AACjD,MAAMG,aAAwB,CAAC,EAAEJ,GAAG,EAAEC,KAAK,EAAE,GAC3CA,QAAQD,IAAIE,OAAO,CAACG,OAAO,CAACJ,SAAmBK;AAEjD,OAAO,MAAMC,eAAe;IAC1B;QACEC,MAAM;QACNC,MAAM;QACNC,OAAO;YACLC,YAAY;gBACVC,OAAO;YACT;QACF;QACAC,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;IACtB;IACA;QACEN,MAAM;QACNC,MAAM;QACNC,OAAO;YACLC,YAAY;gBACVC,OAAO;YACT;QACF;QACAG,OAAO;YACLC,WAAW;gBAACZ;aAAW;YACvBa,cAAc;gBAAClB;aAAW;QAC5B;QACAc,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;IACtB;IACA;QACEN,MAAM;QACNC,MAAM;QACNC,OAAO;YACLQ,UAAU;QACZ;QACAC,QAAQ;QACRJ,OAAO;YACLK,gBAAgB;gBACd,CAAC,EAAEC,IAAI,EAAErB,GAAG,EAAEC,KAAK,EAAE;oBACnB,IAAIoB,MAAMC,WAAW,SAASD,MAAMC,WAAW,MAAM;wBACnD,OAAO;oBACT;oBACA,IAAID,MAAME,iBAAiB,SAASF,MAAME,iBAAiB,MAAM;wBAC/D,OAAO;oBACT;oBACA,IAAIF,MAAMC,QAAQ;wBAChB,OAAOxB,OACJ0B,UAAU,CAAC,UAAUxB,IAAIE,OAAO,CAACuB,MAAM,EACvCC,MAAM,CAACL,KAAKC,MAAM,EAClBK,MAAM,CAAC;oBACZ;oBACA,OAAO1B;gBACT;aACD;QACH;IACF;CACD,CAAW"}