Path: blob/master/node_modules/@adiwajshing/baileys/lib/Utils/business.js
1129 views
"use strict";1Object.defineProperty(exports, "__esModule", { value: true });2exports.uploadingNecessaryImages = exports.uploadingNecessaryImagesOfProduct = exports.parseProductNode = exports.toProductNode = exports.parseOrderDetailsNode = exports.parseCollectionsNode = exports.parseCatalogNode = void 0;3const boom_1 = require("@hapi/boom");4const crypto_1 = require("crypto");5const WABinary_1 = require("../WABinary");6const messages_media_1 = require("./messages-media");7const parseCatalogNode = (node) => {8const catalogNode = (0, WABinary_1.getBinaryNodeChild)(node, 'product_catalog');9const products = (0, WABinary_1.getBinaryNodeChildren)(catalogNode, 'product').map(exports.parseProductNode);10return { products };11};12exports.parseCatalogNode = parseCatalogNode;13const parseCollectionsNode = (node) => {14const collectionsNode = (0, WABinary_1.getBinaryNodeChild)(node, 'collections');15const collections = (0, WABinary_1.getBinaryNodeChildren)(collectionsNode, 'collection').map(collectionNode => {16const id = (0, WABinary_1.getBinaryNodeChildString)(collectionNode, 'id');17const name = (0, WABinary_1.getBinaryNodeChildString)(collectionNode, 'name');18const products = (0, WABinary_1.getBinaryNodeChildren)(collectionNode, 'product').map(exports.parseProductNode);19return {20id,21name,22products,23status: parseStatusInfo(collectionNode)24};25});26return {27collections28};29};30exports.parseCollectionsNode = parseCollectionsNode;31const parseOrderDetailsNode = (node) => {32const orderNode = (0, WABinary_1.getBinaryNodeChild)(node, 'order');33const products = (0, WABinary_1.getBinaryNodeChildren)(orderNode, 'product').map(productNode => {34const imageNode = (0, WABinary_1.getBinaryNodeChild)(productNode, 'image');35return {36id: (0, WABinary_1.getBinaryNodeChildString)(productNode, 'id'),37name: (0, WABinary_1.getBinaryNodeChildString)(productNode, 'name'),38imageUrl: (0, WABinary_1.getBinaryNodeChildString)(imageNode, 'url'),39price: +(0, WABinary_1.getBinaryNodeChildString)(productNode, 'price'),40currency: (0, WABinary_1.getBinaryNodeChildString)(productNode, 'currency'),41quantity: +(0, WABinary_1.getBinaryNodeChildString)(productNode, 'quantity')42};43});44const priceNode = (0, WABinary_1.getBinaryNodeChild)(orderNode, 'price');45const orderDetails = {46price: {47total: +(0, WABinary_1.getBinaryNodeChildString)(priceNode, 'total'),48currency: (0, WABinary_1.getBinaryNodeChildString)(priceNode, 'currency'),49},50products51};52return orderDetails;53};54exports.parseOrderDetailsNode = parseOrderDetailsNode;55const toProductNode = (productId, product) => {56const attrs = {};57const content = [];58if (typeof productId !== 'undefined') {59content.push({60tag: 'id',61attrs: {},62content: Buffer.from(productId)63});64}65if (typeof product.name !== 'undefined') {66content.push({67tag: 'name',68attrs: {},69content: Buffer.from(product.name)70});71}72if (typeof product.description !== 'undefined') {73content.push({74tag: 'description',75attrs: {},76content: Buffer.from(product.description)77});78}79if (typeof product.retailerId !== 'undefined') {80content.push({81tag: 'retailer_id',82attrs: {},83content: Buffer.from(product.retailerId)84});85}86if (product.images.length) {87content.push({88tag: 'media',89attrs: {},90content: product.images.map(img => {91if (!('url' in img)) {92throw new boom_1.Boom('Expected img for product to already be uploaded', { statusCode: 400 });93}94return {95tag: 'image',96attrs: {},97content: [98{99tag: 'url',100attrs: {},101content: Buffer.from(img.url.toString())102}103]104};105})106});107}108if (typeof product.price !== 'undefined') {109content.push({110tag: 'price',111attrs: {},112content: Buffer.from(product.price.toString())113});114}115if (typeof product.currency !== 'undefined') {116content.push({117tag: 'currency',118attrs: {},119content: Buffer.from(product.currency)120});121}122if ('originCountryCode' in product) {123if (typeof product.originCountryCode === 'undefined') {124attrs.compliance_category = 'COUNTRY_ORIGIN_EXEMPT';125}126else {127content.push({128tag: 'compliance_info',129attrs: {},130content: [131{132tag: 'country_code_origin',133attrs: {},134content: Buffer.from(product.originCountryCode)135}136]137});138}139}140if (typeof product.isHidden !== 'undefined') {141attrs.is_hidden = product.isHidden.toString();142}143const node = {144tag: 'product',145attrs,146content147};148return node;149};150exports.toProductNode = toProductNode;151const parseProductNode = (productNode) => {152const isHidden = productNode.attrs.is_hidden === 'true';153const id = (0, WABinary_1.getBinaryNodeChildString)(productNode, 'id');154const mediaNode = (0, WABinary_1.getBinaryNodeChild)(productNode, 'media');155const statusInfoNode = (0, WABinary_1.getBinaryNodeChild)(productNode, 'status_info');156const product = {157id,158imageUrls: parseImageUrls(mediaNode),159reviewStatus: {160whatsapp: (0, WABinary_1.getBinaryNodeChildString)(statusInfoNode, 'status'),161},162availability: 'in stock',163name: (0, WABinary_1.getBinaryNodeChildString)(productNode, 'name'),164retailerId: (0, WABinary_1.getBinaryNodeChildString)(productNode, 'retailer_id'),165url: (0, WABinary_1.getBinaryNodeChildString)(productNode, 'url'),166description: (0, WABinary_1.getBinaryNodeChildString)(productNode, 'description'),167price: +(0, WABinary_1.getBinaryNodeChildString)(productNode, 'price'),168currency: (0, WABinary_1.getBinaryNodeChildString)(productNode, 'currency'),169isHidden,170};171return product;172};173exports.parseProductNode = parseProductNode;174/**175* Uploads images not already uploaded to WA's servers176*/177async function uploadingNecessaryImagesOfProduct(product, waUploadToServer, timeoutMs = 30000) {178product = {179...product,180images: product.images ? await (0, exports.uploadingNecessaryImages)(product.images, waUploadToServer, timeoutMs) : product.images181};182return product;183}184exports.uploadingNecessaryImagesOfProduct = uploadingNecessaryImagesOfProduct;185/**186* Uploads images not already uploaded to WA's servers187*/188const uploadingNecessaryImages = async (images, waUploadToServer, timeoutMs = 30000) => {189const results = await Promise.all(images.map(async (img) => {190if ('url' in img) {191const url = img.url.toString();192if (url.includes('.whatsapp.net')) {193return { url };194}195}196const { stream } = await (0, messages_media_1.getStream)(img);197const hasher = (0, crypto_1.createHash)('sha256');198const contentBlocks = [];199for await (const block of stream) {200hasher.update(block);201contentBlocks.push(block);202}203const sha = hasher.digest('base64');204const { mediaUrl } = await waUploadToServer((0, messages_media_1.toReadable)(Buffer.concat(contentBlocks)), { mediaType: 'image', fileEncSha256B64: sha, timeoutMs });205return { url: mediaUrl };206}));207return results;208};209exports.uploadingNecessaryImages = uploadingNecessaryImages;210const parseImageUrls = (mediaNode) => {211const imgNode = (0, WABinary_1.getBinaryNodeChild)(mediaNode, 'image');212return {213requested: (0, WABinary_1.getBinaryNodeChildString)(imgNode, 'request_image_url'),214original: (0, WABinary_1.getBinaryNodeChildString)(imgNode, 'original_image_url')215};216};217const parseStatusInfo = (mediaNode) => {218const node = (0, WABinary_1.getBinaryNodeChild)(mediaNode, 'status_info');219return {220status: (0, WABinary_1.getBinaryNodeChildString)(node, 'status'),221canAppeal: (0, WABinary_1.getBinaryNodeChildString)(node, 'can_appeal') === 'true',222};223};224225226