UNPKG

@shopify/storefront-api-client

Version:

Shopify Storefront API Client - A lightweight JS client to interact with Shopify's Storefront API

92 lines (88 loc) 3.56 kB
'use strict'; var graphqlClient = require('@shopify/graphql-client'); var constants = require('./constants.js'); var validations = require('./validations.js'); function createStorefrontApiClient({ storeDomain, apiVersion, publicAccessToken, privateAccessToken, clientName, retries = 0, customFetchApi, logger, }) { const currentSupportedApiVersions = graphqlClient.getCurrentSupportedApiVersions(); const storeUrl = graphqlClient.validateDomainAndGetStoreUrl({ client: constants.CLIENT, storeDomain, }); const baseApiVersionValidationParams = { client: constants.CLIENT, currentSupportedApiVersions, logger, }; graphqlClient.validateApiVersion({ ...baseApiVersionValidationParams, apiVersion }); validations.validateRequiredAccessTokens(publicAccessToken, privateAccessToken); validations.validatePrivateAccessTokenUsage(privateAccessToken); const apiUrlFormatter = generateApiUrlFormatter(storeUrl, apiVersion, baseApiVersionValidationParams); const config = { storeDomain: storeUrl, apiVersion, ...(publicAccessToken ? { publicAccessToken } : { privateAccessToken: privateAccessToken, }), headers: { 'Content-Type': constants.DEFAULT_CONTENT_TYPE, Accept: constants.DEFAULT_CONTENT_TYPE, [constants.SDK_VARIANT_HEADER]: constants.DEFAULT_SDK_VARIANT, [constants.SDK_VERSION_HEADER]: constants.DEFAULT_CLIENT_VERSION, ...(clientName ? { [constants.SDK_VARIANT_SOURCE_HEADER]: clientName } : {}), ...(publicAccessToken ? { [constants.PUBLIC_ACCESS_TOKEN_HEADER]: publicAccessToken } : { [constants.PRIVATE_ACCESS_TOKEN_HEADER]: privateAccessToken }), }, apiUrl: apiUrlFormatter(), clientName, }; const graphqlClient$1 = graphqlClient.createGraphQLClient({ headers: config.headers, url: config.apiUrl, retries, customFetchApi, logger, }); const getHeaders = graphqlClient.generateGetHeaders(config); const getApiUrl = generateGetApiUrl(config, apiUrlFormatter); const getGQLClientParams = graphqlClient.generateGetGQLClientParams({ getHeaders, getApiUrl, }); const client = { config, getHeaders, getApiUrl, fetch: (...props) => { return graphqlClient$1.fetch(...getGQLClientParams(...props)); }, request: (...props) => { return graphqlClient$1.request(...getGQLClientParams(...props)); }, requestStream: (...props) => { return graphqlClient$1.requestStream(...getGQLClientParams(...props)); }, }; return Object.freeze(client); } function generateApiUrlFormatter(storeUrl, defaultApiVersion, baseApiVersionValidationParams) { return (apiVersion) => { if (apiVersion) { graphqlClient.validateApiVersion({ ...baseApiVersionValidationParams, apiVersion, }); } const urlApiVersion = (apiVersion ?? defaultApiVersion).trim(); return `${storeUrl}/api/${urlApiVersion}/graphql.json`; }; } function generateGetApiUrl(config, apiUrlFormatter) { return (propApiVersion) => { return propApiVersion ? apiUrlFormatter(propApiVersion) : config.apiUrl; }; } exports.createStorefrontApiClient = createStorefrontApiClient; //# sourceMappingURL=storefront-api-client.js.map