payload 3.0.0-beta.10 → 3.0.0-beta.12

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 (179) hide show
  1. package/dist/auth/cookies.d.ts +16 -4
  2. package/dist/auth/cookies.d.ts.map +1 -1
  3. package/dist/auth/cookies.js +45 -14
  4. package/dist/auth/cookies.js.map +1 -1
  5. package/dist/auth/getFieldsToSign.d.ts.map +1 -1
  6. package/dist/auth/getFieldsToSign.js.map +1 -1
  7. package/dist/auth/operations/forgotPassword.js +3 -3
  8. package/dist/auth/operations/forgotPassword.js.map +1 -1
  9. package/dist/auth/operations/login.d.ts.map +1 -1
  10. package/dist/auth/operations/login.js +17 -1
  11. package/dist/auth/operations/login.js.map +1 -1
  12. package/dist/auth/sendVerificationEmail.d.ts +5 -6
  13. package/dist/auth/sendVerificationEmail.d.ts.map +1 -1
  14. package/dist/auth/sendVerificationEmail.js +4 -5
  15. package/dist/auth/sendVerificationEmail.js.map +1 -1
  16. package/dist/collections/config/client.d.ts +4 -1
  17. package/dist/collections/config/client.d.ts.map +1 -1
  18. package/dist/collections/config/client.js +3 -1
  19. package/dist/collections/config/client.js.map +1 -1
  20. package/dist/collections/config/defaults.d.ts +1 -0
  21. package/dist/collections/config/defaults.d.ts.map +1 -1
  22. package/dist/collections/config/defaults.js +1 -0
  23. package/dist/collections/config/defaults.js.map +1 -1
  24. package/dist/collections/config/schema.d.ts.map +1 -1
  25. package/dist/collections/config/schema.js +2 -0
  26. package/dist/collections/config/schema.js.map +1 -1
  27. package/dist/collections/config/types.d.ts +5 -2
  28. package/dist/collections/config/types.d.ts.map +1 -1
  29. package/dist/collections/config/types.js.map +1 -1
  30. package/dist/collections/operations/count.d.ts +13 -0
  31. package/dist/collections/operations/count.d.ts.map +1 -0
  32. package/dist/collections/operations/count.js +75 -0
  33. package/dist/collections/operations/count.js.map +1 -0
  34. package/dist/collections/operations/create.d.ts.map +1 -1
  35. package/dist/collections/operations/create.js +3 -4
  36. package/dist/collections/operations/create.js.map +1 -1
  37. package/dist/collections/operations/local/count.d.ts +20 -0
  38. package/dist/collections/operations/local/count.d.ts.map +1 -0
  39. package/dist/collections/operations/local/count.js +19 -0
  40. package/dist/collections/operations/local/count.js.map +1 -0
  41. package/dist/collections/operations/local/index.d.ts +2 -0
  42. package/dist/collections/operations/local/index.d.ts.map +1 -1
  43. package/dist/collections/operations/local/index.js +2 -0
  44. package/dist/collections/operations/local/index.js.map +1 -1
  45. package/dist/collections/operations/update.d.ts.map +1 -1
  46. package/dist/collections/operations/update.js +2 -2
  47. package/dist/collections/operations/update.js.map +1 -1
  48. package/dist/collections/operations/updateByID.js +1 -1
  49. package/dist/collections/operations/updateByID.js.map +1 -1
  50. package/dist/collections/operations/utils.d.ts +6 -0
  51. package/dist/collections/operations/utils.d.ts.map +1 -1
  52. package/dist/collections/operations/utils.js.map +1 -1
  53. package/dist/config/client.d.ts +2 -1
  54. package/dist/config/client.d.ts.map +1 -1
  55. package/dist/config/client.js +2 -1
  56. package/dist/config/client.js.map +1 -1
  57. package/dist/config/defaults.d.ts.map +1 -1
  58. package/dist/config/defaults.js +1 -0
  59. package/dist/config/defaults.js.map +1 -1
  60. package/dist/config/schema.d.ts.map +1 -1
  61. package/dist/config/schema.js +1 -0
  62. package/dist/config/schema.js.map +1 -1
  63. package/dist/config/types.d.ts +7 -36
  64. package/dist/config/types.d.ts.map +1 -1
  65. package/dist/config/types.js +0 -12
  66. package/dist/config/types.js.map +1 -1
  67. package/dist/database/types.d.ts +10 -0
  68. package/dist/database/types.d.ts.map +1 -1
  69. package/dist/database/types.js.map +1 -1
  70. package/dist/email/consoleEmailAdapter.d.ts +3 -0
  71. package/dist/email/consoleEmailAdapter.d.ts.map +1 -0
  72. package/dist/email/consoleEmailAdapter.js +16 -0
  73. package/dist/email/consoleEmailAdapter.js.map +1 -0
  74. package/dist/email/defaults.d.ts +2 -2
  75. package/dist/email/defaults.d.ts.map +1 -1
  76. package/dist/email/defaults.js +3 -3
  77. package/dist/email/defaults.js.map +1 -1
  78. package/dist/email/getStringifiedToAddress.d.ts +3 -0
  79. package/dist/email/getStringifiedToAddress.d.ts.map +1 -0
  80. package/dist/email/getStringifiedToAddress.js +20 -0
  81. package/dist/email/getStringifiedToAddress.js.map +1 -0
  82. package/dist/email/sendEmail.d.ts +3 -2
  83. package/dist/email/sendEmail.d.ts.map +1 -1
  84. package/dist/email/sendEmail.js +8 -4
  85. package/dist/email/sendEmail.js.map +1 -1
  86. package/dist/email/types.d.ts +25 -18
  87. package/dist/email/types.d.ts.map +1 -1
  88. package/dist/email/types.js +5 -1
  89. package/dist/email/types.js.map +1 -1
  90. package/dist/exports/auth.d.ts +1 -0
  91. package/dist/exports/auth.d.ts.map +1 -1
  92. package/dist/exports/auth.js +1 -0
  93. package/dist/exports/auth.js.map +1 -1
  94. package/dist/exports/database.d.ts +1 -1
  95. package/dist/exports/database.d.ts.map +1 -1
  96. package/dist/exports/database.js.map +1 -1
  97. package/dist/exports/node.d.ts +3 -0
  98. package/dist/exports/node.d.ts.map +1 -1
  99. package/dist/exports/node.js +3 -1
  100. package/dist/exports/node.js.map +1 -1
  101. package/dist/exports/operations.d.ts +1 -0
  102. package/dist/exports/operations.d.ts.map +1 -1
  103. package/dist/exports/operations.js +1 -0
  104. package/dist/exports/operations.js.map +1 -1
  105. package/dist/exports/types.d.ts +1 -0
  106. package/dist/exports/types.d.ts.map +1 -1
  107. package/dist/exports/types.js.map +1 -1
  108. package/dist/exports/utilities.d.ts +3 -0
  109. package/dist/exports/utilities.d.ts.map +1 -1
  110. package/dist/exports/utilities.js +3 -1
  111. package/dist/exports/utilities.js.map +1 -1
  112. package/dist/fields/config/client.d.ts +26 -1
  113. package/dist/fields/config/client.d.ts.map +1 -1
  114. package/dist/fields/config/client.js +2 -1
  115. package/dist/fields/config/client.js.map +1 -1
  116. package/dist/fields/config/schema.d.ts.map +1 -1
  117. package/dist/fields/config/schema.js +7 -1
  118. package/dist/fields/config/schema.js.map +1 -1
  119. package/dist/fields/config/types.d.ts +12 -3
  120. package/dist/fields/config/types.d.ts.map +1 -1
  121. package/dist/fields/config/types.js.map +1 -1
  122. package/dist/fields/validations.d.ts +2 -0
  123. package/dist/fields/validations.d.ts.map +1 -1
  124. package/dist/fields/validations.js +44 -1
  125. package/dist/fields/validations.js.map +1 -1
  126. package/dist/globals/config/client.d.ts +1 -1
  127. package/dist/globals/config/client.d.ts.map +1 -1
  128. package/dist/globals/config/client.js +2 -1
  129. package/dist/globals/config/client.js.map +1 -1
  130. package/dist/globals/config/schema.d.ts.map +1 -1
  131. package/dist/globals/config/schema.js +1 -0
  132. package/dist/globals/config/schema.js.map +1 -1
  133. package/dist/globals/config/types.d.ts +3 -1
  134. package/dist/globals/config/types.d.ts.map +1 -1
  135. package/dist/globals/config/types.js.map +1 -1
  136. package/dist/index.d.ts +13 -6
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +25 -13
  139. package/dist/index.js.map +1 -1
  140. package/dist/uploads/generateFileData.d.ts.map +1 -1
  141. package/dist/uploads/generateFileData.js +3 -2
  142. package/dist/uploads/generateFileData.js.map +1 -1
  143. package/dist/uploads/getExternalFile.d.ts +4 -3
  144. package/dist/uploads/getExternalFile.d.ts.map +1 -1
  145. package/dist/uploads/getExternalFile.js +5 -4
  146. package/dist/uploads/getExternalFile.js.map +1 -1
  147. package/dist/uploads/getImageSize.d.ts +1 -1
  148. package/dist/uploads/getImageSize.d.ts.map +1 -1
  149. package/dist/uploads/getImageSize.js +19 -5
  150. package/dist/uploads/getImageSize.js.map +1 -1
  151. package/dist/uploads/tempFile.d.ts +7 -0
  152. package/dist/uploads/tempFile.d.ts.map +1 -0
  153. package/dist/uploads/tempFile.js +39 -0
  154. package/dist/uploads/tempFile.js.map +1 -0
  155. package/dist/uploads/types.d.ts +6 -0
  156. package/dist/uploads/types.d.ts.map +1 -1
  157. package/dist/uploads/types.js.map +1 -1
  158. package/dist/utilities/importWithoutClientFiles.d.ts.map +1 -1
  159. package/dist/utilities/importWithoutClientFiles.js +8 -5
  160. package/dist/utilities/importWithoutClientFiles.js.map +1 -1
  161. package/dist/utilities/isEntityHidden.d.ts +1 -1
  162. package/dist/utilities/isEntityHidden.d.ts.map +1 -1
  163. package/dist/utilities/isEntityHidden.js.map +1 -1
  164. package/dist/utilities/telemetry/index.d.ts +3 -0
  165. package/dist/utilities/telemetry/index.d.ts.map +1 -1
  166. package/dist/utilities/telemetry/index.js +32 -6
  167. package/dist/utilities/telemetry/index.js.map +1 -1
  168. package/dist/versions/saveVersion.js +1 -1
  169. package/dist/versions/saveVersion.js.map +1 -1
  170. package/package.json +13 -4
  171. package/dist/email/build.d.ts +0 -5
  172. package/dist/email/build.d.ts.map +0 -1
  173. package/dist/email/build.js +0 -63
  174. package/dist/email/build.js.map +0 -1
  175. package/dist/email/mockHandler.d.ts +0 -5
  176. package/dist/email/mockHandler.d.ts.map +0 -1
  177. package/dist/email/mockHandler.js +0 -24
  178. package/dist/email/mockHandler.js.map +0 -1
  179. package/src/index.ts +0 -499
