UNPKG

@shopify/shopify-app-remix

Version:

Shopify Remix - to simplify the building of Shopify Apps with Remix

65 lines (58 loc) 1.59 kB
import { BillingRequestResponseObject, HttpResponseError, Session, } from '@shopify/shopify-api'; import {AppConfigArg} from '../../../config-types'; import {BasicParams} from '../../../types'; import {redirectToAuthPage} from '../helpers'; import {invalidateAccessToken} from '../../helpers'; import {redirectOutOfApp} from './helpers'; import type {RequestBillingOptions} from './types'; export function requestBillingFactory<Config extends AppConfigArg>( params: BasicParams, request: Request, session: Session, ) { return async function requestBilling({ plan, isTest, returnUrl, ...overrides }: RequestBillingOptions<Config>): Promise<never> { const {api, logger} = params; logger.info('Requesting billing', { shop: session.shop, plan, isTest, returnUrl, }); let result: BillingRequestResponseObject; try { result = await api.billing.request({ plan: plan as string, session, isTest, returnUrl, returnObject: true, ...overrides, }); } catch (error) { if (error instanceof HttpResponseError && error.response.code === 401) { logger.debug('API token was invalid, redirecting to OAuth', { shop: session.shop, }); await invalidateAccessToken(params, session); throw await redirectToAuthPage(params, request, session.shop); } else { throw error; } } throw redirectOutOfApp( params, request, result.confirmationUrl, session.shop, ); }; }