UNPKG

@shopify/shopify-app-express

Version:

Shopify Express Middleware - to simplify the building of Shopify Apps with Express

1 lines 6.58 kB
{"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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"}