mirror of
https://github.com/FranP-code/Baileys.git
synced 2025-10-13 00:32:22 +00:00
241 lines
5.0 KiB
TypeScript
241 lines
5.0 KiB
TypeScript
import { ProductCreate, ProductUpdate, SocketConfig } from '../Types'
|
|
import { parseCatalogNode, parseCollectionsNode, parseOrderDetailsNode, parseProductNode, toProductNode, uploadingNecessaryImagesOfProduct } from '../Utils/business'
|
|
import { jidNormalizedUser, S_WHATSAPP_NET } from '../WABinary'
|
|
import { getBinaryNodeChild } from '../WABinary/generic-utils'
|
|
import { makeMessagesRecvSocket } from './messages-recv'
|
|
|
|
export const makeBusinessSocket = (config: SocketConfig) => {
|
|
const sock = makeMessagesRecvSocket(config)
|
|
const {
|
|
authState,
|
|
query,
|
|
waUploadToServer
|
|
} = sock
|
|
|
|
const getCatalog = async(jid?: string, limit = 10) => {
|
|
jid = jidNormalizedUser(jid || authState.creds.me?.id)
|
|
const result = await query({
|
|
tag: 'iq',
|
|
attrs: {
|
|
to: S_WHATSAPP_NET,
|
|
type: 'get',
|
|
xmlns: 'w:biz:catalog'
|
|
},
|
|
content: [
|
|
{
|
|
tag: 'product_catalog',
|
|
attrs: {
|
|
jid,
|
|
allow_shop_source: 'true'
|
|
},
|
|
content: [
|
|
{
|
|
tag: 'limit',
|
|
attrs: { },
|
|
content: Buffer.from([ 49, 48 ])
|
|
},
|
|
{
|
|
tag: 'width',
|
|
attrs: { },
|
|
content: Buffer.from([ 49, 48, 48 ])
|
|
},
|
|
{
|
|
tag: 'height',
|
|
attrs: { },
|
|
content: Buffer.from([ 49, 48, 48 ])
|
|
}
|
|
]
|
|
}
|
|
]
|
|
})
|
|
return parseCatalogNode(result)
|
|
}
|
|
|
|
const getCollections = async(jid?: string, limit = 51) => {
|
|
jid = jidNormalizedUser(jid || authState.creds.me?.id)
|
|
const result = await query({
|
|
tag: 'iq',
|
|
attrs: {
|
|
to: S_WHATSAPP_NET,
|
|
type: 'get',
|
|
xmlns: 'w:biz:catalog',
|
|
smax_id: '35'
|
|
},
|
|
content: [
|
|
{
|
|
tag: 'collections',
|
|
attrs: {
|
|
biz_jid: jid,
|
|
},
|
|
content: [
|
|
{
|
|
tag: 'collection_limit',
|
|
attrs: { },
|
|
content: Buffer.from([ 49, 48 ])
|
|
},
|
|
{
|
|
tag: 'item_limit',
|
|
attrs: { },
|
|
content: Buffer.from([ limit ])
|
|
},
|
|
{
|
|
tag: 'width',
|
|
attrs: { },
|
|
content: Buffer.from([ 49, 48, 48 ])
|
|
},
|
|
{
|
|
tag: 'height',
|
|
attrs: { },
|
|
content: Buffer.from([ 49, 48, 48 ])
|
|
}
|
|
]
|
|
}
|
|
]
|
|
})
|
|
|
|
return parseCollectionsNode(result)
|
|
}
|
|
|
|
const getOrderDetails = async(orderId: string, tokenBase64: string) => {
|
|
const result = await query({
|
|
tag: 'iq',
|
|
attrs: {
|
|
to: S_WHATSAPP_NET,
|
|
type: 'get',
|
|
xmlns: 'fb:thrift_iq',
|
|
smax_id: '5'
|
|
},
|
|
content: [
|
|
{
|
|
tag: 'order',
|
|
attrs: {
|
|
op: 'get',
|
|
id: orderId
|
|
},
|
|
content: [
|
|
{
|
|
tag: 'image_dimensions',
|
|
attrs: { },
|
|
content: [
|
|
{
|
|
tag: 'width',
|
|
attrs: { },
|
|
content: Buffer.from('100')
|
|
},
|
|
{
|
|
tag: 'height',
|
|
attrs: { },
|
|
content: Buffer.from('100')
|
|
}
|
|
]
|
|
},
|
|
{
|
|
tag: 'token',
|
|
attrs: { },
|
|
content: Buffer.from(tokenBase64)
|
|
}
|
|
]
|
|
}
|
|
]
|
|
})
|
|
|
|
return parseOrderDetailsNode(result)
|
|
}
|
|
|
|
const productUpdate = async(productId: string, update: ProductUpdate) => {
|
|
update = await uploadingNecessaryImagesOfProduct(update, waUploadToServer)
|
|
const editNode = toProductNode(productId, update)
|
|
|
|
const result = await query({
|
|
tag: 'iq',
|
|
attrs: {
|
|
to: S_WHATSAPP_NET,
|
|
type: 'set',
|
|
xmlns: 'w:biz:catalog'
|
|
},
|
|
content: [
|
|
{
|
|
tag: 'product_catalog_edit',
|
|
attrs: { v: '1' },
|
|
content: [ editNode ]
|
|
}
|
|
]
|
|
})
|
|
|
|
const productCatalogEditNode = getBinaryNodeChild(result, 'product_catalog_edit')
|
|
const productNode = getBinaryNodeChild(productCatalogEditNode, 'product')
|
|
|
|
return parseProductNode(productNode)
|
|
}
|
|
|
|
const productCreate = async(create: ProductCreate) => {
|
|
create = await uploadingNecessaryImagesOfProduct(create, waUploadToServer)
|
|
const createNode = toProductNode(undefined, create)
|
|
|
|
const result = await query({
|
|
tag: 'iq',
|
|
attrs: {
|
|
to: S_WHATSAPP_NET,
|
|
type: 'set',
|
|
xmlns: 'w:biz:catalog'
|
|
},
|
|
content: [
|
|
{
|
|
tag: 'product_catalog_add',
|
|
attrs: { v: '1' },
|
|
content: [ createNode ]
|
|
}
|
|
]
|
|
})
|
|
|
|
const productCatalogAddNode = getBinaryNodeChild(result, 'product_catalog_add')
|
|
const productNode = getBinaryNodeChild(productCatalogAddNode, 'product')
|
|
|
|
return parseProductNode(productNode)
|
|
}
|
|
|
|
const productDelete = async(productIds: string[]) => {
|
|
const result = await query({
|
|
tag: 'iq',
|
|
attrs: {
|
|
to: S_WHATSAPP_NET,
|
|
type: 'set',
|
|
xmlns: 'w:biz:catalog'
|
|
},
|
|
content: [
|
|
{
|
|
tag: 'product_catalog_delete',
|
|
attrs: { v: '1' },
|
|
content: productIds.map(
|
|
id => ({
|
|
tag: 'product',
|
|
attrs: { },
|
|
content: [
|
|
{
|
|
tag: 'id',
|
|
attrs: { },
|
|
content: Buffer.from(id)
|
|
}
|
|
]
|
|
})
|
|
)
|
|
}
|
|
]
|
|
})
|
|
|
|
const productCatalogDelNode = getBinaryNodeChild(result, 'product_catalog_delete')
|
|
return {
|
|
deleted: +productCatalogDelNode.attrs.deleted_count
|
|
}
|
|
}
|
|
|
|
return {
|
|
...sock,
|
|
getOrderDetails,
|
|
getCatalog,
|
|
getCollections,
|
|
productCreate,
|
|
productDelete,
|
|
productUpdate
|
|
}
|
|
} |