UNPKG

@apihawk/billia-sdk

Version:

The ApiHawk Billia SDK

147 lines (146 loc) 6.1 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const billia_sdk_service_base_1 = require("../lib/billia-sdk-service-base"); const billia_sdk_catalog_1 = require("./billia-sdk-catalog"); class BilliaSDKMarketing extends billia_sdk_service_base_1.BilliaSDKServiceBase { constructor(api) { super(api); this.billiaSDKCatalog = new billia_sdk_catalog_1.BilliaSDKCatalog(api); } /** * Get banners group * @param group banner group name * @param session user session */ getBannersGroup(group, session) { return __awaiter(this, void 0, void 0, function* () { return this.api .call({ url: `/marketing/banners-by-position/${group}`, method: 'GET', headers: { Accept: 'application/hal+json', 'Content-Type': 'application/json', 'Accept-Response': 'Advanced' } }) .then((bannerGroup) => { if (!bannerGroup.banners) { bannerGroup.banners = []; } bannerGroup.banners = bannerGroup.banners.sort((a, b) => { return (a.sort_weight || 0) - (b.sort_weight || 0); }); const productIDs = new Set(); bannerGroup.banners.forEach((banner) => { if (banner.data) { try { banner.data = JSON.parse(banner.data); } catch (err) { banner.data = {}; } if (banner.data.type === 'product' && banner.data.product_id) { productIDs.add(banner.data.product_id); } } }); if (productIDs.size) { return this.billiaSDKCatalog .getCatalogProducts(Array.from(productIDs), {}, { advanced: false }) .then((products) => { const productsById = {}; const promises = []; // Calculate all products prices; products.items.forEach((product) => { promises.push(this.billiaSDKCatalog.productCalculator(product.product_id, [product.default_quantity], session)); }); return Promise.all(promises).then((results) => { // Assign prices to products; results.forEach((result, index) => { const price = Object.values(result)[0]; if (price) { products.items[index].price = price; } productsById[products.items[index].product_id] = products.items[index]; }); if (bannerGroup.banners) { bannerGroup.banners.forEach((banner) => { if (banner.data.type === 'product' && banner.data.product_id) { banner.data.product = productsById[banner.data.product_id]; } }); } return Promise.resolve(bannerGroup); }); }); } else { return Promise.resolve(bannerGroup); } }); }); } /** * Subscribe to newsletter * @param {string} email * @param prefs * @returns {Promise<boolean>} */ subscribe(email, prefs) { return __awaiter(this, void 0, void 0, function* () { const params = { status: 'subscribed' }; if (prefs && prefs.verify === false) { params.verify = false; } if (prefs && prefs.firstname) { params.firstname = prefs.firstname; } if (prefs && prefs.lastname) { params.lastname = prefs.lastname; } return this.api .call({ url: `/marketing/subscription/${email}`, method: 'PATCH', body: params, headers: { Accept: 'application/hal+json', 'Content-Type': 'application/json' } }) .then(() => true); }); } /** * Get subscription status * @param {string} email * @returns {Promise<IMarketingSubscription>} */ getSubscription(email) { return __awaiter(this, void 0, void 0, function* () { return this.api.call({ url: `/marketing/subscription/${email}`, method: 'GET', headers: { Accept: 'application/hal+json', 'Content-Type': 'application/json' } }); }); } } exports.BilliaSDKMarketing = BilliaSDKMarketing;