payload 3.0.0-beta.73 → 3.0.0-beta.74

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 (116) hide show
  1. package/dist/admin/RichText.d.ts +2 -1
  2. package/dist/admin/RichText.d.ts.map +1 -1
  3. package/dist/admin/RichText.js.map +1 -1
  4. package/dist/admin/fields/Array.d.ts +3 -1
  5. package/dist/admin/fields/Array.d.ts.map +1 -1
  6. package/dist/admin/fields/Array.js.map +1 -1
  7. package/dist/admin/fields/Blocks.d.ts +3 -1
  8. package/dist/admin/fields/Blocks.d.ts.map +1 -1
  9. package/dist/admin/fields/Blocks.js.map +1 -1
  10. package/dist/admin/fields/Checkbox.d.ts +3 -1
  11. package/dist/admin/fields/Checkbox.d.ts.map +1 -1
  12. package/dist/admin/fields/Checkbox.js.map +1 -1
  13. package/dist/admin/fields/Code.d.ts +3 -1
  14. package/dist/admin/fields/Code.d.ts.map +1 -1
  15. package/dist/admin/fields/Code.js.map +1 -1
  16. package/dist/admin/fields/Date.d.ts +3 -1
  17. package/dist/admin/fields/Date.d.ts.map +1 -1
  18. package/dist/admin/fields/Date.js.map +1 -1
  19. package/dist/admin/fields/Email.d.ts +3 -1
  20. package/dist/admin/fields/Email.d.ts.map +1 -1
  21. package/dist/admin/fields/Email.js.map +1 -1
  22. package/dist/admin/fields/JSON.d.ts +3 -1
  23. package/dist/admin/fields/JSON.d.ts.map +1 -1
  24. package/dist/admin/fields/JSON.js.map +1 -1
  25. package/dist/admin/fields/Number.d.ts +3 -1
  26. package/dist/admin/fields/Number.d.ts.map +1 -1
  27. package/dist/admin/fields/Number.js.map +1 -1
  28. package/dist/admin/fields/Point.d.ts +3 -1
  29. package/dist/admin/fields/Point.d.ts.map +1 -1
  30. package/dist/admin/fields/Point.js.map +1 -1
  31. package/dist/admin/fields/Radio.d.ts +3 -1
  32. package/dist/admin/fields/Radio.d.ts.map +1 -1
  33. package/dist/admin/fields/Radio.js.map +1 -1
  34. package/dist/admin/fields/Relationship.d.ts +3 -1
  35. package/dist/admin/fields/Relationship.d.ts.map +1 -1
  36. package/dist/admin/fields/Relationship.js.map +1 -1
  37. package/dist/admin/fields/RichText.d.ts +3 -1
  38. package/dist/admin/fields/RichText.d.ts.map +1 -1
  39. package/dist/admin/fields/RichText.js.map +1 -1
  40. package/dist/admin/fields/Select.d.ts +3 -1
  41. package/dist/admin/fields/Select.d.ts.map +1 -1
  42. package/dist/admin/fields/Select.js.map +1 -1
  43. package/dist/admin/fields/Text.d.ts +3 -1
  44. package/dist/admin/fields/Text.d.ts.map +1 -1
  45. package/dist/admin/fields/Text.js.map +1 -1
  46. package/dist/admin/fields/Textarea.d.ts +3 -1
  47. package/dist/admin/fields/Textarea.d.ts.map +1 -1
  48. package/dist/admin/fields/Textarea.js.map +1 -1
  49. package/dist/admin/fields/Upload.d.ts +3 -2
  50. package/dist/admin/fields/Upload.d.ts.map +1 -1
  51. package/dist/admin/fields/Upload.js.map +1 -1
  52. package/dist/admin/forms/Form.d.ts +2 -2
  53. package/dist/admin/forms/Form.d.ts.map +1 -1
  54. package/dist/admin/forms/Form.js.map +1 -1
  55. package/dist/auth/baseFields/email.d.ts +2 -4
  56. package/dist/auth/baseFields/email.d.ts.map +1 -1
  57. package/dist/auth/baseFields/email.js +21 -21
  58. package/dist/auth/baseFields/email.js.map +1 -1
  59. package/dist/auth/baseFields/username.d.ts +2 -2
  60. package/dist/auth/baseFields/username.d.ts.map +1 -1
  61. package/dist/auth/baseFields/username.js +1 -1
  62. package/dist/auth/baseFields/username.js.map +1 -1
  63. package/dist/auth/ensureUsernameOrEmail.d.ts +17 -0
  64. package/dist/auth/ensureUsernameOrEmail.d.ts.map +1 -0
  65. package/dist/auth/ensureUsernameOrEmail.js +43 -0
  66. package/dist/auth/ensureUsernameOrEmail.js.map +1 -0
  67. package/dist/auth/getAuthFields.d.ts.map +1 -1
  68. package/dist/auth/getAuthFields.js +18 -10
  69. package/dist/auth/getAuthFields.js.map +1 -1
  70. package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
  71. package/dist/auth/operations/registerFirstUser.js +8 -0
  72. package/dist/auth/operations/registerFirstUser.js.map +1 -1
  73. package/dist/auth/types.d.ts +6 -1
  74. package/dist/auth/types.d.ts.map +1 -1
  75. package/dist/auth/types.js.map +1 -1
  76. package/dist/collections/config/defaults.d.ts.map +1 -1
  77. package/dist/collections/config/defaults.js +2 -1
  78. package/dist/collections/config/defaults.js.map +1 -1
  79. package/dist/collections/config/sanitize.d.ts.map +1 -1
  80. package/dist/collections/config/sanitize.js +17 -4
  81. package/dist/collections/config/sanitize.js.map +1 -1
  82. package/dist/collections/operations/create.d.ts.map +1 -1
  83. package/dist/collections/operations/create.js +8 -0
  84. package/dist/collections/operations/create.js.map +1 -1
  85. package/dist/collections/operations/update.d.ts.map +1 -1
  86. package/dist/collections/operations/update.js +11 -0
  87. package/dist/collections/operations/update.js.map +1 -1
  88. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  89. package/dist/collections/operations/updateByID.js +11 -0
  90. package/dist/collections/operations/updateByID.js.map +1 -1
  91. package/dist/errors/ValidationError.d.ts +6 -8
  92. package/dist/errors/ValidationError.d.ts.map +1 -1
  93. package/dist/errors/ValidationError.js.map +1 -1
  94. package/dist/errors/index.d.ts +1 -0
  95. package/dist/errors/index.d.ts.map +1 -1
  96. package/dist/errors/index.js.map +1 -1
  97. package/dist/fields/config/client.d.ts +15 -15
  98. package/dist/fields/config/client.d.ts.map +1 -1
  99. package/dist/fields/config/types.d.ts +2 -1
  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/beforeChange/promise.d.ts.map +1 -1
  103. package/dist/fields/hooks/beforeChange/promise.js +1 -0
  104. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  105. package/dist/fields/validations.d.ts +65 -74
  106. package/dist/fields/validations.d.ts.map +1 -1
  107. package/dist/fields/validations.js +20 -4
  108. package/dist/fields/validations.js.map +1 -1
  109. package/dist/index.d.ts +3 -2
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.js +1 -1
  112. package/dist/index.js.map +1 -1
  113. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  114. package/dist/utilities/configToJSONSchema.js +88 -57
  115. package/dist/utilities/configToJSONSchema.js.map +1 -1
  116. package/package.json +2 -2
@@ -1,4 +1,5 @@
1
1
  import type { TextareaField } from '../../fields/config/types.js';
2
+ import type { TextareaFieldValidation } from '../../fields/validations.js';
2
3
  import type { ErrorComponent } from '../forms/Error.js';
3
4
  import type { DescriptionComponent, FormFieldBase, LabelComponent } from '../types.js';
4
5
  export type TextareaFieldProps = {
@@ -8,8 +9,9 @@ export type TextareaFieldProps = {
8
9
  path?: string;
9
10
  placeholder?: TextareaField['admin']['placeholder'];
10
11
  rows?: number;
12
+ validate?: TextareaFieldValidation;
11
13
  width?: string;
12
- } & FormFieldBase;
14
+ } & Omit<FormFieldBase, 'validate'>;
13
15
  export type TextareaFieldLabelComponent = LabelComponent<'textarea'>;
14
16
  export type TextareaFieldDescriptionComponent = DescriptionComponent<'textarea'>;
15
17
  export type TextareaFieldErrorComponent = ErrorComponent<'textarea'>;
