payload 3.1.2-canary.eb1a61e → 3.2.0
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.
- package/dist/admin/views/types.d.ts.map +1 -1
- package/dist/admin/views/types.js.map +1 -1
- package/dist/auth/getAuthFields.d.ts.map +1 -1
- package/dist/auth/getAuthFields.js +3 -0
- package/dist/auth/getAuthFields.js.map +1 -1
- package/dist/auth/getLoginOptions.d.ts +6 -0
- package/dist/auth/getLoginOptions.d.ts.map +1 -0
- package/dist/auth/getLoginOptions.js +8 -0
- package/dist/auth/getLoginOptions.js.map +1 -0
- package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
- package/dist/auth/operations/forgotPassword.js +2 -2
- package/dist/auth/operations/forgotPassword.js.map +1 -1
- package/dist/auth/operations/login.d.ts.map +1 -1
- package/dist/auth/operations/login.js +2 -2
- package/dist/auth/operations/login.js.map +1 -1
- package/dist/auth/operations/unlock.d.ts.map +1 -1
- package/dist/auth/operations/unlock.js +2 -2
- package/dist/auth/operations/unlock.js.map +1 -1
- package/dist/auth/strategies/local/register.d.ts.map +1 -1
- package/dist/auth/strategies/local/register.js +5 -3
- package/dist/auth/strategies/local/register.js.map +1 -1
- package/dist/collections/operations/find.js +1 -1
- package/dist/collections/operations/find.js.map +1 -1
- package/dist/collections/operations/findByID.d.ts.map +1 -1
- package/dist/collections/operations/findByID.js +13 -9
- package/dist/collections/operations/findByID.js.map +1 -1
- package/dist/collections/operations/update.js +1 -1
- package/dist/collections/operations/update.js.map +1 -1
- package/dist/database/sanitizeJoinQuery.d.ts.map +1 -1
- package/dist/database/sanitizeJoinQuery.js +6 -4
- package/dist/database/sanitizeJoinQuery.js.map +1 -1
- package/dist/exports/shared.d.ts +1 -0
- package/dist/exports/shared.d.ts.map +1 -1
- package/dist/exports/shared.js +1 -0
- package/dist/exports/shared.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/admin/views/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAExE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAA;AACrE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAClF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAC9F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/admin/views/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/admin/views/types.ts"],"sourcesContent":["import type { ClientTranslationsObject } from '@payloadcms/translations'\n\nimport type { SanitizedPermissions } from '../../auth/index.js'\nimport type { ImportMap } from '../../bin/generateImportMap/index.js'\nimport type { SanitizedCollectionConfig } from '../../collections/config/types.js'\nimport type { ClientConfig } from '../../config/client.js'\nimport type { Locale, MetaConfig, PayloadComponent, ServerProps } from '../../config/types.js'\nimport type { SanitizedGlobalConfig } from '../../globals/config/types.js'\nimport type { PayloadRequest } from '../../types/index.js'\nimport type { LanguageOptions } from '../LanguageOptions.js'\nimport type { Data, DocumentSlots
|
|
1
|
+
{"version":3,"sources":["../../../src/admin/views/types.ts"],"sourcesContent":["import type { ClientTranslationsObject } from '@payloadcms/translations'\n\nimport type { SanitizedPermissions } from '../../auth/index.js'\nimport type { ImportMap } from '../../bin/generateImportMap/index.js'\nimport type { SanitizedCollectionConfig } from '../../collections/config/types.js'\nimport type { ClientConfig } from '../../config/client.js'\nimport type { Locale, MetaConfig, PayloadComponent, ServerProps } from '../../config/types.js'\nimport type { SanitizedGlobalConfig } from '../../globals/config/types.js'\nimport type { PayloadRequest } from '../../types/index.js'\nimport type { LanguageOptions } from '../LanguageOptions.js'\nimport type { Data, DocumentSlots } from '../types.js'\n\nexport type AdminViewConfig = {\n Component: AdminViewComponent\n /** Whether the path should be matched exactly or as a prefix */\n exact?: boolean\n meta?: MetaConfig\n path?: string\n sensitive?: boolean\n strict?: boolean\n}\n\nexport type AdminViewProps = {\n readonly clientConfig: ClientConfig\n readonly disableActions?: boolean\n readonly drawerSlug?: string\n readonly importMap: ImportMap\n readonly initialData?: Data\n readonly initPageResult: InitPageResult\n readonly params?: { [key: string]: string | string[] | undefined }\n readonly redirectAfterDelete?: boolean\n readonly redirectAfterDuplicate?: boolean\n readonly searchParams: { [key: string]: string | string[] | undefined }\n}\n\nexport type AdminViewComponent = PayloadComponent<AdminViewProps>\n\nexport type EditViewProps = {\n readonly collectionSlug?: string\n readonly globalSlug?: string\n}\n\nexport type VisibleEntities = {\n collections: SanitizedCollectionConfig['slug'][]\n globals: SanitizedGlobalConfig['slug'][]\n}\n\nexport type InitPageResult = {\n collectionConfig?: SanitizedCollectionConfig\n cookies: Map<string, string>\n docID?: number | string\n globalConfig?: SanitizedGlobalConfig\n languageOptions: LanguageOptions\n locale?: Locale\n permissions: SanitizedPermissions\n redirectTo?: string\n req: PayloadRequest\n translations: ClientTranslationsObject\n visibleEntities: VisibleEntities\n}\n\nexport type ServerSideEditViewProps = {\n readonly doc: Data\n readonly initPageResult: InitPageResult\n readonly routeSegments: string[]\n} & ClientSideEditViewProps &\n ServerProps\n\nexport type ClientSideEditViewProps = {} & DocumentSlots\n"],"names":[],"mappings":"AAoEA,WAAwD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAuthFields.d.ts","sourceRoot":"","sources":["../../src/auth/getAuthFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AASlD,eAAO,MAAM,iBAAiB,eAAgB,gBAAgB,KAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"getAuthFields.d.ts","sourceRoot":"","sources":["../../src/auth/getAuthFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AASlD,eAAO,MAAM,iBAAiB,eAAgB,gBAAgB,KAAG,KAAK,EA2CrE,CAAA"}
|
|
@@ -25,6 +25,9 @@ export const getBaseAuthFields = (authConfig)=>{
|
|
|
25
25
|
if (authConfig.loginWithUsername.requireUsername === false) {
|
|
26
26
|
usernameField.required = false;
|
|
27
27
|
}
|
|
28
|
+
if (authConfig.loginWithUsername.allowEmailLogin === false) {
|
|
29
|
+
emailField.unique = false;
|
|
30
|
+
}
|
|
28
31
|
}
|
|
29
32
|
}
|
|
30
33
|
authFields.push(emailField);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/auth/getAuthFields.ts"],"sourcesContent":["import type { Field, TextField } from '../fields/config/types.js'\nimport type { IncomingAuthType } from './types.js'\n\nimport { accountLockFields } from './baseFields/accountLock.js'\nimport { apiKeyFields } from './baseFields/apiKey.js'\nimport { baseAuthFields } from './baseFields/auth.js'\nimport { emailFieldConfig } from './baseFields/email.js'\nimport { usernameFieldConfig } from './baseFields/username.js'\nimport { verificationFields } from './baseFields/verification.js'\n\nexport const getBaseAuthFields = (authConfig: IncomingAuthType): Field[] => {\n const authFields: Field[] = []\n\n if (authConfig.useAPIKey) {\n authFields.push(...apiKeyFields)\n }\n\n if (!authConfig.disableLocalStrategy) {\n const emailField = { ...emailFieldConfig }\n let usernameField: TextField | undefined\n\n if (authConfig.loginWithUsername) {\n usernameField = { ...usernameFieldConfig }\n if (typeof authConfig.loginWithUsername === 'object') {\n if (authConfig.loginWithUsername.requireEmail === false) {\n emailField.required = false\n }\n if (authConfig.loginWithUsername.requireUsername === false) {\n usernameField.required = false\n }\n }\n }\n\n authFields.push(emailField)\n if (usernameField) {\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 && authConfig.maxLoginAttempts > 0) {\n authFields.push(...accountLockFields)\n }\n }\n\n return authFields\n}\n"],"names":["accountLockFields","apiKeyFields","baseAuthFields","emailFieldConfig","usernameFieldConfig","verificationFields","getBaseAuthFields","authConfig","authFields","useAPIKey","push","disableLocalStrategy","emailField","usernameField","loginWithUsername","requireEmail","required","requireUsername","verify","maxLoginAttempts"],"mappings":"AAGA,SAASA,iBAAiB,QAAQ,8BAA6B;AAC/D,SAASC,YAAY,QAAQ,yBAAwB;AACrD,SAASC,cAAc,QAAQ,uBAAsB;AACrD,SAASC,gBAAgB,QAAQ,wBAAuB;AACxD,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,kBAAkB,QAAQ,+BAA8B;AAEjE,OAAO,MAAMC,oBAAoB,CAACC;IAChC,MAAMC,aAAsB,EAAE;IAE9B,IAAID,WAAWE,SAAS,EAAE;QACxBD,WAAWE,IAAI,IAAIT;IACrB;IAEA,IAAI,CAACM,WAAWI,oBAAoB,EAAE;QACpC,MAAMC,aAAa;YAAE,GAAGT,gBAAgB;QAAC;QACzC,IAAIU;QAEJ,IAAIN,WAAWO,iBAAiB,EAAE;YAChCD,gBAAgB;gBAAE,GAAGT,mBAAmB;YAAC;YACzC,IAAI,OAAOG,WAAWO,iBAAiB,KAAK,UAAU;gBACpD,IAAIP,WAAWO,iBAAiB,CAACC,YAAY,KAAK,OAAO;oBACvDH,WAAWI,QAAQ,GAAG;gBACxB;gBACA,IAAIT,WAAWO,iBAAiB,CAACG,eAAe,KAAK,OAAO;oBAC1DJ,cAAcG,QAAQ,GAAG;gBAC3B;YACF;QACF;
|
|
1
|
+
{"version":3,"sources":["../../src/auth/getAuthFields.ts"],"sourcesContent":["import type { Field, TextField } from '../fields/config/types.js'\nimport type { IncomingAuthType } from './types.js'\n\nimport { accountLockFields } from './baseFields/accountLock.js'\nimport { apiKeyFields } from './baseFields/apiKey.js'\nimport { baseAuthFields } from './baseFields/auth.js'\nimport { emailFieldConfig } from './baseFields/email.js'\nimport { usernameFieldConfig } from './baseFields/username.js'\nimport { verificationFields } from './baseFields/verification.js'\n\nexport const getBaseAuthFields = (authConfig: IncomingAuthType): Field[] => {\n const authFields: Field[] = []\n\n if (authConfig.useAPIKey) {\n authFields.push(...apiKeyFields)\n }\n\n if (!authConfig.disableLocalStrategy) {\n const emailField = { ...emailFieldConfig }\n let usernameField: TextField | undefined\n\n if (authConfig.loginWithUsername) {\n usernameField = { ...usernameFieldConfig }\n if (typeof authConfig.loginWithUsername === 'object') {\n if (authConfig.loginWithUsername.requireEmail === false) {\n emailField.required = false\n }\n if (authConfig.loginWithUsername.requireUsername === false) {\n usernameField.required = false\n }\n if (authConfig.loginWithUsername.allowEmailLogin === false) {\n emailField.unique = false\n }\n }\n }\n\n authFields.push(emailField)\n if (usernameField) {\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 && authConfig.maxLoginAttempts > 0) {\n authFields.push(...accountLockFields)\n }\n }\n\n return authFields\n}\n"],"names":["accountLockFields","apiKeyFields","baseAuthFields","emailFieldConfig","usernameFieldConfig","verificationFields","getBaseAuthFields","authConfig","authFields","useAPIKey","push","disableLocalStrategy","emailField","usernameField","loginWithUsername","requireEmail","required","requireUsername","allowEmailLogin","unique","verify","maxLoginAttempts"],"mappings":"AAGA,SAASA,iBAAiB,QAAQ,8BAA6B;AAC/D,SAASC,YAAY,QAAQ,yBAAwB;AACrD,SAASC,cAAc,QAAQ,uBAAsB;AACrD,SAASC,gBAAgB,QAAQ,wBAAuB;AACxD,SAASC,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,kBAAkB,QAAQ,+BAA8B;AAEjE,OAAO,MAAMC,oBAAoB,CAACC;IAChC,MAAMC,aAAsB,EAAE;IAE9B,IAAID,WAAWE,SAAS,EAAE;QACxBD,WAAWE,IAAI,IAAIT;IACrB;IAEA,IAAI,CAACM,WAAWI,oBAAoB,EAAE;QACpC,MAAMC,aAAa;YAAE,GAAGT,gBAAgB;QAAC;QACzC,IAAIU;QAEJ,IAAIN,WAAWO,iBAAiB,EAAE;YAChCD,gBAAgB;gBAAE,GAAGT,mBAAmB;YAAC;YACzC,IAAI,OAAOG,WAAWO,iBAAiB,KAAK,UAAU;gBACpD,IAAIP,WAAWO,iBAAiB,CAACC,YAAY,KAAK,OAAO;oBACvDH,WAAWI,QAAQ,GAAG;gBACxB;gBACA,IAAIT,WAAWO,iBAAiB,CAACG,eAAe,KAAK,OAAO;oBAC1DJ,cAAcG,QAAQ,GAAG;gBAC3B;gBACA,IAAIT,WAAWO,iBAAiB,CAACI,eAAe,KAAK,OAAO;oBAC1DN,WAAWO,MAAM,GAAG;gBACtB;YACF;QACF;QAEAX,WAAWE,IAAI,CAACE;QAChB,IAAIC,eAAe;YACjBL,WAAWE,IAAI,CAACG;QAClB;QAEAL,WAAWE,IAAI,IAAIR;QAEnB,IAAIK,WAAWa,MAAM,EAAE;YACrBZ,WAAWE,IAAI,IAAIL;QACrB;QAEA,IAAIE,YAAYc,oBAAoBd,WAAWc,gBAAgB,GAAG,GAAG;YACnEb,WAAWE,IAAI,IAAIV;QACrB;IACF;IAEA,OAAOQ;AACT,EAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getLoginOptions.d.ts","sourceRoot":"","sources":["../../src/auth/getLoginOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtC,eAAO,MAAM,eAAe,sBACP,IAAI,CAAC,mBAAmB,CAAC,KAC3C;IACD,iBAAiB,EAAE,OAAO,CAAA;IAC1B,oBAAoB,EAAE,OAAO,CAAA;CAM9B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/auth/getLoginOptions.ts"],"sourcesContent":["import type { Auth } from './types.js'\n\nexport const getLoginOptions = (\n loginWithUsername: Auth['loginWithUsername'],\n): {\n canLoginWithEmail: boolean\n canLoginWithUsername: boolean\n} => {\n return {\n canLoginWithEmail: !loginWithUsername || loginWithUsername.allowEmailLogin,\n canLoginWithUsername: Boolean(loginWithUsername),\n }\n}\n"],"names":["getLoginOptions","loginWithUsername","canLoginWithEmail","allowEmailLogin","canLoginWithUsername","Boolean"],"mappings":"AAEA,OAAO,MAAMA,kBAAkB,CAC7BC;IAKA,OAAO;QACLC,mBAAmB,CAACD,qBAAqBA,kBAAkBE,eAAe;QAC1EC,sBAAsBC,QAAQJ;IAChC;AACF,EAAC"}
|
|
@@ -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,EAAS,MAAM,sBAAsB,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;AASjE,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,CAkLvB,CAAA"}
|
|
@@ -6,11 +6,11 @@ import { APIError } from '../../errors/index.js';
|
|
|
6
6
|
import { commitTransaction } from '../../utilities/commitTransaction.js';
|
|
7
7
|
import { initTransaction } from '../../utilities/initTransaction.js';
|
|
8
8
|
import { killTransaction } from '../../utilities/killTransaction.js';
|
|
9
|
+
import { getLoginOptions } from '../getLoginOptions.js';
|
|
9
10
|
export const forgotPasswordOperation = async (incomingArgs)=>{
|
|
10
11
|
const loginWithUsername = incomingArgs.collection.config.auth.loginWithUsername;
|
|
11
12
|
const { data } = incomingArgs;
|
|
12
|
-
const canLoginWithUsername =
|
|
13
|
-
const canLoginWithEmail = !loginWithUsername || loginWithUsername.allowEmailLogin;
|
|
13
|
+
const { canLoginWithEmail, canLoginWithUsername } = getLoginOptions(loginWithUsername);
|
|
14
14
|
const sanitizedEmail = canLoginWithEmail && (incomingArgs.data.email || '').toLowerCase().trim() || null;
|
|
15
15
|
const sanitizedUsername = 'username' in data && typeof data?.username === 'string' ? data.username.toLowerCase().trim() : null;
|
|
16
16
|
if (!sanitizedEmail && !sanitizedUsername) {
|
|
@@ -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, 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) {\n return null\n }\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) {\n await commitTransaction(req)\n }\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":"AAAA,OAAOA,YAAY,SAAQ;AAC3B,OAAOC,gBAAgB,cAAa;AACpC,SAASC,GAAG,QAAQ,MAAK;AASzB,SAASC,mBAAmB,QAAQ,wCAAuC;AAC3E,SAASC,QAAQ,QAAQ,wBAAuB;AAChD,SAASC,iBAAiB,QAAQ,uCAAsC;AACxE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,eAAe,QAAQ,qCAAoC;AAcpE,OAAO,MAAMC,0BAA0B,OACrCC;IAEA,MAAMC,oBAAoBD,aAAaE,UAAU,CAACC,MAAM,CAACC,IAAI,CAACH,iBAAiB;IAC/E,MAAM,EAAEI,IAAI,EAAE,GAAGL;IAEjB,MAAMM,uBAAuBC,QAAQN;IACrC,MAAMO,oBAAoB,CAACP,qBAAqBA,kBAAkBQ,eAAe;IAEjF,MAAMC,iBACJ,AAACF,qBAAqB,AAACR,CAAAA,aAAaK,IAAI,CAACM,KAAK,IAAI,EAAC,EAAGC,WAAW,GAAGC,IAAI,MAAO;IACjF,MAAMC,oBACJ,cAAcT,QAAQ,OAAOA,MAAMU,aAAa,WAC5CV,KAAKU,QAAQ,CAACH,WAAW,GAAGC,IAAI,KAChC;IAEN,IAAI,CAACH,kBAAkB,CAACI,mBAAmB;QACzC,MAAM,IAAInB,SACR,CAAC,QAAQ,EAAEM,oBAAoB,aAAa,QAAQ,CAAC,CAAC,EACtDT,WAAWwB,WAAW;IAE1B;IAEA,IAAIC,OAAOjB;IAEX,IAAI;QACF,MAAMkB,eAAe,MAAMrB,gBAAgBoB,KAAKE,GAAG;QAEnD,wCAAwC;QACxC,+BAA+B;QAC/B,wCAAwC;QAExC,MAAMF,KAAKf,UAAU,CAACC,MAAM,CAACiB,KAAK,CAACC,eAAe,CAACC,MAAM,CAAC,OAAOC,WAAWC;YAC1E,MAAMD;YAENN,OACE,AAAC,MAAMO,KAAK;gBACVP;gBACAf,YAAYe,KAAKf,UAAU,EAAEC;gBAC7BsB,SAASR,KAAKE,GAAG,CAACM,OAAO;gBACzBC,WAAW;gBACXP,KAAKF,KAAKE,GAAG;YACf,MAAOF;QACX,GAAGU,QAAQC,OAAO;QAElB,MAAM,EACJ1B,YAAY,EAAEC,QAAQ0B,gBAAgB,EAAE,EACxCxB,IAAI,EACJyB,YAAY,EACZC,UAAU,EACVZ,KAAK,EACHa,SAAS,EAAE7B,MAAM,EAAEQ,KAAK,EAAE,EAC1BqB,OAAO,EACR,EACDb,GAAG,EACJ,GAAGF;QAEJ,wCAAwC;QACxC,kBAAkB;QAClB,wCAAwC;QAExC,IAAIgB,QAAgB1C,OAAO2C,WAAW,CAAC,IAAIC,QAAQ,CAAC;QAQpD,IAAI,CAACzB,kBAAkB,CAACI,mBAAmB;YACzC,MAAM,IAAInB,SACR,CAAC,QAAQ,EAAEM,oBAAoB,aAAa,QAAQ,CAAC,CAAC,EACtDT,WAAWwB,WAAW;QAE1B;QAEA,IAAIoB,kBAAyB,CAAC;QAE9B,IAAI5B,qBAAqBE,gBAAgB;YACvC0B,kBAAkB;gBAChBzB,OAAO;oBACL0B,QAAQ3B;gBACV;YACF;QACF,OAAO,IAAIJ,wBAAwBQ,mBAAmB;YACpDsB,kBAAkB;gBAChBrB,UAAU;oBACRsB,QAAQvB;gBACV;YACF;QACF;QAEA,IAAIwB,OAAO,MAAMN,QAAQO,EAAE,CAACC,OAAO,CAAU;YAC3CtC,YAAY2B,iBAAiBY,IAAI;YACjCtB;YACAuB,OAAON;QACT;QAEA,sEAAsE;QACtE,+DAA+D;QAC/D,yCAAyC;QACzC,IAAI,CAACE,MAAM;YACT,OAAO;QACT;QAEAA,KAAKK,kBAAkB,GAAGV;QAC1BK,KAAKM,uBAAuB,GAAG,IAAIC,KAAKd,cAAcc,KAAKC,GAAG,KAAK,SAASC,WAAW,GAAG,SAAS;;QAEnGT,OAAO,MAAMN,QAAQgB,MAAM,CAAC;YAC1BC,IAAIX,KAAKW,EAAE;YACX/C,YAAY2B,iBAAiBY,IAAI;YACjCpC,MAAMiC;YACNnB;QACF;QAEA,IAAI,CAACW,gBAAgBQ,KAAK3B,KAAK,EAAE;YAC/B,MAAMuC,WAAW,IAAIzD,IAAI0B,IAAIgC,GAAG,EAAED,QAAQ,CAAC,uBAAuB;;YAClE,MAAME,YACJjD,OAAOiD,SAAS,KAAK,QAAQjD,OAAOiD,SAAS,KAAK,KAC9CjD,OAAOiD,SAAS,GAChB,CAAC,EAAEF,SAAS,EAAE,EAAE/B,IAAIkC,OAAO,CAACC,GAAG,CAAC,QAAQ,CAAC;YAE/C,IAAIC,OAAO,CAAC,EAAEpC,IAAIqC,CAAC,CAAC,+CAA+C;aAC5D,EAAEJ,UAAU,EAAEjD,OAAOsD,MAAM,CAACC,KAAK,CAAC,EAAEvD,OAAOuD,KAAK,CAACD,MAAM,CAACE,KAAK,CAAC,CAAC,EAAE1B,MAAM,EAAE,EAAEmB,UAAU,EAAEjD,OAAOsD,MAAM,CAACC,KAAK,CAAC,EAAEvD,OAAOuD,KAAK,CAACD,MAAM,CAACE,KAAK,CAAC,CAAC,EAAE1B,MAAM;IACzJ,EAAEd,IAAIqC,CAAC,CAAC,2CAA2C,CAAC;YAElD,IAAI,OAAO3B,iBAAiBzB,IAAI,CAACwD,cAAc,EAAEC,sBAAsB,YAAY;gBACjFN,OAAO,MAAM1B,iBAAiBzB,IAAI,CAACwD,cAAc,CAACC,iBAAiB,CAAC;oBAClE1C;oBACAc;oBACAK;gBACF;YACF;YAEA,IAAIwB,UAAU3C,IAAIqC,CAAC,CAAC;YAEpB,IAAI,OAAO3B,iBAAiBzB,IAAI,CAACwD,cAAc,EAAEG,yBAAyB,YAAY;gBACpFD,UAAU,MAAMjC,iBAAiBzB,IAAI,CAACwD,cAAc,CAACG,oBAAoB,CAAC;oBACxE5C;oBACAc;oBACAK;gBACF;YACF;YAEA,MAAM3B,MAAMqD,SAAS,CAAC;gBACpBC,MAAM,CAAC,CAAC,EAAEtD,MAAMuD,eAAe,CAAC,GAAG,EAAEvD,MAAMwD,kBAAkB,CAAC,CAAC,CAAC;gBAChEZ;gBACAO;gBACAM,IAAI9B,KAAK3B,KAAK;YAChB;QACF;QAEA,wCAAwC;QACxC,mCAAmC;QACnC,wCAAwC;QAExC,MAAMkB,iBAAiBT,KAAK,CAACiD,mBAAmB,CAAC/C,MAAM,CAAC,OAAOC,WAAWC;YACxE,MAAMD;YACN,MAAMC,KAAK;gBAAEP;gBAAMf,YAAYe,KAAKf,UAAU,EAAEC;gBAAQsB,SAASN,IAAIM,OAAO;YAAC;QAC/E,GAAGE,QAAQC,OAAO;QAElB,wCAAwC;QACxC,8BAA8B;QAC9B,wCAAwC;QAExCK,QAAQ,MAAMvC,oBAAoB;YAChCuB;YACAf,YAAYe,KAAKf,UAAU,EAAEC;YAC7BuB,WAAW;YACX4C,QAAQrC;QACV;QAEA,IAAIf,cAAc;YAChB,MAAMtB,kBAAkBuB;QAC1B;QAEA,OAAOc;IACT,EAAE,OAAOsC,OAAgB;QACvB,MAAMzE,gBAAgBmB,KAAKE,GAAG;QAC9B,MAAMoD;IACR;AACF,EAAC"}
|
|
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'\nimport { getLoginOptions } from '../getLoginOptions.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 { canLoginWithEmail, canLoginWithUsername } = getLoginOptions(loginWithUsername)\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) {\n return null\n }\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) {\n await commitTransaction(req)\n }\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","getLoginOptions","forgotPasswordOperation","incomingArgs","loginWithUsername","collection","config","auth","data","canLoginWithEmail","canLoginWithUsername","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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/login.ts"],"names":[],"mappings":"AAAA,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;
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/login.ts"],"names":[],"mappings":"AAAA,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,CAyS1D,CAAA"}
|
|
@@ -4,6 +4,7 @@ import { afterRead } from '../../fields/hooks/afterRead/index.js';
|
|
|
4
4
|
import { killTransaction } from '../../utilities/killTransaction.js';
|
|
5
5
|
import sanitizeInternalFields from '../../utilities/sanitizeInternalFields.js';
|
|
6
6
|
import { getFieldsToSign } from '../getFieldsToSign.js';
|
|
7
|
+
import { getLoginOptions } from '../getLoginOptions.js';
|
|
7
8
|
import isLocked from '../isLocked.js';
|
|
8
9
|
import { jwtSign } from '../jwt.js';
|
|
9
10
|
import { authenticateLocalStrategy } from '../strategies/local/authenticate.js';
|
|
@@ -34,8 +35,7 @@ export const loginOperation = async (incomingArgs)=>{
|
|
|
34
35
|
const loginWithUsername = collectionConfig.auth.loginWithUsername;
|
|
35
36
|
const sanitizedEmail = typeof unsanitizedEmail === 'string' ? unsanitizedEmail.toLowerCase().trim() : null;
|
|
36
37
|
const sanitizedUsername = 'username' in data && typeof data?.username === 'string' ? data.username.toLowerCase().trim() : null;
|
|
37
|
-
const canLoginWithUsername =
|
|
38
|
-
const canLoginWithEmail = !loginWithUsername || loginWithUsername.allowEmailLogin;
|
|
38
|
+
const { canLoginWithEmail, canLoginWithUsername } = getLoginOptions(loginWithUsername);
|
|
39
39
|
// cannot login with email, did not provide username
|
|
40
40
|
if (!canLoginWithEmail && !sanitizedUsername) {
|
|
41
41
|
throw new ValidationError({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/auth/operations/login.ts"],"sourcesContent":["import type {\n AuthOperationsFromCollectionSlug,\n Collection,\n DataFromCollectionSlug,\n} from '../../collections/config/types.js'\nimport type { CollectionSlug } from '../../index.js'\nimport type { PayloadRequest, Where } from '../../types/index.js'\nimport type { User } from '../types.js'\n\nimport { buildAfterOperation } from '../../collections/operations/utils.js'\nimport { AuthenticationError, LockedAuth, ValidationError } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport sanitizeInternalFields from '../../utilities/sanitizeInternalFields.js'\nimport { getFieldsToSign } from '../getFieldsToSign.js'\nimport isLocked from '../isLocked.js'\nimport { jwtSign } from '../jwt.js'\nimport { authenticateLocalStrategy } from '../strategies/local/authenticate.js'\nimport { incrementLoginAttempts } from '../strategies/local/incrementLoginAttempts.js'\nimport { resetLoginAttempts } from '../strategies/local/resetLoginAttempts.js'\n\nexport type Result = {\n exp?: number\n token?: string\n user?: User\n}\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n collection: Collection\n data: AuthOperationsFromCollectionSlug<TSlug>['login']\n depth?: number\n overrideAccess?: boolean\n req: PayloadRequest\n showHiddenFields?: boolean\n}\n\nexport const loginOperation = async <TSlug extends CollectionSlug>(\n incomingArgs: Arguments<TSlug>,\n): Promise<{ user: DataFromCollectionSlug<TSlug> } & Result> => {\n let args = incomingArgs\n\n try {\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n await args.collection.config.hooks.beforeOperation.reduce(async (priorHook, hook) => {\n await priorHook\n\n args =\n (await hook({\n args,\n collection: args.collection?.config,\n context: args.req.context,\n operation: 'login',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n const {\n collection: { config: collectionConfig },\n data,\n depth,\n overrideAccess,\n req,\n req: {\n fallbackLocale,\n locale,\n payload,\n payload: { secret },\n },\n showHiddenFields,\n } = args\n\n // /////////////////////////////////////\n // Login\n // /////////////////////////////////////\n\n let user\n const { email: unsanitizedEmail, password } = data\n const loginWithUsername = collectionConfig.auth.loginWithUsername\n\n const sanitizedEmail =\n typeof unsanitizedEmail === 'string' ? unsanitizedEmail.toLowerCase().trim() : null\n const sanitizedUsername =\n 'username' in data && typeof data?.username === 'string'\n ? data.username.toLowerCase().trim()\n : null\n\n const canLoginWithUsername = Boolean(loginWithUsername)\n const canLoginWithEmail = !loginWithUsername || loginWithUsername.allowEmailLogin\n\n // cannot login with email, did not provide username\n if (!canLoginWithEmail && !sanitizedUsername) {\n throw new ValidationError({\n collection: collectionConfig.slug,\n errors: [{ message: req.i18n.t('validation:required'), path: 'username' }],\n })\n }\n\n // cannot login with username, did not provide email\n if (!canLoginWithUsername && !sanitizedEmail) {\n throw new ValidationError({\n collection: collectionConfig.slug,\n errors: [{ message: req.i18n.t('validation:required'), path: 'email' }],\n })\n }\n\n // can login with either email or username, did not provide either\n if (!sanitizedUsername && !sanitizedEmail) {\n throw new ValidationError({\n collection: collectionConfig.slug,\n errors: [\n { message: req.i18n.t('validation:required'), path: 'email' },\n { message: req.i18n.t('validation:required'), path: 'username' },\n ],\n })\n }\n\n // did not provide password for login\n if (typeof password !== 'string' || password.trim() === '') {\n throw new ValidationError({\n collection: collectionConfig.slug,\n errors: [{ message: req.i18n.t('validation:required'), path: 'password' }],\n })\n }\n\n let whereConstraint: Where = {}\n const emailConstraint: Where = {\n email: {\n equals: sanitizedEmail,\n },\n }\n const usernameConstraint: Where = {\n username: {\n equals: sanitizedUsername,\n },\n }\n\n if (canLoginWithEmail && canLoginWithUsername && (sanitizedUsername || sanitizedEmail)) {\n if (sanitizedUsername) {\n whereConstraint = {\n or: [\n usernameConstraint,\n {\n email: {\n equals: sanitizedUsername,\n },\n },\n ],\n }\n } else {\n whereConstraint = {\n or: [\n emailConstraint,\n {\n username: {\n equals: sanitizedEmail,\n },\n },\n ],\n }\n }\n } else if (canLoginWithEmail && sanitizedEmail) {\n whereConstraint = emailConstraint\n } else if (canLoginWithUsername && sanitizedUsername) {\n whereConstraint = usernameConstraint\n }\n\n user = await payload.db.findOne<any>({\n collection: collectionConfig.slug,\n req,\n where: whereConstraint,\n })\n\n if (!user || (args.collection.config.auth.verify && user._verified === false)) {\n throw new AuthenticationError(req.t, Boolean(canLoginWithUsername && sanitizedUsername))\n }\n\n user.collection = collectionConfig.slug\n\n if (isLocked(new Date(user.lockUntil).getTime())) {\n throw new LockedAuth(req.t)\n }\n\n const authResult = await authenticateLocalStrategy({ doc: user, password })\n\n user = sanitizeInternalFields(user)\n\n const maxLoginAttemptsEnabled = args.collection.config.auth.maxLoginAttempts > 0\n\n if (!authResult) {\n if (maxLoginAttemptsEnabled) {\n await incrementLoginAttempts({\n collection: collectionConfig,\n doc: user,\n payload: req.payload,\n req,\n })\n }\n\n throw new AuthenticationError(req.t)\n }\n\n if (maxLoginAttemptsEnabled) {\n await resetLoginAttempts({\n collection: collectionConfig,\n doc: user,\n payload: req.payload,\n req,\n })\n }\n\n const fieldsToSign = getFieldsToSign({\n collectionConfig,\n email: sanitizedEmail,\n user,\n })\n\n // /////////////////////////////////////\n // beforeLogin - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeLogin.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: args.req.context,\n req: args.req,\n user,\n })) || user\n }, Promise.resolve())\n\n const { exp, token } = await jwtSign({\n fieldsToSign,\n secret,\n tokenExpiration: collectionConfig.auth.tokenExpiration,\n })\n\n req.user = user\n\n // /////////////////////////////////////\n // afterLogin - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterLogin.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: args.req.context,\n req: args.req,\n token,\n user,\n })) || user\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n user = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: user,\n draft: undefined,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n req,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: req.context,\n doc: user,\n req,\n })) || user\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: req.context,\n doc: user,\n req,\n })) || user\n }, Promise.resolve())\n\n let result: { user: DataFromCollectionSlug<TSlug> } & Result = {\n exp,\n token,\n user,\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: args.collection?.config,\n operation: 'login',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["buildAfterOperation","AuthenticationError","LockedAuth","ValidationError","afterRead","killTransaction","sanitizeInternalFields","getFieldsToSign","isLocked","jwtSign","authenticateLocalStrategy","incrementLoginAttempts","resetLoginAttempts","loginOperation","incomingArgs","args","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","req","operation","Promise","resolve","collectionConfig","data","depth","overrideAccess","fallbackLocale","locale","payload","secret","showHiddenFields","user","email","unsanitizedEmail","password","loginWithUsername","auth","sanitizedEmail","toLowerCase","trim","sanitizedUsername","username","canLoginWithUsername","Boolean","canLoginWithEmail","allowEmailLogin","slug","errors","message","i18n","t","path","whereConstraint","emailConstraint","equals","usernameConstraint","or","db","findOne","where","verify","_verified","Date","lockUntil","getTime","authResult","doc","maxLoginAttemptsEnabled","maxLoginAttempts","fieldsToSign","beforeLogin","exp","token","tokenExpiration","afterLogin","draft","undefined","global","result","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/auth/operations/login.ts"],"sourcesContent":["import type {\n AuthOperationsFromCollectionSlug,\n Collection,\n DataFromCollectionSlug,\n} from '../../collections/config/types.js'\nimport type { CollectionSlug } from '../../index.js'\nimport type { PayloadRequest, Where } from '../../types/index.js'\nimport type { User } from '../types.js'\n\nimport { buildAfterOperation } from '../../collections/operations/utils.js'\nimport { AuthenticationError, LockedAuth, ValidationError } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport sanitizeInternalFields from '../../utilities/sanitizeInternalFields.js'\nimport { getFieldsToSign } from '../getFieldsToSign.js'\nimport { getLoginOptions } from '../getLoginOptions.js'\nimport isLocked from '../isLocked.js'\nimport { jwtSign } from '../jwt.js'\nimport { authenticateLocalStrategy } from '../strategies/local/authenticate.js'\nimport { incrementLoginAttempts } from '../strategies/local/incrementLoginAttempts.js'\nimport { resetLoginAttempts } from '../strategies/local/resetLoginAttempts.js'\n\nexport type Result = {\n exp?: number\n token?: string\n user?: User\n}\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n collection: Collection\n data: AuthOperationsFromCollectionSlug<TSlug>['login']\n depth?: number\n overrideAccess?: boolean\n req: PayloadRequest\n showHiddenFields?: boolean\n}\n\nexport const loginOperation = async <TSlug extends CollectionSlug>(\n incomingArgs: Arguments<TSlug>,\n): Promise<{ user: DataFromCollectionSlug<TSlug> } & Result> => {\n let args = incomingArgs\n\n try {\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n await args.collection.config.hooks.beforeOperation.reduce(async (priorHook, hook) => {\n await priorHook\n\n args =\n (await hook({\n args,\n collection: args.collection?.config,\n context: args.req.context,\n operation: 'login',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n const {\n collection: { config: collectionConfig },\n data,\n depth,\n overrideAccess,\n req,\n req: {\n fallbackLocale,\n locale,\n payload,\n payload: { secret },\n },\n showHiddenFields,\n } = args\n\n // /////////////////////////////////////\n // Login\n // /////////////////////////////////////\n\n let user\n const { email: unsanitizedEmail, password } = data\n const loginWithUsername = collectionConfig.auth.loginWithUsername\n\n const sanitizedEmail =\n typeof unsanitizedEmail === 'string' ? unsanitizedEmail.toLowerCase().trim() : null\n const sanitizedUsername =\n 'username' in data && typeof data?.username === 'string'\n ? data.username.toLowerCase().trim()\n : null\n\n const { canLoginWithEmail, canLoginWithUsername } = getLoginOptions(loginWithUsername)\n\n // cannot login with email, did not provide username\n if (!canLoginWithEmail && !sanitizedUsername) {\n throw new ValidationError({\n collection: collectionConfig.slug,\n errors: [{ message: req.i18n.t('validation:required'), path: 'username' }],\n })\n }\n\n // cannot login with username, did not provide email\n if (!canLoginWithUsername && !sanitizedEmail) {\n throw new ValidationError({\n collection: collectionConfig.slug,\n errors: [{ message: req.i18n.t('validation:required'), path: 'email' }],\n })\n }\n\n // can login with either email or username, did not provide either\n if (!sanitizedUsername && !sanitizedEmail) {\n throw new ValidationError({\n collection: collectionConfig.slug,\n errors: [\n { message: req.i18n.t('validation:required'), path: 'email' },\n { message: req.i18n.t('validation:required'), path: 'username' },\n ],\n })\n }\n\n // did not provide password for login\n if (typeof password !== 'string' || password.trim() === '') {\n throw new ValidationError({\n collection: collectionConfig.slug,\n errors: [{ message: req.i18n.t('validation:required'), path: 'password' }],\n })\n }\n\n let whereConstraint: Where = {}\n const emailConstraint: Where = {\n email: {\n equals: sanitizedEmail,\n },\n }\n const usernameConstraint: Where = {\n username: {\n equals: sanitizedUsername,\n },\n }\n\n if (canLoginWithEmail && canLoginWithUsername && (sanitizedUsername || sanitizedEmail)) {\n if (sanitizedUsername) {\n whereConstraint = {\n or: [\n usernameConstraint,\n {\n email: {\n equals: sanitizedUsername,\n },\n },\n ],\n }\n } else {\n whereConstraint = {\n or: [\n emailConstraint,\n {\n username: {\n equals: sanitizedEmail,\n },\n },\n ],\n }\n }\n } else if (canLoginWithEmail && sanitizedEmail) {\n whereConstraint = emailConstraint\n } else if (canLoginWithUsername && sanitizedUsername) {\n whereConstraint = usernameConstraint\n }\n\n user = await payload.db.findOne<any>({\n collection: collectionConfig.slug,\n req,\n where: whereConstraint,\n })\n\n if (!user || (args.collection.config.auth.verify && user._verified === false)) {\n throw new AuthenticationError(req.t, Boolean(canLoginWithUsername && sanitizedUsername))\n }\n\n user.collection = collectionConfig.slug\n\n if (isLocked(new Date(user.lockUntil).getTime())) {\n throw new LockedAuth(req.t)\n }\n\n const authResult = await authenticateLocalStrategy({ doc: user, password })\n\n user = sanitizeInternalFields(user)\n\n const maxLoginAttemptsEnabled = args.collection.config.auth.maxLoginAttempts > 0\n\n if (!authResult) {\n if (maxLoginAttemptsEnabled) {\n await incrementLoginAttempts({\n collection: collectionConfig,\n doc: user,\n payload: req.payload,\n req,\n })\n }\n\n throw new AuthenticationError(req.t)\n }\n\n if (maxLoginAttemptsEnabled) {\n await resetLoginAttempts({\n collection: collectionConfig,\n doc: user,\n payload: req.payload,\n req,\n })\n }\n\n const fieldsToSign = getFieldsToSign({\n collectionConfig,\n email: sanitizedEmail,\n user,\n })\n\n // /////////////////////////////////////\n // beforeLogin - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeLogin.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: args.req.context,\n req: args.req,\n user,\n })) || user\n }, Promise.resolve())\n\n const { exp, token } = await jwtSign({\n fieldsToSign,\n secret,\n tokenExpiration: collectionConfig.auth.tokenExpiration,\n })\n\n req.user = user\n\n // /////////////////////////////////////\n // afterLogin - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterLogin.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: args.req.context,\n req: args.req,\n token,\n user,\n })) || user\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n user = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: user,\n draft: undefined,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n req,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: req.context,\n doc: user,\n req,\n })) || user\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: req.context,\n doc: user,\n req,\n })) || user\n }, Promise.resolve())\n\n let result: { user: DataFromCollectionSlug<TSlug> } & Result = {\n exp,\n token,\n user,\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: args.collection?.config,\n operation: 'login',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["buildAfterOperation","AuthenticationError","LockedAuth","ValidationError","afterRead","killTransaction","sanitizeInternalFields","getFieldsToSign","getLoginOptions","isLocked","jwtSign","authenticateLocalStrategy","incrementLoginAttempts","resetLoginAttempts","loginOperation","incomingArgs","args","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","req","operation","Promise","resolve","collectionConfig","data","depth","overrideAccess","fallbackLocale","locale","payload","secret","showHiddenFields","user","email","unsanitizedEmail","password","loginWithUsername","auth","sanitizedEmail","toLowerCase","trim","sanitizedUsername","username","canLoginWithEmail","canLoginWithUsername","slug","errors","message","i18n","t","path","whereConstraint","emailConstraint","equals","usernameConstraint","or","db","findOne","where","verify","_verified","Boolean","Date","lockUntil","getTime","authResult","doc","maxLoginAttemptsEnabled","maxLoginAttempts","fieldsToSign","beforeLogin","exp","token","tokenExpiration","afterLogin","draft","undefined","global","result","error"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unlock.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/unlock.ts"],"names":[],"mappings":"AAEA,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;
|
|
1
|
+
{"version":3,"file":"unlock.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/unlock.ts"],"names":[],"mappings":"AAEA,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;AAUjE,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,gCAAgC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAA;IACvD,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,eAAe,GAAU,KAAK,SAAS,cAAc,QAC1D,SAAS,CAAC,KAAK,CAAC,KACrB,OAAO,CAAC,OAAO,CAwFjB,CAAA"}
|
|
@@ -4,12 +4,12 @@ import { commitTransaction } from '../../utilities/commitTransaction.js';
|
|
|
4
4
|
import { initTransaction } from '../../utilities/initTransaction.js';
|
|
5
5
|
import { killTransaction } from '../../utilities/killTransaction.js';
|
|
6
6
|
import executeAccess from '../executeAccess.js';
|
|
7
|
+
import { getLoginOptions } from '../getLoginOptions.js';
|
|
7
8
|
import { resetLoginAttempts } from '../strategies/local/resetLoginAttempts.js';
|
|
8
9
|
export const unlockOperation = async (args)=>{
|
|
9
10
|
const { collection: { config: collectionConfig }, overrideAccess, req: { locale }, req } = args;
|
|
10
11
|
const loginWithUsername = collectionConfig.auth.loginWithUsername;
|
|
11
|
-
const canLoginWithUsername =
|
|
12
|
-
const canLoginWithEmail = !loginWithUsername || loginWithUsername.allowEmailLogin;
|
|
12
|
+
const { canLoginWithEmail, canLoginWithUsername } = getLoginOptions(loginWithUsername);
|
|
13
13
|
const sanitizedEmail = canLoginWithEmail && (args.data?.email || '').toLowerCase().trim();
|
|
14
14
|
const sanitizedUsername = canLoginWithUsername && 'username' in args.data && typeof args.data.username === 'string' && args.data.username.toLowerCase().trim() || null;
|
|
15
15
|
if (!sanitizedEmail && !sanitizedUsername) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/auth/operations/unlock.ts"],"sourcesContent":["import httpStatus from 'http-status'\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 { APIError } from '../../errors/index.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport executeAccess from '../executeAccess.js'\nimport { resetLoginAttempts } from '../strategies/local/resetLoginAttempts.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n collection: Collection\n data: AuthOperationsFromCollectionSlug<TSlug>['unlock']\n overrideAccess?: boolean\n req: PayloadRequest\n}\n\nexport const unlockOperation = async <TSlug extends CollectionSlug>(\n args: Arguments<TSlug>,\n): Promise<boolean> => {\n const {\n collection: { config: collectionConfig },\n overrideAccess,\n req: { locale },\n req,\n } = args\n\n const loginWithUsername = collectionConfig.auth.loginWithUsername\n
|
|
1
|
+
{"version":3,"sources":["../../../src/auth/operations/unlock.ts"],"sourcesContent":["import httpStatus from 'http-status'\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 { APIError } from '../../errors/index.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport executeAccess from '../executeAccess.js'\nimport { getLoginOptions } from '../getLoginOptions.js'\nimport { resetLoginAttempts } from '../strategies/local/resetLoginAttempts.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n collection: Collection\n data: AuthOperationsFromCollectionSlug<TSlug>['unlock']\n overrideAccess?: boolean\n req: PayloadRequest\n}\n\nexport const unlockOperation = async <TSlug extends CollectionSlug>(\n args: Arguments<TSlug>,\n): Promise<boolean> => {\n const {\n collection: { config: collectionConfig },\n overrideAccess,\n req: { locale },\n req,\n } = args\n\n const loginWithUsername = collectionConfig.auth.loginWithUsername\n\n const { canLoginWithEmail, canLoginWithUsername } = getLoginOptions(loginWithUsername)\n\n const sanitizedEmail = canLoginWithEmail && (args.data?.email || '').toLowerCase().trim()\n const sanitizedUsername =\n (canLoginWithUsername &&\n 'username' in args.data &&\n typeof args.data.username === 'string' &&\n args.data.username.toLowerCase().trim()) ||\n null\n\n if (!sanitizedEmail && !sanitizedUsername) {\n throw new APIError(\n `Missing ${collectionConfig.auth.loginWithUsername ? 'username' : 'email'}.`,\n httpStatus.BAD_REQUEST,\n )\n }\n\n try {\n const shouldCommit = await initTransaction(req)\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n if (!overrideAccess) {\n await executeAccess({ req }, collectionConfig.access.unlock)\n }\n\n // /////////////////////////////////////\n // Unlock\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 const user = await req.payload.db.findOne({\n collection: collectionConfig.slug,\n locale,\n req,\n where: whereConstraint,\n })\n\n let result\n\n if (user) {\n await resetLoginAttempts({\n collection: collectionConfig,\n doc: user,\n payload: req.payload,\n req,\n })\n result = true\n } else {\n result = null\n }\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(req)\n throw error\n }\n}\n"],"names":["httpStatus","APIError","commitTransaction","initTransaction","killTransaction","executeAccess","getLoginOptions","resetLoginAttempts","unlockOperation","args","collection","config","collectionConfig","overrideAccess","req","locale","loginWithUsername","auth","canLoginWithEmail","canLoginWithUsername","sanitizedEmail","data","email","toLowerCase","trim","sanitizedUsername","username","BAD_REQUEST","shouldCommit","access","unlock","whereConstraint","equals","user","payload","db","findOne","slug","where","result","doc","error"],"mappings":"AAAA,OAAOA,gBAAgB,cAAa;AASpC,SAASC,QAAQ,QAAQ,wBAAuB;AAChD,SAASC,iBAAiB,QAAQ,uCAAsC;AACxE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,OAAOC,mBAAmB,sBAAqB;AAC/C,SAASC,eAAe,QAAQ,wBAAuB;AACvD,SAASC,kBAAkB,QAAQ,4CAA2C;AAS9E,OAAO,MAAMC,kBAAkB,OAC7BC;IAEA,MAAM,EACJC,YAAY,EAAEC,QAAQC,gBAAgB,EAAE,EACxCC,cAAc,EACdC,KAAK,EAAEC,MAAM,EAAE,EACfD,GAAG,EACJ,GAAGL;IAEJ,MAAMO,oBAAoBJ,iBAAiBK,IAAI,CAACD,iBAAiB;IAEjE,MAAM,EAAEE,iBAAiB,EAAEC,oBAAoB,EAAE,GAAGb,gBAAgBU;IAEpE,MAAMI,iBAAiBF,qBAAqB,AAACT,CAAAA,KAAKY,IAAI,EAAEC,SAAS,EAAC,EAAGC,WAAW,GAAGC,IAAI;IACvF,MAAMC,oBACJ,AAACN,wBACC,cAAcV,KAAKY,IAAI,IACvB,OAAOZ,KAAKY,IAAI,CAACK,QAAQ,KAAK,YAC9BjB,KAAKY,IAAI,CAACK,QAAQ,CAACH,WAAW,GAAGC,IAAI,MACvC;IAEF,IAAI,CAACJ,kBAAkB,CAACK,mBAAmB;QACzC,MAAM,IAAIxB,SACR,CAAC,QAAQ,EAAEW,iBAAiBK,IAAI,CAACD,iBAAiB,GAAG,aAAa,QAAQ,CAAC,CAAC,EAC5EhB,WAAW2B,WAAW;IAE1B;IAEA,IAAI;QACF,MAAMC,eAAe,MAAMzB,gBAAgBW;QAE3C,wCAAwC;QACxC,SAAS;QACT,wCAAwC;QAExC,IAAI,CAACD,gBAAgB;YACnB,MAAMR,cAAc;gBAAES;YAAI,GAAGF,iBAAiBiB,MAAM,CAACC,MAAM;QAC7D;QAEA,wCAAwC;QACxC,SAAS;QACT,wCAAwC;QAExC,IAAIC,kBAAyB,CAAC;QAE9B,IAAIb,qBAAqBE,gBAAgB;YACvCW,kBAAkB;gBAChBT,OAAO;oBACLU,QAAQZ;gBACV;YACF;QACF,OAAO,IAAID,wBAAwBM,mBAAmB;YACpDM,kBAAkB;gBAChBL,UAAU;oBACRM,QAAQP;gBACV;YACF;QACF;QAEA,MAAMQ,OAAO,MAAMnB,IAAIoB,OAAO,CAACC,EAAE,CAACC,OAAO,CAAC;YACxC1B,YAAYE,iBAAiByB,IAAI;YACjCtB;YACAD;YACAwB,OAAOP;QACT;QAEA,IAAIQ;QAEJ,IAAIN,MAAM;YACR,MAAM1B,mBAAmB;gBACvBG,YAAYE;gBACZ4B,KAAKP;gBACLC,SAASpB,IAAIoB,OAAO;gBACpBpB;YACF;YACAyB,SAAS;QACX,OAAO;YACLA,SAAS;QACX;QAEA,IAAIX,cAAc;YAChB,MAAM1B,kBAAkBY;QAC1B;QAEA,OAAOyB;IACT,EAAE,OAAOE,OAAgB;QACvB,MAAMrC,gBAAgBU;QACtB,MAAM2B;IACR;AACF,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,UAAU,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAS,MAAM,yBAAyB,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,UAAU,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAS,MAAM,yBAAyB,CAAA;AAMhF,KAAK,IAAI,GAAG;IACV,UAAU,EAAE,yBAAyB,CAAA;IACrC,GAAG,EAAE,UAAU,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,qBAAqB,yDAO/B,IAAI,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2ExC,CAAA"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { ValidationError } from '../../../errors/index.js';
|
|
2
|
+
import { getLoginOptions } from '../../getLoginOptions.js';
|
|
2
3
|
import { generatePasswordSaltHash } from './generatePasswordSaltHash.js';
|
|
3
4
|
export const registerLocalStrategy = async ({ collection, doc, password, payload, req, select })=>{
|
|
4
5
|
const loginWithUsername = collection?.auth?.loginWithUsername;
|
|
6
|
+
const { canLoginWithEmail, canLoginWithUsername } = getLoginOptions(loginWithUsername);
|
|
5
7
|
let whereConstraint;
|
|
6
|
-
if (!
|
|
8
|
+
if (!canLoginWithUsername) {
|
|
7
9
|
whereConstraint = {
|
|
8
10
|
email: {
|
|
9
11
|
equals: doc.email
|
|
@@ -13,7 +15,7 @@ export const registerLocalStrategy = async ({ collection, doc, password, payload
|
|
|
13
15
|
whereConstraint = {
|
|
14
16
|
or: []
|
|
15
17
|
};
|
|
16
|
-
if (doc.email) {
|
|
18
|
+
if (canLoginWithEmail && doc.email) {
|
|
17
19
|
whereConstraint.or?.push({
|
|
18
20
|
email: {
|
|
19
21
|
equals: doc.email
|
|
@@ -40,7 +42,7 @@ export const registerLocalStrategy = async ({ collection, doc, password, payload
|
|
|
40
42
|
throw new ValidationError({
|
|
41
43
|
collection: collection.slug,
|
|
42
44
|
errors: [
|
|
43
|
-
|
|
45
|
+
canLoginWithUsername ? {
|
|
44
46
|
message: req.t('error:usernameAlreadyRegistered'),
|
|
45
47
|
path: 'username'
|
|
46
48
|
} : {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/auth/strategies/local/register.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { JsonObject, Payload } from '../../../index.js'\nimport type { PayloadRequest, SelectType, Where } from '../../../types/index.js'\n\nimport { ValidationError } from '../../../errors/index.js'\nimport { generatePasswordSaltHash } from './generatePasswordSaltHash.js'\n\ntype Args = {\n collection: SanitizedCollectionConfig\n doc: JsonObject\n password: string\n payload: Payload\n req: PayloadRequest\n select?: SelectType\n}\n\nexport const registerLocalStrategy = async ({\n collection,\n doc,\n password,\n payload,\n req,\n select,\n}: Args): Promise<Record<string, unknown>> => {\n const loginWithUsername = collection?.auth?.loginWithUsername\n\n let whereConstraint: Where\n\n if (!
|
|
1
|
+
{"version":3,"sources":["../../../../src/auth/strategies/local/register.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { JsonObject, Payload } from '../../../index.js'\nimport type { PayloadRequest, SelectType, Where } from '../../../types/index.js'\n\nimport { ValidationError } from '../../../errors/index.js'\nimport { getLoginOptions } from '../../getLoginOptions.js'\nimport { generatePasswordSaltHash } from './generatePasswordSaltHash.js'\n\ntype Args = {\n collection: SanitizedCollectionConfig\n doc: JsonObject\n password: string\n payload: Payload\n req: PayloadRequest\n select?: SelectType\n}\n\nexport const registerLocalStrategy = async ({\n collection,\n doc,\n password,\n payload,\n req,\n select,\n}: Args): Promise<Record<string, unknown>> => {\n const loginWithUsername = collection?.auth?.loginWithUsername\n\n const { canLoginWithEmail, canLoginWithUsername } = getLoginOptions(loginWithUsername)\n\n let whereConstraint: Where\n\n if (!canLoginWithUsername) {\n whereConstraint = {\n email: {\n equals: doc.email,\n },\n }\n } else {\n whereConstraint = {\n or: [],\n }\n\n if (canLoginWithEmail && doc.email) {\n whereConstraint.or?.push({\n email: {\n equals: doc.email,\n },\n })\n }\n\n if (doc.username) {\n whereConstraint.or?.push({\n username: {\n equals: doc.username,\n },\n })\n }\n }\n\n const existingUser = await payload.find({\n collection: collection.slug,\n depth: 0,\n limit: 1,\n pagination: false,\n req,\n where: whereConstraint,\n })\n\n if (existingUser.docs.length > 0) {\n throw new ValidationError({\n collection: collection.slug,\n errors: [\n canLoginWithUsername\n ? {\n message: req.t('error:usernameAlreadyRegistered'),\n path: 'username',\n }\n : { message: req.t('error:userEmailAlreadyRegistered'), path: 'email' },\n ],\n })\n }\n\n const { hash, salt } = await generatePasswordSaltHash({ collection, password, req })\n\n const sanitizedDoc = { ...doc }\n if (sanitizedDoc.password) {\n delete sanitizedDoc.password\n }\n\n return payload.db.create({\n collection: collection.slug,\n data: {\n ...sanitizedDoc,\n hash,\n salt,\n },\n req,\n select,\n })\n}\n"],"names":["ValidationError","getLoginOptions","generatePasswordSaltHash","registerLocalStrategy","collection","doc","password","payload","req","select","loginWithUsername","auth","canLoginWithEmail","canLoginWithUsername","whereConstraint","email","equals","or","push","username","existingUser","find","slug","depth","limit","pagination","where","docs","length","errors","message","t","path","hash","salt","sanitizedDoc","db","create","data"],"mappings":"AAIA,SAASA,eAAe,QAAQ,2BAA0B;AAC1D,SAASC,eAAe,QAAQ,2BAA0B;AAC1D,SAASC,wBAAwB,QAAQ,gCAA+B;AAWxE,OAAO,MAAMC,wBAAwB,OAAO,EAC1CC,UAAU,EACVC,GAAG,EACHC,QAAQ,EACRC,OAAO,EACPC,GAAG,EACHC,MAAM,EACD;IACL,MAAMC,oBAAoBN,YAAYO,MAAMD;IAE5C,MAAM,EAAEE,iBAAiB,EAAEC,oBAAoB,EAAE,GAAGZ,gBAAgBS;IAEpE,IAAII;IAEJ,IAAI,CAACD,sBAAsB;QACzBC,kBAAkB;YAChBC,OAAO;gBACLC,QAAQX,IAAIU,KAAK;YACnB;QACF;IACF,OAAO;QACLD,kBAAkB;YAChBG,IAAI,EAAE;QACR;QAEA,IAAIL,qBAAqBP,IAAIU,KAAK,EAAE;YAClCD,gBAAgBG,EAAE,EAAEC,KAAK;gBACvBH,OAAO;oBACLC,QAAQX,IAAIU,KAAK;gBACnB;YACF;QACF;QAEA,IAAIV,IAAIc,QAAQ,EAAE;YAChBL,gBAAgBG,EAAE,EAAEC,KAAK;gBACvBC,UAAU;oBACRH,QAAQX,IAAIc,QAAQ;gBACtB;YACF;QACF;IACF;IAEA,MAAMC,eAAe,MAAMb,QAAQc,IAAI,CAAC;QACtCjB,YAAYA,WAAWkB,IAAI;QAC3BC,OAAO;QACPC,OAAO;QACPC,YAAY;QACZjB;QACAkB,OAAOZ;IACT;IAEA,IAAIM,aAAaO,IAAI,CAACC,MAAM,GAAG,GAAG;QAChC,MAAM,IAAI5B,gBAAgB;YACxBI,YAAYA,WAAWkB,IAAI;YAC3BO,QAAQ;gBACNhB,uBACI;oBACEiB,SAAStB,IAAIuB,CAAC,CAAC;oBACfC,MAAM;gBACR,IACA;oBAAEF,SAAStB,IAAIuB,CAAC,CAAC;oBAAqCC,MAAM;gBAAQ;aACzE;QACH;IACF;IAEA,MAAM,EAAEC,IAAI,EAAEC,IAAI,EAAE,GAAG,MAAMhC,yBAAyB;QAAEE;QAAYE;QAAUE;IAAI;IAElF,MAAM2B,eAAe;QAAE,GAAG9B,GAAG;IAAC;IAC9B,IAAI8B,aAAa7B,QAAQ,EAAE;QACzB,OAAO6B,aAAa7B,QAAQ;IAC9B;IAEA,OAAOC,QAAQ6B,EAAE,CAACC,MAAM,CAAC;QACvBjC,YAAYA,WAAWkB,IAAI;QAC3BgB,MAAM;YACJ,GAAGH,YAAY;YACfF;YACAC;QACF;QACA1B;QACAC;IACF;AACF,EAAC"}
|
|
@@ -72,7 +72,7 @@ export const findOperation = async (incomingArgs)=>{
|
|
|
72
72
|
overrideAccess,
|
|
73
73
|
req,
|
|
74
74
|
versionFields: buildVersionCollectionFields(payload.config, collection.config, true),
|
|
75
|
-
where:
|
|
75
|
+
where: appendVersionToQueryKey(where)
|
|
76
76
|
});
|
|
77
77
|
result = await payload.db.queryDrafts({
|
|
78
78
|
collection: collectionConfig.slug,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collections/operations/find.ts"],"sourcesContent":["import type { AccessResult } from '../../config/types.js'\nimport type { PaginatedDocs } from '../../database/types.js'\nimport type { CollectionSlug, JoinQuery } from '../../index.js'\nimport type {\n PayloadRequest,\n PopulateType,\n SelectType,\n Sort,\n TransformCollectionWithSelect,\n Where,\n} from '../../types/index.js'\nimport type {\n Collection,\n DataFromCollectionSlug,\n SelectFromCollectionSlug,\n} from '../config/types.js'\n\nimport executeAccess from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { validateQueryPaths } from '../../database/queryValidation/validateQueryPaths.js'\nimport { sanitizeJoinQuery } from '../../database/sanitizeJoinQuery.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js'\nimport { appendVersionToQueryKey } from '../../versions/drafts/appendVersionToQueryKey.js'\nimport { getQueryDraftsSelect } from '../../versions/drafts/getQueryDraftsSelect.js'\nimport { getQueryDraftsSort } from '../../versions/drafts/getQueryDraftsSort.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments = {\n collection: Collection\n currentDepth?: number\n depth?: number\n disableErrors?: boolean\n draft?: boolean\n includeLockStatus?: boolean\n joins?: JoinQuery\n limit?: number\n overrideAccess?: boolean\n page?: number\n pagination?: boolean\n populate?: PopulateType\n req?: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n sort?: Sort\n where?: Where\n}\n\nexport const findOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: Arguments,\n): Promise<PaginatedDocs<TransformCollectionWithSelect<TSlug, TSelect>>> => {\n let args = incomingArgs\n\n try {\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: 'read',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n const {\n collection: { config: collectionConfig },\n collection,\n currentDepth,\n depth,\n disableErrors,\n draft: draftsEnabled,\n includeLockStatus,\n joins,\n limit,\n overrideAccess,\n page,\n pagination = true,\n populate,\n req: { fallbackLocale, locale, payload },\n req,\n select,\n showHiddenFields,\n sort,\n where,\n } = args\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n let accessResult: AccessResult\n\n if (!overrideAccess) {\n accessResult = await executeAccess({ disableErrors, req }, collectionConfig.access.read)\n\n // If errors are disabled, and access returns false, return empty results\n if (accessResult === false) {\n return {\n docs: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit,\n nextPage: null,\n page: 1,\n pagingCounter: 1,\n prevPage: null,\n totalDocs: 0,\n totalPages: 1,\n }\n }\n }\n\n // /////////////////////////////////////\n // Find\n // /////////////////////////////////////\n\n const usePagination = pagination && limit !== 0\n const sanitizedLimit = limit ?? (usePagination ? 10 : 0)\n const sanitizedPage = page || 1\n\n let result: PaginatedDocs<DataFromCollectionSlug<TSlug>>\n\n let fullWhere = combineQueries(where, accessResult)\n\n const sanitizedJoins = await sanitizeJoinQuery({\n collectionConfig,\n joins,\n overrideAccess,\n req,\n })\n\n if (collectionConfig.versions?.drafts && draftsEnabled) {\n fullWhere = appendVersionToQueryKey(fullWhere)\n\n await validateQueryPaths({\n collectionConfig: collection.config,\n overrideAccess,\n req,\n versionFields: buildVersionCollectionFields(payload.config, collection.config, true),\n where: fullWhere,\n })\n\n result = await payload.db.queryDrafts<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,\n limit: sanitizedLimit,\n locale,\n page: sanitizedPage,\n pagination: usePagination,\n req,\n select: getQueryDraftsSelect({ select }),\n sort: getQueryDraftsSort({ collectionConfig, sort }),\n where: fullWhere,\n })\n } else {\n await validateQueryPaths({\n collectionConfig,\n overrideAccess,\n req,\n where,\n })\n\n result = await payload.db.find<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,\n limit: sanitizedLimit,\n locale,\n page: sanitizedPage,\n pagination,\n req,\n select,\n sort,\n where: fullWhere,\n })\n }\n\n if (includeLockStatus) {\n try {\n const lockDocumentsProp = collectionConfig?.lockDocuments\n\n const lockDurationDefault = 300 // Default 5 minutes in seconds\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n\n const lockedDocuments = await payload.find({\n collection: 'payload-locked-documents',\n depth: 1,\n limit: sanitizedLimit,\n overrideAccess: false,\n pagination: false,\n req,\n where: {\n and: [\n {\n 'document.relationTo': {\n equals: collectionConfig.slug,\n },\n },\n {\n 'document.value': {\n in: result.docs.map((doc) => doc.id),\n },\n },\n // Query where the lock is newer than the current time minus lock time\n {\n updatedAt: {\n greater_than: new Date(new Date().getTime() - lockDurationInMilliseconds),\n },\n },\n ],\n },\n })\n\n const now = new Date().getTime()\n const lockedDocs = Array.isArray(lockedDocuments?.docs) ? lockedDocuments.docs : []\n\n // Filter out stale locks\n const validLockedDocs = lockedDocs.filter((lock) => {\n const lastEditedAt = new Date(lock?.updatedAt).getTime()\n return lastEditedAt + lockDurationInMilliseconds > now\n })\n\n result.docs = result.docs.map((doc) => {\n const lockedDoc = validLockedDocs.find((lock) => lock?.document?.value === doc.id)\n return {\n ...doc,\n _isLocked: !!lockedDoc,\n _userEditing: lockedDoc ? lockedDoc?.user?.value : null,\n }\n })\n } catch (error) {\n result.docs = result.docs.map((doc) => ({\n ...doc,\n _isLocked: false,\n _userEditing: null,\n }))\n }\n }\n\n // /////////////////////////////////////\n // beforeRead - Collection\n // /////////////////////////////////////\n\n result = {\n ...result,\n docs: await Promise.all(\n result.docs.map(async (doc) => {\n let docRef = doc\n\n await collectionConfig.hooks.beforeRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n docRef =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: docRef,\n query: fullWhere,\n req,\n })) || docRef\n }, Promise.resolve())\n\n return docRef\n }),\n ),\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = {\n ...result,\n docs: await Promise.all(\n result.docs.map(async (doc) =>\n afterRead<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig,\n context: req.context,\n currentDepth,\n depth,\n doc,\n draft: draftsEnabled,\n fallbackLocale,\n findMany: true,\n global: null,\n locale,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields,\n }),\n ),\n ),\n }\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n result = {\n ...result,\n docs: await Promise.all(\n result.docs.map(async (doc) => {\n let docRef = doc\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n docRef =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: docRef,\n findMany: true,\n query: fullWhere,\n req,\n })) || doc\n }, Promise.resolve())\n\n return docRef\n }),\n ),\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'find',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result as PaginatedDocs<TransformCollectionWithSelect<TSlug, TSelect>>\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["executeAccess","combineQueries","validateQueryPaths","sanitizeJoinQuery","afterRead","killTransaction","buildVersionCollectionFields","appendVersionToQueryKey","getQueryDraftsSelect","getQueryDraftsSort","buildAfterOperation","findOperation","incomingArgs","args","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","req","operation","Promise","resolve","collectionConfig","currentDepth","depth","disableErrors","draft","draftsEnabled","includeLockStatus","joins","limit","overrideAccess","page","pagination","populate","fallbackLocale","locale","payload","select","showHiddenFields","sort","where","accessResult","access","read","docs","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","totalDocs","totalPages","usePagination","sanitizedLimit","sanitizedPage","result","fullWhere","sanitizedJoins","versions","drafts","versionFields","db","queryDrafts","slug","payloadAPI","find","lockDocumentsProp","lockDocuments","lockDurationDefault","lockDuration","duration","lockDurationInMilliseconds","lockedDocuments","and","equals","in","map","doc","id","updatedAt","greater_than","Date","getTime","now","lockedDocs","Array","isArray","validLockedDocs","filter","lock","lastEditedAt","lockedDoc","document","value","_isLocked","_userEditing","user","error","all","docRef","beforeRead","query","findMany","global"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/operations/find.ts"],"sourcesContent":["import type { AccessResult } from '../../config/types.js'\nimport type { PaginatedDocs } from '../../database/types.js'\nimport type { CollectionSlug, JoinQuery } from '../../index.js'\nimport type {\n PayloadRequest,\n PopulateType,\n SelectType,\n Sort,\n TransformCollectionWithSelect,\n Where,\n} from '../../types/index.js'\nimport type {\n Collection,\n DataFromCollectionSlug,\n SelectFromCollectionSlug,\n} from '../config/types.js'\n\nimport executeAccess from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { validateQueryPaths } from '../../database/queryValidation/validateQueryPaths.js'\nimport { sanitizeJoinQuery } from '../../database/sanitizeJoinQuery.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js'\nimport { appendVersionToQueryKey } from '../../versions/drafts/appendVersionToQueryKey.js'\nimport { getQueryDraftsSelect } from '../../versions/drafts/getQueryDraftsSelect.js'\nimport { getQueryDraftsSort } from '../../versions/drafts/getQueryDraftsSort.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments = {\n collection: Collection\n currentDepth?: number\n depth?: number\n disableErrors?: boolean\n draft?: boolean\n includeLockStatus?: boolean\n joins?: JoinQuery\n limit?: number\n overrideAccess?: boolean\n page?: number\n pagination?: boolean\n populate?: PopulateType\n req?: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n sort?: Sort\n where?: Where\n}\n\nexport const findOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: Arguments,\n): Promise<PaginatedDocs<TransformCollectionWithSelect<TSlug, TSelect>>> => {\n let args = incomingArgs\n\n try {\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: 'read',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n const {\n collection: { config: collectionConfig },\n collection,\n currentDepth,\n depth,\n disableErrors,\n draft: draftsEnabled,\n includeLockStatus,\n joins,\n limit,\n overrideAccess,\n page,\n pagination = true,\n populate,\n req: { fallbackLocale, locale, payload },\n req,\n select,\n showHiddenFields,\n sort,\n where,\n } = args\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n let accessResult: AccessResult\n\n if (!overrideAccess) {\n accessResult = await executeAccess({ disableErrors, req }, collectionConfig.access.read)\n\n // If errors are disabled, and access returns false, return empty results\n if (accessResult === false) {\n return {\n docs: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit,\n nextPage: null,\n page: 1,\n pagingCounter: 1,\n prevPage: null,\n totalDocs: 0,\n totalPages: 1,\n }\n }\n }\n\n // /////////////////////////////////////\n // Find\n // /////////////////////////////////////\n\n const usePagination = pagination && limit !== 0\n const sanitizedLimit = limit ?? (usePagination ? 10 : 0)\n const sanitizedPage = page || 1\n\n let result: PaginatedDocs<DataFromCollectionSlug<TSlug>>\n\n let fullWhere = combineQueries(where, accessResult)\n\n const sanitizedJoins = await sanitizeJoinQuery({\n collectionConfig,\n joins,\n overrideAccess,\n req,\n })\n\n if (collectionConfig.versions?.drafts && draftsEnabled) {\n fullWhere = appendVersionToQueryKey(fullWhere)\n\n await validateQueryPaths({\n collectionConfig: collection.config,\n overrideAccess,\n req,\n versionFields: buildVersionCollectionFields(payload.config, collection.config, true),\n where: appendVersionToQueryKey(where),\n })\n\n result = await payload.db.queryDrafts<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,\n limit: sanitizedLimit,\n locale,\n page: sanitizedPage,\n pagination: usePagination,\n req,\n select: getQueryDraftsSelect({ select }),\n sort: getQueryDraftsSort({ collectionConfig, sort }),\n where: fullWhere,\n })\n } else {\n await validateQueryPaths({\n collectionConfig,\n overrideAccess,\n req,\n where,\n })\n\n result = await payload.db.find<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,\n limit: sanitizedLimit,\n locale,\n page: sanitizedPage,\n pagination,\n req,\n select,\n sort,\n where: fullWhere,\n })\n }\n\n if (includeLockStatus) {\n try {\n const lockDocumentsProp = collectionConfig?.lockDocuments\n\n const lockDurationDefault = 300 // Default 5 minutes in seconds\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n\n const lockedDocuments = await payload.find({\n collection: 'payload-locked-documents',\n depth: 1,\n limit: sanitizedLimit,\n overrideAccess: false,\n pagination: false,\n req,\n where: {\n and: [\n {\n 'document.relationTo': {\n equals: collectionConfig.slug,\n },\n },\n {\n 'document.value': {\n in: result.docs.map((doc) => doc.id),\n },\n },\n // Query where the lock is newer than the current time minus lock time\n {\n updatedAt: {\n greater_than: new Date(new Date().getTime() - lockDurationInMilliseconds),\n },\n },\n ],\n },\n })\n\n const now = new Date().getTime()\n const lockedDocs = Array.isArray(lockedDocuments?.docs) ? lockedDocuments.docs : []\n\n // Filter out stale locks\n const validLockedDocs = lockedDocs.filter((lock) => {\n const lastEditedAt = new Date(lock?.updatedAt).getTime()\n return lastEditedAt + lockDurationInMilliseconds > now\n })\n\n result.docs = result.docs.map((doc) => {\n const lockedDoc = validLockedDocs.find((lock) => lock?.document?.value === doc.id)\n return {\n ...doc,\n _isLocked: !!lockedDoc,\n _userEditing: lockedDoc ? lockedDoc?.user?.value : null,\n }\n })\n } catch (error) {\n result.docs = result.docs.map((doc) => ({\n ...doc,\n _isLocked: false,\n _userEditing: null,\n }))\n }\n }\n\n // /////////////////////////////////////\n // beforeRead - Collection\n // /////////////////////////////////////\n\n result = {\n ...result,\n docs: await Promise.all(\n result.docs.map(async (doc) => {\n let docRef = doc\n\n await collectionConfig.hooks.beforeRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n docRef =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: docRef,\n query: fullWhere,\n req,\n })) || docRef\n }, Promise.resolve())\n\n return docRef\n }),\n ),\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = {\n ...result,\n docs: await Promise.all(\n result.docs.map(async (doc) =>\n afterRead<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig,\n context: req.context,\n currentDepth,\n depth,\n doc,\n draft: draftsEnabled,\n fallbackLocale,\n findMany: true,\n global: null,\n locale,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields,\n }),\n ),\n ),\n }\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n result = {\n ...result,\n docs: await Promise.all(\n result.docs.map(async (doc) => {\n let docRef = doc\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n docRef =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: docRef,\n findMany: true,\n query: fullWhere,\n req,\n })) || doc\n }, Promise.resolve())\n\n return docRef\n }),\n ),\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'find',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result as PaginatedDocs<TransformCollectionWithSelect<TSlug, TSelect>>\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["executeAccess","combineQueries","validateQueryPaths","sanitizeJoinQuery","afterRead","killTransaction","buildVersionCollectionFields","appendVersionToQueryKey","getQueryDraftsSelect","getQueryDraftsSort","buildAfterOperation","findOperation","incomingArgs","args","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","req","operation","Promise","resolve","collectionConfig","currentDepth","depth","disableErrors","draft","draftsEnabled","includeLockStatus","joins","limit","overrideAccess","page","pagination","populate","fallbackLocale","locale","payload","select","showHiddenFields","sort","where","accessResult","access","read","docs","hasNextPage","hasPrevPage","nextPage","pagingCounter","prevPage","totalDocs","totalPages","usePagination","sanitizedLimit","sanitizedPage","result","fullWhere","sanitizedJoins","versions","drafts","versionFields","db","queryDrafts","slug","payloadAPI","find","lockDocumentsProp","lockDocuments","lockDurationDefault","lockDuration","duration","lockDurationInMilliseconds","lockedDocuments","and","equals","in","map","doc","id","updatedAt","greater_than","Date","getTime","now","lockedDocs","Array","isArray","validLockedDocs","filter","lock","lastEditedAt","lockedDoc","document","value","_isLocked","_userEditing","user","error","all","docRef","beforeRead","query","findMany","global"],"mappings":"AAiBA,OAAOA,mBAAmB,8BAA6B;AACvD,SAASC,cAAc,QAAQ,mCAAkC;AACjE,SAASC,kBAAkB,QAAQ,uDAAsD;AACzF,SAASC,iBAAiB,QAAQ,sCAAqC;AACvE,SAASC,SAAS,QAAQ,wCAAuC;AACjE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,4BAA4B,QAAQ,0CAAyC;AACtF,SAASC,uBAAuB,QAAQ,mDAAkD;AAC1F,SAASC,oBAAoB,QAAQ,gDAA+C;AACpF,SAASC,kBAAkB,QAAQ,8CAA6C;AAChF,SAASC,mBAAmB,QAAQ,aAAY;AAsBhD,OAAO,MAAMC,gBAAgB,OAI3BC;IAEA,IAAIC,OAAOD;IAEX,IAAI;QACF,wCAAwC;QACxC,+BAA+B;QAC/B,wCAAwC;QAExC,MAAMC,KAAKC,UAAU,CAACC,MAAM,CAACC,KAAK,CAACC,eAAe,CAACC,MAAM,CAAC,OAAOC,WAAWC;YAC1E,MAAMD;YAENN,OACE,AAAC,MAAMO,KAAK;gBACVP;gBACAC,YAAYD,KAAKC,UAAU,CAACC,MAAM;gBAClCM,SAASR,KAAKS,GAAG,CAACD,OAAO;gBACzBE,WAAW;gBACXD,KAAKT,KAAKS,GAAG;YACf,MAAOT;QACX,GAAGW,QAAQC,OAAO;QAElB,MAAM,EACJX,YAAY,EAAEC,QAAQW,gBAAgB,EAAE,EACxCZ,UAAU,EACVa,YAAY,EACZC,KAAK,EACLC,aAAa,EACbC,OAAOC,aAAa,EACpBC,iBAAiB,EACjBC,KAAK,EACLC,KAAK,EACLC,cAAc,EACdC,IAAI,EACJC,aAAa,IAAI,EACjBC,QAAQ,EACRhB,KAAK,EAAEiB,cAAc,EAAEC,MAAM,EAAEC,OAAO,EAAE,EACxCnB,GAAG,EACHoB,MAAM,EACNC,gBAAgB,EAChBC,IAAI,EACJC,KAAK,EACN,GAAGhC;QAEJ,wCAAwC;QACxC,SAAS;QACT,wCAAwC;QAExC,IAAIiC;QAEJ,IAAI,CAACX,gBAAgB;YACnBW,eAAe,MAAM9C,cAAc;gBAAE6B;gBAAeP;YAAI,GAAGI,iBAAiBqB,MAAM,CAACC,IAAI;YAEvF,yEAAyE;YACzE,IAAIF,iBAAiB,OAAO;gBAC1B,OAAO;oBACLG,MAAM,EAAE;oBACRC,aAAa;oBACbC,aAAa;oBACbjB;oBACAkB,UAAU;oBACVhB,MAAM;oBACNiB,eAAe;oBACfC,UAAU;oBACVC,WAAW;oBACXC,YAAY;gBACd;YACF;QACF;QAEA,wCAAwC;QACxC,OAAO;QACP,wCAAwC;QAExC,MAAMC,gBAAgBpB,cAAcH,UAAU;QAC9C,MAAMwB,iBAAiBxB,SAAUuB,CAAAA,gBAAgB,KAAK,CAAA;QACtD,MAAME,gBAAgBvB,QAAQ;QAE9B,IAAIwB;QAEJ,IAAIC,YAAY5D,eAAe4C,OAAOC;QAEtC,MAAMgB,iBAAiB,MAAM3D,kBAAkB;YAC7CuB;YACAO;YACAE;YACAb;QACF;QAEA,IAAII,iBAAiBqC,QAAQ,EAAEC,UAAUjC,eAAe;YACtD8B,YAAYtD,wBAAwBsD;YAEpC,MAAM3D,mBAAmB;gBACvBwB,kBAAkBZ,WAAWC,MAAM;gBACnCoB;gBACAb;gBACA2C,eAAe3D,6BAA6BmC,QAAQ1B,MAAM,EAAED,WAAWC,MAAM,EAAE;gBAC/E8B,OAAOtC,wBAAwBsC;YACjC;YAEAe,SAAS,MAAMnB,QAAQyB,EAAE,CAACC,WAAW,CAAgC;gBACnErD,YAAYY,iBAAiB0C,IAAI;gBACjCnC,OAAOX,IAAI+C,UAAU,KAAK,YAAY,QAAQP;gBAC9C5B,OAAOwB;gBACPlB;gBACAJ,MAAMuB;gBACNtB,YAAYoB;gBACZnC;gBACAoB,QAAQlC,qBAAqB;oBAAEkC;gBAAO;gBACtCE,MAAMnC,mBAAmB;oBAAEiB;oBAAkBkB;gBAAK;gBAClDC,OAAOgB;YACT;QACF,OAAO;YACL,MAAM3D,mBAAmB;gBACvBwB;gBACAS;gBACAb;gBACAuB;YACF;YAEAe,SAAS,MAAMnB,QAAQyB,EAAE,CAACI,IAAI,CAAgC;gBAC5DxD,YAAYY,iBAAiB0C,IAAI;gBACjCnC,OAAOX,IAAI+C,UAAU,KAAK,YAAY,QAAQP;gBAC9C5B,OAAOwB;gBACPlB;gBACAJ,MAAMuB;gBACNtB;gBACAf;gBACAoB;gBACAE;gBACAC,OAAOgB;YACT;QACF;QAEA,IAAI7B,mBAAmB;YACrB,IAAI;gBACF,MAAMuC,oBAAoB7C,kBAAkB8C;gBAE5C,MAAMC,sBAAsB,IAAI,+BAA+B;;gBAC/D,MAAMC,eACJ,OAAOH,sBAAsB,WAAWA,kBAAkBI,QAAQ,GAAGF;gBACvE,MAAMG,6BAA6BF,eAAe;gBAElD,MAAMG,kBAAkB,MAAMpC,QAAQ6B,IAAI,CAAC;oBACzCxD,YAAY;oBACZc,OAAO;oBACPM,OAAOwB;oBACPvB,gBAAgB;oBAChBE,YAAY;oBACZf;oBACAuB,OAAO;wBACLiC,KAAK;4BACH;gCACE,uBAAuB;oCACrBC,QAAQrD,iBAAiB0C,IAAI;gCAC/B;4BACF;4BACA;gCACE,kBAAkB;oCAChBY,IAAIpB,OAAOX,IAAI,CAACgC,GAAG,CAAC,CAACC,MAAQA,IAAIC,EAAE;gCACrC;4BACF;4BACA,sEAAsE;4BACtE;gCACEC,WAAW;oCACTC,cAAc,IAAIC,KAAK,IAAIA,OAAOC,OAAO,KAAKX;gCAChD;4BACF;yBACD;oBACH;gBACF;gBAEA,MAAMY,MAAM,IAAIF,OAAOC,OAAO;gBAC9B,MAAME,aAAaC,MAAMC,OAAO,CAACd,iBAAiB5B,QAAQ4B,gBAAgB5B,IAAI,GAAG,EAAE;gBAEnF,yBAAyB;gBACzB,MAAM2C,kBAAkBH,WAAWI,MAAM,CAAC,CAACC;oBACzC,MAAMC,eAAe,IAAIT,KAAKQ,MAAMV,WAAWG,OAAO;oBACtD,OAAOQ,eAAenB,6BAA6BY;gBACrD;gBAEA5B,OAAOX,IAAI,GAAGW,OAAOX,IAAI,CAACgC,GAAG,CAAC,CAACC;oBAC7B,MAAMc,YAAYJ,gBAAgBtB,IAAI,CAAC,CAACwB,OAASA,MAAMG,UAAUC,UAAUhB,IAAIC,EAAE;oBACjF,OAAO;wBACL,GAAGD,GAAG;wBACNiB,WAAW,CAAC,CAACH;wBACbI,cAAcJ,YAAYA,WAAWK,MAAMH,QAAQ;oBACrD;gBACF;YACF,EAAE,OAAOI,OAAO;gBACd1C,OAAOX,IAAI,GAAGW,OAAOX,IAAI,CAACgC,GAAG,CAAC,CAACC,MAAS,CAAA;wBACtC,GAAGA,GAAG;wBACNiB,WAAW;wBACXC,cAAc;oBAChB,CAAA;YACF;QACF;QAEA,wCAAwC;QACxC,0BAA0B;QAC1B,wCAAwC;QAExCxC,SAAS;YACP,GAAGA,MAAM;YACTX,MAAM,MAAMzB,QAAQ+E,GAAG,CACrB3C,OAAOX,IAAI,CAACgC,GAAG,CAAC,OAAOC;gBACrB,IAAIsB,SAAStB;gBAEb,MAAMxD,iBAAiBV,KAAK,CAACyF,UAAU,CAACvF,MAAM,CAAC,OAAOC,WAAWC;oBAC/D,MAAMD;oBAENqF,SACE,AAAC,MAAMpF,KAAK;wBACVN,YAAYY;wBACZL,SAASC,IAAID,OAAO;wBACpB6D,KAAKsB;wBACLE,OAAO7C;wBACPvC;oBACF,MAAOkF;gBACX,GAAGhF,QAAQC,OAAO;gBAElB,OAAO+E;YACT;QAEJ;QAEA,wCAAwC;QACxC,qBAAqB;QACrB,wCAAwC;QAExC5C,SAAS;YACP,GAAGA,MAAM;YACTX,MAAM,MAAMzB,QAAQ+E,GAAG,CACrB3C,OAAOX,IAAI,CAACgC,GAAG,CAAC,OAAOC,MACrB9E,UAAyC;oBACvCU,YAAYY;oBACZL,SAASC,IAAID,OAAO;oBACpBM;oBACAC;oBACAsD;oBACApD,OAAOC;oBACPQ;oBACAoE,UAAU;oBACVC,QAAQ;oBACRpE;oBACAL;oBACAG;oBACAhB;oBACAoB;oBACAC;gBACF;QAGN;QAEA,wCAAwC;QACxC,yBAAyB;QACzB,wCAAwC;QAExCiB,SAAS;YACP,GAAGA,MAAM;YACTX,MAAM,MAAMzB,QAAQ+E,GAAG,CACrB3C,OAAOX,IAAI,CAACgC,GAAG,CAAC,OAAOC;gBACrB,IAAIsB,SAAStB;gBAEb,MAAMxD,iBAAiBV,KAAK,CAACZ,SAAS,CAACc,MAAM,CAAC,OAAOC,WAAWC;oBAC9D,MAAMD;oBAENqF,SACE,AAAC,MAAMpF,KAAK;wBACVN,YAAYY;wBACZL,SAASC,IAAID,OAAO;wBACpB6D,KAAKsB;wBACLG,UAAU;wBACVD,OAAO7C;wBACPvC;oBACF,MAAO4D;gBACX,GAAG1D,QAAQC,OAAO;gBAElB,OAAO+E;YACT;QAEJ;QAEA,wCAAwC;QACxC,8BAA8B;QAC9B,wCAAwC;QAExC5C,SAAS,MAAMlD,oBAAoB;YACjCG;YACAC,YAAYY;YACZH,WAAW;YACXqC;QACF;QAEA,wCAAwC;QACxC,iBAAiB;QACjB,wCAAwC;QAExC,OAAOA;IACT,EAAE,OAAO0C,OAAgB;QACvB,MAAMjG,gBAAgBQ,KAAKS,GAAG;QAC9B,MAAMgF;IACR;AACF,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findByID.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/findByID.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,UAAU,EACV,6BAA6B,EAC9B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACV,UAAU,EAEV,wBAAwB,EACzB,MAAM,oBAAoB,CAAA;AAY3B,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,iBAAiB,GAC5B,KAAK,SAAS,cAAc,EAC5B,cAAc,SAAS,OAAO,EAC9B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,gBAEjC,SAAS,KACtB,OAAO,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"findByID.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/findByID.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,UAAU,EACV,6BAA6B,EAC9B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACV,UAAU,EAEV,wBAAwB,EACzB,MAAM,oBAAoB,CAAA;AAY3B,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,iBAAiB,GAC5B,KAAK,SAAS,cAAc,EAC5B,cAAc,SAAS,OAAO,EAC9B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,gBAEjC,SAAS,KACtB,OAAO,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,CAyP3F,CAAA"}
|
|
@@ -36,11 +36,12 @@ export const findByIDOperation = async (incomingArgs)=>{
|
|
|
36
36
|
if (accessResult === false) {
|
|
37
37
|
return null;
|
|
38
38
|
}
|
|
39
|
-
const where =
|
|
39
|
+
const where = {
|
|
40
40
|
id: {
|
|
41
41
|
equals: id
|
|
42
42
|
}
|
|
43
|
-
}
|
|
43
|
+
};
|
|
44
|
+
const fullWhere = combineQueries(where, accessResult);
|
|
44
45
|
const sanitizedJoins = await sanitizeJoinQuery({
|
|
45
46
|
collectionConfig,
|
|
46
47
|
joins,
|
|
@@ -55,14 +56,17 @@ export const findByIDOperation = async (incomingArgs)=>{
|
|
|
55
56
|
transactionID: req.transactionID
|
|
56
57
|
},
|
|
57
58
|
select,
|
|
58
|
-
where
|
|
59
|
+
where: fullWhere
|
|
59
60
|
};
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
61
|
+
// execute only if there's a custom ID and potentially overwriten access on id
|
|
62
|
+
if (req.payload.collections[collectionConfig.slug].customIDType) {
|
|
63
|
+
await validateQueryPaths({
|
|
64
|
+
collectionConfig,
|
|
65
|
+
overrideAccess,
|
|
66
|
+
req,
|
|
67
|
+
where
|
|
68
|
+
});
|
|
69
|
+
}
|
|
66
70
|
// /////////////////////////////////////
|
|
67
71
|
// Find by ID
|
|
68
72
|
// /////////////////////////////////////
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collections/operations/findByID.ts"],"sourcesContent":["import type { FindOneArgs } from '../../database/types.js'\nimport type { CollectionSlug, JoinQuery } from '../../index.js'\nimport type {\n ApplyDisableErrors,\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../types/index.js'\nimport type {\n Collection,\n DataFromCollectionSlug,\n SelectFromCollectionSlug,\n} from '../config/types.js'\n\nimport executeAccess from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { sanitizeJoinQuery } from '../../database/sanitizeJoinQuery.js'\nimport { NotFound } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { validateQueryPaths } from '../../index.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport replaceWithDraftIfAvailable from '../../versions/drafts/replaceWithDraftIfAvailable.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments = {\n collection: Collection\n currentDepth?: number\n depth?: number\n disableErrors?: boolean\n draft?: boolean\n id: number | string\n includeLockStatus?: boolean\n joins?: JoinQuery\n overrideAccess?: boolean\n populate?: PopulateType\n req: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n}\n\nexport const findByIDOperation = async <\n TSlug extends CollectionSlug,\n TDisableErrors extends boolean,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: Arguments,\n): Promise<ApplyDisableErrors<TransformCollectionWithSelect<TSlug, TSelect>, TDisableErrors>> => {\n let args = incomingArgs\n\n try {\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: 'read',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n const {\n id,\n collection: { config: collectionConfig },\n currentDepth,\n depth,\n disableErrors,\n draft: draftEnabled = false,\n includeLockStatus,\n joins,\n overrideAccess = false,\n populate,\n req: { fallbackLocale, locale, t },\n req,\n select,\n showHiddenFields,\n } = args\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResult = !overrideAccess\n ? await executeAccess({ id, disableErrors, req }, collectionConfig.access.read)\n : true\n\n // If errors are disabled, and access returns false, return null\n if (accessResult === false) {\n return null\n }\n\n const where = combineQueries({ id: { equals: id } }, accessResult)\n\n const sanitizedJoins = await sanitizeJoinQuery({\n collectionConfig,\n joins,\n overrideAccess,\n req,\n })\n\n const findOneArgs: FindOneArgs = {\n collection: collectionConfig.slug,\n joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,\n locale,\n req: {\n transactionID: req.transactionID,\n } as PayloadRequest,\n select,\n where,\n }\n\n await validateQueryPaths({\n collectionConfig,\n overrideAccess,\n req,\n where,\n })\n\n // /////////////////////////////////////\n // Find by ID\n // /////////////////////////////////////\n\n if (!findOneArgs.where.and[0].id) {\n throw new NotFound(t)\n }\n\n let result: DataFromCollectionSlug<TSlug> = await req.payload.db.findOne(findOneArgs)\n\n if (!result) {\n if (!disableErrors) {\n throw new NotFound(req.t)\n }\n\n return null\n }\n\n // /////////////////////////////////////\n // Include Lock Status if required\n // /////////////////////////////////////\n\n if (includeLockStatus && id) {\n let lockStatus = null\n\n try {\n const lockDocumentsProp = collectionConfig?.lockDocuments\n\n const lockDurationDefault = 300 // Default 5 minutes in seconds\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n\n const lockedDocument = await req.payload.find({\n collection: 'payload-locked-documents',\n depth: 1,\n limit: 1,\n overrideAccess: false,\n pagination: false,\n req,\n where: {\n and: [\n {\n 'document.relationTo': {\n equals: collectionConfig.slug,\n },\n },\n {\n 'document.value': {\n equals: id,\n },\n },\n // Query where the lock is newer than the current time minus lock time\n {\n updatedAt: {\n greater_than: new Date(new Date().getTime() - lockDurationInMilliseconds),\n },\n },\n ],\n },\n })\n\n if (lockedDocument && lockedDocument.docs.length > 0) {\n lockStatus = lockedDocument.docs[0]\n }\n } catch {\n // swallow error\n }\n\n result._isLocked = !!lockStatus\n result._userEditing = lockStatus?.user?.value ?? null\n }\n\n // /////////////////////////////////////\n // Replace document with draft if available\n // /////////////////////////////////////\n\n if (collectionConfig.versions?.drafts && draftEnabled) {\n result = await replaceWithDraftIfAvailable({\n accessResult,\n doc: result,\n entity: collectionConfig,\n entityType: 'collection',\n overrideAccess,\n req,\n select,\n })\n }\n\n // /////////////////////////////////////\n // beforeRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n query: findOneArgs.where,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n currentDepth,\n depth,\n doc: result,\n draft: draftEnabled,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n query: findOneArgs.where,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'findByID',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result as ApplyDisableErrors<\n TransformCollectionWithSelect<TSlug, TSelect>,\n TDisableErrors\n >\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["executeAccess","combineQueries","sanitizeJoinQuery","NotFound","afterRead","validateQueryPaths","killTransaction","replaceWithDraftIfAvailable","buildAfterOperation","findByIDOperation","incomingArgs","args","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","req","operation","Promise","resolve","id","collectionConfig","currentDepth","depth","disableErrors","draft","draftEnabled","includeLockStatus","joins","overrideAccess","populate","fallbackLocale","locale","t","select","showHiddenFields","accessResult","access","read","where","equals","sanitizedJoins","findOneArgs","slug","payloadAPI","transactionID","and","result","payload","db","findOne","lockStatus","lockDocumentsProp","lockDocuments","lockDurationDefault","lockDuration","duration","lockDurationInMilliseconds","lockedDocument","find","limit","pagination","updatedAt","greater_than","Date","getTime","docs","length","_isLocked","_userEditing","user","value","versions","drafts","doc","entity","entityType","beforeRead","query","global","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/operations/findByID.ts"],"sourcesContent":["import type { FindOneArgs } from '../../database/types.js'\nimport type { CollectionSlug, JoinQuery } from '../../index.js'\nimport type {\n ApplyDisableErrors,\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../types/index.js'\nimport type {\n Collection,\n DataFromCollectionSlug,\n SelectFromCollectionSlug,\n} from '../config/types.js'\n\nimport executeAccess from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { sanitizeJoinQuery } from '../../database/sanitizeJoinQuery.js'\nimport { NotFound } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { validateQueryPaths } from '../../index.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport replaceWithDraftIfAvailable from '../../versions/drafts/replaceWithDraftIfAvailable.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments = {\n collection: Collection\n currentDepth?: number\n depth?: number\n disableErrors?: boolean\n draft?: boolean\n id: number | string\n includeLockStatus?: boolean\n joins?: JoinQuery\n overrideAccess?: boolean\n populate?: PopulateType\n req: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n}\n\nexport const findByIDOperation = async <\n TSlug extends CollectionSlug,\n TDisableErrors extends boolean,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: Arguments,\n): Promise<ApplyDisableErrors<TransformCollectionWithSelect<TSlug, TSelect>, TDisableErrors>> => {\n let args = incomingArgs\n\n try {\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: 'read',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n const {\n id,\n collection: { config: collectionConfig },\n currentDepth,\n depth,\n disableErrors,\n draft: draftEnabled = false,\n includeLockStatus,\n joins,\n overrideAccess = false,\n populate,\n req: { fallbackLocale, locale, t },\n req,\n select,\n showHiddenFields,\n } = args\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResult = !overrideAccess\n ? await executeAccess({ id, disableErrors, req }, collectionConfig.access.read)\n : true\n\n // If errors are disabled, and access returns false, return null\n if (accessResult === false) {\n return null\n }\n\n const where = { id: { equals: id } }\n\n const fullWhere = combineQueries(where, accessResult)\n\n const sanitizedJoins = await sanitizeJoinQuery({\n collectionConfig,\n joins,\n overrideAccess,\n req,\n })\n\n const findOneArgs: FindOneArgs = {\n collection: collectionConfig.slug,\n joins: req.payloadAPI === 'GraphQL' ? false : sanitizedJoins,\n locale,\n req: {\n transactionID: req.transactionID,\n } as PayloadRequest,\n select,\n where: fullWhere,\n }\n\n // execute only if there's a custom ID and potentially overwriten access on id\n if (req.payload.collections[collectionConfig.slug].customIDType) {\n await validateQueryPaths({\n collectionConfig,\n overrideAccess,\n req,\n where,\n })\n }\n // /////////////////////////////////////\n // Find by ID\n // /////////////////////////////////////\n\n if (!findOneArgs.where.and[0].id) {\n throw new NotFound(t)\n }\n\n let result: DataFromCollectionSlug<TSlug> = await req.payload.db.findOne(findOneArgs)\n\n if (!result) {\n if (!disableErrors) {\n throw new NotFound(req.t)\n }\n\n return null\n }\n\n // /////////////////////////////////////\n // Include Lock Status if required\n // /////////////////////////////////////\n\n if (includeLockStatus && id) {\n let lockStatus = null\n\n try {\n const lockDocumentsProp = collectionConfig?.lockDocuments\n\n const lockDurationDefault = 300 // Default 5 minutes in seconds\n const lockDuration =\n typeof lockDocumentsProp === 'object' ? lockDocumentsProp.duration : lockDurationDefault\n const lockDurationInMilliseconds = lockDuration * 1000\n\n const lockedDocument = await req.payload.find({\n collection: 'payload-locked-documents',\n depth: 1,\n limit: 1,\n overrideAccess: false,\n pagination: false,\n req,\n where: {\n and: [\n {\n 'document.relationTo': {\n equals: collectionConfig.slug,\n },\n },\n {\n 'document.value': {\n equals: id,\n },\n },\n // Query where the lock is newer than the current time minus lock time\n {\n updatedAt: {\n greater_than: new Date(new Date().getTime() - lockDurationInMilliseconds),\n },\n },\n ],\n },\n })\n\n if (lockedDocument && lockedDocument.docs.length > 0) {\n lockStatus = lockedDocument.docs[0]\n }\n } catch {\n // swallow error\n }\n\n result._isLocked = !!lockStatus\n result._userEditing = lockStatus?.user?.value ?? null\n }\n\n // /////////////////////////////////////\n // Replace document with draft if available\n // /////////////////////////////////////\n\n if (collectionConfig.versions?.drafts && draftEnabled) {\n result = await replaceWithDraftIfAvailable({\n accessResult,\n doc: result,\n entity: collectionConfig,\n entityType: 'collection',\n overrideAccess,\n req,\n select,\n })\n }\n\n // /////////////////////////////////////\n // beforeRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n query: findOneArgs.where,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n currentDepth,\n depth,\n doc: result,\n draft: draftEnabled,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n query: findOneArgs.where,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'findByID',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result as ApplyDisableErrors<\n TransformCollectionWithSelect<TSlug, TSelect>,\n TDisableErrors\n >\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["executeAccess","combineQueries","sanitizeJoinQuery","NotFound","afterRead","validateQueryPaths","killTransaction","replaceWithDraftIfAvailable","buildAfterOperation","findByIDOperation","incomingArgs","args","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","req","operation","Promise","resolve","id","collectionConfig","currentDepth","depth","disableErrors","draft","draftEnabled","includeLockStatus","joins","overrideAccess","populate","fallbackLocale","locale","t","select","showHiddenFields","accessResult","access","read","where","equals","fullWhere","sanitizedJoins","findOneArgs","slug","payloadAPI","transactionID","payload","collections","customIDType","and","result","db","findOne","lockStatus","lockDocumentsProp","lockDocuments","lockDurationDefault","lockDuration","duration","lockDurationInMilliseconds","lockedDocument","find","limit","pagination","updatedAt","greater_than","Date","getTime","docs","length","_isLocked","_userEditing","user","value","versions","drafts","doc","entity","entityType","beforeRead","query","global","error"],"mappings":"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"}
|
|
@@ -70,7 +70,7 @@ export const updateOperation = async (incomingArgs)=>{
|
|
|
70
70
|
overrideAccess,
|
|
71
71
|
req,
|
|
72
72
|
versionFields: buildVersionCollectionFields(payload.config, collection.config, true),
|
|
73
|
-
where:
|
|
73
|
+
where: appendVersionToQueryKey(where)
|
|
74
74
|
});
|
|
75
75
|
const query = await payload.db.queryDrafts({
|
|
76
76
|
collection: collectionConfig.slug,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/collections/operations/update.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport httpStatus from 'http-status'\n\nimport type { AccessResult } from '../../config/types.js'\nimport type { CollectionSlug } from '../../index.js'\nimport type { PayloadRequest, PopulateType, SelectType, Where } from '../../types/index.js'\nimport type {\n BulkOperationResult,\n Collection,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\n SelectFromCollectionSlug,\n} from '../config/types.js'\n\nimport { ensureUsernameOrEmail } from '../../auth/ensureUsernameOrEmail.js'\nimport executeAccess from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { validateQueryPaths } from '../../database/queryValidation/validateQueryPaths.js'\nimport { APIError } from '../../errors/index.js'\nimport { afterChange } from '../../fields/hooks/afterChange/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { beforeChange } from '../../fields/hooks/beforeChange/index.js'\nimport { beforeValidate } from '../../fields/hooks/beforeValidate/index.js'\nimport { deleteAssociatedFiles } from '../../uploads/deleteAssociatedFiles.js'\nimport { generateFileData } from '../../uploads/generateFileData.js'\nimport { unlinkTempFiles } from '../../uploads/unlinkTempFiles.js'\nimport { uploadFiles } from '../../uploads/uploadFiles.js'\nimport { checkDocumentLockStatus } from '../../utilities/checkDocumentLockStatus.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js'\nimport { appendVersionToQueryKey } from '../../versions/drafts/appendVersionToQueryKey.js'\nimport { saveVersion } from '../../versions/saveVersion.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n collection: Collection\n data: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>\n depth?: number\n disableTransaction?: boolean\n disableVerificationEmail?: boolean\n draft?: boolean\n limit?: number\n overrideAccess?: boolean\n overrideLock?: boolean\n overwriteExistingFiles?: boolean\n populate?: PopulateType\n req: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n where: Where\n}\n\nexport const updateOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: Arguments<TSlug>,\n): Promise<BulkOperationResult<TSlug, TSelect>> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = !args.disableTransaction && (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: 'update',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n const {\n collection: { config: collectionConfig },\n collection,\n depth,\n draft: draftArg = false,\n limit = 0,\n overrideAccess,\n overrideLock,\n overwriteExistingFiles = false,\n populate,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n select,\n showHiddenFields,\n where,\n } = args\n\n if (!where) {\n throw new APIError(\"Missing 'where' query of documents to update.\", httpStatus.BAD_REQUEST)\n }\n\n const { data: bulkUpdateData } = args\n const shouldSaveDraft = Boolean(draftArg && collectionConfig.versions.drafts)\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n let accessResult: AccessResult\n if (!overrideAccess) {\n accessResult = await executeAccess({ req }, collectionConfig.access.update)\n }\n\n await validateQueryPaths({\n collectionConfig,\n overrideAccess,\n req,\n where,\n })\n\n // /////////////////////////////////////\n // Retrieve documents\n // /////////////////////////////////////\n\n const fullWhere = combineQueries(where, accessResult)\n\n let docs\n\n if (collectionConfig.versions?.drafts && shouldSaveDraft) {\n const versionsWhere = appendVersionToQueryKey(fullWhere)\n\n await validateQueryPaths({\n collectionConfig: collection.config,\n overrideAccess,\n req,\n versionFields: buildVersionCollectionFields(payload.config, collection.config, true),\n where: versionsWhere,\n })\n\n const query = await payload.db.queryDrafts<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n limit,\n locale,\n pagination: false,\n req,\n where: versionsWhere,\n })\n\n docs = query.docs\n } else {\n const query = await payload.db.find({\n collection: collectionConfig.slug,\n limit,\n locale,\n pagination: false,\n req,\n where: fullWhere,\n })\n\n docs = query.docs\n }\n\n // /////////////////////////////////////\n // Generate data for all files and sizes\n // /////////////////////////////////////\n\n const { data: newFileData, files: filesToUpload } = await generateFileData({\n collection,\n config,\n data: bulkUpdateData,\n operation: 'update',\n overwriteExistingFiles,\n req,\n throwOnMissingFile: false,\n })\n\n const errors = []\n\n const promises = docs.map(async (doc) => {\n const { id } = doc\n let data = {\n ...newFileData,\n ...bulkUpdateData,\n }\n\n try {\n // /////////////////////////////////////\n // Handle potentially locked documents\n // /////////////////////////////////////\n\n await checkDocumentLockStatus({\n id,\n collectionSlug: collectionConfig.slug,\n lockErrorMessage: `Document with ID ${id} is currently locked by another user and cannot be updated.`,\n overrideLock,\n req,\n })\n\n const originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc,\n draft: draftArg,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc,\n files: filesToUpload,\n overrideDelete: false,\n req,\n })\n\n if (args.collection.config.auth) {\n ensureUsernameOrEmail<TSlug>({\n authOptions: args.collection.config.auth,\n collectionSlug: args.collection.config.slug,\n data: args.data,\n operation: 'update',\n originalDoc,\n req: args.req,\n })\n }\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n data = await beforeValidate<DeepPartial<DataFromCollectionSlug<TSlug>>>({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n global: null,\n operation: 'update',\n overrideAccess,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeValidate.reduce(async (priorHook, hook) => {\n await priorHook\n\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // Write files to local storage\n // /////////////////////////////////////\n\n if (!collectionConfig.upload.disableLocalStorage) {\n await uploadFiles(payload, filesToUpload, req)\n }\n\n // /////////////////////////////////////\n // beforeChange - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeChange.reduce(async (priorHook, hook) => {\n await priorHook\n\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n let result = await beforeChange({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n docWithLocales: doc,\n global: null,\n operation: 'update',\n req,\n skipValidation:\n shouldSaveDraft &&\n collectionConfig.versions.drafts &&\n !collectionConfig.versions.drafts.validate &&\n data._status !== 'published',\n })\n\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n if (!shouldSaveDraft || data._status === 'published') {\n result = await req.payload.db.updateOne({\n id,\n collection: collectionConfig.slug,\n data: result,\n locale,\n req,\n select,\n })\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n result = await saveVersion({\n id,\n collection: collectionConfig,\n docWithLocales: result,\n payload,\n req,\n select,\n })\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: result,\n draft: draftArg,\n fallbackLocale: null,\n global: null,\n locale,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterChange - Fields\n // /////////////////////////////////////\n\n result = await afterChange({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: result,\n global: null,\n operation: 'update',\n previousDoc: originalDoc,\n req,\n })\n\n // /////////////////////////////////////\n // afterChange - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterChange.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n operation: 'update',\n previousDoc: originalDoc,\n req,\n })) || result\n }, Promise.resolve())\n\n await unlinkTempFiles({\n collectionConfig,\n config,\n req,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result\n } catch (error) {\n errors.push({\n id,\n message: error.message,\n })\n }\n return null\n })\n\n const awaitedDocs = await Promise.all(promises)\n\n let result = {\n docs: awaitedDocs.filter(Boolean),\n errors,\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'update',\n result,\n })\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["httpStatus","ensureUsernameOrEmail","executeAccess","combineQueries","validateQueryPaths","APIError","afterChange","afterRead","beforeChange","beforeValidate","deleteAssociatedFiles","generateFileData","unlinkTempFiles","uploadFiles","checkDocumentLockStatus","commitTransaction","initTransaction","killTransaction","buildVersionCollectionFields","appendVersionToQueryKey","saveVersion","buildAfterOperation","updateOperation","incomingArgs","args","shouldCommit","disableTransaction","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","collectionConfig","depth","draft","draftArg","limit","overrideAccess","overrideLock","overwriteExistingFiles","populate","fallbackLocale","locale","payload","select","showHiddenFields","where","BAD_REQUEST","data","bulkUpdateData","shouldSaveDraft","Boolean","versions","drafts","accessResult","access","update","fullWhere","docs","versionsWhere","versionFields","query","db","queryDrafts","slug","pagination","find","newFileData","files","filesToUpload","throwOnMissingFile","errors","promises","map","doc","id","collectionSlug","lockErrorMessage","originalDoc","global","overrideDelete","auth","authOptions","upload","disableLocalStorage","result","docWithLocales","skipValidation","validate","_status","updateOne","previousDoc","error","push","message","awaitedDocs","all","filter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/collections/operations/update.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport httpStatus from 'http-status'\n\nimport type { AccessResult } from '../../config/types.js'\nimport type { CollectionSlug } from '../../index.js'\nimport type { PayloadRequest, PopulateType, SelectType, Where } from '../../types/index.js'\nimport type {\n BulkOperationResult,\n Collection,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\n SelectFromCollectionSlug,\n} from '../config/types.js'\n\nimport { ensureUsernameOrEmail } from '../../auth/ensureUsernameOrEmail.js'\nimport executeAccess from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { validateQueryPaths } from '../../database/queryValidation/validateQueryPaths.js'\nimport { APIError } from '../../errors/index.js'\nimport { afterChange } from '../../fields/hooks/afterChange/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { beforeChange } from '../../fields/hooks/beforeChange/index.js'\nimport { beforeValidate } from '../../fields/hooks/beforeValidate/index.js'\nimport { deleteAssociatedFiles } from '../../uploads/deleteAssociatedFiles.js'\nimport { generateFileData } from '../../uploads/generateFileData.js'\nimport { unlinkTempFiles } from '../../uploads/unlinkTempFiles.js'\nimport { uploadFiles } from '../../uploads/uploadFiles.js'\nimport { checkDocumentLockStatus } from '../../utilities/checkDocumentLockStatus.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js'\nimport { appendVersionToQueryKey } from '../../versions/drafts/appendVersionToQueryKey.js'\nimport { saveVersion } from '../../versions/saveVersion.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n collection: Collection\n data: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>\n depth?: number\n disableTransaction?: boolean\n disableVerificationEmail?: boolean\n draft?: boolean\n limit?: number\n overrideAccess?: boolean\n overrideLock?: boolean\n overwriteExistingFiles?: boolean\n populate?: PopulateType\n req: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n where: Where\n}\n\nexport const updateOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: Arguments<TSlug>,\n): Promise<BulkOperationResult<TSlug, TSelect>> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = !args.disableTransaction && (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: 'update',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n const {\n collection: { config: collectionConfig },\n collection,\n depth,\n draft: draftArg = false,\n limit = 0,\n overrideAccess,\n overrideLock,\n overwriteExistingFiles = false,\n populate,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n select,\n showHiddenFields,\n where,\n } = args\n\n if (!where) {\n throw new APIError(\"Missing 'where' query of documents to update.\", httpStatus.BAD_REQUEST)\n }\n\n const { data: bulkUpdateData } = args\n const shouldSaveDraft = Boolean(draftArg && collectionConfig.versions.drafts)\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n let accessResult: AccessResult\n if (!overrideAccess) {\n accessResult = await executeAccess({ req }, collectionConfig.access.update)\n }\n\n await validateQueryPaths({\n collectionConfig,\n overrideAccess,\n req,\n where,\n })\n\n // /////////////////////////////////////\n // Retrieve documents\n // /////////////////////////////////////\n\n const fullWhere = combineQueries(where, accessResult)\n\n let docs\n\n if (collectionConfig.versions?.drafts && shouldSaveDraft) {\n const versionsWhere = appendVersionToQueryKey(fullWhere)\n\n await validateQueryPaths({\n collectionConfig: collection.config,\n overrideAccess,\n req,\n versionFields: buildVersionCollectionFields(payload.config, collection.config, true),\n where: appendVersionToQueryKey(where),\n })\n\n const query = await payload.db.queryDrafts<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n limit,\n locale,\n pagination: false,\n req,\n where: versionsWhere,\n })\n\n docs = query.docs\n } else {\n const query = await payload.db.find({\n collection: collectionConfig.slug,\n limit,\n locale,\n pagination: false,\n req,\n where: fullWhere,\n })\n\n docs = query.docs\n }\n\n // /////////////////////////////////////\n // Generate data for all files and sizes\n // /////////////////////////////////////\n\n const { data: newFileData, files: filesToUpload } = await generateFileData({\n collection,\n config,\n data: bulkUpdateData,\n operation: 'update',\n overwriteExistingFiles,\n req,\n throwOnMissingFile: false,\n })\n\n const errors = []\n\n const promises = docs.map(async (doc) => {\n const { id } = doc\n let data = {\n ...newFileData,\n ...bulkUpdateData,\n }\n\n try {\n // /////////////////////////////////////\n // Handle potentially locked documents\n // /////////////////////////////////////\n\n await checkDocumentLockStatus({\n id,\n collectionSlug: collectionConfig.slug,\n lockErrorMessage: `Document with ID ${id} is currently locked by another user and cannot be updated.`,\n overrideLock,\n req,\n })\n\n const originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc,\n draft: draftArg,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc,\n files: filesToUpload,\n overrideDelete: false,\n req,\n })\n\n if (args.collection.config.auth) {\n ensureUsernameOrEmail<TSlug>({\n authOptions: args.collection.config.auth,\n collectionSlug: args.collection.config.slug,\n data: args.data,\n operation: 'update',\n originalDoc,\n req: args.req,\n })\n }\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n data = await beforeValidate<DeepPartial<DataFromCollectionSlug<TSlug>>>({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n global: null,\n operation: 'update',\n overrideAccess,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeValidate.reduce(async (priorHook, hook) => {\n await priorHook\n\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // Write files to local storage\n // /////////////////////////////////////\n\n if (!collectionConfig.upload.disableLocalStorage) {\n await uploadFiles(payload, filesToUpload, req)\n }\n\n // /////////////////////////////////////\n // beforeChange - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeChange.reduce(async (priorHook, hook) => {\n await priorHook\n\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n let result = await beforeChange({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n docWithLocales: doc,\n global: null,\n operation: 'update',\n req,\n skipValidation:\n shouldSaveDraft &&\n collectionConfig.versions.drafts &&\n !collectionConfig.versions.drafts.validate &&\n data._status !== 'published',\n })\n\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n if (!shouldSaveDraft || data._status === 'published') {\n result = await req.payload.db.updateOne({\n id,\n collection: collectionConfig.slug,\n data: result,\n locale,\n req,\n select,\n })\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n result = await saveVersion({\n id,\n collection: collectionConfig,\n docWithLocales: result,\n payload,\n req,\n select,\n })\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: result,\n draft: draftArg,\n fallbackLocale: null,\n global: null,\n locale,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterChange - Fields\n // /////////////////////////////////////\n\n result = await afterChange({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: result,\n global: null,\n operation: 'update',\n previousDoc: originalDoc,\n req,\n })\n\n // /////////////////////////////////////\n // afterChange - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterChange.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n operation: 'update',\n previousDoc: originalDoc,\n req,\n })) || result\n }, Promise.resolve())\n\n await unlinkTempFiles({\n collectionConfig,\n config,\n req,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result\n } catch (error) {\n errors.push({\n id,\n message: error.message,\n })\n }\n return null\n })\n\n const awaitedDocs = await Promise.all(promises)\n\n let result = {\n docs: awaitedDocs.filter(Boolean),\n errors,\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'update',\n result,\n })\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["httpStatus","ensureUsernameOrEmail","executeAccess","combineQueries","validateQueryPaths","APIError","afterChange","afterRead","beforeChange","beforeValidate","deleteAssociatedFiles","generateFileData","unlinkTempFiles","uploadFiles","checkDocumentLockStatus","commitTransaction","initTransaction","killTransaction","buildVersionCollectionFields","appendVersionToQueryKey","saveVersion","buildAfterOperation","updateOperation","incomingArgs","args","shouldCommit","disableTransaction","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","collectionConfig","depth","draft","draftArg","limit","overrideAccess","overrideLock","overwriteExistingFiles","populate","fallbackLocale","locale","payload","select","showHiddenFields","where","BAD_REQUEST","data","bulkUpdateData","shouldSaveDraft","Boolean","versions","drafts","accessResult","access","update","fullWhere","docs","versionsWhere","versionFields","query","db","queryDrafts","slug","pagination","find","newFileData","files","filesToUpload","throwOnMissingFile","errors","promises","map","doc","id","collectionSlug","lockErrorMessage","originalDoc","global","overrideDelete","auth","authOptions","upload","disableLocalStorage","result","docWithLocales","skipValidation","validate","_status","updateOne","previousDoc","error","push","message","awaitedDocs","all","filter"],"mappings":"AAEA,OAAOA,gBAAgB,cAAa;AAapC,SAASC,qBAAqB,QAAQ,sCAAqC;AAC3E,OAAOC,mBAAmB,8BAA6B;AACvD,SAASC,cAAc,QAAQ,mCAAkC;AACjE,SAASC,kBAAkB,QAAQ,uDAAsD;AACzF,SAASC,QAAQ,QAAQ,wBAAuB;AAChD,SAASC,WAAW,QAAQ,0CAAyC;AACrE,SAASC,SAAS,QAAQ,wCAAuC;AACjE,SAASC,YAAY,QAAQ,2CAA0C;AACvE,SAASC,cAAc,QAAQ,6CAA4C;AAC3E,SAASC,qBAAqB,QAAQ,yCAAwC;AAC9E,SAASC,gBAAgB,QAAQ,oCAAmC;AACpE,SAASC,eAAe,QAAQ,mCAAkC;AAClE,SAASC,WAAW,QAAQ,+BAA8B;AAC1D,SAASC,uBAAuB,QAAQ,6CAA4C;AACpF,SAASC,iBAAiB,QAAQ,uCAAsC;AACxE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,4BAA4B,QAAQ,0CAAyC;AACtF,SAASC,uBAAuB,QAAQ,mDAAkD;AAC1F,SAASC,WAAW,QAAQ,gCAA+B;AAC3D,SAASC,mBAAmB,QAAQ,aAAY;AAoBhD,OAAO,MAAMC,kBAAkB,OAI7BC;IAEA,IAAIC,OAAOD;IAEX,IAAI;QACF,MAAME,eAAe,CAACD,KAAKE,kBAAkB,IAAK,MAAMV,gBAAgBQ,KAAKG,GAAG;QAEhF,wCAAwC;QACxC,+BAA+B;QAC/B,wCAAwC;QAExC,MAAMH,KAAKI,UAAU,CAACC,MAAM,CAACC,KAAK,CAACC,eAAe,CAACC,MAAM,CAAC,OAAOC,WAAWC;YAC1E,MAAMD;YAENT,OACE,AAAC,MAAMU,KAAK;gBACVV;gBACAI,YAAYJ,KAAKI,UAAU,CAACC,MAAM;gBAClCM,SAASX,KAAKG,GAAG,CAACQ,OAAO;gBACzBC,WAAW;gBACXT,KAAKH,KAAKG,GAAG;YACf,MAAOH;QACX,GAAGa,QAAQC,OAAO;QAElB,MAAM,EACJV,YAAY,EAAEC,QAAQU,gBAAgB,EAAE,EACxCX,UAAU,EACVY,KAAK,EACLC,OAAOC,WAAW,KAAK,EACvBC,QAAQ,CAAC,EACTC,cAAc,EACdC,YAAY,EACZC,yBAAyB,KAAK,EAC9BC,QAAQ,EACRpB,KAAK,EACHqB,cAAc,EACdC,MAAM,EACNC,SAAS,EAAErB,MAAM,EAAE,EACnBqB,OAAO,EACR,EACDvB,GAAG,EACHwB,MAAM,EACNC,gBAAgB,EAChBC,KAAK,EACN,GAAG7B;QAEJ,IAAI,CAAC6B,OAAO;YACV,MAAM,IAAIhD,SAAS,iDAAiDL,WAAWsD,WAAW;QAC5F;QAEA,MAAM,EAAEC,MAAMC,cAAc,EAAE,GAAGhC;QACjC,MAAMiC,kBAAkBC,QAAQhB,YAAYH,iBAAiBoB,QAAQ,CAACC,MAAM;QAE5E,wCAAwC;QACxC,SAAS;QACT,wCAAwC;QAExC,IAAIC;QACJ,IAAI,CAACjB,gBAAgB;YACnBiB,eAAe,MAAM3D,cAAc;gBAAEyB;YAAI,GAAGY,iBAAiBuB,MAAM,CAACC,MAAM;QAC5E;QAEA,MAAM3D,mBAAmB;YACvBmC;YACAK;YACAjB;YACA0B;QACF;QAEA,wCAAwC;QACxC,qBAAqB;QACrB,wCAAwC;QAExC,MAAMW,YAAY7D,eAAekD,OAAOQ;QAExC,IAAII;QAEJ,IAAI1B,iBAAiBoB,QAAQ,EAAEC,UAAUH,iBAAiB;YACxD,MAAMS,gBAAgB/C,wBAAwB6C;YAE9C,MAAM5D,mBAAmB;gBACvBmC,kBAAkBX,WAAWC,MAAM;gBACnCe;gBACAjB;gBACAwC,eAAejD,6BAA6BgC,QAAQrB,MAAM,EAAED,WAAWC,MAAM,EAAE;gBAC/EwB,OAAOlC,wBAAwBkC;YACjC;YAEA,MAAMe,QAAQ,MAAMlB,QAAQmB,EAAE,CAACC,WAAW,CAAgC;gBACxE1C,YAAYW,iBAAiBgC,IAAI;gBACjC5B;gBACAM;gBACAuB,YAAY;gBACZ7C;gBACA0B,OAAOa;YACT;YAEAD,OAAOG,MAAMH,IAAI;QACnB,OAAO;YACL,MAAMG,QAAQ,MAAMlB,QAAQmB,EAAE,CAACI,IAAI,CAAC;gBAClC7C,YAAYW,iBAAiBgC,IAAI;gBACjC5B;gBACAM;gBACAuB,YAAY;gBACZ7C;gBACA0B,OAAOW;YACT;YAEAC,OAAOG,MAAMH,IAAI;QACnB;QAEA,wCAAwC;QACxC,wCAAwC;QACxC,wCAAwC;QAExC,MAAM,EAAEV,MAAMmB,WAAW,EAAEC,OAAOC,aAAa,EAAE,GAAG,MAAMjE,iBAAiB;YACzEiB;YACAC;YACA0B,MAAMC;YACNpB,WAAW;YACXU;YACAnB;YACAkD,oBAAoB;QACtB;QAEA,MAAMC,SAAS,EAAE;QAEjB,MAAMC,WAAWd,KAAKe,GAAG,CAAC,OAAOC;YAC/B,MAAM,EAAEC,EAAE,EAAE,GAAGD;YACf,IAAI1B,OAAO;gBACT,GAAGmB,WAAW;gBACd,GAAGlB,cAAc;YACnB;YAEA,IAAI;gBACF,wCAAwC;gBACxC,sCAAsC;gBACtC,wCAAwC;gBAExC,MAAM1C,wBAAwB;oBAC5BoE;oBACAC,gBAAgB5C,iBAAiBgC,IAAI;oBACrCa,kBAAkB,CAAC,iBAAiB,EAAEF,GAAG,2DAA2D,CAAC;oBACrGrC;oBACAlB;gBACF;gBAEA,MAAM0D,cAAc,MAAM9E,UAAU;oBAClCqB,YAAYW;oBACZJ,SAASR,IAAIQ,OAAO;oBACpBK,OAAO;oBACPyC;oBACAxC,OAAOC;oBACPM;oBACAsC,QAAQ;oBACRrC;oBACAL,gBAAgB;oBAChBjB;oBACAyB,kBAAkB;gBACpB;gBAEA,MAAM1C,sBAAsB;oBAC1B6B;oBACAV;oBACAoD;oBACAN,OAAOC;oBACPW,gBAAgB;oBAChB5D;gBACF;gBAEA,IAAIH,KAAKI,UAAU,CAACC,MAAM,CAAC2D,IAAI,EAAE;oBAC/BvF,sBAA6B;wBAC3BwF,aAAajE,KAAKI,UAAU,CAACC,MAAM,CAAC2D,IAAI;wBACxCL,gBAAgB3D,KAAKI,UAAU,CAACC,MAAM,CAAC0C,IAAI;wBAC3ChB,MAAM/B,KAAK+B,IAAI;wBACfnB,WAAW;wBACXiD;wBACA1D,KAAKH,KAAKG,GAAG;oBACf;gBACF;gBAEA,wCAAwC;gBACxC,0BAA0B;gBAC1B,wCAAwC;gBAExC4B,OAAO,MAAM9C,eAA2D;oBACtEyE;oBACAtD,YAAYW;oBACZJ,SAASR,IAAIQ,OAAO;oBACpBoB;oBACA0B,KAAKI;oBACLC,QAAQ;oBACRlD,WAAW;oBACXQ;oBACAjB;gBACF;gBAEA,wCAAwC;gBACxC,8BAA8B;gBAC9B,wCAAwC;gBAExC,MAAMY,iBAAiBT,KAAK,CAACrB,cAAc,CAACuB,MAAM,CAAC,OAAOC,WAAWC;oBACnE,MAAMD;oBAENsB,OACE,AAAC,MAAMrB,KAAK;wBACVN,YAAYW;wBACZJ,SAASR,IAAIQ,OAAO;wBACpBoB;wBACAnB,WAAW;wBACXiD;wBACA1D;oBACF,MAAO4B;gBACX,GAAGlB,QAAQC,OAAO;gBAElB,wCAAwC;gBACxC,+BAA+B;gBAC/B,wCAAwC;gBAExC,IAAI,CAACC,iBAAiBmD,MAAM,CAACC,mBAAmB,EAAE;oBAChD,MAAM9E,YAAYqC,SAAS0B,eAAejD;gBAC5C;gBAEA,wCAAwC;gBACxC,4BAA4B;gBAC5B,wCAAwC;gBAExC,MAAMY,iBAAiBT,KAAK,CAACtB,YAAY,CAACwB,MAAM,CAAC,OAAOC,WAAWC;oBACjE,MAAMD;oBAENsB,OACE,AAAC,MAAMrB,KAAK;wBACVN,YAAYW;wBACZJ,SAASR,IAAIQ,OAAO;wBACpBoB;wBACAnB,WAAW;wBACXiD;wBACA1D;oBACF,MAAO4B;gBACX,GAAGlB,QAAQC,OAAO;gBAElB,wCAAwC;gBACxC,wBAAwB;gBACxB,wCAAwC;gBAExC,IAAIsD,SAAS,MAAMpF,aAAa;oBAC9B0E;oBACAtD,YAAYW;oBACZJ,SAASR,IAAIQ,OAAO;oBACpBoB;oBACA0B,KAAKI;oBACLQ,gBAAgBZ;oBAChBK,QAAQ;oBACRlD,WAAW;oBACXT;oBACAmE,gBACErC,mBACAlB,iBAAiBoB,QAAQ,CAACC,MAAM,IAChC,CAACrB,iBAAiBoB,QAAQ,CAACC,MAAM,CAACmC,QAAQ,IAC1CxC,KAAKyC,OAAO,KAAK;gBACrB;gBAEA,wCAAwC;gBACxC,SAAS;gBACT,wCAAwC;gBAExC,IAAI,CAACvC,mBAAmBF,KAAKyC,OAAO,KAAK,aAAa;oBACpDJ,SAAS,MAAMjE,IAAIuB,OAAO,CAACmB,EAAE,CAAC4B,SAAS,CAAC;wBACtCf;wBACAtD,YAAYW,iBAAiBgC,IAAI;wBACjChB,MAAMqC;wBACN3C;wBACAtB;wBACAwB;oBACF;gBACF;gBAEA,wCAAwC;gBACxC,iBAAiB;gBACjB,wCAAwC;gBAExC,IAAIZ,iBAAiBoB,QAAQ,EAAE;oBAC7BiC,SAAS,MAAMxE,YAAY;wBACzB8D;wBACAtD,YAAYW;wBACZsD,gBAAgBD;wBAChB1C;wBACAvB;wBACAwB;oBACF;gBACF;gBAEA,wCAAwC;gBACxC,qBAAqB;gBACrB,wCAAwC;gBAExCyC,SAAS,MAAMrF,UAAU;oBACvBqB,YAAYW;oBACZJ,SAASR,IAAIQ,OAAO;oBACpBK;oBACAyC,KAAKW;oBACLnD,OAAOC;oBACPM,gBAAgB;oBAChBsC,QAAQ;oBACRrC;oBACAL;oBACAG;oBACApB;oBACAwB;oBACAC;gBACF;gBAEA,wCAAwC;gBACxC,yBAAyB;gBACzB,wCAAwC;gBAExC,MAAMb,iBAAiBT,KAAK,CAACvB,SAAS,CAACyB,MAAM,CAAC,OAAOC,WAAWC;oBAC9D,MAAMD;oBAEN2D,SACE,AAAC,MAAM1D,KAAK;wBACVN,YAAYW;wBACZJ,SAASR,IAAIQ,OAAO;wBACpB8C,KAAKW;wBACLjE;oBACF,MAAOiE;gBACX,GAAGvD,QAAQC,OAAO;gBAElB,wCAAwC;gBACxC,uBAAuB;gBACvB,wCAAwC;gBAExCsD,SAAS,MAAMtF,YAAY;oBACzBsB,YAAYW;oBACZJ,SAASR,IAAIQ,OAAO;oBACpBoB;oBACA0B,KAAKW;oBACLN,QAAQ;oBACRlD,WAAW;oBACX8D,aAAab;oBACb1D;gBACF;gBAEA,wCAAwC;gBACxC,2BAA2B;gBAC3B,wCAAwC;gBAExC,MAAMY,iBAAiBT,KAAK,CAACxB,WAAW,CAAC0B,MAAM,CAAC,OAAOC,WAAWC;oBAChE,MAAMD;oBAEN2D,SACE,AAAC,MAAM1D,KAAK;wBACVN,YAAYW;wBACZJ,SAASR,IAAIQ,OAAO;wBACpB8C,KAAKW;wBACLxD,WAAW;wBACX8D,aAAab;wBACb1D;oBACF,MAAOiE;gBACX,GAAGvD,QAAQC,OAAO;gBAElB,MAAM1B,gBAAgB;oBACpB2B;oBACAV;oBACAF;gBACF;gBAEA,wCAAwC;gBACxC,iBAAiB;gBACjB,wCAAwC;gBAExC,OAAOiE;YACT,EAAE,OAAOO,OAAO;gBACdrB,OAAOsB,IAAI,CAAC;oBACVlB;oBACAmB,SAASF,MAAME,OAAO;gBACxB;YACF;YACA,OAAO;QACT;QAEA,MAAMC,cAAc,MAAMjE,QAAQkE,GAAG,CAACxB;QAEtC,IAAIa,SAAS;YACX3B,MAAMqC,YAAYE,MAAM,CAAC9C;YACzBoB;QACF;QAEA,wCAAwC;QACxC,8BAA8B;QAC9B,wCAAwC;QAExCc,SAAS,MAAMvE,oBAAoB;YACjCG;YACAI,YAAYW;YACZH,WAAW;YACXwD;QACF;QAEA,IAAInE,cAAc;YAChB,MAAMV,kBAAkBY;QAC1B;QAEA,OAAOiE;IACT,EAAE,OAAOO,OAAgB;QACvB,MAAMlF,gBAAgBO,KAAKG,GAAG;QAC9B,MAAMwE;IACR;AACF,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizeJoinQuery.d.ts","sourceRoot":"","sources":["../../src/database/sanitizeJoinQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"sanitizeJoinQuery.d.ts","sourceRoot":"","sources":["../../src/database/sanitizeJoinQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAQlE,KAAK,IAAI,GAAG;IACV,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,cAAc,EAAE,OAAO,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,kEAK3B,IAAI;;;;;;GAmEN,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import executeAccess from '../auth/executeAccess.js';
|
|
2
2
|
import { QueryError } from '../errors/QueryError.js';
|
|
3
|
+
import { deepCopyObjectSimple } from '../utilities/deepCopyObject.js';
|
|
3
4
|
import { combineQueries } from './combineQueries.js';
|
|
4
5
|
import { validateQueryPaths } from './queryValidation/validateQueryPaths.js';
|
|
5
6
|
/**
|
|
@@ -39,16 +40,17 @@ import { validateQueryPaths } from './queryValidation/validateQueryPaths.js';
|
|
|
39
40
|
if (field.where) {
|
|
40
41
|
joinQuery.where = combineQueries(joinQuery.where, field.where);
|
|
41
42
|
}
|
|
42
|
-
if (typeof accessResult === 'object') {
|
|
43
|
-
joinQuery.where = combineQueries(joinQuery.where, accessResult);
|
|
44
|
-
}
|
|
45
43
|
promises.push(validateQueryPaths({
|
|
46
44
|
collectionConfig: joinCollectionConfig,
|
|
47
45
|
errors,
|
|
48
46
|
overrideAccess,
|
|
49
47
|
req,
|
|
50
|
-
where
|
|
48
|
+
// incoming where input, but we shouldn't validate generated from the access control.
|
|
49
|
+
where: deepCopyObjectSimple(joinQuery.where)
|
|
51
50
|
}));
|
|
51
|
+
if (typeof accessResult === 'object') {
|
|
52
|
+
joinQuery.where = combineQueries(joinQuery.where, accessResult);
|
|
53
|
+
}
|
|
52
54
|
}
|
|
53
55
|
}
|
|
54
56
|
await Promise.all(promises);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/database/sanitizeJoinQuery.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { JoinQuery, PayloadRequest } from '../types/index.js'\n\nimport executeAccess from '../auth/executeAccess.js'\nimport { QueryError } from '../errors/QueryError.js'\nimport { combineQueries } from './combineQueries.js'\nimport { validateQueryPaths } from './queryValidation/validateQueryPaths.js'\n\ntype Args = {\n collectionConfig: SanitizedCollectionConfig\n joins?: JoinQuery\n overrideAccess: boolean\n req: PayloadRequest\n}\n\n/**\n * * Validates `where` for each join\n * * Combines the access result for joined collection\n * * Combines the default join's `where`\n */\nexport const sanitizeJoinQuery = async ({\n collectionConfig,\n joins: joinsQuery,\n overrideAccess,\n req,\n}: Args) => {\n if (joinsQuery === false) {\n return false\n }\n\n if (!joinsQuery) {\n joinsQuery = {}\n }\n\n const errors: { path: string }[] = []\n const promises: Promise<void>[] = []\n\n for (const collectionSlug in collectionConfig.joins) {\n for (const { field, joinPath } of collectionConfig.joins[collectionSlug]) {\n if (joinsQuery[joinPath] === false) {\n continue\n }\n\n const joinCollectionConfig = req.payload.collections[collectionSlug].config\n\n const accessResult = !overrideAccess\n ? await executeAccess({ disableErrors: true, req }, joinCollectionConfig.access.read)\n : true\n\n if (accessResult === false) {\n joinsQuery[joinPath] = false\n continue\n }\n\n if (!joinsQuery[joinPath]) {\n joinsQuery[joinPath] = {}\n }\n\n const joinQuery = joinsQuery[joinPath]\n\n if (!joinQuery.where) {\n joinQuery.where = {}\n }\n\n if (field.where) {\n joinQuery.where = combineQueries(joinQuery.where, field.where)\n }\n\n
|
|
1
|
+
{"version":3,"sources":["../../src/database/sanitizeJoinQuery.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { JoinQuery, PayloadRequest } from '../types/index.js'\n\nimport executeAccess from '../auth/executeAccess.js'\nimport { QueryError } from '../errors/QueryError.js'\nimport { deepCopyObjectSimple } from '../utilities/deepCopyObject.js'\nimport { combineQueries } from './combineQueries.js'\nimport { validateQueryPaths } from './queryValidation/validateQueryPaths.js'\n\ntype Args = {\n collectionConfig: SanitizedCollectionConfig\n joins?: JoinQuery\n overrideAccess: boolean\n req: PayloadRequest\n}\n\n/**\n * * Validates `where` for each join\n * * Combines the access result for joined collection\n * * Combines the default join's `where`\n */\nexport const sanitizeJoinQuery = async ({\n collectionConfig,\n joins: joinsQuery,\n overrideAccess,\n req,\n}: Args) => {\n if (joinsQuery === false) {\n return false\n }\n\n if (!joinsQuery) {\n joinsQuery = {}\n }\n\n const errors: { path: string }[] = []\n const promises: Promise<void>[] = []\n\n for (const collectionSlug in collectionConfig.joins) {\n for (const { field, joinPath } of collectionConfig.joins[collectionSlug]) {\n if (joinsQuery[joinPath] === false) {\n continue\n }\n\n const joinCollectionConfig = req.payload.collections[collectionSlug].config\n\n const accessResult = !overrideAccess\n ? await executeAccess({ disableErrors: true, req }, joinCollectionConfig.access.read)\n : true\n\n if (accessResult === false) {\n joinsQuery[joinPath] = false\n continue\n }\n\n if (!joinsQuery[joinPath]) {\n joinsQuery[joinPath] = {}\n }\n\n const joinQuery = joinsQuery[joinPath]\n\n if (!joinQuery.where) {\n joinQuery.where = {}\n }\n\n if (field.where) {\n joinQuery.where = combineQueries(joinQuery.where, field.where)\n }\n\n promises.push(\n validateQueryPaths({\n collectionConfig: joinCollectionConfig,\n errors,\n overrideAccess,\n req,\n // incoming where input, but we shouldn't validate generated from the access control.\n where: deepCopyObjectSimple(joinQuery.where),\n }),\n )\n\n if (typeof accessResult === 'object') {\n joinQuery.where = combineQueries(joinQuery.where, accessResult)\n }\n }\n }\n\n await Promise.all(promises)\n\n if (errors.length > 0) {\n throw new QueryError(errors)\n }\n\n return joinsQuery\n}\n"],"names":["executeAccess","QueryError","deepCopyObjectSimple","combineQueries","validateQueryPaths","sanitizeJoinQuery","collectionConfig","joins","joinsQuery","overrideAccess","req","errors","promises","collectionSlug","field","joinPath","joinCollectionConfig","payload","collections","config","accessResult","disableErrors","access","read","joinQuery","where","push","Promise","all","length"],"mappings":"AAGA,OAAOA,mBAAmB,2BAA0B;AACpD,SAASC,UAAU,QAAQ,0BAAyB;AACpD,SAASC,oBAAoB,QAAQ,iCAAgC;AACrE,SAASC,cAAc,QAAQ,sBAAqB;AACpD,SAASC,kBAAkB,QAAQ,0CAAyC;AAS5E;;;;CAIC,GACD,OAAO,MAAMC,oBAAoB,OAAO,EACtCC,gBAAgB,EAChBC,OAAOC,UAAU,EACjBC,cAAc,EACdC,GAAG,EACE;IACL,IAAIF,eAAe,OAAO;QACxB,OAAO;IACT;IAEA,IAAI,CAACA,YAAY;QACfA,aAAa,CAAC;IAChB;IAEA,MAAMG,SAA6B,EAAE;IACrC,MAAMC,WAA4B,EAAE;IAEpC,IAAK,MAAMC,kBAAkBP,iBAAiBC,KAAK,CAAE;QACnD,KAAK,MAAM,EAAEO,KAAK,EAAEC,QAAQ,EAAE,IAAIT,iBAAiBC,KAAK,CAACM,eAAe,CAAE;YACxE,IAAIL,UAAU,CAACO,SAAS,KAAK,OAAO;gBAClC;YACF;YAEA,MAAMC,uBAAuBN,IAAIO,OAAO,CAACC,WAAW,CAACL,eAAe,CAACM,MAAM;YAE3E,MAAMC,eAAe,CAACX,iBAClB,MAAMT,cAAc;gBAAEqB,eAAe;gBAAMX;YAAI,GAAGM,qBAAqBM,MAAM,CAACC,IAAI,IAClF;YAEJ,IAAIH,iBAAiB,OAAO;gBAC1BZ,UAAU,CAACO,SAAS,GAAG;gBACvB;YACF;YAEA,IAAI,CAACP,UAAU,CAACO,SAAS,EAAE;gBACzBP,UAAU,CAACO,SAAS,GAAG,CAAC;YAC1B;YAEA,MAAMS,YAAYhB,UAAU,CAACO,SAAS;YAEtC,IAAI,CAACS,UAAUC,KAAK,EAAE;gBACpBD,UAAUC,KAAK,GAAG,CAAC;YACrB;YAEA,IAAIX,MAAMW,KAAK,EAAE;gBACfD,UAAUC,KAAK,GAAGtB,eAAeqB,UAAUC,KAAK,EAAEX,MAAMW,KAAK;YAC/D;YAEAb,SAASc,IAAI,CACXtB,mBAAmB;gBACjBE,kBAAkBU;gBAClBL;gBACAF;gBACAC;gBACA,qFAAqF;gBACrFe,OAAOvB,qBAAqBsB,UAAUC,KAAK;YAC7C;YAGF,IAAI,OAAOL,iBAAiB,UAAU;gBACpCI,UAAUC,KAAK,GAAGtB,eAAeqB,UAAUC,KAAK,EAAEL;YACpD;QACF;IACF;IAEA,MAAMO,QAAQC,GAAG,CAAChB;IAElB,IAAID,OAAOkB,MAAM,GAAG,GAAG;QACrB,MAAM,IAAI5B,WAAWU;IACvB;IAEA,OAAOH;AACT,EAAC"}
|
package/dist/exports/shared.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { generateCookie, generateExpiredPayloadCookie, generatePayloadCookie, getCookieExpiration, parseCookies, } from '../auth/cookies.js';
|
|
2
|
+
export { getLoginOptions } from '../auth/getLoginOptions.js';
|
|
2
3
|
export { getFromImportMap } from '../bin/generateImportMap/getFromImportMap.js';
|
|
3
4
|
export { parsePayloadComponent } from '../bin/generateImportMap/parsePayloadComponent.js';
|
|
4
5
|
export { defaults as collectionDefaults } from '../collections/config/defaults.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/exports/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,4BAA4B,EAC5B,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,GACb,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAA;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAA;AACzF,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAElF,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,EACzB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,wBAAwB,GACzB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE1D,cAAc,0BAA0B,CAAA;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAE/C,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,0CAA0C,GAC3C,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACL,SAAS,EACT,2BAA2B,EAC3B,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AAErE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAE/D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAEjE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAE7D,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,gCAAgC,GACjC,MAAM,kCAAkC,CAAA;AAEzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAA;AAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAE3D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,qCAAqC,CAAA;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAA"}
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/exports/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,4BAA4B,EAC5B,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,GACb,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAA;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAA;AACzF,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAElF,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,EACzB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,wBAAwB,GACzB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE1D,cAAc,0BAA0B,CAAA;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAE/C,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,0CAA0C,GAC3C,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACL,SAAS,EACT,2BAA2B,EAC3B,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AAErE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAE/D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAEjE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAE7D,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,gCAAgC,GACjC,MAAM,kCAAkC,CAAA;AAEzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAA;AAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAE3D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,qCAAqC,CAAA;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAA"}
|
package/dist/exports/shared.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { generateCookie, generateExpiredPayloadCookie, generatePayloadCookie, getCookieExpiration, parseCookies } from '../auth/cookies.js';
|
|
2
|
+
export { getLoginOptions } from '../auth/getLoginOptions.js';
|
|
2
3
|
export { getFromImportMap } from '../bin/generateImportMap/getFromImportMap.js';
|
|
3
4
|
export { parsePayloadComponent } from '../bin/generateImportMap/parsePayloadComponent.js';
|
|
4
5
|
export { defaults as collectionDefaults } from '../collections/config/defaults.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/exports/shared.ts"],"sourcesContent":["export {\n generateCookie,\n generateExpiredPayloadCookie,\n generatePayloadCookie,\n getCookieExpiration,\n parseCookies,\n} from '../auth/cookies.js'\nexport { getFromImportMap } from '../bin/generateImportMap/getFromImportMap.js'\nexport { parsePayloadComponent } from '../bin/generateImportMap/parsePayloadComponent.js'\nexport { defaults as collectionDefaults } from '../collections/config/defaults.js'\n\nexport { serverProps } from '../config/types.js'\n\nexport {\n fieldAffectsData,\n fieldHasMaxDepth,\n fieldHasSubFields,\n fieldIsArrayType,\n fieldIsBlockType,\n fieldIsGroupType,\n fieldIsLocalized,\n fieldIsPresentationalOnly,\n fieldIsSidebar,\n fieldIsVirtual,\n fieldSupportsMany,\n optionIsObject,\n optionIsValue,\n optionsAreObjects,\n tabHasName,\n valueIsValueWithRelation,\n} from '../fields/config/types.js'\n\nexport { getFieldPaths } from '../fields/getFieldPaths.js'\n\nexport * from '../fields/validations.js'\n\nexport { validOperators } from '../types/constants.js'\n\nexport { formatFilesize } from '../uploads/formatFilesize.js'\n\nexport { isImage } from '../uploads/isImage.js'\n\nexport {\n deepCopyObject,\n deepCopyObjectComplex,\n deepCopyObjectSimple,\n deepCopyObjectSimpleWithoutReactComponents,\n} from '../utilities/deepCopyObject.js'\nexport {\n deepMerge,\n deepMergeWithCombinedArrays,\n deepMergeWithReactComponents,\n deepMergeWithSourceArrays,\n} from '../utilities/deepMerge.js'\n\nexport { fieldSchemaToJSON } from '../utilities/fieldSchemaToJSON.js'\n\nexport { getDataByPath } from '../utilities/getDataByPath.js'\nexport { getSelectMode } from '../utilities/getSelectMode.js'\nexport { getSiblingData } from '../utilities/getSiblingData.js'\n\nexport { getUniqueListBy } from '../utilities/getUniqueListBy.js'\n\nexport { isNumber } from '../utilities/isNumber.js'\n\nexport { isPlainObject } from '../utilities/isPlainObject.js'\n\nexport {\n isReactClientComponent,\n isReactComponentOrFunction,\n isReactServerComponentOrFunction,\n} from '../utilities/isReactComponent.js'\n\nexport { reduceFieldsToValues } from '../utilities/reduceFieldsToValues.js'\n\nexport { setsAreEqual } from '../utilities/setsAreEqual.js'\n\nexport { default as toKebabCase } from '../utilities/toKebabCase.js'\n\nexport { unflatten } from '../utilities/unflatten.js'\n\nexport { validateMimeType } from '../utilities/validateMimeType.js'\nexport { wait } from '../utilities/wait.js'\nexport { default as wordBoundariesRegex } from '../utilities/wordBoundariesRegex.js'\nexport { versionDefaults } from '../versions/defaults.js'\nexport { deepMergeSimple } from '@payloadcms/translations/utilities'\n"],"names":["generateCookie","generateExpiredPayloadCookie","generatePayloadCookie","getCookieExpiration","parseCookies","getFromImportMap","parsePayloadComponent","defaults","collectionDefaults","serverProps","fieldAffectsData","fieldHasMaxDepth","fieldHasSubFields","fieldIsArrayType","fieldIsBlockType","fieldIsGroupType","fieldIsLocalized","fieldIsPresentationalOnly","fieldIsSidebar","fieldIsVirtual","fieldSupportsMany","optionIsObject","optionIsValue","optionsAreObjects","tabHasName","valueIsValueWithRelation","getFieldPaths","validOperators","formatFilesize","isImage","deepCopyObject","deepCopyObjectComplex","deepCopyObjectSimple","deepCopyObjectSimpleWithoutReactComponents","deepMerge","deepMergeWithCombinedArrays","deepMergeWithReactComponents","deepMergeWithSourceArrays","fieldSchemaToJSON","getDataByPath","getSelectMode","getSiblingData","getUniqueListBy","isNumber","isPlainObject","isReactClientComponent","isReactComponentOrFunction","isReactServerComponentOrFunction","reduceFieldsToValues","setsAreEqual","default","toKebabCase","unflatten","validateMimeType","wait","wordBoundariesRegex","versionDefaults","deepMergeSimple"],"mappings":"AAAA,SACEA,cAAc,EACdC,4BAA4B,EAC5BC,qBAAqB,EACrBC,mBAAmB,EACnBC,YAAY,QACP,qBAAoB;AAC3B,SAASC,gBAAgB,QAAQ,+CAA8C;AAC/E,SAASC,qBAAqB,QAAQ,oDAAmD;AACzF,SAASC,YAAYC,kBAAkB,QAAQ,oCAAmC;AAElF,SAASC,WAAW,QAAQ,qBAAoB;AAEhD,SACEC,gBAAgB,EAChBC,gBAAgB,EAChBC,iBAAiB,EACjBC,gBAAgB,EAChBC,gBAAgB,EAChBC,gBAAgB,EAChBC,gBAAgB,EAChBC,yBAAyB,EACzBC,cAAc,EACdC,cAAc,EACdC,iBAAiB,EACjBC,cAAc,EACdC,aAAa,EACbC,iBAAiB,EACjBC,UAAU,EACVC,wBAAwB,QACnB,4BAA2B;AAElC,SAASC,aAAa,QAAQ,6BAA4B;AAE1D,cAAc,2BAA0B;AAExC,SAASC,cAAc,QAAQ,wBAAuB;AAEtD,SAASC,cAAc,QAAQ,+BAA8B;AAE7D,SAASC,OAAO,QAAQ,wBAAuB;AAE/C,SACEC,cAAc,EACdC,qBAAqB,EACrBC,oBAAoB,EACpBC,0CAA0C,QACrC,iCAAgC;AACvC,SACEC,SAAS,EACTC,2BAA2B,EAC3BC,4BAA4B,EAC5BC,yBAAyB,QACpB,4BAA2B;AAElC,SAASC,iBAAiB,QAAQ,oCAAmC;AAErE,SAASC,aAAa,QAAQ,gCAA+B;AAC7D,SAASC,aAAa,QAAQ,gCAA+B;AAC7D,SAASC,cAAc,QAAQ,iCAAgC;AAE/D,SAASC,eAAe,QAAQ,kCAAiC;AAEjE,SAASC,QAAQ,QAAQ,2BAA0B;AAEnD,SAASC,aAAa,QAAQ,gCAA+B;AAE7D,SACEC,sBAAsB,EACtBC,0BAA0B,EAC1BC,gCAAgC,QAC3B,mCAAkC;AAEzC,SAASC,oBAAoB,QAAQ,uCAAsC;AAE3E,SAASC,YAAY,QAAQ,+BAA8B;AAE3D,SAASC,WAAWC,WAAW,QAAQ,8BAA6B;AAEpE,SAASC,SAAS,QAAQ,4BAA2B;AAErD,SAASC,gBAAgB,QAAQ,mCAAkC;AACnE,SAASC,IAAI,QAAQ,uBAAsB;AAC3C,SAASJ,WAAWK,mBAAmB,QAAQ,sCAAqC;AACpF,SAASC,eAAe,QAAQ,0BAAyB;AACzD,SAASC,eAAe,QAAQ,qCAAoC"}
|
|
1
|
+
{"version":3,"sources":["../../src/exports/shared.ts"],"sourcesContent":["export {\n generateCookie,\n generateExpiredPayloadCookie,\n generatePayloadCookie,\n getCookieExpiration,\n parseCookies,\n} from '../auth/cookies.js'\nexport { getLoginOptions } from '../auth/getLoginOptions.js'\nexport { getFromImportMap } from '../bin/generateImportMap/getFromImportMap.js'\nexport { parsePayloadComponent } from '../bin/generateImportMap/parsePayloadComponent.js'\nexport { defaults as collectionDefaults } from '../collections/config/defaults.js'\n\nexport { serverProps } from '../config/types.js'\n\nexport {\n fieldAffectsData,\n fieldHasMaxDepth,\n fieldHasSubFields,\n fieldIsArrayType,\n fieldIsBlockType,\n fieldIsGroupType,\n fieldIsLocalized,\n fieldIsPresentationalOnly,\n fieldIsSidebar,\n fieldIsVirtual,\n fieldSupportsMany,\n optionIsObject,\n optionIsValue,\n optionsAreObjects,\n tabHasName,\n valueIsValueWithRelation,\n} from '../fields/config/types.js'\n\nexport { getFieldPaths } from '../fields/getFieldPaths.js'\n\nexport * from '../fields/validations.js'\n\nexport { validOperators } from '../types/constants.js'\n\nexport { formatFilesize } from '../uploads/formatFilesize.js'\n\nexport { isImage } from '../uploads/isImage.js'\n\nexport {\n deepCopyObject,\n deepCopyObjectComplex,\n deepCopyObjectSimple,\n deepCopyObjectSimpleWithoutReactComponents,\n} from '../utilities/deepCopyObject.js'\nexport {\n deepMerge,\n deepMergeWithCombinedArrays,\n deepMergeWithReactComponents,\n deepMergeWithSourceArrays,\n} from '../utilities/deepMerge.js'\n\nexport { fieldSchemaToJSON } from '../utilities/fieldSchemaToJSON.js'\n\nexport { getDataByPath } from '../utilities/getDataByPath.js'\nexport { getSelectMode } from '../utilities/getSelectMode.js'\nexport { getSiblingData } from '../utilities/getSiblingData.js'\n\nexport { getUniqueListBy } from '../utilities/getUniqueListBy.js'\n\nexport { isNumber } from '../utilities/isNumber.js'\n\nexport { isPlainObject } from '../utilities/isPlainObject.js'\n\nexport {\n isReactClientComponent,\n isReactComponentOrFunction,\n isReactServerComponentOrFunction,\n} from '../utilities/isReactComponent.js'\n\nexport { reduceFieldsToValues } from '../utilities/reduceFieldsToValues.js'\n\nexport { setsAreEqual } from '../utilities/setsAreEqual.js'\n\nexport { default as toKebabCase } from '../utilities/toKebabCase.js'\n\nexport { unflatten } from '../utilities/unflatten.js'\n\nexport { validateMimeType } from '../utilities/validateMimeType.js'\nexport { wait } from '../utilities/wait.js'\nexport { default as wordBoundariesRegex } from '../utilities/wordBoundariesRegex.js'\nexport { versionDefaults } from '../versions/defaults.js'\nexport { deepMergeSimple } from '@payloadcms/translations/utilities'\n"],"names":["generateCookie","generateExpiredPayloadCookie","generatePayloadCookie","getCookieExpiration","parseCookies","getLoginOptions","getFromImportMap","parsePayloadComponent","defaults","collectionDefaults","serverProps","fieldAffectsData","fieldHasMaxDepth","fieldHasSubFields","fieldIsArrayType","fieldIsBlockType","fieldIsGroupType","fieldIsLocalized","fieldIsPresentationalOnly","fieldIsSidebar","fieldIsVirtual","fieldSupportsMany","optionIsObject","optionIsValue","optionsAreObjects","tabHasName","valueIsValueWithRelation","getFieldPaths","validOperators","formatFilesize","isImage","deepCopyObject","deepCopyObjectComplex","deepCopyObjectSimple","deepCopyObjectSimpleWithoutReactComponents","deepMerge","deepMergeWithCombinedArrays","deepMergeWithReactComponents","deepMergeWithSourceArrays","fieldSchemaToJSON","getDataByPath","getSelectMode","getSiblingData","getUniqueListBy","isNumber","isPlainObject","isReactClientComponent","isReactComponentOrFunction","isReactServerComponentOrFunction","reduceFieldsToValues","setsAreEqual","default","toKebabCase","unflatten","validateMimeType","wait","wordBoundariesRegex","versionDefaults","deepMergeSimple"],"mappings":"AAAA,SACEA,cAAc,EACdC,4BAA4B,EAC5BC,qBAAqB,EACrBC,mBAAmB,EACnBC,YAAY,QACP,qBAAoB;AAC3B,SAASC,eAAe,QAAQ,6BAA4B;AAC5D,SAASC,gBAAgB,QAAQ,+CAA8C;AAC/E,SAASC,qBAAqB,QAAQ,oDAAmD;AACzF,SAASC,YAAYC,kBAAkB,QAAQ,oCAAmC;AAElF,SAASC,WAAW,QAAQ,qBAAoB;AAEhD,SACEC,gBAAgB,EAChBC,gBAAgB,EAChBC,iBAAiB,EACjBC,gBAAgB,EAChBC,gBAAgB,EAChBC,gBAAgB,EAChBC,gBAAgB,EAChBC,yBAAyB,EACzBC,cAAc,EACdC,cAAc,EACdC,iBAAiB,EACjBC,cAAc,EACdC,aAAa,EACbC,iBAAiB,EACjBC,UAAU,EACVC,wBAAwB,QACnB,4BAA2B;AAElC,SAASC,aAAa,QAAQ,6BAA4B;AAE1D,cAAc,2BAA0B;AAExC,SAASC,cAAc,QAAQ,wBAAuB;AAEtD,SAASC,cAAc,QAAQ,+BAA8B;AAE7D,SAASC,OAAO,QAAQ,wBAAuB;AAE/C,SACEC,cAAc,EACdC,qBAAqB,EACrBC,oBAAoB,EACpBC,0CAA0C,QACrC,iCAAgC;AACvC,SACEC,SAAS,EACTC,2BAA2B,EAC3BC,4BAA4B,EAC5BC,yBAAyB,QACpB,4BAA2B;AAElC,SAASC,iBAAiB,QAAQ,oCAAmC;AAErE,SAASC,aAAa,QAAQ,gCAA+B;AAC7D,SAASC,aAAa,QAAQ,gCAA+B;AAC7D,SAASC,cAAc,QAAQ,iCAAgC;AAE/D,SAASC,eAAe,QAAQ,kCAAiC;AAEjE,SAASC,QAAQ,QAAQ,2BAA0B;AAEnD,SAASC,aAAa,QAAQ,gCAA+B;AAE7D,SACEC,sBAAsB,EACtBC,0BAA0B,EAC1BC,gCAAgC,QAC3B,mCAAkC;AAEzC,SAASC,oBAAoB,QAAQ,uCAAsC;AAE3E,SAASC,YAAY,QAAQ,+BAA8B;AAE3D,SAASC,WAAWC,WAAW,QAAQ,8BAA6B;AAEpE,SAASC,SAAS,QAAQ,4BAA2B;AAErD,SAASC,gBAAgB,QAAQ,mCAAkC;AACnE,SAASC,IAAI,QAAQ,uBAAsB;AAC3C,SAASJ,WAAWK,mBAAmB,QAAQ,sCAAqC;AACpF,SAASC,eAAe,QAAQ,0BAAyB;AACzD,SAASC,eAAe,QAAQ,qCAAoC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "payload",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.0",
|
|
4
4
|
"description": "Node, React, Headless CMS and Application Framework built on Next.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"admin panel",
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
"tsx": "4.19.2",
|
|
98
98
|
"uuid": "10.0.0",
|
|
99
99
|
"ws": "^8.16.0",
|
|
100
|
-
"@payloadcms/translations": "3.
|
|
100
|
+
"@payloadcms/translations": "3.2.0"
|
|
101
101
|
},
|
|
102
102
|
"devDependencies": {
|
|
103
103
|
"@hyrious/esbuild-plugin-commonjs": "^0.2.4",
|