From e17baddf016835bda085f3f7c661ade1732bfc62 Mon Sep 17 00:00:00 2001 From: jaison-x Date: Fri, 24 Nov 2023 18:59:19 -0300 Subject: [PATCH] fix: workaround to manage param data as an array in mongodb When saving data from a group session (sender-key-xxxxx@g.us::xxxxx::xx) we receive the data param as an array. In mongodb we can't save an array as a root document. Bacause this, in this case we save the array in a property called content_array. --- src/utils/use-multi-file-auth-state-db.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/utils/use-multi-file-auth-state-db.ts b/src/utils/use-multi-file-auth-state-db.ts index a021372a..237b15d0 100644 --- a/src/utils/use-multi-file-auth-state-db.ts +++ b/src/utils/use-multi-file-auth-state-db.ts @@ -25,7 +25,14 @@ export async function useMultiFileAuthStateDb( const writeData = async (data: any, key: string): Promise => { try { await client.connect(); - return await collection.replaceOne({ _id: key }, JSON.parse(JSON.stringify(data, BufferJSON.replacer)), { + let msgParsed = JSON.parse(JSON.stringify(data, BufferJSON.replacer)); + if (Array.isArray(msgParsed)) { + msgParsed = { + _id: key, + content_array: msgParsed, + }; + } + return await collection.replaceOne({ _id: key }, msgParsed, { upsert: true, }); } catch (error) { @@ -36,7 +43,10 @@ export async function useMultiFileAuthStateDb( const readData = async (key: string): Promise => { try { await client.connect(); - const data = await collection.findOne({ _id: key }); + let data = (await collection.findOne({ _id: key })) as any; + if (data?.content_array) { + data = data.content_array; + } const creds = JSON.stringify(data); return JSON.parse(creds, BufferJSON.reviver); } catch (error) {