payload 3.0.0-beta.65 → 3.0.0-beta.67

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 (113) hide show
  1. package/dist/auth/baseFields/accountLock.d.ts +1 -2
  2. package/dist/auth/baseFields/accountLock.d.ts.map +1 -1
  3. package/dist/auth/baseFields/accountLock.js +1 -1
  4. package/dist/auth/baseFields/accountLock.js.map +1 -1
  5. package/dist/auth/baseFields/apiKey.d.ts +1 -2
  6. package/dist/auth/baseFields/apiKey.d.ts.map +1 -1
  7. package/dist/auth/baseFields/apiKey.js +1 -2
  8. package/dist/auth/baseFields/apiKey.js.map +1 -1
  9. package/dist/auth/baseFields/auth.d.ts +1 -2
  10. package/dist/auth/baseFields/auth.d.ts.map +1 -1
  11. package/dist/auth/baseFields/auth.js +1 -2
  12. package/dist/auth/baseFields/auth.js.map +1 -1
  13. package/dist/auth/baseFields/email.d.ts +5 -0
  14. package/dist/auth/baseFields/email.d.ts.map +1 -0
  15. package/dist/auth/baseFields/email.js +25 -0
  16. package/dist/auth/baseFields/email.js.map +1 -0
  17. package/dist/auth/baseFields/username.d.ts +3 -0
  18. package/dist/auth/baseFields/username.d.ts.map +1 -0
  19. package/dist/auth/baseFields/username.js +25 -0
  20. package/dist/auth/baseFields/username.js.map +1 -0
  21. package/dist/auth/baseFields/verification.d.ts +1 -2
  22. package/dist/auth/baseFields/verification.d.ts.map +1 -1
  23. package/dist/auth/baseFields/verification.js +1 -1
  24. package/dist/auth/baseFields/verification.js.map +1 -1
  25. package/dist/auth/getAuthFields.d.ts +4 -0
  26. package/dist/auth/getAuthFields.d.ts.map +1 -0
  27. package/dist/auth/getAuthFields.js +35 -0
  28. package/dist/auth/getAuthFields.js.map +1 -0
  29. package/dist/auth/isLocked.d.ts.map +1 -1
  30. package/dist/auth/isLocked.js +4 -1
  31. package/dist/auth/isLocked.js.map +1 -1
  32. package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
  33. package/dist/auth/operations/forgotPassword.js +25 -14
  34. package/dist/auth/operations/forgotPassword.js.map +1 -1
  35. package/dist/auth/operations/local/unlock.d.ts +5 -7
  36. package/dist/auth/operations/local/unlock.d.ts.map +1 -1
  37. package/dist/auth/operations/local/unlock.js.map +1 -1
  38. package/dist/auth/operations/login.d.ts.map +1 -1
  39. package/dist/auth/operations/login.js +70 -17
  40. package/dist/auth/operations/login.js.map +1 -1
  41. package/dist/auth/operations/resetPassword.d.ts +0 -1
  42. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  43. package/dist/auth/operations/resetPassword.js +0 -1
  44. package/dist/auth/operations/resetPassword.js.map +1 -1
  45. package/dist/auth/operations/unlock.d.ts +5 -7
  46. package/dist/auth/operations/unlock.d.ts.map +1 -1
  47. package/dist/auth/operations/unlock.js +22 -15
  48. package/dist/auth/operations/unlock.js.map +1 -1
  49. package/dist/auth/types.d.ts +7 -2
  50. package/dist/auth/types.d.ts.map +1 -1
  51. package/dist/auth/types.js.map +1 -1
  52. package/dist/collections/config/defaults.d.ts +2 -0
  53. package/dist/collections/config/defaults.d.ts.map +1 -1
  54. package/dist/collections/config/defaults.js +4 -0
  55. package/dist/collections/config/defaults.js.map +1 -1
  56. package/dist/collections/config/sanitize.d.ts.map +1 -1
  57. package/dist/collections/config/sanitize.js +6 -22
  58. package/dist/collections/config/sanitize.js.map +1 -1
  59. package/dist/collections/config/schema.d.ts.map +1 -1
  60. package/dist/collections/config/schema.js +4 -1
  61. package/dist/collections/config/schema.js.map +1 -1
  62. package/dist/collections/operations/create.d.ts.map +1 -1
  63. package/dist/collections/operations/create.js +1 -4
  64. package/dist/collections/operations/create.js.map +1 -1
  65. package/dist/fields/config/client.d.ts +1 -1
  66. package/dist/fields/config/client.d.ts.map +1 -1
  67. package/dist/fields/config/client.js +3 -1
  68. package/dist/fields/config/client.js.map +1 -1
  69. package/dist/fields/config/schema.d.ts.map +1 -1
  70. package/dist/fields/config/schema.js +3 -0
  71. package/dist/fields/config/schema.js.map +1 -1
  72. package/dist/fields/config/types.d.ts +9 -0
  73. package/dist/fields/config/types.d.ts.map +1 -1
  74. package/dist/fields/config/types.js.map +1 -1
  75. package/dist/fields/validations.d.ts +1 -0
  76. package/dist/fields/validations.d.ts.map +1 -1
  77. package/dist/fields/validations.js +13 -0
  78. package/dist/fields/validations.js.map +1 -1
  79. package/dist/index.d.ts +4 -2
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js.map +1 -1
  82. package/dist/uploads/cropImage.d.ts +19 -6
  83. package/dist/uploads/cropImage.d.ts.map +1 -1
  84. package/dist/uploads/cropImage.js +4 -4
  85. package/dist/uploads/cropImage.js.map +1 -1
  86. package/dist/uploads/generateFileData.d.ts.map +1 -1
  87. package/dist/uploads/generateFileData.js +3 -1
  88. package/dist/uploads/generateFileData.js.map +1 -1
  89. package/dist/uploads/imageResizer.d.ts.map +1 -1
  90. package/dist/uploads/imageResizer.js +117 -101
  91. package/dist/uploads/imageResizer.js.map +1 -1
  92. package/dist/uploads/types.d.ts +16 -10
  93. package/dist/uploads/types.d.ts.map +1 -1
  94. package/dist/uploads/types.js.map +1 -1
  95. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  96. package/dist/utilities/configToJSONSchema.js +103 -42
  97. package/dist/utilities/configToJSONSchema.js.map +1 -1
  98. package/dist/utilities/telemetry/conf/envPaths.d.ts +23 -0
  99. package/dist/utilities/telemetry/conf/envPaths.d.ts.map +1 -0
  100. package/dist/utilities/telemetry/conf/envPaths.js +70 -0
  101. package/dist/utilities/telemetry/conf/envPaths.js.map +1 -0
  102. package/dist/utilities/telemetry/conf/index.d.ts +84 -0
  103. package/dist/utilities/telemetry/conf/index.d.ts.map +1 -0
  104. package/dist/utilities/telemetry/conf/index.js +144 -0
  105. package/dist/utilities/telemetry/conf/index.js.map +1 -0
  106. package/dist/utilities/telemetry/index.d.ts.map +1 -1
  107. package/dist/utilities/telemetry/index.js +1 -1
  108. package/dist/utilities/telemetry/index.js.map +1 -1
  109. package/package.json +2 -3
  110. package/dist/auth/baseFields/loginField.d.ts +0 -4
  111. package/dist/auth/baseFields/loginField.d.ts.map +0 -1
  112. package/dist/auth/baseFields/loginField.js +0 -35
  113. package/dist/auth/baseFields/loginField.js.map +0 -1
