diff --git a/package.json b/package.json index bf4e3cd..b62abca 100644 --- a/package.json +++ b/package.json @@ -32,20 +32,18 @@ "url": "git@github.com:adiwajshing/baileys.git" }, "dependencies": { - "@adiwajshing/keyed-db": "^0.2.2", "@hapi/boom": "^9.1.3", "curve25519-js": "^0.0.4", "futoin-hkdf": "^1.3.2", "got": "^11.8.1", - "https-proxy-agent": "^5.0.0", "jimp": "^0.16.1", "music-metadata": "^7.4.1", "pino": "^6.7.0", - "pino-pretty": "^4.3.0", "protobufjs": "^6.10.1", "ws": "^7.3.1" }, "optionalDependencies": { + "@adiwajshing/keyed-db": "^0.2.4", "qrcode-terminal": "^0.12.0" }, "files": [ @@ -53,11 +51,13 @@ "WAMessage/*" ], "devDependencies": { + "@adiwajshing/keyed-db": "^0.2.4", "@types/got": "^9.6.11", "@types/jest": "^26.0.24", "@types/node": "^14.6.2", "@types/pino": "^6.3.2", "@types/ws": "^7.2.6", + "https-proxy-agent": "^5.0.0", "jest": "^27.0.6", "qrcode-terminal": "^0.12.0", "ts-jest": "^27.0.3", diff --git a/src/Connection/auth.ts b/src/Connection/auth.ts index 8834191..d6983ed 100644 --- a/src/Connection/auth.ts +++ b/src/Connection/auth.ts @@ -37,11 +37,11 @@ const makeAuthSocket = (config: SocketConfig) => { } } }) - const { socketEvents } = socket + const { ws } = socket let curveKeys: CurveKeyPair let initTimeout: NodeJS.Timeout // add close listener - socketEvents.on('ws-close', (error: Boom | Error) => { + ws.on('ws-close', (error: Boom | Error) => { logger.info({ error }, 'Closed connection to WhatsApp') initTimeout && clearTimeout(initTimeout) // if no reconnects occur @@ -239,7 +239,7 @@ const makeAuthSocket = (config: SocketConfig) => { }) ev.emit('credentials.update', auth) } - socketEvents.once('ws-open', async() => { + ws.once('open', async() => { try { await onOpen() } catch(error) { diff --git a/src/Connection/chats.ts b/src/Connection/chats.ts index 00ffe36..ed4a1a2 100644 --- a/src/Connection/chats.ts +++ b/src/Connection/chats.ts @@ -156,8 +156,6 @@ const makeChatsSocket = (config: SocketConfig) => { logger.error(`error in sending init queries: ${error}`) } }) - // this persists through socket connections - // as conn & getSocket share the same eventemitter socketEvents.on('CB:response,type:chat', async ({ data }: BinaryNode) => { chatsDebounceTimeout.cancel() if(Array.isArray(data)) { @@ -171,7 +169,7 @@ const makeChatsSocket = (config: SocketConfig) => { }) logger.info(`got ${chats.length} chats`) - ev.emit('chats.upsert', { chats, type: 'set' }) + ev.emit('chats.set', { chats }) } }) // got all contacts from phone @@ -184,7 +182,7 @@ const makeChatsSocket = (config: SocketConfig) => { }) logger.info(`got ${contacts.length} contacts`) - ev.emit('contacts.upsert', { contacts, type: 'set' }) + ev.emit('contacts.set', { contacts }) } }) // status updates @@ -237,7 +235,7 @@ const makeChatsSocket = (config: SocketConfig) => { const user = node[1] as Contact user.jid = whatsappID(user.jid) - ev.emit('contacts.upsert', { contacts: [user], type: 'upsert' }) + ev.emit('contacts.upsert', [user]) } }) @@ -251,7 +249,7 @@ const makeChatsSocket = (config: SocketConfig) => { socketEvents.on('CB:Blocklist', json => { json = json[1] const blocklist = json.blocklist - ev.emit('blocklist.update', { blocklist, type: 'set' }) + ev.emit('blocklist.set', { blocklist }) }) return { diff --git a/src/Connection/groups.ts b/src/Connection/groups.ts index 46c486b..86540c8 100644 --- a/src/Connection/groups.ts +++ b/src/Connection/groups.ts @@ -143,17 +143,14 @@ const makeGroupsSocket = (config: SocketConfig) => { metadata = await groupMetadataFull(gid) logger.warn (`group ID switched from ${gid} to ${response.gid}`) } - ev.emit('chats.upsert', { - chats: [ - { - jid: response.gid, - name: title, - t: unixTimestampSeconds(), - count: 0 - } - ], - type: 'upsert' - }) + ev.emit('chats.upsert', [ + { + jid: response.gid, + name: title, + t: unixTimestampSeconds(), + count: 0 + } + ]) return metadata }, /** diff --git a/src/Connection/socket.ts b/src/Connection/socket.ts index 2332fd5..739768a 100644 --- a/src/Connection/socket.ts +++ b/src/Connection/socket.ts @@ -95,6 +95,8 @@ export const makeSocket = ({ return tag } const end = (error: Error | undefined) => { + logger.debug({ error }, 'connection closed') + ws.removeAllListeners('close') ws.removeAllListeners('error') ws.removeAllListeners('open') @@ -105,9 +107,11 @@ export const makeSocket = ({ clearPhoneCheckInterval() if(ws.readyState !== ws.CLOSED && ws.readyState !== ws.CLOSING) { - socketEvents.emit('ws-close', error) try { ws.close() } catch { } } + ws.emit('ws-close', error) + // so it cannot be re-emitted + ws.removeAllListeners('ws-close') } const onMessageRecieved = (message: string | Buffer) => { if(message[0] === '!') { @@ -221,7 +225,8 @@ export const makeSocket = ({ onErr = err => reject(err || new Boom('Connection Closed', { statusCode: 429 })) socketEvents.on(`TAG:${tag}`, onRecv) - socketEvents.on('ws-close', onErr) // if the socket closes, you'll never receive the message + ws.on('close', onErr) // if the socket closes, you'll never receive the message + ws.on('error', onErr) }, ) return result as any @@ -230,7 +235,8 @@ export const makeSocket = ({ cancelPhoneChecker && cancelPhoneChecker() socketEvents.off(`TAG:${tag}`, onRecv) - socketEvents.off(`ws-close`, onErr) + ws.off('close', onErr) // if the socket closes, you'll never receive the message + ws.off('error', onErr) } } /** @@ -290,21 +296,21 @@ export const makeSocket = ({ await new Promise((resolve, reject) => { onOpen = () => resolve(undefined) onClose = reject - socketEvents.on('ws-open', onOpen) - socketEvents.on('ws-close', onClose) + ws.on('open', onOpen) + ws.on('close', onClose) + ws.on('error', onClose) }) .finally(() => { - socketEvents.off('ws-open', onOpen) - socketEvents.off('ws-close', onClose) + socketEvents.off('open', onOpen) + socketEvents.off('close', onClose) + socketEvents.off('error', onClose) }) } ws.on('message', onMessageRecieved) ws.on('open', () => { startKeepAliveRequest() - logger.info('Opened WS connection to WhatsApp Web') - socketEvents.emit('ws-open') }) ws.on('error', end) ws.on('close', () => end(new Boom('Connection Terminated', { statusCode: DisconnectReason.connectionLost }))) diff --git a/src/Store/in-memory-store.ts b/src/Store/in-memory-store.ts index 5ca99fa..d11ecd8 100644 --- a/src/Store/in-memory-store.ts +++ b/src/Store/in-memory-store.ts @@ -1,6 +1,6 @@ -import KeyedDB from "@adiwajshing/keyed-db" -import { Comparable } from "@adiwajshing/keyed-db/lib/Types" -import { Logger } from "pino" +import type KeyedDB from "@adiwajshing/keyed-db" +import type { Comparable } from "@adiwajshing/keyed-db/lib/Types" +import type { Logger } from "pino" import type { Connection } from "../Connection" import type { BaileysEventEmitter, Chat, ConnectionState, Contact, GroupMetadata, WAMessage, WAMessageCursor } from "../Types" import { toNumber } from "../Utils" @@ -23,8 +23,8 @@ const makeMessagesDictionary = () => makeOrderedDictionary(waMessageID) export default( { logger, chatKey }: BaileysInMemoryStoreConfig ) => { - - const chats = new KeyedDB(chatKey, c => c.jid) + const KeyedDBConstructor = require('@adiwajshing/keyed-db').default as new (...args: any[]) => KeyedDB + const chats = new KeyedDBConstructor(chatKey, c => c.jid) const messages: { [_: string]: ReturnType } = {} const contacts: { [_: string]: Contact } = {} const groupMetadata: { [_: string]: GroupMetadata } = {} @@ -39,11 +39,8 @@ export default( } const listen = (ev: BaileysEventEmitter) => { - - ev.on('connection.update', update => { - Object.assign(state, update) - }) - ev.on('contacts.upsert', ({ contacts: newContacts, type }) => { + + const contactsUpsert = (newContacts: Contact[]) => { const oldContacts = new Set(Object.keys(contacts)) for(const contact of newContacts) { oldContacts.delete(contact.jid) @@ -52,12 +49,18 @@ export default( contact ) } - if(type === 'set') { - for(const jid of oldContacts) { - delete contacts[jid] - } - logger.debug({ deletedContacts: oldContacts.size }, 'synced contacts') + return oldContacts + } + + ev.on('connection.update', update => { + Object.assign(state, update) + }) + ev.on('contacts.set', ({ contacts: newContacts }) => { + const oldContacts = contactsUpsert(newContacts) + for(const jid of oldContacts) { + delete contacts[jid] } + logger.debug({ deletedContacts: oldContacts.size }, 'synced contacts') }) ev.on('contacts.update', updates => { for(const update of updates) { @@ -68,13 +71,11 @@ export default( } } }) - ev.on('chats.upsert', ({ chats: newChats, type }) => { - if(type === 'set') { - chats.clear() - } - for(const chat of newChats) { - chats.upsert(chat) - } + ev.on('chats.upsert', newChats => { + chats.upsert(...newChats) + }) + ev.on('chats.set', ({ chats: newChats }) => { + chats.upsert(...newChats) }) ev.on('chats.update', updates => { for(const update of updates) { @@ -101,10 +102,9 @@ export default( list.upsert(msg, 'append') if(type === 'notify' && !chats.get(jid)) { - ev.emit('chats.upsert', { - chats: [ { jid, t: toNumber(msg.messageTimestamp), count: 1 } ], - type: 'upsert' - }) + ev.emit('chats.upsert', [ + { jid, t: toNumber(msg.messageTimestamp), count: 1 } + ]) } } break @@ -135,9 +135,10 @@ export default( const list = assertMessageList(update.key.remoteJid) const result = list.updateAssign(update) if(!result) { - logger.debug({ update }, `got update for non-existant message`) + logger.debug({ update }, `got update for non-existent message`) } } + }) ev.on('messages.delete', item => { const list = assertMessageList(item.jid) diff --git a/src/Store/ordered-dictionary.ts b/src/Store/ordered-dictionary.ts index 50272a0..d1ce2ad 100644 --- a/src/Store/ordered-dictionary.ts +++ b/src/Store/ordered-dictionary.ts @@ -50,6 +50,7 @@ const makeOrderedDictionary = function(idGetter: (item: T) => string) { const item = get(idGetter(update as any)) if(item) { Object.assign(item, update) + return true } return false }, diff --git a/src/Types/index.ts b/src/Types/index.ts index 9127ae0..7091a1c 100644 --- a/src/Types/index.ts +++ b/src/Types/index.ts @@ -170,11 +170,13 @@ export type BaileysEventMap = { 'connection.update': Partial 'credentials.update': AuthenticationCredentials - 'chats.upsert': { chats: Chat[], type: 'set' | 'upsert' } + 'chats.set': { chats: Chat[] } + 'chats.upsert': Chat[] 'chats.update': Partial[] 'chats.delete': string[] - 'contacts.upsert': { contacts: Contact[], type: 'set' | 'upsert' } + 'contacts.set': { contacts: Contact[] } + 'contacts.upsert': Contact[] 'contacts.update': Partial[] 'messages.delete': { jid: string, ids: string[] } | { jid: string, all: true } @@ -184,7 +186,8 @@ export type BaileysEventMap = { 'groups.update': Partial[] 'group-participants.update': { jid: string, participants: string[], action: ParticipantAction } - 'blocklist.update': { blocklist: string[], type: 'add' | 'remove' | 'set' } + 'blocklist.set': { blocklist: string[] } + 'blocklist.update': { blocklist: string[], type: 'add' | 'remove' } } export interface BaileysEventEmitter extends EventEmitter { on(event: T, listener: (arg: BaileysEventMap[T]) => void): this diff --git a/yarn.lock b/yarn.lock index e584e8c..afcc087 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@adiwajshing/keyed-db@^0.2.2": +"@adiwajshing/keyed-db@^0.2.4": version "0.2.4" resolved "https://registry.yarnpkg.com/@adiwajshing/keyed-db/-/keyed-db-0.2.4.tgz#2a09e88fce20b2672deb60a7750c5fe3ab0dfd99" integrity sha512-yprSnAtj80/VKuDqRcFFLDYltoNV8tChNwFfIgcf6PGD4sjzWIBgs08pRuTqGH5mk5wgL6PBRSsMCZqtZwzFEw== @@ -321,11 +321,6 @@ dependencies: "@hapi/hoek" "9.x.x" -"@hapi/bourne@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-2.0.0.tgz#5bb2193eb685c0007540ca61d166d4e1edaf918d" - integrity sha512-WEezM1FWztfbzqIUbsDzFRVMxSoLy3HugVcux6KDDtTqzPsLE8NDRHfXvev66aH1i2oOKKar3/XDjbvh/OUBdg== - "@hapi/hoek@9.x.x": version "9.2.0" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.0.tgz#f3933a44e365864f4dad5db94158106d511e8131" @@ -890,9 +885,9 @@ "@sinonjs/commons" "^1.7.0" "@szmarczak/http-timer@^4.0.5": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.5.tgz#bfbd50211e9dfa51ba07da58a14cdfd333205152" - integrity sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ== + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== dependencies: defer-to-connect "^2.0.0" @@ -969,11 +964,6 @@ "@types/node" "*" "@types/responselike" "*" -"@types/debug@^4.1.5": - version "4.1.6" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.6.tgz#0b7018723084918a865eff99249c490505df2163" - integrity sha512-7fDOJFA/x8B+sO1901BmHlf5dE1cxBU8mRXj8QOEDnn16hhGJv/IHxJtZhvsabZsIMn0eLIyeOKAeqSNJJYTpA== - "@types/got@^9.6.11": version "9.6.12" resolved "https://registry.yarnpkg.com/@types/got/-/got-9.6.12.tgz#fd42a6e1f5f64cd6bb422279b08c30bb5a15a56f" @@ -1035,9 +1025,9 @@ integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== "@types/node@*", "@types/node@>=13.7.0": - version "16.0.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.0.1.tgz#70cedfda26af7a2ca073fdcc9beb2fff4aa693f8" - integrity sha512-hBOx4SUlEPKwRi6PrXuTGw1z6lz0fjsibcWCM378YxsSu/6+C30L6CR49zIBKHiwNWCYIcOLjg4OHKZaFeLAug== + version "16.3.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.3.3.tgz#0c30adff37bbbc7a50eb9b58fae2a504d0d88038" + integrity sha512-8h7k1YgQKxKXWckzFCMfsIwn0Y61UK6tlD6y2lOb3hTOIMlK3t9/QwHOhc81TwU+RMf0As5fj7NPjroERCnejQ== "@types/node@^14.6.2": version "14.17.5" @@ -1073,14 +1063,6 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.3.2.tgz#fc8c2825e4ed2142473b4a81064e6e081463d1b3" integrity sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog== -"@types/readable-stream@^2.3.9": - version "2.3.11" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.11.tgz#942bc4574a1d7ca4368cb9cb4352e3d2b4b51dea" - integrity sha512-0z+/apYJwKFz/RHp6mOMxz/y7xOvWPYPevuCEyAY3gXsjtaac02E26RvxA+I96rfvmVH/dEMGXNvyJfViR1FSQ== - dependencies: - "@types/node" "*" - safe-buffer "*" - "@types/responselike@*", "@types/responselike@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" @@ -1222,16 +1204,6 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -args@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/args/-/args-5.0.1.tgz#4bf298df90a4799a09521362c579278cc2fdd761" - integrity sha512-1kqmFCFsPffavQFGt8OxJdIcETti99kySRUPMpOhaGjL6mRJn8HFU1OxKY5bMqfZKUwTQc1mZkAjmGYaVOHFtQ== - dependencies: - camelcase "5.0.0" - chalk "2.4.2" - leven "2.1.0" - mri "1.1.4" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1409,11 +1381,6 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" - integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== - camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -1425,11 +1392,11 @@ camelcase@^6.2.0: integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== caniuse-lite@^1.0.30001219: - version "1.0.30001243" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001243.tgz#d9250155c91e872186671c523f3ae50cfc94a3aa" - integrity sha512-vNxw9mkTBtkmLFnJRv/2rhs1yufpDfCkBZexG3Y0xdOH2Z/eE/85E4Dl5j1YUN34nZVsSp6vVRFQRrez9wJMRA== + version "1.0.30001245" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001245.tgz#45b941bbd833cb0fa53861ff2bae746b3c6ca5d4" + integrity sha512-768fM9j1PKXpOCKws6eTo3RHmvTUsG9UrpT4WoREFeZgJBTi4/X9g565azS/rVUGtqb8nt7FjLeF5u4kukERnA== -chalk@2.4.2, chalk@^2.0.0: +chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1457,9 +1424,9 @@ ci-info@^3.1.1: integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== cjs-module-lexer@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz#2fd46d9906a126965aa541345c499aaa18e8cd73" - integrity sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw== + version "1.2.2" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== cliui@^7.0.2: version "7.0.4" @@ -1590,11 +1557,6 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -dateformat@^4.5.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.5.1.tgz#c20e7a9ca77d147906b6dc2261a8be0a5bd2173c" - integrity sha512-OD0TZ+B7yP7ZgpJf5K2DIbj3FZvFvxgFUuaqA/V5zTjAtAAXZ1E8bktHxmAGs4x5b7PflqA9LeQ84Og7wYtF7Q== - debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" @@ -1672,9 +1634,9 @@ domexception@^2.0.1: webidl-conversions "^5.0.0" electron-to-chromium@^1.3.723: - version "1.3.770" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.770.tgz#a9e705a73315f4900880622b3ab76cf1d7221b77" - integrity sha512-Kyh8DGK1KfEZuYKIHvuOmrKotsKZQ+qBkDIWHciE3QoFkxXB1KzPP+tfLilSHAfxTON0yYMnFCWkQtUOR7g6KQ== + version "1.3.779" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz#de55492a756deec63424f89fbe62aec9776f0e6d" + integrity sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew== emittery@^0.8.1: version "0.8.1" @@ -1787,10 +1749,10 @@ fast-redact@^3.0.0: resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.0.1.tgz#d6015b971e933d03529b01333ba7f22c29961e92" integrity sha512-kYpn4Y/valC9MdrISg47tZOpYBNoTXKgT9GYXFpHN/jYFs+lFkPoisY+LcBODdKVMY96ATzvzsWv+ES/4Kmufw== -fast-safe-stringify@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" - integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== +fast-safe-stringify@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz#dc2af48c46cf712b683e849b2bbd446b32de936f" + integrity sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag== fb-watchman@^2.0.0: version "2.0.1" @@ -1800,9 +1762,9 @@ fb-watchman@^2.0.0: bser "2.1.1" file-type@^16.5.0: - version "16.5.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-16.5.0.tgz#16a2626f3b33bac612f6e81e52216f3a7c8e12a2" - integrity sha512-OxgWA9tbL8N/WP00GD1z8O0MiwQKFyWRs1q+3FhjdvcGgKqwxcejyGWso3n4/IMU6DdwV+ARZ4A7TTnPkDcSiw== + version "16.5.1" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-16.5.1.tgz#dd697dc5c3a2f4db63af746f38a6322e5e7bc6a5" + integrity sha512-Pi1G43smrCy82Q3be3sfKaeS5uHdfj905dP88YqhroG6TYbVY2ljTdDXeXqa6Cn5nOk6znOjWM2uZptA8vH/qQ== dependencies: readable-web-to-node-stream "^3.0.0" strtok3 "^6.0.3" @@ -2095,9 +2057,9 @@ is-ci@^3.0.0: ci-info "^3.1.1" is-core-module@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" - integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== + version "2.5.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491" + integrity sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg== dependencies: has "^1.0.3" @@ -2617,16 +2579,6 @@ jimp@^0.16.1: "@jimp/types" "^0.16.1" regenerator-runtime "^0.13.3" -jmespath@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" - integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc= - -joycon@^2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/joycon/-/joycon-2.2.5.tgz#8d4cf4cbb2544d7b7583c216fcdfec19f6be1615" - integrity sha512-YqvUxoOcVPnCp0VU1/56f+iKSdvIRJYPznH22BdXV3xMk75SFXhWeJkZ8C9XxUWt1b5x2X1SxuFygW1U0FmkEQ== - jpeg-js@0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.2.tgz#8b345b1ae4abde64c2da2fe67ea216a114ac279d" @@ -2716,11 +2668,6 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -leven@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -2894,11 +2841,6 @@ mkdirp@^0.5.1: dependencies: minimist "^1.2.5" -mri@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" - integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -3083,10 +3025,10 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -peek-readable@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-3.1.3.tgz#932480d46cf6aa553c46c68566c4fb69a82cd2b1" - integrity sha512-mpAcysyRJxmICBcBa5IXH7SZPvWkcghm6Fk8RekoS3v+BpbSzlZzuWbMx+GXrlUwESi9qHar4nVEZNMKylIHvg== +peek-readable@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-4.0.0.tgz#b024ef391c86136eba0ae9df3ff4f966a09e9a7e" + integrity sha512-kLbU4cz6h86poGVBKgAVMpFmD47nX04fPPQNKnv9fuj+IJZYkEBjsYAVu5nDbZWx0ZsWwWlMzeG90zQa5KLBaA== phin@^2.9.1: version "2.9.3" @@ -3098,36 +3040,18 @@ picomatch@^2.0.4, picomatch@^2.2.3: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== -pino-pretty@^4.3.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-4.8.0.tgz#f2f3055bf222456217b14ffb04d8be0a0cc17fce" - integrity sha512-mhQfHG4rw5ZFpWL44m0Utjo4GC2+HMfdNvxyA8lLw0sIqn6fCf7uQe6dPckUcW/obly+OQHD7B/MTso6LNizYw== - dependencies: - "@hapi/bourne" "^2.0.0" - args "^5.0.1" - chalk "^4.0.0" - dateformat "^4.5.1" - fast-safe-stringify "^2.0.7" - jmespath "^0.15.0" - joycon "^2.2.5" - pump "^3.0.0" - readable-stream "^3.6.0" - rfdc "^1.3.0" - split2 "^3.1.1" - strip-json-comments "^3.1.1" - pino-std-serializers@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz#b56487c402d882eb96cd67c257868016b61ad671" integrity sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg== pino@^6.7.0: - version "6.11.3" - resolved "https://registry.yarnpkg.com/pino/-/pino-6.11.3.tgz#0c02eec6029d25e6794fdb6bbea367247d74bc29" - integrity sha512-drPtqkkSf0ufx2gaea3TryFiBHdNIdXKf5LN0hTM82SXI4xVIve2wLwNg92e1MT6m3jASLu6VO7eGY6+mmGeyw== + version "6.12.0" + resolved "https://registry.yarnpkg.com/pino/-/pino-6.12.0.tgz#2281521620d70eeff519039467352d656f46735e" + integrity sha512-5NGopOcUusGuklGHVVv9az0Hv/Dj3urHhD3G+zhl5pBGIRYAeGCi/Ej6YCl16Q2ko28cmYiJz+/qRoJiwy62Rw== dependencies: fast-redact "^3.0.0" - fast-safe-stringify "^2.0.7" + fast-safe-stringify "^2.0.8" flatstr "^1.0.12" pino-std-serializers "^3.1.0" quick-format-unescaped "^4.0.3" @@ -3259,7 +3183,7 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -readable-stream@^3.0.0, readable-stream@^3.6.0: +readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -3269,11 +3193,10 @@ readable-stream@^3.0.0, readable-stream@^3.6.0: util-deprecate "^1.0.1" readable-web-to-node-stream@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.1.tgz#3f619b1bc5dd73a4cfe5c5f9b4f6faba55dff845" - integrity sha512-4zDC6CvjUyusN7V0QLsXVB7pJCD9+vtrM9bYDRv6uBQ+SKfx36rp5AFNPRgh9auKRul/a1iFZJYXcCbwRL+SaA== + version "3.0.2" + resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb" + integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== dependencies: - "@types/readable-stream" "^2.3.9" readable-stream "^3.6.0" rechoir@^0.6.2: @@ -3325,11 +3248,6 @@ responselike@^2.0.0: dependencies: lowercase-keys "^2.0.0" -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - rimraf@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -3337,16 +3255,16 @@ rimraf@^3.0.0: dependencies: glob "^7.1.3" -safe-buffer@*, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -3452,13 +3370,6 @@ source-map@^0.7.3: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -split2@^3.1.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== - dependencies: - readable-stream "^3.0.0" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -3512,19 +3423,12 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - strtok3@^6.0.3, strtok3@^6.0.8: - version "6.0.8" - resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-6.0.8.tgz#c839157f615c10ba0f4ae35067dad9959eeca346" - integrity sha512-QLgv+oiXwXgCgp2PdPPa+Jpp4D9imK9e/0BsyfeFMr6QL6wMVqoVn9+OXQ9I7MZbmUzN6lmitTJ09uwS2OmGcw== + version "6.2.0" + resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-6.2.0.tgz#7c24e74a9a24c7f2b976e4469654d459e6795d91" + integrity sha512-hBbPN4+f9fypbfTs0NImALgzYcb6k/blFr2mJVX6bUOmJCbXe/trDHdIC+Ir5XUXRMGFvq487ecwLitDoHVoew== dependencies: - "@tokenizer/token" "^0.1.1" - "@types/debug" "^4.1.5" - peek-readable "^3.1.3" + peek-readable "^4.0.0" supports-color@^5.3.0: version "5.5.0" @@ -3650,9 +3554,9 @@ ts-jest@^27.0.3: yargs-parser "20.x" ts-node@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.0.0.tgz#05f10b9a716b0b624129ad44f0ea05dac84ba3be" - integrity sha512-ROWeOIUvfFbPZkoDis0L/55Fk+6gFQNZwwKPLinacRl6tsxstTF1DbAcLKkovwnpKMVvOMHP1TIbnwXwtLg1gg== + version "10.1.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.1.0.tgz#e656d8ad3b61106938a867f69c39a8ba6efc966e" + integrity sha512-6szn3+J9WyG2hE+5W8e0ruZrzyk1uFLYye6IGMBadnOzDh8aP7t8CbFpsfCiEx2+wMixAhjFt7lOZC4+l+WbEA== dependencies: "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" @@ -3851,9 +3755,9 @@ write-file-atomic@^3.0.0: typedarray-to-buffer "^3.1.5" ws@^7.3.1, ws@^7.4.5: - version "7.5.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.2.tgz#09cc8fea3bec1bc5ed44ef51b42f945be36900f6" - integrity sha512-lkF7AWRicoB9mAgjeKbGqVUekLnSNO4VjKVnuPHpQeOxZOErX6BPXwJk70nFslRCEEA8EVW7ZjKwXaP9N+1sKQ== + version "7.5.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" + integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== xhr@^2.0.1: version "2.6.0"