{"version":3,"file":"auth-callback.mjs","sources":["../../../../src/auth/auth-callback.ts"],"sourcesContent":["import {Request, Response} from 'express';\nimport {\n  BotActivityDetected,\n  CookieNotFound,\n  privacyTopics,\n  InvalidOAuthError,\n  Session,\n  Shopify,\n} from '@shopify/shopify-api';\n\nimport {AppConfigInterface} from '../config-types';\nimport {redirectToAuth} from '../redirect-to-auth';\n\nimport {AuthCallbackParams} from './types';\n\nexport async function authCallback({\n  req,\n  res,\n  api,\n  config,\n}: AuthCallbackParams): Promise<boolean> {\n  try {\n    const callbackResponse = await api.auth.callback({\n      rawRequest: req,\n      rawResponse: res,\n    });\n\n    config.logger.debug('Callback is valid, storing session', {\n      shop: callbackResponse.session.shop,\n      isOnline: callbackResponse.session.isOnline,\n    });\n\n    await config.sessionStorage.storeSession(callbackResponse.session);\n\n    // If this is an offline OAuth process, register webhooks\n    if (!callbackResponse.session.isOnline) {\n      await registerWebhooks(config, api, callbackResponse.session);\n    }\n\n    // If we're completing an offline OAuth process, immediately kick off the online one\n    if (config.useOnlineTokens && !callbackResponse.session.isOnline) {\n      config.logger.debug(\n        'Completing offline token OAuth, redirecting to online token OAuth',\n        {shop: callbackResponse.session.shop},\n      );\n\n      await redirectToAuth({req, res, api, config, isOnline: true});\n      return false;\n    }\n\n    res.locals.shopify = {\n      ...res.locals.shopify,\n      session: callbackResponse.session,\n    };\n\n    config.logger.debug('Completed OAuth callback', {\n      shop: callbackResponse.session.shop,\n      isOnline: callbackResponse.session.isOnline,\n    });\n\n    return true;\n  } catch (error) {\n    config.logger.error(`Failed to complete OAuth with error: ${error}`);\n\n    await handleCallbackError(req, res, api, config, error);\n  }\n\n  return false;\n}\n\nasync function registerWebhooks(\n  config: AppConfigInterface,\n  api: Shopify,\n  session: Session,\n) {\n  config.logger.debug('Registering webhooks', {shop: session.shop});\n\n  const responsesByTopic = await api.webhooks.register({session});\n\n  for (const topic in responsesByTopic) {\n    if (!Object.prototype.hasOwnProperty.call(responsesByTopic, topic)) {\n      continue;\n    }\n\n    for (const response of responsesByTopic[topic]) {\n      if (!response.success && !privacyTopics.includes(topic)) {\n        const result: any = response.result;\n\n        if (result.errors) {\n          config.logger.error(\n            `Failed to register ${topic} webhook: ${result.errors[0].message}`,\n            {shop: session.shop},\n          );\n        } else {\n          config.logger.error(\n            `Failed to register ${topic} webhook: ${JSON.stringify(\n              result.data,\n            )}`,\n            {shop: session.shop},\n          );\n        }\n      }\n    }\n  }\n}\n\nasync function handleCallbackError(\n  req: Request,\n  res: Response,\n  api: Shopify,\n  config: AppConfigInterface,\n  error: Error,\n) {\n  switch (true) {\n    case error instanceof InvalidOAuthError:\n      res.status(400);\n      res.send(error.message);\n      break;\n    case error instanceof CookieNotFound:\n      await redirectToAuth({req, res, api, config});\n      break;\n    case error instanceof BotActivityDetected:\n      res.status(410);\n      res.send(error.message);\n      break;\n    default:\n      res.status(500);\n      res.send(error.message);\n      break;\n  }\n}\n"],"names":[],"mappings":"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"}