payload 3.0.0-beta.54 → 3.0.0-beta.56

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 (81) hide show
  1. package/dist/admin/elements/Upload.d.ts +3 -0
  2. package/dist/admin/elements/Upload.d.ts.map +1 -0
  3. package/dist/admin/elements/Upload.js +3 -0
  4. package/dist/admin/elements/Upload.js.map +1 -0
  5. package/dist/admin/types.d.ts +1 -0
  6. package/dist/admin/types.d.ts.map +1 -1
  7. package/dist/admin/types.js.map +1 -1
  8. package/dist/auth/executeAuthStrategies.d.ts +2 -3
  9. package/dist/auth/executeAuthStrategies.d.ts.map +1 -1
  10. package/dist/auth/executeAuthStrategies.js +6 -4
  11. package/dist/auth/executeAuthStrategies.js.map +1 -1
  12. package/dist/auth/operations/auth.d.ts +1 -0
  13. package/dist/auth/operations/auth.d.ts.map +1 -1
  14. package/dist/auth/operations/auth.js +3 -1
  15. package/dist/auth/operations/auth.js.map +1 -1
  16. package/dist/auth/operations/login.d.ts.map +1 -1
  17. package/dist/auth/operations/login.js +18 -12
  18. package/dist/auth/operations/login.js.map +1 -1
  19. package/dist/auth/operations/me.d.ts +2 -1
  20. package/dist/auth/operations/me.d.ts.map +1 -1
  21. package/dist/auth/operations/me.js +25 -9
  22. package/dist/auth/operations/me.js.map +1 -1
  23. package/dist/auth/operations/refresh.d.ts +2 -1
  24. package/dist/auth/operations/refresh.d.ts.map +1 -1
  25. package/dist/auth/operations/refresh.js +35 -17
  26. package/dist/auth/operations/refresh.js.map +1 -1
  27. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  28. package/dist/auth/operations/resetPassword.js +1 -0
  29. package/dist/auth/operations/resetPassword.js.map +1 -1
  30. package/dist/auth/strategies/apiKey.d.ts.map +1 -1
  31. package/dist/auth/strategies/apiKey.js +9 -3
  32. package/dist/auth/strategies/apiKey.js.map +1 -1
  33. package/dist/auth/strategies/jwt.d.ts.map +1 -1
  34. package/dist/auth/strategies/jwt.js +9 -3
  35. package/dist/auth/strategies/jwt.js.map +1 -1
  36. package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts +3 -1
  37. package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts.map +1 -1
  38. package/dist/auth/strategies/local/generatePasswordSaltHash.js +10 -7
  39. package/dist/auth/strategies/local/generatePasswordSaltHash.js.map +1 -1
  40. package/dist/auth/strategies/local/register.d.ts.map +1 -1
  41. package/dist/auth/strategies/local/register.js +10 -6
  42. package/dist/auth/strategies/local/register.js.map +1 -1
  43. package/dist/auth/types.d.ts +5 -1
  44. package/dist/auth/types.d.ts.map +1 -1
  45. package/dist/auth/types.js.map +1 -1
  46. package/dist/collections/config/client.d.ts +7 -4
  47. package/dist/collections/config/client.d.ts.map +1 -1
  48. package/dist/collections/config/defaults.d.ts +2 -0
  49. package/dist/collections/config/defaults.d.ts.map +1 -1
  50. package/dist/collections/config/defaults.js +3 -1
  51. package/dist/collections/config/defaults.js.map +1 -1
  52. package/dist/collections/config/schema.d.ts.map +1 -1
  53. package/dist/collections/config/schema.js +10 -10
  54. package/dist/collections/config/schema.js.map +1 -1
  55. package/dist/collections/config/types.d.ts +39 -5
  56. package/dist/collections/config/types.d.ts.map +1 -1
  57. package/dist/collections/config/types.js.map +1 -1
  58. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  59. package/dist/collections/operations/updateByID.js +1 -0
  60. package/dist/collections/operations/updateByID.js.map +1 -1
  61. package/dist/errors/APIError.d.ts.map +1 -1
  62. package/dist/errors/APIError.js +4 -1
  63. package/dist/errors/APIError.js.map +1 -1
  64. package/dist/errors/ValidationError.d.ts +13 -5
  65. package/dist/errors/ValidationError.d.ts.map +1 -1
  66. package/dist/errors/ValidationError.js +3 -3
  67. package/dist/errors/ValidationError.js.map +1 -1
  68. package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
  69. package/dist/fields/hooks/beforeChange/index.js +5 -1
  70. package/dist/fields/hooks/beforeChange/index.js.map +1 -1
  71. package/dist/index.d.ts +1 -1
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js.map +1 -1
  74. package/dist/types/index.d.ts +2 -0
  75. package/dist/types/index.d.ts.map +1 -1
  76. package/dist/types/index.js.map +1 -1
  77. package/dist/uploads/types.d.ts +8 -1
  78. package/dist/uploads/types.d.ts.map +1 -1
  79. package/dist/uploads/types.js.map +1 -1
  80. package/dist/utilities/logger.js.map +1 -1
  81. package/package.json +2 -2
@@ -36,13 +36,19 @@ export const APIKeyAuthentication = (collectionConfig)=>async ({ headers, payloa
36
36
  const user = userQuery.docs[0];
37
37
  user.collection = collectionConfig.slug;
38
38
  user._strategy = 'api-key';
39
- return user;
39
+ return {
40
+ user: user
41
+ };
40
42
  }
41
43
  } catch (err) {
42
- return null;
44
+ return {
45
+ user: null
46
+ };
43
47
  }
44
48
  }
45
- return null;
49
+ return {
50
+ user: null
51
+ };
46
52
  };
47
53
 
48
54
  //# sourceMappingURL=apiKey.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/strategies/apiKey.ts"],"sourcesContent":["import crypto from 'crypto'\n\nimport type { SanitizedCollectionConfig } from '../../collections/config/types.js'\nimport type { Where } from '../../types/index.js'\nimport type { AuthStrategyFunction, User } from '../index.js'\n\nexport const APIKeyAuthentication =\n (collectionConfig: SanitizedCollectionConfig): AuthStrategyFunction =>\n async ({ headers, payload }) => {\n const authHeader = headers.get('Authorization')\n\n if (authHeader?.startsWith(`${collectionConfig.slug} API-Key `)) {\n const apiKey = authHeader.replace(`${collectionConfig.slug} API-Key `, '')\n const apiKeyIndex = crypto.createHmac('sha1', payload.secret).update(apiKey).digest('hex')\n\n try {\n const where: Where = {}\n if (collectionConfig.auth?.verify) {\n where.and = [\n {\n apiKeyIndex: {\n equals: apiKeyIndex,\n },\n },\n {\n _verified: {\n not_equals: false,\n },\n },\n ]\n } else {\n where.apiKeyIndex = {\n equals: apiKeyIndex,\n }\n }\n\n const userQuery = await payload.find({\n collection: collectionConfig.slug,\n depth: collectionConfig.auth.depth,\n limit: 1,\n overrideAccess: true,\n pagination: false,\n where,\n })\n\n if (userQuery.docs && userQuery.docs.length > 0) {\n const user = userQuery.docs[0]\n user.collection = collectionConfig.slug\n user._strategy = 'api-key'\n\n return user as User\n }\n } catch (err) {\n return null\n }\n }\n\n return null\n }\n"],"names":["crypto","APIKeyAuthentication","collectionConfig","headers","payload","authHeader","get","startsWith","slug","apiKey","replace","apiKeyIndex","createHmac","secret","update","digest","where","auth","verify","and","equals","_verified","not_equals","userQuery","find","collection","depth","limit","overrideAccess","pagination","docs","length","user","_strategy","err"],"mappings":"AAAA,OAAOA,YAAY,SAAQ;AAM3B,OAAO,MAAMC,uBACX,CAACC,mBACD,OAAO,EAAEC,OAAO,EAAEC,OAAO,EAAE;QACzB,MAAMC,aAAaF,QAAQG,GAAG,CAAC;QAE/B,IAAID,YAAYE,WAAW,CAAC,EAAEL,iBAAiBM,IAAI,CAAC,SAAS,CAAC,GAAG;YAC/D,MAAMC,SAASJ,WAAWK,OAAO,CAAC,CAAC,EAAER,iBAAiBM,IAAI,CAAC,SAAS,CAAC,EAAE;YACvE,MAAMG,cAAcX,OAAOY,UAAU,CAAC,QAAQR,QAAQS,MAAM,EAAEC,MAAM,CAACL,QAAQM,MAAM,CAAC;YAEpF,IAAI;gBACF,MAAMC,QAAe,CAAC;gBACtB,IAAId,iBAAiBe,IAAI,EAAEC,QAAQ;oBACjCF,MAAMG,GAAG,GAAG;wBACV;4BACER,aAAa;gCACXS,QAAQT;4BACV;wBACF;wBACA;4BACEU,WAAW;gCACTC,YAAY;4BACd;wBACF;qBACD;gBACH,OAAO;oBACLN,MAAML,WAAW,GAAG;wBAClBS,QAAQT;oBACV;gBACF;gBAEA,MAAMY,YAAY,MAAMnB,QAAQoB,IAAI,CAAC;oBACnCC,YAAYvB,iBAAiBM,IAAI;oBACjCkB,OAAOxB,iBAAiBe,IAAI,CAACS,KAAK;oBAClCC,OAAO;oBACPC,gBAAgB;oBAChBC,YAAY;oBACZb;gBACF;gBAEA,IAAIO,UAAUO,IAAI,IAAIP,UAAUO,IAAI,CAACC,MAAM,GAAG,GAAG;oBAC/C,MAAMC,OAAOT,UAAUO,IAAI,CAAC,EAAE;oBAC9BE,KAAKP,UAAU,GAAGvB,iBAAiBM,IAAI;oBACvCwB,KAAKC,SAAS,GAAG;oBAEjB,OAAOD;gBACT;YACF,EAAE,OAAOE,KAAK;gBACZ,OAAO;YACT;QACF;QAEA,OAAO;IACT,EAAC"}
