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
@@ -1,3 +1,4 @@
1
1
  import type { Field } from '../../fields/config/types.js';
2
2
  export declare const baseAuthFields: Field[];
3
+ export declare const resetPasswordRequestedAtField: Field;
3
4
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAEzD,eAAO,MAAM,cAAc,EAAE,KAAK,EAqCjC,CAAA"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAEzD,eAAO,MAAM,cAAc,EAAE,KAAK,EAqCjC,CAAA;AAED,eAAO,MAAM,6BAA6B,EAAE,KAQ3C,CAAA"}
@@ -36,5 +36,14 @@ export const baseAuthFields = [
36
36
  hidden: true
37
37
  }
38
38
  ];
39
+ export const resetPasswordRequestedAtField = {
40
+ name: 'resetPasswordRequestedAt',
41
+ type: 'date',
42
+ access: {
43
+ create: ()=>false,
44
+ update: ()=>false
45
+ },
46
+ hidden: true
47
+ };
39
48
 
40
49
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/baseFields/auth.ts"],"sourcesContent":["import type { Field } from '../../fields/config/types.js'\n\nexport const baseAuthFields: Field[] = [\n {\n name: 'resetPasswordToken',\n type: 'text',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n {\n name: 'resetPasswordExpiration',\n type: 'date',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n {\n name: 'salt',\n type: 'text',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n {\n name: 'hash',\n type: 'text',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n]\n"],"names":["baseAuthFields","name","type","access","create","update","hidden"],"mappings":"AAEA,OAAO,MAAMA,iBAA0B;IACrC;QACEC,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,QAAQ;IACV;IACA;QACEL,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,QAAQ;IACV;IACA;QACEL,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,QAAQ;IACV;IACA;QACEL,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,QAAQ;IACV;CACD,CAAA"}
1
+ {"version":3,"sources":["../../../src/auth/baseFields/auth.ts"],"sourcesContent":["import type { Field } from '../../fields/config/types.js'\n\nexport const baseAuthFields: Field[] = [\n {\n name: 'resetPasswordToken',\n type: 'text',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n {\n name: 'resetPasswordExpiration',\n type: 'date',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n {\n name: 'salt',\n type: 'text',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n {\n name: 'hash',\n type: 'text',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n },\n]\n\nexport const resetPasswordRequestedAtField: Field = {\n name: 'resetPasswordRequestedAt',\n type: 'date',\n access: {\n create: () => false,\n update: () => false,\n },\n hidden: true,\n}\n"],"names":["baseAuthFields","name","type","access","create","update","hidden","resetPasswordRequestedAtField"],"mappings":"AAEA,OAAO,MAAMA,iBAA0B;IACrC;QACEC,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,QAAQ;IACV;IACA;QACEL,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,QAAQ;IACV;IACA;QACEL,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,QAAQ;IACV;IACA;QACEL,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,IAAM;YACdC,QAAQ,IAAM;QAChB;QACAC,QAAQ;IACV;CACD,CAAA;AAED,OAAO,MAAMC,gCAAuC;IAClDN,MAAM;IACNC,MAAM;IACNC,QAAQ;QACNC,QAAQ,IAAM;QACdC,QAAQ,IAAM;IAChB;IACAC,QAAQ;AACV,EAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Access } from '../config/types.js';
2
+ export declare const defaultUnlockAccess: Access;
3
+ //# sourceMappingURL=defaultUnlockAccess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultUnlockAccess.d.ts","sourceRoot":"","sources":["../../src/auth/defaultUnlockAccess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,eAAO,MAAM,mBAAmB,EAAE,MAMjC,CAAA"}
@@ -0,0 +1,8 @@
1
+ export const defaultUnlockAccess = ({ req: { payload, user } })=>{
2
+ if (!user) {
3
+ return false;
4
+ }
5
+ return user.collection === payload.config.admin.user;
6
+ };
7
+
8
+ //# sourceMappingURL=defaultUnlockAccess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/auth/defaultUnlockAccess.ts"],"sourcesContent":["import type { Access } from '../config/types.js'\n\nexport const defaultUnlockAccess: Access = ({ req: { payload, user } }) => {\n if (!user) {\n return false\n }\n\n return user.collection === payload.config.admin.user\n}\n"],"names":["defaultUnlockAccess","req","payload","user","collection","config","admin"],"mappings":"AAEA,OAAO,MAAMA,sBAA8B,CAAC,EAAEC,KAAK,EAAEC,OAAO,EAAEC,IAAI,EAAE,EAAE;IACpE,IAAI,CAACA,MAAM;QACT,OAAO;IACT;IAEA,OAAOA,KAAKC,UAAU,KAAKF,QAAQG,MAAM,CAACC,KAAK,CAACH,IAAI;AACtD,EAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { Endpoint } from '../../config/types.js';
2
2
  export declare const authRootEndpoints: Endpoint[];
3
+ export declare const apiKeyRevealEndpoint: Endpoint;
3
4
  export declare const authCollectionEndpoints: Endpoint[];
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/endpoints/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAerD,eAAO,MAAM,iBAAiB,EAAE,QAAQ,EAMtC,CAAA;AAEF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,EAmD5C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/endpoints/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAgBrD,eAAO,MAAM,iBAAiB,EAAE,QAAQ,EAMtC,CAAA;AAEF,eAAO,MAAM,oBAAoB,EAAE,QAM7B,CAAA;AAEN,eAAO,MAAM,uBAAuB,EAAE,QAAQ,EAmD5C,CAAA"}
@@ -8,6 +8,7 @@ import { meHandler } from './me.js';
8
8
  import { refreshHandler } from './refresh.js';
9
9
  import { registerFirstUserHandler } from './registerFirstUser.js';
10
10
  import { resetPasswordHandler } from './resetPassword.js';
11
+ import { revealAPIKeyHandler } from './revealAPIKey.js';
11
12
  import { unlockHandler } from './unlock.js';
12
13
  import { verifyEmailHandler } from './verifyEmail.js';
13
14
  export const authRootEndpoints = wrapInternalEndpoints([
@@ -17,6 +18,13 @@ export const authRootEndpoints = wrapInternalEndpoints([
17
18
  path: '/access'
18
19
  }
19
20
  ]);
21
+ export const apiKeyRevealEndpoint = wrapInternalEndpoints([
22
+ {
23
+ handler: revealAPIKeyHandler,
24
+ method: 'post',
25
+ path: '/:id/api-key/reveal'
26
+ }
27
+ ])[0];
20
28
  export const authCollectionEndpoints = wrapInternalEndpoints([
21
29
  {
22
30
  handler: forgotPasswordHandler,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/endpoints/index.ts"],"sourcesContent":["import type { Endpoint } from '../../config/types.js'\n\nimport { wrapInternalEndpoints } from '../../utilities/wrapInternalEndpoints.js'\nimport { accessHandler } from './access.js'\nimport { forgotPasswordHandler } from './forgotPassword.js'\nimport { initHandler } from './init.js'\nimport { loginHandler } from './login.js'\nimport { logoutHandler } from './logout.js'\nimport { meHandler } from './me.js'\nimport { refreshHandler } from './refresh.js'\nimport { registerFirstUserHandler } from './registerFirstUser.js'\nimport { resetPasswordHandler } from './resetPassword.js'\nimport { unlockHandler } from './unlock.js'\nimport { verifyEmailHandler } from './verifyEmail.js'\n\nexport const authRootEndpoints: Endpoint[] = wrapInternalEndpoints([\n {\n handler: accessHandler,\n method: 'get',\n path: '/access',\n },\n])\n\nexport const authCollectionEndpoints: Endpoint[] = wrapInternalEndpoints([\n {\n handler: forgotPasswordHandler,\n method: 'post',\n path: '/forgot-password',\n },\n {\n handler: initHandler,\n method: 'get',\n path: '/init',\n },\n {\n handler: loginHandler,\n method: 'post',\n path: '/login',\n },\n {\n handler: logoutHandler,\n method: 'post',\n path: '/logout',\n },\n {\n handler: meHandler,\n method: 'get',\n path: '/me',\n },\n {\n handler: refreshHandler,\n method: 'post',\n path: '/refresh-token',\n },\n {\n handler: registerFirstUserHandler,\n method: 'post',\n path: '/first-register',\n },\n {\n handler: resetPasswordHandler,\n method: 'post',\n path: '/reset-password',\n },\n {\n handler: unlockHandler,\n method: 'post',\n path: '/unlock',\n },\n {\n handler: verifyEmailHandler,\n method: 'post',\n path: '/verify/:id',\n },\n])\n"],"names":["wrapInternalEndpoints","accessHandler","forgotPasswordHandler","initHandler","loginHandler","logoutHandler","meHandler","refreshHandler","registerFirstUserHandler","resetPasswordHandler","unlockHandler","verifyEmailHandler","authRootEndpoints","handler","method","path","authCollectionEndpoints"],"mappings":"AAEA,SAASA,qBAAqB,QAAQ,2CAA0C;AAChF,SAASC,aAAa,QAAQ,cAAa;AAC3C,SAASC,qBAAqB,QAAQ,sBAAqB;AAC3D,SAASC,WAAW,QAAQ,YAAW;AACvC,SAASC,YAAY,QAAQ,aAAY;AACzC,SAASC,aAAa,QAAQ,cAAa;AAC3C,SAASC,SAAS,QAAQ,UAAS;AACnC,SAASC,cAAc,QAAQ,eAAc;AAC7C,SAASC,wBAAwB,QAAQ,yBAAwB;AACjE,SAASC,oBAAoB,QAAQ,qBAAoB;AACzD,SAASC,aAAa,QAAQ,cAAa;AAC3C,SAASC,kBAAkB,QAAQ,mBAAkB;AAErD,OAAO,MAAMC,oBAAgCZ,sBAAsB;IACjE;QACEa,SAASZ;QACTa,QAAQ;QACRC,MAAM;IACR;CACD,EAAC;AAEF,OAAO,MAAMC,0BAAsChB,sBAAsB;IACvE;QACEa,SAASX;QACTY,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASV;QACTW,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAAST;QACTU,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASR;QACTS,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASP;QACTQ,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASN;QACTO,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASL;QACTM,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASJ;QACTK,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASH;QACTI,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASF;QACTG,QAAQ;QACRC,MAAM;IACR;CACD,EAAC"}
1
+ {"version":3,"sources":["../../../src/auth/endpoints/index.ts"],"sourcesContent":["import type { Endpoint } from '../../config/types.js'\n\nimport { wrapInternalEndpoints } from '../../utilities/wrapInternalEndpoints.js'\nimport { accessHandler } from './access.js'\nimport { forgotPasswordHandler } from './forgotPassword.js'\nimport { initHandler } from './init.js'\nimport { loginHandler } from './login.js'\nimport { logoutHandler } from './logout.js'\nimport { meHandler } from './me.js'\nimport { refreshHandler } from './refresh.js'\nimport { registerFirstUserHandler } from './registerFirstUser.js'\nimport { resetPasswordHandler } from './resetPassword.js'\nimport { revealAPIKeyHandler } from './revealAPIKey.js'\nimport { unlockHandler } from './unlock.js'\nimport { verifyEmailHandler } from './verifyEmail.js'\n\nexport const authRootEndpoints: Endpoint[] = wrapInternalEndpoints([\n {\n handler: accessHandler,\n method: 'get',\n path: '/access',\n },\n])\n\nexport const apiKeyRevealEndpoint: Endpoint = wrapInternalEndpoints([\n {\n handler: revealAPIKeyHandler,\n method: 'post',\n path: '/:id/api-key/reveal',\n },\n])[0]!\n\nexport const authCollectionEndpoints: Endpoint[] = wrapInternalEndpoints([\n {\n handler: forgotPasswordHandler,\n method: 'post',\n path: '/forgot-password',\n },\n {\n handler: initHandler,\n method: 'get',\n path: '/init',\n },\n {\n handler: loginHandler,\n method: 'post',\n path: '/login',\n },\n {\n handler: logoutHandler,\n method: 'post',\n path: '/logout',\n },\n {\n handler: meHandler,\n method: 'get',\n path: '/me',\n },\n {\n handler: refreshHandler,\n method: 'post',\n path: '/refresh-token',\n },\n {\n handler: registerFirstUserHandler,\n method: 'post',\n path: '/first-register',\n },\n {\n handler: resetPasswordHandler,\n method: 'post',\n path: '/reset-password',\n },\n {\n handler: unlockHandler,\n method: 'post',\n path: '/unlock',\n },\n {\n handler: verifyEmailHandler,\n method: 'post',\n path: '/verify/:id',\n },\n])\n"],"names":["wrapInternalEndpoints","accessHandler","forgotPasswordHandler","initHandler","loginHandler","logoutHandler","meHandler","refreshHandler","registerFirstUserHandler","resetPasswordHandler","revealAPIKeyHandler","unlockHandler","verifyEmailHandler","authRootEndpoints","handler","method","path","apiKeyRevealEndpoint","authCollectionEndpoints"],"mappings":"AAEA,SAASA,qBAAqB,QAAQ,2CAA0C;AAChF,SAASC,aAAa,QAAQ,cAAa;AAC3C,SAASC,qBAAqB,QAAQ,sBAAqB;AAC3D,SAASC,WAAW,QAAQ,YAAW;AACvC,SAASC,YAAY,QAAQ,aAAY;AACzC,SAASC,aAAa,QAAQ,cAAa;AAC3C,SAASC,SAAS,QAAQ,UAAS;AACnC,SAASC,cAAc,QAAQ,eAAc;AAC7C,SAASC,wBAAwB,QAAQ,yBAAwB;AACjE,SAASC,oBAAoB,QAAQ,qBAAoB;AACzD,SAASC,mBAAmB,QAAQ,oBAAmB;AACvD,SAASC,aAAa,QAAQ,cAAa;AAC3C,SAASC,kBAAkB,QAAQ,mBAAkB;AAErD,OAAO,MAAMC,oBAAgCb,sBAAsB;IACjE;QACEc,SAASb;QACTc,QAAQ;QACRC,MAAM;IACR;CACD,EAAC;AAEF,OAAO,MAAMC,uBAAiCjB,sBAAsB;IAClE;QACEc,SAASJ;QACTK,QAAQ;QACRC,MAAM;IACR;CACD,CAAC,CAAC,EAAE,CAAC;AAEN,OAAO,MAAME,0BAAsClB,sBAAsB;IACvE;QACEc,SAASZ;QACTa,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASX;QACTY,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASV;QACTW,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAAST;QACTU,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASR;QACTS,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASP;QACTQ,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASN;QACTO,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASL;QACTM,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASH;QACTI,QAAQ;QACRC,MAAM;IACR;IACA;QACEF,SAASF;QACTG,QAAQ;QACRC,MAAM;IACR;CACD,EAAC"}
@@ -0,0 +1,7 @@
1
+ import type { PayloadHandler } from '../../config/types.js';
2
+ /**
3
+ * Reveals an encrypted API key when the collection explicitly enables reveal support.
4
+ * This endpoint is only injected when `auth.useAPIKey.reveal` is `true`.
5
+ */
6
+ export declare const revealAPIKeyHandler: PayloadHandler;
7
+ //# sourceMappingURL=revealAPIKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revealAPIKey.d.ts","sourceRoot":"","sources":["../../../src/auth/endpoints/revealAPIKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAS3D;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,cAkFjC,CAAA"}
@@ -0,0 +1,120 @@
1
+ import { combineQueries } from '../../database/combineQueries.js';
2
+ import { UnauthorizedError } from '../../errors/UnauthorizedError.js';
3
+ import { fieldAffectsData } from '../../fields/config/types.js';
4
+ import { canAccessAdmin } from '../../utilities/canAccessAdmin.js';
5
+ import { getRequestCollectionWithID } from '../../utilities/getRequestEntity.js';
6
+ import { executeAccess } from '../executeAccess.js';
7
+ /**
8
+ * Reveals an encrypted API key when the collection explicitly enables reveal support.
9
+ * This endpoint is only injected when `auth.useAPIKey.reveal` is `true`.
10
+ */ export const revealAPIKeyHandler = async (req)=>{
11
+ const { id, collection } = getRequestCollectionWithID(req);
12
+ const useAPIKey = collection.config.auth.useAPIKey;
13
+ if (typeof useAPIKey !== 'object' || useAPIKey.reveal !== true || !req.user) {
14
+ return Response.json({
15
+ error: 'Forbidden'
16
+ }, {
17
+ status: 403
18
+ });
19
+ }
20
+ try {
21
+ await canAccessAdmin({
22
+ req
23
+ });
24
+ } catch (error) {
25
+ if (error instanceof UnauthorizedError) {
26
+ return Response.json({
27
+ error: 'Forbidden'
28
+ }, {
29
+ status: 403
30
+ });
31
+ }
32
+ throw error;
33
+ }
34
+ const userWithReadAccess = await req.payload.findByID({
35
+ id,
36
+ collection: collection.config.slug,
37
+ depth: 0,
38
+ disableErrors: true,
39
+ overrideAccess: false,
40
+ req
41
+ });
42
+ if (!userWithReadAccess) {
43
+ return Response.json({
44
+ error: 'Not found'
45
+ }, {
46
+ status: 404
47
+ });
48
+ }
49
+ // Reveal is treated as a no-op update, so `data` reflects the current document.
50
+ const updateAccess = await executeAccess({
51
+ id,
52
+ data: userWithReadAccess,
53
+ disableErrors: true,
54
+ req
55
+ }, collection.config.access.update);
56
+ if (!updateAccess) {
57
+ return Response.json({
58
+ error: 'Forbidden'
59
+ }, {
60
+ status: 403
61
+ });
62
+ }
63
+ const user = await req.payload.db.findOne({
64
+ collection: collection.config.slug,
65
+ req,
66
+ select: {
67
+ apiKey: true
68
+ },
69
+ where: combineQueries({
70
+ id: {
71
+ equals: id
72
+ }
73
+ }, updateAccess)
74
+ });
75
+ if (!user) {
76
+ return Response.json({
77
+ error: 'Forbidden'
78
+ }, {
79
+ status: 403
80
+ });
81
+ }
82
+ const apiKeyField = collection.config.fields.find((field)=>fieldAffectsData(field) && field.name === 'apiKey');
83
+ if (!apiKeyField || !fieldAffectsData(apiKeyField) || !apiKeyField.access?.update) {
84
+ return Response.json({
85
+ error: 'Forbidden'
86
+ }, {
87
+ status: 403
88
+ });
89
+ }
90
+ const canUpdateAPIKey = await apiKeyField.access.update({
91
+ id,
92
+ data: {},
93
+ doc: userWithReadAccess,
94
+ req,
95
+ siblingData: {}
96
+ });
97
+ if (!canUpdateAPIKey) {
98
+ return Response.json({
99
+ error: 'Forbidden'
100
+ }, {
101
+ status: 403
102
+ });
103
+ }
104
+ if (!('apiKey' in user) || typeof user.apiKey !== 'string') {
105
+ return Response.json({
106
+ error: 'Not found'
107
+ }, {
108
+ status: 404
109
+ });
110
+ }
111
+ return Response.json({
112
+ apiKey: req.payload.decrypt(user.apiKey)
113
+ }, {
114
+ headers: {
115
+ 'Cache-Control': 'no-store'
116
+ }
117
+ });
118
+ };
119
+
120
+ //# sourceMappingURL=revealAPIKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/auth/endpoints/revealAPIKey.ts"],"sourcesContent":["import type { PayloadHandler } from '../../config/types.js'\n\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { UnauthorizedError } from '../../errors/UnauthorizedError.js'\nimport { fieldAffectsData } from '../../fields/config/types.js'\nimport { canAccessAdmin } from '../../utilities/canAccessAdmin.js'\nimport { getRequestCollectionWithID } from '../../utilities/getRequestEntity.js'\nimport { executeAccess } from '../executeAccess.js'\n\n/**\n * Reveals an encrypted API key when the collection explicitly enables reveal support.\n * This endpoint is only injected when `auth.useAPIKey.reveal` is `true`.\n */\nexport const revealAPIKeyHandler: PayloadHandler = async (req) => {\n const { id, collection } = getRequestCollectionWithID(req)\n const useAPIKey = collection.config.auth.useAPIKey\n\n if (typeof useAPIKey !== 'object' || useAPIKey.reveal !== true || !req.user) {\n return Response.json({ error: 'Forbidden' }, { status: 403 })\n }\n\n try {\n await canAccessAdmin({ req })\n } catch (error) {\n if (error instanceof UnauthorizedError) {\n return Response.json({ error: 'Forbidden' }, { status: 403 })\n }\n\n throw error\n }\n\n const userWithReadAccess = await req.payload.findByID({\n id,\n collection: collection.config.slug,\n depth: 0,\n disableErrors: true,\n overrideAccess: false,\n req,\n })\n\n if (!userWithReadAccess) {\n return Response.json({ error: 'Not found' }, { status: 404 })\n }\n\n // Reveal is treated as a no-op update, so `data` reflects the current document.\n const updateAccess = await executeAccess(\n { id, data: userWithReadAccess, disableErrors: true, req },\n collection.config.access.update,\n )\n\n if (!updateAccess) {\n return Response.json({ error: 'Forbidden' }, { status: 403 })\n }\n\n const user = await req.payload.db.findOne({\n collection: collection.config.slug,\n req,\n select: {\n apiKey: true,\n },\n where: combineQueries({ id: { equals: id } }, updateAccess),\n })\n\n if (!user) {\n return Response.json({ error: 'Forbidden' }, { status: 403 })\n }\n\n const apiKeyField = collection.config.fields.find(\n (field) => fieldAffectsData(field) && field.name === 'apiKey',\n )\n\n if (!apiKeyField || !fieldAffectsData(apiKeyField) || !apiKeyField.access?.update) {\n return Response.json({ error: 'Forbidden' }, { status: 403 })\n }\n\n const canUpdateAPIKey = await apiKeyField.access.update({\n id,\n data: {},\n doc: userWithReadAccess,\n req,\n siblingData: {},\n })\n\n if (!canUpdateAPIKey) {\n return Response.json({ error: 'Forbidden' }, { status: 403 })\n }\n\n if (!('apiKey' in user) || typeof user.apiKey !== 'string') {\n return Response.json({ error: 'Not found' }, { status: 404 })\n }\n\n return Response.json(\n { apiKey: req.payload.decrypt(user.apiKey) },\n { headers: { 'Cache-Control': 'no-store' } },\n )\n}\n"],"names":["combineQueries","UnauthorizedError","fieldAffectsData","canAccessAdmin","getRequestCollectionWithID","executeAccess","revealAPIKeyHandler","req","id","collection","useAPIKey","config","auth","reveal","user","Response","json","error","status","userWithReadAccess","payload","findByID","slug","depth","disableErrors","overrideAccess","updateAccess","data","access","update","db","findOne","select","apiKey","where","equals","apiKeyField","fields","find","field","name","canUpdateAPIKey","doc","siblingData","decrypt","headers"],"mappings":"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"}
@@ -1,12 +1,14 @@
1
+ import type { SanitizedCollectionConfig } from '../collections/config/types.js';
1
2
  import type { Access, AccessResult } from '../config/types.js';
2
3
  import type { PayloadRequest } from '../types/index.js';
3
4
  type OperationArgs = {
5
+ collectionConfig?: SanitizedCollectionConfig;
4
6
  data?: any;
5
7
  disableErrors?: boolean;
6
8
  id?: number | string;
7
9
  isReadingStaticFile?: boolean;
8
10
  req: PayloadRequest;
9
11
  };
10
- export declare const executeAccess: ({ id, data, disableErrors, isReadingStaticFile, req }: OperationArgs, access: Access) => Promise<AccessResult>;
12
+ export declare const executeAccess: ({ id, collectionConfig, data, disableErrors, isReadingStaticFile, req }: OperationArgs, access: Access) => Promise<AccessResult>;
11
13
  export {};
12
14
  //# sourceMappingURL=executeAccess.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"executeAccess.d.ts","sourceRoot":"","sources":["../../src/auth/executeAccess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAIvD,KAAK,aAAa,GAAG;IACnB,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AACD,eAAO,MAAM,aAAa,0DACuC,aAAa,UACpE,MAAM,KACb,OAAO,CAAC,YAAY,CA0BtB,CAAA"}
1
+ {"version":3,"file":"executeAccess.d.ts","sourceRoot":"","sources":["../../src/auth/executeAccess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAIvD,KAAK,aAAa,GAAG;IACnB,gBAAgB,CAAC,EAAE,yBAAyB,CAAA;IAC5C,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AACD,eAAO,MAAM,aAAa,4EACyD,aAAa,UACtF,MAAM,KACb,OAAO,CAAC,YAAY,CA2BtB,CAAA"}
@@ -1,8 +1,9 @@
1
1
  import { Forbidden } from '../errors/index.js';
2
- export const executeAccess = async ({ id, data, disableErrors, isReadingStaticFile = false, req }, access)=>{
2
+ export const executeAccess = async ({ id, collectionConfig, data, disableErrors, isReadingStaticFile = false, req }, access)=>{
3
3
  if (access) {
4
4
  const resolvedConstraint = await access({
5
5
  id,
6
+ collectionConfig,
6
7
  data,
7
8
  isReadingStaticFile,
8
9
  req
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/auth/executeAccess.ts"],"sourcesContent":["import type { Access, AccessResult } from '../config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { Forbidden } from '../errors/index.js'\n\ntype OperationArgs = {\n data?: any\n disableErrors?: boolean\n id?: number | string\n isReadingStaticFile?: boolean\n req: PayloadRequest\n}\nexport const executeAccess = async (\n { id, data, disableErrors, isReadingStaticFile = false, req }: OperationArgs,\n access: Access,\n): Promise<AccessResult> => {\n if (access) {\n const resolvedConstraint = await access({\n id,\n data,\n isReadingStaticFile,\n req,\n })\n\n if (!resolvedConstraint) {\n if (!disableErrors) {\n throw new Forbidden(req.t)\n }\n }\n\n return resolvedConstraint\n }\n\n if (req.user) {\n return true\n }\n\n if (!disableErrors) {\n throw new Forbidden(req.t)\n }\n return false\n}\n"],"names":["Forbidden","executeAccess","id","data","disableErrors","isReadingStaticFile","req","access","resolvedConstraint","t","user"],"mappings":"AAGA,SAASA,SAAS,QAAQ,qBAAoB;AAS9C,OAAO,MAAMC,gBAAgB,OAC3B,EAAEC,EAAE,EAAEC,IAAI,EAAEC,aAAa,EAAEC,sBAAsB,KAAK,EAAEC,GAAG,EAAiB,EAC5EC;IAEA,IAAIA,QAAQ;QACV,MAAMC,qBAAqB,MAAMD,OAAO;YACtCL;YACAC;YACAE;YACAC;QACF;QAEA,IAAI,CAACE,oBAAoB;YACvB,IAAI,CAACJ,eAAe;gBAClB,MAAM,IAAIJ,UAAUM,IAAIG,CAAC;YAC3B;QACF;QAEA,OAAOD;IACT;IAEA,IAAIF,IAAII,IAAI,EAAE;QACZ,OAAO;IACT;IAEA,IAAI,CAACN,eAAe;QAClB,MAAM,IAAIJ,UAAUM,IAAIG,CAAC;IAC3B;IACA,OAAO;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/auth/executeAccess.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { Access, AccessResult } from '../config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { Forbidden } from '../errors/index.js'\n\ntype OperationArgs = {\n collectionConfig?: SanitizedCollectionConfig\n data?: any\n disableErrors?: boolean\n id?: number | string\n isReadingStaticFile?: boolean\n req: PayloadRequest\n}\nexport const executeAccess = async (\n { id, collectionConfig, data, disableErrors, isReadingStaticFile = false, req }: OperationArgs,\n access: Access,\n): Promise<AccessResult> => {\n if (access) {\n const resolvedConstraint = await access({\n id,\n collectionConfig,\n data,\n isReadingStaticFile,\n req,\n })\n\n if (!resolvedConstraint) {\n if (!disableErrors) {\n throw new Forbidden(req.t)\n }\n }\n\n return resolvedConstraint\n }\n\n if (req.user) {\n return true\n }\n\n if (!disableErrors) {\n throw new Forbidden(req.t)\n }\n return false\n}\n"],"names":["Forbidden","executeAccess","id","collectionConfig","data","disableErrors","isReadingStaticFile","req","access","resolvedConstraint","t","user"],"mappings":"AAIA,SAASA,SAAS,QAAQ,qBAAoB;AAU9C,OAAO,MAAMC,gBAAgB,OAC3B,EAAEC,EAAE,EAAEC,gBAAgB,EAAEC,IAAI,EAAEC,aAAa,EAAEC,sBAAsB,KAAK,EAAEC,GAAG,EAAiB,EAC9FC;IAEA,IAAIA,QAAQ;QACV,MAAMC,qBAAqB,MAAMD,OAAO;YACtCN;YACAC;YACAC;YACAE;YACAC;QACF;QAEA,IAAI,CAACE,oBAAoB;YACvB,IAAI,CAACJ,eAAe;gBAClB,MAAM,IAAIL,UAAUO,IAAIG,CAAC;YAC3B;QACF;QAEA,OAAOD;IACT;IAEA,IAAIF,IAAII,IAAI,EAAE;QACZ,OAAO;IACT;IAEA,IAAI,CAACN,eAAe;QAClB,MAAM,IAAIL,UAAUO,IAAIG,CAAC;IAC3B;IACA,OAAO;AACT,EAAC"}
@@ -1,4 +1,4 @@
1
1
  import type { Field } from '../fields/config/types.js';
2
2
  import type { IncomingAuthType } from './types.js';
3
- export declare const getBaseAuthFields: (authConfig: IncomingAuthType) => Field[];
3
+ export declare const getBaseAuthFields: (authConfig: IncomingAuthType, fields?: Field[]) => Field[];
4
4
  //# sourceMappingURL=getAuthFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getAuthFields.d.ts","sourceRoot":"","sources":["../../src/auth/getAuthFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAUlD,eAAO,MAAM,iBAAiB,eAAgB,gBAAgB,KAAG,KAAK,EAmDrE,CAAA"}
1
+ {"version":3,"file":"getAuthFields.d.ts","sourceRoot":"","sources":["../../src/auth/getAuthFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAUlD,eAAO,MAAM,iBAAiB,eAAgB,gBAAgB,WAAU,KAAK,EAAE,KAAQ,KAAK,EA0D3F,CAAA"}
@@ -1,14 +1,14 @@
1
1
  import { accountLockFields } from './baseFields/accountLock.js';
2
- import { apiKeyFields } from './baseFields/apiKey.js';
3
- import { baseAuthFields } from './baseFields/auth.js';
2
+ import { getAPIKeyFields } from './baseFields/apiKey/index.js';
3
+ import { baseAuthFields, resetPasswordRequestedAtField } from './baseFields/auth.js';
4
4
  import { emailFieldConfig } from './baseFields/email.js';
5
5
  import { sessionsFieldConfig } from './baseFields/sessions.js';
6
6
  import { usernameFieldConfig } from './baseFields/username.js';
7
7
  import { verificationFields } from './baseFields/verification.js';
8
- export const getBaseAuthFields = (authConfig)=>{
8
+ export const getBaseAuthFields = (authConfig, fields = [])=>{
9
9
  const authFields = [];
10
10
  if (authConfig.useAPIKey) {
11
- authFields.push(...apiKeyFields);
11
+ authFields.push(...getAPIKeyFields(fields));
12
12
  }
13
13
  if (!authConfig.disableLocalStrategy || typeof authConfig.disableLocalStrategy === 'object' && authConfig.disableLocalStrategy.enableFields) {
14
14
  const emailField = {
@@ -36,6 +36,9 @@ export const getBaseAuthFields = (authConfig)=>{
36
36
  authFields.push(usernameField);
37
37
  }
38
38
  authFields.push(...baseAuthFields);
39
+ if (authConfig.forgotPassword?.minRequestInterval && authConfig.forgotPassword.minRequestInterval > 0) {
40
+ authFields.push(resetPasswordRequestedAtField);
41
+ }
39
42
  if (authConfig.verify) {
40
43
  authFields.push(...verificationFields);
41
44
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/auth/getAuthFields.ts"],"sourcesContent":["import type { Field, TextField } from '../fields/config/types.js'\nimport type { IncomingAuthType } from './types.js'\n\nimport { accountLockFields } from './baseFields/accountLock.js'\nimport { apiKeyFields } from './baseFields/apiKey.js'\nimport { baseAuthFields } from './baseFields/auth.js'\nimport { emailFieldConfig } from './baseFields/email.js'\nimport { sessionsFieldConfig } from './baseFields/sessions.js'\nimport { usernameFieldConfig } from './baseFields/username.js'\nimport { verificationFields } from './baseFields/verification.js'\n\nexport const getBaseAuthFields = (authConfig: IncomingAuthType): Field[] => {\n const authFields: Field[] = []\n\n if (authConfig.useAPIKey) {\n authFields.push(...apiKeyFields)\n }\n\n if (\n !authConfig.disableLocalStrategy ||\n (typeof authConfig.disableLocalStrategy === 'object' &&\n authConfig.disableLocalStrategy.enableFields)\n ) {\n const emailField = { ...emailFieldConfig }\n let usernameField: TextField | undefined\n\n if (authConfig.loginWithUsername) {\n usernameField = { ...usernameFieldConfig }\n if (typeof authConfig.loginWithUsername === 'object') {\n if (authConfig.loginWithUsername.requireEmail === false) {\n emailField.required = false\n }\n if (authConfig.loginWithUsername.requireUsername === false) {\n usernameField.required = false\n }\n if (authConfig.loginWithUsername.allowEmailLogin === false) {\n emailField.unique = false\n }\n }\n }\n\n authFields.push(emailField)\n if (usernameField) {\n authFields.push(usernameField)\n }\n\n authFields.push(...baseAuthFields)\n\n if (authConfig.verify) {\n authFields.push(...verificationFields)\n }\n\n if (authConfig?.maxLoginAttempts && authConfig.maxLoginAttempts > 0) {\n authFields.push(...accountLockFields)\n }\n\n if (authConfig.useSessions) {\n authFields.push(sessionsFieldConfig)\n }\n }\n\n return authFields\n}\n"],"names":["accountLockFields","apiKeyFields","baseAuthFields","emailFieldConfig","sessionsFieldConfig","usernameFieldConfig","verificationFields","getBaseAuthFields","authConfig","authFields","useAPIKey","push","disableLocalStrategy","enableFields","emailField","usernameField","loginWithUsername","requireEmail","required","requireUsername","allowEmailLogin","unique","verify","maxLoginAttempts","useSessions"],"mappings":"AAGA,SAASA,iBAAiB,QAAQ,8BAA6B;AAC/D,SAASC,YAAY,QAAQ,yBAAwB;AACrD,SAASC,cAAc,QAAQ,uBAAsB;AACrD,SAASC,gBAAgB,QAAQ,wBAAuB;AACxD,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,kBAAkB,QAAQ,+BAA8B;AAEjE,OAAO,MAAMC,oBAAoB,CAACC;IAChC,MAAMC,aAAsB,EAAE;IAE9B,IAAID,WAAWE,SAAS,EAAE;QACxBD,WAAWE,IAAI,IAAIV;IACrB;IAEA,IACE,CAACO,WAAWI,oBAAoB,IAC/B,OAAOJ,WAAWI,oBAAoB,KAAK,YAC1CJ,WAAWI,oBAAoB,CAACC,YAAY,EAC9C;QACA,MAAMC,aAAa;YAAE,GAAGX,gBAAgB;QAAC;QACzC,IAAIY;QAEJ,IAAIP,WAAWQ,iBAAiB,EAAE;YAChCD,gBAAgB;gBAAE,GAAGV,mBAAmB;YAAC;YACzC,IAAI,OAAOG,WAAWQ,iBAAiB,KAAK,UAAU;gBACpD,IAAIR,WAAWQ,iBAAiB,CAACC,YAAY,KAAK,OAAO;oBACvDH,WAAWI,QAAQ,GAAG;gBACxB;gBACA,IAAIV,WAAWQ,iBAAiB,CAACG,eAAe,KAAK,OAAO;oBAC1DJ,cAAcG,QAAQ,GAAG;gBAC3B;gBACA,IAAIV,WAAWQ,iBAAiB,CAACI,eAAe,KAAK,OAAO;oBAC1DN,WAAWO,MAAM,GAAG;gBACtB;YACF;QACF;QAEAZ,WAAWE,IAAI,CAACG;QAChB,IAAIC,eAAe;YACjBN,WAAWE,IAAI,CAACI;QAClB;QAEAN,WAAWE,IAAI,IAAIT;QAEnB,IAAIM,WAAWc,MAAM,EAAE;YACrBb,WAAWE,IAAI,IAAIL;QACrB;QAEA,IAAIE,YAAYe,oBAAoBf,WAAWe,gBAAgB,GAAG,GAAG;YACnEd,WAAWE,IAAI,IAAIX;QACrB;QAEA,IAAIQ,WAAWgB,WAAW,EAAE;YAC1Bf,WAAWE,IAAI,CAACP;QAClB;IACF;IAEA,OAAOK;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/auth/getAuthFields.ts"],"sourcesContent":["import type { Field, TextField } from '../fields/config/types.js'\nimport type { IncomingAuthType } from './types.js'\n\nimport { accountLockFields } from './baseFields/accountLock.js'\nimport { getAPIKeyFields } from './baseFields/apiKey/index.js'\nimport { baseAuthFields, resetPasswordRequestedAtField } from './baseFields/auth.js'\nimport { emailFieldConfig } from './baseFields/email.js'\nimport { sessionsFieldConfig } from './baseFields/sessions.js'\nimport { usernameFieldConfig } from './baseFields/username.js'\nimport { verificationFields } from './baseFields/verification.js'\n\nexport const getBaseAuthFields = (authConfig: IncomingAuthType, fields: Field[] = []): Field[] => {\n const authFields: Field[] = []\n\n if (authConfig.useAPIKey) {\n authFields.push(...getAPIKeyFields(fields))\n }\n\n if (\n !authConfig.disableLocalStrategy ||\n (typeof authConfig.disableLocalStrategy === 'object' &&\n authConfig.disableLocalStrategy.enableFields)\n ) {\n const emailField = { ...emailFieldConfig }\n let usernameField: TextField | undefined\n\n if (authConfig.loginWithUsername) {\n usernameField = { ...usernameFieldConfig }\n if (typeof authConfig.loginWithUsername === 'object') {\n if (authConfig.loginWithUsername.requireEmail === false) {\n emailField.required = false\n }\n if (authConfig.loginWithUsername.requireUsername === false) {\n usernameField.required = false\n }\n if (authConfig.loginWithUsername.allowEmailLogin === false) {\n emailField.unique = false\n }\n }\n }\n\n authFields.push(emailField)\n if (usernameField) {\n authFields.push(usernameField)\n }\n\n authFields.push(...baseAuthFields)\n\n if (\n authConfig.forgotPassword?.minRequestInterval &&\n authConfig.forgotPassword.minRequestInterval > 0\n ) {\n authFields.push(resetPasswordRequestedAtField)\n }\n\n if (authConfig.verify) {\n authFields.push(...verificationFields)\n }\n\n if (authConfig?.maxLoginAttempts && authConfig.maxLoginAttempts > 0) {\n authFields.push(...accountLockFields)\n }\n\n if (authConfig.useSessions) {\n authFields.push(sessionsFieldConfig)\n }\n }\n\n return authFields\n}\n"],"names":["accountLockFields","getAPIKeyFields","baseAuthFields","resetPasswordRequestedAtField","emailFieldConfig","sessionsFieldConfig","usernameFieldConfig","verificationFields","getBaseAuthFields","authConfig","fields","authFields","useAPIKey","push","disableLocalStrategy","enableFields","emailField","usernameField","loginWithUsername","requireEmail","required","requireUsername","allowEmailLogin","unique","forgotPassword","minRequestInterval","verify","maxLoginAttempts","useSessions"],"mappings":"AAGA,SAASA,iBAAiB,QAAQ,8BAA6B;AAC/D,SAASC,eAAe,QAAQ,+BAA8B;AAC9D,SAASC,cAAc,EAAEC,6BAA6B,QAAQ,uBAAsB;AACpF,SAASC,gBAAgB,QAAQ,wBAAuB;AACxD,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,kBAAkB,QAAQ,+BAA8B;AAEjE,OAAO,MAAMC,oBAAoB,CAACC,YAA8BC,SAAkB,EAAE;IAClF,MAAMC,aAAsB,EAAE;IAE9B,IAAIF,WAAWG,SAAS,EAAE;QACxBD,WAAWE,IAAI,IAAIZ,gBAAgBS;IACrC;IAEA,IACE,CAACD,WAAWK,oBAAoB,IAC/B,OAAOL,WAAWK,oBAAoB,KAAK,YAC1CL,WAAWK,oBAAoB,CAACC,YAAY,EAC9C;QACA,MAAMC,aAAa;YAAE,GAAGZ,gBAAgB;QAAC;QACzC,IAAIa;QAEJ,IAAIR,WAAWS,iBAAiB,EAAE;YAChCD,gBAAgB;gBAAE,GAAGX,mBAAmB;YAAC;YACzC,IAAI,OAAOG,WAAWS,iBAAiB,KAAK,UAAU;gBACpD,IAAIT,WAAWS,iBAAiB,CAACC,YAAY,KAAK,OAAO;oBACvDH,WAAWI,QAAQ,GAAG;gBACxB;gBACA,IAAIX,WAAWS,iBAAiB,CAACG,eAAe,KAAK,OAAO;oBAC1DJ,cAAcG,QAAQ,GAAG;gBAC3B;gBACA,IAAIX,WAAWS,iBAAiB,CAACI,eAAe,KAAK,OAAO;oBAC1DN,WAAWO,MAAM,GAAG;gBACtB;YACF;QACF;QAEAZ,WAAWE,IAAI,CAACG;QAChB,IAAIC,eAAe;YACjBN,WAAWE,IAAI,CAACI;QAClB;QAEAN,WAAWE,IAAI,IAAIX;QAEnB,IACEO,WAAWe,cAAc,EAAEC,sBAC3BhB,WAAWe,cAAc,CAACC,kBAAkB,GAAG,GAC/C;YACAd,WAAWE,IAAI,CAACV;QAClB;QAEA,IAAIM,WAAWiB,MAAM,EAAE;YACrBf,WAAWE,IAAI,IAAIN;QACrB;QAEA,IAAIE,YAAYkB,oBAAoBlB,WAAWkB,gBAAgB,GAAG,GAAG;YACnEhB,WAAWE,IAAI,IAAIb;QACrB;QAEA,IAAIS,WAAWmB,WAAW,EAAE;YAC1BjB,WAAWE,IAAI,CAACR;QAClB;IACF;IAEA,OAAOM;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"getFieldsToSign.d.ts","sourceRoot":"","sources":["../../src/auth/getFieldsToSign.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAiHvD,eAAO,MAAM,eAAe,SAAU;IACpC,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;CAC7B,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAoBzB,CAAA"}
1
+ {"version":3,"file":"getFieldsToSign.d.ts","sourceRoot":"","sources":["../../src/auth/getFieldsToSign.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAiHvD,eAAO,MAAM,eAAe,SAAU;IACpC,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;CAC7B,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAyBzB,CAAA"}
@@ -99,20 +99,27 @@ fields, result })=>{
99
99
  };
100
100
  export const getFieldsToSign = (args)=>{
101
101
  const { collectionConfig, email, sid, user } = args;
102
- const result = {
103
- id: user?.id,
104
- collection: collectionConfig.slug,
105
- email
106
- };
107
- if (sid) {
108
- result.sid = sid;
109
- }
102
+ const fieldsToSign = Object.create(null);
110
103
  traverseFields({
111
104
  data: user,
112
105
  fields: collectionConfig.fields,
113
- result
106
+ result: fieldsToSign
114
107
  });
115
- return result;
108
+ delete fieldsToSign.collection;
109
+ delete fieldsToSign.email;
110
+ delete fieldsToSign.exp;
111
+ delete fieldsToSign.iat;
112
+ delete fieldsToSign.id;
113
+ delete fieldsToSign.sid;
114
+ return {
115
+ ...fieldsToSign,
116
+ id: user?.id,
117
+ collection: collectionConfig.slug,
118
+ email,
119
+ ...sid ? {
120
+ sid
121
+ } : {}
122
+ };
116
123
  };
117
124
 
118
125
  //# sourceMappingURL=getFieldsToSign.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/auth/getFieldsToSign.ts"],"sourcesContent":["import type { CollectionConfig } from '../collections/config/types.js'\nimport type { Field, TabAsField } from '../fields/config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { fieldAffectsData, tabHasName } from '../fields/config/types.js'\n\ntype TraverseFieldsArgs = {\n data: Record<string, unknown>\n fields: (Field | TabAsField)[]\n result: Record<string, unknown>\n}\nconst traverseFields = ({\n data,\n // parent,\n fields,\n result,\n}: TraverseFieldsArgs) => {\n fields.forEach((field) => {\n switch (field.type) {\n case 'collapsible':\n case 'row': {\n traverseFields({\n data,\n fields: field.fields,\n result,\n })\n break\n }\n case 'group': {\n if (fieldAffectsData(field)) {\n const groupData: Record<string, unknown> =\n (data[field.name] as Record<string, unknown>) ?? {}\n let targetResult\n if (typeof field.saveToJWT === 'string') {\n targetResult = field.saveToJWT\n result[field.saveToJWT] = groupData\n } else if (field.saveToJWT) {\n targetResult = field.name\n result[field.name] = groupData\n }\n const groupResult = (targetResult ? result[targetResult] : result) as Record<\n string,\n unknown\n >\n traverseFields({\n data: groupData,\n fields: field.fields,\n result: groupResult,\n })\n break\n } else {\n traverseFields({\n data,\n fields: field.fields,\n result,\n })\n\n break\n }\n }\n case 'tab': {\n if (tabHasName(field)) {\n const tabData: Record<string, unknown> =\n (data[field.name] as Record<string, unknown>) ?? {}\n let targetResult\n if (typeof field.saveToJWT === 'string') {\n targetResult = field.saveToJWT\n result[field.saveToJWT] = tabData\n } else if (field.saveToJWT) {\n targetResult = field.name\n result[field.name] = tabData\n }\n const tabResult = (targetResult ? result[targetResult] : result) as Record<\n string,\n unknown\n >\n traverseFields({\n data: tabData,\n fields: field.fields,\n result: tabResult,\n })\n } else {\n traverseFields({\n data,\n fields: field.fields,\n result,\n })\n }\n break\n }\n case 'tabs': {\n traverseFields({\n data,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n result,\n })\n break\n }\n default:\n if (fieldAffectsData(field)) {\n if (field.saveToJWT) {\n if (typeof field.saveToJWT === 'string') {\n result[field.saveToJWT] = data[field.name]\n delete result[field.name]\n } else {\n result[field.name] = data[field.name] as Record<string, unknown>\n }\n } else if (field.saveToJWT === false) {\n delete result[field.name]\n }\n }\n }\n })\n return result\n}\nexport const getFieldsToSign = (args: {\n collectionConfig: CollectionConfig\n email: string\n sid?: string\n user: PayloadRequest['user']\n}): Record<string, unknown> => {\n const { collectionConfig, email, sid, user } = args\n\n const result: Record<string, unknown> = {\n id: user?.id,\n collection: collectionConfig.slug,\n email,\n }\n\n if (sid) {\n result.sid = sid\n }\n\n traverseFields({\n data: user!,\n fields: collectionConfig.fields,\n result,\n })\n\n return result\n}\n"],"names":["fieldAffectsData","tabHasName","traverseFields","data","fields","result","forEach","field","type","groupData","name","targetResult","saveToJWT","groupResult","tabData","tabResult","tabs","map","tab","getFieldsToSign","args","collectionConfig","email","sid","user","id","collection","slug"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/auth/getFieldsToSign.ts"],"sourcesContent":["import type { CollectionConfig } from '../collections/config/types.js'\nimport type { Field, TabAsField } from '../fields/config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { fieldAffectsData, tabHasName } from '../fields/config/types.js'\n\ntype TraverseFieldsArgs = {\n data: Record<string, unknown>\n fields: (Field | TabAsField)[]\n result: Record<string, unknown>\n}\nconst traverseFields = ({\n data,\n // parent,\n fields,\n result,\n}: TraverseFieldsArgs) => {\n fields.forEach((field) => {\n switch (field.type) {\n case 'collapsible':\n case 'row': {\n traverseFields({\n data,\n fields: field.fields,\n result,\n })\n break\n }\n case 'group': {\n if (fieldAffectsData(field)) {\n const groupData: Record<string, unknown> =\n (data[field.name] as Record<string, unknown>) ?? {}\n let targetResult\n if (typeof field.saveToJWT === 'string') {\n targetResult = field.saveToJWT\n result[field.saveToJWT] = groupData\n } else if (field.saveToJWT) {\n targetResult = field.name\n result[field.name] = groupData\n }\n const groupResult = (targetResult ? result[targetResult] : result) as Record<\n string,\n unknown\n >\n traverseFields({\n data: groupData,\n fields: field.fields,\n result: groupResult,\n })\n break\n } else {\n traverseFields({\n data,\n fields: field.fields,\n result,\n })\n\n break\n }\n }\n case 'tab': {\n if (tabHasName(field)) {\n const tabData: Record<string, unknown> =\n (data[field.name] as Record<string, unknown>) ?? {}\n let targetResult\n if (typeof field.saveToJWT === 'string') {\n targetResult = field.saveToJWT\n result[field.saveToJWT] = tabData\n } else if (field.saveToJWT) {\n targetResult = field.name\n result[field.name] = tabData\n }\n const tabResult = (targetResult ? result[targetResult] : result) as Record<\n string,\n unknown\n >\n traverseFields({\n data: tabData,\n fields: field.fields,\n result: tabResult,\n })\n } else {\n traverseFields({\n data,\n fields: field.fields,\n result,\n })\n }\n break\n }\n case 'tabs': {\n traverseFields({\n data,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n result,\n })\n break\n }\n default:\n if (fieldAffectsData(field)) {\n if (field.saveToJWT) {\n if (typeof field.saveToJWT === 'string') {\n result[field.saveToJWT] = data[field.name]\n delete result[field.name]\n } else {\n result[field.name] = data[field.name] as Record<string, unknown>\n }\n } else if (field.saveToJWT === false) {\n delete result[field.name]\n }\n }\n }\n })\n return result\n}\nexport const getFieldsToSign = (args: {\n collectionConfig: CollectionConfig\n email: string\n sid?: string\n user: PayloadRequest['user']\n}): Record<string, unknown> => {\n const { collectionConfig, email, sid, user } = args\n\n const fieldsToSign = Object.create(null) as Record<string, unknown>\n\n traverseFields({\n data: user!,\n fields: collectionConfig.fields,\n result: fieldsToSign,\n })\n\n delete fieldsToSign.collection\n delete fieldsToSign.email\n delete fieldsToSign.exp\n delete fieldsToSign.iat\n delete fieldsToSign.id\n delete fieldsToSign.sid\n\n return {\n ...fieldsToSign,\n id: user?.id,\n collection: collectionConfig.slug,\n email,\n ...(sid ? { sid } : {}),\n }\n}\n"],"names":["fieldAffectsData","tabHasName","traverseFields","data","fields","result","forEach","field","type","groupData","name","targetResult","saveToJWT","groupResult","tabData","tabResult","tabs","map","tab","getFieldsToSign","args","collectionConfig","email","sid","user","fieldsToSign","Object","create","collection","exp","iat","id","slug"],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { getFieldsToSign } from './getFieldsToSign.js';
3
+ describe('getFieldsToSign', ()=>{
4
+ it('should prevent fields configured with saveToJWT from replacing Payload-owned JWT values', ()=>{
5
+ const collectionConfig = {
6
+ fields: [
7
+ {
8
+ name: 'impersonatedID',
9
+ saveToJWT: 'id',
10
+ type: 'text'
11
+ },
12
+ {
13
+ name: 'impersonatedCollection',
14
+ saveToJWT: 'collection',
15
+ type: 'text'
16
+ },
17
+ {
18
+ name: 'impersonatedEmail',
19
+ saveToJWT: 'email',
20
+ type: 'text'
21
+ },
22
+ {
23
+ name: 'impersonatedSession',
24
+ saveToJWT: 'sid',
25
+ type: 'text'
26
+ },
27
+ {
28
+ name: 'forgedIssuedAt',
29
+ saveToJWT: 'iat',
30
+ type: 'number'
31
+ },
32
+ {
33
+ name: 'forgedExpiration',
34
+ saveToJWT: 'exp',
35
+ type: 'number'
36
+ },
37
+ {
38
+ name: 'authVersionAlias',
39
+ saveToJWT: 'authVersion',
40
+ type: 'number'
41
+ },
42
+ {
43
+ name: 'role',
44
+ saveToJWT: true,
45
+ type: 'text'
46
+ }
47
+ ],
48
+ slug: 'users'
49
+ };
50
+ const result = getFieldsToSign({
51
+ collectionConfig,
52
+ email: 'attacker@example.com',
53
+ sid: 'trusted-session',
54
+ user: {
55
+ forgedExpiration: 1,
56
+ forgedIssuedAt: 1,
57
+ id: 'attacker-id',
58
+ impersonatedCollection: 'posts',
59
+ impersonatedEmail: 'victim@example.com',
60
+ impersonatedID: 'victim-id',
61
+ impersonatedSession: 'victim-session',
62
+ authVersionAlias: 1,
63
+ role: 'admin'
64
+ }
65
+ });
66
+ expect(result).toEqual({
67
+ collection: 'users',
68
+ email: 'attacker@example.com',
69
+ id: 'attacker-id',
70
+ authVersion: 1,
71
+ role: 'admin',
72
+ sid: 'trusted-session'
73
+ });
74
+ });
75
+ it('should retain __proto__ and constructor aliases without mutating the result prototype', ()=>{
76
+ const collectionConfig = {
77
+ fields: [
78
+ {
79
+ name: 'prototypeAlias',
80
+ saveToJWT: '__proto__',
81
+ type: 'text'
82
+ },
83
+ {
84
+ name: 'constructorAlias',
85
+ saveToJWT: 'constructor',
86
+ type: 'text'
87
+ }
88
+ ],
89
+ slug: 'users'
90
+ };
91
+ const result = getFieldsToSign({
92
+ collectionConfig,
93
+ email: 'user@example.com',
94
+ user: {
95
+ constructorAlias: 'custom-constructor',
96
+ id: 'user-id',
97
+ prototypeAlias: 'custom-prototype'
98
+ }
99
+ });
100
+ const roundTrippedResult = JSON.parse(JSON.stringify(result));
101
+ expect(Object.getPrototypeOf(result)).toBe(Object.prototype);
102
+ expect(Object.hasOwn(result, '__proto__')).toBe(true);
103
+ expect(Object.hasOwn(result, 'constructor')).toBe(true);
104
+ expect(result.__proto__).toBe('custom-prototype');
105
+ expect(result.constructor).toBe('custom-constructor');
106
+ expect(Object.getPrototypeOf(roundTrippedResult)).toBe(Object.prototype);
107
+ expect(Object.hasOwn(roundTrippedResult, '__proto__')).toBe(true);
108
+ expect(Object.hasOwn(roundTrippedResult, 'constructor')).toBe(true);
109
+ expect(roundTrippedResult.__proto__).toBe('custom-prototype');
110
+ expect(roundTrippedResult.constructor).toBe('custom-constructor');
111
+ });
112
+ });
113
+
114
+ //# sourceMappingURL=getFieldsToSign.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/auth/getFieldsToSign.spec.ts"],"sourcesContent":["import type { CollectionConfig } from '../collections/config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { describe, expect, it } from 'vitest'\n\nimport { getFieldsToSign } from './getFieldsToSign.js'\n\ndescribe('getFieldsToSign', () => {\n it('should prevent fields configured with saveToJWT from replacing Payload-owned JWT values', () => {\n const collectionConfig = {\n fields: [\n {\n name: 'impersonatedID',\n saveToJWT: 'id',\n type: 'text',\n },\n {\n name: 'impersonatedCollection',\n saveToJWT: 'collection',\n type: 'text',\n },\n {\n name: 'impersonatedEmail',\n saveToJWT: 'email',\n type: 'text',\n },\n {\n name: 'impersonatedSession',\n saveToJWT: 'sid',\n type: 'text',\n },\n {\n name: 'forgedIssuedAt',\n saveToJWT: 'iat',\n type: 'number',\n },\n {\n name: 'forgedExpiration',\n saveToJWT: 'exp',\n type: 'number',\n },\n {\n name: 'authVersionAlias',\n saveToJWT: 'authVersion',\n type: 'number',\n },\n {\n name: 'role',\n saveToJWT: true,\n type: 'text',\n },\n ],\n slug: 'users',\n } as CollectionConfig\n\n const result = getFieldsToSign({\n collectionConfig,\n email: 'attacker@example.com',\n sid: 'trusted-session',\n user: {\n forgedExpiration: 1,\n forgedIssuedAt: 1,\n id: 'attacker-id',\n impersonatedCollection: 'posts',\n impersonatedEmail: 'victim@example.com',\n impersonatedID: 'victim-id',\n impersonatedSession: 'victim-session',\n authVersionAlias: 1,\n role: 'admin',\n } as PayloadRequest['user'],\n })\n\n expect(result).toEqual({\n collection: 'users',\n email: 'attacker@example.com',\n id: 'attacker-id',\n authVersion: 1,\n role: 'admin',\n sid: 'trusted-session',\n })\n })\n\n it('should retain __proto__ and constructor aliases without mutating the result prototype', () => {\n const collectionConfig = {\n fields: [\n {\n name: 'prototypeAlias',\n saveToJWT: '__proto__',\n type: 'text',\n },\n {\n name: 'constructorAlias',\n saveToJWT: 'constructor',\n type: 'text',\n },\n ],\n slug: 'users',\n } as CollectionConfig\n\n const result = getFieldsToSign({\n collectionConfig,\n email: 'user@example.com',\n user: {\n constructorAlias: 'custom-constructor',\n id: 'user-id',\n prototypeAlias: 'custom-prototype',\n } as PayloadRequest['user'],\n })\n const roundTrippedResult = JSON.parse(JSON.stringify(result)) as Record<string, unknown>\n\n expect(Object.getPrototypeOf(result)).toBe(Object.prototype)\n expect(Object.hasOwn(result, '__proto__')).toBe(true)\n expect(Object.hasOwn(result, 'constructor')).toBe(true)\n expect(result.__proto__).toBe('custom-prototype')\n expect(result.constructor).toBe('custom-constructor')\n expect(Object.getPrototypeOf(roundTrippedResult)).toBe(Object.prototype)\n expect(Object.hasOwn(roundTrippedResult, '__proto__')).toBe(true)\n expect(Object.hasOwn(roundTrippedResult, 'constructor')).toBe(true)\n expect(roundTrippedResult.__proto__).toBe('custom-prototype')\n expect(roundTrippedResult.constructor).toBe('custom-constructor')\n })\n})\n"],"names":["describe","expect","it","getFieldsToSign","collectionConfig","fields","name","saveToJWT","type","slug","result","email","sid","user","forgedExpiration","forgedIssuedAt","id","impersonatedCollection","impersonatedEmail","impersonatedID","impersonatedSession","authVersionAlias","role","toEqual","collection","authVersion","constructorAlias","prototypeAlias","roundTrippedResult","JSON","parse","stringify","Object","getPrototypeOf","toBe","prototype","hasOwn","__proto__"],"mappings":"AAGA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAE7C,SAASC,eAAe,QAAQ,uBAAsB;AAEtDH,SAAS,mBAAmB;IAC1BE,GAAG,2FAA2F;QAC5F,MAAME,mBAAmB;YACvBC,QAAQ;gBACN;oBACEC,MAAM;oBACNC,WAAW;oBACXC,MAAM;gBACR;gBACA;oBACEF,MAAM;oBACNC,WAAW;oBACXC,MAAM;gBACR;gBACA;oBACEF,MAAM;oBACNC,WAAW;oBACXC,MAAM;gBACR;gBACA;oBACEF,MAAM;oBACNC,WAAW;oBACXC,MAAM;gBACR;gBACA;oBACEF,MAAM;oBACNC,WAAW;oBACXC,MAAM;gBACR;gBACA;oBACEF,MAAM;oBACNC,WAAW;oBACXC,MAAM;gBACR;gBACA;oBACEF,MAAM;oBACNC,WAAW;oBACXC,MAAM;gBACR;gBACA;oBACEF,MAAM;oBACNC,WAAW;oBACXC,MAAM;gBACR;aACD;YACDC,MAAM;QACR;QAEA,MAAMC,SAASP,gBAAgB;YAC7BC;YACAO,OAAO;YACPC,KAAK;YACLC,MAAM;gBACJC,kBAAkB;gBAClBC,gBAAgB;gBAChBC,IAAI;gBACJC,wBAAwB;gBACxBC,mBAAmB;gBACnBC,gBAAgB;gBAChBC,qBAAqB;gBACrBC,kBAAkB;gBAClBC,MAAM;YACR;QACF;QAEArB,OAAOS,QAAQa,OAAO,CAAC;YACrBC,YAAY;YACZb,OAAO;YACPK,IAAI;YACJS,aAAa;YACbH,MAAM;YACNV,KAAK;QACP;IACF;IAEAV,GAAG,yFAAyF;QAC1F,MAAME,mBAAmB;YACvBC,QAAQ;gBACN;oBACEC,MAAM;oBACNC,WAAW;oBACXC,MAAM;gBACR;gBACA;oBACEF,MAAM;oBACNC,WAAW;oBACXC,MAAM;gBACR;aACD;YACDC,MAAM;QACR;QAEA,MAAMC,SAASP,gBAAgB;YAC7BC;YACAO,OAAO;YACPE,MAAM;gBACJa,kBAAkB;gBAClBV,IAAI;gBACJW,gBAAgB;YAClB;QACF;QACA,MAAMC,qBAAqBC,KAAKC,KAAK,CAACD,KAAKE,SAAS,CAACrB;QAErDT,OAAO+B,OAAOC,cAAc,CAACvB,SAASwB,IAAI,CAACF,OAAOG,SAAS;QAC3DlC,OAAO+B,OAAOI,MAAM,CAAC1B,QAAQ,cAAcwB,IAAI,CAAC;QAChDjC,OAAO+B,OAAOI,MAAM,CAAC1B,QAAQ,gBAAgBwB,IAAI,CAAC;QAClDjC,OAAOS,OAAO2B,SAAS,EAAEH,IAAI,CAAC;QAC9BjC,OAAOS,OAAO,WAAW,EAAEwB,IAAI,CAAC;QAChCjC,OAAO+B,OAAOC,cAAc,CAACL,qBAAqBM,IAAI,CAACF,OAAOG,SAAS;QACvElC,OAAO+B,OAAOI,MAAM,CAACR,oBAAoB,cAAcM,IAAI,CAAC;QAC5DjC,OAAO+B,OAAOI,MAAM,CAACR,oBAAoB,gBAAgBM,IAAI,CAAC;QAC9DjC,OAAO2B,mBAAmBS,SAAS,EAAEH,IAAI,CAAC;QAC1CjC,OAAO2B,mBAAmB,WAAW,EAAEM,IAAI,CAAC;IAC9C;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/auth/jwt.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,+CAIjB;IACD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,MAAM,CAAA;CACxB;;;EAUA,CAAA"}
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/auth/jwt.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,+CAIjB;IACD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,MAAM,CAAA;CACxB;;;EAUA,CAAA"}
package/dist/auth/jwt.js CHANGED
@@ -1,10 +1,12 @@
1
1
  import { SignJWT } from 'jose';
2
+ import { JWT_AUTH_VERSION } from './jwtAuth.js';
2
3
  export const jwtSign = async ({ fieldsToSign, secret, tokenExpiration })=>{
3
4
  const secretKey = new TextEncoder().encode(secret);
4
5
  const issuedAt = Math.floor(Date.now() / 1000);
5
6
  const exp = issuedAt + tokenExpiration;
6
7
  const token = await new SignJWT(fieldsToSign).setProtectedHeader({
7
8
  alg: 'HS256',
9
+ authVersion: JWT_AUTH_VERSION,
8
10
  typ: 'JWT'
9
11
  }).setIssuedAt(issuedAt).setExpirationTime(exp).sign(secretKey);
10
12
  return {