@agnostack/next-shopify
Version:
Please contact agnoStack via info@agnostack.com for any questions
261 lines • 24.8 kB
JavaScript
;
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