@@ -7,12 +7,23 @@ type CookieOptions = {
7
7
  maxAge?: number;
8
8
  name: string;
9
9
  path?: string;
10
+ returnCookieAsObject: boolean;
10
11
  sameSite?: 'Lax' | 'None' | 'Strict';
11
12
  secure?: boolean;
12
13
  value?: string;
13
14
  };
14
- export declare const generateCookies: (cookies: CookieOptions[]) => string;
15
- export declare const generateCookie: (args: CookieOptions) => string;
15
+ type CookieObject = {
16
+ domain?: string;
17
+ expires?: string;
18
+ httpOnly?: boolean;
19
+ maxAge?: number;
20
+ name: string;
21
+ path?: string;
22
+ sameSite?: 'Lax' | 'None' | 'Strict';
23
+ secure?: boolean;
24
+ value: string;
25
+ };
26
+ export declare const generateCookie: <ReturnCookieAsObject = boolean>(args: CookieOptions) => ReturnCookieAsObject extends true ? CookieObject : string;
16
27
  type GetCookieExpirationArgs = {
17
28
  seconds: number;
18
29
  };
@@ -20,10 +31,11 @@ export declare const getCookieExpiration: ({ seconds }: GetCookieExpirationArgs)
20
31
  type GeneratePayloadCookieArgs = {
21
32
  collectionConfig: SanitizedCollectionConfig;
22
33
  payload: Payload;
34
+ returnCookieAsObject?: boolean;
23
35
  token: string;
24
36
  };
25
- export declare const generatePayloadCookie: ({ collectionConfig, payload, token, }: GeneratePayloadCookieArgs) => string;
26
- export declare const generateExpiredPayloadCookie: ({ collectionConfig, payload, }: Omit<GeneratePayloadCookieArgs, 'token'>) => string;
37
+ export declare const generatePayloadCookie: <T extends GeneratePayloadCookieArgs>({ collectionConfig, payload, returnCookieAsObject, token, }: T) => T['returnCookieAsObject'] extends true ? CookieObject : string;
38
+ export declare const generateExpiredPayloadCookie: <T extends Omit<GeneratePayloadCookieArgs, "token">>({ collectionConfig, payload, returnCookieAsObject, }: T) => T['returnCookieAsObject'] extends true ? CookieObject : string;
27
39
  export declare const parseCookies: (headers: Request['headers']) => Map<string, string>;
28
40
  export {};
29
41
  //# sourceMappingURL=cookies.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../src/auth/cookies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AACjF,KAAK,aAAa,GAAG;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,IAAI,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;IACpC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,eAAe,YAAa,aAAa,EAAE,KAAG,MAE1D,CAAA;AAED,eAAO,MAAM,cAAc,SAAU,aAAa,KAAG,MAoCpD,CAAA;AAED,KAAK,uBAAuB,GAAG;IAK7B,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AACD,eAAO,MAAM,mBAAmB,gBAAwB,uBAAuB,SAI9E,CAAA;AAED,KAAK,yBAAyB,GAAG;IAE/B,gBAAgB,EAAE,yBAAyB,CAAA;IAE3C,OAAO,EAAE,OAAO,CAAA;IAEhB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AACD,eAAO,MAAM,qBAAqB,0CAI/B,yBAAyB,KAAG,MAkB9B,CAAA;AAED,eAAO,MAAM,4BAA4B,mCAGtC,KAAK,yBAAyB,EAAE,OAAO,CAAC,KAAG,MAmB7C,CAAA;AAED,eAAO,MAAM,YAAY,YAAa,OAAO,CAAC,SAAS,CAAC,KAAG,IAAI,MAAM,EAAE,MAAM,CAoB5E,CAAA"}
1
+ {"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../src/auth/cookies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AAEjF,KAAK,aAAa,GAAG;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,IAAI,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,oBAAoB,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;IACpC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,KAAK,YAAY,GAAG;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;IACpC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,eAAO,MAAM,cAAc,yCACnB,aAAa,KAClB,oBAAoB,SAAS,IAAI,GAAG,YAAY,GAAG,MAiFrD,CAAA;AACD,KAAK,uBAAuB,GAAG;IAK7B,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AACD,eAAO,MAAM,mBAAmB,gBAAwB,uBAAuB,SAI9E,CAAA;AAED,KAAK,yBAAyB,GAAG;IAE/B,gBAAgB,EAAE,yBAAyB,CAAA;IAE3C,OAAO,EAAE,OAAO,CAAA;IAEhB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAE9B,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AACD,eAAO,MAAM,qBAAqB,qGAK/B,CAAC,KAAG,CAAC,CAAC,sBAAsB,CAAC,SAAS,IAAI,GAAG,YAAY,GAAG,MAmB9D,CAAA;AAED,eAAO,MAAM,4BAA4B,6GAItC,CAAC,KAAG,CAAC,CAAC,sBAAsB,CAAC,SAAS,IAAI,GAAG,YAAY,GAAG,MAoB9D,CAAA;AAED,eAAO,MAAM,YAAY,YAAa,OAAO,CAAC,SAAS,CAAC,KAAG,IAAI,MAAM,EAAE,MAAM,CAoB5E,CAAA"}
@@ -1,39 +1,68 @@
1
- export const generateCookies = (cookies)=>{
2
- return cookies.map((options)=>generateCookie(options)).join('; ');
3
- };
4
1
  export const generateCookie = (args)=>{
5
- const { name, domain, expires, httpOnly, maxAge, path, sameSite, secure: secureArg, value } = args;
2
+ const { name, domain, expires, httpOnly, maxAge, path, returnCookieAsObject, sameSite, secure: secureArg, value } = args;
6
3
  let cookieString = `${name}=${value || ''}`;
4
+ const cookieObject = {
5
+ name,
6
+ value
7
+ };
7
8
  const secure = secureArg || sameSite === 'None';
8
9
  if (expires) {
9
- cookieString += `; Expires=${expires.toUTCString()}`;
10
+ if (returnCookieAsObject) {
11
+ cookieObject.expires = expires.toUTCString();
12
+ } else {
13
+ cookieString += `; Expires=${expires.toUTCString()}`;
14
+ }
10
15
  }
11
16
  if (maxAge) {
12
- cookieString += `; Max-Age=${maxAge}`;
17
+ if (returnCookieAsObject) {
18
+ cookieObject.maxAge = maxAge;
19
+ } else {
20
+ cookieString += `; Max-Age=${maxAge.toString()}`;
21
+ }
13
22
  }
14
23
  if (domain) {
15
- cookieString += `; Domain=${domain}`;
24
+ if (returnCookieAsObject) {
25
+ cookieObject.domain = domain;
26
+ } else {
27
+ cookieString += `; Domain=${domain}`;
28
+ }
16
29
  }
17
30
  if (path) {
18
- cookieString += `; Path=${path}`;
31
+ if (returnCookieAsObject) {
32
+ cookieObject.path = path;
33
+ } else {
34
+ cookieString += `; Path=${path}`;
35
+ }
19
36
  }
20
37
  if (secure) {
21
- cookieString += '; Secure';
38
+ if (returnCookieAsObject) {
39
+ cookieObject.secure = secure;
40
+ } else {
41
+ cookieString += `; Secure=${secure}`;
42
+ }
22
43
  }
23
44
  if (httpOnly) {
24
- cookieString += '; HttpOnly';
45
+ if (returnCookieAsObject) {
46
+ cookieObject.httpOnly = httpOnly;
47
+ } else {
48
+ cookieString += `; HttpOnly=${httpOnly}`;
49
+ }
25
50
  }
26
51
  if (sameSite) {
27
- cookieString += `; SameSite=${sameSite}`;
52
+ if (returnCookieAsObject) {
53
+ cookieObject.sameSite = sameSite;
54
+ } else {
55
+ cookieString += `; SameSite=${sameSite}`;
56
+ }
28
57
  }
29
- return cookieString;
58
+ return returnCookieAsObject ? cookieObject : cookieString;
30
59
  };
31
60
  export const getCookieExpiration = ({ seconds = 7200 })=>{
32
61
  const currentTime = new Date();
33
62
  currentTime.setSeconds(currentTime.getSeconds() + seconds);
34
63
  return currentTime;
35
64
  };
