{"version":3,"file":"route.cjs","sources":["../../src/preview/route.ts"],"sourcesContent":["import {validatePreviewUrl} from '@sanity/preview-url-secret'\nimport type {HydrogenSession} from '@shopify/hydrogen'\nimport {type ActionFunction, json, type LoaderFunction, redirect} from '@shopify/remix-oxygen'\n\nimport type {SanityContext} from '../context'\nimport {assertSession} from '../utils'\n\n/**\n * A `POST` request to this route will exit preview mode\n */\nexport const action: ActionFunction = async ({context, request}) => {\n  if (request.method !== 'POST') {\n    return json({message: 'Method not allowed'}, 405)\n  }\n\n  try {\n    const {session} = context\n    if (!assertSession(session)) {\n      throw new Error('Session is not an instance of HydrogenSession')\n    }\n\n    // TODO: make this a callback? `onExitPreview`?\n    await session.unset('projectId')\n\n    // TODO: confirm that the redirect and setting cookie has to happen here?\n    return redirect('/')\n  } catch (error) {\n    console.error(error)\n    throw new Response('Unable to disable preview mode. Please check your preview configuration', {\n      status: 500,\n    })\n  }\n}\n\n/**\n * A `GET` request to this route will enter preview mode\n */\nexport const loader: LoaderFunction = async ({context, request}) => {\n  try {\n    // TODO: to remove\n    const {sanity, session} = context as {sanity: SanityContext; session: HydrogenSession}\n    const projectId = sanity.client.config().projectId\n\n    if (!sanity.preview) {\n      return new Response('Preview mode is not enabled in this environment.', {status: 403})\n    }\n\n    if (!sanity.preview.token) {\n      throw new Error('Enabling preview mode requires a token.')\n    }\n\n    if (!projectId) {\n      throw new Error('No `projectId` found in the client config.')\n    }\n\n    if (!assertSession(session)) {\n      throw new Error('Session is not an instance of HydrogenSession')\n    }\n\n    const clientWithToken = sanity.client.withConfig({\n      useCdn: false,\n      token: sanity.preview.token,\n    })\n\n    const {isValid, redirectTo = '/'} = await validatePreviewUrl(clientWithToken, request.url)\n\n    if (!isValid) {\n      return new Response('Invalid secret', {status: 401})\n    }\n\n    // TODO: make this a callback? `onEnterPreview`?\n    await session.set('projectId', projectId)\n\n    // TODO: confirm that the redirect and setting cookie has to happen here?\n    return redirect(redirectTo)\n  } catch (error) {\n    console.error(error)\n    throw new Response('Unable to enable preview mode. Please check your preview configuration', {\n      status: 500,\n    })\n  }\n}\n"],"names":["exports","action","async","context","request","method","json","message","session","assertSession","Error","unset","redirect","error","console","Response","status","loader","sanity","projectId","client","config","preview","token","clientWithToken","withConfig","useCdn","isValid","redirectTo","validatePreviewUrl","url","set"],"mappings":"yLAiFAA,QAAAC,OAvEsCC,OAAQC,UAASC,cACrD,GAAuB,SAAnBA,EAAQC,OACV,OAAOC,EAAKA,KAAA,CAACC,QAAS,sBAAuB,KAG3C,IACI,MAAAC,QAACA,GAAWL,EACd,IAACM,IAAcD,GACX,MAAA,IAAIE,MAAM,iDAIlB,aAAMF,EAAQG,MAAM,aAGbC,EAAAA,SAAS,WACTC,GACP,MAAAC,QAAQD,MAAMA,GACR,IAAIE,SAAS,0EAA2E,CAC5FC,OAAQ,KACT,GAmDLhB,QAAAiB,OA5CsCf,OAAQC,UAASC,cACjD,IAEI,MAAAc,OAACA,UAAQV,GAAWL,EACpBgB,EAAYD,EAAOE,OAAOC,SAASF,UAEzC,IAAKD,EAAOI,QACV,OAAO,IAAIP,SAAS,mDAAoD,CAACC,OAAQ,MAG/E,IAACE,EAAOI,QAAQC,MACZ,MAAA,IAAIb,MAAM,2CAGlB,IAAKS,EACG,MAAA,IAAIT,MAAM,8CAGd,IAACD,IAAcD,GACX,MAAA,IAAIE,MAAM,iDAGZ,MAAAc,EAAkBN,EAAOE,OAAOK,WAAW,CAC/CC,QAAQ,EACRH,MAAOL,EAAOI,QAAQC,SAGlBI,QAACA,EAAAC,WAASA,EAAa,WAAaC,qBAAmBL,EAAiBpB,EAAQ0B,KAEtF,OAAKH,SAKCnB,EAAQuB,IAAI,YAAaZ,GAGxBP,EAAAA,SAASgB,IAPP,IAAIb,SAAS,iBAAkB,CAACC,OAAQ,YAQ1CH,GACP,MAAAC,QAAQD,MAAMA,GACR,IAAIE,SAAS,yEAA0E,CAC3FC,OAAQ,KACT"}