diff --git a/packages/payload/src/auth/operations/local/forgotPassword.ts b/packages/payload/src/auth/operations/local/forgotPassword.ts index 450a7edb1f..8c39182ba8 100644 --- a/packages/payload/src/auth/operations/local/forgotPassword.ts +++ b/packages/payload/src/auth/operations/local/forgotPassword.ts @@ -1,4 +1,4 @@ -import type { GeneratedTypes } from '../../..' +import type { GeneratedTypes, RequestContext } from '../../..' import type { PayloadRequest } from '../../../express/types' import type { Payload } from '../../../payload' import type { Result } from '../forgotPassword' @@ -11,6 +11,7 @@ import forgotPassword from '../forgotPassword' export type Options = { collection: T + context?: RequestContext data: { email: string } @@ -25,12 +26,13 @@ async function localForgotPassword { const { collection: collectionSlug, + context, data, disableEmail, expiration, req = {} as PayloadRequest, } = options - setRequestContext(req) + setRequestContext(req, context) const collection = payload.collections[collectionSlug] diff --git a/packages/payload/src/auth/operations/local/login.ts b/packages/payload/src/auth/operations/local/login.ts index 8e4f0d4f04..188e68e9cd 100644 --- a/packages/payload/src/auth/operations/local/login.ts +++ b/packages/payload/src/auth/operations/local/login.ts @@ -1,6 +1,6 @@ import type { Response } from 'express' -import type { PayloadRequest } from '../../../express/types' +import type { PayloadRequest, RequestContext } from '../../../express/types' import type { GeneratedTypes } from '../../../index' import type { Payload } from '../../../payload' import type { Result } from '../login' @@ -13,6 +13,7 @@ import login from '../login' export type Options = { collection: TSlug + context?: RequestContext data: { email: string password: string @@ -32,6 +33,7 @@ async function localLogin( ): Promise { const { collection: collectionSlug, + context, data, depth, fallbackLocale, @@ -41,7 +43,7 @@ async function localLogin( res, showHiddenFields, } = options - setRequestContext(req) + setRequestContext(req, context) const collection = payload.collections[collectionSlug] diff --git a/packages/payload/src/auth/operations/local/resetPassword.ts b/packages/payload/src/auth/operations/local/resetPassword.ts index 1f15c0aa59..5aec9cdbfb 100644 --- a/packages/payload/src/auth/operations/local/resetPassword.ts +++ b/packages/payload/src/auth/operations/local/resetPassword.ts @@ -1,4 +1,4 @@ -import type { GeneratedTypes } from '../../../' +import type { GeneratedTypes, RequestContext } from '../../../' import type { PayloadRequest } from '../../../express/types' import type { Payload } from '../../../payload' import type { Result } from '../resetPassword' @@ -11,6 +11,7 @@ import resetPassword from '../resetPassword' export type Options = { collection: T + context?: RequestContext data: { password: string token: string @@ -23,9 +24,15 @@ async function localResetPassword payload: Payload, options: Options, ): Promise { - const { collection: collectionSlug, data, overrideAccess, req = {} as PayloadRequest } = options + const { + collection: collectionSlug, + context, + data, + overrideAccess, + req = {} as PayloadRequest, + } = options - setRequestContext(req) + setRequestContext(req, context) const collection = payload.collections[collectionSlug] diff --git a/packages/payload/src/auth/operations/local/unlock.ts b/packages/payload/src/auth/operations/local/unlock.ts index 603e74efe8..c40a826c37 100644 --- a/packages/payload/src/auth/operations/local/unlock.ts +++ b/packages/payload/src/auth/operations/local/unlock.ts @@ -1,4 +1,4 @@ -import type { GeneratedTypes } from '../../../' +import type { GeneratedTypes, RequestContext } from '../../../' import type { PayloadRequest } from '../../../express/types' import type { Payload } from '../../../payload' @@ -10,6 +10,7 @@ import unlock from '../unlock' export type Options = { collection: T + context?: RequestContext data: { email } @@ -23,11 +24,12 @@ async function localUnlock( ): Promise { const { collection: collectionSlug, + context, data, overrideAccess = true, req = {} as PayloadRequest, } = options - setRequestContext(req) + setRequestContext(req, context) const collection = payload.collections[collectionSlug] diff --git a/packages/payload/src/auth/operations/local/verifyEmail.ts b/packages/payload/src/auth/operations/local/verifyEmail.ts index 328e115706..1344b57d9b 100644 --- a/packages/payload/src/auth/operations/local/verifyEmail.ts +++ b/packages/payload/src/auth/operations/local/verifyEmail.ts @@ -1,4 +1,4 @@ -import type { GeneratedTypes } from '../../../' +import type { GeneratedTypes, RequestContext } from '../../../' import type { PayloadRequest } from '../../../express/types' import type { Payload } from '../../../payload' @@ -9,6 +9,7 @@ import verifyEmail from '../verifyEmail' export type Options = { collection: T + context?: RequestContext req?: PayloadRequest token: string } @@ -17,8 +18,8 @@ async function localVerifyEmail( payload: Payload, options: Options, ): Promise { - const { collection: collectionSlug, req = {} as PayloadRequest, token } = options - setRequestContext(req) + const { collection: collectionSlug, context, req = {} as PayloadRequest, token } = options + setRequestContext(req, context) const collection = payload.collections[collectionSlug] diff --git a/packages/payload/src/globals/operations/local/findOne.ts b/packages/payload/src/globals/operations/local/findOne.ts index a1f55f1625..f31436dca4 100644 --- a/packages/payload/src/globals/operations/local/findOne.ts +++ b/packages/payload/src/globals/operations/local/findOne.ts @@ -1,4 +1,4 @@ -import type { GeneratedTypes } from '../../..' +import type { GeneratedTypes, RequestContext } from '../../..' import type { PayloadRequest } from '../../../express/types' import type { Payload } from '../../../payload' import type { Document } from '../../../types' @@ -10,6 +10,7 @@ import { i18nInit } from '../../../translations/init' import findOne from '../findOne' export type Options = { + context?: RequestContext depth?: number draft?: boolean fallbackLocale?: string @@ -26,6 +27,7 @@ export default async function findOneLocal, ): Promise { const { + context, depth, draft = false, fallbackLocale = null, @@ -56,7 +58,7 @@ export default async function findOneLocal = { + context?: RequestContext depth?: number disableErrors?: boolean fallbackLocale?: string @@ -29,15 +30,16 @@ export default async function findVersionByIDLocal> { const { id, + context, depth, disableErrors = false, fallbackLocale = null, locale = payload.config.localization ? payload.config.localization?.defaultLocale : null, overrideAccess = true, + req: incomingReq, showHiddenFields, slug: globalSlug, user, - req: incomingReq, } = options const globalConfig = payload.globals.config.find((config) => config.slug === globalSlug) @@ -57,7 +59,7 @@ export default async function findVersionByIDLocal = { + context?: RequestContext depth?: number fallbackLocale?: string limit?: number @@ -31,6 +32,7 @@ export default async function findVersionsLocal, ): Promise>> { const { + context, depth, fallbackLocale = null, limit, @@ -62,7 +64,7 @@ export default async function findVersionsLocal = { + context?: RequestContext depth?: number fallbackLocale?: string id: string @@ -27,6 +28,7 @@ export default async function restoreVersionLocal { const { id, + context, depth, fallbackLocale = null, locale = payload.config.localization ? payload.config.localization?.defaultLocale : null, @@ -54,7 +56,7 @@ export default async function restoreVersionLocal = { + context?: RequestContext data: DeepPartial> depth?: number draft?: boolean @@ -29,6 +30,7 @@ export default async function updateLocal, ): Promise { const { + context, data, depth, draft, @@ -58,7 +60,7 @@ export default async function updateLocal { + if (context['field_beforeChange_GlobalAndField_override']) { + return context['field_beforeChange_GlobalAndField_override'] + } + return ( (context['field_beforeChange_GlobalAndField'] as string) + JSON.stringify(global) + diff --git a/test/hooks/int.spec.ts b/test/hooks/int.spec.ts index 6f3e9e490e..dd7e58856f 100644 --- a/test/hooks/int.spec.ts +++ b/test/hooks/int.spec.ts @@ -251,6 +251,22 @@ describe('Hooks', () => { expect(retrievedDoc.value).toEqual('data from local API') }) + it('should pass context from local API to global hooks', async () => { + const globalDocument = await payload.findGlobal({ + slug: dataHooksGlobalSlug, + }) + + expect(globalDocument.field_globalAndField).not.toEqual('data from local API context') + + const globalDocumentWithContext = await payload.findGlobal({ + slug: dataHooksGlobalSlug, + context: { + field_beforeChange_GlobalAndField_override: 'data from local API context', + }, + }) + expect(globalDocumentWithContext.field_globalAndField).toEqual('data from local API context') + }) + it('should pass context from rest API to hooks', async () => { const params = new URLSearchParams({ context_secretValue: 'data from rest API',