import type { ServerResponse } from 'http' import type { OperationContext, OperationOptions, } from '@vercel/commerce/api/operations' import type { LoginOperation } from '../../types/login' import type { AuthenticateMutation } from '../../../schema' import type { RecursivePartial } from '../utils/types' import loginMutation from '../mutations/authenticate' import type { OpenCommerceConfig, Provider } from '..' export default function loginOperation({ commerce, }: OperationContext) { async function login(opts: { variables: T['variables'] config?: OpenCommerceConfig res: ServerResponse }): Promise async function login( opts: { variables: T['variables'] config?: OpenCommerceConfig res: ServerResponse } & OperationOptions ): Promise async function login({ query = loginMutation, variables, res: response, config: cfg, }: { query?: string variables: T['variables'] res: ServerResponse config?: OpenCommerceConfig }): Promise { const { fetch } = commerce.getConfig(cfg) const { data } = await fetch>( query, { variables } ) return { result: data.authenticate?.tokens?.accessToken ?? undefined, } } return login }