diff --git a/packages/web/lib/networking/mutations/saveUrlMutation.ts b/packages/web/lib/networking/mutations/saveUrlMutation.ts index bfcb620a2..524ac2add 100644 --- a/packages/web/lib/networking/mutations/saveUrlMutation.ts +++ b/packages/web/lib/networking/mutations/saveUrlMutation.ts @@ -2,19 +2,17 @@ import { gql } from 'graphql-request' import { gqlFetcher } from '../networkHelpers' import { v4 as uuidv4 } from 'uuid' - - -type SaveLinkOutput = { +export type SaveLinkOutput = { jobId?: string url?: string clientRequestId?: string } -type SaveResponseData = { +export type SaveResponseData = { saveUrl?: SaveUrlData } -type SaveUrlData = { +export type SaveUrlData = { id: string url: string slug: string @@ -26,9 +24,7 @@ export async function saveUrlMutation( ): Promise { const clientRequestId = uuidv4() const mutation = gql` - mutation SaveUrl( - $input: SaveUrlInput! - ) { + mutation SaveUrl($input: SaveUrlInput!) { saveUrl(input: $input) { ... on SaveSuccess { url @@ -48,7 +44,7 @@ export async function saveUrlMutation( url, clientRequestId, source: 'add-link', - } + }, }) const output = data as SaveResponseData | undefined return { @@ -56,7 +52,8 @@ export async function saveUrlMutation( jobId: output?.saveUrl?.clientRequestId, clientRequestId: output?.saveUrl?.clientRequestId, } - } catch { + } catch (error) { + console.log('error savingUrl', { error }) return undefined } } diff --git a/packages/web/pages/api/save.ts b/packages/web/pages/api/save.ts index 045ceeeae..f651c93e0 100644 --- a/packages/web/pages/api/save.ts +++ b/packages/web/pages/api/save.ts @@ -1,5 +1,48 @@ import type { NextApiRequest, NextApiResponse } from 'next' -import { saveUrlMutation } from '../../lib/networking/mutations/saveUrlMutation' +import { + SaveResponseData, + saveUrlMutation, +} from '../../lib/networking/mutations/saveUrlMutation' +import { ssrFetcher } from '../../lib/networking/networkHelpers' +import { v4 as uuidv4 } from 'uuid' + +const saveUrl = async (req: NextApiRequest, url: URL) => { + const clientRequestId = uuidv4() + const mutation = ` + mutation SaveUrl($input: SaveUrlInput!) { + saveUrl(input: $input) { + ... on SaveSuccess { + url + clientRequestId + } + ... on SaveError { + errorCodes + message + } + } + } + ` + + try { + const data = await ssrFetcher({ req }, mutation, { + input: { + clientRequestId, + url: url.toString(), + source: 'api-save-url', + }, + }) + + const output = data as SaveResponseData | undefined + return { + url: output?.saveUrl?.url, + jobId: output?.saveUrl?.clientRequestId, + clientRequestId: output?.saveUrl?.clientRequestId, + } + } catch (error) { + console.log('error savingUrl', { error }) + return undefined + } +} // eslint-disable-next-line import/no-anonymous-default-export export default async ( @@ -8,7 +51,7 @@ export default async ( ): Promise => { const urlStr = req.query['url'] const url = new URL(urlStr as string) - const saveResult = await saveUrlMutation(url.toString()) + const saveResult = await saveUrl(req, url) console.log('saveResult: ', saveResult) if (saveResult?.jobId) { res.redirect(`/sr/${saveResult?.jobId}`)