import { Customer, Product, Search } from 'commerce-sdk' export default async function getProducts(searchQuery) { const clientConfig = { headers: { authorization: ``, }, parameters: { clientId: process.env.SFDC_CLIENT_ID, secret: process.env.SFDC_SECRET, organizationId: process.env.SFDC_ORGANIZATIONID, shortCode: process.env.SFDC_SHORTCODE, siteId: process.env.SFDC_SITEID, }, } const credentials = `${clientConfig.parameters.clientId}:${clientConfig.parameters.secret}` const base64data = Buffer.from(credentials).toString('base64') const headers = { Authorization: `Basic ${base64data}` } const client = new Customer.ShopperLogin(clientConfig) const shopperToken = await client.getAccessToken({ headers, body: { grant_type: 'client_credentials', }, }) const configWithAuth = { ...clientConfig, headers: { authorization: `Bearer ${shopperToken.access_token}` }, } const searchClient = new Search.ShopperSearch(configWithAuth) const searchResults = await searchClient.productSearch({ parameters: { q: searchQuery }, }) const results = [] const productsClient = new Product.ShopperProducts(configWithAuth) await Promise.all( searchResults.hits.map(async (product) => { const productResults = await productsClient.getProduct({ parameters: { organizationId: clientConfig.parameters.organizationId, siteId: clientConfig.parameters.siteId, id: product.productId, }, }) results.push(productResults) }) ) return results }