import type { ServerResponse } from 'http' import type { OperationContext, OperationOptions, } from '@commerce/api/operations' import { ValidationError } from '@commerce/utils/errors' import type { LoginOperation } from '../../types/login' import type { LoginMutation } from '../../schema' import { Provider, VendureConfig } from '..' import { loginMutation } from '../../utils/mutations/log-in-mutation' export default function loginOperation({ commerce, }: OperationContext) { async function login(opts: { variables: T['variables'] config?: Partial res: ServerResponse }): Promise async function login( opts: { variables: T['variables'] config?: Partial res: ServerResponse } & OperationOptions ): Promise async function login({ query = loginMutation, variables, res: response, config: cfg, }: { query?: string variables: T['variables'] res: ServerResponse config?: Partial }): Promise { const config = commerce.getConfig(cfg) const { data, res } = await config.fetch(query, { variables, }) switch (data.login.__typename) { case 'NativeAuthStrategyError': case 'InvalidCredentialsError': case 'NotVerifiedError': throw new ValidationError({ code: data.login.errorCode, message: data.login.message, }) } return { result: data.login.id, } } return login }