36
- export const generatePayloadCookie = ({ collectionConfig, payload, token })=>{
65
+ export const generatePayloadCookie = ({ collectionConfig, payload, returnCookieAsObject = false, token })=>{
37
66
  const sameSite = typeof collectionConfig.auth.cookies.sameSite === 'string' ? collectionConfig.auth.cookies.sameSite : collectionConfig.auth.cookies.sameSite ? 'Strict' : undefined;
38
67
  return generateCookie({
39
68
  name: `${payload.config.cookiePrefix}-token`,
@@ -43,12 +72,13 @@ export const generatePayloadCookie = ({ collectionConfig, payload, token })=>{
43
72
  }),
44
73
  httpOnly: true,
45
74
  path: '/',
75
+ returnCookieAsObject,
46
76
  sameSite,
47
77
  secure: collectionConfig.auth.cookies.secure,
48
78
  value: token
49
79
  });
50
80
  };
51
- export const generateExpiredPayloadCookie = ({ collectionConfig, payload })=>{
81
+ export const generateExpiredPayloadCookie = ({ collectionConfig, payload, returnCookieAsObject = false })=>{
52
82
  const sameSite = typeof collectionConfig.auth.cookies.sameSite === 'string' ? collectionConfig.auth.cookies.sameSite : collectionConfig.auth.cookies.sameSite ? 'Strict' : undefined;
53
83
  const expires = new Date(Date.now() - 1000);
54
84
  return generateCookie({
@@ -57,6 +87,7 @@ export const generateExpiredPayloadCookie = ({ collectionConfig, payload })=>{
57
87
  expires,
58
88
  httpOnly: true,
59
89
  path: '/',
90
+ returnCookieAsObject,
60
91
  sameSite,
61
92
  secure: collectionConfig.auth.cookies.secure
62
93
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/auth/cookies.ts"],"sourcesContent":["import type { Payload } from '../index.js'\nimport type { SanitizedCollectionConfig } from './../collections/config/types.js'\ntype CookieOptions = {\n domain?: string\n expires?: Date\n httpOnly?: boolean\n maxAge?: number\n name: string\n path?: string\n sameSite?: 'Lax' | 'None' | 'Strict'\n secure?: boolean\n value?: string\n}\n\nexport const generateCookies = (cookies: CookieOptions[]): string => {\n return cookies.map((options) => generateCookie(options)).join('; ')\n}\n\nexport const generateCookie = (args: CookieOptions): string => {\n const { name, domain, expires, httpOnly, maxAge, path, sameSite, secure: secureArg, value } = args\n\n let cookieString = `${name}=${value || ''}`\n\n const secure = secureArg || sameSite === 'None'\n\n if (expires) {\n cookieString += `; Expires=${expires.toUTCString()}`\n }\n\n if (maxAge) {\n cookieString += `; Max-Age=${maxAge}`\n }\n\n if (domain) {\n cookieString += `; Domain=${domain}`\n }\n\n if (path) {\n cookieString += `; Path=${path}`\n }\n\n if (secure) {\n cookieString += '; Secure'\n }\n\n if (httpOnly) {\n cookieString += '; HttpOnly'\n }\n\n if (sameSite) {\n cookieString += `; SameSite=${sameSite}`\n }\n\n return cookieString\n}\n\ntype GetCookieExpirationArgs = {\n /*\n The number of seconds until the cookie expires\n @default 7200 seconds (2 hours)\n */\n seconds: number\n}\nexport const getCookieExpiration = ({ seconds = 7200 }: GetCookieExpirationArgs) => {\n const currentTime = new Date()\n currentTime.setSeconds(currentTime.getSeconds() + seconds)\n return currentTime\n}\n\ntype GeneratePayloadCookieArgs = {\n /* The auth collection config */\n collectionConfig: SanitizedCollectionConfig\n /* An instance of payload */\n payload: Payload\n /* The token to be stored in the cookie */\n token: string\n}\nexport const generatePayloadCookie = ({\n collectionConfig,\n payload,\n token,\n}: GeneratePayloadCookieArgs): string => {\n const sameSite =\n typeof collectionConfig.auth.cookies.sameSite === 'string'\n ? collectionConfig.auth.cookies.sameSite\n : collectionConfig.auth.cookies.sameSite\n ? 'Strict'\n : undefined\n\n return generateCookie({\n name: `${payload.config.cookiePrefix}-token`,\n domain: collectionConfig.auth.cookies.domain ?? undefined,\n expires: getCookieExpiration({ seconds: collectionConfig.auth.tokenExpiration }),\n httpOnly: true,\n path: '/',\n sameSite,\n secure: collectionConfig.auth.cookies.secure,\n value: token,\n })\n}\n\nexport const generateExpiredPayloadCookie = ({\n collectionConfig,\n payload,\n}: Omit<GeneratePayloadCookieArgs, 'token'>): string => {\n const sameSite =\n typeof collectionConfig.auth.cookies.sameSite === 'string'\n ? collectionConfig.auth.cookies.sameSite\n : collectionConfig.auth.cookies.sameSite\n ? 'Strict'\n : undefined\n\n const expires = new Date(Date.now() - 1000)\n\n return generateCookie({\n name: `${payload.config.cookiePrefix}-token`,\n domain: collectionConfig.auth.cookies.domain ?? undefined,\n expires,\n httpOnly: true,\n path: '/',\n sameSite,\n secure: collectionConfig.auth.cookies.secure,\n })\n}\n\nexport const parseCookies = (headers: Request['headers']): Map<string, string> => {\n const cookieMap = new Map<string, string>()\n const cookie = headers.get('Cookie')\n\n if (cookie) {\n cookie.split(';').forEach((cookie) => {\n const parts = cookie.split('=')\n const key = parts.shift().trim()\n const encodedValue = parts.join('=')\n\n try {\n const decodedValue = decodeURI(encodedValue)\n cookieMap.set(key, decodedValue)\n } catch (e) {\n return null\n }\n })\n }\n\n return cookieMap\n}\n"],"names":["generateCookies","cookies","map","options","generateCookie","join","args","name","domain","expires","httpOnly","maxAge","path","sameSite","secure","secureArg","value","cookieString","toUTCString","getCookieExpiration","seconds","currentTime","Date","setSeconds","getSeconds","generatePayloadCookie","collectionConfig","payload","token","auth","undefined","config","cookiePrefix","tokenExpiration","generateExpiredPayloadCookie","now","parseCookies","headers","cookieMap","Map","cookie","get","split","forEach","parts","key","shift","trim","encodedValue","decodedValue","decodeURI","set","e"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../src/auth/cookies.ts"],"sourcesContent":["import type { Payload } from '../index.js'\nimport type { SanitizedCollectionConfig } from './../collections/config/types.js'\n\ntype CookieOptions = {\n domain?: string\n expires?: Date\n httpOnly?: boolean\n maxAge?: number\n name: string\n path?: string\n returnCookieAsObject: boolean\n sameSite?: 'Lax' | 'None' | 'Strict'\n secure?: boolean\n value?: string\n}\n\ntype CookieObject = {\n domain?: string\n expires?: string\n httpOnly?: boolean\n maxAge?: number\n name: string\n path?: string\n sameSite?: 'Lax' | 'None' | 'Strict'\n secure?: boolean\n value: string\n}\n\nexport const generateCookie = <ReturnCookieAsObject = boolean>(\n args: CookieOptions,\n): ReturnCookieAsObject extends true ? CookieObject : string => {\n const {\n name,\n domain,\n expires,\n httpOnly,\n maxAge,\n path,\n returnCookieAsObject,\n sameSite,\n secure: secureArg,\n value,\n } = args\n\n let cookieString = `${name}=${value || ''}`\n const cookieObject: CookieObject = {\n name,\n value,\n }\n\n const secure = secureArg || sameSite === 'None'\n\n if (expires) {\n if (returnCookieAsObject) {\n cookieObject.expires = expires.toUTCString()\n } else {\n cookieString += `; Expires=${expires.toUTCString()}`\n }\n }\n\n if (maxAge) {\n if (returnCookieAsObject) {\n cookieObject.maxAge = maxAge\n } else {\n cookieString += `; Max-Age=${maxAge.toString()}`\n }\n }\n\n if (domain) {\n if (returnCookieAsObject) {\n cookieObject.domain = domain\n } else {\n cookieString += `; Domain=${domain}`\n }\n }\n\n if (path) {\n if (returnCookieAsObject) {\n cookieObject.path = path\n } else {\n cookieString += `; Path=${path}`\n }\n }\n\n if (secure) {\n if (returnCookieAsObject) {\n cookieObject.secure = secure\n } else {\n cookieString += `; Secure=${secure}`\n }\n }\n\n if (httpOnly) {\n if (returnCookieAsObject) {\n cookieObject.httpOnly = httpOnly\n } else {\n cookieString += `; HttpOnly=${httpOnly}`\n }\n }\n\n if (sameSite) {\n if (returnCookieAsObject) {\n cookieObject.sameSite = sameSite\n } else {\n cookieString += `; SameSite=${sameSite}`\n }\n }\n\n return (returnCookieAsObject ? cookieObject : cookieString) as ReturnCookieAsObject extends true\n ? CookieObject\n : string\n}\ntype GetCookieExpirationArgs = {\n /*\n The number of seconds until the cookie expires\n @default 7200 seconds (2 hours)\n */\n seconds: number\n}\nexport const getCookieExpiration = ({ seconds = 7200 }: GetCookieExpirationArgs) => {\n const currentTime = new Date()\n currentTime.setSeconds(currentTime.getSeconds() + seconds)\n return currentTime\n}\n\ntype GeneratePayloadCookieArgs = {\n /* The auth collection config */\n collectionConfig: SanitizedCollectionConfig\n /* An instance of payload */\n payload: Payload\n /* The returnAs value */\n returnCookieAsObject?: boolean\n /* The token to be stored in the cookie */\n token: string\n}\nexport const generatePayloadCookie = <T extends GeneratePayloadCookieArgs>({\n collectionConfig,\n payload,\n returnCookieAsObject = false,\n token,\n}: T): T['returnCookieAsObject'] extends true ? CookieObject : string => {\n const sameSite =\n typeof collectionConfig.auth.cookies.sameSite === 'string'\n ? collectionConfig.auth.cookies.sameSite\n : collectionConfig.auth.cookies.sameSite\n ? 'Strict'\n : undefined\n\n return generateCookie<T['returnCookieAsObject']>({\n name: `${payload.config.cookiePrefix}-token`,\n domain: collectionConfig.auth.cookies.domain ?? undefined,\n expires: getCookieExpiration({ seconds: collectionConfig.auth.tokenExpiration }),\n httpOnly: true,\n path: '/',\n returnCookieAsObject,\n sameSite,\n secure: collectionConfig.auth.cookies.secure,\n value: token,\n })\n}\n\nexport const generateExpiredPayloadCookie = <T extends Omit<GeneratePayloadCookieArgs, 'token'>>({\n collectionConfig,\n payload,\n returnCookieAsObject = false,\n}: T): T['returnCookieAsObject'] extends true ? CookieObject : string => {\n const sameSite =\n typeof collectionConfig.auth.cookies.sameSite === 'string'\n ? collectionConfig.auth.cookies.sameSite\n : collectionConfig.auth.cookies.sameSite\n ? 'Strict'\n : undefined\n\n const expires = new Date(Date.now() - 1000)\n\n return generateCookie<T['returnCookieAsObject']>({\n name: `${payload.config.cookiePrefix}-token`,\n domain: collectionConfig.auth.cookies.domain ?? undefined,\n expires,\n httpOnly: true,\n path: '/',\n returnCookieAsObject,\n sameSite,\n secure: collectionConfig.auth.cookies.secure,\n })\n}\n\nexport const parseCookies = (headers: Request['headers']): Map<string, string> => {\n const cookieMap = new Map<string, string>()\n const cookie = headers.get('Cookie')\n\n if (cookie) {\n cookie.split(';').forEach((cookie) => {\n const parts = cookie.split('=')\n const key = parts.shift().trim()\n const encodedValue = parts.join('=')\n\n try {\n const decodedValue = decodeURI(encodedValue)\n cookieMap.set(key, decodedValue)\n } catch (e) {\n return null\n }\n })\n }\n\n return cookieMap\n}\n"],"names":["generateCookie","args","name","domain","expires","httpOnly","maxAge","path","returnCookieAsObject","sameSite","secure","secureArg","value","cookieString","cookieObject","toUTCString","toString","getCookieExpiration","seconds","currentTime","Date","setSeconds","getSeconds","generatePayloadCookie","collectionConfig","payload","token","auth","cookies","undefined","config","cookiePrefix","tokenExpiration","generateExpiredPayloadCookie","now","parseCookies","headers","cookieMap","Map","cookie","get","split","forEach","parts","key","shift","trim","encodedValue","join","decodedValue","decodeURI","set","e"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"getFieldsToSign.d.ts","sourceRoot":"","sources":["../../src/auth/getFieldsToSign.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAsGvD,eAAO,MAAM,eAAe,SAAU;IACpC,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;CAC7B,KAAG,OAAO,MAAM,EAAE,OAAO,CAgBzB,CAAA"}
1
+ {"version":3,"file":"getFieldsToSign.d.ts","sourceRoot":"","sources":["../../src/auth/getFieldsToSign.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAqGvD,eAAO,MAAM,eAAe,SAAU;IACpC,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;CAC7B,KAAG,OAAO,MAAM,EAAE,OAAO,CAgBzB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/auth/getFieldsToSign.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport type { CollectionConfig } from '../collections/config/types.js'\nimport type { Field, TabAsField } from '../fields/config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\nimport type { User } from './index.js'\n\nimport { fieldAffectsData, tabHasName } from '../fields/config/types.js'\n\ntype TraverseFieldsArgs = {\n data: Record<string, unknown>\n fields: (Field | TabAsField)[]\n result: Record<string, unknown>\n}\nconst traverseFields = ({\n data,\n // parent,\n fields,\n result,\n}: TraverseFieldsArgs) => {\n fields.forEach((field) => {\n switch (field.type) {\n case 'row':\n case 'collapsible': {\n traverseFields({\n data,\n fields: field.fields,\n result,\n })\n break\n }\n case 'group': {\n let targetResult\n if (typeof field.saveToJWT === 'string') {\n targetResult = field.saveToJWT\n result[field.saveToJWT] = data[field.name]\n } else if (field.saveToJWT) {\n targetResult = field.name\n result[field.name] = data[field.name]\n }\n const groupData: Record<string, unknown> = data[field.name] as Record<string, unknown>\n const groupResult = (targetResult ? result[targetResult] : result) as Record<\n string,\n unknown\n >\n traverseFields({\n data: groupData,\n fields: field.fields,\n result: groupResult,\n })\n break\n }\n case 'tabs': {\n traverseFields({\n data,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n result,\n })\n break\n }\n case 'tab': {\n if (tabHasName(field)) {\n let targetResult\n if (typeof field.saveToJWT === 'string') {\n targetResult = field.saveToJWT\n result[field.saveToJWT] = data[field.name]\n } else if (field.saveToJWT) {\n targetResult = field.name\n result[field.name] = data[field.name]\n }\n const tabData: Record<string, unknown> = data[field.name] as Record<string, unknown>\n const tabResult = (targetResult ? result[targetResult] : result) as Record<\n string,\n unknown\n >\n traverseFields({\n data: tabData,\n fields: field.fields,\n result: tabResult,\n })\n } else {\n traverseFields({\n data,\n fields: field.fields,\n result,\n })\n }\n break\n }\n default:\n if (fieldAffectsData(field)) {\n if (field.saveToJWT) {\n if (typeof field.saveToJWT === 'string') {\n result[field.saveToJWT] = data[field.name]\n delete result[field.name]\n } else {\n result[field.name] = data[field.name] as Record<string, unknown>\n }\n } else if (field.saveToJWT === false) {\n delete result[field.name]\n }\n }\n }\n })\n return result\n}\nexport const getFieldsToSign = (args: {\n collectionConfig: CollectionConfig\n email: string\n user: PayloadRequest['user']\n}): Record<string, unknown> => {\n const { collectionConfig, email, user } = args\n\n const result: Record<string, unknown> = {\n id: user.id,\n collection: collectionConfig.slug,\n email,\n }\n\n traverseFields({\n data: user,\n fields: collectionConfig.fields,\n result,\n })\n\n return result\n}\n"],"names":["fieldAffectsData","tabHasName","traverseFields","data","fields","result","forEach","field","type","targetResult","saveToJWT","name","groupData","groupResult","tabs","map","tab","tabData","tabResult","getFieldsToSign","args","collectionConfig","email","user","id","collection","slug"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../src/auth/getFieldsToSign.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport type { CollectionConfig } from '../collections/config/types.js'\nimport type { Field, TabAsField } from '../fields/config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { fieldAffectsData, tabHasName } from '../fields/config/types.js'\n\ntype TraverseFieldsArgs = {\n data: Record<string, unknown>\n fields: (Field | TabAsField)[]\n result: Record<string, unknown>\n}\nconst traverseFields = ({\n data,\n // parent,\n fields,\n result,\n}: TraverseFieldsArgs) => {\n fields.forEach((field) => {\n switch (field.type) {\n case 'row':\n case 'collapsible': {\n traverseFields({\n data,\n fields: field.fields,\n result,\n })\n break\n }\n case 'group': {\n let targetResult\n if (typeof field.saveToJWT === 'string') {\n targetResult = field.saveToJWT\n result[field.saveToJWT] = data[field.name]\n } else if (field.saveToJWT) {\n targetResult = field.name\n result[field.name] = data[field.name]\n }\n const groupData: Record<string, unknown> = data[field.name] as Record<string, unknown>\n const groupResult = (targetResult ? result[targetResult] : result) as Record<\n string,\n unknown\n >\n traverseFields({\n data: groupData,\n fields: field.fields,\n result: groupResult,\n })\n break\n }\n case 'tabs': {\n traverseFields({\n data,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n result,\n })\n break\n }\n case 'tab': {\n if (tabHasName(field)) {\n let targetResult\n if (typeof field.saveToJWT === 'string') {\n targetResult = field.saveToJWT\n result[field.saveToJWT] = data[field.name]\n } else if (field.saveToJWT) {\n targetResult = field.name\n result[field.name] = data[field.name]\n }\n const tabData: Record<string, unknown> = data[field.name] as Record<string, unknown>\n const tabResult = (targetResult ? result[targetResult] : result) as Record<\n string,\n unknown\n >\n traverseFields({\n data: tabData,\n fields: field.fields,\n result: tabResult,\n })\n } else {\n traverseFields({\n data,\n fields: field.fields,\n result,\n })\n }\n break\n }\n default:\n if (fieldAffectsData(field)) {\n if (field.saveToJWT) {\n if (typeof field.saveToJWT === 'string') {\n result[field.saveToJWT] = data[field.name]\n delete result[field.name]\n } else {\n result[field.name] = data[field.name] as Record<string, unknown>\n }\n } else if (field.saveToJWT === false) {\n delete result[field.name]\n }\n }\n }\n })\n return result\n}\nexport const getFieldsToSign = (args: {\n collectionConfig: CollectionConfig\n email: string\n user: PayloadRequest['user']\n}): Record<string, unknown> => {\n const { collectionConfig, email, user } = args\n\n const result: Record<string, unknown> = {\n id: user.id,\n collection: collectionConfig.slug,\n email,\n }\n\n traverseFields({\n data: user,\n fields: collectionConfig.fields,\n result,\n })\n\n return result\n}\n"],"names":["fieldAffectsData","tabHasName","traverseFields","data","fields","result","forEach","field","type","targetResult","saveToJWT","name","groupData","groupResult","tabs","map","tab","tabData","tabResult","getFieldsToSign","args","collectionConfig","email","user","id","collection","slug"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -26,7 +26,7 @@ export const forgotPasswordOperation = async (incomingArgs)=>{
26
26
  req: args.req
27
27
  }) || args;
28
28
  }, Promise.resolve());
29
- const { collection: { config: collectionConfig }, data, disableEmail, expiration, req: { payload: { config, emailOptions, sendEmail: email }, payload }, req } = args;
29
+ const { collection: { config: collectionConfig }, data, disableEmail, expiration, req: { payload: { config, email }, payload }, req } = args;
30
30
  // /////////////////////////////////////
31
31
  // Forget password
32
32
  // /////////////////////////////////////
@@ -80,8 +80,8 @@ export const forgotPasswordOperation = async (incomingArgs)=>{
80
80
  });
81
81
  }
82
82
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
83
- email({
84
- from: `"${emailOptions.fromName}" <${emailOptions.fromAddress}>`,
83
+ email.sendEmail({
84
+ from: `"${email.defaultFromName}" <${email.defaultFromAddress}>`,
85
85
  html,
86
86
  subject,
87
87
  to: data.email
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/operations/forgotPassword.ts"],"sourcesContent":["import crypto from 'crypto'\nimport httpStatus from 'http-status'\nimport { URL } from 'url'\n\nimport type { Collection } from '../../collections/config/types.js'\nimport type { PayloadRequest } from '../../types/index.js'\n\nimport { buildAfterOperation } from '../../collections/operations/utils.js'\nimport { APIError } 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 = {\n collection: Collection\n data: {\n [key: string]: unknown\n email: string\n }\n disableEmail?: boolean\n expiration?: number\n req: PayloadRequest\n}\n\nexport type Result = string\n\nexport const forgotPasswordOperation = async (incomingArgs: Arguments): Promise<null | string> => {\n if (!Object.prototype.hasOwnProperty.call(incomingArgs.data, 'email')) {\n throw new APIError('Missing email.', httpStatus.BAD_REQUEST)\n }\n\n let args = incomingArgs\n\n try {\n const shouldCommit = await initTransaction(args.req)\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n await args.collection.config.hooks.beforeOperation.reduce(async (priorHook, hook) => {\n await priorHook\n\n args =\n (await hook({\n args,\n collection: args.collection?.config,\n context: args.req.context,\n operation: 'forgotPassword',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n const {\n collection: { config: collectionConfig },\n data,\n disableEmail,\n expiration,\n req: {\n payload: { config, emailOptions, sendEmail: email },\n payload,\n },\n req,\n } = args\n\n // /////////////////////////////////////\n // Forget password\n // /////////////////////////////////////\n\n let token: string = crypto.randomBytes(20).toString('hex')\n\n type UserDoc = {\n id: number | string\n resetPasswordExpiration?: string\n resetPasswordToken?: string\n }\n\n if (!data.email) {\n throw new APIError('Missing email.', httpStatus.BAD_REQUEST)\n }\n\n let user = await payload.db.findOne<UserDoc>({\n collection: collectionConfig.slug,\n req,\n where: { email: { equals: data.email.toLowerCase() } },\n })\n\n // We don't want to indicate specifically that an email was not found,\n // as doing so could lead to the exposure of registered emails.\n // Therefore, we prefer to fail silently.\n if (!user) return null\n\n user.resetPasswordToken = token\n user.resetPasswordExpiration = new Date(expiration || Date.now() + 3600000).toISOString() // 1 hour\n\n user = await payload.update({\n id: user.id,\n collection: collectionConfig.slug,\n data: user,\n req,\n })\n\n if (!disableEmail) {\n const protocol = new URL(req.url).protocol\n const serverURL =\n config.serverURL !== null && config.serverURL !== ''\n ? config.serverURL\n : `${protocol}://${req.headers.get('host')}`\n\n let html = `${req.t('authentication:youAreReceivingResetPassword')}\n <a href=\"${serverURL}${config.routes.admin}/reset/${token}\">\n ${serverURL}${config.routes.admin}/reset/${token}\n </a>\n ${req.t('authentication:youDidNotRequestPassword')}`\n\n if (typeof collectionConfig.auth.forgotPassword.generateEmailHTML === 'function') {\n html = await collectionConfig.auth.forgotPassword.generateEmailHTML({\n req,\n token,\n user,\n })\n }\n\n let subject = req.t('authentication:resetYourPassword')\n\n if (typeof collectionConfig.auth.forgotPassword.generateEmailSubject === 'function') {\n subject = await collectionConfig.auth.forgotPassword.generateEmailSubject({\n req,\n token,\n user,\n })\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n email({\n from: `\"${emailOptions.fromName}\" <${emailOptions.fromAddress}>`,\n html,\n subject,\n to: data.email,\n })\n }\n\n // /////////////////////////////////////\n // afterForgotPassword - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterForgotPassword.reduce(async (priorHook, hook) => {\n await priorHook\n await hook({ args, collection: args.collection?.config, context: req.context })\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n token = await buildAfterOperation({\n args,\n collection: args.collection?.config,\n operation: 'forgotPassword',\n result: token,\n })\n\n if (shouldCommit) await commitTransaction(req)\n\n return token\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["crypto","httpStatus","URL","buildAfterOperation","APIError","commitTransaction","initTransaction","killTransaction","forgotPasswordOperation","incomingArgs","Object","prototype","hasOwnProperty","call","data","BAD_REQUEST","args","shouldCommit","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","collectionConfig","disableEmail","expiration","payload","emailOptions","sendEmail","email","token","randomBytes","toString","user","db","findOne","slug","where","equals","toLowerCase","resetPasswordToken","resetPasswordExpiration","Date","now","toISOString","update","id","protocol","url","serverURL","headers","get","html","t","routes","admin","auth","forgotPassword","generateEmailHTML","subject","generateEmailSubject","from","fromName","fromAddress","to","afterForgotPassword","result","error"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../src/auth/operations/forgotPassword.ts"],"sourcesContent":["import crypto from 'crypto'\nimport httpStatus from 'http-status'\nimport { URL } from 'url'\n\nimport type { Collection } from '../../collections/config/types.js'\nimport type { PayloadRequest } from '../../types/index.js'\n\nimport { buildAfterOperation } from '../../collections/operations/utils.js'\nimport { APIError } 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 = {\n collection: Collection\n data: {\n [key: string]: unknown\n email: string\n }\n disableEmail?: boolean\n expiration?: number\n req: PayloadRequest\n}\n\nexport type Result = string\n\nexport const forgotPasswordOperation = async (incomingArgs: Arguments): Promise<null | string> => {\n if (!Object.prototype.hasOwnProperty.call(incomingArgs.data, 'email')) {\n throw new APIError('Missing email.', httpStatus.BAD_REQUEST)\n }\n\n let args = incomingArgs\n\n try {\n const shouldCommit = await initTransaction(args.req)\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n await args.collection.config.hooks.beforeOperation.reduce(async (priorHook, hook) => {\n await priorHook\n\n args =\n (await hook({\n args,\n collection: args.collection?.config,\n context: args.req.context,\n operation: 'forgotPassword',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n const {\n collection: { config: collectionConfig },\n data,\n disableEmail,\n expiration,\n req: {\n payload: { config, email },\n payload,\n },\n req,\n } = args\n\n // /////////////////////////////////////\n // Forget password\n // /////////////////////////////////////\n\n let token: string = crypto.randomBytes(20).toString('hex')\n\n type UserDoc = {\n id: number | string\n resetPasswordExpiration?: string\n resetPasswordToken?: string\n }\n\n if (!data.email) {\n throw new APIError('Missing email.', httpStatus.BAD_REQUEST)\n }\n\n let user = await payload.db.findOne<UserDoc>({\n collection: collectionConfig.slug,\n req,\n where: { email: { equals: data.email.toLowerCase() } },\n })\n\n // We don't want to indicate specifically that an email was not found,\n // as doing so could lead to the exposure of registered emails.\n // Therefore, we prefer to fail silently.\n if (!user) return null\n\n user.resetPasswordToken = token\n user.resetPasswordExpiration = new Date(expiration || Date.now() + 3600000).toISOString() // 1 hour\n\n user = await payload.update({\n id: user.id,\n collection: collectionConfig.slug,\n data: user,\n req,\n })\n\n if (!disableEmail) {\n const protocol = new URL(req.url).protocol\n const serverURL =\n config.serverURL !== null && config.serverURL !== ''\n ? config.serverURL\n : `${protocol}://${req.headers.get('host')}`\n\n let html = `${req.t('authentication:youAreReceivingResetPassword')}\n <a href=\"${serverURL}${config.routes.admin}/reset/${token}\">\n ${serverURL}${config.routes.admin}/reset/${token}\n </a>\n ${req.t('authentication:youDidNotRequestPassword')}`\n\n if (typeof collectionConfig.auth.forgotPassword.generateEmailHTML === 'function') {\n html = await collectionConfig.auth.forgotPassword.generateEmailHTML({\n req,\n token,\n user,\n })\n }\n\n let subject = req.t('authentication:resetYourPassword')\n\n if (typeof collectionConfig.auth.forgotPassword.generateEmailSubject === 'function') {\n subject = await collectionConfig.auth.forgotPassword.generateEmailSubject({\n req,\n token,\n user,\n })\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n email.sendEmail({\n from: `\"${email.defaultFromName}\" <${email.defaultFromAddress}>`,\n html,\n subject,\n to: data.email,\n })\n }\n\n // /////////////////////////////////////\n // afterForgotPassword - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterForgotPassword.reduce(async (priorHook, hook) => {\n await priorHook\n await hook({ args, collection: args.collection?.config, context: req.context })\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n token = await buildAfterOperation({\n args,\n collection: args.collection?.config,\n operation: 'forgotPassword',\n result: token,\n })\n\n if (shouldCommit) await commitTransaction(req)\n\n return token\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["crypto","httpStatus","URL","buildAfterOperation","APIError","commitTransaction","initTransaction","killTransaction","forgotPasswordOperation","incomingArgs","Object","prototype","hasOwnProperty","call","data","BAD_REQUEST","args","shouldCommit","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","collectionConfig","disableEmail","expiration","payload","email","token","randomBytes","toString","user","db","findOne","slug","where","equals","toLowerCase","resetPasswordToken","resetPasswordExpiration","Date","now","toISOString","update","id","protocol","url","serverURL","headers","get","html","t","routes","admin","auth","forgotPassword","generateEmailHTML","subject","generateEmailSubject","sendEmail","from","defaultFromName","defaultFromAddress","to","afterForgotPassword","result","error"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/login.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAevC,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,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,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,yDACX,SAAS,KACtB,QAAQ,MAAM,GAAG;IAAE,IAAI,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAA;CAAE,CAgNjE,CAAA"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/login.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAevC,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,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,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,yDACX,SAAS,KACtB,QAAQ,MAAM,GAAG;IAAE,IAAI,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAA;CAAE,CAuNjE,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import jwt from 'jsonwebtoken';
2
2
  import { buildAfterOperation } from '../../collections/operations/utils.js';
3
- import { AuthenticationError, LockedAuth } from '../../errors/index.js';
3
+ import { AuthenticationError, LockedAuth, ValidationError } from '../../errors/index.js';
4
4
  import { afterRead } from '../../fields/hooks/afterRead/index.js';
5
5
  import { commitTransaction } from '../../utilities/commitTransaction.js';
6
6
  import { initTransaction } from '../../utilities/initTransaction.js';
@@ -33,6 +33,22 @@ export const loginOperation = async (incomingArgs)=>{
33
33
  // Login
34
34
  // /////////////////////////////////////
35
35
  const { email: unsanitizedEmail, password } = data;
36
+ if (typeof unsanitizedEmail !== 'string' || unsanitizedEmail.trim() === '') {
37
+ throw new ValidationError([
38
+ {
39
+ field: 'email',
40
+ message: req.i18n.t('validation:required')
41
+ }
42
+ ]);
43
+ }
44
+ if (typeof password !== 'string' || password.trim() === '') {
45
+ throw new ValidationError([
46
+ {
47
+ field: 'password',
48
+ message: req.i18n.t('validation:required')
49
+ }
50
+ ]);
51
+ }
36
52
  const email = unsanitizedEmail ? unsanitizedEmail.toLowerCase().trim() : null;
37
53
  let user = await payload.db.findOne({
38
54
  collection: collectionConfig.slug,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/operations/login.ts"],"sourcesContent":["import jwt from 'jsonwebtoken'\n\nimport type { Collection } from '../../collections/config/types.js'\nimport type { GeneratedTypes } from '../../index.js'\nimport type { PayloadRequest } from '../../types/index.js'\nimport type { User } from '../types.js'\n\nimport { buildAfterOperation } from '../../collections/operations/utils.js'\nimport { AuthenticationError, LockedAuth } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport sanitizeInternalFields from '../../utilities/sanitizeInternalFields.js'\nimport { getFieldsToSign } from '../getFieldsToSign.js'\nimport isLocked from '../isLocked.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 = {\n collection: Collection\n data: {\n email: string\n password: string\n }\n depth?: number\n overrideAccess?: boolean\n req: PayloadRequest\n showHiddenFields?: boolean\n}\n\nexport const loginOperation = async <TSlug extends keyof GeneratedTypes['collections']>(\n incomingArgs: Arguments,\n): Promise<Result & { user: GeneratedTypes['collections'][TSlug] }> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = await initTransaction(args.req)\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n await args.collection.config.hooks.beforeOperation.reduce(async (priorHook, hook) => {\n await priorHook\n\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 }, Promise.resolve())\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 const { email: unsanitizedEmail, password } = data\n\n const email = unsanitizedEmail ? unsanitizedEmail.toLowerCase().trim() : null\n\n let user = await payload.db.findOne<any>({\n collection: collectionConfig.slug,\n req,\n where: { email: { equals: email.toLowerCase() } },\n })\n\n if (!user || (args.collection.config.auth.verify && user._verified === false)) {\n throw new AuthenticationError(req.t)\n }\n\n if (user && isLocked(user.lockUntil)) {\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 if (shouldCommit) await commitTransaction(req)\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,\n user,\n })\n\n await collectionConfig.hooks.beforeLogin.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: args.req.context,\n req: args.req,\n user,\n })) || user\n }, Promise.resolve())\n\n const token = jwt.sign(fieldsToSign, secret, {\n expiresIn: collectionConfig.auth.tokenExpiration,\n })\n\n req.user = user\n\n // /////////////////////////////////////\n // afterLogin - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterLogin.reduce(async (priorHook, hook) => {\n await priorHook\n\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 }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n user = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: user,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n req,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: req.context,\n doc: user,\n req,\n })) || user\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: req.context,\n doc: user,\n req,\n })) || user\n }, Promise.resolve())\n\n let result: Result & { user: GeneratedTypes['collections'][TSlug] } = {\n exp: (jwt.decode(token) as jwt.JwtPayload).exp,\n token,\n user,\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation<GeneratedTypes['collections'][TSlug]>({\n args,\n collection: args.collection?.config,\n operation: 'login',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n if (shouldCommit) await commitTransaction(req)\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["jwt","buildAfterOperation","AuthenticationError","LockedAuth","afterRead","commitTransaction","initTransaction","killTransaction","sanitizeInternalFields","getFieldsToSign","isLocked","authenticateLocalStrategy","incrementLoginAttempts","resetLoginAttempts","loginOperation","incomingArgs","args","shouldCommit","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","collectionConfig","data","depth","overrideAccess","fallbackLocale","locale","payload","secret","showHiddenFields","email","unsanitizedEmail","password","toLowerCase","trim","user","db","findOne","slug","where","equals","auth","verify","_verified","t","lockUntil","authResult","doc","maxLoginAttemptsEnabled","maxLoginAttempts","fieldsToSign","beforeLogin","token","sign","expiresIn","tokenExpiration","afterLogin","global","result","exp","decode","error"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../src/auth/operations/login.ts"],"sourcesContent":["import jwt from 'jsonwebtoken'\n\nimport type { Collection } from '../../collections/config/types.js'\nimport type { GeneratedTypes } from '../../index.js'\nimport type { PayloadRequest } 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 { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport sanitizeInternalFields from '../../utilities/sanitizeInternalFields.js'\nimport { getFieldsToSign } from '../getFieldsToSign.js'\nimport isLocked from '../isLocked.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 = {\n collection: Collection\n data: {\n email: string\n password: string\n }\n depth?: number\n overrideAccess?: boolean\n req: PayloadRequest\n showHiddenFields?: boolean\n}\n\nexport const loginOperation = async <TSlug extends keyof GeneratedTypes['collections']>(\n incomingArgs: Arguments,\n): Promise<Result & { user: GeneratedTypes['collections'][TSlug] }> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = await initTransaction(args.req)\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n await args.collection.config.hooks.beforeOperation.reduce(async (priorHook, hook) => {\n await priorHook\n\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 }, Promise.resolve())\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 const { email: unsanitizedEmail, password } = data\n\n if (typeof unsanitizedEmail !== 'string' || unsanitizedEmail.trim() === '') {\n throw new ValidationError([{ field: 'email', message: req.i18n.t('validation:required') }])\n }\n if (typeof password !== 'string' || password.trim() === '') {\n throw new ValidationError([{ field: 'password', message: req.i18n.t('validation:required') }])\n }\n\n const email = unsanitizedEmail ? unsanitizedEmail.toLowerCase().trim() : null\n\n let user = await payload.db.findOne<any>({\n collection: collectionConfig.slug,\n req,\n where: { email: { equals: email.toLowerCase() } },\n })\n\n if (!user || (args.collection.config.auth.verify && user._verified === false)) {\n throw new AuthenticationError(req.t)\n }\n\n if (user && isLocked(user.lockUntil)) {\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 if (shouldCommit) await commitTransaction(req)\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,\n user,\n })\n\n await collectionConfig.hooks.beforeLogin.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: args.req.context,\n req: args.req,\n user,\n })) || user\n }, Promise.resolve())\n\n const token = jwt.sign(fieldsToSign, secret, {\n expiresIn: collectionConfig.auth.tokenExpiration,\n })\n\n req.user = user\n\n // /////////////////////////////////////\n // afterLogin - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterLogin.reduce(async (priorHook, hook) => {\n await priorHook\n\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 }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n user = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: user,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n req,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: req.context,\n doc: user,\n req,\n })) || user\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: req.context,\n doc: user,\n req,\n })) || user\n }, Promise.resolve())\n\n let result: Result & { user: GeneratedTypes['collections'][TSlug] } = {\n exp: (jwt.decode(token) as jwt.JwtPayload).exp,\n token,\n user,\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation<GeneratedTypes['collections'][TSlug]>({\n args,\n collection: args.collection?.config,\n operation: 'login',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n if (shouldCommit) await commitTransaction(req)\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["jwt","buildAfterOperation","AuthenticationError","LockedAuth","ValidationError","afterRead","commitTransaction","initTransaction","killTransaction","sanitizeInternalFields","getFieldsToSign","isLocked","authenticateLocalStrategy","incrementLoginAttempts","resetLoginAttempts","loginOperation","incomingArgs","args","shouldCommit","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","collectionConfig","data","depth","overrideAccess","fallbackLocale","locale","payload","secret","showHiddenFields","email","unsanitizedEmail","password","trim","field","message","i18n","t","toLowerCase","user","db","findOne","slug","where","equals","auth","verify","_verified","lockUntil","authResult","doc","maxLoginAttemptsEnabled","maxLoginAttempts","fieldsToSign","beforeLogin","token","sign","expiresIn","tokenExpiration","afterLogin","global","result","exp","decode","error"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1,18 +1,17 @@
1
1
  import type { Collection } from '../collections/config/types.js';
2
- import type { EmailOptions, SanitizedConfig } from '../config/types.js';
3
- import type { Payload } from '../index.js';
2
+ import type { SanitizedConfig } from '../config/types.js';
3
+ import type { InitializedEmailAdapter } from '../email/types.js';
4
4
  import type { PayloadRequest } from '../types/index.js';
5
5
  import type { User } from './types.js';
6
6
  type Args = {
7
7
  collection: Collection;
8
8
  config: SanitizedConfig;
9
9
  disableEmail: boolean;
10
- emailOptions: EmailOptions;
10
+ email: InitializedEmailAdapter;
11
11
  req: PayloadRequest;
12
- sendEmail: Payload['sendEmail'];
13
12
  token: string;
14
13
  user: User;
15
14
  };
16
- declare function sendVerificationEmail(args: Args): Promise<void>;
17
- export default sendVerificationEmail;
15
+ export declare function sendVerificationEmail(args: Args): Promise<void>;
16
+ export {};
18
17
  //# sourceMappingURL=sendVerificationEmail.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sendVerificationEmail.d.ts","sourceRoot":"","sources":["../../src/auth/sendVerificationEmail.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,IAAI,EAAgB,MAAM,YAAY,CAAA;AAEpD,KAAK,IAAI,GAAG;IACV,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,eAAe,CAAA;IACvB,YAAY,EAAE,OAAO,CAAA;IACrB,YAAY,EAAE,YAAY,CAAA;IAC1B,GAAG,EAAE,cAAc,CAAA;IACnB,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,IAAI,CAAA;CACX,CAAA;AAED,iBAAe,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAyD9D;AAED,eAAe,qBAAqB,CAAA"}
1
+ {"version":3,"file":"sendVerificationEmail.d.ts","sourceRoot":"","sources":["../../src/auth/sendVerificationEmail.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,IAAI,EAAgB,MAAM,YAAY,CAAA;AAEpD,KAAK,IAAI,GAAG;IACV,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,eAAe,CAAA;IACvB,YAAY,EAAE,OAAO,CAAA;IACrB,KAAK,EAAE,uBAAuB,CAAA;IAC9B,GAAG,EAAE,cAAc,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,IAAI,CAAA;CACX,CAAA;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAwDrE"}
@@ -1,7 +1,7 @@
1
1
  import { URL } from 'url';
2
- async function sendVerificationEmail(args) {
2
+ export async function sendVerificationEmail(args) {
3
3
  // Verify token from e-mail
4
- const { collection: { config: collectionConfig }, config, disableEmail, emailOptions, req, sendEmail, token, user } = args;
4
+ const { collection: { config: collectionConfig }, config, disableEmail, email, req, token, user } = args;
5
5
  if (!disableEmail) {
6
6
  const protocol = new URL(req.url).protocol;
7
7
  const serverURL = config.serverURL !== null && config.serverURL !== '' ? config.serverURL : `${protocol}://${req.headers.get('host')}`;
@@ -29,14 +29,13 @@ async function sendVerificationEmail(args) {
29
29
  });
30
30
  }
31
31
  // eslint-disable-next-line @typescript-eslint/no-floating-promises
32
- sendEmail({
33
- from: `"${emailOptions.fromName}" <${emailOptions.fromAddress}>`,
32
+ email.sendEmail({
33
+ from: `"${email.defaultFromName}" <${email.defaultFromName}>`,
34
34
  html,
35
35
  subject,
36
36
  to: user.email
37
37
  });
38
38
  }
39
39
  }
40
- export default sendVerificationEmail;
41
40
 
42
41
  //# sourceMappingURL=sendVerificationEmail.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/auth/sendVerificationEmail.ts"],"sourcesContent":["import { URL } from 'url'\n\nimport type { Collection } from '../collections/config/types.js'\nimport type { EmailOptions, SanitizedConfig } from '../config/types.js'\nimport type { Payload } from '../index.js'\nimport type { PayloadRequest } from '../types/index.js'\nimport type { User, VerifyConfig } from './types.js'\n\ntype Args = {\n collection: Collection\n config: SanitizedConfig\n disableEmail: boolean\n emailOptions: EmailOptions\n req: PayloadRequest\n sendEmail: Payload['sendEmail']\n token: string\n user: User\n}\n\nasync function sendVerificationEmail(args: Args): Promise<void> {\n // Verify token from e-mail\n const {\n collection: { config: collectionConfig },\n config,\n disableEmail,\n emailOptions,\n req,\n sendEmail,\n token,\n user,\n } = args\n\n if (!disableEmail) {\n const protocol = new URL(req.url).protocol\n const serverURL =\n config.serverURL !== null && config.serverURL !== ''\n ? config.serverURL\n : `${protocol}://${req.headers.get('host')}`\n\n const verificationURL = `${serverURL}${config.routes.admin}/${collectionConfig.slug}/verify/${token}`\n\n let html = `${req.t('authentication:newAccountCreated', {\n serverURL: config.serverURL,\n verificationURL,\n })}`\n\n const verify = collectionConfig.auth.verify as VerifyConfig\n\n // Allow config to override email content\n if (typeof verify.generateEmailHTML === 'function') {\n html = await verify.generateEmailHTML({\n req,\n token,\n user,\n })\n }\n\n let subject = req.t('authentication:verifyYourEmail')\n\n // Allow config to override email subject\n if (typeof verify.generateEmailSubject === 'function') {\n subject = await verify.generateEmailSubject({\n req,\n token,\n user,\n })\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n sendEmail({\n from: `\"${emailOptions.fromName}\" <${emailOptions.fromAddress}>`,\n html,\n subject,\n to: user.email,\n })\n }\n}\n\nexport default sendVerificationEmail\n"],"names":["URL","sendVerificationEmail","args","collection","config","collectionConfig","disableEmail","emailOptions","req","sendEmail","token","user","protocol","url","serverURL","headers","get","verificationURL","routes","admin","slug","html","t","verify","auth","generateEmailHTML","subject","generateEmailSubject","from","fromName","fromAddress","to","email"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,GAAG,QAAQ,MAAK;AAmBzB,eAAeC,sBAAsBC,IAAU;IAC7C,2BAA2B;IAC3B,MAAM,EACJC,YAAY,EAAEC,QAAQC,gBAAgB,EAAE,EACxCD,MAAM,EACNE,YAAY,EACZC,YAAY,EACZC,GAAG,EACHC,SAAS,EACTC,KAAK,EACLC,IAAI,EACL,GAAGT;IAEJ,IAAI,CAACI,cAAc;QACjB,MAAMM,WAAW,IAAIZ,IAAIQ,IAAIK,GAAG,EAAED,QAAQ;QAC1C,MAAME,YACJV,OAAOU,SAAS,KAAK,QAAQV,OAAOU,SAAS,KAAK,KAC9CV,OAAOU,SAAS,GAChB,CAAC,EAAEF,SAAS,GAAG,EAAEJ,IAAIO,OAAO,CAACC,GAAG,CAAC,QAAQ,CAAC;QAEhD,MAAMC,kBAAkB,CAAC,EAAEH,UAAU,EAAEV,OAAOc,MAAM,CAACC,KAAK,CAAC,CAAC,EAAEd,iBAAiBe,IAAI,CAAC,QAAQ,EAAEV,MAAM,CAAC;QAErG,IAAIW,OAAO,CAAC,EAAEb,IAAIc,CAAC,CAAC,oCAAoC;YACtDR,WAAWV,OAAOU,SAAS;YAC3BG;QACF,GAAG,CAAC;QAEJ,MAAMM,SAASlB,iBAAiBmB,IAAI,CAACD,MAAM;QAE3C,yCAAyC;QACzC,IAAI,OAAOA,OAAOE,iBAAiB,KAAK,YAAY;YAClDJ,OAAO,MAAME,OAAOE,iBAAiB,CAAC;gBACpCjB;gBACAE;gBACAC;YACF;QACF;QAEA,IAAIe,UAAUlB,IAAIc,CAAC,CAAC;QAEpB,yCAAyC;QACzC,IAAI,OAAOC,OAAOI,oBAAoB,KAAK,YAAY;YACrDD,UAAU,MAAMH,OAAOI,oBAAoB,CAAC;gBAC1CnB;gBACAE;gBACAC;YACF;QACF;QAEA,mEAAmE;QACnEF,UAAU;YACRmB,MAAM,CAAC,CAAC,EAAErB,aAAasB,QAAQ,CAAC,GAAG,EAAEtB,aAAauB,WAAW,CAAC,CAAC,CAAC;YAChET;YACAK;YACAK,IAAIpB,KAAKqB,KAAK;QAChB;IACF;AACF;AAEA,eAAe/B,sBAAqB"}
1
+ {"version":3,"sources":["../../src/auth/sendVerificationEmail.ts"],"sourcesContent":["import { URL } from 'url'\n\nimport type { Collection } from '../collections/config/types.js'\nimport type { SanitizedConfig } from '../config/types.js'\nimport type { InitializedEmailAdapter } from '../email/types.js'\nimport type { PayloadRequest } from '../types/index.js'\nimport type { User, VerifyConfig } from './types.js'\n\ntype Args = {\n collection: Collection\n config: SanitizedConfig\n disableEmail: boolean\n email: InitializedEmailAdapter\n req: PayloadRequest\n token: string\n user: User\n}\n\nexport async function sendVerificationEmail(args: Args): Promise<void> {\n // Verify token from e-mail\n const {\n collection: { config: collectionConfig },\n config,\n disableEmail,\n email,\n req,\n token,\n user,\n } = args\n\n if (!disableEmail) {\n const protocol = new URL(req.url).protocol\n const serverURL =\n config.serverURL !== null && config.serverURL !== ''\n ? config.serverURL\n : `${protocol}://${req.headers.get('host')}`\n\n const verificationURL = `${serverURL}${config.routes.admin}/${collectionConfig.slug}/verify/${token}`\n\n let html = `${req.t('authentication:newAccountCreated', {\n serverURL: config.serverURL,\n verificationURL,\n })}`\n\n const verify = collectionConfig.auth.verify as VerifyConfig\n\n // Allow config to override email content\n if (typeof verify.generateEmailHTML === 'function') {\n html = await verify.generateEmailHTML({\n req,\n token,\n user,\n })\n }\n\n let subject = req.t('authentication:verifyYourEmail')\n\n // Allow config to override email subject\n if (typeof verify.generateEmailSubject === 'function') {\n subject = await verify.generateEmailSubject({\n req,\n token,\n user,\n })\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n email.sendEmail({\n from: `\"${email.defaultFromName}\" <${email.defaultFromName}>`,\n html,\n subject,\n to: user.email,\n })\n }\n}\n"],"names":["URL","sendVerificationEmail","args","collection","config","collectionConfig","disableEmail","email","req","token","user","protocol","url","serverURL","headers","get","verificationURL","routes","admin","slug","html","t","verify","auth","generateEmailHTML","subject","generateEmailSubject","sendEmail","from","defaultFromName","to"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,GAAG,QAAQ,MAAK;AAkBzB,OAAO,eAAeC,sBAAsBC,IAAU;IACpD,2BAA2B;IAC3B,MAAM,EACJC,YAAY,EAAEC,QAAQC,gBAAgB,EAAE,EACxCD,MAAM,EACNE,YAAY,EACZC,KAAK,EACLC,GAAG,EACHC,KAAK,EACLC,IAAI,EACL,GAAGR;IAEJ,IAAI,CAACI,cAAc;QACjB,MAAMK,WAAW,IAAIX,IAAIQ,IAAII,GAAG,EAAED,QAAQ;QAC1C,MAAME,YACJT,OAAOS,SAAS,KAAK,QAAQT,OAAOS,SAAS,KAAK,KAC9CT,OAAOS,SAAS,GAChB,CAAC,EAAEF,SAAS,GAAG,EAAEH,IAAIM,OAAO,CAACC,GAAG,CAAC,QAAQ,CAAC;QAEhD,MAAMC,kBAAkB,CAAC,EAAEH,UAAU,EAAET,OAAOa,MAAM,CAACC,KAAK,CAAC,CAAC,EAAEb,iBAAiBc,IAAI,CAAC,QAAQ,EAAEV,MAAM,CAAC;QAErG,IAAIW,OAAO,CAAC,EAAEZ,IAAIa,CAAC,CAAC,oCAAoC;YACtDR,WAAWT,OAAOS,SAAS;YAC3BG;QACF,GAAG,CAAC;QAEJ,MAAMM,SAASjB,iBAAiBkB,IAAI,CAACD,MAAM;QAE3C,yCAAyC;QACzC,IAAI,OAAOA,OAAOE,iBAAiB,KAAK,YAAY;YAClDJ,OAAO,MAAME,OAAOE,iBAAiB,CAAC;gBACpChB;gBACAC;gBACAC;YACF;QACF;QAEA,IAAIe,UAAUjB,IAAIa,CAAC,CAAC;QAEpB,yCAAyC;QACzC,IAAI,OAAOC,OAAOI,oBAAoB,KAAK,YAAY;YACrDD,UAAU,MAAMH,OAAOI,oBAAoB,CAAC;gBAC1ClB;gBACAC;gBACAC;YACF;QACF;QAEA,mEAAmE;QACnEH,MAAMoB,SAAS,CAAC;YACdC,MAAM,CAAC,CAAC,EAAErB,MAAMsB,eAAe,CAAC,GAAG,EAAEtB,MAAMsB,eAAe,CAAC,CAAC,CAAC;YAC7DT;YACAK;YACAK,IAAIpB,KAAKH,KAAK;QAChB;IACF;AACF"}
@@ -1,5 +1,5 @@
1
1
  import type { LivePreviewConfig, ServerOnlyLivePreviewProperties } from '../../config/types.js';
2
- export type ServerOnlyCollectionProperties = keyof Pick<SanitizedCollectionConfig, 'access' | 'endpoints' | 'hooks'>;
2
+ export type ServerOnlyCollectionProperties = keyof Pick<SanitizedCollectionConfig, 'access' | 'custom' | 'endpoints' | 'hooks'>;
3
3
  export type ServerOnlyCollectionAdminProperties = keyof Pick<SanitizedCollectionConfig['admin'], 'components' | 'hidden' | 'preview'>;
4
4
  export type ClientCollectionConfig = Omit<SanitizedCollectionConfig, 'admin' | 'fields' | ServerOnlyCollectionProperties> & {
5
5
  admin: Omit<SanitizedCollectionConfig['admin'], 'fields' | 'livePreview' | ServerOnlyCollectionAdminProperties> & {
@@ -227,6 +227,9 @@ export declare const createClientCollectionConfig: ({ collection, t, }: {
227
227
  };
228
228
  };
229
229
  };
230
+ custom: {
231
+ [x: string]: any;
232
+ };
230
233
  defaultColumns: string[];
231
234
  description: string | import("../../config/types.js").EntityDescriptionComponent | import("../../config/types.js").EntityDescriptionFunction | {
232
235
  [x: string]: string;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/collections/config/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAA;AAE/F,MAAM,MAAM,8BAA8B,GAAG,MAAM,IAAI,CACrD,yBAAyB,EACzB,QAAQ,GAAG,WAAW,GAAG,OAAO,CACjC,CAAA;AAED,MAAM,MAAM,mCAAmC,GAAG,MAAM,IAAI,CAC1D,yBAAyB,CAAC,OAAO,CAAC,EAClC,YAAY,GAAG,QAAQ,GAAG,SAAS,CACpC,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACvC,yBAAyB,EACzB,OAAO,GAAG,QAAQ,GAAG,8BAA8B,CACpD,GAAG;IACF,KAAK,EAAE,IAAI,CACT,yBAAyB,CAAC,OAAO,CAAC,EAClC,QAAQ,GAAG,aAAa,GAAG,mCAAmC,CAC/D,GAAG;QACF,WAAW,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,+BAA+B,CAAC,CAAA;KACvE,CAAA;IACD,MAAM,EAAE,iBAAiB,EAAE,CAAA;CAC5B,CAAA;AAED,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAI3D,eAAO,MAAM,4BAA4B,uBAGtC;IACD,UAAU,EAAE,yBAAyB,CAAA;IACrC,CAAC,EAAE,SAAS,CAAA;CACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+DA,CAAA;AAED,eAAO,MAAM,6BAA6B,wBAGvC;IACD,WAAW,EAAE,yBAAyB,EAAE,CAAA;IACxC,CAAC,EAAE,SAAS,CAAA;CACb,KAAG,sBAAsB,EACwD,CAAA"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/collections/config/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAA;AAE/F,MAAM,MAAM,8BAA8B,GAAG,MAAM,IAAI,CACrD,yBAAyB,EACzB,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAC5C,CAAA;AAED,MAAM,MAAM,mCAAmC,GAAG,MAAM,IAAI,CAC1D,yBAAyB,CAAC,OAAO,CAAC,EAClC,YAAY,GAAG,QAAQ,GAAG,SAAS,CACpC,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACvC,yBAAyB,EACzB,OAAO,GAAG,QAAQ,GAAG,8BAA8B,CACpD,GAAG;IACF,KAAK,EAAE,IAAI,CACT,yBAAyB,CAAC,OAAO,CAAC,EAClC,QAAQ,GAAG,aAAa,GAAG,mCAAmC,CAC/D,GAAG;QACF,WAAW,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,+BAA+B,CAAC,CAAA;KACvE,CAAA;IACD,MAAM,EAAE,iBAAiB,EAAE,CAAA;CAC5B,CAAA;AAED,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAI3D,eAAO,MAAM,4BAA4B,uBAGtC;IACD,UAAU,EAAE,yBAAyB,CAAA;IACrC,CAAC,EAAE,SAAS,CAAA;CACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiEA,CAAA;AAED,eAAO,MAAM,6BAA6B,wBAGvC;IACD,WAAW,EAAE,yBAAyB,EAAE,CAAA;IACxC,CAAC,EAAE,SAAS,CAAA;CACb,KAAG,sBAAsB,EACwD,CAAA"}
@@ -10,7 +10,8 @@ export const createClientCollectionConfig = ({ collection, t })=>{
10
10
  const serverOnlyCollectionProperties = [
11
11
  'hooks',
12
12
  'access',
13
- 'endpoints'
13
+ 'endpoints',
14
+ 'custom'
14
15
  ];
15
16
  serverOnlyCollectionProperties.forEach((key)=>{
16
17
  if (key in sanitized) {
@@ -23,6 +24,7 @@ export const createClientCollectionConfig = ({ collection, t })=>{
23
24
  };
24
25
  delete sanitized.upload.handlers;
25
26
  delete sanitized.upload.adminThumbnail;
27
+ delete sanitized.upload.externalFileHeaderFilter;
26
28
  }
27
29
  if ('auth' in sanitized && typeof sanitized.auth === 'object') {
28
30
  sanitized.auth = {