payload 3.29.0-internal.d2c9ba5 → 3.29.0-internal.e4e913b

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 (163) hide show
  1. package/dist/admin/fields/Tabs.d.ts +2 -0
  2. package/dist/admin/fields/Tabs.d.ts.map +1 -1
  3. package/dist/admin/fields/Tabs.js.map +1 -1
  4. package/dist/admin/forms/Form.d.ts +2 -1
  5. package/dist/admin/forms/Form.d.ts.map +1 -1
  6. package/dist/admin/forms/Form.js.map +1 -1
  7. package/dist/auth/operations/login.d.ts.map +1 -1
  8. package/dist/auth/operations/login.js +8 -2
  9. package/dist/auth/operations/login.js.map +1 -1
  10. package/dist/auth/operations/me.d.ts +6 -0
  11. package/dist/auth/operations/me.d.ts.map +1 -1
  12. package/dist/auth/operations/me.js +7 -1
  13. package/dist/auth/operations/me.js.map +1 -1
  14. package/dist/auth/operations/refresh.d.ts +6 -0
  15. package/dist/auth/operations/refresh.d.ts.map +1 -1
  16. package/dist/auth/operations/refresh.js +7 -1
  17. package/dist/auth/operations/refresh.js.map +1 -1
  18. package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
  19. package/dist/auth/operations/registerFirstUser.js +2 -0
  20. package/dist/auth/operations/registerFirstUser.js.map +1 -1
  21. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  22. package/dist/auth/operations/resetPassword.js +4 -0
  23. package/dist/auth/operations/resetPassword.js.map +1 -1
  24. package/dist/auth/strategies/jwt.d.ts.map +1 -1
  25. package/dist/auth/strategies/jwt.js +2 -2
  26. package/dist/auth/strategies/jwt.js.map +1 -1
  27. package/dist/auth/types.d.ts +4 -1
  28. package/dist/auth/types.d.ts.map +1 -1
  29. package/dist/auth/types.js.map +1 -1
  30. package/dist/collections/config/types.d.ts +5 -1
  31. package/dist/collections/config/types.d.ts.map +1 -1
  32. package/dist/collections/config/types.js.map +1 -1
  33. package/dist/collections/dataloader.d.ts +3 -1
  34. package/dist/collections/dataloader.d.ts.map +1 -1
  35. package/dist/collections/dataloader.js +37 -1
  36. package/dist/collections/dataloader.js.map +1 -1
  37. package/dist/collections/endpoints/update.d.ts.map +1 -1
  38. package/dist/collections/endpoints/update.js +2 -1
  39. package/dist/collections/endpoints/update.js.map +1 -1
  40. package/dist/collections/operations/create.d.ts.map +1 -1
  41. package/dist/collections/operations/create.js +6 -1
  42. package/dist/collections/operations/create.js.map +1 -1
  43. package/dist/collections/operations/delete.d.ts.map +1 -1
  44. package/dist/collections/operations/delete.js +6 -1
  45. package/dist/collections/operations/delete.js.map +1 -1
  46. package/dist/collections/operations/deleteByID.d.ts.map +1 -1
  47. package/dist/collections/operations/deleteByID.js +6 -1
  48. package/dist/collections/operations/deleteByID.js.map +1 -1
  49. package/dist/collections/operations/find.d.ts.map +1 -1
  50. package/dist/collections/operations/find.js +6 -1
  51. package/dist/collections/operations/find.js.map +1 -1
  52. package/dist/collections/operations/findByID.d.ts.map +1 -1
  53. package/dist/collections/operations/findByID.js +6 -1
  54. package/dist/collections/operations/findByID.js.map +1 -1
  55. package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
  56. package/dist/collections/operations/findVersionByID.js +9 -1
  57. package/dist/collections/operations/findVersionByID.js.map +1 -1
  58. package/dist/collections/operations/findVersions.d.ts.map +1 -1
  59. package/dist/collections/operations/findVersions.js +9 -1
  60. package/dist/collections/operations/findVersions.js.map +1 -1
  61. package/dist/collections/operations/local/update.d.ts +13 -1
  62. package/dist/collections/operations/local/update.d.ts.map +1 -1
  63. package/dist/collections/operations/local/update.js +2 -1
  64. package/dist/collections/operations/local/update.js.map +1 -1
  65. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  66. package/dist/collections/operations/restoreVersion.js +6 -1
  67. package/dist/collections/operations/restoreVersion.js.map +1 -1
  68. package/dist/collections/operations/update.d.ts +7 -1
  69. package/dist/collections/operations/update.d.ts.map +1 -1
  70. package/dist/collections/operations/update.js +12 -1
  71. package/dist/collections/operations/update.js.map +1 -1
  72. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  73. package/dist/collections/operations/updateByID.js +6 -1
  74. package/dist/collections/operations/updateByID.js.map +1 -1
  75. package/dist/database/createDatabaseAdapter.d.ts +1 -1
  76. package/dist/database/createDatabaseAdapter.d.ts.map +1 -1
  77. package/dist/database/createDatabaseAdapter.js +4 -4
  78. package/dist/database/createDatabaseAdapter.js.map +1 -1
  79. package/dist/database/types.d.ts +3 -0
  80. package/dist/database/types.d.ts.map +1 -1
  81. package/dist/database/types.js.map +1 -1
  82. package/dist/errors/UnverifiedEmail.d.ts +8 -0
  83. package/dist/errors/UnverifiedEmail.d.ts.map +1 -0
  84. package/dist/errors/UnverifiedEmail.js +10 -0
  85. package/dist/errors/UnverifiedEmail.js.map +1 -0
  86. package/dist/errors/index.d.ts +1 -0
  87. package/dist/errors/index.d.ts.map +1 -1
  88. package/dist/errors/index.js +1 -0
  89. package/dist/errors/index.js.map +1 -1
  90. package/dist/errors/types.d.ts +1 -1
  91. package/dist/errors/types.d.ts.map +1 -1
  92. package/dist/errors/types.js.map +1 -1
  93. package/dist/fields/baseFields/timezone/defaultTimezones.d.ts.map +1 -1
  94. package/dist/fields/baseFields/timezone/defaultTimezones.js +4 -0
  95. package/dist/fields/baseFields/timezone/defaultTimezones.js.map +1 -1
  96. package/dist/fields/config/sanitize.d.ts.map +1 -1
  97. package/dist/fields/config/sanitize.js +5 -0
  98. package/dist/fields/config/sanitize.js.map +1 -1
  99. package/dist/fields/config/types.d.ts +11 -6
  100. package/dist/fields/config/types.d.ts.map +1 -1
  101. package/dist/fields/config/types.js.map +1 -1
  102. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  103. package/dist/fields/hooks/afterRead/promise.js +16 -40
  104. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  105. package/dist/fields/setDefaultBeforeDuplicate.d.ts.map +1 -1
  106. package/dist/fields/setDefaultBeforeDuplicate.js +28 -16
  107. package/dist/fields/setDefaultBeforeDuplicate.js.map +1 -1
  108. package/dist/fields/validations.d.ts.map +1 -1
  109. package/dist/fields/validations.js +11 -2
  110. package/dist/fields/validations.js.map +1 -1
  111. package/dist/globals/config/types.d.ts +7 -3
  112. package/dist/globals/config/types.d.ts.map +1 -1
  113. package/dist/globals/config/types.js.map +1 -1
  114. package/dist/globals/operations/findOne.d.ts.map +1 -1
  115. package/dist/globals/operations/findOne.js +6 -1
  116. package/dist/globals/operations/findOne.js.map +1 -1
  117. package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
  118. package/dist/globals/operations/findVersionByID.js +9 -1
  119. package/dist/globals/operations/findVersionByID.js.map +1 -1
  120. package/dist/globals/operations/findVersions.d.ts.map +1 -1
  121. package/dist/globals/operations/findVersions.js +9 -1
  122. package/dist/globals/operations/findVersions.js.map +1 -1
  123. package/dist/globals/operations/update.d.ts.map +1 -1
  124. package/dist/globals/operations/update.js +6 -1
  125. package/dist/globals/operations/update.js.map +1 -1
  126. package/dist/index.d.ts +4 -2
  127. package/dist/index.d.ts.map +1 -1
  128. package/dist/index.js +2 -0
  129. package/dist/index.js.map +1 -1
  130. package/dist/types/index.d.ts +15 -3
  131. package/dist/types/index.d.ts.map +1 -1
  132. package/dist/types/index.js.map +1 -1
  133. package/dist/uploads/checkFileAccess.d.ts.map +1 -1
  134. package/dist/uploads/checkFileAccess.js +3 -0
  135. package/dist/uploads/checkFileAccess.js.map +1 -1
  136. package/dist/utilities/addLocalesToRequest.d.ts.map +1 -1
  137. package/dist/utilities/addLocalesToRequest.js +19 -15
  138. package/dist/utilities/addLocalesToRequest.js.map +1 -1
  139. package/dist/utilities/createLocalReq.d.ts.map +1 -1
  140. package/dist/utilities/createLocalReq.js.map +1 -1
  141. package/dist/utilities/createPayloadRequest.d.ts.map +1 -1
  142. package/dist/utilities/createPayloadRequest.js +1 -6
  143. package/dist/utilities/createPayloadRequest.js.map +1 -1
  144. package/dist/utilities/getBlockSelect.d.ts +16 -0
  145. package/dist/utilities/getBlockSelect.d.ts.map +1 -0
  146. package/dist/utilities/getBlockSelect.js +42 -0
  147. package/dist/utilities/getBlockSelect.js.map +1 -0
  148. package/dist/utilities/headersWithCors.d.ts +1 -1
  149. package/dist/utilities/headersWithCors.d.ts.map +1 -1
  150. package/dist/utilities/headersWithCors.js +1 -2
  151. package/dist/utilities/headersWithCors.js.map +1 -1
  152. package/dist/utilities/sanitizeFallbackLocale.d.ts.map +1 -1
  153. package/dist/utilities/sanitizeFallbackLocale.js +8 -2
  154. package/dist/utilities/sanitizeFallbackLocale.js.map +1 -1
  155. package/dist/utilities/sanitizeSelect.d.ts +6 -0
  156. package/dist/utilities/sanitizeSelect.d.ts.map +1 -0
  157. package/dist/utilities/sanitizeSelect.js +14 -0
  158. package/dist/utilities/sanitizeSelect.js.map +1 -0
  159. package/dist/utilities/stripUnselectedFields.d.ts +16 -0
  160. package/dist/utilities/stripUnselectedFields.d.ts.map +1 -0
  161. package/dist/utilities/stripUnselectedFields.js +26 -0
  162. package/dist/utilities/stripUnselectedFields.js.map +1 -0
  163. package/package.json +2 -2
