UNPKG

@shopify/shopify-api

Version:

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

98 lines (95 loc) 3.48 kB
import { graphqlClientClass } from '../clients/admin/graphql/client.mjs'; import '@shopify/admin-api-client'; import 'lossless-json'; import { BillingError } from '../error.mjs'; import '../types.mjs'; import 'compare-versions'; import { APP_SUBSCRIPTION_FRAGMENT } from './types.mjs'; import { convertLineItems } from './utils.mjs'; function check(config) { return async function check(params) { if (!config.future?.unstable_managedPricingSupport && !config.billing) { throw new BillingError({ message: 'Attempted to look for purchases without billing configs', errorData: [], }); } const { session, isTest = true, plans } = params; const returnObject = params .returnObject ?? false; const GraphqlClient = graphqlClientClass({ config }); const client = new GraphqlClient({ session }); const payments = await assessPayments({ client, isTest, plans }); if (config.future?.unstable_managedPricingSupport || returnObject) { return payments; } else { return payments.hasActivePayment; } }; } async function assessPayments({ client, isTest, plans, }) { const returnValue = { hasActivePayment: false, oneTimePurchases: [], appSubscriptions: [], }; let installation; let endCursor = null; do { const currentInstallations = await client.request(HAS_PAYMENTS_QUERY, { variables: { endCursor } }); installation = currentInstallations.data?.currentAppInstallation; installation.activeSubscriptions.forEach((subscription) => { if (subscriptionMeetsCriteria({ subscription, isTest, plans })) { returnValue.hasActivePayment = true; if (subscription.lineItems) { subscription.lineItems = convertLineItems(subscription.lineItems); } returnValue.appSubscriptions.push(subscription); } }); installation.oneTimePurchases.edges.forEach(({ node: purchase }) => { if (purchaseMeetsCriteria({ purchase, isTest, plans })) { returnValue.hasActivePayment = true; returnValue.oneTimePurchases.push(purchase); } }); endCursor = installation.oneTimePurchases.pageInfo.endCursor; } while (installation?.oneTimePurchases.pageInfo.hasNextPage); return returnValue; } function subscriptionMeetsCriteria({ subscription, isTest, plans, }) { return ((typeof plans === 'undefined' || plans.includes(subscription.name)) && (isTest || !subscription.test)); } function purchaseMeetsCriteria({ purchase, isTest, plans, }) { return ((typeof plans === 'undefined' || plans.includes(purchase.name)) && (isTest || !purchase.test) && purchase.status === 'ACTIVE'); } const HAS_PAYMENTS_QUERY = ` ${APP_SUBSCRIPTION_FRAGMENT} query appSubscription($endCursor: String) { currentAppInstallation { activeSubscriptions { ...AppSubscriptionFragment } oneTimePurchases(first: 250, sortKey: CREATED_AT, after: $endCursor) { edges { node { id name test status } } pageInfo { hasNextPage endCursor } } } } `; export { assessPayments, check }; //# sourceMappingURL=check.mjs.map