diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f848a7f..8fcd82b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -20,11 +20,13 @@ build-all: - turbo build .docker-build: - image: registry.gitlab.com/digiresilience/link/link-stack/buildx:${CI_COMMIT_REF_NAME} + image: registry.gitlab.com/digiresilience/link/link-stack/buildx:main services: - docker:dind stage: docker-build variables: + DOCKER_HOST: tcp://docker:2375 + DOCKER_TLS_CERTDIR: "" DOCKER_TAG: ${CI_COMMIT_SHORT_SHA} BUILD_CONTEXT: . only: @@ -37,11 +39,13 @@ build-all: - docker push ${DOCKER_NS}:${DOCKER_TAG} .docker-release: - image: registry.gitlab.com/digiresilience/link/link-stack/buildx:${CI_COMMIT_REF_NAME} + image: registry.gitlab.com/digiresilience/link/link-stack/buildx:main 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: @@ -195,6 +199,7 @@ 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 @@ -217,6 +222,7 @@ 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 54c6511..32cfab6 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v24 +v22.18.0 diff --git a/apps/bridge-frontend/package.json b/apps/bridge-frontend/package.json index 261b807..028641a 100644 --- a/apps/bridge-frontend/package.json +++ b/apps/bridge-frontend/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/bridge-frontend", - "version": "3.4.0-beta.3", + "version": "3.3.5", "type": "module", "scripts": { "dev": "next dev", diff --git a/apps/bridge-migrations/package.json b/apps/bridge-migrations/package.json index 97b7865..b6740ce 100644 --- a/apps/bridge-migrations/package.json +++ b/apps/bridge-migrations/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/bridge-migrations", - "version": "3.4.0-beta.3", + "version": "3.3.5", "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 cb2d470..cef6520 100644 --- a/apps/bridge-whatsapp/package.json +++ b/apps/bridge-whatsapp/package.json @@ -1,29 +1,33 @@ { "name": "@link-stack/bridge-whatsapp", - "version": "3.4.0-beta.3", - "type": "module", + "version": "3.3.5", "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": "7.0.0-rc.9", - "hapi-pino": "^13.0.0" + "@whiskeysockets/baileys": "6.7.21", + "hapi-pino": "^13.0.0", + "link-preview-js": "^3.1.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": "node --env-file=.env --experimental-transform-types src/index.ts", + "dev": "dotenv -- tsx 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 bd255ff..5be8763 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.ts"; +import WhatsappService from "./service.js"; import { RegisterBotRoute, UnverifyBotRoute, GetBotRoute, SendMessageRoute, ReceiveMessageRoute, -} from "./routes.ts"; +} from "./routes.js"; 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 7315020..1d9caf6 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.ts"; +import WhatsappService from "./service"; const withDefaults = Toys.withRouteDefaults({ options: { @@ -27,9 +27,15 @@ 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 41450cc..69a1895 100644 --- a/apps/bridge-whatsapp/src/service.ts +++ b/apps/bridge-whatsapp/src/service.ts @@ -4,13 +4,12 @@ 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 { @@ -98,7 +97,6 @@ export default class WhatsappService extends Service { ...options, auth: state, generateHighQualityLinkPreview: false, - syncFullHistory: true, msgRetryCounterMap, shouldIgnoreJid: (jid) => isJidBroadcast(jid) || isJidStatusBroadcast(jid), }); @@ -149,17 +147,6 @@ 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 }; @@ -180,6 +167,7 @@ export default class WhatsappService extends Service { await this.createConnection(botID, this.server, { browser: WhatsappService.browserDescription, + printQRInTerminal: true, version, }); } @@ -187,12 +175,11 @@ export default class WhatsappService extends Service { } private async queueMessage(botID: string, webMessageInfo: proto.IWebMessageInfo) { - const { key, message, messageTimestamp } = webMessageInfo; - if (!key) { - logger.warn("Message missing key, skipping"); - return; - } - const { id, fromMe, remoteJid } = key; + const { + key: { id, fromMe, remoteJid }, + message, + messageTimestamp, + } = webMessageInfo; 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 dc6d4fb..231a804 100644 --- a/apps/bridge-whatsapp/src/types.ts +++ b/apps/bridge-whatsapp/src/types.ts @@ -1,4 +1,4 @@ -import type WhatsappService from "./service.ts"; +import type WhatsappService from "./service.js"; declare module "@hapipal/schmervice" { interface SchmerviceDecorator { diff --git a/apps/bridge-whatsapp/tsconfig.json b/apps/bridge-whatsapp/tsconfig.json index dce4015..4b714ce 100644 --- a/apps/bridge-whatsapp/tsconfig.json +++ b/apps/bridge-whatsapp/tsconfig.json @@ -1,17 +1,16 @@ { "extends": "@link-stack/typescript-config/tsconfig.node.json", "compilerOptions": { - "module": "NodeNext", - "target": "es2022", + "module": "commonjs", + "target": "es2018", "esModuleInterop": true, - "moduleResolution": "NodeNext", + "moduleResolution": "node", "outDir": "build/main", "rootDir": "src", "skipLibCheck": true, "types": ["node"], - "lib": ["es2022", "DOM"], - "composite": true, - "rewriteRelativeImportExtensions": true + "lib": ["es2020", "DOM"], + "composite": true }, "include": ["src/**/*.ts", "src/**/.*.ts"], "exclude": ["node_modules/**"] diff --git a/apps/bridge-worker/package.json b/apps/bridge-worker/package.json index aa1d514..670d742 100644 --- a/apps/bridge-worker/package.json +++ b/apps/bridge-worker/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/bridge-worker", - "version": "3.4.0-beta.3", + "version": "3.3.5", "type": "module", "main": "build/main/index.js", "author": "Darren Clarke ", diff --git a/apps/link/package.json b/apps/link/package.json index 78bf56d..1f15196 100644 --- a/apps/link/package.json +++ b/apps/link/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/link", - "version": "3.4.0-beta.3", + "version": "3.3.5", "type": "module", "scripts": { "dev": "next dev -H 0.0.0.0", diff --git a/docker/buildx/Dockerfile b/docker/buildx/Dockerfile index 28679d2..dc394b5 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 symlinks already copied from node image) +# Prepare pnpm (corepack is already enabled in node:22-alpine) 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 5f3e090..3d6e278 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", "bridge-whatsapp"], + all: ["zammad", "postgresql", "bridge", "opensearch", "link", "signal-cli-rest-api"], linkDev: ["zammad", "postgresql", "opensearch"], link: ["zammad", "postgresql", "opensearch", "link"], linkOnly: ["link"], opensearch: ["opensearch"], - bridgeDev: ["zammad", "postgresql", "signal-cli-rest-api", "bridge-whatsapp"], - bridge: ["zammad", "postgresql", "bridge", "signal-cli-rest-api", "bridge-whatsapp"], + bridgeDev: ["zammad", "postgresql", "signal-cli-rest-api"], + bridge: ["zammad", "postgresql", "bridge", "signal-cli-rest-api"], 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']; +const devAppsWithZammad = ['linkDev', 'bridgeDev', 'all']; 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 d0bea60..0a59707 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack", - "version": "3.4.0-beta.3", + "version": "3.3.5", "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.6.0", + "turbo": "^2.5.8", "typescript": "latest" }, "pnpm": { diff --git a/packages/bridge-common/package.json b/packages/bridge-common/package.json index 341795f..91b9696 100644 --- a/packages/bridge-common/package.json +++ b/packages/bridge-common/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/bridge-common", - "version": "3.4.0-beta.3", + "version": "3.3.5", "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 6883997..2e4d6fa 100644 --- a/packages/bridge-ui/package.json +++ b/packages/bridge-ui/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/bridge-ui", - "version": "3.4.0-beta.3", + "version": "3.3.5", "scripts": { "build": "tsc -p tsconfig.json" }, diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index cd821a8..c579d56 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/eslint-config", - "version": "3.4.0-beta.3", + "version": "3.3.5", "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 ee69dfd..591a33a 100644 --- a/packages/jest-config/package.json +++ b/packages/jest-config/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/jest-config", - "version": "3.4.0-beta.3", + "version": "3.3.5", "description": "", "main": "index.js", "author": "Abel Luck ", diff --git a/packages/logger/package.json b/packages/logger/package.json index 05c5d73..cda0e71 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/logger", - "version": "3.4.0-beta.3", + "version": "3.3.5", "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 6ca7e55..0905a16 100644 --- a/packages/signal-api/package.json +++ b/packages/signal-api/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/signal-api", - "version": "3.4.0-beta.3", + "version": "3.3.5", "type": "module", "main": "build/index.js", "exports": { diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index 9a6367b..98021b8 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/typescript-config", - "version": "3.4.0-beta.3", + "version": "3.3.5", "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 c7aaed1..a12655e 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@link-stack/ui", - "version": "3.4.0-beta.3", + "version": "3.3.5", "description": "", "scripts": { "build": "tsc -p tsconfig.json" diff --git a/packages/zammad-addon-bridge/package.json b/packages/zammad-addon-bridge/package.json index b7d978b..a7ef115 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.4.0-beta.3", + "version": "3.3.5", "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 45f32f6..2b3c510 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.4.0-beta.3", + "version": "3.3.5", "description": "", "bin": { "zpm-build": "./dist/build.js", diff --git a/packages/zammad-addon-hardening/package.json b/packages/zammad-addon-hardening/package.json index 047b9c9..725472b 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.4.0-beta.3", + "version": "3.3.5", "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 142bbfa..647ef91 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.6.0 + specifier: ^2.5.8 version: 2.6.3 typescript: specifier: latest @@ -146,6 +146,9 @@ 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 @@ -162,11 +165,14 @@ importers: specifier: workspace:* version: link:../../packages/logger '@whiskeysockets/baileys': - specifier: 7.0.0-rc.9 - version: 7.0.0-rc.9(sharp@0.34.5) + specifier: 6.7.21 + version: 6.7.21(link-preview-js@3.2.0)(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:* @@ -177,9 +183,18 @@ 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 @@ -209,7 +224,7 @@ importers: version: 2.32.0 twilio: specifier: ^5.10.2 - version: 5.10.7 + version: 5.11.1 devDependencies: '@link-stack/eslint-config': specifier: workspace:* @@ -574,6 +589,9 @@ 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: @@ -2126,6 +2144,10 @@ 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==} @@ -2329,8 +2351,8 @@ packages: cpu: [x64] os: [win32] - '@whiskeysockets/baileys@7.0.0-rc.9': - resolution: {integrity: sha512-YFm5gKXfDP9byCXCW3OPHKXLzrAKzolzgVUlRosHHgwbnf2YOO3XknkMm6J7+F0ns8OA0uuSBhgkRHTDtqkacw==} + '@whiskeysockets/baileys@6.7.21': + resolution: {integrity: sha512-xx9OHd6jlPiu5yZVuUdwEgFNAOXiEG8sULHxC6XfzNwssnwxnA9Lp44pR05H621GQcKyCfsH33TGy+Na6ygX4w==} engines: {node: '>=20.0.0'} peerDependencies: audio-decode: ^2.1.3 @@ -2504,8 +2526,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.9.9: - resolution: {integrity: sha512-V8fbOCSeOFvlDj7LLChUcqbZrdKD9RU/VR260piF1790vT0mfLSwGc/Qzxv3IqiTukOpNtItePa0HBpMAj7MDg==} + baseline-browser-mapping@2.9.10: + resolution: {integrity: sha512-2VIKvDx8Z1a9rTB2eCkdPE5nSe28XnA+qivGnWHoB40hMMt/h1hSz0960Zqsn6ZyxWXUie0EBdElKv8may20AA==} hasBin: true basic-ftp@5.0.5: @@ -2515,6 +2537,9 @@ 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==} @@ -2586,8 +2611,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001760: - resolution: {integrity: sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==} + caniuse-lite@1.0.30001761: + resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -2603,6 +2628,13 @@ 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'} @@ -2753,6 +2785,13 @@ 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==} @@ -2858,6 +2897,19 @@ 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 @@ -2914,6 +2966,14 @@ 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==} @@ -3113,9 +3173,6 @@ 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'} @@ -3399,6 +3456,9 @@ 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'} @@ -3866,6 +3926,10 @@ 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'} @@ -4126,6 +4190,9 @@ 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==} @@ -4217,14 +4284,6 @@ 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'} @@ -4248,6 +4307,12 @@ 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'} @@ -4458,6 +4523,9 @@ 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'} @@ -4476,6 +4544,11 @@ 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==} @@ -5003,8 +5076,8 @@ packages: resolution: {integrity: sha512-bf6YKUv11l5Xfcmg76PyWoy/e2vbkkxFNBGJSnfdSXQC33ZiUfutYh6IXidc5MhsnrFkWfdNNLyaRk+kHMLlwA==} hasBin: true - twilio@5.10.7: - resolution: {integrity: sha512-pELNeyQqkJMW/UkbcdNGDfOjMyt1FXoYOKXBDqOViHmcdJ04cq8Ty3VsrEAabi97YesK3T2v5KP5XKPY8uUx9w==} + twilio@5.11.1: + resolution: {integrity: sha512-LQuLrAwWk7dsu7S5JQWzLRe17qdD4/7OJcwZG6kYWMJILtxI7pXDHksu9DcIF/vKpSpL1F0/sA9uSF3xuVizMQ==} engines: {node: '>=14.0'} type-check@0.4.0: @@ -5084,6 +5157,9 @@ 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: @@ -5225,6 +5301,8 @@ packages: snapshots: + '@adiwajshing/keyed-db@0.2.4': {} + '@auth/core@0.41.1': dependencies: '@panva/hkdf': 1.2.1 @@ -6813,6 +6891,10 @@ 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': {} @@ -7009,21 +7091,23 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@whiskeysockets/baileys@7.0.0-rc.9(sharp@0.34.5)': + '@whiskeysockets/baileys@6.7.21(link-preview-js@3.2.0)(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 @@ -7230,7 +7314,7 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.9.9: {} + baseline-browser-mapping@2.9.10: {} basic-ftp@5.0.5: {} @@ -7240,6 +7324,8 @@ 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 @@ -7255,8 +7341,8 @@ snapshots: browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.9.9 - caniuse-lite: 1.0.30001760 + baseline-browser-mapping: 2.9.10 + caniuse-lite: 1.0.30001761 electron-to-chromium: 1.5.267 node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) @@ -7316,7 +7402,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001760: {} + caniuse-lite@1.0.30001761: {} chalk@4.1.2: dependencies: @@ -7329,6 +7415,26 @@ 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 @@ -7451,6 +7557,16 @@ 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: {} @@ -7538,6 +7654,24 @@ 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 @@ -7596,6 +7730,10 @@ 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 @@ -7909,8 +8047,6 @@ snapshots: esutils@2.0.3: {} - eventemitter3@5.0.1: {} - execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -8243,6 +8379,13 @@ 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 @@ -8921,6 +9064,11 @@ 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: {} @@ -9109,7 +9257,7 @@ snapshots: dependencies: '@next/env': 15.5.9 '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001760 + caniuse-lite: 1.0.30001761 postcss: 8.4.31 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) @@ -9148,6 +9296,10 @@ 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: {} @@ -9260,13 +9412,6 @@ 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: @@ -9300,6 +9445,15 @@ 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: {} @@ -9542,6 +9696,8 @@ snapshots: end-of-stream: 1.4.5 once: 1.4.0 + punycode@1.3.2: {} + punycode@2.3.1: {} pure-rand@7.0.1: {} @@ -9556,6 +9712,8 @@ 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): @@ -10158,7 +10316,7 @@ snapshots: turbo-windows-64: 2.6.3 turbo-windows-arm64: 2.6.3 - twilio@5.10.7: + twilio@5.11.1: dependencies: axios: 1.13.2 dayjs: 1.11.19 @@ -10275,6 +10433,11 @@ 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