1
+ {"version":3,"sources":["../../../src/auth/strategies/apiKey.ts"],"sourcesContent":["import crypto from 'crypto'\n\nimport type { SanitizedCollectionConfig } from '../../collections/config/types.js'\nimport type { Where } from '../../types/index.js'\nimport type { AuthStrategyFunction, User } from '../index.js'\n\nexport const APIKeyAuthentication =\n (collectionConfig: SanitizedCollectionConfig): AuthStrategyFunction =>\n async ({ headers, payload }) => {\n const authHeader = headers.get('Authorization')\n\n if (authHeader?.startsWith(`${collectionConfig.slug} API-Key `)) {\n const apiKey = authHeader.replace(`${collectionConfig.slug} API-Key `, '')\n const apiKeyIndex = crypto.createHmac('sha1', payload.secret).update(apiKey).digest('hex')\n\n try {\n const where: Where = {}\n if (collectionConfig.auth?.verify) {\n where.and = [\n {\n apiKeyIndex: {\n equals: apiKeyIndex,\n },\n },\n {\n _verified: {\n not_equals: false,\n },\n },\n ]\n } else {\n where.apiKeyIndex = {\n equals: apiKeyIndex,\n }\n }\n\n const userQuery = await payload.find({\n collection: collectionConfig.slug,\n depth: collectionConfig.auth.depth,\n limit: 1,\n overrideAccess: true,\n pagination: false,\n where,\n })\n\n if (userQuery.docs && userQuery.docs.length > 0) {\n const user = userQuery.docs[0]\n user.collection = collectionConfig.slug\n user._strategy = 'api-key'\n\n return {\n user: user as User,\n }\n }\n } catch (err) {\n return { user: null }\n }\n }\n\n return { user: null }\n }\n"],"names":["crypto","APIKeyAuthentication","collectionConfig","headers","payload","authHeader","get","startsWith","slug","apiKey","replace","apiKeyIndex","createHmac","secret","update","digest","where","auth","verify","and","equals","_verified","not_equals","userQuery","find","collection","depth","limit","overrideAccess","pagination","docs","length","user","_strategy","err"],"mappings":"AAAA,OAAOA,YAAY,SAAQ;AAM3B,OAAO,MAAMC,uBACX,CAACC,mBACD,OAAO,EAAEC,OAAO,EAAEC,OAAO,EAAE;QACzB,MAAMC,aAAaF,QAAQG,GAAG,CAAC;QAE/B,IAAID,YAAYE,WAAW,CAAC,EAAEL,iBAAiBM,IAAI,CAAC,SAAS,CAAC,GAAG;YAC/D,MAAMC,SAASJ,WAAWK,OAAO,CAAC,CAAC,EAAER,iBAAiBM,IAAI,CAAC,SAAS,CAAC,EAAE;YACvE,MAAMG,cAAcX,OAAOY,UAAU,CAAC,QAAQR,QAAQS,MAAM,EAAEC,MAAM,CAACL,QAAQM,MAAM,CAAC;YAEpF,IAAI;gBACF,MAAMC,QAAe,CAAC;gBACtB,IAAId,iBAAiBe,IAAI,EAAEC,QAAQ;oBACjCF,MAAMG,GAAG,GAAG;wBACV;4BACER,aAAa;gCACXS,QAAQT;4BACV;wBACF;wBACA;4BACEU,WAAW;gCACTC,YAAY;4BACd;wBACF;qBACD;gBACH,OAAO;oBACLN,MAAML,WAAW,GAAG;wBAClBS,QAAQT;oBACV;gBACF;gBAEA,MAAMY,YAAY,MAAMnB,QAAQoB,IAAI,CAAC;oBACnCC,YAAYvB,iBAAiBM,IAAI;oBACjCkB,OAAOxB,iBAAiBe,IAAI,CAACS,KAAK;oBAClCC,OAAO;oBACPC,gBAAgB;oBAChBC,YAAY;oBACZb;gBACF;gBAEA,IAAIO,UAAUO,IAAI,IAAIP,UAAUO,IAAI,CAACC,MAAM,GAAG,GAAG;oBAC/C,MAAMC,OAAOT,UAAUO,IAAI,CAAC,EAAE;oBAC9BE,KAAKP,UAAU,GAAGvB,iBAAiBM,IAAI;oBACvCwB,KAAKC,SAAS,GAAG;oBAEjB,OAAO;wBACLD,MAAMA;oBACR;gBACF;YACF,EAAE,OAAOE,KAAK;gBACZ,OAAO;oBAAEF,MAAM;gBAAK;YACtB;QACF;QAEA,OAAO;YAAEA,MAAM;QAAK;IACtB,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../../src/auth/strategies/jwt.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAQ,MAAM,aAAa,CAAA;AAS7D,eAAO,MAAM,iBAAiB,EAAE,oBA2B/B,CAAA"}
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../../src/auth/strategies/jwt.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAQ,MAAM,aAAa,CAAA;AAS7D,eAAO,MAAM,iBAAiB,EAAE,oBA6B/B,CAAA"}
@@ -16,12 +16,18 @@ export const JWTAuthentication = async ({ headers, isGraphQL = false, payload })
16
16
  if (user && (!collection.config.auth.verify || user._verified)) {
17
17
  user.collection = collection.config.slug;
18
18
  user._strategy = 'local-jwt';
19
- return user;
19
+ return {
20
+ user: user
21
+ };
20
22
  } else {
21
- return null;
23
+ return {
24
+ user: null
25
+ };
22
26
  }
23
27
  } catch (error) {
24
- return null;
28
+ return {
29
+ user: null
30
+ };
25
31
  }
26
32
  };
27
33
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/strategies/jwt.ts"],"sourcesContent":["import jwt from 'jsonwebtoken'\n\nimport type { AuthStrategyFunction, User } from '../index.js'\n\nimport { extractJWT } from '../extractJWT.js'\n\ntype JWTToken = {\n collection: string\n id: string\n}\n\nexport const JWTAuthentication: AuthStrategyFunction = async ({\n headers,\n isGraphQL = false,\n payload,\n}) => {\n try {\n const token = extractJWT({ headers, payload })\n const decodedPayload = jwt.verify(token, payload.secret) as jwt.JwtPayload & JWTToken\n\n const collection = payload.collections[decodedPayload.collection]\n\n const user = await payload.findByID({\n id: decodedPayload.id,\n collection: decodedPayload.collection,\n depth: isGraphQL ? 0 : collection.config.auth.depth,\n })\n\n if (user && (!collection.config.auth.verify || user._verified)) {\n user.collection = collection.config.slug\n user._strategy = 'local-jwt'\n return user as User\n } else {\n return null\n }\n } catch (error) {\n return null\n }\n}\n"],"names":["jwt","extractJWT","JWTAuthentication","headers","isGraphQL","payload","token","decodedPayload","verify","secret","collection","collections","user","findByID","id","depth","config","auth","_verified","slug","_strategy","error"],"mappings":"AAAA,OAAOA,SAAS,eAAc;AAI9B,SAASC,UAAU,QAAQ,mBAAkB;AAO7C,OAAO,MAAMC,oBAA0C,OAAO,EAC5DC,OAAO,EACPC,YAAY,KAAK,EACjBC,OAAO,EACR;IACC,IAAI;QACF,MAAMC,QAAQL,WAAW;YAAEE;YAASE;QAAQ;QAC5C,MAAME,iBAAiBP,IAAIQ,MAAM,CAACF,OAAOD,QAAQI,MAAM;QAEvD,MAAMC,aAAaL,QAAQM,WAAW,CAACJ,eAAeG,UAAU,CAAC;QAEjE,MAAME,OAAO,MAAMP,QAAQQ,QAAQ,CAAC;YAClCC,IAAIP,eAAeO,EAAE;YACrBJ,YAAYH,eAAeG,UAAU;YACrCK,OAAOX,YAAY,IAAIM,WAAWM,MAAM,CAACC,IAAI,CAACF,KAAK;QACrD;QAEA,IAAIH,QAAS,CAAA,CAACF,WAAWM,MAAM,CAACC,IAAI,CAACT,MAAM,IAAII,KAAKM,SAAS,AAAD,GAAI;YAC9DN,KAAKF,UAAU,GAAGA,WAAWM,MAAM,CAACG,IAAI;YACxCP,KAAKQ,SAAS,GAAG;YACjB,OAAOR;QACT,OAAO;YACL,OAAO;QACT;IACF,EAAE,OAAOS,OAAO;QACd,OAAO;IACT;AACF,EAAC"}
1
+ {"version":3,"sources":["../../../src/auth/strategies/jwt.ts"],"sourcesContent":["import jwt from 'jsonwebtoken'\n\nimport type { AuthStrategyFunction, User } from '../index.js'\n\nimport { extractJWT } from '../extractJWT.js'\n\ntype JWTToken = {\n collection: string\n id: string\n}\n\nexport const JWTAuthentication: AuthStrategyFunction = async ({\n headers,\n isGraphQL = false,\n payload,\n}) => {\n try {\n const token = extractJWT({ headers, payload })\n const decodedPayload = jwt.verify(token, payload.secret) as jwt.JwtPayload & JWTToken\n\n const collection = payload.collections[decodedPayload.collection]\n\n const user = await payload.findByID({\n id: decodedPayload.id,\n collection: decodedPayload.collection,\n depth: isGraphQL ? 0 : collection.config.auth.depth,\n })\n\n if (user && (!collection.config.auth.verify || user._verified)) {\n user.collection = collection.config.slug\n user._strategy = 'local-jwt'\n return {\n user: user as User,\n }\n } else {\n return { user: null }\n }\n } catch (error) {\n return { user: null }\n }\n}\n"],"names":["jwt","extractJWT","JWTAuthentication","headers","isGraphQL","payload","token","decodedPayload","verify","secret","collection","collections","user","findByID","id","depth","config","auth","_verified","slug","_strategy","error"],"mappings":"AAAA,OAAOA,SAAS,eAAc;AAI9B,SAASC,UAAU,QAAQ,mBAAkB;AAO7C,OAAO,MAAMC,oBAA0C,OAAO,EAC5DC,OAAO,EACPC,YAAY,KAAK,EACjBC,OAAO,EACR;IACC,IAAI;QACF,MAAMC,QAAQL,WAAW;YAAEE;YAASE;QAAQ;QAC5C,MAAME,iBAAiBP,IAAIQ,MAAM,CAACF,OAAOD,QAAQI,MAAM;QAEvD,MAAMC,aAAaL,QAAQM,WAAW,CAACJ,eAAeG,UAAU,CAAC;QAEjE,MAAME,OAAO,MAAMP,QAAQQ,QAAQ,CAAC;YAClCC,IAAIP,eAAeO,EAAE;YACrBJ,YAAYH,eAAeG,UAAU;YACrCK,OAAOX,YAAY,IAAIM,WAAWM,MAAM,CAACC,IAAI,CAACF,KAAK;QACrD;QAEA,IAAIH,QAAS,CAAA,CAACF,WAAWM,MAAM,CAACC,IAAI,CAACT,MAAM,IAAII,KAAKM,SAAS,AAAD,GAAI;YAC9DN,KAAKF,UAAU,GAAGA,WAAWM,MAAM,CAACG,IAAI;YACxCP,KAAKQ,SAAS,GAAG;YACjB,OAAO;gBACLR,MAAMA;YACR;QACF,OAAO;YACL,OAAO;gBAAEA,MAAM;YAAK;QACtB;IACF,EAAE,OAAOS,OAAO;QACd,OAAO;YAAET,MAAM;QAAK;IACtB;AACF,EAAC"}
@@ -1,7 +1,9 @@
1
+ import type { SanitizedCollectionConfig } from '../../../collections/config/types.js';
1
2
  type Args = {
3
+ collection: SanitizedCollectionConfig;
2
4
  password: string;
3
5
  };
