diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8fcd82b..f848a7f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -20,13 +20,11 @@ build-all: - turbo build .docker-build: - image: registry.gitlab.com/digiresilience/link/link-stack/buildx:main + image: registry.gitlab.com/digiresilience/link/link-stack/buildx:${CI_COMMIT_REF_NAME} services: - docker:dind stage: docker-build variables: - DOCKER_HOST: tcp://docker:2375 - DOCKER_TLS_CERTDIR: "" DOCKER_TAG: ${CI_COMMIT_SHORT_SHA} BUILD_CONTEXT: . only: @@ -39,13 +37,11 @@ build-all: - docker push ${DOCKER_NS}:${DOCKER_TAG} .docker-release: - image: registry.gitlab.com/digiresilience/link/link-stack/buildx:main + image: registry.gitlab.com/digiresilience/link/link-stack/buildx:${CI_COMMIT_REF_NAME} services: - docker:dind stage: docker-release variables: - DOCKER_HOST: tcp://docker:2375 - DOCKER_TLS_CERTDIR: "" DOCKER_TAG: ${CI_COMMIT_SHORT_SHA} DOCKER_TAG_NEW: ${CI_COMMIT_REF_NAME} only: @@ -199,7 +195,6 @@ zammad-docker-build: PNPM_HOME: "/pnpm" before_script: - export PATH="$PNPM_HOME:$PATH" - - corepack enable && corepack prepare pnpm@9.15.4 --activate script: - pnpm add -g turbo - pnpm install --frozen-lockfile @@ -222,7 +217,6 @@ zammad-standalone-docker-build: PNPM_HOME: "/pnpm" before_script: - export PATH="$PNPM_HOME:$PATH" - - corepack enable && corepack prepare pnpm@9.15.4 --activate script: - pnpm add -g turbo - pnpm install --frozen-lockfile diff --git a/.nvmrc b/.nvmrc index 32cfab6..54c6511 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v22.18.0 +v24 diff --git a/apps/bridge-frontend/package.json b/apps/bridge-frontend/package.json index 028641a..261b807 100644 --- a/apps/bridge-frontend/package.json +++ b/apps/bridge-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/bridge-frontend", - "version": "3.3.5", + "version": "3.4.0-beta.3", "type": "module", "scripts": { "dev": "next dev", diff --git a/apps/bridge-migrations/package.json b/apps/bridge-migrations/package.json index b6740ce..97b7865 100644 --- a/apps/bridge-migrations/package.json +++ b/apps/bridge-migrations/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/bridge-migrations", - "version": "3.3.5", + "version": "3.4.0-beta.3", "type": "module", "scripts": { "migrate:up:all": "tsx migrate.ts up:all", diff --git a/apps/bridge-whatsapp/package.json b/apps/bridge-whatsapp/package.json index cef6520..cb2d470 100644 --- a/apps/bridge-whatsapp/package.json +++ b/apps/bridge-whatsapp/package.json @@ -1,33 +1,29 @@ { "name": "@link-stack/bridge-whatsapp", - "version": "3.3.5", + "version": "3.4.0-beta.3", + "type": "module", "main": "build/main/index.js", "author": "Darren Clarke ", "license": "AGPL-3.0-or-later", "dependencies": { - "@adiwajshing/keyed-db": "0.2.4", "@hapi/hapi": "^21.4.3", "@hapipal/schmervice": "^3.0.0", "@hapipal/toys": "^4.0.0", "@link-stack/bridge-common": "workspace:*", "@link-stack/logger": "workspace:*", - "@whiskeysockets/baileys": "6.7.21", - "hapi-pino": "^13.0.0", - "link-preview-js": "^3.1.0" + "@whiskeysockets/baileys": "7.0.0-rc.9", + "hapi-pino": "^13.0.0" }, "devDependencies": { "@link-stack/eslint-config": "workspace:*", "@link-stack/jest-config": "workspace:*", "@link-stack/typescript-config": "workspace:*", - "@types/long": "^5", "@types/node": "*", - "dotenv-cli": "^10.0.0", - "tsx": "^4.20.6", "typescript": "^5.9.3" }, "scripts": { "build": "tsc -p tsconfig.json", - "dev": "dotenv -- tsx src/index.ts", + "dev": "node --env-file=.env --experimental-transform-types src/index.ts", "start": "node build/main/index.js" } } diff --git a/apps/bridge-whatsapp/src/index.ts b/apps/bridge-whatsapp/src/index.ts index 5be8763..bd255ff 100644 --- a/apps/bridge-whatsapp/src/index.ts +++ b/apps/bridge-whatsapp/src/index.ts @@ -1,17 +1,17 @@ import * as Hapi from "@hapi/hapi"; import hapiPino from "hapi-pino"; import Schmervice from "@hapipal/schmervice"; -import WhatsappService from "./service.js"; +import WhatsappService from "./service.ts"; import { RegisterBotRoute, UnverifyBotRoute, GetBotRoute, SendMessageRoute, ReceiveMessageRoute, -} from "./routes.js"; +} from "./routes.ts"; import { createLogger } from "@link-stack/logger"; -const logger = createLogger('bridge-whatsapp-index'); +const logger = createLogger("bridge-whatsapp-index"); const server = Hapi.server({ port: 5000 }); diff --git a/apps/bridge-whatsapp/src/routes.ts b/apps/bridge-whatsapp/src/routes.ts index 1d9caf6..7315020 100644 --- a/apps/bridge-whatsapp/src/routes.ts +++ b/apps/bridge-whatsapp/src/routes.ts @@ -1,6 +1,6 @@ import * as Hapi from "@hapi/hapi"; import Toys from "@hapipal/toys"; -import WhatsappService from "./service"; +import WhatsappService from "./service.ts"; const withDefaults = Toys.withRouteDefaults({ options: { @@ -27,15 +27,9 @@ export const SendMessageRoute = withDefaults({ description: "Send a message", async handler(request: Hapi.Request, _h: Hapi.ResponseToolkit) { const { id } = request.params; - const { phoneNumber, message, attachments } = - request.payload as MessageRequest; + const { phoneNumber, message, attachments } = request.payload as MessageRequest; const whatsappService = getService(request); - await whatsappService.send( - id, - phoneNumber, - message as string, - attachments, - ); + await whatsappService.send(id, phoneNumber, message as string, attachments); request.logger.info( { id, diff --git a/apps/bridge-whatsapp/src/service.ts b/apps/bridge-whatsapp/src/service.ts index 69a1895..41450cc 100644 --- a/apps/bridge-whatsapp/src/service.ts +++ b/apps/bridge-whatsapp/src/service.ts @@ -4,12 +4,13 @@ import makeWASocket, { DisconnectReason, proto, downloadContentFromMessage, - MediaType, fetchLatestBaileysVersion, isJidBroadcast, isJidStatusBroadcast, useMultiFileAuthState, } from "@whiskeysockets/baileys"; + +type MediaType = "audio" | "document" | "image" | "video" | "sticker"; import fs from "fs"; import { createLogger } from "@link-stack/logger"; import { @@ -97,6 +98,7 @@ export default class WhatsappService extends Service { ...options, auth: state, generateHighQualityLinkPreview: false, + syncFullHistory: true, msgRetryCounterMap, shouldIgnoreJid: (jid) => isJidBroadcast(jid) || isJidStatusBroadcast(jid), }); @@ -147,6 +149,17 @@ export default class WhatsappService extends Service { await this.queueUnreadMessages(botID, messages); } } + + if (events["messaging-history.set"]) { + const { messages, isLatest } = events["messaging-history.set"]; + logger.info( + { messageCount: messages.length, isLatest }, + "received message history on connection", + ); + if (messages.length > 0) { + await this.queueUnreadMessages(botID, messages); + } + } }); this.connections[botID] = { socket, msgRetryCounterMap }; @@ -167,7 +180,6 @@ export default class WhatsappService extends Service { await this.createConnection(botID, this.server, { browser: WhatsappService.browserDescription, - printQRInTerminal: true, version, }); } @@ -175,11 +187,12 @@ export default class WhatsappService extends Service { } private async queueMessage(botID: string, webMessageInfo: proto.IWebMessageInfo) { - const { - key: { id, fromMe, remoteJid }, - message, - messageTimestamp, - } = webMessageInfo; + const { key, message, messageTimestamp } = webMessageInfo; + if (!key) { + logger.warn("Message missing key, skipping"); + return; + } + const { id, fromMe, remoteJid } = key; logger.info("Message type debug"); for (const key in message) { logger.info( diff --git a/apps/bridge-whatsapp/src/types.ts b/apps/bridge-whatsapp/src/types.ts index 231a804..dc6d4fb 100644 --- a/apps/bridge-whatsapp/src/types.ts +++ b/apps/bridge-whatsapp/src/types.ts @@ -1,4 +1,4 @@ -import type WhatsappService from "./service.js"; +import type WhatsappService from "./service.ts"; declare module "@hapipal/schmervice" { interface SchmerviceDecorator { diff --git a/apps/bridge-whatsapp/tsconfig.json b/apps/bridge-whatsapp/tsconfig.json index 4b714ce..dce4015 100644 --- a/apps/bridge-whatsapp/tsconfig.json +++ b/apps/bridge-whatsapp/tsconfig.json @@ -1,16 +1,17 @@ { "extends": "@link-stack/typescript-config/tsconfig.node.json", "compilerOptions": { - "module": "commonjs", - "target": "es2018", + "module": "NodeNext", + "target": "es2022", "esModuleInterop": true, - "moduleResolution": "node", + "moduleResolution": "NodeNext", "outDir": "build/main", "rootDir": "src", "skipLibCheck": true, "types": ["node"], - "lib": ["es2020", "DOM"], - "composite": true + "lib": ["es2022", "DOM"], + "composite": true, + "rewriteRelativeImportExtensions": true }, "include": ["src/**/*.ts", "src/**/.*.ts"], "exclude": ["node_modules/**"] diff --git a/apps/bridge-worker/package.json b/apps/bridge-worker/package.json index 670d742..aa1d514 100644 --- a/apps/bridge-worker/package.json +++ b/apps/bridge-worker/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/bridge-worker", - "version": "3.3.5", + "version": "3.4.0-beta.3", "type": "module", "main": "build/main/index.js", "author": "Darren Clarke ", diff --git a/apps/link/package.json b/apps/link/package.json index 1f15196..78bf56d 100644 --- a/apps/link/package.json +++ b/apps/link/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/link", - "version": "3.3.5", + "version": "3.4.0-beta.3", "type": "module", "scripts": { "dev": "next dev -H 0.0.0.0", diff --git a/docker/buildx/Dockerfile b/docker/buildx/Dockerfile index dc394b5..28679d2 100644 --- a/docker/buildx/Dockerfile +++ b/docker/buildx/Dockerfile @@ -15,7 +15,7 @@ COPY --from=node /usr/local/lib /usr/local/lib COPY --from=node /usr/local/include /usr/local/include COPY --from=node /usr/local/bin /usr/local/bin -# Prepare pnpm (corepack is already enabled in node:22-alpine) +# Prepare pnpm (corepack symlinks already copied from node image) RUN corepack prepare pnpm@9.15.4 --activate # Set up pnpm home diff --git a/docker/scripts/docker.js b/docker/scripts/docker.js index 3d6e278..5f3e090 100644 --- a/docker/scripts/docker.js +++ b/docker/scripts/docker.js @@ -5,13 +5,13 @@ const app = process.argv[2]; const command = process.argv[3]; const files = { - all: ["zammad", "postgresql", "bridge", "opensearch", "link", "signal-cli-rest-api"], + all: ["zammad", "postgresql", "bridge", "opensearch", "link", "signal-cli-rest-api", "bridge-whatsapp"], linkDev: ["zammad", "postgresql", "opensearch"], link: ["zammad", "postgresql", "opensearch", "link"], linkOnly: ["link"], opensearch: ["opensearch"], - bridgeDev: ["zammad", "postgresql", "signal-cli-rest-api"], - bridge: ["zammad", "postgresql", "bridge", "signal-cli-rest-api"], + bridgeDev: ["zammad", "postgresql", "signal-cli-rest-api", "bridge-whatsapp"], + bridge: ["zammad", "postgresql", "bridge", "signal-cli-rest-api", "bridge-whatsapp"], zammad: ["zammad", "postgresql", "opensearch"], }; @@ -21,7 +21,7 @@ const finalFiles = files[app] .map((file) => ['-f', `docker/compose/${file}.yml`]).flat(); // Add bridge-dev.yml for dev commands that include zammad -const devAppsWithZammad = ['linkDev', 'bridgeDev', 'all']; +const devAppsWithZammad = ['linkDev', 'bridgeDev']; if (devAppsWithZammad.includes(app) && files[app].includes('zammad')) { finalFiles.push('-f', 'docker-compose.bridge-dev.yml'); } diff --git a/package.json b/package.json index 0a59707..d0bea60 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack", - "version": "3.3.5", + "version": "3.4.0-beta.3", "description": "Link from the Center for Digital Resilience", "scripts": { "dev": "dotenv -- turbo dev", @@ -49,7 +49,7 @@ "react": "19.2.0", "react-dom": "19.2.0", "ts-node": "^10.9.2", - "turbo": "^2.5.8", + "turbo": "^2.6.0", "typescript": "latest" }, "pnpm": { diff --git a/packages/bridge-common/package.json b/packages/bridge-common/package.json index 91b9696..341795f 100644 --- a/packages/bridge-common/package.json +++ b/packages/bridge-common/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/bridge-common", - "version": "3.3.5", + "version": "3.4.0-beta.3", "main": "build/main/index.js", "type": "module", "author": "Darren Clarke ", diff --git a/packages/bridge-ui/package.json b/packages/bridge-ui/package.json index 2e4d6fa..6883997 100644 --- a/packages/bridge-ui/package.json +++ b/packages/bridge-ui/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/bridge-ui", - "version": "3.3.5", + "version": "3.4.0-beta.3", "scripts": { "build": "tsc -p tsconfig.json" }, diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index c579d56..cd821a8 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/eslint-config", - "version": "3.3.5", + "version": "3.4.0-beta.3", "description": "amigo's eslint config", "main": "index.js", "author": "Abel Luck ", diff --git a/packages/jest-config/package.json b/packages/jest-config/package.json index 591a33a..ee69dfd 100644 --- a/packages/jest-config/package.json +++ b/packages/jest-config/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/jest-config", - "version": "3.3.5", + "version": "3.4.0-beta.3", "description": "", "main": "index.js", "author": "Abel Luck ", diff --git a/packages/logger/package.json b/packages/logger/package.json index cda0e71..05c5d73 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/logger", - "version": "3.3.5", + "version": "3.4.0-beta.3", "description": "Shared logging utility for Link Stack monorepo", "main": "./dist/index.js", "module": "./dist/index.mjs", diff --git a/packages/signal-api/package.json b/packages/signal-api/package.json index 0905a16..6ca7e55 100644 --- a/packages/signal-api/package.json +++ b/packages/signal-api/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/signal-api", - "version": "3.3.5", + "version": "3.4.0-beta.3", "type": "module", "main": "build/index.js", "exports": { diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index 98021b8..9a6367b 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/typescript-config", - "version": "3.3.5", + "version": "3.4.0-beta.3", "description": "Shared TypeScript config", "license": "AGPL-3.0-or-later", "author": "Abel Luck ", diff --git a/packages/ui/package.json b/packages/ui/package.json index a12655e..c7aaed1 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/ui", - "version": "3.3.5", + "version": "3.4.0-beta.3", "description": "", "scripts": { "build": "tsc -p tsconfig.json" diff --git a/packages/zammad-addon-bridge/package.json b/packages/zammad-addon-bridge/package.json index a7ef115..b7d978b 100644 --- a/packages/zammad-addon-bridge/package.json +++ b/packages/zammad-addon-bridge/package.json @@ -1,7 +1,7 @@ { "name": "@link-stack/zammad-addon-bridge", "displayName": "Bridge", - "version": "3.3.5", + "version": "3.4.0-beta.3", "description": "An addon that adds CDR Bridge channels to Zammad.", "scripts": { "build": "node '../zammad-addon-common/dist/build.js'", diff --git a/packages/zammad-addon-common/package.json b/packages/zammad-addon-common/package.json index 2b3c510..45f32f6 100644 --- a/packages/zammad-addon-common/package.json +++ b/packages/zammad-addon-common/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/zammad-addon-common", - "version": "3.3.5", + "version": "3.4.0-beta.3", "description": "", "bin": { "zpm-build": "./dist/build.js", diff --git a/packages/zammad-addon-hardening/package.json b/packages/zammad-addon-hardening/package.json index 725472b..047b9c9 100644 --- a/packages/zammad-addon-hardening/package.json +++ b/packages/zammad-addon-hardening/package.json @@ -1,7 +1,7 @@ { "name": "@link-stack/zammad-addon-hardening", "displayName": "Hardening", - "version": "3.3.5", + "version": "3.4.0-beta.3", "description": "A Zammad addon that hardens a Zammad instance according to CDR's needs.", "scripts": { "build": "node '../zammad-addon-common/dist/build.js'", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 647ef91..142bbfa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,7 +37,7 @@ importers: specifier: ^10.9.2 version: 10.9.2(@types/node@24.10.4)(typescript@5.9.3) turbo: - specifier: ^2.5.8 + specifier: ^2.6.0 version: 2.6.3 typescript: specifier: latest @@ -146,9 +146,6 @@ importers: apps/bridge-whatsapp: dependencies: - '@adiwajshing/keyed-db': - specifier: 0.2.4 - version: 0.2.4 '@hapi/hapi': specifier: ^21.4.3 version: 21.4.4 @@ -165,14 +162,11 @@ importers: specifier: workspace:* version: link:../../packages/logger '@whiskeysockets/baileys': - specifier: 6.7.21 - version: 6.7.21(link-preview-js@3.2.0)(sharp@0.34.5) + specifier: 7.0.0-rc.9 + version: 7.0.0-rc.9(sharp@0.34.5) hapi-pino: specifier: ^13.0.0 version: 13.0.0 - link-preview-js: - specifier: ^3.1.0 - version: 3.2.0 devDependencies: '@link-stack/eslint-config': specifier: workspace:* @@ -183,18 +177,9 @@ importers: '@link-stack/typescript-config': specifier: workspace:* version: link:../../packages/typescript-config - '@types/long': - specifier: ^5 - version: 5.0.0 '@types/node': specifier: '*' version: 24.10.4 - dotenv-cli: - specifier: ^10.0.0 - version: 10.0.0 - tsx: - specifier: ^4.20.6 - version: 4.21.0 typescript: specifier: ^5.9.3 version: 5.9.3 @@ -224,7 +209,7 @@ importers: version: 2.32.0 twilio: specifier: ^5.10.2 - version: 5.11.1 + version: 5.10.7 devDependencies: '@link-stack/eslint-config': specifier: workspace:* @@ -589,9 +574,6 @@ importers: packages: - '@adiwajshing/keyed-db@0.2.4': - resolution: {integrity: sha512-yprSnAtj80/VKuDqRcFFLDYltoNV8tChNwFfIgcf6PGD4sjzWIBgs08pRuTqGH5mk5wgL6PBRSsMCZqtZwzFEw==} - '@auth/core@0.41.1': resolution: {integrity: sha512-t9cJ2zNYAdWMacGRMT6+r4xr1uybIdmYa49calBPeTqwgAFPV/88ac9TEvCR85pvATiSPt8VaNf+Gt24JIT/uw==} peerDependencies: @@ -2144,10 +2126,6 @@ packages: '@types/long@4.0.2': resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} - '@types/long@5.0.0': - resolution: {integrity: sha512-eQs9RsucA/LNjnMoJvWG/nXa7Pot/RbBzilF/QRIU/xRl+0ApxrSUFsV5lmf01SvSlqMzJ7Zwxe440wmz2SJGA==} - deprecated: This is a stub types definition. long provides its own type definitions, so you do not need this installed. - '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} @@ -2351,8 +2329,8 @@ packages: cpu: [x64] os: [win32] - '@whiskeysockets/baileys@6.7.21': - resolution: {integrity: sha512-xx9OHd6jlPiu5yZVuUdwEgFNAOXiEG8sULHxC6XfzNwssnwxnA9Lp44pR05H621GQcKyCfsH33TGy+Na6ygX4w==} + '@whiskeysockets/baileys@7.0.0-rc.9': + resolution: {integrity: sha512-YFm5gKXfDP9byCXCW3OPHKXLzrAKzolzgVUlRosHHgwbnf2YOO3XknkMm6J7+F0ns8OA0uuSBhgkRHTDtqkacw==} engines: {node: '>=20.0.0'} peerDependencies: audio-decode: ^2.1.3 @@ -2526,8 +2504,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.9.10: - resolution: {integrity: sha512-2VIKvDx8Z1a9rTB2eCkdPE5nSe28XnA+qivGnWHoB40hMMt/h1hSz0960Zqsn6ZyxWXUie0EBdElKv8may20AA==} + baseline-browser-mapping@2.9.9: + resolution: {integrity: sha512-V8fbOCSeOFvlDj7LLChUcqbZrdKD9RU/VR260piF1790vT0mfLSwGc/Qzxv3IqiTukOpNtItePa0HBpMAj7MDg==} hasBin: true basic-ftp@5.0.5: @@ -2537,9 +2515,6 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} @@ -2611,8 +2586,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001761: - resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==} + caniuse-lite@1.0.30001760: + resolution: {integrity: sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -2628,13 +2603,6 @@ packages: chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} - cheerio-select@2.1.0: - resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} - - cheerio@1.0.0-rc.11: - resolution: {integrity: sha512-bQwNaDIBKID5ts/DsdhxrjqFXYfLw4ste+wMKqWA8DyKcS4qwsPP4Bk8ZNaTJjvpiX/qW3BT4sU7d6Bh5i+dag==} - engines: {node: '>= 6'} - chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -2785,13 +2753,6 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - css-select@5.2.2: - resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} - - css-what@6.2.2: - resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} - engines: {node: '>= 6'} - csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -2897,19 +2858,6 @@ packages: dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} - dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} - - domutils@3.2.2: - resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - dotenv-cli@10.0.0: resolution: {integrity: sha512-lnOnttzfrzkRx2echxJHQRB6vOAMSCzzZg79IxpC00tU42wZPuZkQxNNrrwVAxaQZIIh001l4PxVlCrBxngBzA==} hasBin: true @@ -2966,14 +2914,6 @@ packages: end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - engines: {node: '>=0.12'} - error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} @@ -3173,6 +3113,9 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -3456,9 +3399,6 @@ packages: resolution: {integrity: sha512-QY6S+hZ0f5m1WT8WffYN+Hg+xm/w5I8XeUcAq/ZYP5wVC8xbKi4Whhru3FtrAebD5EhBW8rmFzkDI6eCAuFe2w==} hasBin: true - htmlparser2@8.0.2: - resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} - http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -3926,10 +3866,6 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - link-preview-js@3.2.0: - resolution: {integrity: sha512-FvrLltjOPGbTzt+RugbzM7g8XuUNLPO2U/INSLczrYdAA32E7nZVUrVL1gr61DGOArGJA2QkPGMEvNMLLsXREA==} - engines: {node: '>=18'} - load-esm@1.0.3: resolution: {integrity: sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA==} engines: {node: '>=13.2.0'} @@ -4190,9 +4126,6 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - oauth4webapi@3.8.3: resolution: {integrity: sha512-pQ5BsX3QRTgnt5HxgHwgunIRaDXBdkT23tf8dfzmtTIL2LTpdmxgbpbBm0VgFWAIDlezQvQCTgnVIUmHupXHxw==} @@ -4284,6 +4217,14 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + p-queue@9.0.1: + resolution: {integrity: sha512-RhBdVhSwJb7Ocn3e8ULk4NMwBEuOxe+1zcgphUy9c2e5aR/xbEsdVXxHJ3lynw6Qiqu7OINEyHlZkiblEpaq7w==} + engines: {node: '>=20'} + + p-timeout@7.0.1: + resolution: {integrity: sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==} + engines: {node: '>=20'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -4307,12 +4248,6 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} - parse5-htmlparser2-tree-adapter@7.1.0: - resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} - - parse5@7.3.0: - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -4523,9 +4458,6 @@ packages: pump@3.0.3: resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} - punycode@1.3.2: - resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -4544,11 +4476,6 @@ packages: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} - querystring@0.2.0: - resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} - engines: {node: '>=0.4.x'} - deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. - quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} @@ -5076,8 +5003,8 @@ packages: resolution: {integrity: sha512-bf6YKUv11l5Xfcmg76PyWoy/e2vbkkxFNBGJSnfdSXQC33ZiUfutYh6IXidc5MhsnrFkWfdNNLyaRk+kHMLlwA==} hasBin: true - twilio@5.11.1: - resolution: {integrity: sha512-LQuLrAwWk7dsu7S5JQWzLRe17qdD4/7OJcwZG6kYWMJILtxI7pXDHksu9DcIF/vKpSpL1F0/sA9uSF3xuVizMQ==} + twilio@5.10.7: + resolution: {integrity: sha512-pELNeyQqkJMW/UkbcdNGDfOjMyt1FXoYOKXBDqOViHmcdJ04cq8Ty3VsrEAabi97YesK3T2v5KP5XKPY8uUx9w==} engines: {node: '>=14.0'} type-check@0.4.0: @@ -5157,9 +5084,6 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - url@0.11.0: - resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} - use-sync-external-store@1.6.0: resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} peerDependencies: @@ -5301,8 +5225,6 @@ packages: snapshots: - '@adiwajshing/keyed-db@0.2.4': {} - '@auth/core@0.41.1': dependencies: '@panva/hkdf': 1.2.1 @@ -6891,10 +6813,6 @@ snapshots: '@types/long@4.0.2': {} - '@types/long@5.0.0': - dependencies: - long: 5.3.2 - '@types/ms@2.1.0': {} '@types/node@10.17.60': {} @@ -7091,23 +7009,21 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@whiskeysockets/baileys@6.7.21(link-preview-js@3.2.0)(sharp@0.34.5)': + '@whiskeysockets/baileys@7.0.0-rc.9(sharp@0.34.5)': dependencies: '@cacheable/node-cache': 1.7.6 '@hapi/boom': 9.1.4 async-mutex: 0.5.0 - axios: 1.13.2 libsignal: '@whiskeysockets/libsignal-node@https://codeload.github.com/whiskeysockets/libsignal-node/tar.gz/1c30d7d7e76a3b0aa120b04dc6a26f5a12dccf67' + lru-cache: 11.2.4 music-metadata: 11.10.3 + p-queue: 9.0.1 pino: 9.14.0 protobufjs: 7.5.4 sharp: 0.34.5 ws: 8.18.3 - optionalDependencies: - link-preview-js: 3.2.0 transitivePeerDependencies: - bufferutil - - debug - supports-color - utf-8-validate @@ -7314,7 +7230,7 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.9.10: {} + baseline-browser-mapping@2.9.9: {} basic-ftp@5.0.5: {} @@ -7324,8 +7240,6 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - boolbase@1.0.0: {} - brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 @@ -7341,8 +7255,8 @@ snapshots: browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.9.10 - caniuse-lite: 1.0.30001761 + baseline-browser-mapping: 2.9.9 + caniuse-lite: 1.0.30001760 electron-to-chromium: 1.5.267 node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) @@ -7402,7 +7316,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001761: {} + caniuse-lite@1.0.30001760: {} chalk@4.1.2: dependencies: @@ -7415,26 +7329,6 @@ snapshots: chardet@2.1.1: {} - cheerio-select@2.1.0: - dependencies: - boolbase: 1.0.0 - css-select: 5.2.2 - css-what: 6.2.2 - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - - cheerio@1.0.0-rc.11: - dependencies: - cheerio-select: 2.1.0 - dom-serializer: 2.0.0 - domhandler: 5.0.3 - domutils: 3.2.2 - htmlparser2: 8.0.2 - parse5: 7.3.0 - parse5-htmlparser2-tree-adapter: 7.1.0 - tslib: 2.8.1 - chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -7557,16 +7451,6 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-select@5.2.2: - dependencies: - boolbase: 1.0.0 - css-what: 6.2.2 - domhandler: 5.0.3 - domutils: 3.2.2 - nth-check: 2.1.1 - - css-what@6.2.2: {} - csstype@3.2.3: {} curve25519-js@0.0.4: {} @@ -7654,24 +7538,6 @@ snapshots: '@babel/runtime': 7.28.4 csstype: 3.2.3 - dom-serializer@2.0.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - entities: 4.5.0 - - domelementtype@2.3.0: {} - - domhandler@5.0.3: - dependencies: - domelementtype: 2.3.0 - - domutils@3.2.2: - dependencies: - dom-serializer: 2.0.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - dotenv-cli@10.0.0: dependencies: cross-spawn: 7.0.6 @@ -7730,10 +7596,6 @@ snapshots: dependencies: once: 1.4.0 - entities@4.5.0: {} - - entities@6.0.1: {} - error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 @@ -8047,6 +7909,8 @@ snapshots: esutils@2.0.3: {} + eventemitter3@5.0.1: {} + execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -8379,13 +8243,6 @@ snapshots: readable-stream: 1.0.34 through2: 0.4.2 - htmlparser2@8.0.2: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - entities: 4.5.0 - http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 @@ -9064,11 +8921,6 @@ snapshots: lines-and-columns@1.2.4: {} - link-preview-js@3.2.0: - dependencies: - cheerio: 1.0.0-rc.11 - url: 0.11.0 - load-esm@1.0.3: {} load-tsconfig@0.2.5: {} @@ -9257,7 +9109,7 @@ snapshots: dependencies: '@next/env': 15.5.9 '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001761 + caniuse-lite: 1.0.30001760 postcss: 8.4.31 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) @@ -9296,10 +9148,6 @@ snapshots: dependencies: path-key: 3.1.1 - nth-check@2.1.1: - dependencies: - boolbase: 1.0.0 - oauth4webapi@3.8.3: {} oauth@0.9.15: {} @@ -9412,6 +9260,13 @@ snapshots: dependencies: p-limit: 3.1.0 + p-queue@9.0.1: + dependencies: + eventemitter3: 5.0.1 + p-timeout: 7.0.1 + + p-timeout@7.0.1: {} + p-try@2.2.0: {} pac-proxy-agent@7.2.0: @@ -9445,15 +9300,6 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - parse5-htmlparser2-tree-adapter@7.1.0: - dependencies: - domhandler: 5.0.3 - parse5: 7.3.0 - - parse5@7.3.0: - dependencies: - entities: 6.0.1 - path-exists@4.0.0: {} path-is-absolute@1.0.1: {} @@ -9696,8 +9542,6 @@ snapshots: end-of-stream: 1.4.5 once: 1.4.0 - punycode@1.3.2: {} - punycode@2.3.1: {} pure-rand@7.0.1: {} @@ -9712,8 +9556,6 @@ snapshots: dependencies: side-channel: 1.1.0 - querystring@0.2.0: {} - quick-format-unescaped@4.0.4: {} react-cookie@8.0.1(@types/react@19.2.2)(react@19.2.0): @@ -10316,7 +10158,7 @@ snapshots: turbo-windows-64: 2.6.3 turbo-windows-arm64: 2.6.3 - twilio@5.11.1: + twilio@5.10.7: dependencies: axios: 1.13.2 dayjs: 1.11.19 @@ -10433,11 +10275,6 @@ snapshots: dependencies: punycode: 2.3.1 - url@0.11.0: - dependencies: - punycode: 1.3.2 - querystring: 0.2.0 - use-sync-external-store@1.6.0(react@19.2.0): dependencies: react: 19.2.0