diff --git a/packages/api/src/utils/gql-utils.ts b/packages/api/src/utils/gql-utils.ts new file mode 100644 index 000000000..ef5986f28 --- /dev/null +++ b/packages/api/src/utils/gql-utils.ts @@ -0,0 +1,26 @@ +import { ResolverFn } from '../generated/graphql' +import { Claims, WithDataSourcesContext } 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, + WithDataSourcesContext & { claims: Claims }, + TArgs + > +): ResolverFn { + 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 + } +}