@@ -1,4 +1,3 @@
1
1
  import type { Field } from '../../fields/config/types.js';
2
- declare const _default: Field[];
3
- export default _default;
2
+ export declare const accountLockFields: Field[];
4
3
  //# sourceMappingURL=accountLock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"accountLock.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/accountLock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;wBAcpD,KAAK,EAAE;AAZZ,wBAYY"}
1
+ {"version":3,"file":"accountLock.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/accountLock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAEzD,eAAO,MAAM,iBAAiB,EAAE,KAAK,EAYzB,CAAA"}
@@ -1,4 +1,4 @@
1
- export default [
1
+ export const accountLockFields = [
2
2
  {
3
3
  name: 'loginAttempts',
4
4
  type: 'number',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/baseFields/accountLock.ts"],"sourcesContent":["import type { Field } from '../../fields/config/types.js'\n\nexport default [\n {\n name: 'loginAttempts',\n type: 'number',\n defaultValue: 0,\n hidden: true,\n },\n {\n name: 'lockUntil',\n type: 'date',\n hidden: true,\n },\n] as Field[]\n"],"names":["name","type","defaultValue","hidden"],"mappings":"AAEA,eAAe;IACb;QACEA,MAAM;QACNC,MAAM;QACNC,cAAc;QACdC,QAAQ;IACV;IACA;QACEH,MAAM;QACNC,MAAM;QACNE,QAAQ;IACV;CACD,CAAW"}
1
+ {"version":3,"sources":["../../../src/auth/baseFields/accountLock.ts"],"sourcesContent":["import type { Field } from '../../fields/config/types.js'\n\nexport const accountLockFields: Field[] = [\n {\n name: 'loginAttempts',\n type: 'number',\n defaultValue: 0,\n hidden: true,\n },\n {\n name: 'lockUntil',\n type: 'date',\n hidden: true,\n },\n] as Field[]\n"],"names":["accountLockFields","name","type","defaultValue","hidden"],"mappings":"AAEA,OAAO,MAAMA,oBAA6B;IACxC;QACEC,MAAM;QACNC,MAAM;QACNC,cAAc;QACdC,QAAQ;IACV;IACA;QACEH,MAAM;QACNC,MAAM;QACNE,QAAQ;IACV;CACD,CAAW"}
@@ -1,4 +1,3 @@
1
1
  import type { Field } from '../../fields/config/types.js';
2
- declare const _default: Field[];
3
- export default _default;
2
+ export declare const apiKeyFields: Field[];
4
3
  //# sourceMappingURL=apiKey.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"apiKey.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/apiKey.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,8BAA8B,CAAA;wBA4D/D,KAAK,EAAE;AApDZ,wBAoDY"}
1
+ {"version":3,"file":"apiKey.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/apiKey.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,8BAA8B,CAAA;AAOpE,eAAO,MAAM,YAAY,EAoDpB,KAAK,EAAE,CAAA"}
@@ -1,8 +1,7 @@
1
1
  import crypto from 'crypto';
2
2
  const encryptKey = ({ req, value })=>value ? req.payload.encrypt(value) : null;
3
3
  const decryptKey = ({ req, value })=>value ? req.payload.decrypt(value) : undefined;
4
- // eslint-disable-next-line no-restricted-exports
5
- export default [
4
+ export const apiKeyFields = [
6
5
  {
7
6
  name: 'enableAPIKey',
8
7
  type: 'checkbox',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/baseFields/apiKey.ts"],"sourcesContent":["import crypto from 'crypto'\n\nimport type { Field, FieldHook } from '../../fields/config/types.js'\n\nconst encryptKey: FieldHook = ({ req, value }) =>\n value ? req.payload.encrypt(value as string) : null\nconst decryptKey: FieldHook = ({ req, value }) =>\n value ? req.payload.decrypt(value as string) : undefined\n\n// eslint-disable-next-line no-restricted-exports\nexport default [\n {\n name: 'enableAPIKey',\n type: 'checkbox',\n admin: {\n components: {\n Field: () => null,\n },\n },\n label: ({ t }) => t('authentication:enableAPIKey'),\n },\n {\n name: 'apiKey',\n type: 'text',\n admin: {\n components: {\n Field: () => null,\n },\n },\n hooks: {\n afterRead: [decryptKey],\n beforeChange: [encryptKey],\n },\n label: ({ t }) => t('authentication:apiKey'),\n },\n {\n name: 'apiKeyIndex',\n type: 'text',\n admin: {\n disabled: true,\n },\n hidden: true,\n hooks: {\n beforeValidate: [\n ({ data, req, value }) => {\n if (data.apiKey === false || data.apiKey === null) {\n return null\n }\n if (data.enableAPIKey === false || data.enableAPIKey === null) {\n return null\n }\n if (data.apiKey) {\n return crypto\n .createHmac('sha1', req.payload.secret)\n .update(data.apiKey as string)\n .digest('hex')\n }\n return value\n },\n ],\n },\n },\n] as Field[]\n"],"names":["crypto","encryptKey","req","value","payload","encrypt","decryptKey","decrypt","undefined","name","type","admin","components","Field","label","t","hooks","afterRead","beforeChange","disabled","hidden","beforeValidate","data","apiKey","enableAPIKey","createHmac","secret","update","digest"],"mappings":"AAAA,OAAOA,YAAY,SAAQ;AAI3B,MAAMC,aAAwB,CAAC,EAAEC,GAAG,EAAEC,KAAK,EAAE,GAC3CA,QAAQD,IAAIE,OAAO,CAACC,OAAO,CAACF,SAAmB;AACjD,MAAMG,aAAwB,CAAC,EAAEJ,GAAG,EAAEC,KAAK,EAAE,GAC3CA,QAAQD,IAAIE,OAAO,CAACG,OAAO,CAACJ,SAAmBK;AAEjD,iDAAiD;AACjD,eAAe;IACb;QACEC,MAAM;QACNC,MAAM;QACNC,OAAO;YACLC,YAAY;gBACVC,OAAO,IAAM;YACf;QACF;QACAC,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;IACtB;IACA;QACEN,MAAM;QACNC,MAAM;QACNC,OAAO;YACLC,YAAY;gBACVC,OAAO,IAAM;YACf;QACF;QACAG,OAAO;YACLC,WAAW;gBAACX;aAAW;YACvBY,cAAc;gBAACjB;aAAW;QAC5B;QACAa,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;IACtB;IACA;QACEN,MAAM;QACNC,MAAM;QACNC,OAAO;YACLQ,UAAU;QACZ;QACAC,QAAQ;QACRJ,OAAO;YACLK,gBAAgB;gBACd,CAAC,EAAEC,IAAI,EAAEpB,GAAG,EAAEC,KAAK,EAAE;oBACnB,IAAImB,KAAKC,MAAM,KAAK,SAASD,KAAKC,MAAM,KAAK,MAAM;wBACjD,OAAO;oBACT;oBACA,IAAID,KAAKE,YAAY,KAAK,SAASF,KAAKE,YAAY,KAAK,MAAM;wBAC7D,OAAO;oBACT;oBACA,IAAIF,KAAKC,MAAM,EAAE;wBACf,OAAOvB,OACJyB,UAAU,CAAC,QAAQvB,IAAIE,OAAO,CAACsB,MAAM,EACrCC,MAAM,CAACL,KAAKC,MAAM,EAClBK,MAAM,CAAC;oBACZ;oBACA,OAAOzB;gBACT;aACD;QACH;IACF;CACD,CAAW"}
1
+ {"version":3,"sources":["../../../src/auth/baseFields/apiKey.ts"],"sourcesContent":["import crypto from 'crypto'\n\nimport type { Field, FieldHook } from '../../fields/config/types.js'\n\nconst encryptKey: FieldHook = ({ req, value }) =>\n value ? req.payload.encrypt(value as string) : null\nconst decryptKey: FieldHook = ({ req, value }) =>\n value ? req.payload.decrypt(value as string) : undefined\n\nexport const apiKeyFields = [\n {\n name: 'enableAPIKey',\n type: 'checkbox',\n admin: {\n components: {\n Field: () => null,\n },\n },\n label: ({ t }) => t('authentication:enableAPIKey'),\n },\n {\n name: 'apiKey',\n type: 'text',\n admin: {\n components: {\n Field: () => null,\n },\n },\n hooks: {\n afterRead: [decryptKey],\n beforeChange: [encryptKey],\n },\n label: ({ t }) => t('authentication:apiKey'),\n },\n {\n name: 'apiKeyIndex',\n type: 'text',\n admin: {\n disabled: true,\n },\n hidden: true,\n hooks: {\n beforeValidate: [\n ({ data, req, value }) => {\n if (data.apiKey === false || data.apiKey === null) {\n return null\n }\n if (data.enableAPIKey === false || data.enableAPIKey === null) {\n return null\n }\n if (data.apiKey) {\n return crypto\n .createHmac('sha1', req.payload.secret)\n .update(data.apiKey as string)\n .digest('hex')\n }\n return value\n },\n ],\n },\n },\n] as Field[]\n"],"names":["crypto","encryptKey","req","value","payload","encrypt","decryptKey","decrypt","undefined","apiKeyFields","name","type","admin","components","Field","label","t","hooks","afterRead","beforeChange","disabled","hidden","beforeValidate","data","apiKey","enableAPIKey","createHmac","secret","update","digest"],"mappings":"AAAA,OAAOA,YAAY,SAAQ;AAI3B,MAAMC,aAAwB,CAAC,EAAEC,GAAG,EAAEC,KAAK,EAAE,GAC3CA,QAAQD,IAAIE,OAAO,CAACC,OAAO,CAACF,SAAmB;AACjD,MAAMG,aAAwB,CAAC,EAAEJ,GAAG,EAAEC,KAAK,EAAE,GAC3CA,QAAQD,IAAIE,OAAO,CAACG,OAAO,CAACJ,SAAmBK;AAEjD,OAAO,MAAMC,eAAe;IAC1B;QACEC,MAAM;QACNC,MAAM;QACNC,OAAO;YACLC,YAAY;gBACVC,OAAO,IAAM;YACf;QACF;QACAC,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;IACtB;IACA;QACEN,MAAM;QACNC,MAAM;QACNC,OAAO;YACLC,YAAY;gBACVC,OAAO,IAAM;YACf;QACF;QACAG,OAAO;YACLC,WAAW;gBAACZ;aAAW;YACvBa,cAAc;gBAAClB;aAAW;QAC5B;QACAc,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;IACtB;IACA;QACEN,MAAM;QACNC,MAAM;QACNC,OAAO;YACLQ,UAAU;QACZ;QACAC,QAAQ;QACRJ,OAAO;YACLK,gBAAgB;gBACd,CAAC,EAAEC,IAAI,EAAErB,GAAG,EAAEC,KAAK,EAAE;oBACnB,IAAIoB,KAAKC,MAAM,KAAK,SAASD,KAAKC,MAAM,KAAK,MAAM;wBACjD,OAAO;oBACT;oBACA,IAAID,KAAKE,YAAY,KAAK,SAASF,KAAKE,YAAY,KAAK,MAAM;wBAC7D,OAAO;oBACT;oBACA,IAAIF,KAAKC,MAAM,EAAE;wBACf,OAAOxB,OACJ0B,UAAU,CAAC,QAAQxB,IAAIE,OAAO,CAACuB,MAAM,EACrCC,MAAM,CAACL,KAAKC,MAAM,EAClBK,MAAM,CAAC;oBACZ;oBACA,OAAO1B;gBACT;aACD;QACH;IACF;CACD,CAAW"}
@@ -1,4 +1,3 @@
1
1
  import type { Field } from '../../fields/config/types.js';
2
- declare const baseAuthFields: Field[];
3
- export default baseAuthFields;
2
+ export declare const baseAuthFields: Field[];
4
3
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAEzD,QAAA,MAAM,cAAc,EAAE,KAAK,EAqB1B,CAAA;AAED,eAAe,cAAc,CAAA"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAEzD,eAAO,MAAM,cAAc,EAAE,KAAK,EAqBjC,CAAA"}
@@ -1,4 +1,4 @@
1
- const baseAuthFields = [
1
+ export const baseAuthFields = [
2
2
  {
3
3
  name: 'resetPasswordToken',
4
4
  type: 'text',
@@ -20,6 +20,5 @@ const baseAuthFields = [
20
20
  hidden: true
21
21
  }
22
22
  ];
23
- export default baseAuthFields;
24
23
 
25
24
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/baseFields/auth.ts"],"sourcesContent":["import type { Field } from '../../fields/config/types.js'\n\nconst baseAuthFields: Field[] = [\n {\n name: 'resetPasswordToken',\n type: 'text',\n hidden: true,\n },\n {\n name: 'resetPasswordExpiration',\n type: 'date',\n hidden: true,\n },\n {\n name: 'salt',\n type: 'text',\n hidden: true,\n },\n {\n name: 'hash',\n type: 'text',\n hidden: true,\n },\n]\n\nexport default baseAuthFields\n"],"names":["baseAuthFields","name","type","hidden"],"mappings":"AAEA,MAAMA,iBAA0B;IAC9B;QACEC,MAAM;QACNC,MAAM;QACNC,QAAQ;IACV;IACA;QACEF,MAAM;QACNC,MAAM;QACNC,QAAQ;IACV;IACA;QACEF,MAAM;QACNC,MAAM;QACNC,QAAQ;IACV;IACA;QACEF,MAAM;QACNC,MAAM;QACNC,QAAQ;IACV;CACD;AAED,eAAeH,eAAc"}
1
+ {"version":3,"sources":["../../../src/auth/baseFields/auth.ts"],"sourcesContent":["import type { Field } from '../../fields/config/types.js'\n\nexport const baseAuthFields: Field[] = [\n {\n name: 'resetPasswordToken',\n type: 'text',\n hidden: true,\n },\n {\n name: 'resetPasswordExpiration',\n type: 'date',\n hidden: true,\n },\n {\n name: 'salt',\n type: 'text',\n hidden: true,\n },\n {\n name: 'hash',\n type: 'text',\n hidden: true,\n },\n]\n"],"names":["baseAuthFields","name","type","hidden"],"mappings":"AAEA,OAAO,MAAMA,iBAA0B;IACrC;QACEC,MAAM;QACNC,MAAM;QACNC,QAAQ;IACV;IACA;QACEF,MAAM;QACNC,MAAM;QACNC,QAAQ;IACV;IACA;QACEF,MAAM;QACNC,MAAM;QACNC,QAAQ;IACV;IACA;QACEF,MAAM;QACNC,MAAM;QACNC,QAAQ;IACV;CACD,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { Field } from '../../fields/config/types.js';
2
+ export declare const emailField: ({ required }: {
3
+ required?: boolean;
4
+ }) => Field;
5
+ //# sourceMappingURL=email.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/email.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAIzD,eAAO,MAAM,UAAU,iBAAyB;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,KAAG,KAqBvE,CAAA"}
@@ -0,0 +1,25 @@
1
+ import { email } from '../../fields/validations.js';
2
+ export const emailField = ({ required = true })=>({
3
+ name: 'email',
4
+ type: 'email',
5
+ admin: {
6
+ components: {
7
+ Field: required ? ()=>null : undefined
8
+ }
9
+ },
10
+ hooks: {
11
+ beforeChange: [
12
+ ({ value })=>{
13
+ if (value) {
14
+ return value.toLowerCase().trim();
15
+ }
16
+ }
17
+ ]
18
+ },
19
+ label: ({ t })=>t('general:email'),
20
+ required,
21
+ unique: true,
22
+ validate: email
23
+ });
24
+
25
+ //# sourceMappingURL=email.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/auth/baseFields/email.ts"],"sourcesContent":["import type { Field } from '../../fields/config/types.js'\n\nimport { email } from '../../fields/validations.js'\n\nexport const emailField = ({ required = true }: { required?: boolean }): Field => ({\n name: 'email',\n type: 'email',\n admin: {\n components: {\n Field: required ? () => null : undefined,\n },\n },\n hooks: {\n beforeChange: [\n ({ value }) => {\n if (value) {\n return value.toLowerCase().trim()\n }\n },\n ],\n },\n label: ({ t }) => t('general:email'),\n required,\n unique: true,\n validate: email,\n})\n"],"names":["email","emailField","required","name","type","admin","components","Field","undefined","hooks","beforeChange","value","toLowerCase","trim","label","t","unique","validate"],"mappings":"AAEA,SAASA,KAAK,QAAQ,8BAA6B;AAEnD,OAAO,MAAMC,aAAa,CAAC,EAAEC,WAAW,IAAI,EAA0B,GAAa,CAAA;QACjFC,MAAM;QACNC,MAAM;QACNC,OAAO;YACLC,YAAY;gBACVC,OAAOL,WAAW,IAAM,OAAOM;YACjC;QACF;QACAC,OAAO;YACLC,cAAc;gBACZ,CAAC,EAAEC,KAAK,EAAE;oBACR,IAAIA,OAAO;wBACT,OAAOA,MAAMC,WAAW,GAAGC,IAAI;oBACjC;gBACF;aACD;QACH;QACAC,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;QACpBb;QACAc,QAAQ;QACRC,UAAUjB;IACZ,CAAA,EAAE"}
@@ -0,0 +1,3 @@
1
+ import type { Field } from '../../fields/config/types.js';
2
+ export declare const usernameField: Field;
3
+ //# sourceMappingURL=username.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"username.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/username.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAIzD,eAAO,MAAM,aAAa,EAAE,KAqB3B,CAAA"}
@@ -0,0 +1,25 @@
1
+ import { username } from '../../fields/validations.js';
2
+ export const usernameField = {
3
+ name: 'username',
4
+ type: 'text',
5
+ admin: {
6
+ components: {
7
+ Field: ()=>null
8
+ }
9
+ },
10
+ hooks: {
11
+ beforeChange: [
12
+ ({ value })=>{
13
+ if (value) {
14
+ return value.toLowerCase().trim();
15
+ }
16
+ }
17
+ ]
18
+ },
19
+ label: ({ t })=>t('authentication:username'),
20
+ required: true,
21
+ unique: true,
22
+ validate: username
23
+ };
24
+
25
+ //# sourceMappingURL=username.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/auth/baseFields/username.ts"],"sourcesContent":["import type { Field } from '../../fields/config/types.js'\n\nimport { username } from '../../fields/validations.js'\n\nexport const usernameField: Field = {\n name: 'username',\n type: 'text',\n admin: {\n components: {\n Field: () => null,\n },\n },\n hooks: {\n beforeChange: [\n ({ value }) => {\n if (value) {\n return value.toLowerCase().trim()\n }\n },\n ],\n },\n label: ({ t }) => t('authentication:username'),\n required: true,\n unique: true,\n validate: username,\n}\n"],"names":["username","usernameField","name","type","admin","components","Field","hooks","beforeChange","value","toLowerCase","trim","label","t","required","unique","validate"],"mappings":"AAEA,SAASA,QAAQ,QAAQ,8BAA6B;AAEtD,OAAO,MAAMC,gBAAuB;IAClCC,MAAM;IACNC,MAAM;IACNC,OAAO;QACLC,YAAY;YACVC,OAAO,IAAM;QACf;IACF;IACAC,OAAO;QACLC,cAAc;YACZ,CAAC,EAAEC,KAAK,EAAE;gBACR,IAAIA,OAAO;oBACT,OAAOA,MAAMC,WAAW,GAAGC,IAAI;gBACjC;YACF;SACD;IACH;IACAC,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;IACpBC,UAAU;IACVC,QAAQ;IACRC,UAAUhB;AACZ,EAAC"}
@@ -1,4 +1,3 @@
1
1
  import type { Field } from '../../fields/config/types.js';
2
- declare const _default: Field[];
3
- export default _default;
2
+ export declare const verificationFields: Field[];
4
3
  //# sourceMappingURL=verification.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/verification.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,8BAA8B,CAAA;wBAyC/D,KAAK,EAAE;AAxBZ,wBAwBY"}
1
+ {"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../../src/auth/baseFields/verification.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,8BAA8B,CAAA;AAiBpE,eAAO,MAAM,kBAAkB,EAAE,KAAK,EAwB1B,CAAA"}
@@ -10,7 +10,7 @@ const autoRemoveVerificationToken = ({ data, operation, originalDoc, value })=>{
10
10
  }
11
11
  return value;
12
12
  };
13
- export default [
13
+ export const verificationFields = [
14
14
  {
15
15
  name: '_verified',
16
16
  type: 'checkbox',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/baseFields/verification.ts"],"sourcesContent":["import type { Field, FieldHook } from '../../fields/config/types.js'\n\nconst autoRemoveVerificationToken: FieldHook = ({ data, operation, originalDoc, value }) => {\n // If a user manually sets `_verified` to true,\n // and it was `false`, set _verificationToken to `null`.\n // This is useful because the admin panel\n // allows users to set `_verified` to true manually\n\n if (operation === 'update') {\n if (data?._verified === true && originalDoc?._verified === false) {\n return null\n }\n }\n\n return value\n}\n\nexport default [\n {\n name: '_verified',\n type: 'checkbox',\n access: {\n create: ({ req: { user } }) => Boolean(user),\n read: ({ req: { user } }) => Boolean(user),\n update: ({ req: { user } }) => Boolean(user),\n },\n admin: {\n components: {\n Field: () => null,\n },\n },\n label: ({ t }) => t('authentication:verified'),\n },\n {\n name: '_verificationToken',\n type: 'text',\n hidden: true,\n hooks: {\n beforeChange: [autoRemoveVerificationToken],\n },\n },\n] as Field[]\n"],"names":["autoRemoveVerificationToken","data","operation","originalDoc","value","_verified","name","type","access","create","req","user","Boolean","read","update","admin","components","Field","label","t","hidden","hooks","beforeChange"],"mappings":"AAEA,MAAMA,8BAAyC,CAAC,EAAEC,IAAI,EAAEC,SAAS,EAAEC,WAAW,EAAEC,KAAK,EAAE;IACrF,+CAA+C;IAC/C,wDAAwD;IACxD,yCAAyC;IACzC,mDAAmD;IAEnD,IAAIF,cAAc,UAAU;QAC1B,IAAID,MAAMI,cAAc,QAAQF,aAAaE,cAAc,OAAO;YAChE,OAAO;QACT;IACF;IAEA,OAAOD;AACT;AAEA,eAAe;IACb;QACEE,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAE,EAAE,GAAKC,QAAQD;YACvCE,MAAM,CAAC,EAAEH,KAAK,EAAEC,IAAI,EAAE,EAAE,GAAKC,QAAQD;YACrCG,QAAQ,CAAC,EAAEJ,KAAK,EAAEC,IAAI,EAAE,EAAE,GAAKC,QAAQD;QACzC;QACAI,OAAO;YACLC,YAAY;gBACVC,OAAO,IAAM;YACf;QACF;QACAC,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;IACtB;IACA;QACEb,MAAM;QACNC,MAAM;QACNa,QAAQ;QACRC,OAAO;YACLC,cAAc;gBAACtB;aAA4B;QAC7C;IACF;CACD,CAAW"}
1
+ {"version":3,"sources":["../../../src/auth/baseFields/verification.ts"],"sourcesContent":["import type { Field, FieldHook } from '../../fields/config/types.js'\n\nconst autoRemoveVerificationToken: FieldHook = ({ data, operation, originalDoc, value }) => {\n // If a user manually sets `_verified` to true,\n // and it was `false`, set _verificationToken to `null`.\n // This is useful because the admin panel\n // allows users to set `_verified` to true manually\n\n if (operation === 'update') {\n if (data?._verified === true && originalDoc?._verified === false) {\n return null\n }\n }\n\n return value\n}\n\nexport const verificationFields: Field[] = [\n {\n name: '_verified',\n type: 'checkbox',\n access: {\n create: ({ req: { user } }) => Boolean(user),\n read: ({ req: { user } }) => Boolean(user),\n update: ({ req: { user } }) => Boolean(user),\n },\n admin: {\n components: {\n Field: () => null,\n },\n },\n label: ({ t }) => t('authentication:verified'),\n },\n {\n name: '_verificationToken',\n type: 'text',\n hidden: true,\n hooks: {\n beforeChange: [autoRemoveVerificationToken],\n },\n },\n] as Field[]\n"],"names":["autoRemoveVerificationToken","data","operation","originalDoc","value","_verified","verificationFields","name","type","access","create","req","user","Boolean","read","update","admin","components","Field","label","t","hidden","hooks","beforeChange"],"mappings":"AAEA,MAAMA,8BAAyC,CAAC,EAAEC,IAAI,EAAEC,SAAS,EAAEC,WAAW,EAAEC,KAAK,EAAE;IACrF,+CAA+C;IAC/C,wDAAwD;IACxD,yCAAyC;IACzC,mDAAmD;IAEnD,IAAIF,cAAc,UAAU;QAC1B,IAAID,MAAMI,cAAc,QAAQF,aAAaE,cAAc,OAAO;YAChE,OAAO;QACT;IACF;IAEA,OAAOD;AACT;AAEA,OAAO,MAAME,qBAA8B;IACzC;QACEC,MAAM;QACNC,MAAM;QACNC,QAAQ;YACNC,QAAQ,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAE,EAAE,GAAKC,QAAQD;YACvCE,MAAM,CAAC,EAAEH,KAAK,EAAEC,IAAI,EAAE,EAAE,GAAKC,QAAQD;YACrCG,QAAQ,CAAC,EAAEJ,KAAK,EAAEC,IAAI,EAAE,EAAE,GAAKC,QAAQD;QACzC;QACAI,OAAO;YACLC,YAAY;gBACVC,OAAO,IAAM;YACf;QACF;QACAC,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;IACtB;IACA;QACEb,MAAM;QACNC,MAAM;QACNa,QAAQ;QACRC,OAAO;YACLC,cAAc;gBAACvB;aAA4B;QAC7C;IACF;CACD,CAAW"}
@@ -0,0 +1,4 @@
1
+ import type { Field } from '../fields/config/types.js';
2
+ import type { IncomingAuthType } from './types.js';
3
+ export declare const getBaseAuthFields: (authConfig: IncomingAuthType) => Field[];
4
+ //# sourceMappingURL=getAuthFields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAuthFields.d.ts","sourceRoot":"","sources":["../../src/auth/getAuthFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AASlD,eAAO,MAAM,iBAAiB,eAAgB,gBAAgB,KAAG,KAAK,EAiCrE,CAAA"}
@@ -0,0 +1,35 @@
1
+ import { accountLockFields } from './baseFields/accountLock.js';
2
+ import { apiKeyFields } from './baseFields/apiKey.js';
3
+ import { baseAuthFields } from './baseFields/auth.js';
4
+ import { emailField } from './baseFields/email.js';
5
+ import { usernameField } from './baseFields/username.js';
6
+ import { verificationFields } from './baseFields/verification.js';
7
+ export const getBaseAuthFields = (authConfig)=>{
8
+ const authFields = [];
9
+ if (authConfig.useAPIKey) {
10
+ authFields.push(...apiKeyFields);
11
+ }
12
+ if (!authConfig.disableLocalStrategy) {
13
+ const emailFieldIndex = authFields.push(emailField({
14
+ required: true
15
+ })) - 1;
16
+ if (authConfig.loginWithUsername) {
17
+ if (typeof authConfig.loginWithUsername === 'object' && authConfig.loginWithUsername.requireEmail === false) {
18
+ authFields[emailFieldIndex] = emailField({
19
+ required: false
20
+ });
21
+ }
22
+ authFields.push(usernameField);
23
+ }
24
+ authFields.push(...baseAuthFields);
25
+ if (authConfig.verify) {
26
+ authFields.push(...verificationFields);
27
+ }
28
+ if (authConfig.maxLoginAttempts > 0) {
29
+ authFields.push(...accountLockFields);
30
+ }
31
+ }
32
+ return authFields;
33
+ };
34
+
35
+ //# sourceMappingURL=getAuthFields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/auth/getAuthFields.ts"],"sourcesContent":["import type { Field } from '../fields/config/types.js'\nimport type { IncomingAuthType } from './types.js'\n\nimport { accountLockFields } from './baseFields/accountLock.js'\nimport { apiKeyFields } from './baseFields/apiKey.js'\nimport { baseAuthFields } from './baseFields/auth.js'\nimport { emailField } from './baseFields/email.js'\nimport { usernameField } from './baseFields/username.js'\nimport { verificationFields } from './baseFields/verification.js'\n\nexport const getBaseAuthFields = (authConfig: IncomingAuthType): Field[] => {\n const authFields: Field[] = []\n\n if (authConfig.useAPIKey) {\n authFields.push(...apiKeyFields)\n }\n\n if (!authConfig.disableLocalStrategy) {\n const emailFieldIndex = authFields.push(emailField({ required: true })) - 1\n\n if (authConfig.loginWithUsername) {\n if (\n typeof authConfig.loginWithUsername === 'object' &&\n authConfig.loginWithUsername.requireEmail === false\n ) {\n authFields[emailFieldIndex] = emailField({ required: false })\n }\n\n authFields.push(usernameField)\n }\n\n authFields.push(...baseAuthFields)\n\n if (authConfig.verify) {\n authFields.push(...verificationFields)\n }\n\n if (authConfig.maxLoginAttempts > 0) {\n authFields.push(...accountLockFields)\n }\n }\n\n return authFields\n}\n"],"names":["accountLockFields","apiKeyFields","baseAuthFields","emailField","usernameField","verificationFields","getBaseAuthFields","authConfig","authFields","useAPIKey","push","disableLocalStrategy","emailFieldIndex","required","loginWithUsername","requireEmail","verify","maxLoginAttempts"],"mappings":"AAGA,SAASA,iBAAiB,QAAQ,8BAA6B;AAC/D,SAASC,YAAY,QAAQ,yBAAwB;AACrD,SAASC,cAAc,QAAQ,uBAAsB;AACrD,SAASC,UAAU,QAAQ,wBAAuB;AAClD,SAASC,aAAa,QAAQ,2BAA0B;AACxD,SAASC,kBAAkB,QAAQ,+BAA8B;AAEjE,OAAO,MAAMC,oBAAoB,CAACC;IAChC,MAAMC,aAAsB,EAAE;IAE9B,IAAID,WAAWE,SAAS,EAAE;QACxBD,WAAWE,IAAI,IAAIT;IACrB;IAEA,IAAI,CAACM,WAAWI,oBAAoB,EAAE;QACpC,MAAMC,kBAAkBJ,WAAWE,IAAI,CAACP,WAAW;YAAEU,UAAU;QAAK,MAAM;QAE1E,IAAIN,WAAWO,iBAAiB,EAAE;YAChC,IACE,OAAOP,WAAWO,iBAAiB,KAAK,YACxCP,WAAWO,iBAAiB,CAACC,YAAY,KAAK,OAC9C;gBACAP,UAAU,CAACI,gBAAgB,GAAGT,WAAW;oBAAEU,UAAU;gBAAM;YAC7D;YAEAL,WAAWE,IAAI,CAACN;QAClB;QAEAI,WAAWE,IAAI,IAAIR;QAEnB,IAAIK,WAAWS,MAAM,EAAE;YACrBR,WAAWE,IAAI,IAAIL;QACrB;QAEA,IAAIE,WAAWU,gBAAgB,GAAG,GAAG;YACnCT,WAAWE,IAAI,IAAIV;QACrB;IACF;IAEA,OAAOQ;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"isLocked.d.ts","sourceRoot":"","sources":["../../src/auth/isLocked.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,QAAQ,SAAU,MAAM,KAAG,OAAwC,CAAA;AACzE,eAAe,QAAQ,CAAA"}
1
+ {"version":3,"file":"isLocked.d.ts","sourceRoot":"","sources":["../../src/auth/isLocked.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,QAAQ,SAAU,MAAM,KAAG,OAGhC,CAAA;AACD,eAAe,QAAQ,CAAA"}
@@ -1,4 +1,7 @@
1
- const isLocked = (date)=>!!(date && date > Date.now());
1
+ const isLocked = (date)=>{
2
+ if (!date) return false;
3
+ return date > Date.now();
4
+ };
2
5
  export default isLocked;
3
6
 
4
7
  //# sourceMappingURL=isLocked.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/auth/isLocked.ts"],"sourcesContent":["const isLocked = (date: number): boolean => !!(date && date > Date.now())\nexport default isLocked\n"],"names":["isLocked","date","Date","now"],"mappings":"AAAA,MAAMA,WAAW,CAACC,OAA0B,CAAC,CAAEA,CAAAA,QAAQA,OAAOC,KAAKC,GAAG,EAAC;AACvE,eAAeH,SAAQ"}
1
+ {"version":3,"sources":["../../src/auth/isLocked.ts"],"sourcesContent":["const isLocked = (date: number): boolean => {\n if (!date) return false\n return date > Date.now()\n}\nexport default isLocked\n"],"names":["isLocked","date","Date","now"],"mappings":"AAAA,MAAMA,WAAW,CAACC;IAChB,IAAI,CAACA,MAAM,OAAO;IAClB,OAAOA,OAAOC,KAAKC,GAAG;AACxB;AACA,eAAeH,SAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"forgotPassword.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/forgotPassword.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,gCAAgC,EAChC,UAAU,EACX,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAQ1D,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE;QACJ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,GAAG,gCAAgC,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,CAAA;IAC7D,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,MAAM,CAAA;AAE3B,eAAO,MAAM,uBAAuB,GAAU,KAAK,SAAS,cAAc,gBAC1D,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC,IAAI,GAAG,MAAM,CAuJvB,CAAA"}
1
+ {"version":3,"file":"forgotPassword.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/forgotPassword.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,gCAAgC,EAChC,UAAU,EACX,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAS,MAAM,sBAAsB,CAAA;AAQjE,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE;QACJ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,GAAG,gCAAgC,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,CAAA;IAC7D,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,MAAM,CAAA;AAE3B,eAAO,MAAM,uBAAuB,GAAU,KAAK,SAAS,cAAc,gBAC1D,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC,IAAI,GAAG,MAAM,CA+KvB,CAAA"}
@@ -7,8 +7,13 @@ import { commitTransaction } from '../../utilities/commitTransaction.js';
7
7
  import { initTransaction } from '../../utilities/initTransaction.js';
8
8
  import { killTransaction } from '../../utilities/killTransaction.js';
9
9
  export const forgotPasswordOperation = async (incomingArgs)=>{
10
- const loginWithUsername = incomingArgs.collection?.config?.auth?.loginWithUsername;
11
- if (!incomingArgs.data.email && !incomingArgs.data.username) {
10
+ const loginWithUsername = incomingArgs.collection.config.auth.loginWithUsername;
11
+ const { data } = incomingArgs;
12
+ const canLoginWithUsername = Boolean(loginWithUsername);
13
+ const canLoginWithEmail = !loginWithUsername || loginWithUsername.allowEmailLogin;
14
+ const sanitizedEmail = canLoginWithEmail && (incomingArgs.data.email || '').toLowerCase().trim() || null;
15
+ const sanitizedUsername = 'username' in data && typeof data?.username === 'string' ? data.username.toLowerCase().trim() : null;
16
+ if (!sanitizedEmail && !sanitizedUsername) {
12
17
  throw new APIError(`Missing ${loginWithUsername ? 'username' : 'email'}.`, httpStatus.BAD_REQUEST);
13
18
  }
14
19
  let args = incomingArgs;
@@ -32,21 +37,27 @@ export const forgotPasswordOperation = async (incomingArgs)=>{
32
37
  // Forget password
33
38
  // /////////////////////////////////////
34
39
  let token = crypto.randomBytes(20).toString('hex');
35
- if (!data.email && !data.username) {
40
+ if (!sanitizedEmail && !sanitizedUsername) {
36
41
  throw new APIError(`Missing ${loginWithUsername ? 'username' : 'email'}.`, httpStatus.BAD_REQUEST);
37
42
  }
43
+ let whereConstraint = {};
44
+ if (canLoginWithEmail && sanitizedEmail) {
45
+ whereConstraint = {
46
+ email: {
47
+ equals: sanitizedEmail
48
+ }
49
+ };
50
+ } else if (canLoginWithUsername && sanitizedUsername) {
51
+ whereConstraint = {
52
+ username: {
53
+ equals: sanitizedUsername
54
+ }
55
+ };
56
+ }
38
57
  let user = await payload.db.findOne({
39
58
  collection: collectionConfig.slug,
40
59
  req,
41
- where: loginWithUsername && data?.username ? {
42
- username: {
43
- equals: data.username
44
- }
45
- } : {
46
- email: {
47
- equals: data.email.toLowerCase()
48
- }
49
- }
60
+ where: whereConstraint
50
61
  });
51
62
  // We don't want to indicate specifically that an email was not found,
52
63
  // as doing so could lead to the exposure of registered emails.
@@ -61,7 +72,7 @@ export const forgotPasswordOperation = async (incomingArgs)=>{
61
72
  data: user,
62
73
  req
63
74
  });
64
- if (!disableEmail) {
75
+ if (!disableEmail && user.email) {
65
76
  const protocol = new URL(req.url).protocol // includes the final :
66
77
  ;
67
78
  const serverURL = config.serverURL !== null && config.serverURL !== '' ? config.serverURL : `${protocol}//${req.headers.get('host')}`;
@@ -87,7 +98,7 @@ export const forgotPasswordOperation = async (incomingArgs)=>{
87
98
  from: `"${email.defaultFromName}" <${email.defaultFromAddress}>`,
88
99
  html,
89
100
  subject,
90
- to: loginWithUsername ? user.email : data.email
101
+ to: user.email
91
102
  });
92
103
  }
93
104
  // /////////////////////////////////////
@@ -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 {\n AuthOperationsFromCollectionSlug,\n Collection,\n} from '../../collections/config/types.js'\nimport type { CollectionSlug } from '../../index.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<TSlug extends CollectionSlug> = {\n collection: Collection\n data: {\n [key: string]: unknown\n } & AuthOperationsFromCollectionSlug<TSlug>['forgotPassword']\n disableEmail?: boolean\n expiration?: number\n req: PayloadRequest\n}\n\nexport type Result = string\n\nexport const forgotPasswordOperation = async <TSlug extends CollectionSlug>(\n incomingArgs: Arguments<TSlug>,\n): Promise<null | string> => {\n const loginWithUsername = incomingArgs.collection?.config?.auth?.loginWithUsername\n\n if (!incomingArgs.data.email && !incomingArgs.data.username) {\n throw new APIError(\n `Missing ${loginWithUsername ? 'username' : 'email'}.`,\n httpStatus.BAD_REQUEST,\n )\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 type UserDoc = {\n email?: string\n id: number | string\n resetPasswordExpiration?: string\n resetPasswordToken?: string\n }\n\n if (!data.email && !data.username) {\n throw new APIError(\n `Missing ${loginWithUsername ? 'username' : 'email'}.`,\n httpStatus.BAD_REQUEST,\n )\n }\n\n let user = await payload.db.findOne<UserDoc>({\n collection: collectionConfig.slug,\n req,\n where:\n loginWithUsername && data?.username\n ? { username: { equals: data.username } }\n : { 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 // includes the final :\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}/${config.admin.routes.reset}/${token}\">${serverURL}${config.routes.admin}/${config.admin.routes.reset}/${token}</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 await email.sendEmail({\n from: `\"${email.defaultFromName}\" <${email.defaultFromAddress}>`,\n html,\n subject,\n to: loginWithUsername ? user.email : 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","loginWithUsername","collection","config","auth","data","email","username","BAD_REQUEST","args","shouldCommit","req","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","collectionConfig","disableEmail","expiration","payload","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","reset","forgotPassword","generateEmailHTML","subject","generateEmailSubject","sendEmail","from","defaultFromName","defaultFromAddress","to","afterForgotPassword","result","error"],"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 {\n AuthOperationsFromCollectionSlug,\n Collection,\n} from '../../collections/config/types.js'\nimport type { CollectionSlug } from '../../index.js'\nimport type { PayloadRequest, Where } 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<TSlug extends CollectionSlug> = {\n collection: Collection\n data: {\n [key: string]: unknown\n } & AuthOperationsFromCollectionSlug<TSlug>['forgotPassword']\n disableEmail?: boolean\n expiration?: number\n req: PayloadRequest\n}\n\nexport type Result = string\n\nexport const forgotPasswordOperation = async <TSlug extends CollectionSlug>(\n incomingArgs: Arguments<TSlug>,\n): Promise<null | string> => {\n const loginWithUsername = incomingArgs.collection.config.auth.loginWithUsername\n const { data } = incomingArgs\n\n const canLoginWithUsername = Boolean(loginWithUsername)\n const canLoginWithEmail = !loginWithUsername || loginWithUsername.allowEmailLogin\n\n const sanitizedEmail =\n (canLoginWithEmail && (incomingArgs.data.email || '').toLowerCase().trim()) || null\n const sanitizedUsername =\n 'username' in data && typeof data?.username === 'string'\n ? data.username.toLowerCase().trim()\n : null\n\n if (!sanitizedEmail && !sanitizedUsername) {\n throw new APIError(\n `Missing ${loginWithUsername ? 'username' : 'email'}.`,\n httpStatus.BAD_REQUEST,\n )\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 type UserDoc = {\n email?: string\n id: number | string\n resetPasswordExpiration?: string\n resetPasswordToken?: string\n }\n\n if (!sanitizedEmail && !sanitizedUsername) {\n throw new APIError(\n `Missing ${loginWithUsername ? 'username' : 'email'}.`,\n httpStatus.BAD_REQUEST,\n )\n }\n\n let whereConstraint: Where = {}\n\n if (canLoginWithEmail && sanitizedEmail) {\n whereConstraint = {\n email: {\n equals: sanitizedEmail,\n },\n }\n } else if (canLoginWithUsername && sanitizedUsername) {\n whereConstraint = {\n username: {\n equals: sanitizedUsername,\n },\n }\n }\n\n let user = await payload.db.findOne<UserDoc>({\n collection: collectionConfig.slug,\n req,\n where: whereConstraint,\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 && user.email) {\n const protocol = new URL(req.url).protocol // includes the final :\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}/${config.admin.routes.reset}/${token}\">${serverURL}${config.routes.admin}/${config.admin.routes.reset}/${token}</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 await email.sendEmail({\n from: `\"${email.defaultFromName}\" <${email.defaultFromAddress}>`,\n html,\n subject,\n to: user.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","loginWithUsername","collection","config","auth","data","canLoginWithUsername","Boolean","canLoginWithEmail","allowEmailLogin","sanitizedEmail","email","toLowerCase","trim","sanitizedUsername","username","BAD_REQUEST","args","shouldCommit","req","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","collectionConfig","disableEmail","expiration","payload","token","randomBytes","toString","whereConstraint","equals","user","db","findOne","slug","where","resetPasswordToken","resetPasswordExpiration","Date","now","toISOString","update","id","protocol","url","serverURL","headers","get","html","t","routes","admin","reset","forgotPassword","generateEmailHTML","subject","generateEmailSubject","sendEmail","from","defaultFromName","defaultFromAddress","to","afterForgotPassword","result","error"],"mappings":"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"}
@@ -1,14 +1,12 @@
1
- import type { CollectionSlug, Payload, RequestContext } from '../../../index.js';
1
+ import type { AuthOperationsFromCollectionSlug, CollectionSlug, Payload, RequestContext } from '../../../index.js';
2
2
  import type { PayloadRequest } from '../../../types/index.js';
3
- export type Options<T extends CollectionSlug> = {
4
- collection: T;
3
+ export type Options<TSlug extends CollectionSlug> = {
4
+ collection: TSlug;
5
5
  context?: RequestContext;
6
- data: {
7
- email: any;
8
- };
6
+ data: AuthOperationsFromCollectionSlug<TSlug>['unlock'];
9
7
  overrideAccess: boolean;
10
8
  req?: PayloadRequest;
11
9
  };
12
- declare function localUnlock<T extends CollectionSlug>(payload: Payload, options: Options<T>): Promise<boolean>;
10
+ declare function localUnlock<TSlug extends CollectionSlug>(payload: Payload, options: Options<TSlug>): Promise<boolean>;
13
11
  export default localUnlock;
14
12
  //# sourceMappingURL=unlock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"unlock.d.ts","sourceRoot":"","sources":["../../../../src/auth/operations/local/unlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAM7D,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,cAAc,IAAI;IAC9C,UAAU,EAAE,CAAC,CAAA;IACb,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,IAAI,EAAE;QACJ,KAAK,MAAA;KACN,CAAA;IACD,cAAc,EAAE,OAAO,CAAA;IACvB,GAAG,CAAC,EAAE,cAAc,CAAA;CACrB,CAAA;AAED,iBAAe,WAAW,CAAC,CAAC,SAAS,cAAc,EACjD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAClB,OAAO,CAAC,OAAO,CAAC,CAiBlB;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"unlock.d.ts","sourceRoot":"","sources":["../../../../src/auth/operations/local/unlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gCAAgC,EAChC,cAAc,EACd,OAAO,EACP,cAAc,EACf,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAM7D,MAAM,MAAM,OAAO,CAAC,KAAK,SAAS,cAAc,IAAI;IAClD,UAAU,EAAE,KAAK,CAAA;IACjB,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,IAAI,EAAE,gCAAgC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAA;IACvD,cAAc,EAAE,OAAO,CAAA;IACvB,GAAG,CAAC,EAAE,cAAc,CAAA;CACrB,CAAA;AAED,iBAAe,WAAW,CAAC,KAAK,SAAS,cAAc,EACrD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,GACtB,OAAO,CAAC,OAAO,CAAC,CAiBlB;AAED,eAAe,WAAW,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/auth/operations/local/unlock.ts"],"sourcesContent":["import type { CollectionSlug, Payload, RequestContext } from '../../../index.js'\nimport type { PayloadRequest } from '../../../types/index.js'\n\nimport { APIError } from '../../../errors/index.js'\nimport { createLocalReq } from '../../../utilities/createLocalReq.js'\nimport { unlockOperation } from '../unlock.js'\n\nexport type Options<T extends CollectionSlug> = {\n collection: T\n context?: RequestContext\n data: {\n email\n }\n overrideAccess: boolean\n req?: PayloadRequest\n}\n\nasync function localUnlock<T extends CollectionSlug>(\n payload: Payload,\n options: Options<T>,\n): Promise<boolean> {\n const { collection: collectionSlug, data, overrideAccess = true } = options\n\n const collection = payload.collections[collectionSlug]\n\n if (!collection) {\n throw new APIError(\n `The collection with slug ${String(collectionSlug)} can't be found. Unlock Operation.`,\n )\n }\n\n return unlockOperation({\n collection,\n data,\n overrideAccess,\n req: await createLocalReq(options, payload),\n })\n}\n\nexport default localUnlock\n"],"names":["APIError","createLocalReq","unlockOperation","localUnlock","payload","options","collection","collectionSlug","data","overrideAccess","collections","String","req"],"mappings":"AAGA,SAASA,QAAQ,QAAQ,2BAA0B;AACnD,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,eAAe,QAAQ,eAAc;AAY9C,eAAeC,YACbC,OAAgB,EAChBC,OAAmB;IAEnB,MAAM,EAAEC,YAAYC,cAAc,EAAEC,IAAI,EAAEC,iBAAiB,IAAI,EAAE,GAAGJ;IAEpE,MAAMC,aAAaF,QAAQM,WAAW,CAACH,eAAe;IAEtD,IAAI,CAACD,YAAY;QACf,MAAM,IAAIN,SACR,CAAC,yBAAyB,EAAEW,OAAOJ,gBAAgB,kCAAkC,CAAC;IAE1F;IAEA,OAAOL,gBAAgB;QACrBI;QACAE;QACAC;QACAG,KAAK,MAAMX,eAAeI,SAASD;IACrC;AACF;AAEA,eAAeD,YAAW"}
1
+ {"version":3,"sources":["../../../../src/auth/operations/local/unlock.ts"],"sourcesContent":["import type {\n AuthOperationsFromCollectionSlug,\n CollectionSlug,\n Payload,\n RequestContext,\n} from '../../../index.js'\nimport type { PayloadRequest } from '../../../types/index.js'\n\nimport { APIError } from '../../../errors/index.js'\nimport { createLocalReq } from '../../../utilities/createLocalReq.js'\nimport { unlockOperation } from '../unlock.js'\n\nexport type Options<TSlug extends CollectionSlug> = {\n collection: TSlug\n context?: RequestContext\n data: AuthOperationsFromCollectionSlug<TSlug>['unlock']\n overrideAccess: boolean\n req?: PayloadRequest\n}\n\nasync function localUnlock<TSlug extends CollectionSlug>(\n payload: Payload,\n options: Options<TSlug>,\n): Promise<boolean> {\n const { collection: collectionSlug, data, overrideAccess = true } = options\n\n const collection = payload.collections[collectionSlug]\n\n if (!collection) {\n throw new APIError(\n `The collection with slug ${String(collectionSlug)} can't be found. Unlock Operation.`,\n )\n }\n\n return unlockOperation<TSlug>({\n collection,\n data,\n overrideAccess,\n req: await createLocalReq(options, payload),\n })\n}\n\nexport default localUnlock\n"],"names":["APIError","createLocalReq","unlockOperation","localUnlock","payload","options","collection","collectionSlug","data","overrideAccess","collections","String","req"],"mappings":"AAQA,SAASA,QAAQ,QAAQ,2BAA0B;AACnD,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,eAAe,QAAQ,eAAc;AAU9C,eAAeC,YACbC,OAAgB,EAChBC,OAAuB;IAEvB,MAAM,EAAEC,YAAYC,cAAc,EAAEC,IAAI,EAAEC,iBAAiB,IAAI,EAAE,GAAGJ;IAEpE,MAAMC,aAAaF,QAAQM,WAAW,CAACH,eAAe;IAEtD,IAAI,CAACD,YAAY;QACf,MAAM,IAAIN,SACR,CAAC,yBAAyB,EAAEW,OAAOJ,gBAAgB,kCAAkC,CAAC;IAE1F;IAEA,OAAOL,gBAAuB;QAC5BI;QACAE;QACAC;QACAG,KAAK,MAAMX,eAAeI,SAASD;IACrC;AACF;AAEA,eAAeD,YAAW"}
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/login.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gCAAgC,EAChC,UAAU,EACV,sBAAsB,EACvB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,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,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,gCAAgC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAA;IACtD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,KAAK,SAAS,cAAc,gBACjD,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC;IAAE,IAAI,EAAE,sBAAsB,CAAC,KAAK,CAAC,CAAA;CAAE,GAAG,MAAM,CAkP1D,CAAA"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/login.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gCAAgC,EAChC,UAAU,EACV,sBAAsB,EACvB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAS,MAAM,sBAAsB,CAAA;AACjE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;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,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,gCAAgC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAA;IACtD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,KAAK,SAAS,cAAc,gBACjD,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC;IAAE,IAAI,EAAE,sBAAsB,CAAC,KAAK,CAAC,CAAA;CAAE,GAAG,MAAM,CA4S1D,CAAA"}