@@ -5,9 +5,11 @@ import type { ClientFieldBase, FieldClientComponent, FieldPaths, FieldServerComp
5
5
  import type { FieldDescriptionClientComponent, FieldDescriptionServerComponent, FieldDiffClientComponent, FieldDiffServerComponent, FieldLabelClientComponent, FieldLabelServerComponent } from '../types.js';
6
6
  export type ClientTab = ({
7
7
  fields: ClientField[];
8
+ passesCondition?: boolean;
8
9
  readonly path?: string;
9
10
  } & Omit<NamedTab, 'fields'>) | ({
10
11
  fields: ClientField[];
12
+ passesCondition?: boolean;
11
13
  } & Omit<UnnamedTab, 'fields'>);
12
14
  type TabsFieldBaseClientProps = FieldPaths;
13
15
  type TabsFieldClientWithoutType = MarkOptional<TabsFieldClient, 'type'>;
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/admin/fields/Tabs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,SAAS,EACT,eAAe,EACf,UAAU,EACX,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAC7F,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,eAAe,EAChB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EACV,+BAA+B,EAC/B,+BAA+B,EAC/B,wBAAwB,EACxB,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EAC1B,MAAM,aAAa,CAAA;AAEpB,MAAM,MAAM,SAAS,GACjB,CAAC;IAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,GAC9E,CAAC;IAAE,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAA;AAE5D,KAAK,wBAAwB,GAAG,UAAU,CAAA;AAE1C,KAAK,0BAA0B,GAAG,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;AAEvE,MAAM,MAAM,oBAAoB,GAAG,eAAe,CAAC,0BAA0B,CAAC,GAC5E,wBAAwB,CAAA;AAE1B,MAAM,MAAM,oBAAoB,GAAG,eAAe,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAA;AAEzF,MAAM,MAAM,wBAAwB,GAAG,oBAAoB,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAA;AAElG,MAAM,MAAM,wBAAwB,GAAG,oBAAoB,CACzD,0BAA0B,EAC1B,wBAAwB,CACzB,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,yBAAyB,CACnE,SAAS,EACT,0BAA0B,CAC3B,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,yBAAyB,CAAC,0BAA0B,CAAC,CAAA;AAEjG,MAAM,MAAM,mCAAmC,GAAG,+BAA+B,CAC/E,SAAS,EACT,0BAA0B,CAC3B,CAAA;AAED,MAAM,MAAM,mCAAmC,GAC7C,+BAA+B,CAAC,0BAA0B,CAAC,CAAA;AAE7D,MAAM,MAAM,6BAA6B,GAAG,yBAAyB,CACnE,SAAS,EACT,0BAA0B,CAC3B,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,yBAAyB,CAAC,0BAA0B,CAAC,CAAA;AAEjG,MAAM,MAAM,4BAA4B,GAAG,wBAAwB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;AAE/F,MAAM,MAAM,4BAA4B,GAAG,wBAAwB,CAAC,eAAe,CAAC,CAAA"}
1
+ {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/admin/fields/Tabs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,SAAS,EACT,eAAe,EACf,UAAU,EACX,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAC7F,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,eAAe,EAChB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EACV,+BAA+B,EAC/B,+BAA+B,EAC/B,wBAAwB,EACxB,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EAC1B,MAAM,aAAa,CAAA;AAEpB,MAAM,MAAM,SAAS,GACjB,CAAC;IAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAClF,QAAQ,EACR,QAAQ,CACT,CAAC,GACF,CAAC;IAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAA;AAEvF,KAAK,wBAAwB,GAAG,UAAU,CAAA;AAE1C,KAAK,0BAA0B,GAAG,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;AAEvE,MAAM,MAAM,oBAAoB,GAAG,eAAe,CAAC,0BAA0B,CAAC,GAC5E,wBAAwB,CAAA;AAE1B,MAAM,MAAM,oBAAoB,GAAG,eAAe,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAA;AAEzF,MAAM,MAAM,wBAAwB,GAAG,oBAAoB,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAA;AAElG,MAAM,MAAM,wBAAwB,GAAG,oBAAoB,CACzD,0BAA0B,EAC1B,wBAAwB,CACzB,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,yBAAyB,CACnE,SAAS,EACT,0BAA0B,CAC3B,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,yBAAyB,CAAC,0BAA0B,CAAC,CAAA;AAEjG,MAAM,MAAM,mCAAmC,GAAG,+BAA+B,CAC/E,SAAS,EACT,0BAA0B,CAC3B,CAAA;AAED,MAAM,MAAM,mCAAmC,GAC7C,+BAA+B,CAAC,0BAA0B,CAAC,CAAA;AAE7D,MAAM,MAAM,6BAA6B,GAAG,yBAAyB,CACnE,SAAS,EACT,0BAA0B,CAC3B,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,yBAAyB,CAAC,0BAA0B,CAAC,CAAA;AAEjG,MAAM,MAAM,4BAA4B,GAAG,wBAAwB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;AAE/F,MAAM,MAAM,4BAA4B,GAAG,wBAAwB,CAAC,eAAe,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/admin/fields/Tabs.ts"],"sourcesContent":["import type { MarkOptional } from 'ts-essentials'\n\nimport type {\n ClientField,\n NamedTab,\n TabsField,\n TabsFieldClient,\n UnnamedTab,\n} from '../../fields/config/types.js'\nimport type { FieldErrorClientComponent, FieldErrorServerComponent } from '../forms/Error.js'\nimport type {\n ClientFieldBase,\n FieldClientComponent,\n FieldPaths,\n FieldServerComponent,\n ServerFieldBase,\n} from '../forms/Field.js'\nimport type {\n FieldDescriptionClientComponent,\n FieldDescriptionServerComponent,\n FieldDiffClientComponent,\n FieldDiffServerComponent,\n FieldLabelClientComponent,\n FieldLabelServerComponent,\n} from '../types.js'\n\nexport type ClientTab =\n | ({ fields: ClientField[]; readonly path?: string } & Omit<NamedTab, 'fields'>)\n | ({ fields: ClientField[] } & Omit<UnnamedTab, 'fields'>)\n\ntype TabsFieldBaseClientProps = FieldPaths\n\ntype TabsFieldClientWithoutType = MarkOptional<TabsFieldClient, 'type'>\n\nexport type TabsFieldClientProps = ClientFieldBase<TabsFieldClientWithoutType> &\n TabsFieldBaseClientProps\n\nexport type TabsFieldServerProps = ServerFieldBase<TabsField, TabsFieldClientWithoutType>\n\nexport type TabsFieldServerComponent = FieldServerComponent<TabsField, TabsFieldClientWithoutType>\n\nexport type TabsFieldClientComponent = FieldClientComponent<\n TabsFieldClientWithoutType,\n TabsFieldBaseClientProps\n>\n\nexport type TabsFieldLabelServerComponent = FieldLabelServerComponent<\n TabsField,\n TabsFieldClientWithoutType\n>\n\nexport type TabsFieldLabelClientComponent = FieldLabelClientComponent<TabsFieldClientWithoutType>\n\nexport type TabsFieldDescriptionServerComponent = FieldDescriptionServerComponent<\n TabsField,\n TabsFieldClientWithoutType\n>\n\nexport type TabsFieldDescriptionClientComponent =\n FieldDescriptionClientComponent<TabsFieldClientWithoutType>\n\nexport type TabsFieldErrorServerComponent = FieldErrorServerComponent<\n TabsField,\n TabsFieldClientWithoutType\n>\n\nexport type TabsFieldErrorClientComponent = FieldErrorClientComponent<TabsFieldClientWithoutType>\n\nexport type TabsFieldDiffServerComponent = FieldDiffServerComponent<TabsField, TabsFieldClient>\n\nexport type TabsFieldDiffClientComponent = FieldDiffClientComponent<TabsFieldClient>\n"],"names":[],"mappings":"AAsEA,WAAoF"}
1
+ {"version":3,"sources":["../../../src/admin/fields/Tabs.ts"],"sourcesContent":["import type { MarkOptional } from 'ts-essentials'\n\nimport type {\n ClientField,\n NamedTab,\n TabsField,\n TabsFieldClient,\n UnnamedTab,\n} from '../../fields/config/types.js'\nimport type { FieldErrorClientComponent, FieldErrorServerComponent } from '../forms/Error.js'\nimport type {\n ClientFieldBase,\n FieldClientComponent,\n FieldPaths,\n FieldServerComponent,\n ServerFieldBase,\n} from '../forms/Field.js'\nimport type {\n FieldDescriptionClientComponent,\n FieldDescriptionServerComponent,\n FieldDiffClientComponent,\n FieldDiffServerComponent,\n FieldLabelClientComponent,\n FieldLabelServerComponent,\n} from '../types.js'\n\nexport type ClientTab =\n | ({ fields: ClientField[]; passesCondition?: boolean; readonly path?: string } & Omit<\n NamedTab,\n 'fields'\n >)\n | ({ fields: ClientField[]; passesCondition?: boolean } & Omit<UnnamedTab, 'fields'>)\n\ntype TabsFieldBaseClientProps = FieldPaths\n\ntype TabsFieldClientWithoutType = MarkOptional<TabsFieldClient, 'type'>\n\nexport type TabsFieldClientProps = ClientFieldBase<TabsFieldClientWithoutType> &\n TabsFieldBaseClientProps\n\nexport type TabsFieldServerProps = ServerFieldBase<TabsField, TabsFieldClientWithoutType>\n\nexport type TabsFieldServerComponent = FieldServerComponent<TabsField, TabsFieldClientWithoutType>\n\nexport type TabsFieldClientComponent = FieldClientComponent<\n TabsFieldClientWithoutType,\n TabsFieldBaseClientProps\n>\n\nexport type TabsFieldLabelServerComponent = FieldLabelServerComponent<\n TabsField,\n TabsFieldClientWithoutType\n>\n\nexport type TabsFieldLabelClientComponent = FieldLabelClientComponent<TabsFieldClientWithoutType>\n\nexport type TabsFieldDescriptionServerComponent = FieldDescriptionServerComponent<\n TabsField,\n TabsFieldClientWithoutType\n>\n\nexport type TabsFieldDescriptionClientComponent =\n FieldDescriptionClientComponent<TabsFieldClientWithoutType>\n\nexport type TabsFieldErrorServerComponent = FieldErrorServerComponent<\n TabsField,\n TabsFieldClientWithoutType\n>\n\nexport type TabsFieldErrorClientComponent = FieldErrorClientComponent<TabsFieldClientWithoutType>\n\nexport type TabsFieldDiffServerComponent = FieldDiffServerComponent<TabsField, TabsFieldClient>\n\nexport type TabsFieldDiffClientComponent = FieldDiffClientComponent<TabsFieldClient>\n"],"names":[],"mappings":"AAyEA,WAAoF"}
@@ -3,7 +3,7 @@ import type { SanitizedDocumentPermissions } from '../../auth/types.js';
3
3
  import type { Field, Validate } from '../../fields/config/types.js';
4
4
  import type { TypedLocale } from '../../index.js';
5
5
  import type { DocumentPreferences } from '../../preferences/types.js';
6
- import type { PayloadRequest, Where } from '../../types/index.js';
6
+ import type { PayloadRequest, SelectType, Where } from '../../types/index.js';
7
7
  export type Data = {
8
8
  [key: string]: any;
9
9
  };
@@ -76,6 +76,7 @@ export type BuildFormStateArgs = {
76
76
  req: PayloadRequest;
77
77
  returnLockStatus?: boolean;
78
78
  schemaPath: string;
79
+ select?: SelectType;
79
80
  skipValidation?: boolean;
80
81
  updateLastEdited?: boolean;
81
82
  } & ({
@@ -1 +1 @@
1
- {"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["../../../src/admin/forms/Form.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["../../../src/admin/forms/Form.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/admin/forms/Form.ts"],"sourcesContent":["import { type SupportedLanguages } from '@payloadcms/translations'\n\nimport type { SanitizedDocumentPermissions } from '../../auth/types.js'\nimport type { Field, Validate } from '../../fields/config/types.js'\nimport type { TypedLocale } from '../../index.js'\nimport type { DocumentPreferences } from '../../preferences/types.js'\nimport type { PayloadRequest, Where } from '../../types/index.js'\n\nexport type Data = {\n [key: string]: any\n}\n\nexport type Row = {\n blockType?: string\n collapsed?: boolean\n id: string\n isLoading?: boolean\n}\n\nexport type FilterOptionsResult = {\n [relation: string]: boolean | Where\n}\n\nexport type FieldState = {\n customComponents?: {\n /**\n * This is used by UI fields, as they can have arbitrary components defined if used\n * as a vessel to bring in custom components.\n */\n [key: string]: React.ReactNode | React.ReactNode[] | undefined\n AfterInput?: React.ReactNode\n BeforeInput?: React.ReactNode\n Description?: React.ReactNode\n Error?: React.ReactNode\n Field?: React.ReactNode\n Label?: React.ReactNode\n RowLabels?: React.ReactNode[]\n }\n disableFormData?: boolean\n errorMessage?: string\n errorPaths?: string[]\n /**\n * The fieldSchema may be part of the form state if `includeSchema: true` is passed to buildFormState.\n * This will never be in the form state of the client.\n */\n fieldSchema?: Field\n filterOptions?: FilterOptionsResult\n initialValue?: unknown\n passesCondition?: boolean\n requiresRender?: boolean\n rows?: Row[]\n valid?: boolean\n validate?: Validate\n value?: unknown\n}\n\nexport type FieldStateWithoutComponents = Omit<FieldState, 'customComponents'>\n\nexport type FormState = {\n [path: string]: FieldState\n}\n\nexport type FormStateWithoutComponents = {\n [path: string]: FieldStateWithoutComponents\n}\n\nexport type BuildFormStateArgs = {\n data?: Data\n docPermissions: SanitizedDocumentPermissions | undefined\n docPreferences: DocumentPreferences\n /**\n * In case `formState` is not the top-level, document form state, this can be passed to\n * provide the top-level form state.\n */\n documentFormState?: FormState\n fallbackLocale?: false | TypedLocale\n formState?: FormState\n id?: number | string\n initialBlockData?: Data\n initialBlockFormState?: FormState\n /*\n If not i18n was passed, the language can be passed to init i18n\n */\n language?: keyof SupportedLanguages\n locale?: string\n operation?: 'create' | 'update'\n /*\n If true, will render field components within their state object\n */\n renderAllFields?: boolean\n req: PayloadRequest\n returnLockStatus?: boolean\n schemaPath: string\n skipValidation?: boolean\n updateLastEdited?: boolean\n} & (\n | {\n collectionSlug: string\n // Do not type it as never. This still makes it so that either collectionSlug or globalSlug is required, but makes it easier to provide both collectionSlug and globalSlug if it's\n // unclear which one is actually available.\n globalSlug?: string\n }\n | {\n collectionSlug?: string\n globalSlug: string\n }\n)\n"],"names":[],"mappings":"AAkEA,WAwCC"}
1
+ {"version":3,"sources":["../../../src/admin/forms/Form.ts"],"sourcesContent":["import { type SupportedLanguages } from '@payloadcms/translations'\n\nimport type { SanitizedDocumentPermissions } from '../../auth/types.js'\nimport type { Field, Validate } from '../../fields/config/types.js'\nimport type { TypedLocale } from '../../index.js'\nimport type { DocumentPreferences } from '../../preferences/types.js'\nimport type { PayloadRequest, SelectType, Where } from '../../types/index.js'\n\nexport type Data = {\n [key: string]: any\n}\n\nexport type Row = {\n blockType?: string\n collapsed?: boolean\n id: string\n isLoading?: boolean\n}\n\nexport type FilterOptionsResult = {\n [relation: string]: boolean | Where\n}\n\nexport type FieldState = {\n customComponents?: {\n /**\n * This is used by UI fields, as they can have arbitrary components defined if used\n * as a vessel to bring in custom components.\n */\n [key: string]: React.ReactNode | React.ReactNode[] | undefined\n AfterInput?: React.ReactNode\n BeforeInput?: React.ReactNode\n Description?: React.ReactNode\n Error?: React.ReactNode\n Field?: React.ReactNode\n Label?: React.ReactNode\n RowLabels?: React.ReactNode[]\n }\n disableFormData?: boolean\n errorMessage?: string\n errorPaths?: string[]\n /**\n * The fieldSchema may be part of the form state if `includeSchema: true` is passed to buildFormState.\n * This will never be in the form state of the client.\n */\n fieldSchema?: Field\n filterOptions?: FilterOptionsResult\n initialValue?: unknown\n passesCondition?: boolean\n requiresRender?: boolean\n rows?: Row[]\n valid?: boolean\n validate?: Validate\n value?: unknown\n}\n\nexport type FieldStateWithoutComponents = Omit<FieldState, 'customComponents'>\n\nexport type FormState = {\n [path: string]: FieldState\n}\n\nexport type FormStateWithoutComponents = {\n [path: string]: FieldStateWithoutComponents\n}\n\nexport type BuildFormStateArgs = {\n data?: Data\n docPermissions: SanitizedDocumentPermissions | undefined\n docPreferences: DocumentPreferences\n /**\n * In case `formState` is not the top-level, document form state, this can be passed to\n * provide the top-level form state.\n */\n documentFormState?: FormState\n fallbackLocale?: false | TypedLocale\n formState?: FormState\n id?: number | string\n initialBlockData?: Data\n initialBlockFormState?: FormState\n /*\n If not i18n was passed, the language can be passed to init i18n\n */\n language?: keyof SupportedLanguages\n locale?: string\n operation?: 'create' | 'update'\n /*\n If true, will render field components within their state object\n */\n renderAllFields?: boolean\n req: PayloadRequest\n returnLockStatus?: boolean\n schemaPath: string\n select?: SelectType\n skipValidation?: boolean\n updateLastEdited?: boolean\n} & (\n | {\n collectionSlug: string\n // Do not type it as never. This still makes it so that either collectionSlug or globalSlug is required, but makes it easier to provide both collectionSlug and globalSlug if it's\n // unclear which one is actually available.\n globalSlug?: string\n }\n | {\n collectionSlug?: string\n globalSlug: string\n }\n)\n"],"names":[],"mappings":"AAkEA,WAyCC"}
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/login.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gCAAgC,EAChC,UAAU,EACV,sBAAsB,EACvB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAS,MAAM,sBAAsB,CAAA;AACjE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAgBvC,MAAM,MAAM,MAAM,GAAG;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,IAAI,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,gCAAgC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAA;IACtD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,KAAK,SAAS,cAAc,gBACjD,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC;IAAE,IAAI,EAAE,sBAAsB,CAAC,KAAK,CAAC,CAAA;CAAE,GAAG,MAAM,CA6R1D,CAAA"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/login.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gCAAgC,EAChC,UAAU,EACV,sBAAsB,EACvB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAS,MAAM,sBAAsB,CAAA;AACjE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAqBvC,MAAM,MAAM,MAAM,GAAG;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,IAAI,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,gCAAgC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAA;IACtD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,KAAK,SAAS,cAAc,gBACjD,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC;IAAE,IAAI,EAAE,sBAAsB,CAAC,KAAK,CAAC,CAAA;CAAE,GAAG,MAAM,CAkS1D,CAAA"}
@@ -1,6 +1,6 @@
1
1
  // @ts-strict-ignore
2
2
  import { buildAfterOperation } from '../../collections/operations/utils.js';
3
- import { AuthenticationError, LockedAuth, ValidationError } from '../../errors/index.js';
3
+ import { AuthenticationError, LockedAuth, UnverifiedEmail, ValidationError } from '../../errors/index.js';
4
4
  import { afterRead } from '../../fields/hooks/afterRead/index.js';
5
5
  import { Forbidden } from '../../index.js';
6
6
  import { killTransaction } from '../../utilities/killTransaction.js';
@@ -139,10 +139,16 @@ export const loginOperation = async (incomingArgs)=>{
139
139
  req,
140
140
  where: whereConstraint
141
141
  });
142
- if (!user || args.collection.config.auth.verify && user._verified === false) {
142
+ if (!user) {
143
143
  throw new AuthenticationError(req.t, Boolean(canLoginWithUsername && sanitizedUsername));
144
144
  }
145
+ if (args.collection.config.auth.verify && user._verified === false) {
146
+ throw new UnverifiedEmail({
147
+ t: req.t
148
+ });
149
+ }
145
150
  user.collection = collectionConfig.slug;
151
+ user._strategy = 'local-jwt';
146
152
  if (isLocked(new Date(user.lockUntil).getTime())) {
147
153
  throw new LockedAuth(req.t);
148
154
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/operations/login.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type {\n AuthOperationsFromCollectionSlug,\n Collection,\n DataFromCollectionSlug,\n} from '../../collections/config/types.js'\nimport type { CollectionSlug } from '../../index.js'\nimport type { PayloadRequest, Where } from '../../types/index.js'\nimport type { User } from '../types.js'\n\nimport { buildAfterOperation } from '../../collections/operations/utils.js'\nimport { AuthenticationError, LockedAuth, ValidationError } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { Forbidden } from '../../index.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport sanitizeInternalFields from '../../utilities/sanitizeInternalFields.js'\nimport { getFieldsToSign } from '../getFieldsToSign.js'\nimport { getLoginOptions } from '../getLoginOptions.js'\nimport isLocked from '../isLocked.js'\nimport { jwtSign } from '../jwt.js'\nimport { authenticateLocalStrategy } from '../strategies/local/authenticate.js'\nimport { incrementLoginAttempts } from '../strategies/local/incrementLoginAttempts.js'\nimport { resetLoginAttempts } from '../strategies/local/resetLoginAttempts.js'\n\nexport type Result = {\n exp?: number\n token?: string\n user?: User\n}\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n collection: Collection\n data: AuthOperationsFromCollectionSlug<TSlug>['login']\n depth?: number\n overrideAccess?: boolean\n req: PayloadRequest\n showHiddenFields?: boolean\n}\n\nexport const loginOperation = async <TSlug extends CollectionSlug>(\n incomingArgs: Arguments<TSlug>,\n): Promise<{ user: DataFromCollectionSlug<TSlug> } & Result> => {\n let args = incomingArgs\n\n if (args.collection.config.auth.disableLocalStrategy) {\n throw new Forbidden(args.req.t)\n }\n\n try {\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n if (args.collection.config.hooks?.beforeOperation?.length) {\n for (const hook of args.collection.config.hooks.beforeOperation) {\n args =\n (await hook({\n args,\n collection: args.collection?.config,\n context: args.req.context,\n operation: 'login',\n req: args.req,\n })) || args\n }\n }\n\n const {\n collection: { config: collectionConfig },\n data,\n depth,\n overrideAccess,\n req,\n req: {\n fallbackLocale,\n locale,\n payload,\n payload: { secret },\n },\n showHiddenFields,\n } = args\n\n // /////////////////////////////////////\n // Login\n // /////////////////////////////////////\n\n let user\n const { email: unsanitizedEmail, password } = data\n const loginWithUsername = collectionConfig.auth.loginWithUsername\n\n const sanitizedEmail =\n typeof unsanitizedEmail === 'string' ? unsanitizedEmail.toLowerCase().trim() : null\n const sanitizedUsername =\n 'username' in data && typeof data?.username === 'string'\n ? data.username.toLowerCase().trim()\n : null\n\n const { canLoginWithEmail, canLoginWithUsername } = getLoginOptions(loginWithUsername)\n\n // cannot login with email, did not provide username\n if (!canLoginWithEmail && !sanitizedUsername) {\n throw new ValidationError({\n collection: collectionConfig.slug,\n errors: [{ message: req.i18n.t('validation:required'), path: 'username' }],\n })\n }\n\n // cannot login with username, did not provide email\n if (!canLoginWithUsername && !sanitizedEmail) {\n throw new ValidationError({\n collection: collectionConfig.slug,\n errors: [{ message: req.i18n.t('validation:required'), path: 'email' }],\n })\n }\n\n // can login with either email or username, did not provide either\n if (!sanitizedUsername && !sanitizedEmail) {\n throw new ValidationError({\n collection: collectionConfig.slug,\n errors: [\n { message: req.i18n.t('validation:required'), path: 'email' },\n { message: req.i18n.t('validation:required'), path: 'username' },\n ],\n })\n }\n\n // did not provide password for login\n if (typeof password !== 'string' || password.trim() === '') {\n throw new ValidationError({\n collection: collectionConfig.slug,\n errors: [{ message: req.i18n.t('validation:required'), path: 'password' }],\n })\n }\n\n let whereConstraint: Where = {}\n const emailConstraint: Where = {\n email: {\n equals: sanitizedEmail,\n },\n }\n const usernameConstraint: Where = {\n username: {\n equals: sanitizedUsername,\n },\n }\n\n if (canLoginWithEmail && canLoginWithUsername && (sanitizedUsername || sanitizedEmail)) {\n if (sanitizedUsername) {\n whereConstraint = {\n or: [\n usernameConstraint,\n {\n email: {\n equals: sanitizedUsername,\n },\n },\n ],\n }\n } else {\n whereConstraint = {\n or: [\n emailConstraint,\n {\n username: {\n equals: sanitizedEmail,\n },\n },\n ],\n }\n }\n } else if (canLoginWithEmail && sanitizedEmail) {\n whereConstraint = emailConstraint\n } else if (canLoginWithUsername && sanitizedUsername) {\n whereConstraint = usernameConstraint\n }\n\n user = await payload.db.findOne<any>({\n collection: collectionConfig.slug,\n req,\n where: whereConstraint,\n })\n\n if (!user || (args.collection.config.auth.verify && user._verified === false)) {\n throw new AuthenticationError(req.t, Boolean(canLoginWithUsername && sanitizedUsername))\n }\n\n user.collection = collectionConfig.slug\n\n if (isLocked(new Date(user.lockUntil).getTime())) {\n throw new LockedAuth(req.t)\n }\n\n const authResult = await authenticateLocalStrategy({ doc: user, password })\n\n user = sanitizeInternalFields(user)\n\n const maxLoginAttemptsEnabled = args.collection.config.auth.maxLoginAttempts > 0\n\n if (!authResult) {\n if (maxLoginAttemptsEnabled) {\n await incrementLoginAttempts({\n collection: collectionConfig,\n doc: user,\n payload: req.payload,\n req,\n })\n }\n\n throw new AuthenticationError(req.t)\n }\n\n if (maxLoginAttemptsEnabled) {\n await resetLoginAttempts({\n collection: collectionConfig,\n doc: user,\n payload: req.payload,\n req,\n })\n }\n\n const fieldsToSign = getFieldsToSign({\n collectionConfig,\n email: sanitizedEmail,\n user,\n })\n\n // /////////////////////////////////////\n // beforeLogin - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeLogin?.length) {\n for (const hook of collectionConfig.hooks.beforeLogin) {\n user =\n (await hook({\n collection: args.collection?.config,\n context: args.req.context,\n req: args.req,\n user,\n })) || user\n }\n }\n\n const { exp, token } = await jwtSign({\n fieldsToSign,\n secret,\n tokenExpiration: collectionConfig.auth.tokenExpiration,\n })\n\n req.user = user\n\n // /////////////////////////////////////\n // afterLogin - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterLogin?.length) {\n for (const hook of collectionConfig.hooks.afterLogin) {\n user =\n (await hook({\n collection: args.collection?.config,\n context: args.req.context,\n req: args.req,\n token,\n user,\n })) || user\n }\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n user = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: user,\n draft: undefined,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n req,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n user =\n (await hook({\n collection: args.collection?.config,\n context: req.context,\n doc: user,\n req,\n })) || user\n }\n }\n\n let result: { user: DataFromCollectionSlug<TSlug> } & Result = {\n exp,\n token,\n user,\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: args.collection?.config,\n operation: 'login',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["buildAfterOperation","AuthenticationError","LockedAuth","ValidationError","afterRead","Forbidden","killTransaction","sanitizeInternalFields","getFieldsToSign","getLoginOptions","isLocked","jwtSign","authenticateLocalStrategy","incrementLoginAttempts","resetLoginAttempts","loginOperation","incomingArgs","args","collection","config","auth","disableLocalStrategy","req","t","hooks","beforeOperation","length","hook","context","operation","collectionConfig","data","depth","overrideAccess","fallbackLocale","locale","payload","secret","showHiddenFields","user","email","unsanitizedEmail","password","loginWithUsername","sanitizedEmail","toLowerCase","trim","sanitizedUsername","username","canLoginWithEmail","canLoginWithUsername","slug","errors","message","i18n","path","whereConstraint","emailConstraint","equals","usernameConstraint","or","db","findOne","where","verify","_verified","Boolean","Date","lockUntil","getTime","authResult","doc","maxLoginAttemptsEnabled","maxLoginAttempts","fieldsToSign","beforeLogin","exp","token","tokenExpiration","afterLogin","draft","undefined","global","result","error"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/auth/operations/login.ts"],"sourcesContent":["// @ts-strict-ignore\nimport type {\n AuthOperationsFromCollectionSlug,\n Collection,\n DataFromCollectionSlug,\n} from '../../collections/config/types.js'\nimport type { CollectionSlug } from '../../index.js'\nimport type { PayloadRequest, Where } from '../../types/index.js'\nimport type { User } from '../types.js'\n\nimport { buildAfterOperation } from '../../collections/operations/utils.js'\nimport {\n AuthenticationError,\n LockedAuth,\n UnverifiedEmail,\n ValidationError,\n} from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { Forbidden } from '../../index.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport sanitizeInternalFields from '../../utilities/sanitizeInternalFields.js'\nimport { getFieldsToSign } from '../getFieldsToSign.js'\nimport { getLoginOptions } from '../getLoginOptions.js'\nimport isLocked from '../isLocked.js'\nimport { jwtSign } from '../jwt.js'\nimport { authenticateLocalStrategy } from '../strategies/local/authenticate.js'\nimport { incrementLoginAttempts } from '../strategies/local/incrementLoginAttempts.js'\nimport { resetLoginAttempts } from '../strategies/local/resetLoginAttempts.js'\n\nexport type Result = {\n exp?: number\n token?: string\n user?: User\n}\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n collection: Collection\n data: AuthOperationsFromCollectionSlug<TSlug>['login']\n depth?: number\n overrideAccess?: boolean\n req: PayloadRequest\n showHiddenFields?: boolean\n}\n\nexport const loginOperation = async <TSlug extends CollectionSlug>(\n incomingArgs: Arguments<TSlug>,\n): Promise<{ user: DataFromCollectionSlug<TSlug> } & Result> => {\n let args = incomingArgs\n\n if (args.collection.config.auth.disableLocalStrategy) {\n throw new Forbidden(args.req.t)\n }\n\n try {\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n if (args.collection.config.hooks?.beforeOperation?.length) {\n for (const hook of args.collection.config.hooks.beforeOperation) {\n args =\n (await hook({\n args,\n collection: args.collection?.config,\n context: args.req.context,\n operation: 'login',\n req: args.req,\n })) || args\n }\n }\n\n const {\n collection: { config: collectionConfig },\n data,\n depth,\n overrideAccess,\n req,\n req: {\n fallbackLocale,\n locale,\n payload,\n payload: { secret },\n },\n showHiddenFields,\n } = args\n\n // /////////////////////////////////////\n // Login\n // /////////////////////////////////////\n\n let user\n const { email: unsanitizedEmail, password } = data\n const loginWithUsername = collectionConfig.auth.loginWithUsername\n\n const sanitizedEmail =\n typeof unsanitizedEmail === 'string' ? unsanitizedEmail.toLowerCase().trim() : null\n const sanitizedUsername =\n 'username' in data && typeof data?.username === 'string'\n ? data.username.toLowerCase().trim()\n : null\n\n const { canLoginWithEmail, canLoginWithUsername } = getLoginOptions(loginWithUsername)\n\n // cannot login with email, did not provide username\n if (!canLoginWithEmail && !sanitizedUsername) {\n throw new ValidationError({\n collection: collectionConfig.slug,\n errors: [{ message: req.i18n.t('validation:required'), path: 'username' }],\n })\n }\n\n // cannot login with username, did not provide email\n if (!canLoginWithUsername && !sanitizedEmail) {\n throw new ValidationError({\n collection: collectionConfig.slug,\n errors: [{ message: req.i18n.t('validation:required'), path: 'email' }],\n })\n }\n\n // can login with either email or username, did not provide either\n if (!sanitizedUsername && !sanitizedEmail) {\n throw new ValidationError({\n collection: collectionConfig.slug,\n errors: [\n { message: req.i18n.t('validation:required'), path: 'email' },\n { message: req.i18n.t('validation:required'), path: 'username' },\n ],\n })\n }\n\n // did not provide password for login\n if (typeof password !== 'string' || password.trim() === '') {\n throw new ValidationError({\n collection: collectionConfig.slug,\n errors: [{ message: req.i18n.t('validation:required'), path: 'password' }],\n })\n }\n\n let whereConstraint: Where = {}\n const emailConstraint: Where = {\n email: {\n equals: sanitizedEmail,\n },\n }\n const usernameConstraint: Where = {\n username: {\n equals: sanitizedUsername,\n },\n }\n\n if (canLoginWithEmail && canLoginWithUsername && (sanitizedUsername || sanitizedEmail)) {\n if (sanitizedUsername) {\n whereConstraint = {\n or: [\n usernameConstraint,\n {\n email: {\n equals: sanitizedUsername,\n },\n },\n ],\n }\n } else {\n whereConstraint = {\n or: [\n emailConstraint,\n {\n username: {\n equals: sanitizedEmail,\n },\n },\n ],\n }\n }\n } else if (canLoginWithEmail && sanitizedEmail) {\n whereConstraint = emailConstraint\n } else if (canLoginWithUsername && sanitizedUsername) {\n whereConstraint = usernameConstraint\n }\n\n user = await payload.db.findOne<any>({\n collection: collectionConfig.slug,\n req,\n where: whereConstraint,\n })\n\n if (!user) {\n throw new AuthenticationError(req.t, Boolean(canLoginWithUsername && sanitizedUsername))\n }\n\n if (args.collection.config.auth.verify && user._verified === false) {\n throw new UnverifiedEmail({ t: req.t })\n }\n\n user.collection = collectionConfig.slug\n user._strategy = 'local-jwt'\n\n if (isLocked(new Date(user.lockUntil).getTime())) {\n throw new LockedAuth(req.t)\n }\n\n const authResult = await authenticateLocalStrategy({ doc: user, password })\n\n user = sanitizeInternalFields(user)\n\n const maxLoginAttemptsEnabled = args.collection.config.auth.maxLoginAttempts > 0\n\n if (!authResult) {\n if (maxLoginAttemptsEnabled) {\n await incrementLoginAttempts({\n collection: collectionConfig,\n doc: user,\n payload: req.payload,\n req,\n })\n }\n\n throw new AuthenticationError(req.t)\n }\n\n if (maxLoginAttemptsEnabled) {\n await resetLoginAttempts({\n collection: collectionConfig,\n doc: user,\n payload: req.payload,\n req,\n })\n }\n\n const fieldsToSign = getFieldsToSign({\n collectionConfig,\n email: sanitizedEmail,\n user,\n })\n\n // /////////////////////////////////////\n // beforeLogin - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeLogin?.length) {\n for (const hook of collectionConfig.hooks.beforeLogin) {\n user =\n (await hook({\n collection: args.collection?.config,\n context: args.req.context,\n req: args.req,\n user,\n })) || user\n }\n }\n\n const { exp, token } = await jwtSign({\n fieldsToSign,\n secret,\n tokenExpiration: collectionConfig.auth.tokenExpiration,\n })\n\n req.user = user\n\n // /////////////////////////////////////\n // afterLogin - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterLogin?.length) {\n for (const hook of collectionConfig.hooks.afterLogin) {\n user =\n (await hook({\n collection: args.collection?.config,\n context: args.req.context,\n req: args.req,\n token,\n user,\n })) || user\n }\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n user = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: user,\n draft: undefined,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n req,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRead?.length) {\n for (const hook of collectionConfig.hooks.afterRead) {\n user =\n (await hook({\n collection: args.collection?.config,\n context: req.context,\n doc: user,\n req,\n })) || user\n }\n }\n\n let result: { user: DataFromCollectionSlug<TSlug> } & Result = {\n exp,\n token,\n user,\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: args.collection?.config,\n operation: 'login',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["buildAfterOperation","AuthenticationError","LockedAuth","UnverifiedEmail","ValidationError","afterRead","Forbidden","killTransaction","sanitizeInternalFields","getFieldsToSign","getLoginOptions","isLocked","jwtSign","authenticateLocalStrategy","incrementLoginAttempts","resetLoginAttempts","loginOperation","incomingArgs","args","collection","config","auth","disableLocalStrategy","req","t","hooks","beforeOperation","length","hook","context","operation","collectionConfig","data","depth","overrideAccess","fallbackLocale","locale","payload","secret","showHiddenFields","user","email","unsanitizedEmail","password","loginWithUsername","sanitizedEmail","toLowerCase","trim","sanitizedUsername","username","canLoginWithEmail","canLoginWithUsername","slug","errors","message","i18n","path","whereConstraint","emailConstraint","equals","usernameConstraint","or","db","findOne","where","Boolean","verify","_verified","_strategy","Date","lockUntil","getTime","authResult","doc","maxLoginAttemptsEnabled","maxLoginAttempts","fieldsToSign","beforeLogin","exp","token","tokenExpiration","afterLogin","draft","undefined","global","result","error"],"mappings":"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"}
@@ -4,6 +4,12 @@ import type { ClientUser } from '../types.js';
4
4
  export type MeOperationResult = {
5
5
  collection?: string;
6
6
  exp?: number;
7
+ /** @deprecated
8
+ * use:
9
+ * ```ts
10
+ * user._strategy
11
+ * ```
12
+ */
7
13
  strategy?: string;
8
14
  token?: string;
9
15
  user?: ClientUser;
@@ -1 +1 @@
1
- {"version":3,"file":"me.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/me.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAQ,MAAM,aAAa,CAAA;AAEnD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,UAAU,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,WAAW,SAAgB,SAAS,KAAG,OAAO,CAAC,iBAAiB,CAgF5E,CAAA"}
1
+ {"version":3,"file":"me.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/me.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAQ,MAAM,aAAa,CAAA;AAEnD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,UAAU,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,WAAW,SAAgB,SAAS,KAAG,OAAO,CAAC,iBAAiB,CAuF5E,CAAA"}
@@ -18,6 +18,7 @@ export const meOperation = async (args)=>{
18
18
  });
19
19
  if (user) {
20
20
  user.collection = collection.config.slug;
21
+ user._strategy = req.user._strategy;
21
22
  }
22
23
  if (req.user.collection !== collection.config.slug) {
23
24
  return {
@@ -39,7 +40,12 @@ export const meOperation = async (args)=>{
39
40
  }
40
41
  }
41
42
  result.collection = req.user.collection;
42
- result.strategy = req.user._strategy;
43
+ /** @deprecated
44
+ * use:
45
+ * ```ts
46
+ * user._strategy
47
+ * ```
48
+ */ result.strategy = req.user._strategy;
43
49
  if (!result.user) {
44
50
  result.user = user;
45
51
  if (currentToken) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/operations/me.ts"],"sourcesContent":["// @ts-strict-ignore\nimport { decodeJwt } from 'jose'\n\nimport type { Collection } from '../../collections/config/types.js'\nimport type { PayloadRequest } from '../../types/index.js'\nimport type { ClientUser, User } from '../types.js'\n\nexport type MeOperationResult = {\n collection?: string\n exp?: number\n strategy?: string\n token?: string\n user?: ClientUser\n}\n\nexport type Arguments = {\n collection: Collection\n currentToken?: string\n req: PayloadRequest\n}\n\nexport const meOperation = async (args: Arguments): Promise<MeOperationResult> => {\n const { collection, currentToken, req } = args\n\n let result: MeOperationResult = {\n user: null,\n }\n\n if (req.user) {\n const { pathname } = req\n const isGraphQL = pathname === `/api${req.payload.config.routes.graphQL}`\n\n const user = (await req.payload.findByID({\n id: req.user.id,\n collection: collection.config.slug,\n depth: isGraphQL ? 0 : collection.config.auth.depth,\n overrideAccess: false,\n req,\n showHiddenFields: false,\n })) as User\n\n if (user) {\n user.collection = collection.config.slug\n }\n\n if (req.user.collection !== collection.config.slug) {\n return {\n user: null,\n }\n }\n\n // /////////////////////////////////////\n // me hook - Collection\n // /////////////////////////////////////\n\n for (const meHook of collection.config.hooks.me) {\n const hookResult = await meHook({ args, user })\n\n if (hookResult) {\n result.user = hookResult.user\n result.exp = hookResult.exp\n\n break\n }\n }\n\n result.collection = req.user.collection\n result.strategy = req.user._strategy\n\n if (!result.user) {\n result.user = user\n\n if (currentToken) {\n const decoded = decodeJwt(currentToken)\n if (decoded) {\n result.exp = decoded.exp\n }\n if (!collection.config.auth.removeTokenFromResponses) {\n result.token = currentToken\n }\n }\n }\n }\n\n // /////////////////////////////////////\n // After Me - Collection\n // /////////////////////////////////////\n\n if (collection.config.hooks?.afterMe?.length) {\n for (const hook of collection.config.hooks.afterMe) {\n result =\n (await hook({\n collection: collection?.config,\n context: req.context,\n req,\n response: result,\n })) || result\n }\n }\n\n return result\n}\n"],"names":["decodeJwt","meOperation","args","collection","currentToken","req","result","user","pathname","isGraphQL","payload","config","routes","graphQL","findByID","id","slug","depth","auth","overrideAccess","showHiddenFields","meHook","hooks","me","hookResult","exp","strategy","_strategy","decoded","removeTokenFromResponses","token","afterMe","length","hook","context","response"],"mappings":"AAAA,oBAAoB;AACpB,SAASA,SAAS,QAAQ,OAAM;AAoBhC,OAAO,MAAMC,cAAc,OAAOC;IAChC,MAAM,EAAEC,UAAU,EAAEC,YAAY,EAAEC,GAAG,EAAE,GAAGH;IAE1C,IAAII,SAA4B;QAC9BC,MAAM;IACR;IAEA,IAAIF,IAAIE,IAAI,EAAE;QACZ,MAAM,EAAEC,QAAQ,EAAE,GAAGH;QACrB,MAAMI,YAAYD,aAAa,CAAC,IAAI,EAAEH,IAAIK,OAAO,CAACC,MAAM,CAACC,MAAM,CAACC,OAAO,EAAE;QAEzE,MAAMN,OAAQ,MAAMF,IAAIK,OAAO,CAACI,QAAQ,CAAC;YACvCC,IAAIV,IAAIE,IAAI,CAACQ,EAAE;YACfZ,YAAYA,WAAWQ,MAAM,CAACK,IAAI;YAClCC,OAAOR,YAAY,IAAIN,WAAWQ,MAAM,CAACO,IAAI,CAACD,KAAK;YACnDE,gBAAgB;YAChBd;YACAe,kBAAkB;QACpB;QAEA,IAAIb,MAAM;YACRA,KAAKJ,UAAU,GAAGA,WAAWQ,MAAM,CAACK,IAAI;QAC1C;QAEA,IAAIX,IAAIE,IAAI,CAACJ,UAAU,KAAKA,WAAWQ,MAAM,CAACK,IAAI,EAAE;YAClD,OAAO;gBACLT,MAAM;YACR;QACF;QAEA,wCAAwC;QACxC,uBAAuB;QACvB,wCAAwC;QAExC,KAAK,MAAMc,UAAUlB,WAAWQ,MAAM,CAACW,KAAK,CAACC,EAAE,CAAE;YAC/C,MAAMC,aAAa,MAAMH,OAAO;gBAAEnB;gBAAMK;YAAK;YAE7C,IAAIiB,YAAY;gBACdlB,OAAOC,IAAI,GAAGiB,WAAWjB,IAAI;gBAC7BD,OAAOmB,GAAG,GAAGD,WAAWC,GAAG;gBAE3B;YACF;QACF;QAEAnB,OAAOH,UAAU,GAAGE,IAAIE,IAAI,CAACJ,UAAU;QACvCG,OAAOoB,QAAQ,GAAGrB,IAAIE,IAAI,CAACoB,SAAS;QAEpC,IAAI,CAACrB,OAAOC,IAAI,EAAE;YAChBD,OAAOC,IAAI,GAAGA;YAEd,IAAIH,cAAc;gBAChB,MAAMwB,UAAU5B,UAAUI;gBAC1B,IAAIwB,SAAS;oBACXtB,OAAOmB,GAAG,GAAGG,QAAQH,GAAG;gBAC1B;gBACA,IAAI,CAACtB,WAAWQ,MAAM,CAACO,IAAI,CAACW,wBAAwB,EAAE;oBACpDvB,OAAOwB,KAAK,GAAG1B;gBACjB;YACF;QACF;IACF;IAEA,wCAAwC;IACxC,wBAAwB;IACxB,wCAAwC;IAExC,IAAID,WAAWQ,MAAM,CAACW,KAAK,EAAES,SAASC,QAAQ;QAC5C,KAAK,MAAMC,QAAQ9B,WAAWQ,MAAM,CAACW,KAAK,CAACS,OAAO,CAAE;YAClDzB,SACE,AAAC,MAAM2B,KAAK;gBACV9B,YAAYA,YAAYQ;gBACxBuB,SAAS7B,IAAI6B,OAAO;gBACpB7B;gBACA8B,UAAU7B;YACZ,MAAOA;QACX;IACF;IAEA,OAAOA;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../src/auth/operations/me.ts"],"sourcesContent":["// @ts-strict-ignore\nimport { decodeJwt } from 'jose'\n\nimport type { Collection } from '../../collections/config/types.js'\nimport type { PayloadRequest } from '../../types/index.js'\nimport type { ClientUser, User } from '../types.js'\n\nexport type MeOperationResult = {\n collection?: string\n exp?: number\n /** @deprecated\n * use:\n * ```ts\n * user._strategy\n * ```\n */\n strategy?: string\n token?: string\n user?: ClientUser\n}\n\nexport type Arguments = {\n collection: Collection\n currentToken?: string\n req: PayloadRequest\n}\n\nexport const meOperation = async (args: Arguments): Promise<MeOperationResult> => {\n const { collection, currentToken, req } = args\n\n let result: MeOperationResult = {\n user: null,\n }\n\n if (req.user) {\n const { pathname } = req\n const isGraphQL = pathname === `/api${req.payload.config.routes.graphQL}`\n\n const user = (await req.payload.findByID({\n id: req.user.id,\n collection: collection.config.slug,\n depth: isGraphQL ? 0 : collection.config.auth.depth,\n overrideAccess: false,\n req,\n showHiddenFields: false,\n })) as User\n\n if (user) {\n user.collection = collection.config.slug\n user._strategy = req.user._strategy\n }\n\n if (req.user.collection !== collection.config.slug) {\n return {\n user: null,\n }\n }\n\n // /////////////////////////////////////\n // me hook - Collection\n // /////////////////////////////////////\n\n for (const meHook of collection.config.hooks.me) {\n const hookResult = await meHook({ args, user })\n\n if (hookResult) {\n result.user = hookResult.user\n result.exp = hookResult.exp\n\n break\n }\n }\n\n result.collection = req.user.collection\n /** @deprecated\n * use:\n * ```ts\n * user._strategy\n * ```\n */\n result.strategy = req.user._strategy\n\n if (!result.user) {\n result.user = user\n\n if (currentToken) {\n const decoded = decodeJwt(currentToken)\n if (decoded) {\n result.exp = decoded.exp\n }\n if (!collection.config.auth.removeTokenFromResponses) {\n result.token = currentToken\n }\n }\n }\n }\n\n // /////////////////////////////////////\n // After Me - Collection\n // /////////////////////////////////////\n\n if (collection.config.hooks?.afterMe?.length) {\n for (const hook of collection.config.hooks.afterMe) {\n result =\n (await hook({\n collection: collection?.config,\n context: req.context,\n req,\n response: result,\n })) || result\n }\n }\n\n return result\n}\n"],"names":["decodeJwt","meOperation","args","collection","currentToken","req","result","user","pathname","isGraphQL","payload","config","routes","graphQL","findByID","id","slug","depth","auth","overrideAccess","showHiddenFields","_strategy","meHook","hooks","me","hookResult","exp","strategy","decoded","removeTokenFromResponses","token","afterMe","length","hook","context","response"],"mappings":"AAAA,oBAAoB;AACpB,SAASA,SAAS,QAAQ,OAAM;AA0BhC,OAAO,MAAMC,cAAc,OAAOC;IAChC,MAAM,EAAEC,UAAU,EAAEC,YAAY,EAAEC,GAAG,EAAE,GAAGH;IAE1C,IAAII,SAA4B;QAC9BC,MAAM;IACR;IAEA,IAAIF,IAAIE,IAAI,EAAE;QACZ,MAAM,EAAEC,QAAQ,EAAE,GAAGH;QACrB,MAAMI,YAAYD,aAAa,CAAC,IAAI,EAAEH,IAAIK,OAAO,CAACC,MAAM,CAACC,MAAM,CAACC,OAAO,EAAE;QAEzE,MAAMN,OAAQ,MAAMF,IAAIK,OAAO,CAACI,QAAQ,CAAC;YACvCC,IAAIV,IAAIE,IAAI,CAACQ,EAAE;YACfZ,YAAYA,WAAWQ,MAAM,CAACK,IAAI;YAClCC,OAAOR,YAAY,IAAIN,WAAWQ,MAAM,CAACO,IAAI,CAACD,KAAK;YACnDE,gBAAgB;YAChBd;YACAe,kBAAkB;QACpB;QAEA,IAAIb,MAAM;YACRA,KAAKJ,UAAU,GAAGA,WAAWQ,MAAM,CAACK,IAAI;YACxCT,KAAKc,SAAS,GAAGhB,IAAIE,IAAI,CAACc,SAAS;QACrC;QAEA,IAAIhB,IAAIE,IAAI,CAACJ,UAAU,KAAKA,WAAWQ,MAAM,CAACK,IAAI,EAAE;YAClD,OAAO;gBACLT,MAAM;YACR;QACF;QAEA,wCAAwC;QACxC,uBAAuB;QACvB,wCAAwC;QAExC,KAAK,MAAMe,UAAUnB,WAAWQ,MAAM,CAACY,KAAK,CAACC,EAAE,CAAE;YAC/C,MAAMC,aAAa,MAAMH,OAAO;gBAAEpB;gBAAMK;YAAK;YAE7C,IAAIkB,YAAY;gBACdnB,OAAOC,IAAI,GAAGkB,WAAWlB,IAAI;gBAC7BD,OAAOoB,GAAG,GAAGD,WAAWC,GAAG;gBAE3B;YACF;QACF;QAEApB,OAAOH,UAAU,GAAGE,IAAIE,IAAI,CAACJ,UAAU;QACvC;;;;;KAKC,GACDG,OAAOqB,QAAQ,GAAGtB,IAAIE,IAAI,CAACc,SAAS;QAEpC,IAAI,CAACf,OAAOC,IAAI,EAAE;YAChBD,OAAOC,IAAI,GAAGA;YAEd,IAAIH,cAAc;gBAChB,MAAMwB,UAAU5B,UAAUI;gBAC1B,IAAIwB,SAAS;oBACXtB,OAAOoB,GAAG,GAAGE,QAAQF,GAAG;gBAC1B;gBACA,IAAI,CAACvB,WAAWQ,MAAM,CAACO,IAAI,CAACW,wBAAwB,EAAE;oBACpDvB,OAAOwB,KAAK,GAAG1B;gBACjB;YACF;QACF;IACF;IAEA,wCAAwC;IACxC,wBAAwB;IACxB,wCAAwC;IAExC,IAAID,WAAWQ,MAAM,CAACY,KAAK,EAAEQ,SAASC,QAAQ;QAC5C,KAAK,MAAMC,QAAQ9B,WAAWQ,MAAM,CAACY,KAAK,CAACQ,OAAO,CAAE;YAClDzB,SACE,AAAC,MAAM2B,KAAK;gBACV9B,YAAYA,YAAYQ;gBACxBuB,SAAS7B,IAAI6B,OAAO;gBACpB7B;gBACA8B,UAAU7B;YACZ,MAAOA;QACX;IACF;IAEA,OAAOA;AACT,EAAC"}
@@ -4,6 +4,12 @@ export type Result = {
4
4
  exp: number;
5
5
  refreshedToken: string;
6
6
  setCookie?: boolean;
7
+ /** @deprecated
8
+ * use:
9
+ * ```ts
10
+ * user._strategy
11
+ * ```
12
+ */
7
13
  strategy?: string;
8
14
  user: Document;
9
15
  };
@@ -1 +1 @@
1
- {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/refresh.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAuB,UAAU,EAAE,MAAM,mCAAmC,CAAA;AACxF,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAUpE,MAAM,MAAM,MAAM,GAAG;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,QAAQ,CAAA;CACf,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,gBAAgB,iBAAwB,SAAS,KAAG,OAAO,CAAC,MAAM,CAmI9E,CAAA"}
1
+ {"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/refresh.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAUpE,MAAM,MAAM,MAAM,GAAG;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,QAAQ,CAAA;CACf,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,gBAAgB,iBAAwB,SAAS,KAAG,OAAO,CAAC,MAAM,CA0I9E,CAAA"}
@@ -42,6 +42,7 @@ export const refreshOperation = async (incomingArgs)=>{
42
42
  });
43
43
  if (user) {
44
44
  user.collection = args.req.user.collection;
45
+ user._strategy = args.req.user._strategy;
45
46
  }
46
47
  let result;
47
48
  // /////////////////////////////////////
@@ -72,7 +73,12 @@ export const refreshOperation = async (incomingArgs)=>{
72
73
  exp,
73
74
  refreshedToken,
74
75
  setCookie: true,
75
- strategy: args.req.user._strategy,
76
+ /** @deprecated
77
+ * use:
78
+ * ```ts
79
+ * user._strategy
80
+ * ```
81
+ */ strategy: args.req.user._strategy,
76
82
  user
77
83
  };
78
84
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/operations/refresh.ts"],"sourcesContent":["// @ts-strict-ignore\nimport url from 'url'\n\nimport type { BeforeOperationHook, Collection } from '../../collections/config/types.js'\nimport type { Document, PayloadRequest } from '../../types/index.js'\n\nimport { buildAfterOperation } from '../../collections/operations/utils.js'\nimport { Forbidden } from '../../errors/index.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { getFieldsToSign } from '../getFieldsToSign.js'\nimport { jwtSign } from '../jwt.js'\n\nexport type Result = {\n exp: number\n refreshedToken: string\n setCookie?: boolean\n strategy?: string\n user: Document\n}\n\nexport type Arguments = {\n collection: Collection\n req: PayloadRequest\n}\n\nexport const refreshOperation = async (incomingArgs: Arguments): Promise<Result> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = await initTransaction(args.req)\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n if (args.collection.config.hooks?.beforeOperation?.length) {\n for (const hook of args.collection.config.hooks.beforeOperation) {\n args =\n (await hook({\n args,\n collection: args.collection?.config,\n context: args.req.context,\n operation: 'refresh',\n req: args.req,\n })) || args\n }\n }\n\n // /////////////////////////////////////\n // Refresh\n // /////////////////////////////////////\n\n const {\n collection: { config: collectionConfig },\n req,\n req: {\n payload: { config, secret },\n },\n } = args\n\n if (!args.req.user) {\n throw new Forbidden(args.req.t)\n }\n\n const parsedURL = url.parse(args.req.url)\n const isGraphQL = parsedURL.pathname === config.routes.graphQL\n\n const user = await args.req.payload.findByID({\n id: args.req.user.id,\n collection: args.req.user.collection,\n depth: isGraphQL ? 0 : args.collection.config.auth.depth,\n req: args.req,\n })\n\n if (user) {\n user.collection = args.req.user.collection\n }\n\n let result: Result\n\n // /////////////////////////////////////\n // refresh hook - Collection\n // /////////////////////////////////////\n\n for (const refreshHook of args.collection.config.hooks.refresh) {\n const hookResult = await refreshHook({ args, user })\n\n if (hookResult) {\n result = hookResult\n break\n }\n }\n\n if (!result) {\n const fieldsToSign = getFieldsToSign({\n collectionConfig,\n email: user?.email as string,\n user: args?.req?.user,\n })\n\n const { exp, token: refreshedToken } = await jwtSign({\n fieldsToSign,\n secret,\n tokenExpiration: collectionConfig.auth.tokenExpiration,\n })\n\n result = {\n exp,\n refreshedToken,\n setCookie: true,\n strategy: args.req.user._strategy,\n user,\n }\n }\n\n // /////////////////////////////////////\n // After Refresh - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRefresh?.length) {\n for (const hook of collectionConfig.hooks.afterRefresh) {\n result =\n (await hook({\n collection: args.collection?.config,\n context: args.req.context,\n exp: result.exp,\n req: args.req,\n token: result.refreshedToken,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: args.collection?.config,\n operation: 'refresh',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["url","buildAfterOperation","Forbidden","commitTransaction","initTransaction","killTransaction","getFieldsToSign","jwtSign","refreshOperation","incomingArgs","args","shouldCommit","req","collection","config","hooks","beforeOperation","length","hook","context","operation","collectionConfig","payload","secret","user","t","parsedURL","parse","isGraphQL","pathname","routes","graphQL","findByID","id","depth","auth","result","refreshHook","refresh","hookResult","fieldsToSign","email","exp","token","refreshedToken","tokenExpiration","setCookie","strategy","_strategy","afterRefresh","error"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/auth/operations/refresh.ts"],"sourcesContent":["// @ts-strict-ignore\nimport url from 'url'\n\nimport type { Collection } from '../../collections/config/types.js'\nimport type { Document, PayloadRequest } from '../../types/index.js'\n\nimport { buildAfterOperation } from '../../collections/operations/utils.js'\nimport { Forbidden } from '../../errors/index.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { getFieldsToSign } from '../getFieldsToSign.js'\nimport { jwtSign } from '../jwt.js'\n\nexport type Result = {\n exp: number\n refreshedToken: string\n setCookie?: boolean\n /** @deprecated\n * use:\n * ```ts\n * user._strategy\n * ```\n */\n strategy?: string\n user: Document\n}\n\nexport type Arguments = {\n collection: Collection\n req: PayloadRequest\n}\n\nexport const refreshOperation = async (incomingArgs: Arguments): Promise<Result> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = await initTransaction(args.req)\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n if (args.collection.config.hooks?.beforeOperation?.length) {\n for (const hook of args.collection.config.hooks.beforeOperation) {\n args =\n (await hook({\n args,\n collection: args.collection?.config,\n context: args.req.context,\n operation: 'refresh',\n req: args.req,\n })) || args\n }\n }\n\n // /////////////////////////////////////\n // Refresh\n // /////////////////////////////////////\n\n const {\n collection: { config: collectionConfig },\n req,\n req: {\n payload: { config, secret },\n },\n } = args\n\n if (!args.req.user) {\n throw new Forbidden(args.req.t)\n }\n\n const parsedURL = url.parse(args.req.url)\n const isGraphQL = parsedURL.pathname === config.routes.graphQL\n\n const user = await args.req.payload.findByID({\n id: args.req.user.id,\n collection: args.req.user.collection,\n depth: isGraphQL ? 0 : args.collection.config.auth.depth,\n req: args.req,\n })\n\n if (user) {\n user.collection = args.req.user.collection\n user._strategy = args.req.user._strategy\n }\n\n let result: Result\n\n // /////////////////////////////////////\n // refresh hook - Collection\n // /////////////////////////////////////\n\n for (const refreshHook of args.collection.config.hooks.refresh) {\n const hookResult = await refreshHook({ args, user })\n\n if (hookResult) {\n result = hookResult\n break\n }\n }\n\n if (!result) {\n const fieldsToSign = getFieldsToSign({\n collectionConfig,\n email: user?.email as string,\n user: args?.req?.user,\n })\n\n const { exp, token: refreshedToken } = await jwtSign({\n fieldsToSign,\n secret,\n tokenExpiration: collectionConfig.auth.tokenExpiration,\n })\n\n result = {\n exp,\n refreshedToken,\n setCookie: true,\n /** @deprecated\n * use:\n * ```ts\n * user._strategy\n * ```\n */\n strategy: args.req.user._strategy,\n user,\n }\n }\n\n // /////////////////////////////////////\n // After Refresh - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.afterRefresh?.length) {\n for (const hook of collectionConfig.hooks.afterRefresh) {\n result =\n (await hook({\n collection: args.collection?.config,\n context: args.req.context,\n exp: result.exp,\n req: args.req,\n token: result.refreshedToken,\n })) || result\n }\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: args.collection?.config,\n operation: 'refresh',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["url","buildAfterOperation","Forbidden","commitTransaction","initTransaction","killTransaction","getFieldsToSign","jwtSign","refreshOperation","incomingArgs","args","shouldCommit","req","collection","config","hooks","beforeOperation","length","hook","context","operation","collectionConfig","payload","secret","user","t","parsedURL","parse","isGraphQL","pathname","routes","graphQL","findByID","id","depth","auth","_strategy","result","refreshHook","refresh","hookResult","fieldsToSign","email","exp","token","refreshedToken","tokenExpiration","setCookie","strategy","afterRefresh","error"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"registerFirstUser.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/registerFirstUser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gCAAgC,EAChC,UAAU,EACV,sBAAsB,EACtB,8BAA8B,EAC/B,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,sBAAsB,CAAA;AAQtE,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,gCAAgC,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,GAChE,8BAA8B,CAAC,KAAK,CAAC,CAAA;IACvC,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,MAAM,CAAC,KAAK,IAAI;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,KAAK,CAAA;CACb,CAAA;AAED,eAAO,MAAM,0BAA0B,GAAU,KAAK,SAAS,cAAc,QACrE,SAAS,CAAC,KAAK,CAAC,KACrB,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAoF/C,CAAA"}
1
+ {"version":3,"file":"registerFirstUser.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/registerFirstUser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gCAAgC,EAChC,UAAU,EACV,sBAAsB,EACtB,8BAA8B,EAC/B,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,sBAAsB,CAAA;AAQtE,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,gCAAgC,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,GAChE,8BAA8B,CAAC,KAAK,CAAC,CAAA;IACvC,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,MAAM,CAAC,KAAK,IAAI;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,KAAK,CAAA;CACb,CAAA;AAED,eAAO,MAAM,0BAA0B,GAAU,KAAK,SAAS,cAAc,QACrE,SAAS,CAAC,KAAK,CAAC,KACrB,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAuF/C,CAAA"}
@@ -52,6 +52,8 @@ export const registerFirstUserOperation = async (args)=>{
52
52
  collection: slug,
53
53
  req
54
54
  });
55
+ result.collection = slug;
56
+ result._strategy = 'local-jwt';
55
57
  if (shouldCommit) {
56
58
  await commitTransaction(req);
57
59
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/operations/registerFirstUser.ts"],"sourcesContent":["import type {\n AuthOperationsFromCollectionSlug,\n Collection,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\n} from '../../collections/config/types.js'\nimport type { CollectionSlug } from '../../index.js'\nimport type { PayloadRequest, SelectType } from '../../types/index.js'\n\nimport { Forbidden } from '../../errors/index.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { ensureUsernameOrEmail } from '../ensureUsernameOrEmail.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n collection: Collection\n data: AuthOperationsFromCollectionSlug<TSlug>['registerFirstUser'] &\n RequiredDataFromCollectionSlug<TSlug>\n req: PayloadRequest\n}\n\nexport type Result<TData> = {\n exp?: number\n token?: string\n user?: TData\n}\n\nexport const registerFirstUserOperation = async <TSlug extends CollectionSlug>(\n args: Arguments<TSlug>,\n): Promise<Result<DataFromCollectionSlug<TSlug>>> => {\n const {\n collection: {\n config,\n config: {\n slug,\n auth: { verify },\n },\n },\n data,\n req,\n req: { payload },\n } = args\n\n if (config.auth.disableLocalStrategy) {\n throw new Forbidden(req.t)\n }\n\n try {\n const shouldCommit = await initTransaction(req)\n\n ensureUsernameOrEmail<TSlug>({\n authOptions: config.auth,\n collectionSlug: slug,\n data,\n operation: 'create',\n req,\n })\n\n const doc = await payload.db.findOne({\n collection: config.slug,\n req,\n })\n\n if (doc) {\n throw new Forbidden(req.t)\n }\n\n // /////////////////////////////////////\n // Register first user\n // /////////////////////////////////////\n\n const result = await payload.create<TSlug, SelectType>({\n collection: slug as TSlug,\n data,\n overrideAccess: true,\n req,\n })\n\n // auto-verify (if applicable)\n if (verify) {\n await payload.update({\n id: result.id,\n collection: slug,\n data: {\n _verified: true,\n },\n req,\n })\n }\n\n // /////////////////////////////////////\n // Log in new user\n // /////////////////////////////////////\n\n const { exp, token } = await payload.login({\n ...args,\n collection: slug,\n req,\n })\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return {\n exp,\n token,\n user: result,\n }\n } catch (error: unknown) {\n await killTransaction(req)\n throw error\n }\n}\n"],"names":["Forbidden","commitTransaction","initTransaction","killTransaction","ensureUsernameOrEmail","registerFirstUserOperation","args","collection","config","slug","auth","verify","data","req","payload","disableLocalStrategy","t","shouldCommit","authOptions","collectionSlug","operation","doc","db","findOne","result","create","overrideAccess","update","id","_verified","exp","token","login","user","error"],"mappings":"AASA,SAASA,SAAS,QAAQ,wBAAuB;AACjD,SAASC,iBAAiB,QAAQ,uCAAsC;AACxE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,qBAAqB,QAAQ,8BAA6B;AAenE,OAAO,MAAMC,6BAA6B,OACxCC;IAEA,MAAM,EACJC,YAAY,EACVC,MAAM,EACNA,QAAQ,EACNC,IAAI,EACJC,MAAM,EAAEC,MAAM,EAAE,EACjB,EACF,EACDC,IAAI,EACJC,GAAG,EACHA,KAAK,EAAEC,OAAO,EAAE,EACjB,GAAGR;IAEJ,IAAIE,OAAOE,IAAI,CAACK,oBAAoB,EAAE;QACpC,MAAM,IAAIf,UAAUa,IAAIG,CAAC;IAC3B;IAEA,IAAI;QACF,MAAMC,eAAe,MAAMf,gBAAgBW;QAE3CT,sBAA6B;YAC3Bc,aAAaV,OAAOE,IAAI;YACxBS,gBAAgBV;YAChBG;YACAQ,WAAW;YACXP;QACF;QAEA,MAAMQ,MAAM,MAAMP,QAAQQ,EAAE,CAACC,OAAO,CAAC;YACnChB,YAAYC,OAAOC,IAAI;YACvBI;QACF;QAEA,IAAIQ,KAAK;YACP,MAAM,IAAIrB,UAAUa,IAAIG,CAAC;QAC3B;QAEA,wCAAwC;QACxC,sBAAsB;QACtB,wCAAwC;QAExC,MAAMQ,SAAS,MAAMV,QAAQW,MAAM,CAAoB;YACrDlB,YAAYE;YACZG;YACAc,gBAAgB;YAChBb;QACF;QAEA,8BAA8B;QAC9B,IAAIF,QAAQ;YACV,MAAMG,QAAQa,MAAM,CAAC;gBACnBC,IAAIJ,OAAOI,EAAE;gBACbrB,YAAYE;gBACZG,MAAM;oBACJiB,WAAW;gBACb;gBACAhB;YACF;QACF;QAEA,wCAAwC;QACxC,kBAAkB;QAClB,wCAAwC;QAExC,MAAM,EAAEiB,GAAG,EAAEC,KAAK,EAAE,GAAG,MAAMjB,QAAQkB,KAAK,CAAC;YACzC,GAAG1B,IAAI;YACPC,YAAYE;YACZI;QACF;QAEA,IAAII,cAAc;YAChB,MAAMhB,kBAAkBY;QAC1B;QAEA,OAAO;YACLiB;YACAC;YACAE,MAAMT;QACR;IACF,EAAE,OAAOU,OAAgB;QACvB,MAAM/B,gBAAgBU;QACtB,MAAMqB;IACR;AACF,EAAC"}
1
+ {"version":3,"sources":["../../../src/auth/operations/registerFirstUser.ts"],"sourcesContent":["import type {\n AuthOperationsFromCollectionSlug,\n Collection,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\n} from '../../collections/config/types.js'\nimport type { CollectionSlug } from '../../index.js'\nimport type { PayloadRequest, SelectType } from '../../types/index.js'\n\nimport { Forbidden } from '../../errors/index.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { ensureUsernameOrEmail } from '../ensureUsernameOrEmail.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n collection: Collection\n data: AuthOperationsFromCollectionSlug<TSlug>['registerFirstUser'] &\n RequiredDataFromCollectionSlug<TSlug>\n req: PayloadRequest\n}\n\nexport type Result<TData> = {\n exp?: number\n token?: string\n user?: TData\n}\n\nexport const registerFirstUserOperation = async <TSlug extends CollectionSlug>(\n args: Arguments<TSlug>,\n): Promise<Result<DataFromCollectionSlug<TSlug>>> => {\n const {\n collection: {\n config,\n config: {\n slug,\n auth: { verify },\n },\n },\n data,\n req,\n req: { payload },\n } = args\n\n if (config.auth.disableLocalStrategy) {\n throw new Forbidden(req.t)\n }\n\n try {\n const shouldCommit = await initTransaction(req)\n\n ensureUsernameOrEmail<TSlug>({\n authOptions: config.auth,\n collectionSlug: slug,\n data,\n operation: 'create',\n req,\n })\n\n const doc = await payload.db.findOne({\n collection: config.slug,\n req,\n })\n\n if (doc) {\n throw new Forbidden(req.t)\n }\n\n // /////////////////////////////////////\n // Register first user\n // /////////////////////////////////////\n\n const result = await payload.create<TSlug, SelectType>({\n collection: slug as TSlug,\n data,\n overrideAccess: true,\n req,\n })\n\n // auto-verify (if applicable)\n if (verify) {\n await payload.update({\n id: result.id,\n collection: slug,\n data: {\n _verified: true,\n },\n req,\n })\n }\n\n // /////////////////////////////////////\n // Log in new user\n // /////////////////////////////////////\n\n const { exp, token } = await payload.login({\n ...args,\n collection: slug,\n req,\n })\n\n result.collection = slug\n result._strategy = 'local-jwt'\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return {\n exp,\n token,\n user: result,\n }\n } catch (error: unknown) {\n await killTransaction(req)\n throw error\n }\n}\n"],"names":["Forbidden","commitTransaction","initTransaction","killTransaction","ensureUsernameOrEmail","registerFirstUserOperation","args","collection","config","slug","auth","verify","data","req","payload","disableLocalStrategy","t","shouldCommit","authOptions","collectionSlug","operation","doc","db","findOne","result","create","overrideAccess","update","id","_verified","exp","token","login","_strategy","user","error"],"mappings":"AASA,SAASA,SAAS,QAAQ,wBAAuB;AACjD,SAASC,iBAAiB,QAAQ,uCAAsC;AACxE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,qBAAqB,QAAQ,8BAA6B;AAenE,OAAO,MAAMC,6BAA6B,OACxCC;IAEA,MAAM,EACJC,YAAY,EACVC,MAAM,EACNA,QAAQ,EACNC,IAAI,EACJC,MAAM,EAAEC,MAAM,EAAE,EACjB,EACF,EACDC,IAAI,EACJC,GAAG,EACHA,KAAK,EAAEC,OAAO,EAAE,EACjB,GAAGR;IAEJ,IAAIE,OAAOE,IAAI,CAACK,oBAAoB,EAAE;QACpC,MAAM,IAAIf,UAAUa,IAAIG,CAAC;IAC3B;IAEA,IAAI;QACF,MAAMC,eAAe,MAAMf,gBAAgBW;QAE3CT,sBAA6B;YAC3Bc,aAAaV,OAAOE,IAAI;YACxBS,gBAAgBV;YAChBG;YACAQ,WAAW;YACXP;QACF;QAEA,MAAMQ,MAAM,MAAMP,QAAQQ,EAAE,CAACC,OAAO,CAAC;YACnChB,YAAYC,OAAOC,IAAI;YACvBI;QACF;QAEA,IAAIQ,KAAK;YACP,MAAM,IAAIrB,UAAUa,IAAIG,CAAC;QAC3B;QAEA,wCAAwC;QACxC,sBAAsB;QACtB,wCAAwC;QAExC,MAAMQ,SAAS,MAAMV,QAAQW,MAAM,CAAoB;YACrDlB,YAAYE;YACZG;YACAc,gBAAgB;YAChBb;QACF;QAEA,8BAA8B;QAC9B,IAAIF,QAAQ;YACV,MAAMG,QAAQa,MAAM,CAAC;gBACnBC,IAAIJ,OAAOI,EAAE;gBACbrB,YAAYE;gBACZG,MAAM;oBACJiB,WAAW;gBACb;gBACAhB;YACF;QACF;QAEA,wCAAwC;QACxC,kBAAkB;QAClB,wCAAwC;QAExC,MAAM,EAAEiB,GAAG,EAAEC,KAAK,EAAE,GAAG,MAAMjB,QAAQkB,KAAK,CAAC;YACzC,GAAG1B,IAAI;YACPC,YAAYE;YACZI;QACF;QAEAW,OAAOjB,UAAU,GAAGE;QACpBe,OAAOS,SAAS,GAAG;QAEnB,IAAIhB,cAAc;YAChB,MAAMhB,kBAAkBY;QAC1B;QAEA,OAAO;YACLiB;YACAC;YACAG,MAAMV;QACR;IACF,EAAE,OAAOW,OAAgB;QACvB,MAAMhC,gBAAgBU;QACtB,MAAMsB;IACR;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"resetPassword.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/resetPassword.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAW1D,MAAM,MAAM,MAAM,GAAG;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAA;QAChB,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,sBAAsB,SAAgB,SAAS,KAAG,OAAO,CAAC,MAAM,CAyH5E,CAAA"}
1
+ {"version":3,"file":"resetPassword.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/resetPassword.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAW1D,MAAM,MAAM,MAAM,GAAG;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAA;QAChB,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,sBAAsB,SAAgB,SAAS,KAAG,OAAO,CAAC,MAAM,CA8H5E,CAAA"}
@@ -94,6 +94,10 @@ export const resetPasswordOperation = async (args)=>{
94
94
  if (shouldCommit) {
95
95
  await commitTransaction(req);
96
96
  }
97
+ if (fullUser) {
98
+ fullUser.collection = collectionConfig.slug;
99
+ fullUser._strategy = 'local-jwt';
100
+ }
97
101
  const result = {
98
102
  token,
99
103
  user: fullUser
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/operations/resetPassword.ts"],"sourcesContent":["import { status as httpStatus } from 'http-status'\n\nimport type { Collection } from '../../collections/config/types.js'\nimport type { PayloadRequest } from '../../types/index.js'\n\nimport { APIError, Forbidden } from '../../errors/index.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { getFieldsToSign } from '../getFieldsToSign.js'\nimport { jwtSign } from '../jwt.js'\nimport { authenticateLocalStrategy } from '../strategies/local/authenticate.js'\nimport { generatePasswordSaltHash } from '../strategies/local/generatePasswordSaltHash.js'\n\nexport type Result = {\n token?: string\n user: Record<string, unknown>\n}\n\nexport type Arguments = {\n collection: Collection\n data: {\n password: string\n token: string\n }\n depth?: number\n overrideAccess?: boolean\n req: PayloadRequest\n}\n\nexport const resetPasswordOperation = async (args: Arguments): Promise<Result> => {\n const {\n collection: { config: collectionConfig },\n data,\n depth,\n overrideAccess,\n req: {\n payload: { secret },\n payload,\n },\n req,\n } = args\n\n if (\n !Object.prototype.hasOwnProperty.call(data, 'token') ||\n !Object.prototype.hasOwnProperty.call(data, 'password')\n ) {\n throw new APIError('Missing required data.', httpStatus.BAD_REQUEST)\n }\n\n if (collectionConfig.auth.disableLocalStrategy) {\n throw new Forbidden(req.t)\n }\n\n try {\n const shouldCommit = await initTransaction(req)\n\n // /////////////////////////////////////\n // Reset Password\n // /////////////////////////////////////\n\n const user = await payload.db.findOne<any>({\n collection: collectionConfig.slug,\n req,\n where: {\n resetPasswordExpiration: { greater_than: new Date().toISOString() },\n resetPasswordToken: { equals: data.token },\n },\n })\n\n if (!user) {\n throw new APIError('Token is either invalid or has expired.', httpStatus.FORBIDDEN)\n }\n\n // TODO: replace this method\n const { hash, salt } = await generatePasswordSaltHash({\n collection: collectionConfig,\n password: data.password,\n req,\n })\n\n user.salt = salt\n user.hash = hash\n\n user.resetPasswordExpiration = new Date().toISOString()\n\n if (collectionConfig.auth.verify) {\n user._verified = Boolean(user._verified)\n }\n // /////////////////////////////////////\n // beforeValidate - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeValidate?.length) {\n for (const hook of collectionConfig.hooks.beforeValidate) {\n await hook({\n collection: args.collection?.config,\n context: req.context,\n data: user,\n operation: 'update',\n req,\n })\n }\n }\n\n // /////////////////////////////////////\n // Update new password\n // /////////////////////////////////////\n\n const doc = await payload.db.updateOne({\n id: user.id,\n collection: collectionConfig.slug,\n data: user,\n req,\n })\n\n await authenticateLocalStrategy({ doc, password: data.password })\n\n const fieldsToSign = getFieldsToSign({\n collectionConfig,\n email: user.email,\n user,\n })\n\n const { token } = await jwtSign({\n fieldsToSign,\n secret,\n tokenExpiration: collectionConfig.auth.tokenExpiration,\n })\n\n const fullUser = await payload.findByID({\n id: user.id,\n collection: collectionConfig.slug,\n depth,\n overrideAccess,\n req,\n })\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n const result = {\n token,\n user: fullUser,\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(req)\n throw error\n }\n}\n"],"names":["status","httpStatus","APIError","Forbidden","commitTransaction","initTransaction","killTransaction","getFieldsToSign","jwtSign","authenticateLocalStrategy","generatePasswordSaltHash","resetPasswordOperation","args","collection","config","collectionConfig","data","depth","overrideAccess","req","payload","secret","Object","prototype","hasOwnProperty","call","BAD_REQUEST","auth","disableLocalStrategy","t","shouldCommit","user","db","findOne","slug","where","resetPasswordExpiration","greater_than","Date","toISOString","resetPasswordToken","equals","token","FORBIDDEN","hash","salt","password","verify","_verified","Boolean","hooks","beforeValidate","length","hook","context","operation","doc","updateOne","id","fieldsToSign","email","tokenExpiration","fullUser","findByID","result","error"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/auth/operations/resetPassword.ts"],"sourcesContent":["import { status as httpStatus } from 'http-status'\n\nimport type { Collection } from '../../collections/config/types.js'\nimport type { PayloadRequest } from '../../types/index.js'\n\nimport { APIError, Forbidden } from '../../errors/index.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { getFieldsToSign } from '../getFieldsToSign.js'\nimport { jwtSign } from '../jwt.js'\nimport { authenticateLocalStrategy } from '../strategies/local/authenticate.js'\nimport { generatePasswordSaltHash } from '../strategies/local/generatePasswordSaltHash.js'\n\nexport type Result = {\n token?: string\n user: Record<string, unknown>\n}\n\nexport type Arguments = {\n collection: Collection\n data: {\n password: string\n token: string\n }\n depth?: number\n overrideAccess?: boolean\n req: PayloadRequest\n}\n\nexport const resetPasswordOperation = async (args: Arguments): Promise<Result> => {\n const {\n collection: { config: collectionConfig },\n data,\n depth,\n overrideAccess,\n req: {\n payload: { secret },\n payload,\n },\n req,\n } = args\n\n if (\n !Object.prototype.hasOwnProperty.call(data, 'token') ||\n !Object.prototype.hasOwnProperty.call(data, 'password')\n ) {\n throw new APIError('Missing required data.', httpStatus.BAD_REQUEST)\n }\n\n if (collectionConfig.auth.disableLocalStrategy) {\n throw new Forbidden(req.t)\n }\n\n try {\n const shouldCommit = await initTransaction(req)\n\n // /////////////////////////////////////\n // Reset Password\n // /////////////////////////////////////\n\n const user = await payload.db.findOne<any>({\n collection: collectionConfig.slug,\n req,\n where: {\n resetPasswordExpiration: { greater_than: new Date().toISOString() },\n resetPasswordToken: { equals: data.token },\n },\n })\n\n if (!user) {\n throw new APIError('Token is either invalid or has expired.', httpStatus.FORBIDDEN)\n }\n\n // TODO: replace this method\n const { hash, salt } = await generatePasswordSaltHash({\n collection: collectionConfig,\n password: data.password,\n req,\n })\n\n user.salt = salt\n user.hash = hash\n\n user.resetPasswordExpiration = new Date().toISOString()\n\n if (collectionConfig.auth.verify) {\n user._verified = Boolean(user._verified)\n }\n // /////////////////////////////////////\n // beforeValidate - Collection\n // /////////////////////////////////////\n\n if (collectionConfig.hooks?.beforeValidate?.length) {\n for (const hook of collectionConfig.hooks.beforeValidate) {\n await hook({\n collection: args.collection?.config,\n context: req.context,\n data: user,\n operation: 'update',\n req,\n })\n }\n }\n\n // /////////////////////////////////////\n // Update new password\n // /////////////////////////////////////\n\n const doc = await payload.db.updateOne({\n id: user.id,\n collection: collectionConfig.slug,\n data: user,\n req,\n })\n\n await authenticateLocalStrategy({ doc, password: data.password })\n\n const fieldsToSign = getFieldsToSign({\n collectionConfig,\n email: user.email,\n user,\n })\n\n const { token } = await jwtSign({\n fieldsToSign,\n secret,\n tokenExpiration: collectionConfig.auth.tokenExpiration,\n })\n\n const fullUser = await payload.findByID({\n id: user.id,\n collection: collectionConfig.slug,\n depth,\n overrideAccess,\n req,\n })\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n if (fullUser) {\n fullUser.collection = collectionConfig.slug\n fullUser._strategy = 'local-jwt'\n }\n\n const result = {\n token,\n user: fullUser,\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(req)\n throw error\n }\n}\n"],"names":["status","httpStatus","APIError","Forbidden","commitTransaction","initTransaction","killTransaction","getFieldsToSign","jwtSign","authenticateLocalStrategy","generatePasswordSaltHash","resetPasswordOperation","args","collection","config","collectionConfig","data","depth","overrideAccess","req","payload","secret","Object","prototype","hasOwnProperty","call","BAD_REQUEST","auth","disableLocalStrategy","t","shouldCommit","user","db","findOne","slug","where","resetPasswordExpiration","greater_than","Date","toISOString","resetPasswordToken","equals","token","FORBIDDEN","hash","salt","password","verify","_verified","Boolean","hooks","beforeValidate","length","hook","context","operation","doc","updateOne","id","fieldsToSign","email","tokenExpiration","fullUser","findByID","_strategy","result","error"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../../src/auth/strategies/jwt.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAQ,MAAM,aAAa,CAAA;AAqE7D;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,oBA4C/B,CAAA"}
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../../src/auth/strategies/jwt.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAA4B,MAAM,aAAa,CAAA;AAqEjF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,oBA4C/B,CAAA"}
@@ -39,7 +39,7 @@ async function autoLogin({ isGraphQL, payload, strategyName = 'local-jwt' }) {
39
39
  user.collection = collection.config.slug;
40
40
  user._strategy = strategyName;
41
41
  return {
42
- user: user
42
+ user
43
43
  };
44
44
  }
45
45
  /**
@@ -74,7 +74,7 @@ async function autoLogin({ isGraphQL, payload, strategyName = 'local-jwt' }) {
74
74
  user.collection = collection.config.slug;
75
75
  user._strategy = strategyName;
76
76
  return {
77
- user: user
77
+ user
78
78
  };
79
79
  } else {
80
80
  if (headers.get('DisableAutologin') !== 'true') {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/strategies/jwt.ts"],"sourcesContent":["// @ts-strict-ignore\nimport { jwtVerify } from 'jose'\n\nimport type { Payload, Where } from '../../types/index.js'\nimport type { AuthStrategyFunction, User } from '../index.js'\n\nimport { extractJWT } from '../extractJWT.js'\n\ntype JWTToken = {\n collection: string\n id: string\n}\n\nasync function autoLogin({\n isGraphQL,\n payload,\n strategyName = 'local-jwt',\n}: {\n isGraphQL: boolean\n payload: Payload\n strategyName?: string\n}): Promise<{\n user: null | User\n}> {\n if (\n typeof payload?.config?.admin?.autoLogin !== 'object' ||\n payload.config.admin?.autoLogin.prefillOnly ||\n !payload?.config?.admin?.autoLogin ||\n (!payload.config.admin?.autoLogin.email && !payload.config.admin?.autoLogin.username)\n ) {\n return { user: null }\n }\n\n const collection = payload.collections[payload.config.admin.user]\n\n const where: Where = {\n or: [],\n }\n if (payload.config.admin?.autoLogin.email) {\n where.or?.push({\n email: {\n equals: payload.config.admin?.autoLogin.email,\n },\n })\n } else if (payload.config.admin?.autoLogin.username) {\n where.or?.push({\n username: {\n equals: payload.config.admin?.autoLogin.username,\n },\n })\n }\n\n const user = (\n await payload.find({\n collection: collection.config.slug,\n depth: isGraphQL ? 0 : collection.config.auth.depth,\n limit: 1,\n pagination: false,\n where,\n })\n ).docs[0]\n\n if (!user) {\n return { user: null }\n }\n user.collection = collection.config.slug\n user._strategy = strategyName\n\n return {\n user: user as User,\n }\n}\n\n/**\n * Authentication strategy function for JWT tokens\n */\nexport const JWTAuthentication: AuthStrategyFunction = async ({\n headers,\n isGraphQL = false,\n payload,\n strategyName = 'local-jwt',\n}) => {\n try {\n const token = extractJWT({ headers, payload })\n\n if (!token) {\n if (headers.get('DisableAutologin') !== 'true') {\n return await autoLogin({ isGraphQL, payload, strategyName })\n }\n return { user: null }\n }\n\n const secretKey = new TextEncoder().encode(payload.secret)\n const { payload: decodedPayload } = await jwtVerify<JWTToken>(token, secretKey)\n const collection = payload.collections[decodedPayload.collection]\n\n const user = await payload.findByID({\n id: decodedPayload.id,\n collection: decodedPayload.collection,\n depth: isGraphQL ? 0 : collection.config.auth.depth,\n })\n\n if (user && (!collection.config.auth.verify || user._verified)) {\n user.collection = collection.config.slug\n user._strategy = strategyName\n return {\n user: user as User,\n }\n } else {\n if (headers.get('DisableAutologin') !== 'true') {\n return await autoLogin({ isGraphQL, payload, strategyName })\n }\n return { user: null }\n }\n } catch (ignore) {\n if (headers.get('DisableAutologin') !== 'true') {\n return await autoLogin({ isGraphQL, payload, strategyName })\n }\n return { user: null }\n }\n}\n"],"names":["jwtVerify","extractJWT","autoLogin","isGraphQL","payload","strategyName","config","admin","prefillOnly","email","username","user","collection","collections","where","or","push","equals","find","slug","depth","auth","limit","pagination","docs","_strategy","JWTAuthentication","headers","token","get","secretKey","TextEncoder","encode","secret","decodedPayload","findByID","id","verify","_verified","ignore"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/auth/strategies/jwt.ts"],"sourcesContent":["// @ts-strict-ignore\nimport { jwtVerify } from 'jose'\n\nimport type { Payload, Where } from '../../types/index.js'\nimport type { AuthStrategyFunction, AuthStrategyResult, User } from '../index.js'\n\nimport { extractJWT } from '../extractJWT.js'\n\ntype JWTToken = {\n collection: string\n id: string\n}\n\nasync function autoLogin({\n isGraphQL,\n payload,\n strategyName = 'local-jwt',\n}: {\n isGraphQL: boolean\n payload: Payload\n strategyName?: string\n}): Promise<{\n user: AuthStrategyResult['user']\n}> {\n if (\n typeof payload?.config?.admin?.autoLogin !== 'object' ||\n payload.config.admin?.autoLogin.prefillOnly ||\n !payload?.config?.admin?.autoLogin ||\n (!payload.config.admin?.autoLogin.email && !payload.config.admin?.autoLogin.username)\n ) {\n return { user: null }\n }\n\n const collection = payload.collections[payload.config.admin.user]\n\n const where: Where = {\n or: [],\n }\n if (payload.config.admin?.autoLogin.email) {\n where.or?.push({\n email: {\n equals: payload.config.admin?.autoLogin.email,\n },\n })\n } else if (payload.config.admin?.autoLogin.username) {\n where.or?.push({\n username: {\n equals: payload.config.admin?.autoLogin.username,\n },\n })\n }\n\n const user = (\n await payload.find({\n collection: collection.config.slug,\n depth: isGraphQL ? 0 : collection.config.auth.depth,\n limit: 1,\n pagination: false,\n where,\n })\n ).docs[0] as AuthStrategyResult['user']\n\n if (!user) {\n return { user: null }\n }\n user.collection = collection.config.slug\n user._strategy = strategyName\n\n return {\n user,\n }\n}\n\n/**\n * Authentication strategy function for JWT tokens\n */\nexport const JWTAuthentication: AuthStrategyFunction = async ({\n headers,\n isGraphQL = false,\n payload,\n strategyName = 'local-jwt',\n}) => {\n try {\n const token = extractJWT({ headers, payload })\n\n if (!token) {\n if (headers.get('DisableAutologin') !== 'true') {\n return await autoLogin({ isGraphQL, payload, strategyName })\n }\n return { user: null }\n }\n\n const secretKey = new TextEncoder().encode(payload.secret)\n const { payload: decodedPayload } = await jwtVerify<JWTToken>(token, secretKey)\n const collection = payload.collections[decodedPayload.collection]\n\n const user = (await payload.findByID({\n id: decodedPayload.id,\n collection: decodedPayload.collection,\n depth: isGraphQL ? 0 : collection.config.auth.depth,\n })) as AuthStrategyResult['user']\n\n if (user && (!collection.config.auth.verify || user._verified)) {\n user.collection = collection.config.slug\n user._strategy = strategyName\n return {\n user,\n }\n } else {\n if (headers.get('DisableAutologin') !== 'true') {\n return await autoLogin({ isGraphQL, payload, strategyName })\n }\n return { user: null }\n }\n } catch (ignore) {\n if (headers.get('DisableAutologin') !== 'true') {\n return await autoLogin({ isGraphQL, payload, strategyName })\n }\n return { user: null }\n }\n}\n"],"names":["jwtVerify","extractJWT","autoLogin","isGraphQL","payload","strategyName","config","admin","prefillOnly","email","username","user","collection","collections","where","or","push","equals","find","slug","depth","auth","limit","pagination","docs","_strategy","JWTAuthentication","headers","token","get","secretKey","TextEncoder","encode","secret","decodedPayload","findByID","id","verify","_verified","ignore"],"mappings":"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"}
@@ -134,7 +134,10 @@ export type AuthStrategyFunctionArgs = {
134
134
  };
135
135
  export type AuthStrategyResult = {
136
136
  responseHeaders?: Headers;
137
- user: null | User;
137
+ user: ({
138
+ _strategy?: string;
139
+ collection?: string;
140
+ } & User) | null;
138
141
  };
139
142
  export type AuthStrategyFunction = (args: AuthStrategyFunctionArgs) => AuthStrategyResult | Promise<AuthStrategyResult>;
140
143
  export type AuthStrategy = {