{"version":3,"file":"auth-callback.mjs","sources":["../../../../src/auth/auth-callback.ts"],"sourcesContent":["import {Request, Response} from 'express';\nimport {\n  BotActivityDetected,\n  CookieNotFound,\n  InvalidOAuthError,\n  Shopify,\n} from '@shopify/shopify-api';\n\nimport {AppConfigInterface} from '../config-types';\nimport {redirectToAuth} from '../redirect-to-auth';\nimport {registerWebhooks} from '../helpers/register-webhooks';\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      expiring: config.future?.expiringOfflineAccessTokens,\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    await config.hooks?.afterAuth?.({session: callbackResponse.session});\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 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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"}