@@ -1 +1 @@
1
- {"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../../src/admin/fields/Textarea.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEtF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAA;IACnD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,aAAa,CAAA;AAEjB,MAAM,MAAM,2BAA2B,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;AAEpE,MAAM,MAAM,iCAAiC,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAA;AAEhF,MAAM,MAAM,2BAA2B,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA"}
1
+ {"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../../src/admin/fields/Textarea.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AACjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEtF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAA;IACnD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,uBAAuB,CAAA;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;AAEnC,MAAM,MAAM,2BAA2B,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;AAEpE,MAAM,MAAM,iCAAiC,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAA;AAEhF,MAAM,MAAM,2BAA2B,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/admin/fields/Textarea.ts"],"sourcesContent":["import type { TextareaField } from '../../fields/config/types.js'\nimport type { ErrorComponent } from '../forms/Error.js'\nimport type { DescriptionComponent, FormFieldBase, LabelComponent } from '../types.js'\n\nexport type TextareaFieldProps = {\n maxLength?: number\n minLength?: number\n name?: string\n path?: string\n placeholder?: TextareaField['admin']['placeholder']\n rows?: number\n width?: string\n} & FormFieldBase\n\nexport type TextareaFieldLabelComponent = LabelComponent<'textarea'>\n\nexport type TextareaFieldDescriptionComponent = DescriptionComponent<'textarea'>\n\nexport type TextareaFieldErrorComponent = ErrorComponent<'textarea'>\n"],"names":[],"mappings":"AAkBA,WAAoE"}
1
+ {"version":3,"sources":["../../../src/admin/fields/Textarea.ts"],"sourcesContent":["import type { TextareaField } from '../../fields/config/types.js'\nimport type { TextareaFieldValidation } from '../../fields/validations.js'\nimport type { ErrorComponent } from '../forms/Error.js'\nimport type { DescriptionComponent, FormFieldBase, LabelComponent } from '../types.js'\n\nexport type TextareaFieldProps = {\n maxLength?: number\n minLength?: number\n name?: string\n path?: string\n placeholder?: TextareaField['admin']['placeholder']\n rows?: number\n validate?: TextareaFieldValidation\n width?: string\n} & Omit<FormFieldBase, 'validate'>\n\nexport type TextareaFieldLabelComponent = LabelComponent<'textarea'>\n\nexport type TextareaFieldDescriptionComponent = DescriptionComponent<'textarea'>\n\nexport type TextareaFieldErrorComponent = ErrorComponent<'textarea'>\n"],"names":[],"mappings":"AAoBA,WAAoE"}
@@ -1,12 +1,13 @@
1
- import type { DescriptionComponent, FormFieldBase, LabelComponent, UploadField } from 'payload';
1
+ import type { DescriptionComponent, FormFieldBase, LabelComponent, UploadField, UploadFieldValidation } from 'payload';
2
2
  import type { ErrorComponent } from '../forms/Error.js';
3
3
  export type UploadFieldProps = {
4
4
  filterOptions?: UploadField['filterOptions'];
5
5
  name?: string;
6
6
  path?: string;
7
7
  relationTo?: UploadField['relationTo'];
8
+ validate?: UploadFieldValidation;
8
9
  width?: string;
9
- } & FormFieldBase;
10
+ } & Omit<FormFieldBase, 'validate'>;
10
11
  export type UploadFieldLabelComponent = LabelComponent<'upload'>;
11
12
  export type UploadFieldDescriptionComponent = DescriptionComponent<'upload'>;
12
13
  export type UploadFieldErrorComponent = ErrorComponent<'upload'>;
