UNPKG

@shopify/shopify-api

Version:

Shopify API Library for Node - accelerate development with support for authentication, graphql proxy, webhooks

1 lines 6.97 kB
{"version":3,"file":"check.mjs","sources":["../../../../../../lib/billing/check.ts"],"sourcesContent":["import {FutureFlagOptions} from '../../future/flags';\nimport {ConfigInterface} from '../base-types';\nimport {graphqlClientClass, GraphqlClient} from '../clients/admin';\nimport {BillingError} from '../error';\n\nimport {\n AppSubscription,\n BillingCheck,\n BillingCheckParams,\n BillingCheckResponse,\n BillingCheckResponseObject,\n CurrentAppInstallation,\n CurrentAppInstallations,\n OneTimePurchase,\n APP_SUBSCRIPTION_FRAGMENT,\n} from './types';\nimport {convertLineItems} from './utils';\n\ninterface SubscriptionMeetsCriteriaParams {\n subscription: AppSubscription;\n isTest?: boolean;\n plans?: string | string[];\n}\n\ninterface PurchaseMeetsCriteriaParams {\n purchase: OneTimePurchase;\n isTest?: boolean;\n plans?: string | string[];\n}\n\ninterface InternalParams {\n client: GraphqlClient;\n isTest?: boolean;\n plans?: string | string[];\n}\n\nexport function check<\n Config extends ConfigInterface,\n Future extends FutureFlagOptions = Config['future'],\n>(config: Config): BillingCheck<Future> {\n return async function check<Params extends BillingCheckParams<Future>>(\n params: Params,\n ): Promise<BillingCheckResponse<Params, Future>> {\n if (!config.future?.unstable_managedPricingSupport && !config.billing) {\n throw new BillingError({\n message: 'Attempted to look for purchases without billing configs',\n errorData: [],\n });\n }\n\n const {session, isTest = true, plans} = params;\n const returnObject =\n (params as BillingCheckParams<{unstable_managedPricingSupport: false}>)\n .returnObject ?? false;\n\n const GraphqlClient = graphqlClientClass({config});\n const client = new GraphqlClient({session});\n\n const payments = await assessPayments({client, isTest, plans});\n\n if (config.future?.unstable_managedPricingSupport || returnObject) {\n return payments as BillingCheckResponse<Params, Future>;\n } else {\n return payments.hasActivePayment as BillingCheckResponse<Params, Future>;\n }\n };\n}\n\nexport async function assessPayments({\n client,\n isTest,\n plans,\n}: InternalParams): Promise<BillingCheckResponseObject> {\n const returnValue: BillingCheckResponseObject = {\n hasActivePayment: false,\n oneTimePurchases: [],\n appSubscriptions: [],\n };\n\n let installation: CurrentAppInstallation;\n let endCursor: string | null = null;\n do {\n const currentInstallations = await client.request<CurrentAppInstallations>(\n HAS_PAYMENTS_QUERY,\n {variables: {endCursor}},\n );\n\n installation = currentInstallations.data?.currentAppInstallation!;\n installation.activeSubscriptions.forEach((subscription) => {\n if (subscriptionMeetsCriteria({subscription, isTest, plans})) {\n returnValue.hasActivePayment = true;\n if (subscription.lineItems) {\n subscription.lineItems = convertLineItems(subscription.lineItems);\n }\n returnValue.appSubscriptions.push(subscription);\n }\n });\n installation.oneTimePurchases.edges.forEach(({node: purchase}) => {\n if (purchaseMeetsCriteria({purchase, isTest, plans})) {\n returnValue.hasActivePayment = true;\n returnValue.oneTimePurchases.push(purchase);\n }\n });\n\n endCursor = installation.oneTimePurchases.pageInfo.endCursor;\n } while (installation?.oneTimePurchases.pageInfo.hasNextPage);\n\n return returnValue;\n}\n\nfunction subscriptionMeetsCriteria({\n subscription,\n isTest,\n plans,\n}: SubscriptionMeetsCriteriaParams): boolean {\n return (\n (typeof plans === 'undefined' || plans.includes(subscription.name)) &&\n (isTest || !subscription.test)\n );\n}\n\nfunction purchaseMeetsCriteria({\n purchase,\n isTest,\n plans,\n}: PurchaseMeetsCriteriaParams): boolean {\n return (\n (typeof plans === 'undefined' || plans.includes(purchase.name)) &&\n (isTest || !purchase.test) &&\n purchase.status === 'ACTIVE'\n );\n}\n\nconst HAS_PAYMENTS_QUERY = `\n ${APP_SUBSCRIPTION_FRAGMENT}\n query appSubscription($endCursor: String) {\n currentAppInstallation {\n activeSubscriptions {\n ...AppSubscriptionFragment\n }\n oneTimePurchases(first: 250, sortKey: CREATED_AT, after: $endCursor) {\n edges {\n node {\n id\n name\n test\n status\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n`;\n"],"names":[],"mappings":"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"}