omnivore/packages/api/src/utils/gql-utils.ts
2024-06-20 15:47:52 +08:00

26 lines
776 B
TypeScript

import { ResolverFn } from '../generated/graphql'
import { Claims, ResolverContext } from '../resolvers/types'
export function authorized<
TSuccess,
TError extends { errorCodes: string[] },
/* eslint-disable @typescript-eslint/no-explicit-any */
TArgs = any,
TParent = any
/* eslint-enable @typescript-eslint/no-explicit-any */
>(
resolver: ResolverFn<
TSuccess | TError,
TParent,
ResolverContext & { claims: Claims; uid: string },
TArgs
>
): ResolverFn<TSuccess | TError, TParent, ResolverContext, TArgs> {
return (parent, args, ctx, info) => {
const { claims } = ctx
if (claims?.uid) {
return resolver(parent, args, { ...ctx, claims, uid: claims.uid }, info)
}
return { errorCodes: ['UNAUTHORIZED'] } as TError
}
}