4
- export declare const generatePasswordSaltHash: ({ password, }: Args) => Promise<{
6
+ export declare const generatePasswordSaltHash: ({ collection, password, }: Args) => Promise<{
5
7
  hash: string;
6
8
  salt: string;
7
9
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"generatePasswordSaltHash.d.ts","sourceRoot":"","sources":["../../../../src/auth/strategies/local/generatePasswordSaltHash.ts"],"names":[],"mappings":"AAyBA,KAAK,IAAI,GAAG;IACV,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,wBAAwB,kBAElC,IAAI,KAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAc/C,CAAA"}
1
+ {"version":3,"file":"generatePasswordSaltHash.d.ts","sourceRoot":"","sources":["../../../../src/auth/strategies/local/generatePasswordSaltHash.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AAyBrF,KAAK,IAAI,GAAG;IACV,UAAU,EAAE,yBAAyB,CAAA;IACrC,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,wBAAwB,8BAGlC,IAAI,KAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAiB/C,CAAA"}
@@ -11,15 +11,18 @@ function randomBytes() {
11
11
  function pbkdf2Promisified(password, salt) {
12
12
  return new Promise((resolve, reject)=>crypto.pbkdf2(password, salt, 25000, 512, 'sha256', (err, hashRaw)=>err ? reject(err) : resolve(hashRaw)));
13
13
  }
14
- export const generatePasswordSaltHash = async ({ password })=>{
14
+ export const generatePasswordSaltHash = async ({ collection, password })=>{
15
15
  const validationResult = defaultPasswordValidator(password);
16
16
  if (typeof validationResult === 'string') {
17
- throw new ValidationError([
18
- {
19
- field: 'password',
20
- message: validationResult
21
- }
22
- ]);
17
+ throw new ValidationError({
18
+ collection: collection?.slug,
19
+ errors: [
20
+ {
21
+ field: 'password',
22
+ message: validationResult
23
+ }
24
+ ]
25
+ });
23
26
  }
24
27
  const saltBuffer = await randomBytes();
25
28
  const salt = saltBuffer.toString('hex');
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/auth/strategies/local/generatePasswordSaltHash.ts"],"sourcesContent":["import crypto from 'crypto'\n\nimport { ValidationError } from '../../../errors/index.js'\n\nconst defaultPasswordValidator = (password: string): string | true => {\n if (!password) return 'No password was given'\n if (password.length < 3) return 'Password must be at least 3 characters'\n\n return true\n}\n\nfunction randomBytes(): Promise<Buffer> {\n return new Promise((resolve, reject) =>\n crypto.randomBytes(32, (err, saltBuffer) => (err ? reject(err) : resolve(saltBuffer))),\n )\n}\n\nfunction pbkdf2Promisified(password: string, salt: string): Promise<Buffer> {\n return new Promise((resolve, reject) =>\n crypto.pbkdf2(password, salt, 25000, 512, 'sha256', (err, hashRaw) =>\n err ? reject(err) : resolve(hashRaw),\n ),\n )\n}\n\ntype Args = {\n password: string\n}\n\nexport const generatePasswordSaltHash = async ({\n password,\n}: Args): Promise<{ hash: string; salt: string }> => {\n const validationResult = defaultPasswordValidator(password)\n\n if (typeof validationResult === 'string') {\n throw new ValidationError([{ field: 'password', message: validationResult }])\n }\n\n const saltBuffer = await randomBytes()\n const salt = saltBuffer.toString('hex')\n\n const hashRaw = await pbkdf2Promisified(password, salt)\n const hash = hashRaw.toString('hex')\n\n return { hash, salt }\n}\n"],"names":["crypto","ValidationError","defaultPasswordValidator","password","length","randomBytes","Promise","resolve","reject","err","saltBuffer","pbkdf2Promisified","salt","pbkdf2","hashRaw","generatePasswordSaltHash","validationResult","field","message","toString","hash"],"mappings":"AAAA,OAAOA,YAAY,SAAQ;AAE3B,SAASC,eAAe,QAAQ,2BAA0B;AAE1D,MAAMC,2BAA2B,CAACC;IAChC,IAAI,CAACA,UAAU,OAAO;IACtB,IAAIA,SAASC,MAAM,GAAG,GAAG,OAAO;IAEhC,OAAO;AACT;AAEA,SAASC;IACP,OAAO,IAAIC,QAAQ,CAACC,SAASC,SAC3BR,OAAOK,WAAW,CAAC,IAAI,CAACI,KAAKC,aAAgBD,MAAMD,OAAOC,OAAOF,QAAQG;AAE7E;AAEA,SAASC,kBAAkBR,QAAgB,EAAES,IAAY;IACvD,OAAO,IAAIN,QAAQ,CAACC,SAASC,SAC3BR,OAAOa,MAAM,CAACV,UAAUS,MAAM,OAAO,KAAK,UAAU,CAACH,KAAKK,UACxDL,MAAMD,OAAOC,OAAOF,QAAQO;AAGlC;AAMA,OAAO,MAAMC,2BAA2B,OAAO,EAC7CZ,QAAQ,EACH;IACL,MAAMa,mBAAmBd,yBAAyBC;IAElD,IAAI,OAAOa,qBAAqB,UAAU;QACxC,MAAM,IAAIf,gBAAgB;YAAC;gBAAEgB,OAAO;gBAAYC,SAASF;YAAiB;SAAE;IAC9E;IAEA,MAAMN,aAAa,MAAML;IACzB,MAAMO,OAAOF,WAAWS,QAAQ,CAAC;IAEjC,MAAML,UAAU,MAAMH,kBAAkBR,UAAUS;IAClD,MAAMQ,OAAON,QAAQK,QAAQ,CAAC;IAE9B,OAAO;QAAEC;QAAMR;IAAK;AACtB,EAAC"}
1
+ {"version":3,"sources":["../../../../src/auth/strategies/local/generatePasswordSaltHash.ts"],"sourcesContent":["import crypto from 'crypto'\n\nimport type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\n\nimport { ValidationError } from '../../../errors/index.js'\n\nconst defaultPasswordValidator = (password: string): string | true => {\n if (!password) return 'No password was given'\n if (password.length < 3) return 'Password must be at least 3 characters'\n\n return true\n}\n\nfunction randomBytes(): Promise<Buffer> {\n return new Promise((resolve, reject) =>\n crypto.randomBytes(32, (err, saltBuffer) => (err ? reject(err) : resolve(saltBuffer))),\n )\n}\n\nfunction pbkdf2Promisified(password: string, salt: string): Promise<Buffer> {\n return new Promise((resolve, reject) =>\n crypto.pbkdf2(password, salt, 25000, 512, 'sha256', (err, hashRaw) =>\n err ? reject(err) : resolve(hashRaw),\n ),\n )\n}\n\ntype Args = {\n collection: SanitizedCollectionConfig\n password: string\n}\n\nexport const generatePasswordSaltHash = async ({\n collection,\n password,\n}: Args): Promise<{ hash: string; salt: string }> => {\n const validationResult = defaultPasswordValidator(password)\n\n if (typeof validationResult === 'string') {\n throw new ValidationError({\n collection: collection?.slug,\n errors: [{ field: 'password', message: validationResult }],\n })\n }\n\n const saltBuffer = await randomBytes()\n const salt = saltBuffer.toString('hex')\n\n const hashRaw = await pbkdf2Promisified(password, salt)\n const hash = hashRaw.toString('hex')\n\n return { hash, salt }\n}\n"],"names":["crypto","ValidationError","defaultPasswordValidator","password","length","randomBytes","Promise","resolve","reject","err","saltBuffer","pbkdf2Promisified","salt","pbkdf2","hashRaw","generatePasswordSaltHash","collection","validationResult","slug","errors","field","message","toString","hash"],"mappings":"AAAA,OAAOA,YAAY,SAAQ;AAI3B,SAASC,eAAe,QAAQ,2BAA0B;AAE1D,MAAMC,2BAA2B,CAACC;IAChC,IAAI,CAACA,UAAU,OAAO;IACtB,IAAIA,SAASC,MAAM,GAAG,GAAG,OAAO;IAEhC,OAAO;AACT;AAEA,SAASC;IACP,OAAO,IAAIC,QAAQ,CAACC,SAASC,SAC3BR,OAAOK,WAAW,CAAC,IAAI,CAACI,KAAKC,aAAgBD,MAAMD,OAAOC,OAAOF,QAAQG;AAE7E;AAEA,SAASC,kBAAkBR,QAAgB,EAAES,IAAY;IACvD,OAAO,IAAIN,QAAQ,CAACC,SAASC,SAC3BR,OAAOa,MAAM,CAACV,UAAUS,MAAM,OAAO,KAAK,UAAU,CAACH,KAAKK,UACxDL,MAAMD,OAAOC,OAAOF,QAAQO;AAGlC;AAOA,OAAO,MAAMC,2BAA2B,OAAO,EAC7CC,UAAU,EACVb,QAAQ,EACH;IACL,MAAMc,mBAAmBf,yBAAyBC;IAElD,IAAI,OAAOc,qBAAqB,UAAU;QACxC,MAAM,IAAIhB,gBAAgB;YACxBe,YAAYA,YAAYE;YACxBC,QAAQ;gBAAC;oBAAEC,OAAO;oBAAYC,SAASJ;gBAAiB;aAAE;QAC5D;IACF;IAEA,MAAMP,aAAa,MAAML;IACzB,MAAMO,OAAOF,WAAWY,QAAQ,CAAC;IAEjC,MAAMR,UAAU,MAAMH,kBAAkBR,UAAUS;IAClD,MAAMW,OAAOT,QAAQQ,QAAQ,CAAC;IAE9B,OAAO;QAAEC;QAAMX;IAAK;AACtB,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../../src/auth/strategies/local/register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAKrE,KAAK,IAAI,GAAG;IACV,UAAU,EAAE,yBAAyB,CAAA;IACrC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,sBAAsB,CAAA;CAC5B,CAAA;AAED,eAAO,MAAM,qBAAqB,iDAM/B,IAAI,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkCxC,CAAA"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../../src/auth/strategies/local/register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAKrE,KAAK,IAAI,GAAG;IACV,UAAU,EAAE,yBAAyB,CAAA;IACrC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,sBAAsB,CAAA;CAC5B,CAAA;AAED,eAAO,MAAM,qBAAqB,iDAM/B,IAAI,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmCxC,CAAA"}
@@ -14,14 +14,18 @@ export const registerLocalStrategy = async ({ collection, doc, password, payload
14
14
  }
15
15
  });
16
16
  if (existingUser.docs.length > 0) {
17
- throw new ValidationError([
18
- {
19
- field: 'email',
20
- message: req.t('error:userEmailAlreadyRegistered')
21
- }
22
- ]);
17
+ throw new ValidationError({
18
+ collection: collection.slug,
19
+ errors: [
20
+ {
21
+ field: 'email',
22
+ message: req.t('error:userEmailAlreadyRegistered')
23
+ }
24
+ ]
25
+ });
23
26
  }
24
27
  const { hash, salt } = await generatePasswordSaltHash({
28
+ collection,
25
29
  password
26
30
  });
27
31
  const sanitizedDoc = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/auth/strategies/local/register.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { Payload } from '../../../index.js'\nimport type { PayloadRequestWithData } from '../../../types/index.js'\n\nimport { ValidationError } from '../../../errors/index.js'\nimport { generatePasswordSaltHash } from './generatePasswordSaltHash.js'\n\ntype Args = {\n collection: SanitizedCollectionConfig\n doc: Record<string, unknown>\n password: string\n payload: Payload\n req: PayloadRequestWithData\n}\n\nexport const registerLocalStrategy = async ({\n collection,\n doc,\n password,\n payload,\n req,\n}: Args): Promise<Record<string, unknown>> => {\n const existingUser = await payload.find({\n collection: collection.slug,\n depth: 0,\n limit: 1,\n pagination: false,\n req,\n where: {\n email: {\n equals: doc.email,\n },\n },\n })\n\n if (existingUser.docs.length > 0) {\n throw new ValidationError([\n { field: 'email', message: req.t('error:userEmailAlreadyRegistered') },\n ])\n }\n\n const { hash, salt } = await generatePasswordSaltHash({ password })\n\n const sanitizedDoc = { ...doc }\n if (sanitizedDoc.password) delete sanitizedDoc.password\n\n return payload.db.create({\n collection: collection.slug,\n data: {\n ...sanitizedDoc,\n hash,\n salt,\n },\n req,\n })\n}\n"],"names":["ValidationError","generatePasswordSaltHash","registerLocalStrategy","collection","doc","password","payload","req","existingUser","find","slug","depth","limit","pagination","where","email","equals","docs","length","field","message","t","hash","salt","sanitizedDoc","db","create","data"],"mappings":"AAIA,SAASA,eAAe,QAAQ,2BAA0B;AAC1D,SAASC,wBAAwB,QAAQ,gCAA+B;AAUxE,OAAO,MAAMC,wBAAwB,OAAO,EAC1CC,UAAU,EACVC,GAAG,EACHC,QAAQ,EACRC,OAAO,EACPC,GAAG,EACE;IACL,MAAMC,eAAe,MAAMF,QAAQG,IAAI,CAAC;QACtCN,YAAYA,WAAWO,IAAI;QAC3BC,OAAO;QACPC,OAAO;QACPC,YAAY;QACZN;QACAO,OAAO;YACLC,OAAO;gBACLC,QAAQZ,IAAIW,KAAK;YACnB;QACF;IACF;IAEA,IAAIP,aAAaS,IAAI,CAACC,MAAM,GAAG,GAAG;QAChC,MAAM,IAAIlB,gBAAgB;YACxB;gBAAEmB,OAAO;gBAASC,SAASb,IAAIc,CAAC,CAAC;YAAoC;SACtE;IACH;IAEA,MAAM,EAAEC,IAAI,EAAEC,IAAI,EAAE,GAAG,MAAMtB,yBAAyB;QAAEI;IAAS;IAEjE,MAAMmB,eAAe;QAAE,GAAGpB,GAAG;IAAC;IAC9B,IAAIoB,aAAanB,QAAQ,EAAE,OAAOmB,aAAanB,QAAQ;IAEvD,OAAOC,QAAQmB,EAAE,CAACC,MAAM,CAAC;QACvBvB,YAAYA,WAAWO,IAAI;QAC3BiB,MAAM;YACJ,GAAGH,YAAY;YACfF;YACAC;QACF;QACAhB;IACF;AACF,EAAC"}
1
+ {"version":3,"sources":["../../../../src/auth/strategies/local/register.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { Payload } from '../../../index.js'\nimport type { PayloadRequestWithData } from '../../../types/index.js'\n\nimport { ValidationError } from '../../../errors/index.js'\nimport { generatePasswordSaltHash } from './generatePasswordSaltHash.js'\n\ntype Args = {\n collection: SanitizedCollectionConfig\n doc: Record<string, unknown>\n password: string\n payload: Payload\n req: PayloadRequestWithData\n}\n\nexport const registerLocalStrategy = async ({\n collection,\n doc,\n password,\n payload,\n req,\n}: Args): Promise<Record<string, unknown>> => {\n const existingUser = await payload.find({\n collection: collection.slug,\n depth: 0,\n limit: 1,\n pagination: false,\n req,\n where: {\n email: {\n equals: doc.email,\n },\n },\n })\n\n if (existingUser.docs.length > 0) {\n throw new ValidationError({\n collection: collection.slug,\n errors: [{ field: 'email', message: req.t('error:userEmailAlreadyRegistered') }],\n })\n }\n\n const { hash, salt } = await generatePasswordSaltHash({ collection, password })\n\n const sanitizedDoc = { ...doc }\n if (sanitizedDoc.password) delete sanitizedDoc.password\n\n return payload.db.create({\n collection: collection.slug,\n data: {\n ...sanitizedDoc,\n hash,\n salt,\n },\n req,\n })\n}\n"],"names":["ValidationError","generatePasswordSaltHash","registerLocalStrategy","collection","doc","password","payload","req","existingUser","find","slug","depth","limit","pagination","where","email","equals","docs","length","errors","field","message","t","hash","salt","sanitizedDoc","db","create","data"],"mappings":"AAIA,SAASA,eAAe,QAAQ,2BAA0B;AAC1D,SAASC,wBAAwB,QAAQ,gCAA+B;AAUxE,OAAO,MAAMC,wBAAwB,OAAO,EAC1CC,UAAU,EACVC,GAAG,EACHC,QAAQ,EACRC,OAAO,EACPC,GAAG,EACE;IACL,MAAMC,eAAe,MAAMF,QAAQG,IAAI,CAAC;QACtCN,YAAYA,WAAWO,IAAI;QAC3BC,OAAO;QACPC,OAAO;QACPC,YAAY;QACZN;QACAO,OAAO;YACLC,OAAO;gBACLC,QAAQZ,IAAIW,KAAK;YACnB;QACF;IACF;IAEA,IAAIP,aAAaS,IAAI,CAACC,MAAM,GAAG,GAAG;QAChC,MAAM,IAAIlB,gBAAgB;YACxBG,YAAYA,WAAWO,IAAI;YAC3BS,QAAQ;gBAAC;oBAAEC,OAAO;oBAASC,SAASd,IAAIe,CAAC,CAAC;gBAAoC;aAAE;QAClF;IACF;IAEA,MAAM,EAAEC,IAAI,EAAEC,IAAI,EAAE,GAAG,MAAMvB,yBAAyB;QAAEE;QAAYE;IAAS;IAE7E,MAAMoB,eAAe;QAAE,GAAGrB,GAAG;IAAC;IAC9B,IAAIqB,aAAapB,QAAQ,EAAE,OAAOoB,aAAapB,QAAQ;IAEvD,OAAOC,QAAQoB,EAAE,CAACC,MAAM,CAAC;QACvBxB,YAAYA,WAAWO,IAAI;QAC3BkB,MAAM;YACJ,GAAGH,YAAY;YACfF;YACAC;QACF;QACAjB;IACF;AACF,EAAC"}
@@ -90,7 +90,11 @@ export type AuthStrategyFunctionArgs = {
90
90
  isGraphQL?: boolean;
91
91
  payload: Payload;
92
92
  };
93
- export type AuthStrategyFunction = (args: AuthStrategyFunctionArgs) => Promise<User | null> | User | null;
93
+ export type AuthStrategyResult = {
94
+ responseHeaders?: Headers;
95
+ user: User | null;
96
+ };
97
+ export type AuthStrategyFunction = (args: AuthStrategyFunctionArgs) => AuthStrategyResult | Promise<AuthStrategyResult>;
94
98
  export type AuthStrategy = {
95
99
  authenticate: AuthStrategyFunction;
96
100
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEtE,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,OAAO,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,EAAE;QACP,CAAC,SAAS,EAAE,MAAM,GAAG;YACnB,MAAM,EAAE;gBACN,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAAA;aACtC,CAAA;SACF,CAAA;KACF,CAAA;IACD,MAAM,EAAE;QACN,UAAU,EAAE,OAAO,CAAA;KACpB,CAAA;IACD,MAAM,CAAC,EAAE;QACP,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAAA;KACtC,CAAA;IACD,IAAI,EAAE;QACJ,UAAU,EAAE,OAAO,CAAA;KACpB,CAAA;IACD,MAAM,EAAE;QACN,UAAU,EAAE,OAAO,CAAA;KACpB,CAAA;CACF,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,UAAU,CAAA;IAClB,MAAM,EAAE,UAAU,CAAA;IAClB,MAAM,EAAE;QACN,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAAA;KACtC,CAAA;IACD,IAAI,EAAE,UAAU,CAAA;IAChB,YAAY,CAAC,EAAE,UAAU,CAAA;IACzB,MAAM,EAAE,UAAU,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE;QACN,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAAA;KACtC,CAAA;IACD,IAAI,EAAE,UAAU,CAAA;IAChB,YAAY,CAAC,EAAE,UAAU,CAAA;IACzB,MAAM,EAAE,UAAU,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,GAAG,gBAAgB,CAAA;AACzE,MAAM,MAAM,WAAW,GAAG;IACxB,cAAc,EAAE,OAAO,CAAA;IACvB,WAAW,EAAE;QACX,CAAC,cAAc,EAAE,MAAM,GAAG,oBAAoB,CAAA;KAC/C,CAAA;IACD,OAAO,CAAC,EAAE;QACR,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAAA;KACvC,CAAA;CACF,CAAA;AAED,MAAM,MAAM,IAAI,GAAG;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;CACpB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;AAEjD,KAAK,uBAAuB,GAAG,CAAC,IAAI,EAAE;IACpC,GAAG,EAAE,sBAAsB,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,GAAG,CAAA;CACV,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;AAC9B,KAAK,0BAA0B,GAAG,CAAC,IAAI,EAAE;IACvC,GAAG,EAAE,sBAAsB,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,GAAG,CAAA;CACV,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;AAE9B,KAAK,+BAA+B,GAAG,CAAC,IAAI,CAAC,EAAE;IAC7C,GAAG,CAAC,EAAE,sBAAsB,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;CACf,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;AAC9B,KAAK,kCAAkC,GAAG,CAAC,IAAI,CAAC,EAAE;IAChD,GAAG,CAAC,EAAE,sBAAsB,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,GAAG,CAAA;CACX,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;AAE9B,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AACD,MAAM,MAAM,oBAAoB,GAAG,CACjC,IAAI,EAAE,wBAAwB,KAC3B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AACvC,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,EAAE,oBAAoB,CAAA;IAClC,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;QAC9C,MAAM,CAAC,EAAE,OAAO,CAAA;KACjB,CAAA;IACD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oBAAoB,CAAC,EAAE,IAAI,CAAA;IAC3B,cAAc,CAAC,EAAE;QACf,iBAAiB,CAAC,EAAE,+BAA+B,CAAA;QACnD,oBAAoB,CAAC,EAAE,kCAAkC,CAAA;KAC1D,CAAA;IACD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,wBAAwB,CAAC,EAAE,IAAI,CAAA;IAC/B,UAAU,CAAC,EAAE,YAAY,EAAE,CAAA;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EACH;QACE,iBAAiB,CAAC,EAAE,uBAAuB,CAAA;QAC3C,oBAAoB,CAAC,EAAE,0BAA0B,CAAA;KAClD,GACD,OAAO,CAAA;CACZ;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,iBAAiB,CAAC,EAAE,uBAAuB,CAAA;IAC3C,oBAAoB,CAAC,EAAE,0BAA0B,CAAA;CAClD,CAAA;AAED,MAAM,WAAW,IAAK,SAAQ,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,QAAQ,CAAC;IAC7F,cAAc,CAAC,EAAE;QACf,iBAAiB,CAAC,EAAE,+BAA+B,CAAA;QACnD,oBAAoB,CAAC,EAAE,kCAAkC,CAAA;KAC1D,CAAA;IACD,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAA;CAChC;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,IAAI,KAAK,CAE7E"}
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 { PayloadRequestWithData, 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}\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 = (args: {\n req: PayloadRequestWithData\n token: string\n user: any\n}) => Promise<string> | string\ntype GenerateVerifyEmailSubject = (args: {\n req: PayloadRequestWithData\n token: string\n user: any\n}) => Promise<string> | string\n\ntype GenerateForgotPasswordEmailHTML = (args?: {\n req?: PayloadRequestWithData\n token?: string\n user?: unknown\n}) => Promise<string> | string\ntype GenerateForgotPasswordEmailSubject = (args?: {\n req?: PayloadRequestWithData\n token?: string\n user?: any\n}) => Promise<string> | string\n\nexport type AuthStrategyFunctionArgs = {\n headers: Request['headers']\n isGraphQL?: boolean\n payload: Payload\n}\nexport type AuthStrategyFunction = (\n args: AuthStrategyFunctionArgs,\n) => Promise<User | null> | User | null\nexport type AuthStrategy = {\n authenticate: AuthStrategyFunction\n name: string\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 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 extends Omit<DeepRequired<IncomingAuthType>, 'forgotPassword' | 'verify'> {\n forgotPassword?: {\n generateEmailHTML?: GenerateForgotPasswordEmailHTML\n generateEmailSubject?: GenerateForgotPasswordEmailSubject\n }\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":"AAsJA,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 { PayloadRequestWithData, 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}\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 = (args: {\n req: PayloadRequestWithData\n token: string\n user: any\n}) => Promise<string> | string\ntype GenerateVerifyEmailSubject = (args: {\n req: PayloadRequestWithData\n token: string\n user: any\n}) => Promise<string> | string\n\ntype GenerateForgotPasswordEmailHTML = (args?: {\n req?: PayloadRequestWithData\n token?: string\n user?: unknown\n}) => Promise<string> | string\ntype GenerateForgotPasswordEmailSubject = (args?: {\n req?: PayloadRequestWithData\n token?: string\n user?: any\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 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 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 extends Omit<DeepRequired<IncomingAuthType>, 'forgotPassword' | 'verify'> {\n forgotPassword?: {\n generateEmailHTML?: GenerateForgotPasswordEmailHTML\n generateEmailSubject?: GenerateForgotPasswordEmailSubject\n }\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":"AA4JA,OAAO,SAASA,qBAAqBC,MAAuB;IAC1D,OAAOA,UAAU,OAAOA,WAAW;AACrC"}
@@ -21,16 +21,17 @@ export declare const createClientCollectionConfig: ({ collection, t, }: {
21
21
  versions: import("../../versions/types.js").SanitizedCollectionVersions;
22
22
  admin: {
23
23
  components: {
24
- AfterList: import("../../config/types.js").CustomComponent[];
25
- AfterListTable: import("../../config/types.js").CustomComponent[];
26
- BeforeList: import("../../config/types.js").CustomComponent[];
27
- BeforeListTable: import("../../config/types.js").CustomComponent[];
24
+ afterList: import("../../config/types.js").CustomComponent[];
25
+ afterListTable: import("../../config/types.js").CustomComponent[];
26
+ beforeList: import("../../config/types.js").CustomComponent[];
27
+ beforeListTable: import("../../config/types.js").CustomComponent[];
28
28
  edit: {
29
29
  Description: import("../../config/types.js").EntityDescriptionComponent;
30
30
  PreviewButton: import("../../index.js").CustomPreviewButton;
31
31
  PublishButton: import("../../index.js").CustomPublishButton;
32
32
  SaveButton: import("../../index.js").CustomSaveButton;
33
33
  SaveDraftButton: import("../../index.js").CustomSaveDraftButton;
34
+ Upload: import("../../index.js").CustomUpload;
34
35
  };
35
36
  views: {
36
37
  Edit: import("../../config/types.js").EditViewComponent | {
@@ -282,6 +283,8 @@ export declare const createClientCollectionConfig: ({ collection, t, }: {
282
283
  beforeOperation: import("./types.js").BeforeOperationHook[];
283
284
  beforeRead: import("./types.js").BeforeReadHook[];
284
285
  beforeValidate: import("./types.js").BeforeValidateHook[];
286
+ me: import("./types.js").MeHook[];
287
+ refresh: import("./types.js").RefreshHook[];
285
288
  };
286
289
  typescript: {
287
290
  interface: 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,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;;;;;;;;;;;;;;;;;;;;;;;kCAVuC,MAAO,aAAY;;;;;;kCAQ5B,CAAC;;;;;;;;;;;;;;;;;;;;wCARe,aAAY;;;;;;kCAQ5B,CAAC;;;;;;;;;;;;;;;;;;;;wCARe,aAAY;;;;;;kCAQ5B,CAAC;;;;;;;;;;;;;;;;;;;;wCARe,aAAY;;;;;;kCAQ5B,CAAC;;;;;;;;;;;;;;;;;;;;wCARe,aAAY;;;;;;kCAQ5B,CAAC;;;;;;;;;;;;;;;;;;;;;wCARe,aAAY;;;;;;kCAQ5B,CAAC;;;;;;;;;;;;;;;;;;;;+BA6Em3I,MAAO,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCA9Bn6I,CADJ;;4BACiF,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoBjF,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;;;;;;;;;;;;;;;;;;;;;;;;kCAVuC,MAAO,aAAY;;;;;;kCAQ5B,CAAC;;;;;;;;;;;;;;;;;;;;wCARe,aAAY;;;;;;kCAQ5B,CAAC;;;;;;;;;;;;;;;;;;;;wCARe,aAAY;;;;;;kCAQ5B,CAAC;;;;;;;;;;;;;;;;;;;;wCARe,aAAY;;;;;;kCAQ5B,CAAC;;;;;;;;;;;;;;;;;;;;wCARe,aAAY;;;;;;kCAQ5B,CAAC;;;;;;;;;;;;;;;;;;;;;wCARe,aAAY;;;;;;kCAQ5B,CAAC;;;;;;;;;;;;;;;;;;;;+BA6EwgK,MAAO,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCA9BxjK,CADJ;;4BACiF,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoBjF,CAAA;AAED,eAAO,MAAM,6BAA6B,wBAGvC;IACD,WAAW,EAAE,yBAAyB,EAAE,CAAA;IACxC,CAAC,EAAE,SAAS,CAAA;CACb,KAAG,sBAAsB,EACwD,CAAA"}
@@ -47,6 +47,8 @@ export declare const defaults: {
47
47
  beforeOperation: any[];
48
48
  beforeRead: any[];
49
49
  beforeValidate: any[];
50
+ me: any[];
51
+ refresh: any[];
50
52
  };
51
53
  timestamps: boolean;
52
54
  upload: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/collections/config/defaults.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CpB,CAAA;AAED,eAAO,MAAM,YAAY;;;;;;;;;;CAUxB,CAAA"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/collections/config/defaults.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6CpB,CAAA;AAED,eAAO,MAAM,YAAY;;;;;;;;;;CAUxB,CAAA"}
@@ -43,7 +43,9 @@ export const defaults = {
43
43
  beforeLogin: [],
44
44
  beforeOperation: [],
45
45
  beforeRead: [],
46
- beforeValidate: []
46
+ beforeValidate: [],
47
+ me: [],
48
+ refresh: []
47
49
  },
48
50
  timestamps: true,
49
51
  upload: false,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/collections/config/defaults.ts"],"sourcesContent":["import defaultAccess from '../../auth/defaultAccess.js'\n\nexport const defaults = {\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 },\n timestamps: true,\n upload: false,\n versions: false,\n}\n\nexport const authDefaults = {\n cookies: {\n sameSite: 'Lax',\n secure: false,\n },\n forgotPassword: {},\n lockTime: 600000, // 10 minutes\n maxLoginAttempts: 5,\n tokenExpiration: 7200,\n verify: 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","timestamps","upload","versions","authDefaults","cookies","sameSite","secure","forgotPassword","lockTime","maxLoginAttempts","tokenExpiration","verify"],"mappings":"AAAA,OAAOA,mBAAmB,8BAA6B;AAEvD,OAAO,MAAMC,WAAW;IACtBC,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;IACpB;IACAC,YAAY;IACZC,QAAQ;IACRC,UAAU;AACZ,EAAC;AAED,OAAO,MAAMC,eAAe;IAC1BC,SAAS;QACPC,UAAU;QACVC,QAAQ;IACV;IACAC,gBAAgB,CAAC;IACjBC,UAAU;IACVC,kBAAkB;IAClBC,iBAAiB;IACjBC,QAAQ;AACV,EAAC"}
1
+ {"version":3,"sources":["../../../src/collections/config/defaults.ts"],"sourcesContent":["import defaultAccess from '../../auth/defaultAccess.js'\n\nexport const defaults = {\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 = {\n cookies: {\n sameSite: 'Lax',\n secure: false,\n },\n forgotPassword: {},\n lockTime: 600000, // 10 minutes\n maxLoginAttempts: 5,\n tokenExpiration: 7200,\n verify: 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","maxLoginAttempts","tokenExpiration","verify"],"mappings":"AAAA,OAAOA,mBAAmB,8BAA6B;AAEvD,OAAO,MAAMC,WAAW;IACtBC,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,eAAe;IAC1BC,SAAS;QACPC,UAAU;QACVC,QAAQ;IACV;IACAC,gBAAgB,CAAC;IACjBC,UAAU;IACVC,kBAAkB;IAClBC,iBAAiB;IACjBC,QAAQ;AACV,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/collections/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AAerB,QAAA,MAAM,gBAAgB,uBAwNpB,CAAA;AAEF,eAAe,gBAAgB,CAAA"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/collections/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AAUrB,QAAA,MAAM,gBAAgB,uBA4NpB,CAAA;AAEF,eAAe,gBAAgB,CAAA"}
@@ -2,10 +2,6 @@ import joi from 'joi';
2
2
  import { endpointsSchema } from '../../config/schema.js';
3
3
  import { componentSchema, customViewSchema, livePreviewSchema } from '../../config/shared/componentSchema.js';
4
4
  import { openGraphSchema } from '../../config/shared/openGraphSchema.js';
5
- const strategyBaseSchema = joi.object().keys({
6
- logout: joi.boolean(),
7
- refresh: joi.boolean()
8
- });
9
5
  const collectionSchema = joi.object().keys({
10
6
  slug: joi.string().required(),
11
7
  access: joi.object({
@@ -19,16 +15,17 @@ const collectionSchema = joi.object().keys({
19
15
  }),
20
16
  admin: joi.object({
21
17
  components: joi.object({
22
- AfterList: joi.array().items(componentSchema),
23
- AfterListTable: joi.array().items(componentSchema),
24
- BeforeList: joi.array().items(componentSchema),
25
- BeforeListTable: joi.array().items(componentSchema),
18
+ afterList: joi.array().items(componentSchema),
19
+ afterListTable: joi.array().items(componentSchema),
20
+ beforeList: joi.array().items(componentSchema),
21
+ beforeListTable: joi.array().items(componentSchema),
26
22
  edit: joi.object({
27
23
  Description: componentSchema,
28
24
  PreviewButton: componentSchema,
29
25
  PublishButton: componentSchema,
30
26
  SaveButton: componentSchema,
31
- SaveDraftButton: componentSchema
27
+ SaveDraftButton: componentSchema,
28
+ Upload: componentSchema
32
29
  }),
33
30
  views: joi.object({
34
31
  Edit: joi.alternatives().try(componentSchema, joi.object({
@@ -120,7 +117,9 @@ const collectionSchema = joi.object().keys({
120
117
  beforeLogin: joi.array().items(joi.func()),
121
118
  beforeOperation: joi.array().items(joi.func()),
122
119
  beforeRead: joi.array().items(joi.func()),
123
- beforeValidate: joi.array().items(joi.func())
120
+ beforeValidate: joi.array().items(joi.func()),
121
+ me: joi.array().items(joi.func()),
122
+ refresh: joi.array().items(joi.func())
124
123
  }),
125
124
  labels: joi.object({
126
125
  plural: joi.alternatives().try(joi.func(), joi.string(), joi.object().pattern(joi.string(), [
@@ -154,6 +153,7 @@ const collectionSchema = joi.object().keys({
154
153
  width: joi.number().integer().allow(null)
155
154
  }).unknown()),
156
155
  mimeTypes: joi.array().items(joi.string()),
156
+ modifyResponseHeaders: joi.func(),
157
157
  resizeOptions: joi.object().keys({
158
158
  background: joi.string(),
159
159
  fastShrinkOnLoad: joi.bool(),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/collections/config/schema.ts"],"sourcesContent":["import joi from 'joi'\n\nimport { endpointsSchema } from '../../config/schema.js'\nimport {\n componentSchema,\n customViewSchema,\n livePreviewSchema,\n} from '../../config/shared/componentSchema.js'\nimport { openGraphSchema } from '../../config/shared/openGraphSchema.js'\n\nconst strategyBaseSchema = joi.object().keys({\n logout: joi.boolean(),\n refresh: joi.boolean(),\n})\n\nconst collectionSchema = joi.object().keys({\n slug: joi.string().required(),\n access: joi.object({\n admin: joi.func(),\n create: joi.func(),\n delete: joi.func(),\n read: joi.func(),\n readVersions: joi.func(),\n unlock: joi.func(),\n update: joi.func(),\n }),\n admin: joi.object({\n components: joi.object({\n AfterList: joi.array().items(componentSchema),\n AfterListTable: joi.array().items(componentSchema),\n BeforeList: joi.array().items(componentSchema),\n BeforeListTable: joi.array().items(componentSchema),\n edit: joi.object({\n Description: componentSchema,\n PreviewButton: componentSchema,\n PublishButton: componentSchema,\n SaveButton: componentSchema,\n SaveDraftButton: componentSchema,\n }),\n views: joi.object({\n Edit: joi.alternatives().try(\n componentSchema,\n joi.object({\n API: joi.alternatives().try(componentSchema, customViewSchema),\n Default: joi.alternatives().try(componentSchema, customViewSchema),\n LivePreview: joi.alternatives().try(componentSchema, customViewSchema),\n Version: joi.alternatives().try(componentSchema, customViewSchema),\n Versions: joi.alternatives().try(componentSchema, customViewSchema),\n // Relationships\n // References\n }),\n ),\n List: joi.alternatives().try(\n componentSchema,\n joi.object({\n Component: componentSchema,\n actions: joi.array().items(componentSchema),\n }),\n ),\n }),\n }),\n custom: joi.object().pattern(joi.string(), joi.any()),\n defaultColumns: joi.array().items(joi.string()),\n description: joi\n .alternatives()\n .try(joi.func(), joi.object().pattern(joi.string(), [joi.string()]), joi.string()),\n enableRichTextLink: joi.boolean(),\n enableRichTextRelationship: joi.boolean(),\n group: joi.alternatives().try(joi.string(), joi.object().pattern(joi.string(), [joi.string()])),\n hidden: joi.alternatives().try(joi.boolean(), joi.func()),\n hideAPIURL: joi.bool(),\n listSearchableFields: joi.array().items(joi.string()),\n livePreview: joi.object(livePreviewSchema),\n meta: joi.object({\n description: joi.string(),\n openGraph: openGraphSchema,\n }),\n pagination: joi.object({\n defaultLimit: joi.number(),\n limits: joi.array().items(joi.number()),\n }),\n preview: joi.func(),\n useAsTitle: joi.string(),\n }),\n auth: joi.alternatives().try(\n joi.object({\n cookies: joi.object().keys({\n domain: joi.string(),\n sameSite: joi.string(), // TODO: add further specificity with joi.xor\n secure: joi.boolean(),\n }),\n depth: joi.number(),\n disableLocalStrategy: joi.boolean().valid(true),\n forgotPassword: joi.object().keys({\n generateEmailHTML: joi.func(),\n generateEmailSubject: joi.func(),\n }),\n lockTime: joi.number(),\n maxLoginAttempts: joi.number(),\n removeTokenFromResponses: joi.boolean().valid(true),\n strategies: joi.array().items(\n joi.object().keys({\n name: joi.string().required(),\n authenticate: joi.func().required(),\n }),\n ),\n tokenExpiration: joi.number(),\n useAPIKey: joi.boolean(),\n verify: joi.alternatives().try(\n joi.boolean(),\n joi.object().keys({\n generateEmailHTML: joi.func(),\n generateEmailSubject: joi.func(),\n }),\n ),\n }),\n joi.boolean(),\n ),\n custom: joi.object().pattern(joi.string(), joi.any()),\n dbName: joi.alternatives().try(joi.string(), joi.func()),\n defaultSort: joi.string(),\n disableDuplicate: joi.bool(),\n endpoints: endpointsSchema,\n fields: joi.array(),\n graphQL: joi.alternatives().try(\n joi.object().keys({\n pluralName: joi.string(),\n singularName: joi.string(),\n }),\n joi.boolean(),\n ),\n hooks: joi.object({\n afterChange: joi.array().items(joi.func()),\n afterDelete: joi.array().items(joi.func()),\n afterForgotPassword: joi.array().items(joi.func()),\n afterLogin: joi.array().items(joi.func()),\n afterLogout: joi.array().items(joi.func()),\n afterMe: joi.array().items(joi.func()),\n afterOperation: joi.array().items(joi.func()),\n afterRead: joi.array().items(joi.func()),\n afterRefresh: joi.array().items(joi.func()),\n beforeChange: joi.array().items(joi.func()),\n beforeDelete: joi.array().items(joi.func()),\n beforeLogin: joi.array().items(joi.func()),\n beforeOperation: joi.array().items(joi.func()),\n beforeRead: joi.array().items(joi.func()),\n beforeValidate: joi.array().items(joi.func()),\n }),\n labels: joi.object({\n plural: joi\n .alternatives()\n .try(joi.func(), joi.string(), joi.object().pattern(joi.string(), [joi.string()])),\n singular: joi\n .alternatives()\n .try(joi.func(), joi.string(), joi.object().pattern(joi.string(), [joi.string()])),\n }),\n timestamps: joi.boolean(),\n typescript: joi.object().keys({\n interface: joi.string(),\n }),\n upload: joi.alternatives().try(\n joi.object({\n adapter: joi.string(),\n adminThumbnail: joi.alternatives().try(joi.string(), componentSchema),\n crop: joi.bool(),\n disableLocalStorage: joi.bool(),\n externalFileHeaderFilter: joi.func(),\n filesRequiredOnCreate: joi.bool(),\n focalPoint: joi.bool(),\n formatOptions: joi.object().keys({\n format: joi.string(),\n options: joi.object(),\n }),\n handlers: joi.array().items(joi.func()),\n imageSizes: joi.array().items(\n joi\n .object()\n .keys({\n name: joi.string(),\n crop: joi.string(), // TODO: add further specificity with joi.xor\n height: joi.number().integer().allow(null),\n width: joi.number().integer().allow(null),\n })\n .unknown(),\n ),\n mimeTypes: joi.array().items(joi.string()),\n resizeOptions: joi\n .object()\n .keys({\n background: joi.string(),\n fastShrinkOnLoad: joi.bool(),\n fit: joi.string(),\n height: joi.number().allow(null),\n kernel: joi.string(),\n position: joi.alternatives().try(joi.string(), joi.number()),\n width: joi.number().allow(null),\n withoutEnlargement: joi.bool(),\n })\n .allow(null),\n staticDir: joi.string(),\n tempFileDir: joi.string(),\n trimOptions: joi.alternatives().try(\n joi.object().keys({\n format: joi.string(),\n options: joi.object(),\n }),\n joi.string(),\n joi.number(),\n ),\n useTempFiles: joi.bool(),\n }),\n joi.boolean(),\n ),\n versions: joi.alternatives().try(\n joi.object({\n drafts: joi.alternatives().try(\n joi.object({\n autosave: joi.alternatives().try(\n joi.boolean(),\n joi.object({\n interval: joi.number(),\n }),\n ),\n validate: joi.boolean(),\n }),\n joi.boolean(),\n ),\n maxPerDoc: joi.number(),\n }),\n joi.boolean(),\n ),\n})\n\nexport default collectionSchema\n"],"names":["joi","endpointsSchema","componentSchema","customViewSchema","livePreviewSchema","openGraphSchema","strategyBaseSchema","object","keys","logout","boolean","refresh","collectionSchema","slug","string","required","access","admin","func","create","delete","read","readVersions","unlock","update","components","AfterList","array","items","AfterListTable","BeforeList","BeforeListTable","edit","Description","PreviewButton","PublishButton","SaveButton","SaveDraftButton","views","Edit","alternatives","try","API","Default","LivePreview","Version","Versions","List","Component","actions","custom","pattern","any","defaultColumns","description","enableRichTextLink","enableRichTextRelationship","group","hidden","hideAPIURL","bool","listSearchableFields","livePreview","meta","openGraph","pagination","defaultLimit","number","limits","preview","useAsTitle","auth","cookies","domain","sameSite","secure","depth","disableLocalStrategy","valid","forgotPassword","generateEmailHTML","generateEmailSubject","lockTime","maxLoginAttempts","removeTokenFromResponses","strategies","name","authenticate","tokenExpiration","useAPIKey","verify","dbName","defaultSort","disableDuplicate","endpoints","fields","graphQL","pluralName","singularName","hooks","afterChange","afterDelete","afterForgotPassword","afterLogin","afterLogout","afterMe","afterOperation","afterRead","afterRefresh","beforeChange","beforeDelete","beforeLogin","beforeOperation","beforeRead","beforeValidate","labels","plural","singular","timestamps","typescript","interface","upload","adapter","adminThumbnail","crop","disableLocalStorage","externalFileHeaderFilter","filesRequiredOnCreate","focalPoint","formatOptions","format","options","handlers","imageSizes","height","integer","allow","width","unknown","mimeTypes","resizeOptions","background","fastShrinkOnLoad","fit","kernel","position","withoutEnlargement","staticDir","tempFileDir","trimOptions","useTempFiles","versions","drafts","autosave","interval","validate","maxPerDoc"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/collections/config/schema.ts"],"sourcesContent":["import joi from 'joi'\n\nimport { endpointsSchema } from '../../config/schema.js'\nimport {\n componentSchema,\n customViewSchema,\n livePreviewSchema,\n} from '../../config/shared/componentSchema.js'\nimport { openGraphSchema } from '../../config/shared/openGraphSchema.js'\n\nconst collectionSchema = joi.object().keys({\n slug: joi.string().required(),\n access: joi.object({\n admin: joi.func(),\n create: joi.func(),\n delete: joi.func(),\n read: joi.func(),\n readVersions: joi.func(),\n unlock: joi.func(),\n update: joi.func(),\n }),\n admin: joi.object({\n components: joi.object({\n afterList: joi.array().items(componentSchema),\n afterListTable: joi.array().items(componentSchema),\n beforeList: joi.array().items(componentSchema),\n beforeListTable: joi.array().items(componentSchema),\n edit: joi.object({\n Description: componentSchema,\n PreviewButton: componentSchema,\n PublishButton: componentSchema,\n SaveButton: componentSchema,\n SaveDraftButton: componentSchema,\n Upload: componentSchema,\n }),\n views: joi.object({\n Edit: joi.alternatives().try(\n componentSchema,\n joi.object({\n API: joi.alternatives().try(componentSchema, customViewSchema),\n Default: joi.alternatives().try(componentSchema, customViewSchema),\n LivePreview: joi.alternatives().try(componentSchema, customViewSchema),\n Version: joi.alternatives().try(componentSchema, customViewSchema),\n Versions: joi.alternatives().try(componentSchema, customViewSchema),\n // Relationships\n // References\n }),\n ),\n List: joi.alternatives().try(\n componentSchema,\n joi.object({\n Component: componentSchema,\n actions: joi.array().items(componentSchema),\n }),\n ),\n }),\n }),\n custom: joi.object().pattern(joi.string(), joi.any()),\n defaultColumns: joi.array().items(joi.string()),\n description: joi\n .alternatives()\n .try(joi.func(), joi.object().pattern(joi.string(), [joi.string()]), joi.string()),\n enableRichTextLink: joi.boolean(),\n enableRichTextRelationship: joi.boolean(),\n group: joi.alternatives().try(joi.string(), joi.object().pattern(joi.string(), [joi.string()])),\n hidden: joi.alternatives().try(joi.boolean(), joi.func()),\n hideAPIURL: joi.bool(),\n listSearchableFields: joi.array().items(joi.string()),\n livePreview: joi.object(livePreviewSchema),\n meta: joi.object({\n description: joi.string(),\n openGraph: openGraphSchema,\n }),\n pagination: joi.object({\n defaultLimit: joi.number(),\n limits: joi.array().items(joi.number()),\n }),\n preview: joi.func(),\n useAsTitle: joi.string(),\n }),\n auth: joi.alternatives().try(\n joi.object({\n cookies: joi.object().keys({\n domain: joi.string(),\n sameSite: joi.string(), // TODO: add further specificity with joi.xor\n secure: joi.boolean(),\n }),\n depth: joi.number(),\n disableLocalStrategy: joi.boolean().valid(true),\n forgotPassword: joi.object().keys({\n generateEmailHTML: joi.func(),\n generateEmailSubject: joi.func(),\n }),\n lockTime: joi.number(),\n maxLoginAttempts: joi.number(),\n removeTokenFromResponses: joi.boolean().valid(true),\n strategies: joi.array().items(\n joi.object().keys({\n name: joi.string().required(),\n authenticate: joi.func().required(),\n }),\n ),\n tokenExpiration: joi.number(),\n useAPIKey: joi.boolean(),\n verify: joi.alternatives().try(\n joi.boolean(),\n joi.object().keys({\n generateEmailHTML: joi.func(),\n generateEmailSubject: joi.func(),\n }),\n ),\n }),\n joi.boolean(),\n ),\n custom: joi.object().pattern(joi.string(), joi.any()),\n dbName: joi.alternatives().try(joi.string(), joi.func()),\n defaultSort: joi.string(),\n disableDuplicate: joi.bool(),\n endpoints: endpointsSchema,\n fields: joi.array(),\n graphQL: joi.alternatives().try(\n joi.object().keys({\n pluralName: joi.string(),\n singularName: joi.string(),\n }),\n joi.boolean(),\n ),\n hooks: joi.object({\n afterChange: joi.array().items(joi.func()),\n afterDelete: joi.array().items(joi.func()),\n afterForgotPassword: joi.array().items(joi.func()),\n afterLogin: joi.array().items(joi.func()),\n afterLogout: joi.array().items(joi.func()),\n afterMe: joi.array().items(joi.func()),\n afterOperation: joi.array().items(joi.func()),\n afterRead: joi.array().items(joi.func()),\n afterRefresh: joi.array().items(joi.func()),\n beforeChange: joi.array().items(joi.func()),\n beforeDelete: joi.array().items(joi.func()),\n beforeLogin: joi.array().items(joi.func()),\n beforeOperation: joi.array().items(joi.func()),\n beforeRead: joi.array().items(joi.func()),\n beforeValidate: joi.array().items(joi.func()),\n me: joi.array().items(joi.func()),\n refresh: joi.array().items(joi.func()),\n }),\n labels: joi.object({\n plural: joi\n .alternatives()\n .try(joi.func(), joi.string(), joi.object().pattern(joi.string(), [joi.string()])),\n singular: joi\n .alternatives()\n .try(joi.func(), joi.string(), joi.object().pattern(joi.string(), [joi.string()])),\n }),\n timestamps: joi.boolean(),\n typescript: joi.object().keys({\n interface: joi.string(),\n }),\n upload: joi.alternatives().try(\n joi.object({\n adapter: joi.string(),\n adminThumbnail: joi.alternatives().try(joi.string(), componentSchema),\n crop: joi.bool(),\n disableLocalStorage: joi.bool(),\n externalFileHeaderFilter: joi.func(),\n filesRequiredOnCreate: joi.bool(),\n focalPoint: joi.bool(),\n formatOptions: joi.object().keys({\n format: joi.string(),\n options: joi.object(),\n }),\n handlers: joi.array().items(joi.func()),\n imageSizes: joi.array().items(\n joi\n .object()\n .keys({\n name: joi.string(),\n crop: joi.string(), // TODO: add further specificity with joi.xor\n height: joi.number().integer().allow(null),\n width: joi.number().integer().allow(null),\n })\n .unknown(),\n ),\n mimeTypes: joi.array().items(joi.string()),\n modifyResponseHeaders: joi.func(),\n resizeOptions: joi\n .object()\n .keys({\n background: joi.string(),\n fastShrinkOnLoad: joi.bool(),\n fit: joi.string(),\n height: joi.number().allow(null),\n kernel: joi.string(),\n position: joi.alternatives().try(joi.string(), joi.number()),\n width: joi.number().allow(null),\n withoutEnlargement: joi.bool(),\n })\n .allow(null),\n staticDir: joi.string(),\n tempFileDir: joi.string(),\n trimOptions: joi.alternatives().try(\n joi.object().keys({\n format: joi.string(),\n options: joi.object(),\n }),\n joi.string(),\n joi.number(),\n ),\n useTempFiles: joi.bool(),\n }),\n joi.boolean(),\n ),\n versions: joi.alternatives().try(\n joi.object({\n drafts: joi.alternatives().try(\n joi.object({\n autosave: joi.alternatives().try(\n joi.boolean(),\n joi.object({\n interval: joi.number(),\n }),\n ),\n validate: joi.boolean(),\n }),\n joi.boolean(),\n ),\n maxPerDoc: joi.number(),\n }),\n joi.boolean(),\n ),\n})\n\nexport default collectionSchema\n"],"names":["joi","endpointsSchema","componentSchema","customViewSchema","livePreviewSchema","openGraphSchema","collectionSchema","object","keys","slug","string","required","access","admin","func","create","delete","read","readVersions","unlock","update","components","afterList","array","items","afterListTable","beforeList","beforeListTable","edit","Description","PreviewButton","PublishButton","SaveButton","SaveDraftButton","Upload","views","Edit","alternatives","try","API","Default","LivePreview","Version","Versions","List","Component","actions","custom","pattern","any","defaultColumns","description","enableRichTextLink","boolean","enableRichTextRelationship","group","hidden","hideAPIURL","bool","listSearchableFields","livePreview","meta","openGraph","pagination","defaultLimit","number","limits","preview","useAsTitle","auth","cookies","domain","sameSite","secure","depth","disableLocalStrategy","valid","forgotPassword","generateEmailHTML","generateEmailSubject","lockTime","maxLoginAttempts","removeTokenFromResponses","strategies","name","authenticate","tokenExpiration","useAPIKey","verify","dbName","defaultSort","disableDuplicate","endpoints","fields","graphQL","pluralName","singularName","hooks","afterChange","afterDelete","afterForgotPassword","afterLogin","afterLogout","afterMe","afterOperation","afterRead","afterRefresh","beforeChange","beforeDelete","beforeLogin","beforeOperation","beforeRead","beforeValidate","me","refresh","labels","plural","singular","timestamps","typescript","interface","upload","adapter","adminThumbnail","crop","disableLocalStorage","externalFileHeaderFilter","filesRequiredOnCreate","focalPoint","formatOptions","format","options","handlers","imageSizes","height","integer","allow","width","unknown","mimeTypes","modifyResponseHeaders","resizeOptions","background","fastShrinkOnLoad","fit","kernel","position","withoutEnlargement","staticDir","tempFileDir","trimOptions","useTempFiles","versions","drafts","autosave","interval","validate","maxPerDoc"],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import type { GraphQLInputObjectType, GraphQLNonNull, GraphQLObjectType } from 'graphql';
2
2
  import type { DeepRequired, MarkOptional } from 'ts-essentials';
3
- import type { CustomPreviewButton, CustomPublishButton, CustomSaveButton, CustomSaveDraftButton } from '../../admin/types.js';
3
+ import type { CustomPreviewButton, CustomPublishButton, CustomSaveButton, CustomSaveDraftButton, CustomUpload } from '../../admin/types.js';
4
+ import type { Arguments as MeArguments } from '../../auth/operations/me.js';
5
+ import type { Arguments as RefreshArguments, Result as RefreshResult } from '../../auth/operations/refresh.js';
4
6
  import type { Auth, ClientUser, IncomingAuthType } from '../../auth/types.js';
5
7
  import type { Access, CustomComponent, EditConfig, Endpoint, EntityDescription, EntityDescriptionComponent, GeneratePreviewURL, LabelFunction, LivePreviewConfig, OpenGraphConfig } from '../../config/types.js';
6
8
  import type { DBIdentifierName } from '../../database/types.js';
@@ -143,6 +145,20 @@ export type AfterMeHook<T extends TypeWithID = any> = (args: {
143
145
  req: PayloadRequestWithData;
144
146
  response: unknown;
145
147
  }) => any;
148
+ export type RefreshHook<T extends TypeWithID = any> = (args: {
149
+ args: RefreshArguments;
150
+ user: T;
151
+ }) => Promise<RefreshResult | void> | (RefreshResult | void);
152
+ export type MeHook<T extends TypeWithID = any> = (args: {
153
+ args: MeArguments;
154
+ user: T;
155
+ }) => ({
156
+ exp: number;
157
+ user: T;
158
+ } | void) | Promise<{
159
+ exp: number;
160
+ user: T;
161
+ } | void>;
146
162
  export type AfterRefreshHook<T extends TypeWithID = any> = (args: {
147
163
  /** The collection which this hook is being run on */
148
164
  collection: SanitizedCollectionConfig;
@@ -162,10 +178,10 @@ export type CollectionAdminOptions = {
162
178
  * Custom admin components
163
179
  */
164
180
  components?: {
165
- AfterList?: CustomComponent[];
166
- AfterListTable?: CustomComponent[];
167
- BeforeList?: CustomComponent[];
168
- BeforeListTable?: CustomComponent[];
181
+ afterList?: CustomComponent[];
182
+ afterListTable?: CustomComponent[];
183
+ beforeList?: CustomComponent[];
184
+ beforeListTable?: CustomComponent[];
169
185
  /**
170
186
  * Components within the edit view
171
187
  */
@@ -191,6 +207,11 @@ export type CollectionAdminOptions = {
191
207
  * + autosave must be disabled
192
208
  */
193
209
  SaveDraftButton?: CustomSaveDraftButton;
210
+ /**
211
+ * Replaces the "Upload" section
212
+ * + upload must be enabled
213
+ */
214
+ Upload?: CustomUpload;
194
215
  };
195
216
  views?: {
196
217
  /**
@@ -328,6 +349,19 @@ export type CollectionConfig<TSlug extends CollectionSlug = any> = {
328
349
  beforeOperation?: BeforeOperationHook[];
329
350
  beforeRead?: BeforeReadHook[];
330
351
  beforeValidate?: BeforeValidateHook[];
352
+ /**
353
+ /**
354
+ * Use the `me` hook to control the `me` operation.
355
+ * Here, you can optionally instruct the me operation to return early,
356
+ * and skip its default logic.
357
+ */
358
+ me?: MeHook[];
359
+ /**
360
+ * Use the `refresh` hook to control the refresh operation.
361
+ * Here, you can optionally instruct the refresh operation to return early,
362
+ * and skip its default logic.
363
+ */
364
+ refresh?: RefreshHook[];
331
365
  };
332
366
  /**
333
367
  * Label configuration