@@ -1 +1 @@
1
- {"version":3,"file":"Upload.d.ts","sourceRoot":"","sources":["../../../src/admin/fields/Upload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE/F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEvD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,aAAa,CAAC,EAAE,WAAW,CAAC,eAAe,CAAC,CAAA;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAA;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,aAAa,CAAA;AAEjB,MAAM,MAAM,yBAAyB,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;AAEhE,MAAM,MAAM,+BAA+B,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAA;AAE5E,MAAM,MAAM,yBAAyB,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA"}
1
+ {"version":3,"file":"Upload.d.ts","sourceRoot":"","sources":["../../../src/admin/fields/Upload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,WAAW,EACX,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEvD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,aAAa,CAAC,EAAE,WAAW,CAAC,eAAe,CAAC,CAAA;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAA;IACtC,QAAQ,CAAC,EAAE,qBAAqB,CAAA;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;AAEnC,MAAM,MAAM,yBAAyB,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;AAEhE,MAAM,MAAM,+BAA+B,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAA;AAE5E,MAAM,MAAM,yBAAyB,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/admin/fields/Upload.ts"],"sourcesContent":["import type { DescriptionComponent, FormFieldBase, LabelComponent, UploadField } from 'payload'\n\nimport type { ErrorComponent } from '../forms/Error.js'\n\nexport type UploadFieldProps = {\n filterOptions?: UploadField['filterOptions']\n name?: string\n path?: string\n relationTo?: UploadField['relationTo']\n width?: string\n} & FormFieldBase\n\nexport type UploadFieldLabelComponent = LabelComponent<'upload'>\n\nexport type UploadFieldDescriptionComponent = DescriptionComponent<'upload'>\n\nexport type UploadFieldErrorComponent = ErrorComponent<'upload'>\n"],"names":[],"mappings":"AAgBA,WAAgE"}
1
+ {"version":3,"sources":["../../../src/admin/fields/Upload.ts"],"sourcesContent":["import type {\n DescriptionComponent,\n FormFieldBase,\n LabelComponent,\n UploadField,\n UploadFieldValidation,\n} from 'payload'\n\nimport type { ErrorComponent } from '../forms/Error.js'\n\nexport type UploadFieldProps = {\n filterOptions?: UploadField['filterOptions']\n name?: string\n path?: string\n relationTo?: UploadField['relationTo']\n validate?: UploadFieldValidation\n width?: string\n} & Omit<FormFieldBase, 'validate'>\n\nexport type UploadFieldLabelComponent = LabelComponent<'upload'>\n\nexport type UploadFieldDescriptionComponent = DescriptionComponent<'upload'>\n\nexport type UploadFieldErrorComponent = ErrorComponent<'upload'>\n"],"names":[],"mappings":"AAuBA,WAAgE"}
@@ -1,4 +1,4 @@
1
- import type { ClientValidate, Field } from '../../fields/config/types.js';
1
+ import type { Field, Validate } from '../../fields/config/types.js';
2
2
  import type { Where } from '../../types/index.js';
3
3
  export type Data = {
4
4
  [key: string]: any;
@@ -21,7 +21,7 @@ export type FormField = {
21
21
  passesCondition?: boolean;
22
22
  rows?: Row[];
23
23
  valid: boolean;
24
- validate?: ClientValidate;
24
+ validate?: Validate;
25
25
  value: unknown;
26
26
  };
27
27
  export type FormState = {
@@ -1 +1 @@
1
- {"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["../../../src/admin/forms/Form.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAEjD,MAAM,MAAM,IAAI,GAAG;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,GAAG,GAAG;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,EAAE,EAAE,MAAM,CAAA;CACX,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,WAAW,CAAC,EAAE,KAAK,CAAA;IACnB,aAAa,CAAC,EAAE,mBAAmB,CAAA;IACnC,YAAY,EAAE,OAAO,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;IACd,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;CAC1B,CAAA"}
1
+ {"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["../../../src/admin/forms/Form.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AACnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAEjD,MAAM,MAAM,IAAI,GAAG;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,GAAG,GAAG;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,EAAE,EAAE,MAAM,CAAA;CACX,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,WAAW,CAAC,EAAE,KAAK,CAAA;IACnB,aAAa,CAAC,EAAE,mBAAmB,CAAA;IACnC,YAAY,EAAE,OAAO,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;IACd,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;CAC1B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/admin/forms/Form.ts"],"sourcesContent":["import type { ClientValidate, Field } from '../../fields/config/types.js'\nimport type { 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}\n\nexport type FilterOptionsResult = {\n [relation: string]: Where | boolean\n}\n\nexport type FormField = {\n disableFormData?: boolean\n errorMessage?: string\n errorPaths?: string[]\n fieldSchema?: Field\n filterOptions?: FilterOptionsResult\n initialValue: unknown\n passesCondition?: boolean\n rows?: Row[]\n valid: boolean\n validate?: ClientValidate\n value: unknown\n}\n\nexport type FormState = {\n [path: string]: FormField\n}\n"],"names":[],"mappings":"AA+BA,WAEC"}
1
+ {"version":3,"sources":["../../../src/admin/forms/Form.ts"],"sourcesContent":["import type { Field, Validate } from '../../fields/config/types.js'\nimport type { 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}\n\nexport type FilterOptionsResult = {\n [relation: string]: Where | boolean\n}\n\nexport type FormField = {\n disableFormData?: boolean\n errorMessage?: string\n errorPaths?: string[]\n fieldSchema?: Field\n filterOptions?: FilterOptionsResult\n initialValue: unknown\n passesCondition?: boolean\n rows?: Row[]\n valid: boolean\n validate?: Validate\n value: unknown\n}\n\nexport type FormState = {\n [path: string]: FormField\n}\n"],"names":[],"mappings":"AA+BA,WAEC"}
@@ -1,5 +1,3 @@
1
- import type { Field } from '../../fields/config/types.js';
2
- export declare const emailField: ({ required }: {
3
- required?: boolean;
4
- }) => Field;
1
+ import type { EmailField } from '../../fields/config/types.js';
2
+ export declare const emailFieldConfig: EmailField;
5
3
  //# sourceMappingURL=email.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/email.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAIzD,eAAO,MAAM,UAAU,iBAAyB;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,KAAG,KAqBvE,CAAA"}
1
+ {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/email.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAI9D,eAAO,MAAM,gBAAgB,EAAE,UAqB9B,CAAA"}
@@ -1,25 +1,25 @@
1
1
  import { email } from '../../fields/validations.js';
2
- export const emailField = ({ required = true })=>({
3
- name: 'email',
4
- type: 'email',
5
- admin: {
6
- components: {
7
- Field: ()=>null
8
- }
9
- },
10
- hooks: {
11
- beforeChange: [
12
- ({ value })=>{
13
- if (value) {
14
- return value.toLowerCase().trim();
15
- }
2
+ export const emailFieldConfig = {
3
+ name: 'email',
4
+ type: 'email',
5
+ admin: {
6
+ components: {
7
+ Field: ()=>null
8
+ }
9
+ },
10
+ hooks: {
11
+ beforeChange: [
12
+ ({ value })=>{
13
+ if (value) {
14
+ return value.toLowerCase().trim();
16
15
  }
17
- ]
18
- },
19
- label: ({ t })=>t('general:email'),
20
- required,
21
- unique: true,
22
- validate: email
23
- });
16
+ }
17
+ ]
18
+ },
19
+ label: ({ t })=>t('general:email'),
20
+ required: true,
21
+ unique: true,
22
+ validate: email
23
+ };
24
24
 
25
25
  //# sourceMappingURL=email.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/baseFields/email.ts"],"sourcesContent":["import type { Field } from '../../fields/config/types.js'\n\nimport { email } from '../../fields/validations.js'\n\nexport const emailField = ({ required = true }: { required?: boolean }): Field => ({\n name: 'email',\n type: 'email',\n admin: {\n components: {\n Field: () => null,\n },\n },\n hooks: {\n beforeChange: [\n ({ value }) => {\n if (value) {\n return value.toLowerCase().trim()\n }\n },\n ],\n },\n label: ({ t }) => t('general:email'),\n required,\n unique: true,\n validate: email,\n})\n"],"names":["email","emailField","required","name","type","admin","components","Field","hooks","beforeChange","value","toLowerCase","trim","label","t","unique","validate"],"mappings":"AAEA,SAASA,KAAK,QAAQ,8BAA6B;AAEnD,OAAO,MAAMC,aAAa,CAAC,EAAEC,WAAW,IAAI,EAA0B,GAAa,CAAA;QACjFC,MAAM;QACNC,MAAM;QACNC,OAAO;YACLC,YAAY;gBACVC,OAAO,IAAM;YACf;QACF;QACAC,OAAO;YACLC,cAAc;gBACZ,CAAC,EAAEC,KAAK,EAAE;oBACR,IAAIA,OAAO;wBACT,OAAOA,MAAMC,WAAW,GAAGC,IAAI;oBACjC;gBACF;aACD;QACH;QACAC,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;QACpBZ;QACAa,QAAQ;QACRC,UAAUhB;IACZ,CAAA,EAAE"}
1
+ {"version":3,"sources":["../../../src/auth/baseFields/email.ts"],"sourcesContent":["import type { EmailField } from '../../fields/config/types.js'\n\nimport { email } from '../../fields/validations.js'\n\nexport const emailFieldConfig: EmailField = {\n name: 'email',\n type: 'email',\n admin: {\n components: {\n Field: () => null,\n },\n },\n hooks: {\n beforeChange: [\n ({ value }) => {\n if (value) {\n return value.toLowerCase().trim()\n }\n },\n ],\n },\n label: ({ t }) => t('general:email'),\n required: true,\n unique: true,\n validate: email,\n}\n"],"names":["email","emailFieldConfig","name","type","admin","components","Field","hooks","beforeChange","value","toLowerCase","trim","label","t","required","unique","validate"],"mappings":"AAEA,SAASA,KAAK,QAAQ,8BAA6B;AAEnD,OAAO,MAAMC,mBAA+B;IAC1CC,MAAM;IACNC,MAAM;IACNC,OAAO;QACLC,YAAY;YACVC,OAAO,IAAM;QACf;IACF;IACAC,OAAO;QACLC,cAAc;YACZ,CAAC,EAAEC,KAAK,EAAE;gBACR,IAAIA,OAAO;oBACT,OAAOA,MAAMC,WAAW,GAAGC,IAAI;gBACjC;YACF;SACD;IACH;IACAC,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;IACpBC,UAAU;IACVC,QAAQ;IACRC,UAAUhB;AACZ,EAAC"}
@@ -1,3 +1,3 @@
1
- import type { Field } from '../../fields/config/types.js';
2
- export declare const usernameField: Field;
1
+ import type { TextField } from '../../fields/config/types.js';
2
+ export declare const usernameFieldConfig: TextField;
3
3
  //# sourceMappingURL=username.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"username.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/username.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAIzD,eAAO,MAAM,aAAa,EAAE,KAqB3B,CAAA"}
1
+ {"version":3,"file":"username.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/username.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAI7D,eAAO,MAAM,mBAAmB,EAAE,SAqBjC,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { username } from '../../fields/validations.js';
2
- export const usernameField = {
2
+ export const usernameFieldConfig = {
3
3
  name: 'username',
4
4
  type: 'text',
5
5
  admin: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/baseFields/username.ts"],"sourcesContent":["import type { Field } from '../../fields/config/types.js'\n\nimport { username } from '../../fields/validations.js'\n\nexport const usernameField: Field = {\n name: 'username',\n type: 'text',\n admin: {\n components: {\n Field: () => null,\n },\n },\n hooks: {\n beforeChange: [\n ({ value }) => {\n if (value) {\n return value.toLowerCase().trim()\n }\n },\n ],\n },\n label: ({ t }) => t('authentication:username'),\n required: true,\n unique: true,\n validate: username,\n}\n"],"names":["username","usernameField","name","type","admin","components","Field","hooks","beforeChange","value","toLowerCase","trim","label","t","required","unique","validate"],"mappings":"AAEA,SAASA,QAAQ,QAAQ,8BAA6B;AAEtD,OAAO,MAAMC,gBAAuB;IAClCC,MAAM;IACNC,MAAM;IACNC,OAAO;QACLC,YAAY;YACVC,OAAO,IAAM;QACf;IACF;IACAC,OAAO;QACLC,cAAc;YACZ,CAAC,EAAEC,KAAK,EAAE;gBACR,IAAIA,OAAO;oBACT,OAAOA,MAAMC,WAAW,GAAGC,IAAI;gBACjC;YACF;SACD;IACH;IACAC,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;IACpBC,UAAU;IACVC,QAAQ;IACRC,UAAUhB;AACZ,EAAC"}
1
+ {"version":3,"sources":["../../../src/auth/baseFields/username.ts"],"sourcesContent":["import type { TextField } from '../../fields/config/types.js'\n\nimport { username } from '../../fields/validations.js'\n\nexport const usernameFieldConfig: TextField = {\n name: 'username',\n type: 'text',\n admin: {\n components: {\n Field: () => null,\n },\n },\n hooks: {\n beforeChange: [\n ({ value }) => {\n if (value) {\n return value.toLowerCase().trim()\n }\n },\n ],\n },\n label: ({ t }) => t('authentication:username'),\n required: true,\n unique: true,\n validate: username,\n}\n"],"names":["username","usernameFieldConfig","name","type","admin","components","Field","hooks","beforeChange","value","toLowerCase","trim","label","t","required","unique","validate"],"mappings":"AAEA,SAASA,QAAQ,QAAQ,8BAA6B;AAEtD,OAAO,MAAMC,sBAAiC;IAC5CC,MAAM;IACNC,MAAM;IACNC,OAAO;QACLC,YAAY;YACVC,OAAO,IAAM;QACf;IACF;IACAC,OAAO;QACLC,cAAc;YACZ,CAAC,EAAEC,KAAK,EAAE;gBACR,IAAIA,OAAO;oBACT,OAAOA,MAAMC,WAAW,GAAGC,IAAI;gBACjC;YACF;SACD;IACH;IACAC,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;IACpBC,UAAU;IACVC,QAAQ;IACRC,UAAUhB;AACZ,EAAC"}
@@ -0,0 +1,17 @@
1
+ import type { RequiredDataFromCollectionSlug } from '../collections/config/types.js';
2
+ import type { AuthCollection, CollectionSlug, PayloadRequest } from '../index.js';
3
+ type ValidateUsernameOrEmailArgs<TSlug extends CollectionSlug> = {
4
+ authOptions: AuthCollection['config']['auth'];
5
+ collectionSlug: string;
6
+ data: RequiredDataFromCollectionSlug<TSlug>;
7
+ req: PayloadRequest;
8
+ } & ({
9
+ operation: 'create';
10
+ originalDoc?: never;
11
+ } | {
12
+ operation: 'update';
13
+ originalDoc: RequiredDataFromCollectionSlug<TSlug>;
14
+ });
15
+ export declare const ensureUsernameOrEmail: <TSlug extends CollectionSlug>({ authOptions: { disableLocalStrategy, loginWithUsername }, collectionSlug, data, operation, originalDoc, req, }: ValidateUsernameOrEmailArgs<TSlug>) => void;
16
+ export {};
17
+ //# sourceMappingURL=ensureUsernameOrEmail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureUsernameOrEmail.d.ts","sourceRoot":"","sources":["../../src/auth/ensureUsernameOrEmail.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAA;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjF,KAAK,2BAA2B,CAAC,KAAK,SAAS,cAAc,IAAI;IAC/D,WAAW,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAA;IAC7C,cAAc,EAAE,MAAM,CAAA;IACtB,IAAI,EAAE,8BAA8B,CAAC,KAAK,CAAC,CAAA;IAC3C,GAAG,EAAE,cAAc,CAAA;CACpB,GAAG,CACA;IACE,SAAS,EAAE,QAAQ,CAAA;IACnB,WAAW,CAAC,EAAE,KAAK,CAAA;CACpB,GACD;IACE,SAAS,EAAE,QAAQ,CAAA;IACnB,WAAW,EAAE,8BAA8B,CAAC,KAAK,CAAC,CAAA;CACnD,CACJ,CAAA;AACD,eAAO,MAAM,qBAAqB,GAAI,KAAK,SAAS,cAAc,oHAO/D,2BAA2B,CAAC,KAAK,CAAC,SAiDpC,CAAA"}
@@ -0,0 +1,43 @@
1
+ import { ValidationError } from '../errors/index.js';
2
+ export const ensureUsernameOrEmail = ({ authOptions: { disableLocalStrategy, loginWithUsername }, collectionSlug, data, operation, originalDoc, req })=>{
3
+ // neither username or email are required
4
+ // and neither are provided
5
+ // so we need to manually validate
6
+ if (!disableLocalStrategy && loginWithUsername && !loginWithUsername.requireEmail && !loginWithUsername.requireUsername) {
7
+ let missingFields = false;
8
+ if (operation === 'create' && !data.email && !data.username) {
9
+ missingFields = true;
10
+ } else if (operation === 'update') {
11
+ // prevent clearing both email and username
12
+ if ('email' in data && !data.email && 'username' in data && !data.username) {
13
+ missingFields = true;
14
+ }
15
+ // prevent clearing email if no username
16
+ if ('email' in data && !data.email && !originalDoc.username) {
17
+ missingFields = true;
18
+ }
19
+ // prevent clearing username if no email
20
+ if ('username' in data && !data.username && !originalDoc.email) {
21
+ missingFields = true;
22
+ }
23
+ }
24
+ if (missingFields) {
25
+ throw new ValidationError({
26
+ collection: collectionSlug,
27
+ errors: [
28
+ {
29
+ field: 'username',
30
+ message: 'Username or email is required'
31
+ },
32
+ {
33
+ field: 'email',
34
+ message: 'Username or email is required'
35
+ }
36
+ ]
37
+ }, req.t);
38
+ }
39
+ }
40
+ return;
41
+ };
42
+
43
+ //# sourceMappingURL=ensureUsernameOrEmail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/auth/ensureUsernameOrEmail.ts"],"sourcesContent":["import type { RequiredDataFromCollectionSlug } from '../collections/config/types.js'\nimport type { AuthCollection, CollectionSlug, PayloadRequest } from '../index.js'\n\nimport { ValidationError } from '../errors/index.js'\n\ntype ValidateUsernameOrEmailArgs<TSlug extends CollectionSlug> = {\n authOptions: AuthCollection['config']['auth']\n collectionSlug: string\n data: RequiredDataFromCollectionSlug<TSlug>\n req: PayloadRequest\n} & (\n | {\n operation: 'create'\n originalDoc?: never\n }\n | {\n operation: 'update'\n originalDoc: RequiredDataFromCollectionSlug<TSlug>\n }\n)\nexport const ensureUsernameOrEmail = <TSlug extends CollectionSlug>({\n authOptions: { disableLocalStrategy, loginWithUsername },\n collectionSlug,\n data,\n operation,\n originalDoc,\n req,\n}: ValidateUsernameOrEmailArgs<TSlug>) => {\n // neither username or email are required\n // and neither are provided\n // so we need to manually validate\n if (\n !disableLocalStrategy &&\n loginWithUsername &&\n !loginWithUsername.requireEmail &&\n !loginWithUsername.requireUsername\n ) {\n let missingFields = false\n if (operation === 'create' && !data.email && !data.username) {\n missingFields = true\n } else if (operation === 'update') {\n // prevent clearing both email and username\n if ('email' in data && !data.email && 'username' in data && !data.username) {\n missingFields = true\n }\n // prevent clearing email if no username\n if ('email' in data && !data.email && !originalDoc.username) {\n missingFields = true\n }\n // prevent clearing username if no email\n if ('username' in data && !data.username && !originalDoc.email) {\n missingFields = true\n }\n }\n\n if (missingFields) {\n throw new ValidationError(\n {\n collection: collectionSlug,\n errors: [\n {\n field: 'username',\n message: 'Username or email is required',\n },\n {\n field: 'email',\n message: 'Username or email is required',\n },\n ],\n },\n req.t,\n )\n }\n }\n\n return\n}\n"],"names":["ValidationError","ensureUsernameOrEmail","authOptions","disableLocalStrategy","loginWithUsername","collectionSlug","data","operation","originalDoc","req","requireEmail","requireUsername","missingFields","email","username","collection","errors","field","message","t"],"mappings":"AAGA,SAASA,eAAe,QAAQ,qBAAoB;AAiBpD,OAAO,MAAMC,wBAAwB,CAA+B,EAClEC,aAAa,EAAEC,oBAAoB,EAAEC,iBAAiB,EAAE,EACxDC,cAAc,EACdC,IAAI,EACJC,SAAS,EACTC,WAAW,EACXC,GAAG,EACgC;IACnC,yCAAyC;IACzC,2BAA2B;IAC3B,kCAAkC;IAClC,IACE,CAACN,wBACDC,qBACA,CAACA,kBAAkBM,YAAY,IAC/B,CAACN,kBAAkBO,eAAe,EAClC;QACA,IAAIC,gBAAgB;QACpB,IAAIL,cAAc,YAAY,CAACD,KAAKO,KAAK,IAAI,CAACP,KAAKQ,QAAQ,EAAE;YAC3DF,gBAAgB;QAClB,OAAO,IAAIL,cAAc,UAAU;YACjC,2CAA2C;YAC3C,IAAI,WAAWD,QAAQ,CAACA,KAAKO,KAAK,IAAI,cAAcP,QAAQ,CAACA,KAAKQ,QAAQ,EAAE;gBAC1EF,gBAAgB;YAClB;YACA,wCAAwC;YACxC,IAAI,WAAWN,QAAQ,CAACA,KAAKO,KAAK,IAAI,CAACL,YAAYM,QAAQ,EAAE;gBAC3DF,gBAAgB;YAClB;YACA,wCAAwC;YACxC,IAAI,cAAcN,QAAQ,CAACA,KAAKQ,QAAQ,IAAI,CAACN,YAAYK,KAAK,EAAE;gBAC9DD,gBAAgB;YAClB;QACF;QAEA,IAAIA,eAAe;YACjB,MAAM,IAAIZ,gBACR;gBACEe,YAAYV;gBACZW,QAAQ;oBACN;wBACEC,OAAO;wBACPC,SAAS;oBACX;oBACA;wBACED,OAAO;wBACPC,SAAS;oBACX;iBACD;YACH,GACAT,IAAIU,CAAC;QAET;IACF;IAEA;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"getAuthFields.d.ts","sourceRoot":"","sources":["../../src/auth/getAuthFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AASlD,eAAO,MAAM,iBAAiB,eAAgB,gBAAgB,KAAG,KAAK,EAiCrE,CAAA"}
1
+ {"version":3,"file":"getAuthFields.d.ts","sourceRoot":"","sources":["../../src/auth/getAuthFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AASlD,eAAO,MAAM,iBAAiB,eAAgB,gBAAgB,KAAG,KAAK,EAsCrE,CAAA"}
@@ -1,8 +1,8 @@
1
1
  import { accountLockFields } from './baseFields/accountLock.js';
2
2
  import { apiKeyFields } from './baseFields/apiKey.js';
3
3
  import { baseAuthFields } from './baseFields/auth.js';
4
- import { emailField } from './baseFields/email.js';
5
- import { usernameField } from './baseFields/username.js';
4
+ import { emailFieldConfig } from './baseFields/email.js';
5
+ import { usernameFieldConfig } from './baseFields/username.js';
6
6
  import { verificationFields } from './baseFields/verification.js';
7
7
  export const getBaseAuthFields = (authConfig)=>{
8
8
  const authFields = [];
@@ -10,17 +10,25 @@ export const getBaseAuthFields = (authConfig)=>{
10
10
  authFields.push(...apiKeyFields);
11
11
  }
12
12
  if (!authConfig.disableLocalStrategy) {
13
- const emailFieldIndex = authFields.push(emailField({
14
- required: true
15
- })) - 1;
13
+ const emailField = {
14
+ ...emailFieldConfig
15
+ };
16
+ let usernameField;
16
17
  if (authConfig.loginWithUsername) {
17
- if (typeof authConfig.loginWithUsername === 'object' && authConfig.loginWithUsername.requireEmail === false) {
18
- authFields[emailFieldIndex] = emailField({
19
- required: false
20
- });
18
+ usernameField = {
19
+ ...usernameFieldConfig
20
+ };
21
+ if (typeof authConfig.loginWithUsername === 'object') {
22
+ if (authConfig.loginWithUsername.requireEmail === false) {
23
+ emailField.required = false;
24
+ }
25
+ if (authConfig.loginWithUsername.requireUsername === false) {
26
+ usernameField.required = false;
27
+ }
21
28
  }
22
- authFields.push(usernameField);
23
29
  }
30
+ authFields.push(emailField);
31
+ if (usernameField) authFields.push(usernameField);
24
32
  authFields.push(...baseAuthFields);
25
33
  if (authConfig.verify) {
26
34
  authFields.push(...verificationFields);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/auth/getAuthFields.ts"],"sourcesContent":["import type { Field } from '../fields/config/types.js'\nimport type { IncomingAuthType } from './types.js'\n\nimport { accountLockFields } from './baseFields/accountLock.js'\nimport { apiKeyFields } from './baseFields/apiKey.js'\nimport { baseAuthFields } from './baseFields/auth.js'\nimport { emailField } from './baseFields/email.js'\nimport { usernameField } from './baseFields/username.js'\nimport { verificationFields } from './baseFields/verification.js'\n\nexport const getBaseAuthFields = (authConfig: IncomingAuthType): Field[] => {\n const authFields: Field[] = []\n\n if (authConfig.useAPIKey) {\n authFields.push(...apiKeyFields)\n }\n\n if (!authConfig.disableLocalStrategy) {\n const emailFieldIndex = authFields.push(emailField({ required: true })) - 1\n\n if (authConfig.loginWithUsername) {\n if (\n typeof authConfig.loginWithUsername === 'object' &&\n authConfig.loginWithUsername.requireEmail === false\n ) {\n authFields[emailFieldIndex] = emailField({ required: false })\n }\n\n authFields.push(usernameField)\n }\n\n authFields.push(...baseAuthFields)\n\n if (authConfig.verify) {\n authFields.push(...verificationFields)\n }\n\n if (authConfig.maxLoginAttempts > 0) {\n authFields.push(...accountLockFields)\n }\n }\n\n return authFields\n}\n"],"names":["accountLockFields","apiKeyFields","baseAuthFields","emailField","usernameField","verificationFields","getBaseAuthFields","authConfig","authFields","useAPIKey","push","disableLocalStrategy","emailFieldIndex","required","loginWithUsername","requireEmail","verify","maxLoginAttempts"],"mappings":"AAGA,SAASA,iBAAiB,QAAQ,8BAA6B;AAC/D,SAASC,YAAY,QAAQ,yBAAwB;AACrD,SAASC,cAAc,QAAQ,uBAAsB;AACrD,SAASC,UAAU,QAAQ,wBAAuB;AAClD,SAASC,aAAa,QAAQ,2BAA0B;AACxD,SAASC,kBAAkB,QAAQ,+BAA8B;AAEjE,OAAO,MAAMC,oBAAoB,CAACC;IAChC,MAAMC,aAAsB,EAAE;IAE9B,IAAID,WAAWE,SAAS,EAAE;QACxBD,WAAWE,IAAI,IAAIT;IACrB;IAEA,IAAI,CAACM,WAAWI,oBAAoB,EAAE;QACpC,MAAMC,kBAAkBJ,WAAWE,IAAI,CAACP,WAAW;YAAEU,UAAU;QAAK,MAAM;QAE1E,IAAIN,WAAWO,iBAAiB,EAAE;YAChC,IACE,OAAOP,WAAWO,iBAAiB,KAAK,YACxCP,WAAWO,iBAAiB,CAACC,YAAY,KAAK,OAC9C;gBACAP,UAAU,CAACI,gBAAgB,GAAGT,WAAW;oBAAEU,UAAU;gBAAM;YAC7D;YAEAL,WAAWE,IAAI,CAACN;QAClB;QAEAI,WAAWE,IAAI,IAAIR;QAEnB,IAAIK,WAAWS,MAAM,EAAE;YACrBR,WAAWE,IAAI,IAAIL;QACrB;QAEA,IAAIE,WAAWU,gBAAgB,GAAG,GAAG;YACnCT,WAAWE,IAAI,IAAIV;QACrB;IACF;IAEA,OAAOQ;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/auth/getAuthFields.ts"],"sourcesContent":["import type { Field, TextField } from '../fields/config/types.js'\nimport type { IncomingAuthType } from './types.js'\n\nimport { accountLockFields } from './baseFields/accountLock.js'\nimport { apiKeyFields } from './baseFields/apiKey.js'\nimport { baseAuthFields } from './baseFields/auth.js'\nimport { emailFieldConfig } from './baseFields/email.js'\nimport { usernameFieldConfig } from './baseFields/username.js'\nimport { verificationFields } from './baseFields/verification.js'\n\nexport const getBaseAuthFields = (authConfig: IncomingAuthType): Field[] => {\n const authFields: Field[] = []\n\n if (authConfig.useAPIKey) {\n authFields.push(...apiKeyFields)\n }\n\n if (!authConfig.disableLocalStrategy) {\n const emailField = { ...emailFieldConfig }\n let usernameField: TextField | undefined\n\n if (authConfig.loginWithUsername) {\n usernameField = { ...usernameFieldConfig }\n if (typeof authConfig.loginWithUsername === 'object') {\n if (authConfig.loginWithUsername.requireEmail === false) {\n emailField.required = false\n }\n if (authConfig.loginWithUsername.requireUsername === false) {\n usernameField.required = false\n }\n }\n }\n\n authFields.push(emailField)\n if (usernameField) authFields.push(usernameField)\n\n authFields.push(...baseAuthFields)\n\n if (authConfig.verify) {\n authFields.push(...verificationFields)\n }\n\n if (authConfig.maxLoginAttempts > 0) {\n authFields.push(...accountLockFields)\n }\n }\n\n return authFields\n}\n"],"names":["accountLockFields","apiKeyFields","baseAuthFields","emailFieldConfig","usernameFieldConfig","verificationFields","getBaseAuthFields","authConfig","authFields","useAPIKey","push","disableLocalStrategy","emailField","usernameField","loginWithUsername","requireEmail","required","requireUsername","verify","maxLoginAttempts"],"mappings":"AAGA,SAASA,iBAAiB,QAAQ,8BAA6B;AAC/D,SAASC,YAAY,QAAQ,yBAAwB;AACrD,SAASC,cAAc,QAAQ,uBAAsB;AACrD,SAASC,gBAAgB,QAAQ,wBAAuB;AACxD,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,kBAAkB,QAAQ,+BAA8B;AAEjE,OAAO,MAAMC,oBAAoB,CAACC;IAChC,MAAMC,aAAsB,EAAE;IAE9B,IAAID,WAAWE,SAAS,EAAE;QACxBD,WAAWE,IAAI,IAAIT;IACrB;IAEA,IAAI,CAACM,WAAWI,oBAAoB,EAAE;QACpC,MAAMC,aAAa;YAAE,GAAGT,gBAAgB;QAAC;QACzC,IAAIU;QAEJ,IAAIN,WAAWO,iBAAiB,EAAE;YAChCD,gBAAgB;gBAAE,GAAGT,mBAAmB;YAAC;YACzC,IAAI,OAAOG,WAAWO,iBAAiB,KAAK,UAAU;gBACpD,IAAIP,WAAWO,iBAAiB,CAACC,YAAY,KAAK,OAAO;oBACvDH,WAAWI,QAAQ,GAAG;gBACxB;gBACA,IAAIT,WAAWO,iBAAiB,CAACG,eAAe,KAAK,OAAO;oBAC1DJ,cAAcG,QAAQ,GAAG;gBAC3B;YACF;QACF;QAEAR,WAAWE,IAAI,CAACE;QAChB,IAAIC,eAAeL,WAAWE,IAAI,CAACG;QAEnCL,WAAWE,IAAI,IAAIR;QAEnB,IAAIK,WAAWW,MAAM,EAAE;YACrBV,WAAWE,IAAI,IAAIL;QACrB;QAEA,IAAIE,WAAWY,gBAAgB,GAAG,GAAG;YACnCX,WAAWE,IAAI,IAAIV;QACrB;IACF;IAEA,OAAOQ;AACT,EAAC"}
@@ -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,EAAE,MAAM,sBAAsB,CAAA;AAO1D,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,CAoE/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,EAAE,MAAM,sBAAsB,CAAA;AAQ1D,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,CA4E/C,CAAA"}
@@ -2,10 +2,18 @@ import { Forbidden } from '../../errors/index.js';
2
2
  import { commitTransaction } from '../../utilities/commitTransaction.js';
3
3
  import { initTransaction } from '../../utilities/initTransaction.js';
4
4
  import { killTransaction } from '../../utilities/killTransaction.js';
5
+ import { ensureUsernameOrEmail } from '../ensureUsernameOrEmail.js';
5
6
  export const registerFirstUserOperation = async (args)=>{
6
7
  const { collection: { config, config: { slug, auth: { verify } } }, data, req, req: { payload } } = args;
7
8
  try {
8
9
  const shouldCommit = await initTransaction(req);
10
+ ensureUsernameOrEmail({
11
+ authOptions: config.auth,
12
+ collectionSlug: slug,
13
+ data,
14
+ operation: 'create',
15
+ req
16
+ });
9
17
  const doc = await payload.db.findOne({
10
18
  collection: config.slug,
11
19
  req
@@ -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 } 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'\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 try {\n const shouldCommit = await initTransaction(req)\n\n const doc = await payload.db.findOne({\n collection: config.slug,\n req,\n })\n\n if (doc) throw new Forbidden(req.t)\n\n // /////////////////////////////////////\n // Register first user\n // /////////////////////////////////////\n\n const result = await payload.create<TSlug>({\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) await commitTransaction(req)\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","registerFirstUserOperation","args","collection","config","slug","auth","verify","data","req","payload","shouldCommit","doc","db","findOne","t","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;AAepE,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,IAAI;QACF,MAAMS,eAAe,MAAMZ,gBAAgBU;QAE3C,MAAMG,MAAM,MAAMF,QAAQG,EAAE,CAACC,OAAO,CAAC;YACnCX,YAAYC,OAAOC,IAAI;YACvBI;QACF;QAEA,IAAIG,KAAK,MAAM,IAAIf,UAAUY,IAAIM,CAAC;QAElC,wCAAwC;QACxC,sBAAsB;QACtB,wCAAwC;QAExC,MAAMC,SAAS,MAAMN,QAAQO,MAAM,CAAQ;YACzCd,YAAYE;YACZG;YACAU,gBAAgB;YAChBT;QACF;QAEA,8BAA8B;QAC9B,IAAIF,QAAQ;YACV,MAAMG,QAAQS,MAAM,CAAC;gBACnBC,IAAIJ,OAAOI,EAAE;gBACbjB,YAAYE;gBACZG,MAAM;oBACJa,WAAW;gBACb;gBACAZ;YACF;QACF;QAEA,wCAAwC;QACxC,kBAAkB;QAClB,wCAAwC;QAExC,MAAM,EAAEa,GAAG,EAAEC,KAAK,EAAE,GAAG,MAAMb,QAAQc,KAAK,CAAC;YACzC,GAAGtB,IAAI;YACPC,YAAYE;YACZI;QACF;QAEA,IAAIE,cAAc,MAAMb,kBAAkBW;QAE1C,OAAO;YACLa;YACAC;YACAE,MAAMT;QACR;IACF,EAAE,OAAOU,OAAgB;QACvB,MAAM1B,gBAAgBS;QACtB,MAAMiB;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 } 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 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) throw new Forbidden(req.t)\n\n // /////////////////////////////////////\n // Register first user\n // /////////////////////////////////////\n\n const result = await payload.create<TSlug>({\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) await commitTransaction(req)\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","shouldCommit","authOptions","collectionSlug","operation","doc","db","findOne","t","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,IAAI;QACF,MAAMS,eAAe,MAAMb,gBAAgBW;QAE3CT,sBAA6B;YAC3BY,aAAaR,OAAOE,IAAI;YACxBO,gBAAgBR;YAChBG;YACAM,WAAW;YACXL;QACF;QAEA,MAAMM,MAAM,MAAML,QAAQM,EAAE,CAACC,OAAO,CAAC;YACnCd,YAAYC,OAAOC,IAAI;YACvBI;QACF;QAEA,IAAIM,KAAK,MAAM,IAAInB,UAAUa,IAAIS,CAAC;QAElC,wCAAwC;QACxC,sBAAsB;QACtB,wCAAwC;QAExC,MAAMC,SAAS,MAAMT,QAAQU,MAAM,CAAQ;YACzCjB,YAAYE;YACZG;YACAa,gBAAgB;YAChBZ;QACF;QAEA,8BAA8B;QAC9B,IAAIF,QAAQ;YACV,MAAMG,QAAQY,MAAM,CAAC;gBACnBC,IAAIJ,OAAOI,EAAE;gBACbpB,YAAYE;gBACZG,MAAM;oBACJgB,WAAW;gBACb;gBACAf;YACF;QACF;QAEA,wCAAwC;QACxC,kBAAkB;QAClB,wCAAwC;QAExC,MAAM,EAAEgB,GAAG,EAAEC,KAAK,EAAE,GAAG,MAAMhB,QAAQiB,KAAK,CAAC;YACzC,GAAGzB,IAAI;YACPC,YAAYE;YACZI;QACF;QAEA,IAAIE,cAAc,MAAMd,kBAAkBY;QAE1C,OAAO;YACLgB;YACAC;YACAE,MAAMT;QACR;IACF,EAAE,OAAOU,OAAgB;QACvB,MAAM9B,gBAAgBU;QACtB,MAAMoB;IACR;AACF,EAAC"}
@@ -101,8 +101,13 @@ export type AuthStrategy = {
101
101
  name: string;
102
102
  };
103
103
  export type LoginWithUsernameOptions = {
104
- allowEmailLogin?: boolean;
104
+ allowEmailLogin?: false;
105
105
  requireEmail?: boolean;
106
+ requireUsername?: true;
107
+ } | {
108
+ allowEmailLogin?: true;
109
+ requireEmail?: boolean;
110
+ requireUsername?: boolean;
106
111
  };
107
112
  export interface IncomingAuthType {
108
113
  cookies?: {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/auth/types.ts"],"sourcesContent":["import type { DeepRequired } from 'ts-essentials'\n\nimport type { Payload } from '../index.js'\nimport type { PayloadRequest, Where } from '../types/index.js'\n\nexport type Permission = {\n permission: boolean\n where?: Record<string, unknown>\n}\n\nexport type FieldPermissions = {\n blocks?: {\n [blockSlug: string]: {\n fields: {\n [fieldName: string]: FieldPermissions\n }\n }\n }\n create: {\n permission: boolean\n }\n fields?: {\n [fieldName: string]: FieldPermissions\n }\n read: {\n permission: boolean\n }\n update: {\n permission: boolean\n }\n}\n\nexport type CollectionPermission = {\n create: Permission\n delete: Permission\n fields: {\n [fieldName: string]: FieldPermissions\n }\n read: Permission\n readVersions?: Permission\n update: Permission\n}\n\nexport type GlobalPermission = {\n fields: {\n [fieldName: string]: FieldPermissions\n }\n read: Permission\n readVersions?: Permission\n update: Permission\n}\n\nexport type DocumentPermissions = CollectionPermission | GlobalPermission\nexport type Permissions = {\n canAccessAdmin: boolean\n collections: {\n [collectionSlug: string]: CollectionPermission\n }\n globals?: {\n [globalSlug: string]: GlobalPermission\n }\n}\n\nexport type User = {\n [key: string]: any // This NEEDS to be an any, otherwise it breaks the Omit for ClientUser below\n collection: string\n email?: string\n id: number | string\n username?: string\n}\n\n/**\n * `collection` is not available one the client. It's only available on the server (req.user)\n * On the client, you can access the collection via config.admin.user. Config can be accessed using the useConfig() hook\n */\nexport type ClientUser = Omit<User, 'collection'>\n\ntype GenerateVerifyEmailHTML<TUser = any> = (args: {\n req: PayloadRequest\n token: string\n user: TUser\n}) => Promise<string> | string\n\ntype GenerateVerifyEmailSubject<TUser = any> = (args: {\n req: PayloadRequest\n token: string\n user: TUser\n}) => Promise<string> | string\n\ntype GenerateForgotPasswordEmailHTML<TUser = any> = (args?: {\n req?: PayloadRequest\n token?: string\n user?: TUser\n}) => Promise<string> | string\n\ntype GenerateForgotPasswordEmailSubject<TUser = any> = (args?: {\n req?: PayloadRequest\n token?: string\n user?: TUser\n}) => Promise<string> | string\n\nexport type AuthStrategyFunctionArgs = {\n headers: Request['headers']\n isGraphQL?: boolean\n payload: Payload\n}\n\nexport type AuthStrategyResult = {\n responseHeaders?: Headers\n user: User | null\n}\n\nexport type AuthStrategyFunction = (\n args: AuthStrategyFunctionArgs,\n) => AuthStrategyResult | Promise<AuthStrategyResult>\nexport type AuthStrategy = {\n authenticate: AuthStrategyFunction\n name: string\n}\n\nexport type LoginWithUsernameOptions = {\n allowEmailLogin?: boolean\n requireEmail?: boolean\n}\n\nexport interface IncomingAuthType {\n cookies?: {\n domain?: string\n sameSite?: 'Lax' | 'None' | 'Strict' | boolean\n secure?: boolean\n }\n depth?: number\n disableLocalStrategy?: true\n forgotPassword?: {\n generateEmailHTML?: GenerateForgotPasswordEmailHTML\n generateEmailSubject?: GenerateForgotPasswordEmailSubject\n }\n lockTime?: number\n loginWithUsername?: LoginWithUsernameOptions | boolean\n maxLoginAttempts?: number\n removeTokenFromResponses?: true\n strategies?: AuthStrategy[]\n tokenExpiration?: number\n useAPIKey?: boolean\n verify?:\n | {\n generateEmailHTML?: GenerateVerifyEmailHTML\n generateEmailSubject?: GenerateVerifyEmailSubject\n }\n | boolean\n}\n\nexport type VerifyConfig = {\n generateEmailHTML?: GenerateVerifyEmailHTML\n generateEmailSubject?: GenerateVerifyEmailSubject\n}\n\nexport interface Auth\n extends Omit<DeepRequired<IncomingAuthType>, 'forgotPassword' | 'loginWithUsername' | 'verify'> {\n forgotPassword?: {\n generateEmailHTML?: GenerateForgotPasswordEmailHTML\n generateEmailSubject?: GenerateForgotPasswordEmailSubject\n }\n loginWithUsername: LoginWithUsernameOptions | false\n verify?: VerifyConfig | boolean\n}\n\nexport function hasWhereAccessResult(result: Where | boolean): result is Where {\n return result && typeof result === 'object'\n}\n"],"names":["hasWhereAccessResult","result"],"mappings":"AAuKA,OAAO,SAASA,qBAAqBC,MAAuB;IAC1D,OAAOA,UAAU,OAAOA,WAAW;AACrC"}
1
+ {"version":3,"sources":["../../src/auth/types.ts"],"sourcesContent":["import type { DeepRequired } from 'ts-essentials'\n\nimport type { Payload } from '../index.js'\nimport type { PayloadRequest, Where } from '../types/index.js'\n\nexport type Permission = {\n permission: boolean\n where?: Record<string, unknown>\n}\n\nexport type FieldPermissions = {\n blocks?: {\n [blockSlug: string]: {\n fields: {\n [fieldName: string]: FieldPermissions\n }\n }\n }\n create: {\n permission: boolean\n }\n fields?: {\n [fieldName: string]: FieldPermissions\n }\n read: {\n permission: boolean\n }\n update: {\n permission: boolean\n }\n}\n\nexport type CollectionPermission = {\n create: Permission\n delete: Permission\n fields: {\n [fieldName: string]: FieldPermissions\n }\n read: Permission\n readVersions?: Permission\n update: Permission\n}\n\nexport type GlobalPermission = {\n fields: {\n [fieldName: string]: FieldPermissions\n }\n read: Permission\n readVersions?: Permission\n update: Permission\n}\n\nexport type DocumentPermissions = CollectionPermission | GlobalPermission\nexport type Permissions = {\n canAccessAdmin: boolean\n collections: {\n [collectionSlug: string]: CollectionPermission\n }\n globals?: {\n [globalSlug: string]: GlobalPermission\n }\n}\n\nexport type User = {\n [key: string]: any // This NEEDS to be an any, otherwise it breaks the Omit for ClientUser below\n collection: string\n email?: string\n id: number | string\n username?: string\n}\n\n/**\n * `collection` is not available one the client. It's only available on the server (req.user)\n * On the client, you can access the collection via config.admin.user. Config can be accessed using the useConfig() hook\n */\nexport type ClientUser = Omit<User, 'collection'>\n\ntype GenerateVerifyEmailHTML<TUser = any> = (args: {\n req: PayloadRequest\n token: string\n user: TUser\n}) => Promise<string> | string\n\ntype GenerateVerifyEmailSubject<TUser = any> = (args: {\n req: PayloadRequest\n token: string\n user: TUser\n}) => Promise<string> | string\n\ntype GenerateForgotPasswordEmailHTML<TUser = any> = (args?: {\n req?: PayloadRequest\n token?: string\n user?: TUser\n}) => Promise<string> | string\n\ntype GenerateForgotPasswordEmailSubject<TUser = any> = (args?: {\n req?: PayloadRequest\n token?: string\n user?: TUser\n}) => Promise<string> | string\n\nexport type AuthStrategyFunctionArgs = {\n headers: Request['headers']\n isGraphQL?: boolean\n payload: Payload\n}\n\nexport type AuthStrategyResult = {\n responseHeaders?: Headers\n user: User | null\n}\n\nexport type AuthStrategyFunction = (\n args: AuthStrategyFunctionArgs,\n) => AuthStrategyResult | Promise<AuthStrategyResult>\nexport type AuthStrategy = {\n authenticate: AuthStrategyFunction\n name: string\n}\n\nexport type LoginWithUsernameOptions =\n | {\n allowEmailLogin?: false\n requireEmail?: boolean\n // If `allowEmailLogin` is false, `requireUsername` must be true (default: true)\n requireUsername?: true\n }\n | {\n allowEmailLogin?: true\n requireEmail?: boolean\n requireUsername?: boolean\n }\n\nexport interface IncomingAuthType {\n cookies?: {\n domain?: string\n sameSite?: 'Lax' | 'None' | 'Strict' | boolean\n secure?: boolean\n }\n depth?: number\n disableLocalStrategy?: true\n forgotPassword?: {\n generateEmailHTML?: GenerateForgotPasswordEmailHTML\n generateEmailSubject?: GenerateForgotPasswordEmailSubject\n }\n lockTime?: number\n loginWithUsername?: LoginWithUsernameOptions | boolean\n maxLoginAttempts?: number\n removeTokenFromResponses?: true\n strategies?: AuthStrategy[]\n tokenExpiration?: number\n useAPIKey?: boolean\n verify?:\n | {\n generateEmailHTML?: GenerateVerifyEmailHTML\n generateEmailSubject?: GenerateVerifyEmailSubject\n }\n | boolean\n}\n\nexport type VerifyConfig = {\n generateEmailHTML?: GenerateVerifyEmailHTML\n generateEmailSubject?: GenerateVerifyEmailSubject\n}\n\nexport interface Auth\n extends Omit<DeepRequired<IncomingAuthType>, 'forgotPassword' | 'loginWithUsername' | 'verify'> {\n forgotPassword?: {\n generateEmailHTML?: GenerateForgotPasswordEmailHTML\n generateEmailSubject?: GenerateForgotPasswordEmailSubject\n }\n loginWithUsername: LoginWithUsernameOptions | false\n verify?: VerifyConfig | boolean\n}\n\nexport function hasWhereAccessResult(result: Where | boolean): result is Where {\n return result && typeof result === 'object'\n}\n"],"names":["hasWhereAccessResult","result"],"mappings":"AA+KA,OAAO,SAASA,qBAAqBC,MAAuB;IAC1D,OAAOA,UAAU,OAAOA,WAAW;AACrC"}
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/collections/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AACrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAIlD,eAAO,MAAM,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CA6C9C,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,gBAW1B,CAAA;AAED,eAAO,MAAM,yBAAyB,EAAE,wBAGvC,CAAA"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/collections/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AACrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAIlD,eAAO,MAAM,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CA6C9C,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,gBAW1B,CAAA;AAED,eAAO,MAAM,yBAAyB,EAAE,wBAIvC,CAAA"}
@@ -65,7 +65,8 @@ export const authDefaults = {
65
65
  };
66
66
  export const loginWithUsernameDefaults = {
67
67
  allowEmailLogin: false,
68
- requireEmail: false
68
+ requireEmail: false,
69
+ requireUsername: true
69
70
  };
70
71
 
71
72
  //# sourceMappingURL=defaults.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/collections/config/defaults.ts"],"sourcesContent":["import type { IncomingAuthType, LoginWithUsernameOptions } from '../../auth/types.js'\nimport type { CollectionConfig } from './types.js'\n\nimport defaultAccess from '../../auth/defaultAccess.js'\n\nexport const defaults: Partial<CollectionConfig> = {\n access: {\n create: defaultAccess,\n delete: defaultAccess,\n read: defaultAccess,\n unlock: defaultAccess,\n update: defaultAccess,\n },\n admin: {\n components: {},\n custom: {},\n enableRichTextLink: true,\n enableRichTextRelationship: true,\n pagination: {\n defaultLimit: 10,\n limits: [5, 10, 25, 50, 100],\n },\n useAsTitle: 'id',\n },\n auth: false,\n custom: {},\n endpoints: [],\n fields: [],\n hooks: {\n afterChange: [],\n afterDelete: [],\n afterForgotPassword: [],\n afterLogin: [],\n afterLogout: [],\n afterMe: [],\n afterOperation: [],\n afterRead: [],\n afterRefresh: [],\n beforeChange: [],\n beforeDelete: [],\n beforeLogin: [],\n beforeOperation: [],\n beforeRead: [],\n beforeValidate: [],\n me: [],\n refresh: [],\n },\n timestamps: true,\n upload: false,\n versions: false,\n}\n\nexport const authDefaults: IncomingAuthType = {\n cookies: {\n sameSite: 'Lax',\n secure: false,\n },\n forgotPassword: {},\n lockTime: 600000, // 10 minutes\n loginWithUsername: false,\n maxLoginAttempts: 5,\n tokenExpiration: 7200,\n verify: false,\n}\n\nexport const loginWithUsernameDefaults: LoginWithUsernameOptions = {\n allowEmailLogin: false,\n requireEmail: false,\n}\n"],"names":["defaultAccess","defaults","access","create","delete","read","unlock","update","admin","components","custom","enableRichTextLink","enableRichTextRelationship","pagination","defaultLimit","limits","useAsTitle","auth","endpoints","fields","hooks","afterChange","afterDelete","afterForgotPassword","afterLogin","afterLogout","afterMe","afterOperation","afterRead","afterRefresh","beforeChange","beforeDelete","beforeLogin","beforeOperation","beforeRead","beforeValidate","me","refresh","timestamps","upload","versions","authDefaults","cookies","sameSite","secure","forgotPassword","lockTime","loginWithUsername","maxLoginAttempts","tokenExpiration","verify","loginWithUsernameDefaults","allowEmailLogin","requireEmail"],"mappings":"AAGA,OAAOA,mBAAmB,8BAA6B;AAEvD,OAAO,MAAMC,WAAsC;IACjDC,QAAQ;QACNC,QAAQH;QACRI,QAAQJ;QACRK,MAAML;QACNM,QAAQN;QACRO,QAAQP;IACV;IACAQ,OAAO;QACLC,YAAY,CAAC;QACbC,QAAQ,CAAC;QACTC,oBAAoB;QACpBC,4BAA4B;QAC5BC,YAAY;YACVC,cAAc;YACdC,QAAQ;gBAAC;gBAAG;gBAAI;gBAAI;gBAAI;aAAI;QAC9B;QACAC,YAAY;IACd;IACAC,MAAM;IACNP,QAAQ,CAAC;IACTQ,WAAW,EAAE;IACbC,QAAQ,EAAE;IACVC,OAAO;QACLC,aAAa,EAAE;QACfC,aAAa,EAAE;QACfC,qBAAqB,EAAE;QACvBC,YAAY,EAAE;QACdC,aAAa,EAAE;QACfC,SAAS,EAAE;QACXC,gBAAgB,EAAE;QAClBC,WAAW,EAAE;QACbC,cAAc,EAAE;QAChBC,cAAc,EAAE;QAChBC,cAAc,EAAE;QAChBC,aAAa,EAAE;QACfC,iBAAiB,EAAE;QACnBC,YAAY,EAAE;QACdC,gBAAgB,EAAE;QAClBC,IAAI,EAAE;QACNC,SAAS,EAAE;IACb;IACAC,YAAY;IACZC,QAAQ;IACRC,UAAU;AACZ,EAAC;AAED,OAAO,MAAMC,eAAiC;IAC5CC,SAAS;QACPC,UAAU;QACVC,QAAQ;IACV;IACAC,gBAAgB,CAAC;IACjBC,UAAU;IACVC,mBAAmB;IACnBC,kBAAkB;IAClBC,iBAAiB;IACjBC,QAAQ;AACV,EAAC;AAED,OAAO,MAAMC,4BAAsD;IACjEC,iBAAiB;IACjBC,cAAc;AAChB,EAAC"}
1
+ {"version":3,"sources":["../../../src/collections/config/defaults.ts"],"sourcesContent":["import type { IncomingAuthType, LoginWithUsernameOptions } from '../../auth/types.js'\nimport type { CollectionConfig } from './types.js'\n\nimport defaultAccess from '../../auth/defaultAccess.js'\n\nexport const defaults: Partial<CollectionConfig> = {\n access: {\n create: defaultAccess,\n delete: defaultAccess,\n read: defaultAccess,\n unlock: defaultAccess,\n update: defaultAccess,\n },\n admin: {\n components: {},\n custom: {},\n enableRichTextLink: true,\n enableRichTextRelationship: true,\n pagination: {\n defaultLimit: 10,\n limits: [5, 10, 25, 50, 100],\n },\n useAsTitle: 'id',\n },\n auth: false,\n custom: {},\n endpoints: [],\n fields: [],\n hooks: {\n afterChange: [],\n afterDelete: [],\n afterForgotPassword: [],\n afterLogin: [],\n afterLogout: [],\n afterMe: [],\n afterOperation: [],\n afterRead: [],\n afterRefresh: [],\n beforeChange: [],\n beforeDelete: [],\n beforeLogin: [],\n beforeOperation: [],\n beforeRead: [],\n beforeValidate: [],\n me: [],\n refresh: [],\n },\n timestamps: true,\n upload: false,\n versions: false,\n}\n\nexport const authDefaults: IncomingAuthType = {\n cookies: {\n sameSite: 'Lax',\n secure: false,\n },\n forgotPassword: {},\n lockTime: 600000, // 10 minutes\n loginWithUsername: false,\n maxLoginAttempts: 5,\n tokenExpiration: 7200,\n verify: false,\n}\n\nexport const loginWithUsernameDefaults: LoginWithUsernameOptions = {\n allowEmailLogin: false,\n requireEmail: false,\n requireUsername: true,\n}\n"],"names":["defaultAccess","defaults","access","create","delete","read","unlock","update","admin","components","custom","enableRichTextLink","enableRichTextRelationship","pagination","defaultLimit","limits","useAsTitle","auth","endpoints","fields","hooks","afterChange","afterDelete","afterForgotPassword","afterLogin","afterLogout","afterMe","afterOperation","afterRead","afterRefresh","beforeChange","beforeDelete","beforeLogin","beforeOperation","beforeRead","beforeValidate","me","refresh","timestamps","upload","versions","authDefaults","cookies","sameSite","secure","forgotPassword","lockTime","loginWithUsername","maxLoginAttempts","tokenExpiration","verify","loginWithUsernameDefaults","allowEmailLogin","requireEmail","requireUsername"],"mappings":"AAGA,OAAOA,mBAAmB,8BAA6B;AAEvD,OAAO,MAAMC,WAAsC;IACjDC,QAAQ;QACNC,QAAQH;QACRI,QAAQJ;QACRK,MAAML;QACNM,QAAQN;QACRO,QAAQP;IACV;IACAQ,OAAO;QACLC,YAAY,CAAC;QACbC,QAAQ,CAAC;QACTC,oBAAoB;QACpBC,4BAA4B;QAC5BC,YAAY;YACVC,cAAc;YACdC,QAAQ;gBAAC;gBAAG;gBAAI;gBAAI;gBAAI;aAAI;QAC9B;QACAC,YAAY;IACd;IACAC,MAAM;IACNP,QAAQ,CAAC;IACTQ,WAAW,EAAE;IACbC,QAAQ,EAAE;IACVC,OAAO;QACLC,aAAa,EAAE;QACfC,aAAa,EAAE;QACfC,qBAAqB,EAAE;QACvBC,YAAY,EAAE;QACdC,aAAa,EAAE;QACfC,SAAS,EAAE;QACXC,gBAAgB,EAAE;QAClBC,WAAW,EAAE;QACbC,cAAc,EAAE;QAChBC,cAAc,EAAE;QAChBC,cAAc,EAAE;QAChBC,aAAa,EAAE;QACfC,iBAAiB,EAAE;QACnBC,YAAY,EAAE;QACdC,gBAAgB,EAAE;QAClBC,IAAI,EAAE;QACNC,SAAS,EAAE;IACb;IACAC,YAAY;IACZC,QAAQ;IACRC,UAAU;AACZ,EAAC;AAED,OAAO,MAAMC,eAAiC;IAC5CC,SAAS;QACPC,UAAU;QACVC,QAAQ;IACV;IACAC,gBAAgB,CAAC;IACjBC,UAAU;IACVC,mBAAmB;IACnBC,kBAAkB;IAClBC,iBAAiB;IACjBC,QAAQ;AACV,EAAC;AAED,OAAO,MAAMC,4BAAsD;IACjEC,iBAAiB;IACjBC,cAAc;IACdC,iBAAiB;AACnB,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/collections/config/sanitize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAe7E,eAAO,MAAM,kBAAkB,WACrB,MAAM,cACF,gBAAgB,iCAKG,KAAK,CAAC,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,KAC/E,OAAO,CAAC,yBAAyB,CAgJnC,CAAA"}
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/collections/config/sanitize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAe7E,eAAO,MAAM,kBAAkB,WACrB,MAAM,cACF,gBAAgB,iCAKG,KAAK,CAAC,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,KAC/E,OAAO,CAAC,yBAAyB,CA0JnC,CAAA"}
@@ -117,10 +117,23 @@ export const sanitizeCollection = async (config, collection, /**
117
117
  if (!sanitized.auth.strategies) {
118
118
  sanitized.auth.strategies = [];
119
119
  }
120
- sanitized.auth.loginWithUsername = sanitized.auth.loginWithUsername ? {
121
- ...loginWithUsernameDefaults,
122
- ...typeof sanitized.auth.loginWithUsername === 'boolean' ? {} : sanitized.auth.loginWithUsername
123
- } : false;
120
+ if (sanitized.auth.loginWithUsername) {
121
+ if (sanitized.auth.loginWithUsername === true) {
122
+ sanitized.auth.loginWithUsername = loginWithUsernameDefaults;
123
+ } else {
124
+ const loginWithUsernameWithDefaults = {
125
+ ...loginWithUsernameDefaults,
126
+ ...sanitized.auth.loginWithUsername
127
+ };
128
+ // if allowEmailLogin is false, requireUsername must be true
129
+ if (loginWithUsernameWithDefaults.allowEmailLogin === false) {
130
+ loginWithUsernameWithDefaults.requireUsername = true;
131
+ }
132
+ sanitized.auth.loginWithUsername = loginWithUsernameWithDefaults;
133
+ }
134
+ } else {
135
+ sanitized.auth.loginWithUsername = false;
136
+ }
124
137
  sanitized.fields = mergeBaseFields(sanitized.fields, getBaseAuthFields(sanitized.auth));
125
138
  }
126
139
  return sanitized;