UNPKG

@shopify/shopify-app-express

Version:

Shopify Express Middleware - to simplify the building of Shopify Apps with Express

1 lines 9.31 kB
{"version":3,"file":"index.mjs","sources":["../../../src/index.ts"],"sourcesContent":["import semver from 'semver';\nimport '@shopify/shopify-api/adapters/node';\nimport {\n shopifyApi,\n ConfigParams as ApiConfigParams,\n LATEST_API_VERSION,\n Shopify,\n FeatureDeprecatedError,\n ShopifyRestResources,\n} from '@shopify/shopify-api';\nimport {MemorySessionStorage} from '@shopify/shopify-app-session-storage-memory';\n\nimport {SHOPIFY_EXPRESS_LIBRARY_VERSION} from './version';\nimport {AppConfigInterface, AppConfigParams} from './config-types';\nimport {\n validateAuthenticatedSession,\n cspHeaders,\n ensureInstalled,\n redirectToShopifyOrAppRoot,\n} from './middlewares/index';\nimport {AuthMiddleware} from './auth/types';\nimport {auth} from './auth/index';\nimport {ProcessWebhooksMiddleware} from './webhooks/types';\nimport {processWebhooks} from './webhooks/index';\nimport {\n ValidateAuthenticatedSessionMiddleware,\n CspHeadersMiddleware,\n EnsureInstalledMiddleware,\n RedirectToShopifyOrAppRootMiddleware,\n} from './middlewares/types';\nimport {redirectOutOfApp} from './redirect-out-of-app';\nimport {RedirectOutOfAppFunction} from './types';\n\nexport * from './types';\nexport * from './auth/types';\nexport * from './middlewares/types';\nexport * from './webhooks/types';\nexport type {AppConfigParams} from './config-types';\n\ntype DefaultedConfigs<Params extends Partial<ApiConfigParams> | undefined> =\n ApiConfigParams & Params;\n\ntype ConfigInterfaceFromParams<Params extends AppConfigParams> =\n AppConfigInterface<\n NonNullable<DefaultedConfigs<Params['api']>['restResources']>,\n Params['sessionStorage'] extends undefined\n ? MemorySessionStorage\n : NonNullable<Params['sessionStorage']>\n >;\n\nexport interface ShopifyApp<Params extends AppConfigParams = AppConfigParams> {\n config: ConfigInterfaceFromParams<Params>;\n api: Shopify<\n DefaultedConfigs<Params['api']>,\n DefaultedConfigs<Params['api']>['restResources'] & ShopifyRestResources\n >;\n auth: AuthMiddleware;\n processWebhooks: ProcessWebhooksMiddleware;\n validateAuthenticatedSession: ValidateAuthenticatedSessionMiddleware;\n cspHeaders: CspHeadersMiddleware;\n ensureInstalledOnShop: EnsureInstalledMiddleware;\n redirectToShopifyOrAppRoot: RedirectToShopifyOrAppRootMiddleware;\n redirectOutOfApp: RedirectOutOfAppFunction;\n}\n\nexport function shopifyApp<Params extends AppConfigParams>(\n config: Params,\n): ShopifyApp<Params> {\n const {api: apiConfig, ...appConfig} = config;\n\n const api = shopifyApi(apiConfigWithDefaults(apiConfig ?? {}));\n const validatedConfig = validateAppConfig(appConfig, api);\n\n return {\n config: validatedConfig,\n api: api as Shopify<\n DefaultedConfigs<Params['api']>,\n DefaultedConfigs<Params['api']>['restResources'] & ShopifyRestResources\n >,\n auth: auth({api, config: validatedConfig}),\n processWebhooks: processWebhooks({api, config: validatedConfig}),\n validateAuthenticatedSession: validateAuthenticatedSession({\n api,\n config: validatedConfig,\n }),\n cspHeaders: cspHeaders({api}),\n ensureInstalledOnShop: ensureInstalled({\n api,\n config: validatedConfig,\n }),\n redirectToShopifyOrAppRoot: redirectToShopifyOrAppRoot({\n api,\n config: validatedConfig,\n }),\n redirectOutOfApp: redirectOutOfApp({api, config: validatedConfig}),\n };\n}\n\nfunction apiConfigWithDefaults<Params extends Partial<ApiConfigParams>>(\n apiConfig: Params,\n): DefaultedConfigs<Params> {\n let userAgent = `Shopify Express Library v${SHOPIFY_EXPRESS_LIBRARY_VERSION}`;\n\n if (apiConfig.userAgentPrefix) {\n userAgent = `${apiConfig.userAgentPrefix} | ${userAgent}`;\n }\n\n /* eslint-disable no-process-env */\n return {\n apiKey: process.env.SHOPIFY_API_KEY!,\n apiSecretKey: process.env.SHOPIFY_API_SECRET!,\n scopes: process.env.SCOPES?.split(',')!,\n hostScheme: (process.env.HOST?.split('://')[0] as 'http' | 'https')!,\n hostName: process.env.HOST?.replace(/https?:\\/\\//, '')!,\n isEmbeddedApp: true,\n apiVersion: LATEST_API_VERSION,\n ...(process.env.SHOP_CUSTOM_DOMAIN && {\n customShopDomains: [process.env.SHOP_CUSTOM_DOMAIN],\n }),\n ...apiConfig,\n userAgentPrefix: userAgent,\n };\n /* eslint-enable no-process-env */\n}\n\nfunction validateAppConfig<Params extends Omit<AppConfigParams, 'api'>>(\n config: Params,\n api: Shopify,\n): ConfigInterfaceFromParams<Params> {\n const {sessionStorage, ...configWithoutSessionStorage} = config;\n\n return {\n // We override the API package's logger to add the right package context by default (and make the call simpler)\n logger: overrideLoggerPackage(api.logger),\n useOnlineTokens: false,\n exitIframePath: '/exitiframe',\n sessionStorage: (sessionStorage ??\n new MemorySessionStorage()) as ConfigInterfaceFromParams<Params>['sessionStorage'],\n ...configWithoutSessionStorage,\n auth: config.auth,\n webhooks: config.webhooks,\n };\n}\n\nfunction overrideLoggerPackage(logger: Shopify['logger']): Shopify['logger'] {\n const baseContext = {package: 'shopify-app'};\n\n const warningFunction: Shopify['logger']['warning'] = (\n message,\n context = {},\n ) => logger.warning(message, {...baseContext, ...context});\n\n return {\n ...logger,\n log: (severity, message, context = {}) =>\n logger.log(severity, message, {...baseContext, ...context}),\n debug: (message, context = {}) =>\n logger.debug(message, {...baseContext, ...context}),\n info: (message, context = {}) =>\n logger.info(message, {...baseContext, ...context}),\n warning: warningFunction,\n error: (message, context = {}) =>\n logger.error(message, {...baseContext, ...context}),\n deprecated: deprecated(warningFunction),\n };\n}\n\nfunction deprecated(warningFunction: Shopify['logger']['warning']) {\n return function (version: string, message: string): Promise<void> {\n if (semver.gte(SHOPIFY_EXPRESS_LIBRARY_VERSION, version)) {\n throw new FeatureDeprecatedError(\n `Feature was deprecated in version ${version}`,\n );\n }\n\n return warningFunction(`[Deprecated | ${version}] ${message}`);\n };\n}\n"],"names":[],"mappings":"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"}