graphql changes

This commit is contained in:
Jarrod Flesch
2024-02-06 12:08:52 -05:00
parent 8a81d59240
commit 826b14b54f
9 changed files with 66 additions and 48 deletions

View File

@@ -44,7 +44,7 @@
"devDependencies": {
"@payloadcms/eslint-config": "workspace:*",
"payload": "workspace:*",
"sass": "^1.69.5",
"sass": "^1.70.0",
"ts-essentials": "7.0.3"
},
"dependencies": {
@@ -55,11 +55,11 @@
"busboy": "^1.6.0",
"deep-equal": "2.2.2",
"graphql": "16.8.1",
"graphql-http": "1.21.0",
"graphql-playground-html": "^1.6.30",
"graphql-playground-html": "1.6.30",
"graphql-query-complexity": "0.12.0",
"graphql-scalars": "1.22.2",
"graphql-type-json": "0.3.2",
"graphql-yoga": "^5.1.1",
"path-to-regexp": "^6.2.1",
"pluralize": "8.0.0",
"react-diff-viewer-continued": "3.2.6",

View File

@@ -2,6 +2,7 @@ import { loginOperation } from 'payload/operations'
import type { Collection } from 'payload/types'
import isolateTransactionID from '../../utilities/isolateTransactionID'
import { generatePayloadCookie } from '../../../utilities/cookies'
function loginResolver(collection: Collection) {
async function resolver(_, args, context) {
@@ -15,7 +16,14 @@ function loginResolver(collection: Collection) {
req: isolateTransactionID(context.req),
}
const result = loginOperation(options)
const result = await loginOperation(options)
const cookie = generatePayloadCookie({
token: result.token,
payload: context.req.payload,
collectionConfig: context.req.collection.config,
})
context.headers.set('Set-Cookie', cookie)
return result
}

View File

@@ -2,6 +2,7 @@ import { logoutOperation } from 'payload/operations'
import type { Collection } from 'payload/types'
import isolateTransactionID from '../../utilities/isolateTransactionID'
import { generateExpiredPayloadCookie } from '../../../utilities/cookies'
function logoutResolver(collection: Collection): any {
async function resolver(_, args, context) {
@@ -11,7 +12,11 @@ function logoutResolver(collection: Collection): any {
}
const result = await logoutOperation(options)
const expiredCookie = generateExpiredPayloadCookie({
collectionConfig: context.req.collection.config,
payload: context.req.payload,
})
context.headers.set('Set-Cookie', expiredCookie)
return result
}

View File

@@ -3,6 +3,7 @@ import type { Collection } from 'payload/types'
import isolateTransactionID from '../../utilities/isolateTransactionID'
import { extractJWT } from '../../../utilities/jwt'
import { generatePayloadCookie } from '../../../utilities/cookies'
function refreshResolver(collection: Collection) {
async function resolver(_, args, context) {
@@ -22,7 +23,12 @@ function refreshResolver(collection: Collection) {
}
const result = await refreshOperation(options)
const cookie = generatePayloadCookie({
token: result.refreshedToken,
payload: context.req.payload,
collectionConfig: context.req.collection.config,
})
context.headers.set('Set-Cookie', cookie)
return result
}

View File

@@ -2,6 +2,7 @@ import { resetPasswordOperation } from 'payload/operations'
import type { Collection } from 'payload/types'
import isolateTransactionID from '../../utilities/isolateTransactionID'
import { generatePayloadCookie } from '../../../utilities/cookies'
function resetPasswordResolver(collection: Collection) {
async function resolver(_, args, context) {
@@ -17,7 +18,12 @@ function resetPasswordResolver(collection: Collection) {
}
const result = await resetPasswordOperation(options)
const cookie = generatePayloadCookie({
token: result.token,
payload: context.req.payload,
collectionConfig: context.req.collection.config,
})
context.headers.set('Set-Cookie', cookie)
return result
}

View File

@@ -1,10 +1,10 @@
import config from 'payload-config'
import { GraphQLError } from 'graphql'
import { createSchema, createYoga } from 'graphql-yoga'
import httpStatus from 'http-status'
import type { Payload, CollectionAfterErrorHook } from 'payload/types'
import type { GraphQLFormattedError } from 'graphql'
import { createPayloadRequest } from '../../utilities/createPayloadRequest'
import { createHandler } from 'graphql-http/lib/use/fetch'
const handleError = async (
payload: Payload,
@@ -43,40 +43,40 @@ const handleError = async (
}
export const POST = async (request: Request) => {
const originalRequest = request.clone()
const req = await createPayloadRequest({
request,
config,
})
const { payload } = req
const headers = new Headers()
const copyOfSchema = req.payload.schema
const afterErrorHook =
typeof payload.config.hooks.afterError === 'function' ? payload.config.hooks.afterError : null
return createHandler({
context: { req, headers },
onOperation: async (request, args, result) => {
const response =
typeof payload.extensions === 'function'
? await payload.extensions({
args,
req: request,
result,
})
: result
if (response.errors) {
const errors = (await Promise.all(
result.errors.map((error) => {
return handleError(payload, error, payload.config.debug, afterErrorHook)
}),
)) as GraphQLError[]
// errors type should be FormattedGraphQLError[] but onOperation has a return type of ExecutionResult instead of FormattedExecutionResult
return { ...response, errors }
const schema = createSchema({
typeDefs: /* GraphQL */ `
type Query {
greetings: String
}
return response
`,
resolvers: {
Query: {
greetings: () => 'This is the `greetings` field of the root `Query` type',
},
},
})
const apiResponse = await createYoga({
schema: copyOfSchema,
// While using Next.js file convention for routing, we need to configure Yoga to use the correct endpoint
graphqlEndpoint: '/api/graphql',
// Yoga needs to know how to create a valid Next response
fetchAPI: { Response },
})(originalRequest)
console.log('schema', Object.keys(schema))
console.log('payload schema', typeof req.payload.schema)
return new Response(apiResponse.body, {
headers: {
...apiResponse.headers,
},
schema: payload.schema,
validationRules: (request, args, defaultRules) =>
defaultRules.concat(payload.validationRules(args)),
})
}

View File

@@ -18,7 +18,7 @@ import { DateTimeResolver, EmailAddressResolver } from 'graphql-scalars'
/* eslint-disable no-use-before-define */
import { GraphQLJSON } from 'graphql-type-json'
import type { RichTextAdapter } from '../../admin/types'
import type { RichTextAdapter } from 'payload/types'
import type {
ArrayField,
BlockField,
@@ -41,11 +41,11 @@ import type {
TextField,
TextareaField,
UploadField,
} from '../../fields/config/types'
import type { Payload } from '../../types'
} from 'payload/types'
import type { Payload } from 'payload'
import { tabHasName } from '../../fields/config/types'
import { toWords } from '../../utilities/formatLabels'
import { tabHasName } from 'payload/types'
import { toWords } from 'payload/utilities'
import combineParentName from '../utilities/combineParentName'
import formatName from '../utilities/formatName'
import formatOptions from '../utilities/formatOptions'

View File

@@ -54,11 +54,6 @@
"deepmerge": "4.3.1",
"file-type": "16.5.4",
"find-up": "4.1.0",
"graphql": "16.8.1",
"graphql-http": "1.21.0",
"graphql-query-complexity": "0.12.0",
"graphql-scalars": "1.22.2",
"graphql-type-json": "0.3.2",
"http-status": "1.6.2",
"is-plain-object": "5.0.0",
"json-schema-to-typescript": "11.0.3",

View File

@@ -1,2 +0,0 @@
export { default as buildPaginatedListType } from './../graphql/schema/buildPaginatedListType'
export { default as GraphQL } from 'graphql'