UNPKG

@agnostack/next-shopify

Version:

Please contact agnoStack via info@agnostack.com for any questions

261 lines • 24.8 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.withShopify = exports.API_VERSIONS = void 0; const shopify_api_1 = require("@shopify/shopify-api"); const env_1 = require("@agnostack/env"); const next_plugins_1 = require("@agnostack/next-plugins"); const billing_1 = require("../lib/utils/billing"); const crypto_1 = require("../lib/utils/crypto"); const display_1 = require("../shared/display"); const constants_1 = require("../shared/constants"); const VALID_WEBHOOK_TOPICS = Object.values(constants_1.API_WEBHOOK_TOPICS); exports.API_VERSIONS = Object.assign(Object.assign({}, shopify_api_1.ApiVersion), { LATEST: shopify_api_1.LATEST_API_VERSION }); // NOTE: 'defaultConfig' is here in case we need anything from it // eslint-disable-next-line @typescript-eslint/no-unused-vars const withShopify = (nextPhase, _a) => __awaiter(void 0, void 0, void 0, function* () { var _b, _c, _d, _e, _f; var { nextConfig, defaultConfig } = _a, pluginConfig = __rest(_a, ["nextConfig", "defaultConfig"]); try { const _g = nextConfig !== null && nextConfig !== void 0 ? nextConfig : {}, { basePath: _basePath, publicRuntimeConfig: _publicRuntimeConfig = {}, serverRuntimeConfig: __serverRuntimeConfig = {} } = _g, _nextConfig = __rest(_g, ["basePath", "publicRuntimeConfig", "serverRuntimeConfig"]); const basePath = (0, display_1.ensureString)(_basePath); const _h = pluginConfig !== null && pluginConfig !== void 0 ? pluginConfig : {}, { data, interactive, paymentConfig, firebaseConfig, appWebhooks } = _h, _j = _h.params, _k = _j === void 0 ? {} : _j, { APP_ID: _appId, APP_NAME: _appName, APP_TITLE: _appTitle = _appName, URL: netlifyUrl, HOST: shopifyCLIUrl, FIREBASE_SESSION_SK, FIREBASE_SESSION_PK, NEXT_PUBLIC_APP_BASE_URL, NEXT_PUBLIC_SHOPIFY_API_ID, NEXT_PUBLIC_SHOPIFY_API_KEY, NEXT_PUBLIC_SHOPIFY_CLIENT_ID, NEXT_PUBLIC_BASE_PATH_API: API_BASE_PATH = '/api', NEXT_PUBLIC_DISABLE_RECRYPTION: DISABLE_RECRYPTION, NEXT_PUBLIC_APP_ROUTE_PAGE_EXIT: _pageRouteParamExit, NEXT_PUBLIC_APP_ROUTE_PAGE_ERROR: _pageRouteParamError, NEXT_PUBLIC_APP_ROUTE_PAGE_SUCCESS: _pageRouteParamSuccess, NEXT_PUBLIC_APP_ROUTE_API_AUTH_ONLINE: _apiRouteParamAuthOnline, NEXT_PUBLIC_APP_ROUTE_API_AUTH_OFFLINE: _apiRouteParamAuthOffline, NEXT_PUBLIC_APP_ROUTE_API_AUTH_ONLINE_CALLBACK: _apiRouteParamAuthOnlineCallback, NEXT_PUBLIC_APP_ROUTE_API_AUTH_ONLINE_CALLBACK_REAUTH: _apiRouteParamAuthOnlineCallbackReauth, NEXT_PUBLIC_APP_ROUTE_API_AUTH_OFFLINE_CALLBACK: _apiRouteParamAuthOfflineCallback, NEXT_PUBLIC_APP_ROUTE_API_AUTH_OFFLINE_CALLBACK_REAUTH: _apiRouteParamAuthOfflineCallbackReauth, NEXT_PUBLIC_APP_ROUTE_API_APP_BILLING_SUBSCRIPTION: _apiRouteParamAppSubscriptionBilling, NEXT_PUBLIC_APP_ROUTE_API_APP_BILLING_ONE_TIME: _apiRouteParamAppOneTimeBilling, NEXT_PUBLIC_APP_ROUTE_API_APP_INSTALLATION: _apiRouteParamAppInstallation, NEXT_PUBLIC_APP_ROUTE_API_APP_UNINSTALLED: _apiRouteParamAppUninstalled, NEXT_PUBLIC_APP_ROUTE_API_SESSION_TOKEN: _apiRouteParamSessionToken, NEXT_PUBLIC_APP_ROUTE_WEBHOOK_EVENT: _apiRouteParamWebhookEvent, NEXT_PUBLIC_FB_ROOT_COLLECTION: FB_ROOT_COLLECTION, NEXT_PUBLIC_APP_NAME: _appNameParam = _appTitle, NEXT_PUBLIC_APP_TITLE: _appTitleParam = _appNameParam, PAGE_ROUTES_STANDALONE: _standaloneRoutes, SHOPIFY_FLAG_CLIENT_ID: _shopifyClientId, SHOPIFY_API_PUBLIC_KEY: _shopifyPublicAPIKey, SHOPIFY_EMBEDDED_LEGACY: _shopifyEmbeddedLegacy, SHOPIFY_EMBEDDED_APP: _shopifyEmbeddedApp, SHOPIFY_API_VERSION = shopify_api_1.LATEST_API_VERSION, SHOPIFY_API_SCOPES, SHOPIFY_API_KEY, SHOPIFY_THEME_ID, SHOPIFY_RUN_MODE, CONFIG_DATA, ORIGIN_SAFELIST } = _k, params = __rest(_k, ["APP_ID", "APP_NAME", "APP_TITLE", "URL", "HOST", "FIREBASE_SESSION_SK", "FIREBASE_SESSION_PK", "NEXT_PUBLIC_APP_BASE_URL", "NEXT_PUBLIC_SHOPIFY_API_ID", "NEXT_PUBLIC_SHOPIFY_API_KEY", "NEXT_PUBLIC_SHOPIFY_CLIENT_ID", "NEXT_PUBLIC_BASE_PATH_API", "NEXT_PUBLIC_DISABLE_RECRYPTION", "NEXT_PUBLIC_APP_ROUTE_PAGE_EXIT", "NEXT_PUBLIC_APP_ROUTE_PAGE_ERROR", "NEXT_PUBLIC_APP_ROUTE_PAGE_SUCCESS", "NEXT_PUBLIC_APP_ROUTE_API_AUTH_ONLINE", "NEXT_PUBLIC_APP_ROUTE_API_AUTH_OFFLINE", "NEXT_PUBLIC_APP_ROUTE_API_AUTH_ONLINE_CALLBACK", "NEXT_PUBLIC_APP_ROUTE_API_AUTH_ONLINE_CALLBACK_REAUTH", "NEXT_PUBLIC_APP_ROUTE_API_AUTH_OFFLINE_CALLBACK", "NEXT_PUBLIC_APP_ROUTE_API_AUTH_OFFLINE_CALLBACK_REAUTH", "NEXT_PUBLIC_APP_ROUTE_API_APP_BILLING_SUBSCRIPTION", "NEXT_PUBLIC_APP_ROUTE_API_APP_BILLING_ONE_TIME", "NEXT_PUBLIC_APP_ROUTE_API_APP_INSTALLATION", "NEXT_PUBLIC_APP_ROUTE_API_APP_UNINSTALLED", "NEXT_PUBLIC_APP_ROUTE_API_SESSION_TOKEN", "NEXT_PUBLIC_APP_ROUTE_WEBHOOK_EVENT", "NEXT_PUBLIC_FB_ROOT_COLLECTION", "NEXT_PUBLIC_APP_NAME", "NEXT_PUBLIC_APP_TITLE", "PAGE_ROUTES_STANDALONE", "SHOPIFY_FLAG_CLIENT_ID", "SHOPIFY_API_PUBLIC_KEY", "SHOPIFY_EMBEDDED_LEGACY", "SHOPIFY_EMBEDDED_APP", "SHOPIFY_API_VERSION", "SHOPIFY_API_SCOPES", "SHOPIFY_API_KEY", "SHOPIFY_THEME_ID", "SHOPIFY_RUN_MODE", "CONFIG_DATA", "ORIGIN_SAFELIST"]), { apiRoutes: { [constants_1.API_ROUTE_NAMES.AUTH_ONLINE]: _apiRouteAuthOnline = `${API_BASE_PATH}/auth/online`, [constants_1.API_ROUTE_NAMES.AUTH_OFFLINE]: _apiRouteAuthOffline = `${API_BASE_PATH}/auth/offline`, [constants_1.API_ROUTE_NAMES.AUTH_ONLINE_CALLBACK]: _apiRouteAuthOnlineCallback = `${API_BASE_PATH}/auth/online/callback`, [constants_1.API_ROUTE_NAMES.AUTH_OFFLINE_CALLBACK]: _apiRouteAuthOfflineCallback, // NOTE: this is usually '/api/auth/offline/callback' [constants_1.API_ROUTE_NAMES.AUTH_ONLINE_CALLBACK_REAUTH]: _apiRouteAuthOnlineCallbackReauth = `${API_BASE_PATH}/auth/online/callback/reauth`, [constants_1.API_ROUTE_NAMES.AUTH_OFFLINE_CALLBACK_REAUTH]: _apiRouteAuthOfflineCallbackReauth, // NOTE: this is usually '/api/auth/offline/callback/reauth' [constants_1.API_ROUTE_NAMES.APP_INSTALLATION]: _apiRouteAuthAppInstallation = `${API_BASE_PATH}/admin/installation`, [constants_1.API_ROUTE_NAMES.APP_UNINSTALLED]: _apiRouteAppUninstalled = `${API_BASE_PATH}/webhooks/app/uninstalled`, [constants_1.API_ROUTE_NAMES.APP_PURCHASES_ONE_TIME_UPDATE]: _apiRouteAppOneTimeBilling = `${API_BASE_PATH}/webhooks/app/billing`, [constants_1.API_ROUTE_NAMES.APP_SUBSCRIPTIONS_UPDATE]: _apiRouteAppSubscriptionBilling = `${API_BASE_PATH}/webhooks/app/billing`, [constants_1.API_ROUTE_NAMES.WEBHOOK_EVENT]: _apiRouteWebhookEvent = `${API_BASE_PATH}/webhooks/event`, [constants_1.API_ROUTE_NAMES.SESSION_TOKEN]: _apiRouteSessionToken = `${API_BASE_PATH}/token`, } = {}, pageRoutes: { [constants_1.PAGE_ROUTE_NAMES.EXIT]: _pageRouteExit = '/exit', [constants_1.PAGE_ROUTE_NAMES.ERROR]: _pageRouteError = '/error', [constants_1.PAGE_ROUTE_NAMES.SUCCESS]: _pageRouteSuccess = '/', } = {} } = _h; const SHOPIFY_EMBEDDED_LEGACY = (0, display_1.isTrue)(_shopifyEmbeddedLegacy); const SHOPIFY_EMBEDDED_APP = (0, display_1.isUndefinedOrTrue)(_shopifyEmbeddedApp); const SHOPIFY_CLIENT_ID = NEXT_PUBLIC_SHOPIFY_CLIENT_ID || _shopifyClientId; const SHOPIFY_API_PUBLIC_KEY = SHOPIFY_CLIENT_ID || NEXT_PUBLIC_SHOPIFY_API_KEY || _shopifyPublicAPIKey; // NOTE APP_ID in shopify cli defaults to client id/SHOPIFY_API_PUBLIC_KEY const APP_ID = NEXT_PUBLIC_SHOPIFY_API_ID || _appId || SHOPIFY_API_PUBLIC_KEY; const appBaseUrl = NEXT_PUBLIC_APP_BASE_URL || netlifyUrl || shopifyCLIUrl; const APP_BASE_URL = `${appBaseUrl}${basePath}`; const appUrl = appBaseUrl ? new URL(appBaseUrl) : undefined; if ((SHOPIFY_RUN_MODE === 'cli') && !appUrl) { throw new Error('Error initializing with Shopify'); } const PAYMENT_CONFIG = (0, billing_1.generatePaymentConfig)(paymentConfig, { data, appTitle: _appTitleParam, SHOPIFY_RUN_MODE }); const { [constants_1.PAGE_ROUTE_NAMES.EXIT]: pageRouteExit, [constants_1.PAGE_ROUTE_NAMES.ERROR]: pageRouteError, [constants_1.PAGE_ROUTE_NAMES.SUCCESS]: pageRouteSuccess, [constants_1.API_ROUTE_NAMES.AUTH_ONLINE]: apiRouteAuthOnline, [constants_1.API_ROUTE_NAMES.AUTH_OFFLINE]: apiRouteAuthOffline, [constants_1.API_ROUTE_NAMES.AUTH_ONLINE_CALLBACK]: apiRouteAuthOnlineCallback, [constants_1.API_ROUTE_NAMES.AUTH_OFFLINE_CALLBACK]: apiRouteAuthOfflineCallback, [constants_1.API_ROUTE_NAMES.AUTH_ONLINE_CALLBACK_REAUTH]: apiRouteAuthOnlineCallbackReauth, [constants_1.API_ROUTE_NAMES.AUTH_OFFLINE_CALLBACK_REAUTH]: apiRouteAuthOfflineCallbackReauth, [constants_1.API_ROUTE_NAMES.APP_INSTALLATION]: apiRouteAppInstallation, [constants_1.API_ROUTE_NAMES.APP_UNINSTALLED]: apiRouteAppUninstalled, [constants_1.API_ROUTE_NAMES.APP_PURCHASES_ONE_TIME_UPDATE]: apiRouteAppOneTimeBilling, [constants_1.API_ROUTE_NAMES.APP_SUBSCRIPTIONS_UPDATE]: apiRouteAppSubscriptionBilling, [constants_1.API_ROUTE_NAMES.WEBHOOK_EVENT]: apiRouteWebhookEvent, [constants_1.API_ROUTE_NAMES.SESSION_TOKEN]: apiRouteSessionToken, } = yield (0, next_plugins_1.getPrompts)([ // TODO validate how auth works for non-embedded apps ...(SHOPIFY_EMBEDDED_LEGACY || !SHOPIFY_EMBEDDED_APP) ? [{ type: 'text', name: constants_1.API_ROUTE_NAMES.AUTH_ONLINE, message: 'API Route: Auth (Online)', initial: [_apiRouteParamAuthOnline, _apiRouteAuthOnline].find(display_1.stringNotEmpty), }, { type: 'text', name: constants_1.API_ROUTE_NAMES.AUTH_ONLINE_CALLBACK, message: 'API Route: Auth Callback (Online)', initial: [_apiRouteParamAuthOnlineCallback, _apiRouteAuthOnlineCallback].find(display_1.stringNotEmpty), }, { type: 'text', name: constants_1.API_ROUTE_NAMES.AUTH_ONLINE_CALLBACK_REAUTH, message: 'API Route: Auth Callback ReAuth (Online)', initial: [_apiRouteParamAuthOnlineCallbackReauth, _apiRouteAuthOnlineCallbackReauth].find(display_1.stringNotEmpty), }, ...((PAYMENT_CONFIG === null || PAYMENT_CONFIG === void 0 ? void 0 : PAYMENT_CONFIG.required) || (appWebhooks != undefined)) ? [ { type: 'text', name: constants_1.API_ROUTE_NAMES.AUTH_OFFLINE, message: 'API Route: Auth (offline)', initial: [_apiRouteParamAuthOffline, _apiRouteAuthOffline].find(display_1.stringNotEmpty), }, { type: 'text', name: constants_1.API_ROUTE_NAMES.AUTH_OFFLINE_CALLBACK, message: 'API Route: Auth Callback (Offline)', initial: [_apiRouteParamAuthOfflineCallback, _apiRouteAuthOfflineCallback].find(display_1.stringNotEmpty), }, { type: 'text', name: constants_1.API_ROUTE_NAMES.AUTH_OFFLINE_CALLBACK_REAUTH, message: 'API Route: Auth Callback ReAuth (Offline)', initial: [_apiRouteParamAuthOfflineCallbackReauth, _apiRouteAuthOfflineCallbackReauth].find(display_1.stringNotEmpty), } ] : []] : [], { type: 'text', name: constants_1.API_ROUTE_NAMES.APP_INSTALLATION, message: 'API Route: App Installation', initial: [_apiRouteParamAppInstallation, _apiRouteAuthAppInstallation].find(display_1.stringNotEmpty), }, { type: 'text', name: constants_1.API_ROUTE_NAMES.SESSION_TOKEN, message: 'API Route: Session Token', initial: [_apiRouteParamSessionToken, _apiRouteSessionToken].find(display_1.stringNotEmpty), }, { type: 'text', name: constants_1.API_ROUTE_NAMES.APP_UNINSTALLED, message: 'Webhook Route: App Uninstalled', initial: [_apiRouteParamAppUninstalled, _apiRouteAppUninstalled].find(display_1.stringNotEmpty), }, ...(PAYMENT_CONFIG === null || PAYMENT_CONFIG === void 0 ? void 0 : PAYMENT_CONFIG.required) ? [ ...(((_b = PAYMENT_CONFIG.config) === null || _b === void 0 ? void 0 : _b.interval) === constants_1.BILLING_INTERVALS.ONE_TIME) ? [{ type: 'text', name: constants_1.API_ROUTE_NAMES.APP_PURCHASES_ONE_TIME_UPDATE, message: 'Webhook Route: App Billing (One Time)', initial: [_apiRouteParamAppOneTimeBilling, _apiRouteAppOneTimeBilling].find(display_1.stringNotEmpty), }] : [{ type: 'text', name: constants_1.API_ROUTE_NAMES.APP_SUBSCRIPTIONS_UPDATE, message: 'Webhook Route: App Billing (Subscription)', initial: [_apiRouteParamAppSubscriptionBilling, _apiRouteAppSubscriptionBilling].find(display_1.stringNotEmpty), }] ] : [], { type: 'text', name: constants_1.API_ROUTE_NAMES.WEBHOOK_EVENT, message: 'Webhook Route: API Event', initial: [_apiRouteParamWebhookEvent, _apiRouteWebhookEvent].find(display_1.stringNotEmpty), }, { type: 'text', name: constants_1.PAGE_ROUTE_NAMES.SUCCESS, message: 'Page Route: Success', initial: [_pageRouteParamSuccess, _pageRouteSuccess].find(display_1.stringNotEmpty), }, { type: 'text', name: constants_1.PAGE_ROUTE_NAMES.EXIT, message: 'Page Route: Exit', initial: [_pageRouteParamExit, _pageRouteExit].find(display_1.stringNotEmpty), }, { type: 'text', name: constants_1.PAGE_ROUTE_NAMES.ERROR, message: 'Page Route: Error', initial: [_pageRouteParamError, _pageRouteError].find(display_1.stringNotEmpty), } ], { phase: nextPhase, disabled: !(0, display_1.isTrue)(interactive) }); const PAGE_ROUTES = { [constants_1.PAGE_ROUTE_NAMES.EXIT]: pageRouteExit, [constants_1.PAGE_ROUTE_NAMES.ERROR]: pageRouteError, [constants_1.PAGE_ROUTE_NAMES.SUCCESS]: pageRouteSuccess, }; const PAGE_PATHS = Object.entries(PAGE_ROUTES).reduce((_pagePaths, [routeName, routePath]) => (Object.assign(Object.assign({}, _pagePaths), { [routeName]: `${basePath}${routePath}` })), {}); const PAGE_ROUTES_STANDALONE = [ ...(0, next_plugins_1.ensureArray)(_standaloneRoutes), PAGE_ROUTES[constants_1.PAGE_ROUTE_NAMES.ERROR] ]; const API_ROUTES = Object.assign(Object.assign(Object.assign(Object.assign({ [constants_1.API_ROUTE_NAMES.APP_INSTALLATION]: apiRouteAppInstallation, [constants_1.API_ROUTE_NAMES.APP_UNINSTALLED]: apiRouteAppUninstalled, [constants_1.API_ROUTE_NAMES.WEBHOOK_EVENT]: apiRouteWebhookEvent, [constants_1.API_ROUTE_NAMES.SESSION_TOKEN]: apiRouteSessionToken }, apiRouteAuthOnline && Object.assign({ [constants_1.API_ROUTE_NAMES.AUTH_ONLINE]: apiRouteAuthOnline }, apiRouteAuthOnlineCallback && Object.assign({ [constants_1.API_ROUTE_NAMES.AUTH_ONLINE_CALLBACK]: apiRouteAuthOnlineCallback }, apiRouteAuthOnlineCallbackReauth && { [constants_1.API_ROUTE_NAMES.AUTH_ONLINE_CALLBACK_REAUTH]: apiRouteAuthOnlineCallbackReauth, }))), { [constants_1.API_ROUTE_NAMES.AUTH_ONLINE_CALLBACK]: apiRouteAuthOnlineCallback, [constants_1.API_ROUTE_NAMES.AUTH_ONLINE_CALLBACK_REAUTH]: apiRouteAuthOnlineCallbackReauth }), apiRouteAuthOffline && Object.assign({ [constants_1.API_ROUTE_NAMES.AUTH_OFFLINE]: apiRouteAuthOffline }, apiRouteAuthOfflineCallback && Object.assign({ [constants_1.API_ROUTE_NAMES.AUTH_OFFLINE_CALLBACK]: apiRouteAuthOfflineCallback }, apiRouteAuthOfflineCallbackReauth && { [constants_1.API_ROUTE_NAMES.AUTH_OFFLINE_CALLBACK_REAUTH]: apiRouteAuthOfflineCallbackReauth, }))), (PAYMENT_CONFIG === null || PAYMENT_CONFIG === void 0 ? void 0 : PAYMENT_CONFIG.required) && Object.assign(Object.assign({}, apiRouteAppOneTimeBilling && { [constants_1.API_ROUTE_NAMES.APP_PURCHASES_ONE_TIME_UPDATE]: apiRouteAppOneTimeBilling, }), apiRouteAppSubscriptionBilling && { [constants_1.API_ROUTE_NAMES.APP_SUBSCRIPTIONS_UPDATE]: apiRouteAppSubscriptionBilling, })); const API_PATHS = Object.entries(API_ROUTES).reduce((_apiPaths, [routeName, route]) => (Object.assign(Object.assign({}, _apiPaths), { [routeName]: `${basePath}${route}` })), {}); const API_URLS = Object.entries(API_PATHS).reduce((_apiUrls, [routeName, routePath]) => (Object.assign(Object.assign({}, _apiUrls), { [routeName]: `${appBaseUrl}${routePath}` })), {}); const { name: billingName, config: billingConfig } = (0, display_1.ensureObject)(PAYMENT_CONFIG); const APP_CONFIG = Object.assign({ isSessionTokenEnabled: (SHOPIFY_EMBEDDED_APP && !SHOPIFY_EMBEDDED_LEGACY), isEmbeddedApp: SHOPIFY_EMBEDDED_APP, apiVersion: SHOPIFY_API_VERSION, apiKey: SHOPIFY_API_PUBLIC_KEY, apiSecretKey: SHOPIFY_API_KEY, hostName: appUrl === null || appUrl === void 0 ? void 0 : appUrl.hostname, hostScheme: (_c = appUrl === null || appUrl === void 0 ? void 0 : appUrl.protocol) === null || _c === void 0 ? void 0 : _c.replace(':', ''), scopes: (_d = SHOPIFY_API_SCOPES === null || SHOPIFY_API_SCOPES === void 0 ? void 0 : SHOPIFY_API_SCOPES.replace(/, /g, ',')) === null || _d === void 0 ? void 0 : _d.split(',') }, ((0, display_1.stringNotEmpty)(billingName) && (0, display_1.objectNotEmpty)(billingConfig)) && { billing: { [billingName]: billingConfig, }, }); const { APP_WEBHOOKS, APP_WEBHOOKS_MUTABLE, APP_WEBHOOKS_MUTABLE_TOPICS } = Object.entries((0, display_1.ensureObject)(appWebhooks)).reduce((_validated, [webhookTopic, webhookConfigs]) => { if (!VALID_WEBHOOK_TOPICS.includes(webhookTopic)) { console.warn(`WARN: Ignoring unsupported webhook topic: ${webhookTopic}`); return _validated; } return (0, next_plugins_1.ensureArray)(webhookConfigs).reduce((_appConfig, _webhookConfig) => { var _a, _b, _c; const _d = (0, display_1.ensureObject)(_webhookConfig), { enabled: appWebhookEnabled } = _d, webhookConfig = __rest(_d, ["enabled"]); const isMutableTopic = !constants_1.API_WEBHOOK_TOPICS_IMMUTABLE.includes(webhookTopic); return Object.assign(Object.assign({}, _appConfig), { APP_WEBHOOKS_MUTABLE_TOPICS: Object.assign(Object.assign({}, (0, next_plugins_1.ensureArray)(_appConfig === null || _appConfig === void 0 ? void 0 : _appConfig.APP_WEBHOOKS_MUTABLE_TOPICS)), isMutableTopic && { [webhookTopic]: { enabled: appWebhookEnabled !== null && appWebhookEnabled !== void 0 ? appWebhookEnabled : true, }, }), APP_WEBHOOKS_MUTABLE: Object.assign(Object.assign({}, (_a = _appConfig === null || _appConfig === void 0 ? void 0 : _appConfig.APP_WEBHOOKS_MUTABLE) !== null && _a !== void 0 ? _a : _appConfig === null || _appConfig === void 0 ? void 0 : _appConfig.APP_WEBHOOKS), isMutableTopic && { [webhookTopic]: [ ...(0, next_plugins_1.ensureArray)((_b = _appConfig === null || _appConfig === void 0 ? void 0 : _appConfig.APP_WEBHOOKS) === null || _b === void 0 ? void 0 : _b[webhookTopic]), Object.assign({ callbackUrl: API_URLS[constants_1.API_ROUTE_NAMES.WEBHOOK_EVENT] }, webhookConfig) ], }), APP_WEBHOOKS: Object.assign(Object.assign({}, _appConfig === null || _appConfig === void 0 ? void 0 : _appConfig.APP_WEBHOOKS), { [webhookTopic]: [ ...(0, next_plugins_1.ensureArray)((_c = _appConfig === null || _appConfig === void 0 ? void 0 : _appConfig.APP_WEBHOOKS) === null || _c === void 0 ? void 0 : _c[webhookTopic]), Object.assign({ callbackUrl: API_URLS[constants_1.API_ROUTE_NAMES.WEBHOOK_EVENT] }, webhookConfig) ] }) }); }, _validated); }, { APP_WEBHOOKS: Object.assign(Object.assign({ [constants_1.API_WEBHOOK_TOPICS.APP_UNINSTALLED]: [{ callbackUrl: API_URLS[constants_1.API_ROUTE_NAMES.APP_UNINSTALLED], }] }, API_URLS[constants_1.API_ROUTE_NAMES.APP_PURCHASES_ONE_TIME_UPDATE] && { [constants_1.API_WEBHOOK_TOPICS.APP_PURCHASES_ONE_TIME_UPDATE]: [{ callbackUrl: API_URLS[constants_1.API_ROUTE_NAMES.APP_PURCHASES_ONE_TIME_UPDATE], }], }), API_URLS[constants_1.API_ROUTE_NAMES.APP_SUBSCRIPTIONS_UPDATE] && { [constants_1.API_WEBHOOK_TOPICS.APP_SUBSCRIPTIONS_UPDATE]: [{ callbackUrl: API_URLS[constants_1.API_ROUTE_NAMES.APP_SUBSCRIPTIONS_UPDATE], }], }), }); const hashedEnvironment = (0, crypto_1.generateHMAC)(__serverRuntimeConfig.environment, FIREBASE_SESSION_SK); const encryptedPrivateKey = (_f = (_e = CONFIG_DATA.encryptedConfig) === null || _e === void 0 ? void 0 : _e.session_4096) === null || _f === void 0 ? void 0 : _f[hashedEnvironment]; if (!encryptedPrivateKey) { throw new Error(`Invalid crypto configuration for: ${__serverRuntimeConfig.environment}`); } const SESSION_CONFIG = { encryptedPrivateKey, sharedSecret: FIREBASE_SESSION_SK, encryptedPublicKey: FIREBASE_SESSION_PK, }; const sharedRuntimeConfig = { DISABLE_RECRYPTION, PAYMENT_CONFIG, SHOPIFY_THEME_ID, SHOPIFY_RUN_MODE, SHOPIFY_API_PUBLIC_KEY, APP_WEBHOOKS_MUTABLE_TOPICS, PAGE_ROUTES_STANDALONE, PAGE_ROUTE_NAMES: constants_1.PAGE_ROUTE_NAMES, PAGE_PATHS, API_PATHS, API_URLS, // NOTE: typically will want to use API_PATHS, but these are here in case anything needs fully qualified URLs APP_BASE_URL, API_BASE_PATH, API_ROUTE_NAMES: constants_1.API_ROUTE_NAMES, }; const publicRuntimeConfig = Object.assign(Object.assign(Object.assign({}, _publicRuntimeConfig), (0, env_1.cleanPublicEnv)(params)), sharedRuntimeConfig); const serverRuntimeConfig = Object.assign(Object.assign(Object.assign(Object.assign({}, __serverRuntimeConfig), params), sharedRuntimeConfig), { ORIGIN_SAFELIST: [ ...(0, next_plugins_1.ensureArray)(ORIGIN_SAFELIST), '*.myshopify.com' ], FB_CONFIG: firebaseConfig, FB_ROOT_COLLECTION, SESSION_CONFIG, APP_CONFIG, APP_ID, APP_WEBHOOKS, APP_WEBHOOKS_MUTABLE }); return Object.assign(Object.assign({}, _nextConfig), { basePath: _basePath, publicRuntimeConfig, serverRuntimeConfig }); } catch (error) { console.error('Error executing withShopify:', error); throw error; } }); exports.withShopify = withShopify; //# sourceMappingURL=withShopify.js.map