@apite/magento2-utility
Version:
Shopgate WebCheckout utility for Magento 2 extensions
87 lines (76 loc) • 2.47 kB
JavaScript
const logDecorator = require('./logDecorator')
const { decorateError } = logDecorator()
/**
* Select storage to use: device or user (if logged in)
*
* @param {ApiteM2Utility.PipelineContext} context
* @return ApiteM2Utility.PipelineStorage
* @private
*/
const _getStorage = context => context.meta.userId ? context.storage.user : context.storage.device
/**
* @param {ApiteM2Utility.PipelineContext} context
* @return {Promise<string>}
*/
const getCartId = async context => _getStorage(context).get('cartId')
/**
* @param {ApiteM2Utility.PipelineContext} context
* @return {Promise<string>}
*/
const getCustomerAuthToken = async context => _getStorage(context).get('authToken')
/**
* Saves the current hashed cartId for guest & customer.
* GraphQL cart CRUD requires cartId to be provided for both
*
* @param {string} cartId - guest cartId
* @param {ApiteM2Utility.PipelineContext} context
* @returns Promise<void>
*/
const saveCartId = async (cartId, context) =>
_getStorage(context).set('cartId', cartId).catch(err =>
context.log.error(decorateError(err), 'Failed to save guest cartId.')
)
/**
* Saves the current checkout token into internal storage (user or device)
*
* @param {string} autToken - customer Bearer token
* @param {ApiteM2Utility.PipelineContext} context
* @returns Promise<void>
*/
const saveCustomerAuthToken = async (autToken, context) =>
_getStorage(context).set('authToken', autToken).catch(err =>
context.log.error(decorateError(err), 'Failed to save customer auth token.')
)
/**
* @param {string} couponCode
* @param {ApiteM2Utility.PipelineContext} context
* @return {Promise<void>}
*/
const saveCouponCode = async (couponCode, context) => {
return _getStorage(context).set('couponCode', couponCode).catch(err => {
context.log.error(decorateError(err), 'Failed to save coupon code')
})
}
/**
* @param {ApiteM2Utility.PipelineContext} context
* @return {Promise<void>}
*/
const removeCouponCode = async context =>
_getStorage(context).del('couponCode').catch(err =>
context.log.error(decorateError(err), 'Failed to remove coupon code')
)
/**
* @param {ApiteM2Utility.PipelineContext} context
* @return {Promise<string>}
*/
const getCouponCode = async context => _getStorage(context).get('couponCode')
module.exports = {
getCouponCode,
getCartId,
getCustomerAuthToken,
removeCouponCode,
saveCouponCode,
saveCartId,
saveCustomerAuthToken
}